ATLAS Offline Software
Loading...
Searching...
No Matches
ZDC_BRANModule Class Reference

#include <ZDC_BRANModule.h>

Inheritance diagram for ZDC_BRANModule:
Collaboration diagram for ZDC_BRANModule:

Public Member Functions

virtual ~ZDC_BRANModule ()=default
virtual void create (GeoFullPhysVol *mother, StoredMaterialManager *materialManager, const ZdcID *zdcID) override
 ZDC_ModuleBase ()
 ZDC_ModuleBase (const std::string &name, int side, int module)
 ZDC_ModuleBase (ZDC_ModuleBase *right, int side, int module)
void setTransform (const GeoTrf::Transform3D trf)
const int & getSide () const
const int & getModule () const
const std::string & getName () const
const GeoTrf::Transform3D & getTransform () const

Protected Attributes

int m_side {}
int m_module {}
std::string m_name
GeoTrf::Transform3D m_trf {}

Detailed Description

Definition at line 10 of file ZDC_BRANModule.h.

Constructor & Destructor Documentation

◆ ~ZDC_BRANModule()

virtual ZDC_BRANModule::~ZDC_BRANModule ( )
virtualdefault

Member Function Documentation

◆ create()

void ZDC_BRANModule::create ( GeoFullPhysVol * mother,
StoredMaterialManager * materialManager,
const ZdcID * zdcID )
overridevirtual

Implements ZDC_ModuleBase.

Definition at line 32 of file ZDC_BRANModule.cxx.

32 {
33
34 MsgStream LogStream(Athena::getMessageSvc(), "ZDC_ZDCModule::create");
35
36 const GeoMaterial *OpAir = materialManager->getMaterial("ZDC::opticalAir" );
37 const GeoMaterial *OpSilica = materialManager->getMaterial("ZDC::opticalSilica");
38 const GeoMaterial *copper = materialManager->getMaterial("std::Copper" );
39 const GeoMaterial *aluminum = materialManager->getMaterial("std::Aluminium" );
40
41 // geometric constants. All units are in millimeters unless otherwise specified.
42 // All dimensions are gathered from technical drawings available at TODO: insert link to tech drawings
43 const float width = 88.0; // x dimension of the module
44 const float height = 180.0; // y dimension of the module
45 const float channelSide = 11.0; // side dimension of the silica rod channels
46 const float pitch = 2.0*channelSide; // distance between adjacent silica rod channels
47 const float faceDepth = 10.0; // z depth of the front and back faces
48 const float alPlateDepth = 14.5; // z depth of the aluminum plates
49 const float innerPlateDepth = 25.5; // z depth of the inner plates
50 const float rodDia = 10.0; // diameter of the silica rods
51 const float depth = 2.0 *(faceDepth + alPlateDepth + innerPlateDepth); // y dimension of the module
52
53 GeoBox *Cu_Body = new GeoBox (width * Gaudi::Units::mm * 0.5, height * Gaudi::Units::mm * 0.5, depth * Gaudi::Units::mm * 0.5 );
54 GeoBox *Al_Plate = new GeoBox (width * Gaudi::Units::mm * 0.5, height * Gaudi::Units::mm * 0.5, alPlateDepth * Gaudi::Units::mm * 0.5 );
55 GeoBox *Air_Channel = new GeoBox (channelSide * Gaudi::Units::mm * 0.5, height * Gaudi::Units::mm * 0.5, channelSide * Gaudi::Units::mm * 0.5 );
56 GeoTube *Silica_Rod = new GeoTube (0.0 * Gaudi::Units::mm , rodDia * Gaudi::Units::mm * 0.5, height * Gaudi::Units::mm * 0.5 );
57
58 GeoLogVol *Cu_Body_Logical = new GeoLogVol("BRAN_Cu_Body_Logical" , Cu_Body , copper );
59 GeoLogVol *Al_Plate_Logical = new GeoLogVol("BRAN_Al_Plate_Logical" , Al_Plate , aluminum);
60 GeoLogVol *Air_Channel_Logical = new GeoLogVol("BRAN_Air_Channel_Logical" , Air_Channel , OpAir );
61 GeoLogVol *Silica_Rod_Logical = new GeoLogVol("BRAN_Rod_Logical" , Silica_Rod , OpSilica);
62
63 // Create the copper body
64 GeoFullPhysVol *Cu_Body_Physical = new GeoFullPhysVol(Cu_Body_Logical);
65
66 //Create the IDs and names here since we aren't doing any channel separation
70
71 char airName[64], rodName[64], aluName[64];
72 sprintf(airName, "ZDC::BRAN_Air %s", airID.getString().c_str());
73 sprintf(aluName, "ZDC::BRAN_Alu %s", aluID.getString().c_str());
74 sprintf(rodName, "ZDC::BRAN_Rod %s", rodID.getString().c_str());
75
76 //Assemble the silica rods in the air channels
77 GeoFullPhysVol *Air_Channel_Pyisical = new GeoFullPhysVol(Air_Channel_Logical);
78 Air_Channel_Pyisical->add(new GeoNameTag(rodName));
79 Air_Channel_Pyisical->add(new GeoIdentifierTag(rodID.get_identifier32().get_compact()));
80 Air_Channel_Pyisical->add(new GeoAlignableTransform(GeoTrf::RotateX3D(90 * Gaudi::Units::deg)));
81 Air_Channel_Pyisical->add(new GeoFullPhysVol(Silica_Rod_Logical));
82
83 GeoFullPhysVol *Al_Plate_Physical = new GeoFullPhysVol(Al_Plate_Logical);
84
85 /*This is a strange loop but the arrangement of the rods is
86 * ----------------------------------
87 * | {-1,-1} {-1,0} {-1,1} |
88 * | {-1} {1} |
89 * | {1,-1} {1,0} {1,1} |
90 * ----------------------------------
91 */
92 for(int i : {-1,1}){
93 /*************************************************
94 * Place the inner air channels with silica included
95 **************************************************/
96 Cu_Body_Physical->add(new GeoNameTag(airName));
97 Cu_Body_Physical->add(new GeoIdentifierTag(airID.get_identifier32().get_compact()));
98 Cu_Body_Physical->add(new GeoAlignableTransform(GeoTrf::TranslateX3D( i * channelSide * Gaudi::Units::mm)));
99 Cu_Body_Physical->add(Air_Channel_Pyisical);
100
101 /*************************************************
102 * Place the aluminum plates
103 **************************************************/
104 Cu_Body_Physical->add(new GeoNameTag(aluName));
105 Cu_Body_Physical->add(new GeoIdentifierTag(aluID.get_identifier32().get_compact()));
106 Cu_Body_Physical->add(new GeoAlignableTransform(GeoTrf::TranslateZ3D( i * (innerPlateDepth + alPlateDepth * 0.5) * Gaudi::Units::mm)));
107 Cu_Body_Physical->add(Al_Plate_Physical);
108
109 for(int j : {-1,0,1}){
110 /*************************************************
111 * Place the outter air channels
112 **************************************************/
113 Cu_Body_Physical->add(new GeoNameTag(airName));
114 Cu_Body_Physical->add(new GeoIdentifierTag(airID.get_identifier32().get_compact()));
115 Cu_Body_Physical->add(new GeoAlignableTransform(GeoTrf::Translate3D( j * pitch * Gaudi::Units::mm, 0.0, i * (innerPlateDepth - channelSide) * Gaudi::Units::mm )));
116 Cu_Body_Physical->add(Air_Channel_Pyisical);
117 }
118 }
119
120 // Place the copper body in the mother volume
121 char volName[64];
123 sprintf(volName, "Zdc::BRAN_Mod %s", id.getString().c_str());
124 mother->add(new GeoNameTag(volName));
125 mother->add(new GeoIdentifierTag(id.get_identifier32().get_compact()));
126 mother->add(new GeoAlignableTransform(m_trf));
127 mother->add(Cu_Body_Physical);
128
129}
const double width
@ ACTIVE
Definition ZdcID.h:21
@ INACTIVE
Definition ZdcID.h:21
@ AIR
Definition ZdcID.h:22
@ HOUSING
Definition ZdcID.h:22
@ READOUT
Definition ZdcID.h:22
value_type get_compact() const
Get the compact id.
std::string getString() const
Provide a string form of the identifier - hexadecimal.
Identifier32 get_identifier32() const
Get the 32-bit version Identifier, will be invalid if >32 bits needed.
virtual const GeoMaterial * getMaterial(const std::string &name)=0
GeoTrf::Transform3D m_trf
Identifier channel_id(int side, int module, int type, int channel) const
Definition ZdcID.h:205
std::string depth
tag string for intendation
Definition fastadd.cxx:46
IMessageSvc * getMessageSvc(bool quiet=false)

