98{
99
101 auto air = G4Material::GetMaterial("G4_AIR");
102
103 auto argonGas = G4Material::GetMaterial("G4_Ar");
104 auto scintillator = G4Material::GetMaterial("G4_PLASTIC_SC_VINYLTOLUENE");
105 auto csI = G4Material::GetMaterial("G4_CESIUM_IODIDE");
106 auto lead = G4Material::GetMaterial("G4_Pb");
107
108
109
110 G4bool checkOverlaps = true;
111
112
113
114 auto worldSolid
115 =
new G4Box(
"worldBox",10.*m,3.*m,10.*m);
116 auto worldLogical
119 nullptr, G4ThreeVector(), worldLogical, "worldPhysical", nullptr, false, 0, checkOverlaps);
120
121
122
123 auto magneticSolid
124 =
new G4Tubs(
"magneticTubs",0.,1.*m,1.*m,0.,360.*deg);
125
128
129
130
131 auto fieldRot = new G4RotationMatrix();
132 fieldRot->rotateX(90.*deg);
134 "magneticPhysical",worldLogical,
135 false,0,checkOverlaps);
136
137
140
141
142 auto firstArmSolid
143 =
new G4Box(
"firstArmBox",1.5*m,1.*m,3.*m);
144 auto firstArmLogical
146 new G4PVPlacement(
nullptr, G4ThreeVector(0., 0., -5. * m), firstArmLogical,
"firstArmPhysical",
147 worldLogical, false, 0, checkOverlaps);
148
149
150 auto secondArmSolid
151 =
new G4Box(
"secondArmBox",2.*m,2.*m,3.5*m);
152 auto secondArmLogical
158 "fSecondArmPhys",worldLogical,
159 false,0,checkOverlaps);
160
161
162 auto hodoscope1Solid
163 =
new G4Box(
"hodoscope1Box",5.*cm,20.*cm,0.5*cm);
165 =
new G4LogicalVolume(hodoscope1Solid,scintillator,
"hodoscope1Logical");
166
170 "hodoscope1Physical", firstArmLogical, false, i, checkOverlaps);
171 }
172
173
174 auto chamber1Solid
175 =
new G4Box(
"chamber1Box",1.*m,30.*cm,1.*cm);
176 auto chamber1Logical
178
181 new G4PVPlacement(
nullptr, G4ThreeVector(0., 0., z1), chamber1Logical,
"chamber1Physical",
182 firstArmLogical, false, i, checkOverlaps);
183 }
184
185
186 auto wirePlane1Solid
187 =
new G4Box(
"wirePlane1Box",1.*m,30.*cm,0.1*mm);
191 chamber1Logical, false, 0, checkOverlaps);
192
193
194 auto hodoscope2Solid
195 =
new G4Box(
"hodoscope2Box",5.*cm,20.*cm,0.5*cm);
197 =
new G4LogicalVolume(hodoscope2Solid,scintillator,
"hodoscope2Logical");
198
202 "hodoscope2Physical", secondArmLogical, false, i, checkOverlaps);
203 }
204
205
206 auto chamber2Solid
207 =
new G4Box(
"chamber2Box",1.5*m,30.*cm,1.*cm);
208 auto chamber2Logical
210
213 new G4PVPlacement(
nullptr, G4ThreeVector(0., 0., z2), chamber2Logical,
"chamber2Physical",
214 secondArmLogical, false, i, checkOverlaps);
215 }
216
217
218 auto wirePlane2Solid
219 =
new G4Box(
"wirePlane2Box",1.5*m,30.*cm,0.1*mm);
223 chamber2Logical, false, 0, checkOverlaps);
224
225
226 auto emCalorimeterSolid
227 =
new G4Box(
"EMcalorimeterBox",1.5*m,30.*cm,15.*cm);
228 auto emCalorimeterLogical
230 new G4PVPlacement(
nullptr, G4ThreeVector(0., 0., 2. * m), emCalorimeterLogical,
231 "EMcalorimeterPhysical", secondArmLogical, false, 0, checkOverlaps);
232
233
234 auto cellSolid
235 =
new G4Box(
"cellBox",7.5*cm,7.5*cm,15.*cm);
241
242
243 auto hadCalorimeterSolid
244 =
new G4Box(
"HadCalorimeterBox",1.5*m,30.*cm,50.*cm);
245 auto hadCalorimeterLogical
246 =
new G4LogicalVolume(hadCalorimeterSolid,lead,
"HadCalorimeterLogical");
247 new G4PVPlacement(
nullptr, G4ThreeVector(0., 0., 3. * m), hadCalorimeterLogical,
248 "HadCalorimeterPhysical", secondArmLogical, false, 0, checkOverlaps);
249
250
251 auto HadCalColumnSolid
252 =
new G4Box(
"HadCalColumnBox",15.*cm,30.*cm,50.*cm);
253 auto HadCalColumnLogical
255 new G4PVReplica(
"HadCalColumnPhysical",HadCalColumnLogical,
257
258
259 auto HadCalCellSolid
260 =
new G4Box(
"HadCalCellBox",15.*cm,15.*cm,50.*cm);
261 auto HadCalCellLogical
263 new G4PVReplica(
"HadCalCellPhysical",HadCalCellLogical,
265
266
267 auto HadCalLayerSolid
268 =
new G4Box(
"HadCalLayerBox",15.*cm,15.*cm,2.5*cm);
269 auto HadCalLayerLogical
271 new G4PVReplica(
"HadCalLayerPhysical",HadCalLayerLogical,
273
274
275 auto HadCalScintiSolid
276 =
new G4Box(
"HadCalScintiBox",15.*cm,15.*cm,0.5*cm);
279 "HadCalScintiLogical");
281 "HadCalScintiPhysical", HadCalLayerLogical, false, 0, checkOverlaps);
282
283
284
294
295 worldLogical->SetVisAttributes(invisible);
296 firstArmLogical->SetVisAttributes(invisible);
297 secondArmLogical->SetVisAttributes(invisible);
298
302
303 chamber1Logical->SetVisAttributes(green);
304 chamber2Logical->SetVisAttributes(green);
307
308 emCalorimeterLogical->SetVisAttributes(invisibleYellow);
310
311 hadCalorimeterLogical->SetVisAttributes(blue);
312 HadCalColumnLogical->SetVisAttributes(invisibleBlue);
313 HadCalCellLogical->SetVisAttributes(invisibleBlue);
314 HadCalLayerLogical->SetVisAttributes(invisibleBlue);
316
317
318
319 return worldPhysical;
320}
G4LogicalVolume * fCellLogical
G4LogicalVolume * fHadCalScintiLogical
G4LogicalVolume * fWirePlane1Logical
void ConstructMaterials()
G4LogicalVolume * fHodoscope1Logical
G4LogicalVolume * fMagneticLogical
G4LogicalVolume * fWirePlane2Logical
G4LogicalVolume * fHodoscope2Logical
G4VPhysicalVolume * fSecondArmPhys
constexpr G4int kNofChambers
constexpr G4int kNofHodoscopes2
constexpr G4int kNofHadCells
constexpr G4int kNofEmCells
constexpr G4int kNofHadRows
constexpr G4int kNofHodoscopes1
constexpr G4int kNofHadColumns