32 {
33
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
42
43 const float width = 88.0;
44 const float height = 180.0;
45 const float channelSide = 11.0;
46 const float pitch = 2.0*channelSide;
47 const float faceDepth = 10.0;
48 const float alPlateDepth = 14.5;
49 const float innerPlateDepth = 25.5;
50 const float rodDia = 10.0;
51 const float depth = 2.0 *(faceDepth + alPlateDepth + innerPlateDepth);
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
64 GeoFullPhysVol *Cu_Body_Physical = new GeoFullPhysVol(Cu_Body_Logical);
65
66
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
77 GeoFullPhysVol *Air_Channel_Pyisical = new GeoFullPhysVol(Air_Channel_Logical);
78 Air_Channel_Pyisical->add(new GeoNameTag(rodName));
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
86
87
88
89
90
91
92 for(int i : {-1,1}){
93
94
95
96 Cu_Body_Physical->add(new GeoNameTag(airName));
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
103
104 Cu_Body_Physical->add(new GeoNameTag(aluName));
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
112
113 Cu_Body_Physical->add(new GeoNameTag(airName));
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
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}
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
std::string depth
tag string for intendation
IMessageSvc * getMessageSvc(bool quiet=false)