◆ getModule()

const int & ZDC_ModuleBase::getModule ( ) const
inlineinherited

Definition at line 41 of file ZDC_ModuleBase.h.

41{return m_module;}

◆ getName()

const std::string & ZDC_ModuleBase::getName ( ) const
inlineinherited

Definition at line 42 of file ZDC_ModuleBase.h.

42{return m_name;}
std::string m_name

◆ getSide()

const int & ZDC_ModuleBase::getSide ( ) const
inlineinherited

Definition at line 40 of file ZDC_ModuleBase.h.

40{return m_side;}

◆ getTransform()

const GeoTrf::Transform3D & ZDC_ModuleBase::getTransform ( ) const
inlineinherited

Definition at line 43 of file ZDC_ModuleBase.h.

43{return m_trf;}

◆ setTransform()

void ZDC_ModuleBase::setTransform ( const GeoTrf::Transform3D trf)
inlineinherited

Definition at line 38 of file ZDC_ModuleBase.h.

◆ ZDC_ModuleBase() [1/3]

ZDC_ModuleBase::ZDC_ModuleBase ( )
inline

Definition at line 20 of file ZDC_ModuleBase.h.

20{m_side = 0; m_module = -1;}

◆ ZDC_ModuleBase() [2/3]

ZDC_ModuleBase::ZDC_ModuleBase ( const std::string & name,
int side,
int module )
inline

Definition at line 21 of file ZDC_ModuleBase.h.

22 : m_side( side ),
23 m_module( module ),
24 m_name( name ),
25 m_trf( GeoTrf::Transform3D() )
26 {}

◆ ZDC_ModuleBase() [3/3]

ZDC_ModuleBase::ZDC_ModuleBase ( ZDC_ModuleBase * right,
int side,
int module )
inline

Definition at line 28 of file ZDC_ModuleBase.h.

29 : m_side( side ),
30 m_module( module ),
31 m_name( right->m_name ),
32 m_trf( right->m_trf )
33 {}

Member Data Documentation

◆ m_module

int ZDC_ModuleBase::m_module {}
protectedinherited

Definition at line 48 of file ZDC_ModuleBase.h.

48{};

◆ m_name

std::string ZDC_ModuleBase::m_name
protectedinherited

Definition at line 49 of file ZDC_ModuleBase.h.

◆ m_side

int ZDC_ModuleBase::m_side {}
protectedinherited

Definition at line 47 of file ZDC_ModuleBase.h.

47{};

◆ m_trf

GeoTrf::Transform3D ZDC_ModuleBase::m_trf {}
protectedinherited

Definition at line 50 of file ZDC_ModuleBase.h.

50{};

The documentation for this class was generated from the following files: