36#include "BesCgemConstruction.hh"
37#include "BesCgemSD.hh"
38#include "ReadBoostRoot.hh"
39#include "BesCgemSliceParametrization.hh"
43#include "G4NistManager.hh"
44#include "G4UnitsTable.hh"
48#include "G4UnionSolid.hh"
49#include "G4LogicalVolume.hh"
50#include "G4PVPlacement.hh"
51#include "G4PVReplica.hh"
52#include "G4SDManager.hh"
53#include "G4VisAttributes.hh"
55#include "G4FieldManager.hh"
56#include "G4TransportationManager.hh"
57#include "G4PVParameterised.hh"
59#include "GaudiKernel/ISvcLocator.h"
60#include "GaudiKernel/Bootstrap.h"
73 : m_CheckOverlaps(
true), m_CreateHole(
false)
76 Gaudi::svcLocator() -> service(
"MessageSvc",
msgSvc);
77 MsgStream log(
msgSvc,
"BesCgemConstruction::BesCgemConstruction(): initialization of the geometry service");
79 ISvcLocator* svcLocator = Gaudi::svcLocator();
81 StatusCode sc=svcLocator->service(
"CgemGeomSvc", ISvc);
84 if (!sc.isSuccess()) log<< MSG::INFO <<
"BesCgemConsruction::BesCgemConstruction(): could not open geometry file" << endreq;
98 Gaudi::svcLocator() -> service(
"MessageSvc",
msgSvc);
99 MsgStream log(
msgSvc,
"BesCgemConstruction::Construct()");
102 G4LogicalVolume *logicContainer = NULL; cout <<
"logicBes daughters " << logicBes->GetNoDaughters() << endl;
104 for(
int i=0; i<logicBes->GetNoDaughters(); i++) {
105 G4VPhysicalVolume *daughter = logicBes->GetDaughter(i);
106 if(daughter->GetName()==
"physicalMdc") {
107 logicContainer = daughter->GetLogicalVolume();
110 if(logicContainer == NULL) {
111 log<< MSG::INFO <<
"BesCgemConstruction::Construct, CGEM must stay inside MDC mother volume, you must build MDC!" << endreq;
112 cout<<
"BesCgemConstruction::Construct, MDC not built --> put CGEM in WORLD" << endl;
113 logicContainer= logicBes;
115 else cout<<
"BesCgemConstruction::Construct, MDC built --> put CGEM in MDC container logical volume" << endl;
121 G4SDManager* gv_SDman = G4SDManager::GetSDMpointer();
122 G4String lvs_cgemSDname =
"BesCgemSD";
124 m_CgemSD =
new BesCgemSD(lvs_cgemSDname);
126 gv_SDman->AddNewDetector(m_CgemSD);
132 log<< MSG::INFO <<
"BesCgemConstruction::Construct, Tunning! DO NOT CONSTRUCT CGEM!" << endreq;
139 log<< MSG::INFO <<
"BesCgemConstruciton::Construct, Construct CGEM from GDML!" << endreq;
144 log<< MSG::INFO <<
"BesCgemConstruction::Construct, Construct CGEM from G4code!" << endreq;
146 G4LogicalVolume *logicCgem = ConstructFromCode(logicContainer,m_CgemSD);
153G4LogicalVolume* BesCgemConstruction::ConstructFromCode(G4LogicalVolume* logicMother,
BesCgemSD* m_CgemSD)
156 Gaudi::svcLocator() -> service(
"MessageSvc",
msgSvc);
157 MsgStream log(
msgSvc,
"BesCgemConstruction::ConstructFromCode()");
158 log<< MSG::INFO <<
"===========================================" << endreq;
159 log<< MSG::INFO <<
"BesCgemConstruction::ConstructFromCode(), Begin to construct CGEM!" << endreq;
162 G4VisAttributes *lv_black =
new G4VisAttributes(G4Colour::Black());
163 G4VisAttributes *lv_white =
new G4VisAttributes(G4Colour::White());
164 G4VisAttributes *lv_green =
new G4VisAttributes(G4Colour::Green());
165 G4VisAttributes *lv_yellow =
new G4VisAttributes(G4Colour::Yellow());
166 G4VisAttributes *lv_blue =
new G4VisAttributes(G4Colour::Blue());
167 G4VisAttributes *lv_red =
new G4VisAttributes(G4Colour::Red());
168 G4VisAttributes *lv_cyan =
new G4VisAttributes(G4Colour::Cyan());
169 G4VisAttributes *lv_magenta =
new G4VisAttributes(G4Colour::Magenta());
173 G4RotationMatrix *lv_rotation = 0;
174 G4ThreeVector lv_3vector(0., 0., 0.);
175 G4bool lv_boolen =
false;
182 G4double lvd_A_s = 0*deg;
183 G4double lvd_A_d = 360*deg;
188 G4Tubs *lv_Cgem_solid =
189 new G4Tubs(
"Cgem_solid", lvd_R_i, lvd_R_o, 0.5*lvd_L_z, lvd_A_s, lvd_A_d);
190 G4LogicalVolume* lv_Cgem_logic =
191 new G4LogicalVolume(lv_Cgem_solid, m_M_Air,
"Cgem_logic");
192 G4VPhysicalVolume *lv_Cgem_physi =
193 new G4PVPlacement(lv_rotation, lv_3vector, lv_Cgem_logic,
"Cgem_physi",
194 logicMother, lv_boolen, lv_copyNo, m_CheckOverlaps);
197 G4cout <<
"CGEM container" << G4endl;
198 G4cout <<
"CGEM, Rin =" << ((G4Tubs*) (lv_Cgem_physi->GetLogicalVolume()->GetSolid()))->GetInnerRadius() << G4endl;
199 G4cout <<
"CGEM, Rout =" << ((G4Tubs*) (lv_Cgem_physi->GetLogicalVolume()->GetSolid()))->GetOuterRadius() << G4endl;
200 G4cout <<
"CGEM, length =" << ((G4Tubs*) (lv_Cgem_physi->GetLogicalVolume()->GetSolid()))->GetDz() * 2 << G4endl;
202 lv_Cgem_logic->SetVisAttributes(lv_black);
207 stringstream sssolid,sslogic,ssphysi;
208 string ssolid,slogic,sphysi;
210 for (G4int i=0; i < lvi_N_CgemLayer; i++)
212 log<< MSG::INFO <<
"BesCgemConstruciton::ConstructFromCode(), Construct CgemLayer " << i << endreq;
216 sssolid <<
"CgemLayer_solid";
218 ssolid = sssolid.str();
220 sslogic <<
"CgemLayer_logic";
222 slogic = sslogic.str();
224 ssphysi <<
"CgemLayer_physi";
226 sphysi = ssphysi.str();
232 G4Tubs *lv_CgemLayer_solid =
233 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
234 G4LogicalVolume *lv_CgemLayer_logic =
235 new G4LogicalVolume(lv_CgemLayer_solid, m_M_Air, slogic);
236 G4VPhysicalVolume *lv_CgemLayer_physi =
237 new G4PVPlacement(lv_rotation, lv_3vector, lv_CgemLayer_logic, sphysi,
238 lv_Cgem_logic, lv_boolen, i, m_CheckOverlaps);
244 log<< MSG::INFO <<
"BesCgemConstruciton::ConstructFromCode(), Construct CgemLayer " << i <<
" Cathode "<< endreq;
249 sssolid <<
"Cathode_solid";
251 ssolid = sssolid.str();
253 sslogic <<
"Cathode_logic";
255 slogic = sslogic.str();
257 ssphysi <<
"Cathode_physi";
259 sphysi = ssphysi.str();
262 G4Tubs *lv_Cathode_solid =
263 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
264 G4LogicalVolume *lv_Cathode_logic =
265 new G4LogicalVolume(lv_Cathode_solid, m_M_CgemGas, slogic);
266 G4VPhysicalVolume *lv_Cathode_physi =
267 new G4PVPlacement(lv_rotation, lv_3vector, lv_Cathode_logic, sphysi,
268 lv_CgemLayer_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
269 cout <<
"CATHODE " << lvd_R_i <<
" " << lvd_R_o <<
" " << lvd_L_z << endl;
272 sssolid <<
"Cathode_Kapton1_solid";
274 ssolid = sssolid.str();
276 sslogic <<
"Cathode_Kapton1_logic";
278 slogic = sslogic.str();
280 ssphysi <<
"Cathode_Kapton1_physi";
282 sphysi = ssphysi.str();
285 G4Tubs *lv_Cathode_Kapton1_solid =
286 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
287 G4LogicalVolume *lv_Cathode_Kapton1_logic =
288 new G4LogicalVolume(lv_Cathode_Kapton1_solid, m_M_Kapton, slogic);
289 G4VPhysicalVolume *lv_Cathode_Kapton1_physi =
290 new G4PVPlacement(lv_rotation, lv_3vector, lv_Cathode_Kapton1_logic,
291 sphysi, lv_Cathode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
295 sssolid <<
"athode_Epoxy1_solid";
297 ssolid = sssolid.str();
299 sslogic <<
"Cathode_Epoxy1_logic";
301 slogic = sslogic.str();
303 ssphysi <<
"Cathode_Epoxy1_physi";
305 sphysi = ssphysi.str();
308 G4Tubs *lv_Cathode_Epoxy1_solid =
309 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
310 G4LogicalVolume *lv_Cathode_Epoxy1_logic =
311 new G4LogicalVolume(lv_Cathode_Epoxy1_solid, m_M_Epoxy, slogic);
312 G4VPhysicalVolume *lv_Cathode_Epoxy1_physi =
313 new G4PVPlacement(lv_rotation, lv_3vector, lv_Cathode_Epoxy1_logic,
314 sphysi,lv_Cathode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
318 sssolid <<
"Cathode_Rohacell1_solid";
320 ssolid = sssolid.str();
322 sslogic <<
"Cathode_Rohacell1_logic";
324 slogic = sslogic.str();
326 ssphysi <<
"Cathode_Rohacell1_physi";
328 sphysi = ssphysi.str();
331 G4Tubs *lv_Cathode_Rohacell1_solid =
332 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
333 G4LogicalVolume *lv_Cathode_Rohacell1_logic =
334 new G4LogicalVolume(lv_Cathode_Rohacell1_solid, m_M_Rohacell, slogic);
335 G4VPhysicalVolume *lv_Cathode_Rohacell1_physi =
336 new G4PVPlacement(lv_rotation, lv_3vector, lv_Cathode_Rohacell1_logic,
337 sphysi, lv_Cathode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
341 sssolid <<
"Cathode_Epoxy2_solid";
343 ssolid = sssolid.str();
345 sslogic <<
"Cathode_Epoxy2_logic";
347 slogic = sslogic.str();
349 ssphysi <<
"Cathode_Epoxy2_physi";
351 sphysi = ssphysi.str();
354 G4Tubs *lv_Cathode_Epoxy2_solid =
355 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
356 G4LogicalVolume *lv_Cathode_Epoxy2_logic =
357 new G4LogicalVolume(lv_Cathode_Epoxy2_solid, m_M_Epoxy, slogic);
358 G4VPhysicalVolume *lv_Cathode_Epoxy2_physi =
359 new G4PVPlacement(lv_rotation, lv_3vector, lv_Cathode_Epoxy2_logic,
360 sphysi, lv_Cathode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
364 sssolid <<
"Cathode_Kapton2_solid";
366 ssolid = sssolid.str();
368 sslogic <<
"Cathode_Kapton2_logic";
370 slogic = sslogic.str();
372 ssphysi <<
"Cathode_Kapton2_physi";
374 sphysi = ssphysi.str();
377 G4Tubs *lv_Cathode_Kapton2_solid =
378 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
379 G4LogicalVolume *lv_Cathode_Kapton2_logic =
380 new G4LogicalVolume(lv_Cathode_Kapton2_solid, m_M_Kapton, slogic);
381 G4VPhysicalVolume *lv_Cathode_Kapton2_physi =
382 new G4PVPlacement(lv_rotation, lv_3vector, lv_Cathode_Kapton2_logic,
383 sphysi, lv_Cathode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
387 sssolid <<
"Cathode_Epoxy3_solid";
389 ssolid = sssolid.str();
391 sslogic <<
"Cathode_Epoxy3_logic";
393 slogic = sslogic.str();
395 ssphysi <<
"Cathode_Epoxy3_physi";
397 sphysi = ssphysi.str();
400 G4Tubs *lv_Cathode_Epoxy3_solid =
401 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
402 G4LogicalVolume *lv_Cathode_Epoxy3_logic =
403 new G4LogicalVolume(lv_Cathode_Epoxy3_solid, m_M_Epoxy, slogic);
404 G4VPhysicalVolume *lv_Cathode_Epoxy3_physi =
405 new G4PVPlacement(lv_rotation, lv_3vector, lv_Cathode_Epoxy3_logic,
406 sphysi,lv_Cathode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
410 sssolid <<
"Cathode_Rohacell2_solid";
412 ssolid = sssolid.str();
414 sslogic <<
"Cathode_Rohacell2_logic";
416 slogic = sslogic.str();
418 ssphysi <<
"Cathode_Rohacell2_physi";
420 sphysi = ssphysi.str();
423 G4Tubs *lv_Cathode_Rohacell2_solid =
424 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
425 G4LogicalVolume *lv_Cathode_Rohacell2_logic =
426 new G4LogicalVolume(lv_Cathode_Rohacell2_solid, m_M_Rohacell, slogic);
427 G4VPhysicalVolume *lv_Cathode_Rohacell2_physi =
428 new G4PVPlacement(lv_rotation, lv_3vector, lv_Cathode_Rohacell2_logic,
429 sphysi, lv_Cathode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
433 sssolid <<
"Cathode_Epoxy4_solid";
435 ssolid = sssolid.str();
437 sslogic <<
"Cathode_Epoxy4_logic";
439 slogic = sslogic.str();
441 ssphysi <<
"Cathode_Epoxy4_physi";
443 sphysi = ssphysi.str();
446 G4Tubs *lv_Cathode_Epoxy4_solid =
447 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
448 G4LogicalVolume *lv_Cathode_Epoxy4_logic =
449 new G4LogicalVolume(lv_Cathode_Epoxy4_solid, m_M_Epoxy, slogic);
450 G4VPhysicalVolume *lv_Cathode_Epoxy4_physi =
451 new G4PVPlacement(lv_rotation, lv_3vector, lv_Cathode_Epoxy4_logic,
452 sphysi, lv_Cathode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
456 sssolid <<
"Cathode_Kapton3_solid";
458 ssolid = sssolid.str();
460 sslogic <<
"Cathode_Kapton3_logic";
462 slogic = sslogic.str();
464 ssphysi <<
"Cathode_Kapton3_physi";
466 sphysi = ssphysi.str();
469 G4Tubs *lv_Cathode_Kapton3_solid =
470 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
471 G4LogicalVolume *lv_Cathode_Kapton3_logic =
472 new G4LogicalVolume(lv_Cathode_Kapton3_solid, m_M_Kapton, slogic);
473 G4VPhysicalVolume *lv_Cathode_Kapton3_physi =
474 new G4PVPlacement(lv_rotation, lv_3vector, lv_Cathode_Kapton3_logic,
475 sphysi, lv_Cathode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
479 sssolid <<
"Cathode_Cu_solid";
481 ssolid = sssolid.str();
483 sslogic <<
"Cathode_Cu_logic";
485 slogic = sslogic.str();
487 ssphysi <<
"Cathode_Cu_physi";
489 sphysi = ssphysi.str();
492 G4Tubs *lv_Cathode_Cu_solid =
493 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
494 G4LogicalVolume *lv_Cathode_Cu_logic =
495 new G4LogicalVolume(lv_Cathode_Cu_solid, m_M_Cu, slogic);
496 G4VPhysicalVolume *lv_Cathode_Cu_physi =
497 new G4PVPlacement(lv_rotation, lv_3vector, lv_Cathode_Cu_logic, sphysi,
498 lv_Cathode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
502 log<< MSG::INFO <<
"BesCgemConstruciton::ConstructFromCode(), Construct CgemLayer " << i <<
" Gap_D "<< endreq;
505 sssolid <<
"Gap_D_solid";
507 ssolid = sssolid.str();
509 sslogic <<
"Gap_D_logic";
511 slogic = sslogic.str();
513 ssphysi <<
"Gap_D_physi";
515 sphysi = ssphysi.str();
518 G4Tubs *lv_Gap_D_solid =
519 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
520 G4LogicalVolume *lv_Gap_D_logic =
521 new G4LogicalVolume(lv_Gap_D_solid, m_M_CgemGas, slogic);
522 G4VPhysicalVolume *lv_Gap_D_physi =
523 new G4PVPlacement(lv_rotation, lv_3vector, lv_Gap_D_logic, sphysi,
524 lv_CgemLayer_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
526 lv_Gap_D_logic->SetSensitiveDetector(m_CgemSD);
527 G4cout <<
"R of SD : "<<
"lvd_R_i =" << lvd_R_i <<
" " <<
"lvd_R_o =" << lvd_R_o << G4endl;
531 sssolid <<
"Gap_T1_solid";
533 ssolid = sssolid.str();
535 sslogic <<
"Gap_T1_logic";
537 slogic = sslogic.str();
539 ssphysi <<
"Gap_T1_physi";
541 sphysi = ssphysi.str();
544 G4Tubs *lv_Gap_T1_solid =
545 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
546 G4LogicalVolume *lv_Gap_T1_logic =
547 new G4LogicalVolume(lv_Gap_T1_solid, m_M_CgemGas, slogic);
548 G4VPhysicalVolume *lv_Gap_T1_physi =
549 new G4PVPlacement(lv_rotation, lv_3vector, lv_Gap_T1_logic, sphysi,
550 lv_CgemLayer_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
554 sssolid <<
"Gap_T2_solid";
556 ssolid = sssolid.str();
558 sslogic <<
"Gap_T2_logic";
560 slogic = sslogic.str();
562 ssphysi <<
"Gap_T2_physi";
564 sphysi = ssphysi.str();
567 G4Tubs *lv_Gap_T2_solid =
568 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
569 G4LogicalVolume *lv_Gap_T2_logic =
570 new G4LogicalVolume(lv_Gap_T2_solid, m_M_CgemGas, slogic);
571 G4VPhysicalVolume *lv_Gap_T2_physi =
572 new G4PVPlacement(lv_rotation, lv_3vector, lv_Gap_T2_logic, sphysi,
573 lv_CgemLayer_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
577 sssolid <<
"Gap_I_solid";
579 ssolid = sssolid.str();
581 sslogic <<
"Gap_I_logic";
583 slogic = sslogic.str();
585 ssphysi <<
"Gap_I_physi";
587 sphysi = ssphysi.str();
590 G4Tubs *lv_Gap_I_solid =
591 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
592 G4LogicalVolume *lv_Gap_I_logic =
593 new G4LogicalVolume(lv_Gap_I_solid, m_M_CgemGas, slogic);
594 G4VPhysicalVolume *lv_Gap_I_physi =
595 new G4PVPlacement(lv_rotation, lv_3vector, lv_Gap_I_logic, sphysi,
596 lv_CgemLayer_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
599 for (G4int j=0; j < lvi_N_GemFoil; j++)
601 log<< MSG::INFO <<
"BesCgemConstruciton::ConstructFromCode(), Construct CgemLayer " << i <<
" GemFoil " << j << endreq;
608 sssolid <<
"GemFoil_solid";
612 ssolid = sssolid.str();
614 sslogic <<
"GemFoil_logic";
618 slogic = sslogic.str();
620 ssphysi <<
"GemFoil_physi";
624 sphysi = ssphysi.str();
627 G4Tubs *lv_GemFoil_solid =
628 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
629 G4LogicalVolume *lv_GemFoil_logic =
630 new G4LogicalVolume(lv_GemFoil_solid, m_M_CgemGas, slogic);
631 G4VPhysicalVolume *lv_GemFoil_physi =
632 new G4PVPlacement(lv_rotation, lv_3vector, lv_GemFoil_logic, sphysi,
633 lv_CgemLayer_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
634 cout <<
"GEM LAYER " << j <<
" " << lvd_R_i <<
" " << lvd_R_o <<
" " << lvd_L_z << endl;
640 sssolid <<
"GemFoil_Cu1_solid";
644 ssolid = sssolid.str();
646 sslogic <<
"GemFoil_Cu1_logic";
650 slogic = sslogic.str();
652 ssphysi <<
"GemFoil_Cu1_physi";
656 sphysi = ssphysi.str();
659 G4Tubs *lv_GemFoil_Cu1_solid =
660 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
661 G4LogicalVolume *lv_GemFoil_Cu1_logic =
662 new G4LogicalVolume(lv_GemFoil_Cu1_solid, m_M_Cu_GEMFoils, slogic);
663 G4VPhysicalVolume *lv_GemFoil_Cu1_physi =
664 new G4PVPlacement(lv_rotation, lv_3vector, lv_GemFoil_Cu1_logic, sphysi,
665 lv_GemFoil_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
669 sssolid <<
"GemFoil_Kapton_solid";
673 ssolid = sssolid.str();
675 sslogic <<
"GemFoil_Kapton_logic";
679 slogic = sslogic.str();
681 ssphysi <<
"GemFoil_Kapton_physi";
685 sphysi = ssphysi.str();
688 G4Tubs *lv_GemFoil_Kapton_solid =
689 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
690 G4LogicalVolume *lv_GemFoil_Kapton_logic =
691 new G4LogicalVolume(lv_GemFoil_Kapton_solid, m_M_Kapton_GEMFoils, slogic);
692 G4VPhysicalVolume *lv_GemFoil_Kapton_physi =
693 new G4PVPlacement(lv_rotation, lv_3vector, lv_GemFoil_Kapton_logic,
694 sphysi, lv_GemFoil_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
698 sssolid <<
"GemFoil_Cu2_solid";
702 ssolid = sssolid.str();
704 sslogic <<
"GemFoil_Cu2_logic";
708 slogic = sslogic.str();
710 ssphysi <<
"GemFoil_Cu2_physi";
714 sphysi = ssphysi.str();
717 G4Tubs *lv_GemFoil_Cu2_solid =
718 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
719 G4LogicalVolume *lv_GemFoil_Cu2_logic =
720 new G4LogicalVolume(lv_GemFoil_Cu2_solid, m_M_Cu_GEMFoils, slogic);
721 G4VPhysicalVolume *lv_GemFoil_Cu2_physi =
722 new G4PVPlacement(lv_rotation, lv_3vector, lv_GemFoil_Cu2_logic, sphysi,
723 lv_GemFoil_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
732 lv_GemFoil_logic->SetVisAttributes(lv_magenta);
734 Print(lv_GemFoil_logic);
740 log<< MSG::INFO <<
"BesCgemConstruciton::ConstructFromCode(), Construct CgemLayer " << i <<
" Anode "<< endreq;
743 sssolid <<
"Anode_solid";
745 ssolid = sssolid.str();
747 sslogic <<
"Anode_logic";
749 slogic = sslogic.str();
751 ssphysi <<
"Anode_physi";
753 sphysi = ssphysi.str();
756 G4Tubs *lv_Anode_solid =
757 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
758 G4LogicalVolume *lv_Anode_logic =
759 new G4LogicalVolume(lv_Anode_solid, m_M_CgemGas, slogic);
760 G4VPhysicalVolume *lv_Anode_physi =
761 new G4PVPlacement(lv_rotation, lv_3vector, lv_Anode_logic, sphysi,
762 lv_CgemLayer_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
766 sssolid <<
"Anode_Cu1_solid";
768 ssolid = sssolid.str();
770 sslogic <<
"Anode_Cu1_logic";
772 slogic = sslogic.str();
774 ssphysi <<
"Anode_Cu1_physi";
776 sphysi = ssphysi.str();
780 G4Tubs *lv_Anode_Cu1_solid =
781 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
784 cout <<
"ANODE " << lvd_R_i <<
" " << lvd_R_o <<
" " << lvd_L_z << endl;
787 if(lv_use_v_strip_description ==
false)
790 G4LogicalVolume *lv_Anode_Cu1_logic =
791 new G4LogicalVolume(lv_Anode_Cu1_solid, m_M_Cu_AnodeStripV, slogic);
792 G4VPhysicalVolume *lv_Anode_Cu1_physi =
793 new G4PVPlacement(lv_rotation, lv_3vector, lv_Anode_Cu1_logic, sphysi,
794 lv_Anode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
804 double v_airgap = v_spacing - v_active;
806 double anode_cu1_mean_radius = 0.5 * (lvd_R_i + lvd_R_o);
807 double anode_full_v = anode_cu1_mean_radius * CLHEP::twopi;
808 int nof_anode_v = floor(anode_full_v / v_spacing);
815 if(tan_stereo < 0) tan_stereo *= -1.;
818 int nof_replicas = tan_stereo * lvd_L_z / 0.10;
819 cout <<
"nof_replicas: " << i + 1 <<
" " << nof_replicas << endl;
821 double replica_length = lvd_L_z / nof_replicas;
824 double phi_v = (CLHEP::twopi/nof_anode_v) * CLHEP::rad;
825 double tilt =
tan(lv_CgemLayer->
getAngleOfStereo()) * lvd_L_z/(nof_replicas * anode_cu1_mean_radius);
826 if(tilt > CLHEP::pi) tilt = CLHEP::twopi - tilt;
828 std::cout <<
"STRIP in v: pitch " << v_spacing <<
" active " << v_active <<
" air gap " << v_airgap <<
" N " << nof_anode_v <<
" stereo " << lv_CgemLayer->
getAngleOfStereo() << std::endl;
831 G4LogicalVolume *lv_Anode_Cu1_logic =
832 new G4LogicalVolume(lv_Anode_Cu1_solid, m_M_CgemGas,
"Anode_Cu1_logic");
835 G4VSolid* lv_Anode_V_Strip_solid =
836 new G4Tubs(
"Anode_V_Strip_solid", lvd_R_i, lvd_R_o, replica_length * 0.5, lvd_A_s, lvd_A_d);
839 G4LogicalVolume *lv_Anode_V_Strip_logic =
840 new G4LogicalVolume(lv_Anode_V_Strip_solid, m_M_CgemGas,
"Anode_V_Strip_logic");
852 double v_active_phi = (v_active / anode_cu1_mean_radius) * CLHEP::radian;
856 G4Tubs* lv_Anode_V_Active_solid =
857 new G4Tubs(
"Anode_V_Active_solid", lvd_R_i, lvd_R_o, replica_length * 0.5,
861 G4LogicalVolume *lv_Anode_V_Active_logic =
862 new G4LogicalVolume(lv_Anode_V_Active_solid, m_M_Cu,
"Anode_V_Active_logic");
866 G4VisAttributes anode_v_active_attributes;
869 anode_v_active_attributes.SetVisibility(
false);
872 lv_Anode_V_Active_logic->SetVisAttributes(anode_v_active_attributes);
875 G4VPhysicalVolume *lv_Anode_V_Active_physi =
876 new G4PVReplica(
"Anode_V_Active_physi", lv_Anode_V_Active_logic, lv_Anode_V_Strip_logic, kPhi, nof_anode_v, phi_v);
884 G4VPhysicalVolume* lv_Anode_V_Strip_physi =
885 new G4PVParameterised(
"Anode_V_Strip_physi", lv_Anode_V_Strip_logic, lv_Anode_Cu1_logic, kZAxis, nof_replicas, sliceParam);
887 G4VPhysicalVolume *lv_Anode_Cu1_physi =
888 new G4PVPlacement(lv_rotation, lv_3vector, lv_Anode_Cu1_logic,
"Anode_Cu1_physi",
889 lv_Anode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
896 sssolid <<
"Anode_Kapton1_solid";
898 ssolid = sssolid.str();
900 sslogic <<
"Anode_Kapton1_logic";
902 slogic = sslogic.str();
904 ssphysi <<
"Anode_Kapton1_physi";
906 sphysi = ssphysi.str();
909 G4Tubs *lv_Anode_Kapton1_solid =
910 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
911 G4LogicalVolume *lv_Anode_Kapton1_logic =
912 new G4LogicalVolume(lv_Anode_Kapton1_solid, m_M_Kapton_StripV, slogic);
913 G4VPhysicalVolume *lv_Anode_Kapton1_physi =
914 new G4PVPlacement(lv_rotation, lv_3vector, lv_Anode_Kapton1_logic, sphysi,
915 lv_Anode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
919 sssolid <<
"Anode_Cu2_solid";
921 ssolid = sssolid.str();
923 sslogic <<
"Anode_Cu2_logic";
925 slogic = sslogic.str();
927 ssphysi <<
"Anode_Cu2_physi";
929 sphysi = ssphysi.str();
933 G4Tubs *lv_Anode_Cu2_solid =
934 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
936 if(lv_use_x_strip_description ==
false)
939 G4LogicalVolume *lv_Anode_Cu2_logic =
940 new G4LogicalVolume(lv_Anode_Cu2_solid, m_M_Cu_AnodeStripX, slogic);
941 G4VPhysicalVolume *lv_Anode_Cu2_physi =
942 new G4PVPlacement(lv_rotation, lv_3vector, lv_Anode_Cu2_logic, sphysi,
943 lv_Anode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
950 double x_airgap = x_spacing - x_active;
952 double anode_cu2_mean_radius = 0.5 * (lvd_R_i + lvd_R_o);
953 double anode_full_x = anode_cu2_mean_radius * CLHEP::twopi;
954 int nof_anode_x = floor(anode_full_x / x_spacing);
957 double phi_x = (CLHEP::twopi/nof_anode_x) * CLHEP::rad;
959 std::cout <<
"STRIP in x: pitch " << x_spacing <<
" active " << x_active <<
" air gap " << x_airgap <<
" N " << nof_anode_x << std::endl;
964 G4LogicalVolume *lv_Anode_Cu2_logic =
965 new G4LogicalVolume(lv_Anode_Cu2_solid, m_M_CgemGas,
"lv_Anode_Cu2_logic");
966 G4VPhysicalVolume *lv_Anode_Cu2_physi =
967 new G4PVPlacement(lv_rotation, lv_3vector, lv_Anode_Cu2_logic,
"Anode_Cu2_physi",
968 lv_Anode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
971 G4VSolid* lv_Anode_X_Strip_solid =
972 new G4Tubs(
"lv_Anode_X_Strip_solid", lvd_R_i, lvd_R_o, lvd_L_z/2., -0.5 * phi_x, phi_x);
975 G4LogicalVolume *lv_Anode_X_Strip_logic =
976 new G4LogicalVolume(lv_Anode_X_Strip_solid, m_M_CgemGas,
"lv_Anode_Cu2_logic");
987 double x_delay_phi = ((0.5 * x_airgap) / anode_cu2_mean_radius) * CLHEP::radian;
988 double x_active_phi = (x_active / anode_cu2_mean_radius) * CLHEP::radian;
989 std::cout <<
"delay " << x_delay_phi/deg <<
" " << x_airgap <<
" " << anode_cu2_mean_radius << std::endl;
990 G4Tubs* lv_Anode_X_Active_solid =
991 new G4Tubs(
"Anode_X_Active_solid", lvd_R_i, lvd_R_o, lvd_L_z/2., -0.5 * x_active_phi, x_active_phi);
992 G4LogicalVolume *lv_Anode_X_Active_logic =
993 new G4LogicalVolume(lv_Anode_X_Active_solid, m_M_Cu,
"Anode_X_Active_logic");
1004 G4VPhysicalVolume *lv_Anode_X_Active_physi =
1005 new G4PVPlacement(lv_rotation, lv_3vector, lv_Anode_X_Active_logic,
"Anode_X_Strip_physi",
1006 lv_Anode_X_Strip_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
1009 G4VPhysicalVolume *lv_Anode_X_Strip_physi =
1010 new G4PVReplica(
"Anode_X_Strip_physi", lv_Anode_X_Strip_logic,
1011 lv_Anode_Cu2_logic, kPhi, nof_anode_x, phi_x);
1018 sssolid <<
"Anode_Epoxy1_solid";
1020 ssolid = sssolid.str();
1022 sslogic <<
"Anode_Epoxy1_logic";
1024 slogic = sslogic.str();
1026 ssphysi <<
"Anode_Epoxy1_physi";
1028 sphysi = ssphysi.str();
1031 G4Tubs *lv_Anode_Epoxy1_solid =
1032 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
1033 G4LogicalVolume *lv_Anode_Epoxy1_logic =
1034 new G4LogicalVolume(lv_Anode_Epoxy1_solid, m_M_Epoxy, slogic);
1035 G4VPhysicalVolume *lv_Anode_Epoxy1_physi =
1036 new G4PVPlacement(lv_rotation, lv_3vector, lv_Anode_Epoxy1_logic, sphysi,
1037 lv_Anode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
1041 sssolid <<
"Anode_Kapton2_solid";
1043 ssolid = sssolid.str();
1045 sslogic <<
"Anode_Kapton2_logic";
1047 slogic = sslogic.str();
1049 ssphysi <<
"Anode_Kapton2_physi";
1051 sphysi = ssphysi.str();
1054 G4Tubs *lv_Anode_Kapton2_solid =
1055 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
1056 G4LogicalVolume *lv_Anode_Kapton2_logic =
1057 new G4LogicalVolume(lv_Anode_Kapton2_solid, m_M_Kapton, slogic);
1058 G4VPhysicalVolume *lv_Anode_Kapton2_physi =
1059 new G4PVPlacement(lv_rotation, lv_3vector, lv_Anode_Kapton2_logic, sphysi,
1060 lv_Anode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
1064 sssolid <<
"Anode_Epoxy2_solid";
1066 ssolid = sssolid.str();
1068 sslogic <<
"Anode_Epoxy2_logic";
1070 slogic = sslogic.str();
1072 ssphysi <<
"Anode_Epoxy2_physi";
1074 sphysi = ssphysi.str();
1077 G4Tubs *lv_Anode_Epoxy2_solid =
1078 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
1079 G4LogicalVolume *lv_Anode_Epoxy2_logic =
1080 new G4LogicalVolume(lv_Anode_Epoxy2_solid, m_M_Epoxy, slogic);
1081 G4VPhysicalVolume *lv_Anode_Epoxy2_physi =
1082 new G4PVPlacement(lv_rotation, lv_3vector, lv_Anode_Epoxy2_logic, sphysi,
1083 lv_Anode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
1087 sssolid <<
"Anode_Rohacell1_solid";
1089 ssolid = sssolid.str();
1091 sslogic <<
"Anode_Rohacell1_logic";
1093 slogic = sslogic.str();
1095 ssphysi <<
"Anode_Rohacell1_physi";
1097 sphysi = ssphysi.str();
1100 G4Tubs *lv_Anode_Rohacell1_solid =
1101 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
1102 G4LogicalVolume *lv_Anode_Rohacell1_logic =
1103 new G4LogicalVolume(lv_Anode_Rohacell1_solid, m_M_Rohacell, slogic);
1104 G4VPhysicalVolume *lv_Anode_Rohacell1_physi =
1105 new G4PVPlacement(lv_rotation, lv_3vector, lv_Anode_Rohacell1_logic, sphysi,
1106 lv_Anode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
1110 sssolid <<
"Anode_Epoxy3_solid";
1112 ssolid = sssolid.str();
1114 sslogic <<
"Anode_Epoxy3_logic";
1116 slogic = sslogic.str();
1118 ssphysi <<
"Anode_Epoxy3_physi";
1120 sphysi = ssphysi.str();
1123 G4Tubs *lv_Anode_Epoxy3_solid =
1124 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
1125 G4LogicalVolume *lv_Anode_Epoxy3_logic =
1126 new G4LogicalVolume(lv_Anode_Epoxy3_solid, m_M_Epoxy, slogic);
1127 G4VPhysicalVolume *lv_Anode_Epoxy3_physi =
1128 new G4PVPlacement(lv_rotation, lv_3vector, lv_Anode_Epoxy3_logic, sphysi,
1129 lv_Anode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
1133 sssolid <<
"Anode_Kapton3_solid";
1135 ssolid = sssolid.str();
1137 sslogic <<
"Anode_Kapton3_logic";
1139 slogic = sslogic.str();
1141 ssphysi <<
"Anode_Kapton3_physi";
1143 sphysi = ssphysi.str();
1146 G4Tubs *lv_Anode_Kapton3_solid =
1147 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
1148 G4LogicalVolume *lv_Anode_Kapton3_logic =
1149 new G4LogicalVolume(lv_Anode_Kapton3_solid, m_M_Kapton, slogic);
1150 G4VPhysicalVolume *lv_Anode_Kapton3_physi =
1151 new G4PVPlacement(lv_rotation, lv_3vector, lv_Anode_Kapton3_logic, sphysi,
1152 lv_Anode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
1156 sssolid <<
"Anode_Epoxy4_solid";
1158 ssolid = sssolid.str();
1160 sslogic <<
"Anode_Epoxy4_logic";
1162 slogic = sslogic.str();
1164 ssphysi <<
"Anode_Epoxy4_physi";
1166 sphysi = ssphysi.str();
1169 G4Tubs *lv_Anode_Epoxy4_solid =
1170 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
1171 G4LogicalVolume *lv_Anode_Epoxy4_logic =
1172 new G4LogicalVolume(lv_Anode_Epoxy4_solid, m_M_Epoxy, slogic);
1173 G4VPhysicalVolume *lv_Anode_Epoxy4_physi =
1174 new G4PVPlacement(lv_rotation, lv_3vector, lv_Anode_Epoxy4_logic, sphysi,
1175 lv_Anode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
1179 sssolid <<
"Anode_Rohacell2_solid";
1181 ssolid = sssolid.str();
1183 sslogic <<
"Anode_Rohacell2_logic";
1185 slogic = sslogic.str();
1187 ssphysi <<
"Anode_Rohacell2_physi";
1189 sphysi = ssphysi.str();
1192 G4Tubs *lv_Anode_Rohacell2_solid =
1193 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
1194 G4LogicalVolume *lv_Anode_Rohacell2_logic =
1195 new G4LogicalVolume(lv_Anode_Rohacell2_solid, m_M_Rohacell, slogic);
1196 G4VPhysicalVolume *lv_Anode_Rohacell2_physi =
1197 new G4PVPlacement(lv_rotation, lv_3vector, lv_Anode_Rohacell2_logic, sphysi,
1198 lv_Anode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
1202 sssolid <<
"Anode_Epoxy5_solid";
1204 ssolid = sssolid.str();
1206 sslogic <<
"Anode_Epoxy5_logic";
1208 slogic = sslogic.str();
1210 ssphysi <<
"Anode_Epoxy5_physi";
1212 sphysi = ssphysi.str();
1216 G4Tubs *lv_Anode_Epoxy5_solid =
1217 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
1218 G4LogicalVolume *lv_Anode_Epoxy5_logic =
1219 new G4LogicalVolume(lv_Anode_Epoxy5_solid, m_M_Epoxy, slogic);
1220 G4VPhysicalVolume *lv_Anode_Epoxy5_physi =
1221 new G4PVPlacement(lv_rotation, lv_3vector, lv_Anode_Epoxy5_logic, sphysi,
1222 lv_Anode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
1226 sssolid <<
"Anode_Cu3_solid";
1228 ssolid = sssolid.str();
1230 sslogic <<
"Anode_Cu3_logic";
1232 slogic = sslogic.str();
1234 ssphysi <<
"Anode_Cu3_physi";
1236 sphysi = ssphysi.str();
1239 G4Tubs *lv_Anode_Cu3_solid =
1240 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
1241 G4LogicalVolume *lv_Anode_Cu3_logic =
1242 new G4LogicalVolume(lv_Anode_Cu3_solid, m_M_Cu, slogic);
1243 G4VPhysicalVolume *lv_Anode_Cu3_physi =
1244 new G4PVPlacement(lv_rotation, lv_3vector, lv_Anode_Cu3_logic, sphysi,
1245 lv_Anode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
1249 sssolid <<
"Anode_Kapton4_solid";
1251 ssolid = sssolid.str();
1253 sslogic <<
"Anode_Kapton4_logic";
1255 slogic = sslogic.str();
1257 ssphysi <<
"Anode_Kapton4_physi";
1259 sphysi = ssphysi.str();
1262 G4Tubs *lv_Anode_Kapton4_solid =
1263 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
1264 G4LogicalVolume *lv_Anode_Kapton4_logic =
1265 new G4LogicalVolume(lv_Anode_Kapton4_solid, m_M_Kapton, slogic);
1266 G4VPhysicalVolume *lv_Anode_Kapton4_physi =
1267 new G4PVPlacement(lv_rotation, lv_3vector, lv_Anode_Kapton4_logic, sphysi,
1268 lv_Anode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
1272 lv_CgemLayer_logic -> SetVisAttributes(lv_white);
1273 lv_Cathode_logic -> SetVisAttributes(lv_green);
1274 lv_Anode_logic -> SetVisAttributes(lv_red);
1277 Print(lv_CgemLayer_logic);
1278 Print(lv_Cathode_logic);
1279 Print(lv_Anode_logic);
1285 lvd_R_i = lv_CgemSeparator->
getInnerR()*mm;
1286 lvd_R_o = lv_CgemSeparator->
getOuterR()*mm;
1287 lvd_L_z = lv_CgemSeparator->
getLength()*mm;
1289 G4Tubs *lv_Separator_solid =
1290 new G4Tubs(
"Separator_solid", lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
1293 G4Tubs *lv_Separator_solid_Al1 =
1294 new G4Tubs(
"Separator_solid_Al1", lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
1297 G4Tubs *lv_Separator_solid_CarFib =
1298 new G4Tubs(
"Separator_solid_CarFib", lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
1301 G4Tubs *lv_Separator_solid_Al2 =
1302 new G4Tubs(
"Separator_solid_Al2", lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
1304 cout <<
"CGEM/MDC SEPARATOR" << endl;
1305 cout << lv_Separator_solid_Al1->GetName()
1306 <<
" rin " << lv_Separator_solid_Al1->GetInnerRadius()
1307 <<
" rout " << lv_Separator_solid_Al1->GetOuterRadius()
1308 <<
" length " << lv_Separator_solid_Al1->GetZHalfLength()*2
1310 cout << lv_Separator_solid_CarFib->GetName()
1311 <<
" rin " << lv_Separator_solid_CarFib->GetInnerRadius()
1312 <<
" rout " << lv_Separator_solid_CarFib->GetOuterRadius()
1313 <<
" length " << lv_Separator_solid_CarFib->GetZHalfLength()*2
1315 cout << lv_Separator_solid_Al2->GetName()
1316 <<
" rin " << lv_Separator_solid_Al2->GetInnerRadius()
1317 <<
" rout " << lv_Separator_solid_Al2->GetOuterRadius()
1318 <<
" length " << lv_Separator_solid_Al2->GetZHalfLength()*2
1322 G4LogicalVolume *lv_Separator_logic =
1323 new G4LogicalVolume(lv_Separator_solid, m_M_Air,
"Separator_logic");
1324 G4LogicalVolume *lv_Separator_logic_Al1 =
1325 new G4LogicalVolume(lv_Separator_solid_Al1, m_M_Aluminum,
"Separator_logic_Al1");
1326 G4LogicalVolume *lv_Separator_logic_CarFib =
1327 new G4LogicalVolume(lv_Separator_solid_CarFib, m_M_CarbonFiber,
"Separator_logic_CarFib");
1328 G4LogicalVolume *lv_Separator_logic_Al2 =
1329 new G4LogicalVolume(lv_Separator_solid_Al2, m_M_Aluminum,
"Separator_logic_Al2");
1331 G4VPhysicalVolume *lv_Separator_physi =
1332 new G4PVPlacement(lv_rotation, lv_3vector, lv_Separator_logic,
"Separator_physi",
1333 lv_Cgem_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
1334 G4VPhysicalVolume *lv_Separator_physi_Al1 =
1335 new G4PVPlacement(lv_rotation, lv_3vector, lv_Separator_logic_Al1,
"Separator_physi_Al1",
1336 lv_Separator_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
1337 G4VPhysicalVolume *lv_Separator_physi_CarFib =
1338 new G4PVPlacement(lv_rotation, lv_3vector, lv_Separator_logic_CarFib,
"Separator_physi_CarFib",
1339 lv_Separator_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
1340 G4VPhysicalVolume *lv_Separator_physi_Al2 =
1341 new G4PVPlacement(lv_rotation, lv_3vector, lv_Separator_logic_Al2,
"Separator_physi_Al2",
1342 lv_Separator_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
1344 return lv_Cgem_logic;
1347void BesCgemConstruction::ConstructPassiveElements(G4LogicalVolume* logicCgem)
1350 cout <<
"================!!!! CONSTRUCT CGEM PASSIVE ELEMENTS !!!!================" << endl;
1353 Gaudi::svcLocator() -> service(
"MessageSvc",
msgSvc);
1354 MsgStream log(
msgSvc,
"BesCgemConstruction::ConstructPassiveElements()");
1355 log<< MSG::INFO <<
"===========================================" << endreq;
1356 log<< MSG::INFO <<
"BesCgemConstruction::ConstructPassiveElements(), Begin to construct CGEM passives!" << endreq;
1359 G4VisAttributes *lv_white =
new G4VisAttributes(G4Colour::White());
1360 G4VisAttributes *lv_yellow =
new G4VisAttributes(G4Colour::Yellow());
1361 G4VisAttributes *lv_cyan =
new G4VisAttributes(G4Colour::Cyan());
1362 G4bool lv_boolen =
false;
1363 G4int lv_copyNo = 0;
1370 double displ_as_L2_1 = 64;
1371 double displ_as_L3_4 = 83;
1372 double displ_ef_1 = 171;
1376 double as_L1_1_rin = 71.;
1377 double as_L1_2_rin = 90.1;
1378 double as_L1_3_rin = 96.;
1379 double as_L1_4_rin = 71.;
1381 double as_L1_1_rout = 90.1;
1382 double as_L1_2_rout = 112.;
1383 double as_L1_3_rout = 112.;
1384 double as_L1_4_rout = 88.;
1386 double as_L1_1_thick = 34;
1387 double as_L1_2_thick = 48;
1388 double as_L1_3_thick = 32.5;
1389 double as_L1_4_thick = 45;
1392 double as_L2_1_rin = 113.5;
1393 double as_L2_2_rin = 132.5;
1394 double as_L2_3_rin = 139.5;
1395 double as_L2_4_rin = 113.5;
1396 double as_L2_5_0_rin = 132.5;
1397 double as_L2_5_1_rin = 132.5;
1399 double as_L2_1_rout = 132.5;
1400 double as_L2_2_rout = 154.5;
1401 double as_L2_3_rout = 154.5;
1402 double as_L2_4_rout = 130.5;
1403 double as_L2_5_0_rout = 152.6;
1404 double as_L2_5_1_rout = 154.5;
1406 double as_L2_1_thick = 34;
1407 double as_L2_2_thick = 43;
1408 double as_L2_3_thick = 34;
1409 double as_L2_4_thick = 33;
1410 double as_L2_5_thick = 5;
1413 double as_L3_1_rin = 156.;
1414 double as_L3_2_rin = 154.5;
1415 double as_L3_3_rin = 175.;
1416 double as_L3_4_0_rin = 156.;
1417 double as_L3_4_1_rin = 156.;
1418 double as_L3_5_0_rin = 175.;
1419 double as_L3_5_1_rin = 175.;
1421 double as_L3_1_rout = 175.;
1422 double as_L3_2_rout = 162.1;
1423 double as_L3_3_rout = 180.7;
1424 double as_L3_4_0_rout = 170.96;
1425 double as_L3_4_1_rout = 175.;
1426 double as_L3_5_0_rout = 176.;
1427 double as_L3_5_1_rout = 180.7;
1429 double as_L3_1_thick = 21;
1430 double as_L3_2_thick = 28;
1431 double as_L3_3_thick = 34.5;
1432 double as_L3_4_thick = 10;
1433 double as_L3_5_thick = 14.5;
1436 double cfo_1_rin = 65.5;
1437 double cfo_1_rout = 71.;
1438 double cfo_2_rin = cfo_1_rin;
1439 double cfo_2_rout = 85.;
1441 double cfo_brick_2_x = 40.5;
1442 double cfo_brick_2_y = 13;
1443 double cfo_brick_2_z = 12;
1445 double cfo_brick_1_rin = cfo_2_rout;
1446 double cfo_brick_1_rout = cfo_2_rout + as_L2_4_rin - cfo_2_rout;
1447 double cfo_brick_1_thick = 10;
1448 double cfo_rad = (cfo_2_rout + 0.5 * (cfo_brick_1_rout - cfo_brick_1_rin)) *CLHEP::mm;
1449 double cfo_phi = cfo_brick_2_y/cfo_rad;
1454 double sep_rin = lv_CgemSeparator->
getInnerR()*mm;
1455 double sep_rout = lv_CgemSeparator->
getOuterR()*mm;
1456 double sep_len = lv_CgemSeparator->
getLength()*mm;
1459 double ef_1_rin = 159.;
1460 double ef_2_rin = 174.5;
1462 double ef_1_rout = 186.5;
1463 double ef_2_rout = ef_1_rout;
1465 double ef_1_thick = 12;
1466 double ef_2_thick = 35;
1469 double ef_1_a_rin = ef_1_rin;
1470 double ef_2_a_rin = ef_2_rin;
1472 double ef_1_a_rout = sep_rin;
1473 double ef_2_a_rout = sep_rin;
1475 double ef_1_a_thick = ef_1_thick;
1476 double ef_2_a_thick = ef_2_thick;
1479 double ef_3_rin = sep_rout;
1480 double ef_4_rin = sep_rin;
1482 double ef_3_rout = ef_1_rout;
1483 double ef_4_rout = sep_rout;
1485 double ef_3_thick = ef_1_thick + ef_2_thick;
1486 double ef_4_thick = ef_3_thick - (0.5 * sep_len - (zref + displ_ef_1) + 0.5 * ef_1_thick);
1489 double pf_1_rin = 60;
1490 double pf_2_rin = 60;
1491 double pf_3_0_rin = 75.174;
1492 double pf_3_1_rin = 75.174;
1493 double pf_side_0_0_rin = 75.174;
1494 double pf_side_0_1_rin = 115.516;
1495 double pf_side_1_0_rin = pf_side_0_1_rin;
1496 double pf_side_1_1_rin = 132;
1498 double pf_arc_rin = 132;
1500 double pf_1_rout = 90.5;
1501 double pf_2_rout = 75.174;
1502 double pf_3_0_rout = 90.5;
1503 double pf_3_1_rout = 91.657;
1504 double pf_side_0_0_rout = 91.657;
1505 double pf_side_0_1_rout = 132;
1506 double pf_side_1_0_rout = pf_side_0_1_rout;
1507 double pf_side_1_1_rout = 155;
1510 double pf_arc_rout = 155;
1512 double pf_1_thick = 5.7;
1513 double pf_2_thick = 10.3;
1514 double pf_3_thick = 10.3;
1515 double pf_side_0_thick = 23.332;
1516 double pf_side_1_thick = 9.332;
1518 double pf_brick_x = 24;
1519 double pf_brick_y = 36;
1520 double pf_brick_z = 10;
1522 double pf_arc_thick = 9;
1525 double sh_0_rin = 90.5;
1526 double sh_1_rin = 131.78;
1528 double sh_0_rout = 91.5;
1529 double sh_1_rout = 132.78;
1531 double sh_thick = 25.8;
1534 double nwr_1_rin = 159.;
1535 double nwr_2_rin = as_L3_5_1_rout;
1537 double nwr_1_rout = 182.6;
1538 double nwr_2_rout = 182.6;
1540 double nwr_1_thick = 2;
1541 double nwr_2_thick = 15;
1544 double nwr_1_a_rin = nwr_1_rin;
1545 double nwr_1_a_rout = as_L3_5_1_rout;
1546 double nwr_1_a_thick = nwr_1_thick;
1549 double nwr_1_b_rin = as_L3_5_1_rout;
1550 double nwr_1_b_rout = nwr_1_rout;
1551 double nwr_1_b_thick = nwr_1_thick;
1554 double w_brick_x = 40.;
1555 double w_brick_y = 18.;
1556 double w_brick_z = 11.;
1560 double z_as_L1_2_eP = zref;
1561 double z_as_L1_1_eP = z_as_L1_2_eP + 0.5 * as_L1_2_thick - 0.5 * as_L1_1_thick;
1562 double z_as_L1_3_eP = z_as_L1_2_eP + 0.5 * as_L1_2_thick + 0.5 * as_L1_3_thick;
1563 double z_as_L1_4_eP = z_as_L1_2_eP + 0.5 * as_L1_2_thick + 0.5 * as_L1_4_thick;
1572 double z_as_L2_1_eP = zref + displ_as_L2_1;
1573 double z_as_L2_2_eP = z_as_L2_1_eP + 0.5 * as_L2_1_thick - 0.5 * as_L2_2_thick;
1574 double z_as_L2_3_eP = z_as_L2_2_eP + 0.5 * as_L2_2_thick + 0.5 * as_L2_3_thick;
1575 double z_as_L2_4_eP = z_as_L2_1_eP + 0.5 * as_L2_1_thick + 0.5 * as_L2_4_thick;
1576 double z_as_L2_5_eP = z_as_L2_2_eP - 0.5 * as_L2_2_thick - 0.5 * as_L2_5_thick;
1585 double z_as_L3_4_eP = zref + displ_as_L3_4;
1586 double z_as_L3_1_eP = z_as_L3_4_eP + 0.5 * as_L3_4_thick + 0.5 * as_L3_1_thick;
1587 double z_as_L3_2_eP = z_as_L3_1_eP + 0.5 * as_L3_1_thick + 0.5 * as_L3_2_thick;
1588 double z_as_L3_5_eP = z_as_L3_4_eP + 0.5 * as_L3_4_thick + 0.5 * as_L3_5_thick;
1589 double z_as_L3_3_eP = z_as_L3_5_eP + 0.5 * as_L3_5_thick + 0.5 * as_L3_3_thick;
1598 double z_cfo_1_eP = 427.;
1599 double z_cfo_2_eP = 473.;
1601 double z_ef_1_eP = zref + displ_ef_1;
1602 double z_ef_1_a_eP = z_ef_1_eP;
1603 double z_ef_2_a_eP = z_ef_1_eP + 0.5 * (ef_1_a_thick + ef_2_a_thick);
1604 double z_ef_3_eP = z_ef_1_a_eP - 0.5* ef_1_a_thick + 0.5 * ef_3_thick;
1605 double z_ef_4_eP = z_ef_3_eP + 0.5 * ef_3_thick - 0.5 * ef_4_thick;
1607 double z_pf_1_eP = 486.85;
1608 double z_pf_2_eP = 494.85;
1609 double z_pf_3_eP = 494.85;
1610 double z_pf_side_0_eP = 511.666;
1611 double z_pf_side_1_eP = z_pf_side_0_eP + 0.5 * (pf_side_0_thick + pf_side_1_thick);
1613 double z_pf_arc_eP = 527.832;
1614 double z_pf_brick_eP = z_ef_1_eP + 0.5 * (ef_1_thick + pf_brick_z);
1616 double z_sh_eP = 502.6;
1618 double z_cbe_brick_eP = 479.5;
1621 double zref_w = zref;
1622 double z_nwr_1_wP = 522.;
1623 double z_nwr_2_wP = zref + displ_ef_1 - 0.5 * ef_1_thick - 0.5*nwr_2_thick;
1625 double z_w_brick_wP = 479.5;
1628 double cable_1_rin = as_L1_1_rin;
1629 double cable_2_0_rin = cfo_1_rin;
1630 double cable_2_1_rin = cable_2_0_rin;
1631 double cable_3_rin = cable_2_0_rin;
1632 double cable_4_0_rin = cable_2_0_rin;
1633 double cable_4_1_rin = cable_2_0_rin;
1634 double cable_5_0_rin = cable_2_0_rin;
1635 double cable_5_1_rin = cable_2_0_rin;
1636 double cable_6_rin = cable_2_0_rin;
1637 double cable_7_rin = pf_1_rin;
1638 double cable_8_rin = cable_7_rin;
1640 double cable_1_rout = as_L1_2_rout;
1641 double cable_2_0_rout = as_L2_5_0_rout;
1642 double cable_2_1_rout = as_L2_5_1_rout;
1643 double cable_3_rout = cable_2_1_rout;
1644 double cable_4_0_rout = as_L3_4_0_rout;
1645 double cable_4_1_rout = as_L3_4_1_rout;
1646 double cable_5_0_rout = as_L3_5_0_rout;
1647 double cable_5_1_rout = as_L3_5_1_rout;
1648 double cable_6_rout = cable_5_1_rout;
1649 double cable_7_rout = cable_5_1_rout;
1650 double cable_8_rout = sep_rin;
1679 double z_limit_1 = zref - 0.5 * as_L1_2_thick;
1680 double z_limit_2 = zref + displ_as_L2_1 + 0.5 * as_L2_1_thick - as_L2_2_thick - as_L2_5_thick;
1681 double z_limit_3 = z_limit_2 + as_L2_5_thick;
1682 double z_limit_4 = zref + displ_as_L3_4 - 0.5 * as_L3_4_thick;
1683 double z_limit_5 = z_limit_4 + as_L3_4_thick;
1684 double z_limit_6 = z_limit_5 + as_L3_5_thick;
1685 double z_limit_7 = 484;
1686 double z_limit_8 = zref + displ_ef_1 - 0.5 * ef_1_thick;
1687 double z_limit_9 = z_limit_8 + ef_1_thick + ef_2_thick;
1689 double z_limit_min = z_limit_1;
1690 double z_limit_max = z_limit_9;
1692 double cable_1_thick = z_limit_2 - z_limit_1;
1693 double cable_2_thick = z_limit_3 - z_limit_2;
1694 double cable_3_thick = z_limit_4 - z_limit_3;
1695 double cable_4_thick = z_limit_5 - z_limit_4;
1696 double cable_5_thick = z_limit_6 - z_limit_5;
1697 double cable_6_thick = z_limit_7 - z_limit_6;
1698 double cable_7_thick = z_limit_8 - z_limit_7;
1699 double cable_8_thick = z_limit_9 - z_limit_8;
1701 double angle2pi = CLHEP::twopi *CLHEP::rad;
1703 G4Tubs* cable_1 =
new G4Tubs(
"cable_1", cable_1_rin *CLHEP::mm, cable_1_rout *CLHEP::mm,
1704 0.5 * cable_1_thick *CLHEP::mm, 0, angle2pi);
1705 G4Cons* cable_2 =
new G4Cons(
"cable_2", cable_2_0_rin *CLHEP::mm, cable_2_0_rout *CLHEP::mm,
1706 cable_2_1_rin *CLHEP::mm, cable_2_1_rout *CLHEP::mm,
1707 0.5 * cable_2_thick *CLHEP::mm, 0, angle2pi);
1708 G4Tubs* cable_3 =
new G4Tubs(
"cable_3", cable_3_rin *CLHEP::mm, cable_3_rout *CLHEP::mm,
1709 0.5 * cable_3_thick *CLHEP::mm, 0, angle2pi);
1710 G4Cons* cable_4 =
new G4Cons(
"cable_4", cable_4_0_rin *CLHEP::mm, cable_4_0_rout *CLHEP::mm,
1711 cable_4_1_rin *CLHEP::mm, cable_4_1_rout *CLHEP::mm,
1712 0.5 * cable_4_thick *CLHEP::mm, 0, angle2pi);
1713 G4Cons* cable_5 =
new G4Cons(
"cable_5", cable_5_0_rin *CLHEP::mm, cable_5_0_rout *CLHEP::mm,
1714 cable_5_1_rin *CLHEP::mm, cable_5_1_rout *CLHEP::mm,
1715 0.5 * cable_5_thick *CLHEP::mm, 0, angle2pi);
1716 G4Tubs* cable_6 =
new G4Tubs(
"cable_6", cable_6_rin *CLHEP::mm, cable_6_rout *CLHEP::mm,
1717 0.5 * cable_6_thick *CLHEP::mm, 0, angle2pi);
1718 G4Tubs* cable_7 =
new G4Tubs(
"cable_7", cable_7_rin *CLHEP::mm, cable_7_rout *CLHEP::mm,
1719 0.5 * cable_7_thick *CLHEP::mm, 0, angle2pi);
1720 G4Tubs* cable_8 =
new G4Tubs(
"cable_8", cable_8_rin *CLHEP::mm, cable_8_rout *CLHEP::mm,
1721 0.5 * cable_8_thick *CLHEP::mm, 0, angle2pi);
1746 double z_shift = -0.5*(cable_1_thick - as_L1_2_thick);
1749 G4Material* cable_copper = G4NistManager::Instance()->FindOrBuildMaterial(
"G4_Cu");
1750 G4Material* cable_plastic = G4NistManager::Instance()->FindOrBuildMaterial(
"G4_POLYETHYLENE");
1752 G4Material *cable_material =
new G4Material(
"cable_material", cable_density, 1);
1753 cable_material->AddMaterial(cable_copper, 1);
1764 G4RotationMatrix cable_rot;
1765 G4ThreeVector cable_tr(0, 0, 0.5* (cable_1_thick + cable_2_thick) *CLHEP::mm);
1767 G4Transform3D cable_tr12(cable_rot, cable_tr);
1768 G4UnionSolid *cable_12 =
new G4UnionSolid(
"cable_12", cable_1, cable_2, cable_tr12);
1770 cable_tr.set(0, 0, (0.5* (cable_1_thick + cable_3_thick) + cable_2_thick) * CLHEP::mm);
1771 G4Transform3D cable_tr123(cable_rot, cable_tr);
1772 G4UnionSolid *cable_123 =
new G4UnionSolid(
"cable_123", cable_12, cable_3, cable_tr123);
1774 cable_tr.set(0, 0, (0.5* (cable_1_thick + cable_4_thick) + cable_3_thick + cable_2_thick) * CLHEP::mm);
1775 G4Transform3D cable_tr1234(cable_rot, cable_tr);
1776 G4UnionSolid *cable_1234 =
new G4UnionSolid(
"cable_1234", cable_123, cable_4, cable_tr1234);
1778 cable_tr.set(0, 0, (0.5* (cable_1_thick + cable_5_thick) + cable_4_thick + cable_3_thick + cable_2_thick) * CLHEP::mm);
1779 G4Transform3D cable_tr12345(cable_rot, cable_tr);
1780 G4UnionSolid *cable_12345 =
new G4UnionSolid(
"cable_12345", cable_1234, cable_5, cable_tr12345);
1782 cable_tr.set(0, 0, (0.5* (cable_1_thick + cable_6_thick) + cable_5_thick + cable_4_thick + cable_3_thick + cable_2_thick) * CLHEP::mm);
1783 G4Transform3D cable_tr123456(cable_rot, cable_tr);
1784 G4UnionSolid *cable_123456 =
new G4UnionSolid(
"cable_123456", cable_12345, cable_6, cable_tr123456);
1786 cable_tr.set(0, 0, (0.5* (cable_1_thick + cable_7_thick) + cable_6_thick + cable_5_thick + cable_4_thick + cable_3_thick + cable_2_thick) * CLHEP::mm);
1787 G4Transform3D cable_tr1234567(cable_rot, cable_tr);
1788 G4UnionSolid *cable_1234567 =
new G4UnionSolid(
"cable_1234567", cable_123456, cable_7, cable_tr1234567);
1790 cable_tr.set(0, 0, (0.5* (cable_1_thick + cable_8_thick) +
1791 cable_7_thick + cable_6_thick + cable_5_thick + cable_4_thick + cable_3_thick + cable_2_thick) * CLHEP::mm);
1792 G4Transform3D cable_tr12345678(cable_rot, cable_tr);
1793 G4UnionSolid *cable_12345678 =
new G4UnionSolid(
"cable_12345678", cable_1234567, cable_8, cable_tr12345678);
1798 G4LogicalVolume* cable_e_L =
new G4LogicalVolume(cable_12345678, cable_material,
"cable_e_L", 0, 0, 0);
1800 G4LogicalVolume* cable_w_L =
new G4LogicalVolume(cable_12345678, cable_material,
"cable_w_L", 0, 0, 0);
1802 G4VisAttributes cable_attributes;
1804 cable_attributes.SetColor(G4Color::Magenta());
1805 cable_e_L->SetVisAttributes(cable_attributes);
1806 cable_attributes.SetColor(G4Color::Cyan());
1807 cable_w_L->SetVisAttributes(cable_attributes);
1811 G4Tubs* as_L1_1 =
new G4Tubs(
"as_L1_1", as_L1_1_rin *CLHEP::mm, as_L1_1_rout *CLHEP::mm,
1812 0.5 * as_L1_1_thick *CLHEP::mm, 0, angle2pi);
1813 G4Tubs* as_L1_2 =
new G4Tubs(
"as_L1_2", as_L1_2_rin *CLHEP::mm, as_L1_2_rout *CLHEP::mm,
1814 0.5 * as_L1_2_thick *CLHEP::mm, 0, angle2pi);
1815 G4Tubs* as_L1_3 =
new G4Tubs(
"as_L1_3", as_L1_3_rin *CLHEP::mm, as_L1_3_rout *CLHEP::mm,
1816 0.5 * as_L1_3_thick *CLHEP::mm, 0, angle2pi);
1817 G4Tubs* as_L1_4 =
new G4Tubs(
"as_L1_4", as_L1_4_rin *CLHEP::mm, as_L1_4_rout *CLHEP::mm,
1818 0.5 * as_L1_4_thick *CLHEP::mm, 0, angle2pi);
1821 G4Tubs* as_L2_1 =
new G4Tubs(
"as_L2_1", as_L2_1_rin *CLHEP::mm, as_L2_1_rout *CLHEP::mm,
1822 0.5 * as_L2_1_thick *CLHEP::mm, 0, angle2pi);
1823 G4Tubs* as_L2_2 =
new G4Tubs(
"as_L2_2", as_L2_2_rin *CLHEP::mm, as_L2_2_rout *CLHEP::mm,
1824 0.5 * as_L2_2_thick *CLHEP::mm, 0, angle2pi);
1825 G4Tubs* as_L2_3 =
new G4Tubs(
"as_L2_3", as_L2_3_rin *CLHEP::mm, as_L2_3_rout *CLHEP::mm,
1826 0.5 * as_L2_3_thick *CLHEP::mm, 0, angle2pi);
1827 G4Tubs* as_L2_4 =
new G4Tubs(
"as_L2_4", as_L2_4_rin *CLHEP::mm, as_L2_4_rout *CLHEP::mm,
1828 0.5 * as_L2_4_thick *CLHEP::mm, 0, angle2pi);
1829 G4Cons* as_L2_5 =
new G4Cons(
"as_L2_5", as_L2_5_0_rin *CLHEP::mm, as_L2_5_0_rout *CLHEP::mm,
1830 as_L2_5_1_rin *CLHEP::mm, as_L2_5_1_rout *CLHEP::mm,
1831 0.5 * as_L2_5_thick *CLHEP::mm, 0, angle2pi);
1833 G4Tubs* as_L3_1 =
new G4Tubs(
"as_L3_1", as_L3_1_rin *CLHEP::mm, as_L3_1_rout *CLHEP::mm,
1834 0.5 * as_L3_1_thick *CLHEP::mm, 0, angle2pi);
1835 G4Tubs* as_L3_2 =
new G4Tubs(
"as_L3_2", as_L3_2_rin *CLHEP::mm, as_L3_2_rout *CLHEP::mm,
1836 0.5 * as_L3_2_thick *CLHEP::mm, 0, angle2pi);
1837 G4Tubs* as_L3_3 =
new G4Tubs(
"as_L3_3", as_L3_3_rin *CLHEP::mm, as_L3_3_rout *CLHEP::mm,
1838 0.5 * as_L3_3_thick *CLHEP::mm, 0, angle2pi);
1839 G4Cons* as_L3_4 =
new G4Cons(
"as_L3_4", as_L3_4_0_rin *CLHEP::mm, as_L3_4_0_rout *CLHEP::mm,
1840 as_L3_4_1_rin *CLHEP::mm, as_L3_4_1_rout *CLHEP::mm,
1841 0.5 * as_L3_4_thick *CLHEP::mm, 0, angle2pi);
1842 G4Cons* as_L3_5 =
new G4Cons(
"as_L3_5", as_L3_5_0_rin *CLHEP::mm, as_L3_5_0_rout *CLHEP::mm,
1843 as_L3_5_1_rin *CLHEP::mm, as_L3_5_1_rout *CLHEP::mm,
1844 0.5 * as_L3_5_thick *CLHEP::mm, 0, angle2pi);
1847 G4Tubs* cfo_1 =
new G4Tubs(
"cfo_1", cfo_1_rin *CLHEP::mm, cfo_1_rout *CLHEP::mm, 0.5*70. *CLHEP::mm, 0, angle2pi);
1848 G4Tubs* cfo_2 =
new G4Tubs(
"cfo_2", cfo_2_rin *CLHEP::mm, cfo_2_rout *CLHEP::mm, 0.5*22. *CLHEP::mm, 0, angle2pi);
1851 G4Tubs* cfo_brick_1 =
new G4Tubs(
"cfo_brick_1", cfo_brick_1_rin *CLHEP::mm, cfo_brick_1_rout *CLHEP::mm,
1852 0.5 * cfo_brick_1_thick *CLHEP::mm, -0.5* cfo_phi * CLHEP::rad, cfo_phi * CLHEP::rad);
1853 G4Box *cfo_brick_2 =
new G4Box(
"cfo_brick_2",
1854 0.5* cfo_brick_2_x *CLHEP::mm,
1855 0.5* cfo_brick_2_y *CLHEP::mm,
1856 0.5* cfo_brick_2_z *CLHEP::mm);
1857 G4ThreeVector cfo_brick_pos_1_2((cfo_2_rout + 0.5* cfo_brick_2_x) *CLHEP::mm,
1859 0.5 * (cfo_brick_2_z + cfo_brick_1_thick) *CLHEP::mm);
1860 G4Transform3D cfo_transform(G4RotationMatrix(), cfo_brick_pos_1_2);
1861 G4UnionSolid *cfo_brick =
new G4UnionSolid(
"cfo_brick", cfo_brick_1, cfo_brick_2, cfo_transform);
1864 G4Tubs* ef_1_a =
new G4Tubs(
"ef_1_a", ef_1_a_rin *CLHEP::mm, ef_1_a_rout *CLHEP::mm, 0.5 * ef_1_a_thick *CLHEP::mm, 0, angle2pi);
1865 G4Tubs* ef_2_a =
new G4Tubs(
"ef_2_a", ef_2_a_rin *CLHEP::mm, ef_2_a_rout *CLHEP::mm, 0.5 * ef_2_a_thick *CLHEP::mm, 0, angle2pi);
1866 G4Tubs* ef_3 =
new G4Tubs(
"ef_3", ef_3_rin *CLHEP::mm, ef_3_rout *CLHEP::mm, 0.5 * ef_3_thick *CLHEP::mm, 0, angle2pi);
1867 G4Tubs* ef_4 =
new G4Tubs(
"ef_4", ef_4_rin *CLHEP::mm, ef_4_rout *CLHEP::mm, 0.5 * ef_4_thick *CLHEP::mm, 0, angle2pi);
1870 G4Tubs* pf_1 =
new G4Tubs(
"pf_1", pf_1_rin*CLHEP::mm, pf_1_rout*CLHEP::mm, 0.5 * pf_1_thick *CLHEP::mm, 0, angle2pi);
1871 G4Tubs* pf_2 =
new G4Tubs(
"pf_2", pf_2_rin*CLHEP::mm, pf_2_rout*CLHEP::mm, 0.5 * pf_2_thick *CLHEP::mm, 0, angle2pi);
1872 G4Cons* pf_3 =
new G4Cons(
"pf_3",
1873 pf_3_0_rin *CLHEP::mm, pf_3_0_rout *CLHEP::mm,
1874 pf_3_1_rin *CLHEP::mm, pf_3_1_rout *CLHEP::mm,
1875 0.5 * pf_3_thick *CLHEP::mm, 0, angle2pi);
1877 G4Box *pf_brick =
new G4Box(
"pf_brick", 0.5* pf_brick_x *CLHEP::mm, 0.5* pf_brick_y*CLHEP::mm, 0.5* pf_brick_z*CLHEP::mm);
1879 double pf_arc_dphi = 74.33;
1880 G4Tubs* pf_arc =
new G4Tubs(
"pf_arc", 132. *CLHEP::mm, 155. *CLHEP::mm, 0.5*9. *CLHEP::mm, - 0.5 * pf_arc_dphi *CLHEP::deg, pf_arc_dphi *CLHEP::deg);
1883 double pf_side_0_l = 84 *CLHEP::mm;
1884 double pf_side_0_R = 132. *CLHEP::mm;
1885 double pf_side_0_dphi = pf_side_0_l/pf_side_0_R;
1886 G4Cons* pf_side_0 =
new G4Cons(
"pf_side_0",
1887 pf_side_0_0_rin *CLHEP::mm, pf_side_0_0_rout *CLHEP::mm,
1888 pf_side_0_1_rin *CLHEP::mm, pf_side_0_1_rout *CLHEP::mm,
1889 0.5 * pf_side_0_thick *CLHEP::mm, - 0.5 * pf_side_0_dphi *CLHEP::rad, pf_side_0_dphi *CLHEP::rad);
1890 double pf_side_1_dphi = 90 - pf_arc_dphi;
1891 G4Cons* pf_side_1 =
new G4Cons(
"pf_side_1",
1892 pf_side_1_0_rin *CLHEP::mm, pf_side_1_0_rout *CLHEP::mm,
1893 pf_side_1_1_rin *CLHEP::mm, pf_side_1_1_rout *CLHEP::mm,
1894 0.5 * pf_side_1_thick *CLHEP::mm, -0.5 * pf_side_1_dphi*CLHEP::deg, pf_side_1_dphi*CLHEP::deg);
1898 G4Cons* sh =
new G4Cons(
"sh",
1899 sh_0_rin *CLHEP::mm, sh_0_rout *CLHEP::mm,
1900 sh_1_rin *CLHEP::mm, sh_1_rout *CLHEP::mm,
1901 0.5 * sh_thick *CLHEP::mm, 0, angle2pi);
1904 G4Box *cbe_brick =
new G4Box(
"cbe_brick", 0.5* 38.5*CLHEP::mm, 0.5* 18.*CLHEP::mm, 0.5* 13*CLHEP::mm);
1909 G4LogicalVolume* as_L1_1_L =
new G4LogicalVolume(as_L1_1, m_M_Permaglas,
"as_L1_1_L", 0, 0, 0);
1910 G4LogicalVolume* as_L1_2_L =
new G4LogicalVolume(as_L1_2, m_M_Permaglas,
"as_L1_2_L", 0, 0, 0);
1911 G4LogicalVolume* as_L1_3_L =
new G4LogicalVolume(as_L1_3, m_M_Permaglas,
"as_L1_3_L", 0, 0, 0);
1912 G4LogicalVolume* as_L1_4_L =
new G4LogicalVolume(as_L1_4, m_M_Permaglas,
"as_L1_4_L", 0, 0, 0);
1914 G4LogicalVolume* as_L2_1_L =
new G4LogicalVolume(as_L2_1, m_M_Permaglas,
"as_L2_1_L", 0, 0, 0);
1915 G4LogicalVolume* as_L2_2_L =
new G4LogicalVolume(as_L2_2, m_M_Permaglas,
"as_L2_2_L", 0, 0, 0);
1916 G4LogicalVolume* as_L2_3_L =
new G4LogicalVolume(as_L2_3, m_M_Permaglas,
"as_L2_3_L", 0, 0, 0);
1917 G4LogicalVolume* as_L2_4_L =
new G4LogicalVolume(as_L2_4, m_M_Permaglas,
"as_L2_4_L", 0, 0, 0);
1918 G4LogicalVolume* as_L2_5_L =
new G4LogicalVolume(as_L2_5, m_M_Permaglas,
"as_L2_5_L", 0, 0, 0);
1920 G4LogicalVolume* as_L3_1_L =
new G4LogicalVolume(as_L3_1, m_M_Permaglas,
"as_L3_1_L", 0, 0, 0);
1921 G4LogicalVolume* as_L3_2_L =
new G4LogicalVolume(as_L3_2, m_M_Permaglas,
"as_L3_2_L", 0, 0, 0);
1922 G4LogicalVolume* as_L3_3_L =
new G4LogicalVolume(as_L3_3, m_M_Permaglas,
"as_L3_3_L", 0, 0, 0);
1923 G4LogicalVolume* as_L3_4_L =
new G4LogicalVolume(as_L3_4, m_M_Permaglas,
"as_L3_4_L", 0, 0, 0);
1924 G4LogicalVolume* as_L3_5_L =
new G4LogicalVolume(as_L3_5, m_M_Permaglas,
"as_L3_5_L", 0, 0, 0);
1926 G4LogicalVolume* cfo_1_L =
new G4LogicalVolume(cfo_1, m_M_Permaglas,
"cfo_1_L", 0, 0, 0);
1927 G4LogicalVolume* cfo_2_L =
new G4LogicalVolume(cfo_2, m_M_Permaglas,
"cfo_2_L", 0, 0, 0);
1928 G4LogicalVolume* cfo_brick_L =
new G4LogicalVolume(cfo_brick, m_M_Permaglas,
"cfo_brick_L", 0, 0, 0);
1930 G4LogicalVolume* ef_1_a_L =
new G4LogicalVolume(ef_1_a, m_M_Aluminum,
"ef_1_a_L", 0, 0, 0);
1931 G4LogicalVolume* ef_2_a_L =
new G4LogicalVolume(ef_2_a, m_M_Aluminum,
"ef_2_a_L", 0, 0, 0);
1932 G4LogicalVolume* ef_3_L =
new G4LogicalVolume(ef_3, m_M_Aluminum,
"ef_3_L", 0, 0, 0);
1933 G4LogicalVolume* ef_4_L =
new G4LogicalVolume(ef_4, m_M_Aluminum,
"ef_4_L", 0, 0, 0);
1935 G4LogicalVolume* pf_1_L =
new G4LogicalVolume(pf_1, m_M_Permaglas,
"pf_1_L", 0, 0, 0);
1936 G4LogicalVolume* pf_2_L =
new G4LogicalVolume(pf_2, m_M_Permaglas,
"pf_2_L", 0, 0, 0);
1937 G4LogicalVolume* pf_3_L =
new G4LogicalVolume(pf_3, m_M_Permaglas,
"pf_3_L", 0, 0, 0);
1938 G4LogicalVolume* pf_arc_L =
new G4LogicalVolume(pf_arc, m_M_Aluminum,
"pf_arc_L", 0, 0, 0);
1939 G4LogicalVolume* pf_brick_L =
new G4LogicalVolume(pf_brick, m_M_Aluminum,
"pf_brick_L", 0, 0, 0);
1940 G4LogicalVolume* pf_side_0_L =
new G4LogicalVolume(pf_side_0, m_M_Permaglas,
"pf_side_0_L", 0, 0, 0);
1941 G4LogicalVolume* pf_side_1_L =
new G4LogicalVolume(pf_side_1, m_M_Permaglas,
"pf_side_1_L", 0, 0, 0);
1943 G4LogicalVolume* sh_L =
new G4LogicalVolume(sh, m_M_Aluminum,
"sh_L", 0, 0, 0);
1945 G4LogicalVolume* cbe_brick_L =
new G4LogicalVolume(cbe_brick, m_M_Permaglas,
"cbe_brick_L", 0, 0, 0);
1948 G4VisAttributes Al_attributes;
1949 Al_attributes.SetForceSolid(
true);
1950 Al_attributes.SetColor(G4Color::Grey());
1951 as_L1_1_L->SetVisAttributes(Al_attributes);
1952 as_L1_2_L->SetVisAttributes(Al_attributes);
1953 as_L1_3_L->SetVisAttributes(Al_attributes);
1955 as_L2_2_L->SetVisAttributes(Al_attributes);
1956 as_L2_3_L->SetVisAttributes(Al_attributes);
1957 as_L2_5_L->SetVisAttributes(Al_attributes);
1959 as_L3_3_L->SetVisAttributes(Al_attributes);
1960 as_L3_5_L->SetVisAttributes(Al_attributes);
1962 ef_1_a_L->SetVisAttributes(Al_attributes);
1963 ef_2_a_L->SetVisAttributes(Al_attributes);
1964 ef_3_L->SetVisAttributes(Al_attributes);
1965 ef_4_L->SetVisAttributes(Al_attributes);
1967 pf_arc_L->SetVisAttributes(Al_attributes);
1968 pf_brick_L->SetVisAttributes(Al_attributes);
1970 sh_L->SetVisAttributes(Al_attributes);
1973 G4VisAttributes PER_attributes;
1974 PER_attributes.SetForceSolid(
true);
1975 PER_attributes.SetColor(G4Color::Yellow());
1977 as_L1_4_L->SetVisAttributes(PER_attributes);
1979 as_L2_1_L->SetVisAttributes(PER_attributes);
1980 as_L2_4_L->SetVisAttributes(PER_attributes);
1982 as_L3_1_L->SetVisAttributes(PER_attributes);
1983 as_L3_2_L->SetVisAttributes(PER_attributes);
1984 as_L3_4_L->SetVisAttributes(PER_attributes);
1986 cfo_1_L->SetVisAttributes(PER_attributes);
1987 cfo_2_L->SetVisAttributes(PER_attributes);
1988 cfo_brick_L->SetVisAttributes(PER_attributes);
1989 cbe_brick_L->SetVisAttributes(PER_attributes);
1991 pf_1_L->SetVisAttributes(PER_attributes);
1992 pf_2_L->SetVisAttributes(PER_attributes);
1993 pf_3_L->SetVisAttributes(PER_attributes);
1994 pf_side_0_L->SetVisAttributes(PER_attributes);
1995 pf_side_1_L->SetVisAttributes(PER_attributes);
2054 G4AssemblyVolume *common_supp =
new G4AssemblyVolume();
2056 G4ThreeVector position;
2059 position.set(0, 0, (z_as_L1_1_eP - zref) * CLHEP::mm);
2060 common_supp->AddPlacedVolume(as_L1_1_L, position, 0);
2061 position.set(0, 0, (z_as_L1_2_eP - zref)*CLHEP::mm);
2062 common_supp->AddPlacedVolume(as_L1_2_L, position, 0);
2063 position.set(0, 0, (z_as_L1_3_eP - zref)*CLHEP::mm);
2064 common_supp->AddPlacedVolume(as_L1_3_L, position, 0);
2065 position.set(0, 0, (z_as_L1_4_eP - zref)*CLHEP::mm);
2066 common_supp->AddPlacedVolume(as_L1_4_L, position, 0);
2069 position.set(0, 0, (z_as_L2_1_eP - zref)*CLHEP::mm);
2070 common_supp->AddPlacedVolume(as_L2_1_L, position, 0);
2071 position.set(0, 0, (z_as_L2_2_eP - zref)*CLHEP::mm);
2072 common_supp->AddPlacedVolume(as_L2_2_L, position, 0);
2073 position.set(0, 0, (z_as_L2_3_eP - zref)*CLHEP::mm);
2074 common_supp->AddPlacedVolume(as_L2_3_L, position, 0);
2075 position.set(0, 0, (z_as_L2_4_eP - zref)*CLHEP::mm);
2076 common_supp->AddPlacedVolume(as_L2_4_L, position, 0);
2077 position.set(0, 0, (z_as_L2_5_eP - zref)*CLHEP::mm);
2078 common_supp->AddPlacedVolume(as_L2_5_L, position, 0);
2082 position.set(0, 0, (z_as_L3_1_eP - zref)*CLHEP::mm);
2083 common_supp->AddPlacedVolume(as_L3_1_L, position, 0);
2084 position.set(0, 0, (z_as_L3_2_eP - zref)*CLHEP::mm);
2085 common_supp->AddPlacedVolume(as_L3_2_L, position, 0);
2086 position.set(0, 0, (z_as_L3_3_eP - zref)*CLHEP::mm);
2087 common_supp->AddPlacedVolume(as_L3_3_L, position, 0);
2088 position.set(0, 0, (z_as_L3_4_eP - zref)*CLHEP::mm);
2089 common_supp->AddPlacedVolume(as_L3_4_L, position, 0);
2090 position.set(0, 0, (z_as_L3_5_eP - zref)*CLHEP::mm);
2091 common_supp->AddPlacedVolume(as_L3_5_L, position, 0);
2095 position.set(0, 0, (z_cfo_1_eP - zref)*CLHEP::mm);
2096 common_supp->AddPlacedVolume(cfo_1_L, position, 0);
2097 position.set(0, 0, (z_cfo_2_eP - zref)*CLHEP::mm);
2098 common_supp->AddPlacedVolume(cfo_2_L, position, 0);
2124 position.set(0, 0, z_ef_1_a_eP - zref);
2125 common_supp->AddPlacedVolume(ef_1_a_L, position, 0);
2126 position.set(0, 0, z_ef_2_a_eP - zref);
2127 common_supp->AddPlacedVolume(ef_2_a_L, position, 0);
2130 position.set(0, 0, z_pf_1_eP - zref);
2131 common_supp->AddPlacedVolume(pf_1_L, position, 0);
2132 position.set(0, 0, z_pf_2_eP - zref);
2133 common_supp->AddPlacedVolume(pf_2_L, position, 0);
2134 position.set(0, 0, z_pf_3_eP - zref);
2135 common_supp->AddPlacedVolume(pf_3_L, position, 0);
2137 position.set(0, 0, z_pf_arc_eP - zref);
2138 common_supp->AddPlacedVolume(pf_arc_L, position, 0);
2140 G4RotationMatrix *pf_arc_2_rot =
new G4RotationMatrix();
2141 pf_arc_2_rot->rotateZ(-90. *CLHEP::deg);
2142 position.set(0, 0, z_pf_arc_eP - zref);
2143 common_supp->AddPlacedVolume(pf_arc_L, position, pf_arc_2_rot);
2145 G4RotationMatrix *pf_arc_3_rot =
new G4RotationMatrix();
2146 pf_arc_3_rot->rotateZ(-180. *CLHEP::deg);
2147 position.set(0, 0, z_pf_arc_eP - zref);
2148 common_supp->AddPlacedVolume(pf_arc_L, position, pf_arc_3_rot);
2150 G4RotationMatrix *pf_arc_4_rot =
new G4RotationMatrix();
2151 pf_arc_4_rot->rotateZ(-270. *CLHEP::deg);
2152 position.set(0, 0, z_pf_arc_eP - zref);
2153 common_supp->AddPlacedVolume(pf_arc_L, position, pf_arc_4_rot);
2155 double pf_angle = 45 *CLHEP::deg;
double pf_rad = pf_side_1_0_rout + 0.5*pf_brick_y;
2156 position.set(pf_rad *
cos(pf_angle), pf_rad *
sin(pf_angle), z_pf_brick_eP - zref);
2157 G4RotationMatrix *pf_brick_1_rot =
new G4RotationMatrix();
2158 pf_brick_1_rot->rotateZ(-pf_angle);
2159 common_supp->AddPlacedVolume(pf_brick_L, position, pf_brick_1_rot);
2161 position.set(pf_rad *
cos(3*pf_angle), pf_rad *
sin(3*pf_angle), z_pf_brick_eP - zref);
2162 G4RotationMatrix *pf_brick_2_rot =
new G4RotationMatrix();
2163 pf_brick_2_rot->rotateZ(pf_angle);
2164 common_supp->AddPlacedVolume(pf_brick_L, position, pf_brick_2_rot);
2166 position.set(pf_rad *
cos(5*pf_angle), pf_rad *
sin(5*pf_angle), z_pf_brick_eP - zref);
2167 G4RotationMatrix *pf_brick_3_rot =
new G4RotationMatrix();
2168 pf_brick_3_rot->rotateZ(3*pf_angle);
2169 common_supp->AddPlacedVolume(pf_brick_L, position, pf_brick_3_rot);
2171 position.set(pf_rad *
cos(7*pf_angle), pf_rad *
sin(7*pf_angle), z_pf_brick_eP - zref);
2172 G4RotationMatrix *pf_brick_4_rot =
new G4RotationMatrix();
2173 pf_brick_4_rot->rotateZ(-3*pf_angle);
2174 common_supp->AddPlacedVolume(pf_brick_L, position, pf_brick_4_rot);
2176 double pf_side_0_angle = 45. *CLHEP::deg;
2178 position.set(0, 0, z_pf_side_0_eP - zref);
2179 G4RotationMatrix * pf_side_0_1_rot =
new G4RotationMatrix();
2180 pf_side_0_1_rot->rotateZ(pf_side_0_angle);
2181 common_supp->AddPlacedVolume(pf_side_0_L, position, pf_side_0_1_rot);
2182 position.set(0, 0, z_pf_side_1_eP - zref);
2183 common_supp->AddPlacedVolume(pf_side_1_L, position, pf_side_0_1_rot);
2185 position.set(0, 0, z_pf_side_0_eP - zref);
2186 G4RotationMatrix * pf_side_0_2_rot =
new G4RotationMatrix();
2187 pf_side_0_2_rot->rotateZ(3*pf_side_0_angle);
2188 common_supp->AddPlacedVolume(pf_side_0_L, position, pf_side_0_2_rot);
2189 position.set(0, 0, z_pf_side_1_eP - zref);
2190 common_supp->AddPlacedVolume(pf_side_1_L, position, pf_side_0_2_rot);
2192 position.set(0, 0, z_pf_side_0_eP - zref);
2193 G4RotationMatrix * pf_side_0_3_rot =
new G4RotationMatrix();
2194 pf_side_0_3_rot->rotateZ(5*pf_side_0_angle);
2195 common_supp->AddPlacedVolume(pf_side_0_L, position, pf_side_0_3_rot);
2196 position.set(0, 0, z_pf_side_1_eP - zref);
2197 common_supp->AddPlacedVolume(pf_side_1_L, position, pf_side_0_3_rot);
2199 position.set(0, 0, z_pf_side_0_eP - zref);
2200 G4RotationMatrix * pf_side_0_4_rot =
new G4RotationMatrix();
2201 pf_side_0_4_rot->rotateZ(7*pf_side_0_angle);
2202 common_supp->AddPlacedVolume(pf_side_0_L, position, pf_side_0_4_rot);
2203 position.set(0, 0, z_pf_side_1_eP - zref);
2204 common_supp->AddPlacedVolume(pf_side_1_L, position, pf_side_0_4_rot);
2211 double cfo_angle = 97 *CLHEP::deg;
2212 G4RotationMatrix *cfo_brick_1_rot =
new G4RotationMatrix();
2213 cfo_brick_1_rot->rotateZ(cfo_angle);
2214 position.set(0, 0, z_cfo_2_eP - zref - 0.5 * cfo_brick_2_z + z_shift);
2215 G4VPhysicalVolume* cfo_brick_1_eP =
new G4PVPlacement(cfo_brick_1_rot, position, cfo_brick_L,
2216 "cfo_brick_1_eP", cable_e_L,
false, 0, m_CheckOverlaps);
2218 cfo_angle = 22.5 *CLHEP::deg;
2219 G4RotationMatrix *cfo_brick_2_rot =
new G4RotationMatrix();
2220 cfo_brick_2_rot->rotateZ(cfo_angle);
2221 G4VPhysicalVolume* cfo_brick_2_eP =
new G4PVPlacement(cfo_brick_2_rot, position, cfo_brick_L,
2222 "cfo_brick_2_eP", cable_e_L,
false, 1, m_CheckOverlaps);
2224 cfo_angle = 276.5 *CLHEP::deg;
2225 G4RotationMatrix *cfo_brick_3_rot =
new G4RotationMatrix();
2226 cfo_brick_3_rot->rotateZ(cfo_angle);
2227 G4VPhysicalVolume* cfo_brick_3_eP =
new G4PVPlacement(cfo_brick_3_rot, position, cfo_brick_L,
2228 "cfo_brick_3_eP", cable_e_L,
false, 2, m_CheckOverlaps);
2230 cfo_angle = 202.5 *CLHEP::deg;
2231 G4RotationMatrix *cfo_brick_4_rot =
new G4RotationMatrix();
2232 cfo_brick_4_rot->rotateZ(cfo_angle);
2233 G4VPhysicalVolume* cfo_brick_4_eP =
new G4PVPlacement(cfo_brick_4_rot, position, cfo_brick_L,
2234 "cfo_brick_4_eP", cable_e_L,
false, 3, m_CheckOverlaps);
2237 double cbe_rangle = 64.3 *CLHEP::deg;
double cbe_angle = 51.4 *CLHEP::deg;
double cbe_rad = 132.5 *CLHEP::mm;
2238 G4RotationMatrix * cbe_brick_1_rot =
new G4RotationMatrix(); cbe_brick_1_rot->rotateZ(-cbe_rangle);
2239 G4VPhysicalVolume* cbe_brick_1_eP =
new G4PVPlacement(cbe_brick_1_rot,
2240 G4ThreeVector(cbe_rad *
cos(cbe_rangle),
2241 cbe_rad *
sin(cbe_rangle),
2242 z_cbe_brick_eP - zref + z_shift),
2243 cbe_brick_L,
"cbe_brick_1_eP", cable_e_L,
false, 1, m_CheckOverlaps);
2244 G4VPhysicalVolume* cbe_brick_4_eP =
new G4PVPlacement(cbe_brick_1_rot,
2245 G4ThreeVector(cbe_rad *
cos(CLHEP::pi+cbe_rangle),
2246 cbe_rad *
sin(CLHEP::pi+cbe_rangle),
2247 z_cbe_brick_eP - zref + z_shift),
2248 cbe_brick_L,
"cbe_brick_4_eP", cable_e_L,
false, 4, m_CheckOverlaps);
2250 cbe_rangle += cbe_angle;
2251 G4RotationMatrix * cbe_brick_2_rot =
new G4RotationMatrix(); cbe_brick_2_rot->rotateZ(-cbe_rangle);
2252 G4VPhysicalVolume* cbe_brick_2_eP =
new G4PVPlacement(cbe_brick_2_rot,
2253 G4ThreeVector(cbe_rad *
cos(cbe_rangle),
2254 cbe_rad *
sin(cbe_rangle),
2255 z_cbe_brick_eP - zref + z_shift),
2256 cbe_brick_L,
"cbe_brick_2_eP", cable_e_L,
false, 2, m_CheckOverlaps);
2257 G4VPhysicalVolume* cbe_brick_5_eP =
new G4PVPlacement(cbe_brick_2_rot,
2258 G4ThreeVector(cbe_rad *
cos(CLHEP::pi+cbe_rangle),
2259 cbe_rad *
sin(CLHEP::pi+cbe_rangle),
2260 z_cbe_brick_eP - zref + z_shift),
2261 cbe_brick_L,
"cbe_brick_5_eP", cable_e_L,
false, 5, m_CheckOverlaps);
2263 cbe_rangle += cbe_angle;
2264 G4RotationMatrix * cbe_brick_3_rot =
new G4RotationMatrix(); cbe_brick_3_rot->rotateZ(-cbe_rangle);
2265 G4VPhysicalVolume* cbe_brick_3_eP =
new G4PVPlacement(cbe_brick_3_rot,
2266 G4ThreeVector(cbe_rad *
cos(cbe_rangle),
2267 cbe_rad *
sin(cbe_rangle),
2268 z_cbe_brick_eP - zref + z_shift),
2269 cbe_brick_L,
"cbe_brick_3_eP", cable_e_L,
false, 3, m_CheckOverlaps);
2270 G4VPhysicalVolume* cbe_brick_6_eP =
new G4PVPlacement(cbe_brick_3_rot,
2271 G4ThreeVector(cbe_rad *
cos(CLHEP::pi+cbe_rangle),
2272 cbe_rad *
sin(CLHEP::pi+cbe_rangle),
2273 z_cbe_brick_eP - zref + z_shift),
2274 cbe_brick_L,
"cbe_brick_6_eP", cable_e_L,
false, 6, m_CheckOverlaps);
2276 double ef_east_thick = 4;
2277 G4Tubs* ef_east =
new G4Tubs(
"ef_east", ef_2_a_rin *CLHEP::mm, ef_4_rout *CLHEP::mm, 0.5 * ef_east_thick*CLHEP::mm, 0, angle2pi);
2278 G4LogicalVolume* ef_east_L =
new G4LogicalVolume(ef_east, m_M_Aluminum,
"ef_east_L", 0, 0, 0);
2279 double z_ef_east = z_ef_1_eP + 0.5*ef_1_thick + ef_2_thick+0.5*ef_east_thick;
2280 G4VPhysicalVolume* ef_east_eP =
new G4PVPlacement(0, G4ThreeVector(0., 0., z_ef_east), ef_east_L,
"ef_east_eP", logicCgem,
false, 0, m_CheckOverlaps);
2281 ef_east_L->SetVisAttributes(Al_attributes);
2284 double cfo_w_angle = -55. *CLHEP::deg;
2285 G4RotationMatrix *cfo_w_brick_1_rot =
new G4RotationMatrix();
2286 cfo_w_brick_1_rot->rotateZ(cfo_w_angle);
2287 position.set(0, 0, z_cfo_2_eP - zref - 0.5 * cfo_brick_2_z + z_shift);
2288 G4VPhysicalVolume* cfo_w_brick_1_eP =
new G4PVPlacement(cfo_w_brick_1_rot, position, cfo_brick_L,
2289 "cfo_w_brick_1_eP", cable_w_L,
false, 1, m_CheckOverlaps);
2290 cfo_w_angle = -160 *CLHEP::deg;
2291 G4RotationMatrix *cfo_w_brick_2_rot =
new G4RotationMatrix();
2292 cfo_w_brick_2_rot->rotateZ(cfo_w_angle);
2293 G4VPhysicalVolume* cfo_w_brick_2_eP =
new G4PVPlacement(cfo_w_brick_2_rot, position, cfo_brick_L,
2294 "cfo_w_brick_2_eP", cable_w_L,
false, 2, m_CheckOverlaps);
2295 cfo_w_angle = -235 *CLHEP::deg;
2296 G4RotationMatrix *cfo_w_brick_3_rot =
new G4RotationMatrix();
2297 cfo_w_brick_3_rot->rotateZ(cfo_w_angle);
2298 G4VPhysicalVolume* cfo_w_brick_3_eP =
new G4PVPlacement(cfo_w_brick_3_rot, position, cfo_brick_L,
2299 "cfo_w_brick_3_eP", cable_w_L,
false, 3, m_CheckOverlaps);
2300 cfo_w_angle = -340. *CLHEP::deg;
2301 G4RotationMatrix *cfo_w_brick_4_rot =
new G4RotationMatrix();
2302 cfo_w_brick_4_rot->rotateZ(cfo_w_angle);
2303 G4VPhysicalVolume* cfo_w_brick_4_eP =
new G4PVPlacement(cfo_w_brick_4_rot, position, cfo_brick_L,
2304 "cfo_w_brick_4_eP", cable_w_L,
false, 4, m_CheckOverlaps);
2306 G4Tubs* nwr_1_a =
new G4Tubs(
"nwr_1_a", nwr_1_a_rin *CLHEP::mm, nwr_1_a_rout *CLHEP::mm, 0.5 * nwr_1_a_thick *CLHEP::mm, 0, angle2pi);
2307 G4Tubs* nwr_1_b =
new G4Tubs(
"nwr_1_b", nwr_1_b_rin *CLHEP::mm, nwr_1_b_rout *CLHEP::mm, 0.5 * nwr_1_b_thick *CLHEP::mm, 0, angle2pi);
2308 G4Tubs* nwr_2 =
new G4Tubs(
"nwr_2", nwr_2_rin *CLHEP::mm, nwr_2_rout *CLHEP::mm, 0.5 * nwr_2_thick *CLHEP::mm, 0, angle2pi);
2311 G4Box *w_brick =
new G4Box(
"w_brick", 0.5 * w_brick_x *CLHEP::mm, 0.5 * w_brick_y *CLHEP::mm, 0.5* w_brick_z *CLHEP::mm);
2314 G4LogicalVolume* nwr_1_a_L =
new G4LogicalVolume(nwr_1_a, m_M_Aluminum,
"nwr_1_a_L", 0, 0, 0);
2315 G4LogicalVolume* nwr_1_b_L =
new G4LogicalVolume(nwr_1_b, m_M_Aluminum,
"nwr_1_b_L", 0, 0, 0);
2316 G4LogicalVolume* nwr_2_L =
new G4LogicalVolume(nwr_2, m_M_Aluminum,
"nwr_2_L", 0, 0, 0);
2317 G4LogicalVolume* w_brick_L =
new G4LogicalVolume(w_brick, m_M_Permaglas,
"w_brick_L", 0, 0, 0);
2319 nwr_1_a_L->SetVisAttributes(Al_attributes);
2320 nwr_1_b_L->SetVisAttributes(Al_attributes);
2321 nwr_2_L->SetVisAttributes(Al_attributes);
2322 w_brick_L->SetVisAttributes(PER_attributes);
2325 G4VPhysicalVolume* nwr_1_a_wP =
new G4PVPlacement(0, G4ThreeVector(0, 0, z_nwr_1_wP - zref_w + z_shift), nwr_1_a_L,
"nwr_1_a_wP", cable_w_L,
false, 0, m_CheckOverlaps);
2327 double w_rangle = 38.6 *CLHEP::deg;
double w_angle = 25.7 *CLHEP::deg;
double w_rad = 133.25 *CLHEP::mm;
2328 G4RotationMatrix * w_brick_1_rot =
new G4RotationMatrix(); w_brick_1_rot->rotateZ(-w_rangle);
2329 G4VPhysicalVolume* w_brick_1_wP =
new G4PVPlacement(w_brick_1_rot,
2330 G4ThreeVector(w_rad *
cos(w_rangle),
2331 w_rad *
sin(w_rangle),
2332 z_w_brick_wP - zref_w + z_shift),
2333 w_brick_L,
"w_brick_1_wP", cable_w_L,
false, 1, m_CheckOverlaps);
2334 G4VPhysicalVolume* w_brick_5_wP =
new G4PVPlacement(w_brick_1_rot,
2335 G4ThreeVector(w_rad *
cos(CLHEP::pi+w_rangle),
2336 w_rad *
sin(CLHEP::pi+w_rangle),
2337 z_w_brick_wP - zref_w + z_shift),
2338 w_brick_L,
"w_brick_5_wP", cable_w_L,
false, 5, m_CheckOverlaps);
2340 w_rangle += w_angle;
2341 G4RotationMatrix * w_brick_2_rot =
new G4RotationMatrix(); w_brick_2_rot->rotateZ(-w_rangle);
2342 G4VPhysicalVolume* w_brick_2_wP =
new G4PVPlacement(w_brick_2_rot,
2343 G4ThreeVector(w_rad *
cos(w_rangle),
2344 w_rad *
sin(w_rangle),
2345 z_w_brick_wP - zref_w + z_shift),
2346 w_brick_L,
"w_brick_2_wP", cable_w_L,
false, 2, m_CheckOverlaps);
2347 G4VPhysicalVolume* w_brick_6_wP =
new G4PVPlacement(w_brick_2_rot,
2348 G4ThreeVector(w_rad *
cos(CLHEP::pi+w_rangle),
2349 w_rad *
sin(CLHEP::pi+w_rangle),
2350 z_w_brick_wP - zref_w + z_shift),
2351 w_brick_L,
"w_brick_6_wP", cable_w_L,
false, 6, m_CheckOverlaps);
2353 w_rangle += w_angle;
2354 G4RotationMatrix * w_brick_3_rot =
new G4RotationMatrix(); w_brick_3_rot->rotateZ(-w_rangle);
2355 G4VPhysicalVolume* w_brick_3_wP =
new G4PVPlacement(w_brick_3_rot,
2356 G4ThreeVector(w_rad *
cos(w_rangle),
2357 w_rad *
sin(w_rangle),
2358 z_w_brick_wP - zref_w + z_shift),
2359 w_brick_L,
"w_brick_3_wP", cable_w_L,
false, 3, m_CheckOverlaps);
2360 G4VPhysicalVolume* w_brick_7_wP =
new G4PVPlacement(w_brick_3_rot,
2361 G4ThreeVector(w_rad *
cos(CLHEP::pi+w_rangle),
2362 w_rad *
sin(CLHEP::pi+w_rangle),
2363 z_w_brick_wP - zref_w + z_shift),
2364 w_brick_L,
"w_brick_7_wP", cable_w_L,
false, 7,m_CheckOverlaps);
2366 w_rangle += w_angle;
2367 G4RotationMatrix * w_brick_4_rot =
new G4RotationMatrix(); w_brick_4_rot->rotateZ(-w_rangle);
2368 G4VPhysicalVolume* w_brick_4_wP =
new G4PVPlacement(w_brick_4_rot,
2369 G4ThreeVector(w_rad *
cos(w_rangle),
2370 w_rad *
sin(w_rangle),
2371 z_w_brick_wP - zref_w + z_shift),
2372 w_brick_L,
"w_brick_4_wP", cable_w_L,
false, 4, m_CheckOverlaps);
2373 G4VPhysicalVolume* w_brick_8_wP =
new G4PVPlacement(w_brick_4_rot,
2374 G4ThreeVector(w_rad *
cos(CLHEP::pi+w_rangle),
2375 w_rad *
sin(CLHEP::pi+w_rangle),
2376 z_w_brick_wP - zref_w + z_shift),
2377 w_brick_L,
"w_brick_8_wP", cable_w_L,
false, 8, m_CheckOverlaps);
2383 G4ThreeVector pos(0, 0, z_shift);
2386 common_supp->MakeImprint(cable_e_L, pos, 0, m_CheckOverlaps);
2387 G4VPhysicalVolume* cable_e_P =
new G4PVPlacement(0, G4ThreeVector(0, 0, zref), cable_e_L,
"cable_e_P", logicCgem, lv_boolen, lv_copyNo, m_CheckOverlaps);
2389 pos.set(0, 0, z_ef_3_eP);
2390 G4VPhysicalVolume* ef_3_eP =
new G4PVPlacement(0, pos, ef_3_L,
"ef_3_eP", logicCgem, 0, 0, m_CheckOverlaps);
2391 pos.set(0, 0, z_ef_4_eP);
2392 G4VPhysicalVolume* ef_4_eP =
new G4PVPlacement(0, pos, ef_4_L,
"ef_4_eP", logicCgem, 0, 0, m_CheckOverlaps);
2407 pos.set(0, 0, z_shift);
2408 common_supp->MakeImprint(cable_w_L, pos, 0, m_CheckOverlaps);
2409 G4RotationMatrix *rot_west =
new G4RotationMatrix();
2410 rot_west->rotateX(180 *CLHEP::deg);
2411 G4VPhysicalVolume* cable_w_P =
new G4PVPlacement(rot_west, G4ThreeVector(0, 0, -zref), cable_w_L,
"cable_w_P", logicCgem, lv_boolen, lv_copyNo, m_CheckOverlaps);
2413 pos.set(0, 0, -z_ef_3_eP);
2414 G4VPhysicalVolume* ef_3_wP =
new G4PVPlacement(rot_west, pos, ef_3_L,
"ef_3_wP", logicCgem, 0, 1, m_CheckOverlaps);
2415 pos.set(0, 0, -z_ef_4_eP);
2416 G4VPhysicalVolume* ef_4_wP =
new G4PVPlacement(rot_west, pos, ef_4_L,
"ef_4_wP", logicCgem, 0, 1, m_CheckOverlaps);
2418 pos.set(0, 0, -(z_nwr_1_wP+z_shift));
2419 G4VPhysicalVolume* nwr_1_b_wP =
new G4PVPlacement(0, pos, nwr_1_b_L,
"nwr_1_b_wP", logicCgem,
false, 0, m_CheckOverlaps);
2420 bool ovl = nwr_1_b_wP->CheckOverlaps();
2421 cout <<
"nwr_1_b_wP re-check overlap " << ovl << endl;
2423 pos.set(0, 0, -(z_nwr_2_wP+z_shift));
2424 G4VPhysicalVolume* nwr_2_wP =
new G4PVPlacement(rot_west, pos, nwr_2_L,
"nwr_2_wP", logicCgem,
false, 0, m_CheckOverlaps);
2425 ovl= nwr_2_wP->CheckOverlaps();
2430void BesCgemConstruction::ConstructMaterial()
2433 Gaudi::svcLocator() -> service(
"MessageSvc",
msgSvc);
2434 MsgStream log(
msgSvc,
"BesCgemConstruction::ConstructMaterial()");
2435 log<< MSG::INFO <<
"INFO : BesCgemConstruction::ConstructMaterial(), Construct Material needed by Cgem!" << endreq;
2438 G4NistManager *gv_NistManager = G4NistManager::Instance();
2441 m_M_Air = gv_NistManager -> FindOrBuildMaterial(
"G4_AIR");
2444 m_M_Cu = gv_NistManager -> FindOrBuildMaterial(
"G4_Cu");
2447 m_M_Kapton = gv_NistManager -> FindOrBuildMaterial(
"G4_KAPTON");
2453 G4double lvd_density;
2454 G4double lvd_fractionmass;
2471 lvs_name =
"CgemGas";
2472 lvd_density = 0.0017451520*g/cm3;
2474 G4Material *lv_Ar = gv_NistManager->FindOrBuildMaterial(
"G4_Ar");
2475 G4Material *lv_C4H10 = gv_NistManager->FindOrBuildMaterial(
"G4_BUTANE");
2476 m_M_CgemGas =
new G4Material(lvs_name, lvd_density, lvi_element);
2477 m_M_CgemGas -> AddMaterial(lv_Ar , lvd_fractionmass=0.85712247);
2478 m_M_CgemGas -> AddMaterial(lv_C4H10, lvd_fractionmass=0.14287753);
2495 lvs_name =
"Rohacell31";
2496 lvd_density = 3.e-2*g/cm3;
2498 G4Element *
C = G4Element::GetElement(
"Carbon");
2499 G4Element *
H = G4Element::GetElement(
"Hydrogen");
2500 G4Element *O = G4Element::GetElement(
"Oxygen");
2501 G4Element *N = G4Element::GetElement(
"Nitrogen");
2502 m_M_Rohacell =
new G4Material(lvs_name, lvd_density, lvi_element);
2503 m_M_Rohacell -> AddElement(
C, lvi_natoms=9);
2504 m_M_Rohacell -> AddElement(
H, lvi_natoms=13);
2505 m_M_Rohacell -> AddElement(O, lvi_natoms=2 );
2506 m_M_Rohacell -> AddElement(N, lvi_natoms=1 );
2510 lvd_density = 1.25*g/cm3;
2512 m_M_Epoxy =
new G4Material(lvs_name, lvd_density, lvi_element);
2513 m_M_Epoxy -> AddElement(
C, lvi_natoms=18);
2514 m_M_Epoxy -> AddElement(
H, lvi_natoms=31);
2515 m_M_Epoxy -> AddElement(O, lvi_natoms=3 );
2518 lvs_name =
"CarbonFiber";
2519 lvd_density = 1.57*g/cm3;
2521 m_M_CarbonFiber =
new G4Material(lvs_name, lvd_density, lvi_element);
2522 m_M_CarbonFiber -> AddElement(
C, 0.697 );
2523 m_M_CarbonFiber -> AddElement(
H, 0.0061);
2524 m_M_CarbonFiber -> AddElement(O, 0.2969);
2534 G4Material* SiO2 = G4NistManager::Instance()->FindOrBuildMaterial(
"G4_SILICON_DIOXIDE");
2535 G4Material* B2O3 = G4NistManager::Instance()->FindOrBuildMaterial(
"G4_BORON_OXIDE");
2536 G4Material* Al2O3 = G4NistManager::Instance()->FindOrBuildMaterial(
"G4_ALUMINUM_OXIDE");
2537 G4Material* CaO = G4NistManager::Instance()->FindOrBuildMaterial(
"G4_CALCIUM_OXIDE");
2539 lvs_name =
"Fiberglass";
2540 lvd_density = 1.99*g/cm3;;
2542 G4Material *m_M_Fiberglass =
new G4Material(lvs_name, lvd_density, lvi_element);
2543 m_M_Fiberglass->AddMaterial(SiO2, 0.6);
2544 m_M_Fiberglass->AddMaterial(B2O3, 0.05);
2545 m_M_Fiberglass->AddMaterial(Al2O3, 0.13);
2546 m_M_Fiberglass->AddMaterial(CaO, 0.22);
2550 lvs_name =
"Permaglas";
2551 lvd_density = 1.97*g/cm3;
2553 m_M_Permaglas =
new G4Material(lvs_name, lvd_density, lvi_element);
2554 m_M_Permaglas->AddMaterial(m_M_Fiberglass, 0.6);
2555 m_M_Permaglas->AddMaterial(m_M_Epoxy, 0.4);
2558 m_M_Aluminum= G4NistManager::Instance()->FindOrBuildMaterial(
"G4_Al");
2564 log<< MSG::INFO <<
"BesCgemConstruction::ConstructMaterial(), check id effective density is used : " << m_cgem_geomsvc->
isEffDensity() << endreq;
2567 G4Material *myCu = G4NistManager::Instance()->FindOrBuildMaterial(
"G4_Cu");
2568 lvs_name =
"G4_Cu_GEMFoils";
2569 lvd_density = 8.960*g/cm3;
2571 lvd_density = 6.44708*g/cm3;
2573 m_M_Cu_GEMFoils =
new G4Material(lvs_name, lvd_density, lvi_element);
2574 m_M_Cu_GEMFoils->AddMaterial(myCu, 1.0);
2576 lvs_name =
"G4_Cu_AnodeStripX";
2577 lvd_density = 8.960*g/cm3;
2579 lvd_density = 7.88*g/cm3;
2581 m_M_Cu_AnodeStripX =
new G4Material(lvs_name, lvd_density, lvi_element);
2582 m_M_Cu_AnodeStripX->AddMaterial(myCu, 1.0);
2584 lvs_name =
"G4_Cu_AnodeStripV";
2585 lvd_density = 8.960*g/cm3;
2587 lvd_density = 1.77*g/cm3;
2589 m_M_Cu_AnodeStripV =
new G4Material(lvs_name, lvd_density, lvi_element);
2590 m_M_Cu_AnodeStripV->AddMaterial(myCu, 1.0);
2592 G4Material *myKapton = G4NistManager::Instance()->FindOrBuildMaterial(
"G4_KAPTON");
2593 lvs_name =
"G4_KAPTON_GEMFoils";
2594 lvd_density = 1.420*g/cm3;
2596 lvd_density = 1.14794*g/cm3;
2598 m_M_Kapton_GEMFoils =
new G4Material(lvs_name, lvd_density, lvi_element);
2599 m_M_Kapton_GEMFoils->AddMaterial(myKapton, 1.0);
2601 lvs_name =
"G4_KAPTON_StripV";
2602 lvd_density = 1.420*g/cm3;
2604 lvd_density = 0.284*g/cm3;
2606 m_M_Kapton_StripV =
new G4Material(lvs_name, lvd_density, lvi_element);
2607 m_M_Kapton_StripV->AddMaterial(myKapton, 1.0);
2623void BesCgemConstruction::Print(G4LogicalVolume* f_LV)
2626 Gaudi::svcLocator() -> service(
"MessageSvc",
msgSvc);
2627 MsgStream log(
msgSvc,
"BesCgemConstruction::Print()");
2628 G4Material *lv_M = f_LV->GetMaterial();
2629 G4Tubs *lv_tub =
dynamic_cast<G4Tubs*
>(f_LV->GetSolid());
2630 G4double lvd_M_Z = 0.;
2631 G4double lvd_M_A = 0.;
2632 for (G4int i = 0; i < lv_M->GetElementVector()->size(); i++)
2634 lvd_M_Z += (lv_M->GetElement(i)->GetZ()) * (lv_M->GetFractionVector()[i]);
2635 lvd_M_A += (lv_M->GetElement(i)->GetA()) * (lv_M->GetFractionVector()[i]);
2637 G4double lvd_ionisation = lv_M->GetIonisation()->GetMeanExcitationEnergy();
2638 G4double lvd_density = lv_M->GetDensity() / (g/cm3);
2639 G4double lvd_X0 = lv_M->GetRadlen() / (mm);
2640 G4double lvd_R_i = lv_tub->GetInnerRadius() / (mm);
2641 G4double lvd_R_o = lv_tub->GetOuterRadius() / (mm);
2642 G4double lvd_L = lv_tub->GetZHalfLength() / (mm) * 2.0;
2644 log<< MSG::INFO <<
"BesCgemConstruction::Print(), Construct Detector Volume : " << f_LV->GetName() << endreq;
2645 log<< MSG::INFO << left << setw(10) <<
"Material "
2646 << left << setw(10) <<
"Z "
2647 << left << setw(10) <<
"A "
2648 << left << setw(11) <<
"Ionisation "
2649 << left << setw(12) <<
"Density "
2650 << left << setw(10) <<
"X0 "
2651 << left << setw(10) <<
"Inner R "
2652 << left << setw(10) <<
"Outer R "
2653 << left << setw(10) <<
"Length" << endreq;
2654 log<< MSG::INFO << left << setw(10) << lv_M->GetName()
2655 << left << setw(10) << lvd_M_Z
2656 << left << setw(10) << lvd_M_A / (g/mole)
2657 << left << setw(11) << lvd_ionisation / eV
2658 << left << setw(12) << lvd_density
2659 << left << setw(10) << lvd_X0
2660 << left << setw(10) << lvd_R_i
2661 << left << setw(10) << lvd_R_o
2662 << left << setw(10) << lvd_L
2664 log<< MSG::INFO << left <<
" " << endreq;
double tan(const BesAngle a)
double sin(const BesAngle a)
double cos(const BesAngle a)
***************************************************************************************Pseudo Class RRes *****************************************************************************************Parameters and physical constants **Maarten sept ************************************************************************DOUBLE PRECISION xsmu **************************************************************************PARTICLE DATA all others are from PDG *Only resonances with known widths into electron pairs are sept ************************************************************************C Declarations C
void Construct(G4LogicalVolume *)
void SetTiltAngle(double tangle)
void SetAnodeLength(double alength)
void SetSliceLength(double slength)
double getOuterROfCgemFoilCu1() const
double getInnerROfCgemFoilCu2() const
double getOuterROfCgemFoilKapton() const
double getInnerROfCgemFoil() const
double getInnerROfCgemFoilCu1() const
double getInnerROfCgemFoilKapton() const
double getOuterROfCgemFoilCu2() const
double getOuterROfCgemFoil() const
double getOuterROfAnodeCu1() const
double getInnerROfCathode() const
double getInnerROfAnodeEpoxy4() const
double getInnerROfAnodeEpoxy1() const
CgemGeoFoil * getCgemFoil(int i) const
double getInnerROfCathodeKapton2() const
double getWidthOfPitchV() const
double getOuterROfCathodeEpoxy4() const
double getInnerROfGapI() const
double getWidthOfStripV() const
double getOuterROfGapD() const
double getInnerROfCathodeKapton3() const
double getOuterROfAnodeEpoxy2() const
double getInnerROfGapT1() const
double getLengthOfCgemLayer() const
double getOuterROfCathodeEpoxy1() const
double getInnerROfCathodeEpoxy2() const
double getOuterROfCathodeKapton1() const
double getInnerROfCathodeCu() const
double getOuterROfAnodeKapton2() const
double getInnerROfCathodeEpoxy4() const
double getOuterROfAnodeKapton1() const
double getInnerROfAnodeCu1() const
double getInnerROfAnodeKapton2() const
double getInnerROfCgemLayer() const
double getOuterROfCathodeEpoxy3() const
double getInnerROfAnode() const
double getInnerROfGapT2() const
double getWidthOfStripX() const
double getOuterROfAnodeRohacell1() const
double getOuterROfGapT1() const
double getOuterROfCathodeRohacell2() const
double getOuterROfGapT2() const
double getInnerROfAnodeCu3() const
double getOuterROfAnodeCu3() const
double getInnerROfCathodeEpoxy3() const
double getOuterROfAnodeKapton3() const
double getOuterROfAnode() const
double getOuterROfCathodeCu() const
double getOuterROfCathodeKapton3() const
double getInnerROfAnodeRohacell1() const
double getOuterROfCathode() const
double getOuterROfAnodeEpoxy1() const
double getInnerROfAnodeEpoxy2() const
double getOuterROfCathodeRohacell1() const
double getOuterROfAnodeEpoxy4() const
double getOuterROfGapI() const
double getInnerROfAnodeRohacell2() const
double getOuterROfCgemLayer() const
double getAngleOfStereo() const
double getInnerROfAnodeEpoxy3() const
double getOuterROfAnodeEpoxy5() const
double getInnerROfCathodeKapton1() const
double getWidthOfPitchX() const
double getInnerROfAnodeKapton3() const
double getInnerROfCathodeEpoxy1() const
double getInnerROfAnodeKapton4() const
double getInnerROfAnodeEpoxy5() const
double getOuterROfAnodeCu2() const
double getInnerROfGapD() const
double getOuterROfAnodeEpoxy3() const
double getInnerROfAnodeKapton1() const
double getOuterROfCathodeEpoxy2() const
double getInnerROfAnodeCu2() const
double getOuterROfCathodeKapton2() const
double getOuterROfAnodeKapton4() const
double getInnerROfCathodeRohacell1() const
double getInnerROfCathodeRohacell2() const
double getOuterROfAnodeRohacell2() const
double getThickOfOuterAluminum() const
double getThickOfInnerAluminum() const
double getThickOfCarbonFiber() const
bool isVStripDescriptionOn() const
bool isXStripDescriptionOn() const
CgemGeoLayer * getCgemLayer(int i) const
double getDensityOfCable() const
double getLengthOfCgem() const
double getNumberOfCgemFoil() const
double getOuterROfCgem() const
double getNumberOfCgemLayer() const
double getInnerROfCgem() const
CgemGeoSeparator * getCgemSeparator() const
bool isEffDensity() const