36#include "BesCgemConstruction.hh"
37#include "BesCgemSD.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;
100 Gaudi::svcLocator() -> service(
"MessageSvc",
msgSvc);
101 MsgStream log(
msgSvc,
"BesCgemConstruction::Construct()");
104 G4LogicalVolume *logicContainer = NULL; cout <<
"logicBes daughters " << logicBes->GetNoDaughters() << endl;
106 for(
int i=0; i<logicBes->GetNoDaughters(); i++) {
107 G4VPhysicalVolume *daughter = logicBes->GetDaughter(i);
108 if(daughter->GetName()==
"physicalMdc") {
109 logicContainer = daughter->GetLogicalVolume();
112 if(logicContainer == NULL) {
113 log<< MSG::INFO <<
"BesCgemConstruction::Construct, CGEM must stay inside MDC mother volume, you must build MDC!" << endreq;
114 cout<<
"BesCgemConstruction::Construct, MDC not built --> put CGEM in WORLD" << endl;
115 logicContainer= logicBes;
117 else cout<<
"BesCgemConstruction::Construct, MDC built --> put CGEM in MDC container logical volume" << endl;
123 G4SDManager* gv_SDman = G4SDManager::GetSDMpointer();
124 G4String lvs_cgemSDname =
"BesCgemSD";
126 m_CgemSD =
new BesCgemSD(lvs_cgemSDname);
129 gv_SDman->AddNewDetector(m_CgemSD);
135 log<< MSG::INFO <<
"BesCgemConstruction::Construct, Tunning! DO NOT CONSTRUCT CGEM!" << endreq;
142 log<< MSG::INFO <<
"BesCgemConstruciton::Construct, Construct CGEM from GDML!" << endreq;
147 log<< MSG::INFO <<
"BesCgemConstruction::Construct, Construct CGEM from G4code!" << endreq;
149 G4LogicalVolume *logicCgem = ConstructFromCode(logicContainer,m_CgemSD);
156G4LogicalVolume* BesCgemConstruction::ConstructFromCode(G4LogicalVolume* logicMother,
BesCgemSD* m_CgemSD)
159 Gaudi::svcLocator() -> service(
"MessageSvc",
msgSvc);
160 MsgStream log(
msgSvc,
"BesCgemConstruction::ConstructFromCode()");
161 log<< MSG::INFO <<
"===========================================" << endreq;
162 log<< MSG::INFO <<
"BesCgemConstruction::ConstructFromCode(), Begin to construct CGEM!" << endreq;
165 G4VisAttributes *lv_black =
new G4VisAttributes(G4Colour::Black());
166 G4VisAttributes *lv_white =
new G4VisAttributes(G4Colour::White());
167 G4VisAttributes *lv_green =
new G4VisAttributes(G4Colour::Green());
168 G4VisAttributes *lv_yellow =
new G4VisAttributes(G4Colour::Yellow());
169 G4VisAttributes *lv_blue =
new G4VisAttributes(G4Colour::Blue());
170 G4VisAttributes *lv_red =
new G4VisAttributes(G4Colour::Red());
171 G4VisAttributes *lv_cyan =
new G4VisAttributes(G4Colour::Cyan());
172 G4VisAttributes *lv_magenta =
new G4VisAttributes(G4Colour::Magenta());
176 G4RotationMatrix *lv_rotation = 0;
177 G4ThreeVector lv_3vector(0., 0., 0.);
178 G4bool lv_boolen =
false;
187 G4double lvd_A_s = 0*deg;
188 G4double lvd_A_d = 360*deg;
193 G4Tubs *lv_Cgem_solid =
194 new G4Tubs(
"Cgem_solid", lvd_R_i, lvd_R_o, 0.5*lvd_L_z, lvd_A_s, lvd_A_d);
195 G4LogicalVolume* lv_Cgem_logic =
196 new G4LogicalVolume(lv_Cgem_solid, m_M_Air,
"Cgem_logic");
197 G4VPhysicalVolume *lv_Cgem_physi =
198 new G4PVPlacement(lv_rotation, lv_3vector, lv_Cgem_logic,
"Cgem_physi",
199 logicMother, lv_boolen, lv_copyNo, m_CheckOverlaps);
202 G4cout <<
"CGEM container" << G4endl;
203 G4cout <<
"CGEM, Rin =" << ((G4Tubs*) (lv_Cgem_physi->GetLogicalVolume()->GetSolid()))->GetInnerRadius() << G4endl;
204 G4cout <<
"CGEM, Rout =" << ((G4Tubs*) (lv_Cgem_physi->GetLogicalVolume()->GetSolid()))->GetOuterRadius() << G4endl;
205 G4cout <<
"CGEM, length =" << ((G4Tubs*) (lv_Cgem_physi->GetLogicalVolume()->GetSolid()))->GetDz() * 2 << G4endl;
207 lv_Cgem_logic->SetVisAttributes(lv_black);
212 stringstream sssolid,sslogic,ssphysi;
213 string ssolid,slogic,sphysi;
215 for (G4int i=0; i < lvi_N_CgemLayer; i++)
217 log<< MSG::INFO <<
"BesCgemConstruciton::ConstructFromCode(), Construct CgemLayer " << i << endreq;
221 sssolid <<
"CgemLayer_solid";
223 ssolid = sssolid.str();
225 sslogic <<
"CgemLayer_logic";
227 slogic = sslogic.str();
229 ssphysi <<
"CgemLayer_physi";
231 sphysi = ssphysi.str();
238 G4Tubs *lv_CgemLayer_solid =
239 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
240 G4LogicalVolume *lv_CgemLayer_logic =
241 new G4LogicalVolume(lv_CgemLayer_solid, m_M_Air, slogic);
242 G4VPhysicalVolume *lv_CgemLayer_physi =
243 new G4PVPlacement(lv_rotation, lv_3vector, lv_CgemLayer_logic, sphysi,
244 lv_Cgem_logic, lv_boolen, i, m_CheckOverlaps);
251 log<< MSG::INFO <<
"BesCgemConstruciton::ConstructFromCode(), Construct CgemLayer " << i <<
" Cathode "<< endreq;
256 sssolid <<
"Cathode_solid";
258 ssolid = sssolid.str();
260 sslogic <<
"Cathode_logic";
262 slogic = sslogic.str();
264 ssphysi <<
"Cathode_physi";
266 sphysi = ssphysi.str();
269 G4Tubs *lv_Cathode_solid =
270 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
271 G4LogicalVolume *lv_Cathode_logic =
272 new G4LogicalVolume(lv_Cathode_solid, m_M_CgemGas, slogic);
273 G4VPhysicalVolume *lv_Cathode_physi =
274 new G4PVPlacement(lv_rotation, lv_3vector, lv_Cathode_logic, sphysi,
275 lv_CgemLayer_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
283 ssolid = sssolid.str();
287 slogic = sslogic.str();
291 sphysi = ssphysi.str();
297 if (lvd_R_i==lvd_R_o)
break;
298 G4Tubs *lv_Cathode_Cu1_solid =
299 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
300 G4LogicalVolume *lv_Cathode_Cu1_logic =
301 new G4LogicalVolume(lv_Cathode_Cu1_solid, m_M_Cu, slogic);
302 G4VPhysicalVolume *lv_Cathode_Cu1_physi =
303 new G4PVPlacement(lv_rotation, lv_3vector, lv_Cathode_Cu1_logic,
304 sphysi, lv_Cathode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);}
309 if (lvd_R_i==lvd_R_o)
break;
310 G4Tubs *lv_Cathode_Kapton1_solid =
311 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
312 G4LogicalVolume *lv_Cathode_Kapton1_logic =
313 new G4LogicalVolume(lv_Cathode_Kapton1_solid, m_M_Kapton, slogic);
314 G4VPhysicalVolume *lv_Cathode_Kapton1_physi =
315 new G4PVPlacement(lv_rotation, lv_3vector, lv_Cathode_Kapton1_logic,
316 sphysi, lv_Cathode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);}
321 if (lvd_R_i==lvd_R_o)
break;
322 G4Tubs *lv_Cathode_Epoxy0_solid =
323 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
324 G4LogicalVolume *lv_Cathode_Epoxy0_logic =
325 new G4LogicalVolume(lv_Cathode_Epoxy0_solid, m_M_Epoxy, slogic);
326 G4VPhysicalVolume *lv_Cathode_Epoxy0_physi =
327 new G4PVPlacement(lv_rotation, lv_3vector, lv_Cathode_Epoxy0_logic,
328 sphysi, lv_Cathode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);}
334 if (lvd_R_i==lvd_R_o)
break;
335 G4Tubs *lv_Cathode_Carbonf_solid =
336 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
337 G4LogicalVolume *lv_Cathode_Carbonf_logic =
338 new G4LogicalVolume(lv_Cathode_Carbonf_solid, m_M_CarbonFiber, slogic);
339 G4VPhysicalVolume *lv_Cathode_Carbonf_physi =
340 new G4PVPlacement(lv_rotation, lv_3vector, lv_Cathode_Carbonf_logic,
341 sphysi, lv_Cathode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);}
346 if (lvd_R_i==lvd_R_o)
break;
347 G4Tubs *lv_Cathode_Epoxy1_solid =
348 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
349 G4LogicalVolume *lv_Cathode_Epoxy1_logic =
350 new G4LogicalVolume(lv_Cathode_Epoxy1_solid, m_M_Epoxy, slogic);
351 G4VPhysicalVolume *lv_Cathode_Epoxy1_physi =
352 new G4PVPlacement(lv_rotation, lv_3vector, lv_Cathode_Epoxy1_logic,
353 sphysi, lv_Cathode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);}
358 if (lvd_R_i==lvd_R_o)
break;
359 G4Tubs *lv_Cathode_Honeycomb_solid =
360 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
361 G4LogicalVolume *lv_Cathode_Honeycomb_logic =
362 new G4LogicalVolume(lv_Cathode_Honeycomb_solid, m_M_Honeycomb, slogic);
363 G4VPhysicalVolume *lv_Cathode_Honeycomb_physi =
364 new G4PVPlacement(lv_rotation, lv_3vector, lv_Cathode_Honeycomb_logic,
365 sphysi, lv_Cathode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);}
370 if (lvd_R_i==lvd_R_o)
break;
371 G4Tubs *lv_Cathode_Rohacell1_solid =
372 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
373 G4LogicalVolume *lv_Cathode_Rohacell1_logic =
374 new G4LogicalVolume(lv_Cathode_Rohacell1_solid, m_M_Rohacell, slogic);
375 G4VPhysicalVolume *lv_Cathode_Rohacell1_physi =
376 new G4PVPlacement(lv_rotation, lv_3vector, lv_Cathode_Rohacell1_logic,
377 sphysi, lv_Cathode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);}
382 if (lvd_R_i==lvd_R_o)
break;
383 G4Tubs *lv_Cathode_Epoxy2_solid =
384 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
385 G4LogicalVolume *lv_Cathode_Epoxy2_logic =
386 new G4LogicalVolume(lv_Cathode_Epoxy2_solid, m_M_Epoxy, slogic);
387 G4VPhysicalVolume *lv_Cathode_Epoxy2_physi =
388 new G4PVPlacement(lv_rotation, lv_3vector, lv_Cathode_Epoxy2_logic,
389 sphysi, lv_Cathode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);}
394 if (lvd_R_i==lvd_R_o)
break;
395 G4Tubs *lv_Cathode_Kapton2_solid =
396 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
397 G4LogicalVolume *lv_Cathode_Kapton2_logic =
398 new G4LogicalVolume(lv_Cathode_Kapton2_solid, m_M_Kapton, slogic);
399 G4VPhysicalVolume *lv_Cathode_Kapton2_physi =
400 new G4PVPlacement(lv_rotation, lv_3vector, lv_Cathode_Kapton2_logic,
401 sphysi, lv_Cathode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);}
406 if (lvd_R_i==lvd_R_o)
break;
407 G4Tubs *lv_Cathode_Epoxy3_solid =
408 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
409 G4LogicalVolume *lv_Cathode_Epoxy3_logic =
410 new G4LogicalVolume(lv_Cathode_Epoxy3_solid, m_M_Epoxy, slogic);
411 G4VPhysicalVolume *lv_Cathode_Epoxy3_physi =
412 new G4PVPlacement(lv_rotation, lv_3vector, lv_Cathode_Epoxy3_logic,
413 sphysi, lv_Cathode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);}
418 if (lvd_R_i==lvd_R_o)
break;
419 G4Tubs *lv_Cathode_Rohacell2_solid =
420 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
421 G4LogicalVolume *lv_Cathode_Rohacell2_logic =
422 new G4LogicalVolume(lv_Cathode_Rohacell2_solid, m_M_Rohacell, slogic);
423 G4VPhysicalVolume *lv_Cathode_Rohacell2_physi =
424 new G4PVPlacement(lv_rotation, lv_3vector, lv_Cathode_Rohacell2_logic,
425 sphysi, lv_Cathode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);}
430 if (lvd_R_i==lvd_R_o)
break;
431 G4Tubs *lv_Cathode_Epoxy4_solid =
432 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
433 G4LogicalVolume *lv_Cathode_Epoxy4_logic =
434 new G4LogicalVolume(lv_Cathode_Epoxy4_solid, m_M_Epoxy, slogic);
435 G4VPhysicalVolume *lv_Cathode_Epoxy4_physi =
436 new G4PVPlacement(lv_rotation, lv_3vector, lv_Cathode_Epoxy4_logic,
437 sphysi, lv_Cathode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);}
442 if (lvd_R_i==lvd_R_o)
break;
443 G4Tubs *lv_Cathode_Kapton3_solid =
444 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
445 G4LogicalVolume *lv_Cathode_Kapton3_logic =
446 new G4LogicalVolume(lv_Cathode_Kapton3_solid, m_M_Kapton, slogic);
447 G4VPhysicalVolume *lv_Cathode_Kapton3_physi =
448 new G4PVPlacement(lv_rotation, lv_3vector, lv_Cathode_Kapton3_logic,
449 sphysi, lv_Cathode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);}
454 if (lvd_R_i==lvd_R_o)
break;
455 G4Tubs *lv_Cathode_Cu2_solid =
456 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
457 G4LogicalVolume *lv_Cathode_Cu2_logic =
458 new G4LogicalVolume(lv_Cathode_Cu2_solid, m_M_Cu, slogic);
459 G4VPhysicalVolume *lv_Cathode_Cu2_physi =
460 new G4PVPlacement(lv_rotation, lv_3vector, lv_Cathode_Cu2_logic,
461 sphysi, lv_Cathode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);}
469 log<< MSG::INFO <<
"BesCgemConstruciton::ConstructFromCode(), Construct CgemLayer " << i <<
" Gap_D "<< endreq;
472 sssolid <<
"Gap_D_solid";
474 ssolid = sssolid.str();
476 sslogic <<
"Gap_D_logic";
478 slogic = sslogic.str();
480 ssphysi <<
"Gap_D_physi";
482 sphysi = ssphysi.str();
485 G4Tubs *lv_Gap_D_solid =
486 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
487 G4LogicalVolume *lv_Gap_D_logic =
488 new G4LogicalVolume(lv_Gap_D_solid, m_M_CgemGas, slogic);
489 G4VPhysicalVolume *lv_Gap_D_physi =
490 new G4PVPlacement(lv_rotation, lv_3vector, lv_Gap_D_logic, sphysi,
491 lv_CgemLayer_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
493 lv_Gap_D_logic->SetSensitiveDetector(m_CgemSD);
498 sssolid <<
"Gap_T1_solid";
500 ssolid = sssolid.str();
502 sslogic <<
"Gap_T1_logic";
504 slogic = sslogic.str();
506 ssphysi <<
"Gap_T1_physi";
508 sphysi = ssphysi.str();
511 G4Tubs *lv_Gap_T1_solid =
512 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
513 G4LogicalVolume *lv_Gap_T1_logic =
514 new G4LogicalVolume(lv_Gap_T1_solid, m_M_CgemGas, slogic);
515 G4VPhysicalVolume *lv_Gap_T1_physi =
516 new G4PVPlacement(lv_rotation, lv_3vector, lv_Gap_T1_logic, sphysi,
517 lv_CgemLayer_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
521 sssolid <<
"Gap_T2_solid";
523 ssolid = sssolid.str();
525 sslogic <<
"Gap_T2_logic";
527 slogic = sslogic.str();
529 ssphysi <<
"Gap_T2_physi";
531 sphysi = ssphysi.str();
534 G4Tubs *lv_Gap_T2_solid =
535 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
536 G4LogicalVolume *lv_Gap_T2_logic =
537 new G4LogicalVolume(lv_Gap_T2_solid, m_M_CgemGas, slogic);
538 G4VPhysicalVolume *lv_Gap_T2_physi =
539 new G4PVPlacement(lv_rotation, lv_3vector, lv_Gap_T2_logic, sphysi,
540 lv_CgemLayer_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
544 sssolid <<
"Gap_I_solid";
546 ssolid = sssolid.str();
548 sslogic <<
"Gap_I_logic";
550 slogic = sslogic.str();
552 ssphysi <<
"Gap_I_physi";
554 sphysi = ssphysi.str();
557 G4Tubs *lv_Gap_I_solid =
558 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
559 G4LogicalVolume *lv_Gap_I_logic =
560 new G4LogicalVolume(lv_Gap_I_solid, m_M_CgemGas, slogic);
561 G4VPhysicalVolume *lv_Gap_I_physi =
562 new G4PVPlacement(lv_rotation, lv_3vector, lv_Gap_I_logic, sphysi,
563 lv_CgemLayer_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
566 for (G4int j=0; j < lvi_N_GemFoil; j++)
568 log<< MSG::INFO <<
"BesCgemConstruciton::ConstructFromCode(), Construct CgemLayer " << i <<
" GemFoil " << j << endreq;
575 sssolid <<
"GemFoil_solid";
579 ssolid = sssolid.str();
581 sslogic <<
"GemFoil_logic";
585 slogic = sslogic.str();
587 ssphysi <<
"GemFoil_physi";
591 sphysi = ssphysi.str();
594 G4Tubs *lv_GemFoil_solid =
595 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
596 G4LogicalVolume *lv_GemFoil_logic =
597 new G4LogicalVolume(lv_GemFoil_solid, m_M_CgemGas, slogic);
598 G4VPhysicalVolume *lv_GemFoil_physi =
599 new G4PVPlacement(lv_rotation, lv_3vector, lv_GemFoil_logic, sphysi,
600 lv_CgemLayer_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
607 sssolid <<
"GemFoil_Cu1_solid";
611 ssolid = sssolid.str();
613 sslogic <<
"GemFoil_Cu1_logic";
618 slogic = sslogic.str();
620 ssphysi <<
"GemFoil_Cu1_physi";
624 sphysi = ssphysi.str();
627 G4Tubs *lv_GemFoil_Cu1_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_Cu1_logic =
630 new G4LogicalVolume(lv_GemFoil_Cu1_solid, m_M_Cu_GEMFoils, slogic);
631 G4VPhysicalVolume *lv_GemFoil_Cu1_physi =
632 new G4PVPlacement(lv_rotation, lv_3vector, lv_GemFoil_Cu1_logic, sphysi,
633 lv_GemFoil_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
637 sssolid <<
"GemFoil_Kapton_solid";
641 ssolid = sssolid.str();
643 sslogic <<
"GemFoil_Kapton_logic";
647 slogic = sslogic.str();
649 ssphysi <<
"GemFoil_Kapton_physi";
653 sphysi = ssphysi.str();
656 G4Tubs *lv_GemFoil_Kapton_solid =
657 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
658 G4LogicalVolume *lv_GemFoil_Kapton_logic =
659 new G4LogicalVolume(lv_GemFoil_Kapton_solid, m_M_Kapton_GEMFoils, slogic);
660 G4VPhysicalVolume *lv_GemFoil_Kapton_physi =
661 new G4PVPlacement(lv_rotation, lv_3vector, lv_GemFoil_Kapton_logic,
662 sphysi, lv_GemFoil_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
666 sssolid <<
"GemFoil_Cu2_solid";
670 ssolid = sssolid.str();
672 sslogic <<
"GemFoil_Cu2_logic";
677 slogic = sslogic.str();
679 ssphysi <<
"GemFoil_Cu2_physi";
683 sphysi = ssphysi.str();
686 G4Tubs *lv_GemFoil_Cu2_solid =
687 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
688 G4LogicalVolume *lv_GemFoil_Cu2_logic =
689 new G4LogicalVolume(lv_GemFoil_Cu2_solid, m_M_Cu_GEMFoils, slogic);
690 G4VPhysicalVolume *lv_GemFoil_Cu2_physi =
691 new G4PVPlacement(lv_rotation, lv_3vector, lv_GemFoil_Cu2_logic, sphysi,
692 lv_GemFoil_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
696 cout<<
"construct holes on GEM foil "<<j<<
" of layer "<<i<<endl;
701 G4double holepitchphi = holepitchz*sqrt(3);
703 G4double holeh2 = holeh1;
705 G4double anglephi = (holepitchphi/(R_o_cu1+holeh1))*
rad;
706 G4int nCgemline = floor(CLHEP::twopi/anglephi);
707 G4int nholeZ = floor((lvd_L_z-2*lvd_R_i_hole)/holepitchz);
708 G4double restangle = CLHEP::twopi-nCgemline*anglephi;
713 G4Cons *holeS1 =
new G4Cons(
"Hole1",0.,lvd_R_o1_hole,0.,lvd_R_i_hole,holeh1/2.,0,360*deg);
714 G4Cons *holeS2 =
new G4Cons(
"Hole2",0.,lvd_R_i_hole,0.,lvd_R_o2_hole,holeh1/2.,0,360*deg);
715 G4LogicalVolume *hole1LV =
new G4LogicalVolume(holeS1,m_M_CgemGas,
"Hole1");
716 G4LogicalVolume *hole2LV =
new G4LogicalVolume(holeS2,m_M_CgemGas,
"Hole2");
748 sssolid <<
"GemFoil_Cu_solid";
752 ssolid = sssolid.str();
754 sslogic <<
"GemFoil_Cu_logic";
759 slogic = sslogic.str();
761 ssphysi <<
"GemFoil_Cu_physi";
765 sphysi = ssphysi.str();
770 G4double lvd_L_hole1_Cu = lvd_R_o1-lvd_R_i1;
771 G4double lvd_L_hole2_Cu = lvd_R_o2-lvd_R_i2;
772 G4Tubs *lv_GemFoil_Cu_solid =
773 new G4Tubs(ssolid, lvd_R_i1, lvd_R_o1, lvd_L_z/2., lvd_A_s, anglephi);
774 G4LogicalVolume *lv_GemFoil_Cu_logic =
775 new G4LogicalVolume(lv_GemFoil_Cu_solid, m_M_Cu, slogic);
776 G4Tubs *holeCu1 =
new G4Tubs(
"hole1",0.,lvd_R_o2_hole, lvd_L_hole1_Cu/2.,lvd_A_s,lvd_A_d);
777 G4Tubs *holeCu2 =
new G4Tubs(
"hole2",0.,lvd_R_o1_hole, lvd_L_hole2_Cu/2.,lvd_A_s,lvd_A_d);
778 G4LogicalVolume *holeCu1LV =
new G4LogicalVolume(holeCu1,m_M_CgemGas,
"hole1");
779 G4LogicalVolume *holeCu2LV =
new G4LogicalVolume(holeCu2,m_M_CgemGas,
"hole2");
782 sssolid <<
"GemFoil_Cu2_solid";
786 ssolid = sssolid.str();
788 sslogic <<
"GemFoil_Cu2_logic";
793 slogic = sslogic.str();
795 ssphysi <<
"GemFoil_Cu2_physi";
799 sphysi = ssphysi.str();
802 G4Tubs *lv_GemFoil_Cu2_solid =
803 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, anglephi);
804 G4LogicalVolume *lv_GemFoil_Cu2_logic =
805 new G4LogicalVolume(lv_GemFoil_Cu2_solid, m_M_Cu, slogic);
819 sssolid <<
"GemFoil_Kaptonline_solid";
823 ssolid = sssolid.str();
825 sslogic <<
"GemFoil_Kaptonline_logic";
829 slogic = sslogic.str();
831 ssphysi <<
"GemFoil_Kaptonline_physi";
835 sphysi = ssphysi.str();
838 G4Tubs *lv_GemFoil_Kapton_solid =
839 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s,anglephi);
840 G4LogicalVolume *lv_GemFoil_Kapton_logic =
841 new G4LogicalVolume(lv_GemFoil_Kapton_solid, m_M_Kapton, slogic);
843 for(G4int iHole = 0;iHole<2;iHole++){
844 if(iHole==1) firstHoleZ = -nholeZ*holepitchz/2+0.5*holepitchz;
845 if(iHole==0) firstHoleZ = -nholeZ*holepitchz/2;
846 G4double holePosPhi = 0.25*anglephi+0.5*iHole*anglephi;
847 G4RotationMatrix* rotHole =
new G4RotationMatrix();
848 rotHole->rotateY(90*deg);
849 rotHole->rotateX(-holePosPhi);
850 for(G4int zhole=0;zhole<(nholeZ-iHole);zhole++){
851 G4double holePosZ = firstHoleZ+zhole*holepitchz;
852 G4double holerho1 = lvd_R_i+0.5*holeh1;
853 G4double holerho2 = lvd_R_o-0.5*holeh1;
854 G4double holerho0 = lvd_R_i1+0.5*lvd_L_hole1_Cu;
855 G4double holerho3 = lvd_R_i2+0.5*lvd_L_hole2_Cu;
856 G4ThreeVector holePos1,holePos2,holePos0,holePos3;
857 holePos1.setRhoPhiZ(holerho1,holePosPhi,holePosZ);
858 holePos2.setRhoPhiZ(holerho2,holePosPhi,holePosZ);
859 holePos0.setRhoPhiZ(holerho0,holePosPhi,holePosZ);
860 holePos3.setRhoPhiZ(holerho3,holePosPhi,holePosZ);
861 G4VPhysicalVolume* hole1PV =
new G4PVPlacement(rotHole,holePos1,hole1LV,
"hole1PV",lv_GemFoil_Kapton_logic,lv_boolen,lv_copyNo,
false);
862 G4VPhysicalVolume* hole2PV =
new G4PVPlacement(rotHole,holePos2,hole2LV,
"hole2PV",lv_GemFoil_Kapton_logic,lv_boolen,lv_copyNo,
false);
863 G4VPhysicalVolume* holeCu1PV =
new G4PVPlacement(rotHole,holePos0,holeCu1LV,
"holeCu1PV",lv_GemFoil_Cu_logic,lv_boolen,lv_copyNo,
false);
864 G4VPhysicalVolume* holeCu2PV =
new G4PVPlacement(rotHole,holePos3,holeCu2LV,
"holeCu2PV",lv_GemFoil_Cu2_logic,lv_boolen,lv_copyNo,
false);
867 for(G4int iCgemline=0;iCgemline<nCgemline;iCgemline++){
868 G4RotationMatrix* rotline =
new G4RotationMatrix();
869 rotline->rotateZ(-iCgemline*anglephi);
870 G4VPhysicalVolume *lv_GemFoil_Cu_physi =
new G4PVPlacement(rotline, lv_3vector, lv_GemFoil_Cu_logic, sphysi,lv_GemFoil_logic, lv_boolen, lv_copyNo,
false);
871 G4VPhysicalVolume *lv_GemFoil_Cu2_physi =
new G4PVPlacement(rotline, lv_3vector, lv_GemFoil_Cu2_logic, sphysi,lv_GemFoil_logic, lv_boolen, lv_copyNo,
false);
873 G4VPhysicalVolume* lv_GemFoil_Kapton_physi =
new G4PVPlacement(rotline, lv_3vector,lv_GemFoil_Kapton_logic,sphysi,lv_GemFoil_logic,lv_boolen,lv_copyNo,
false);
924 lv_GemFoil_logic->SetVisAttributes(lv_magenta);
926 Print(lv_GemFoil_logic);
932 log<< MSG::INFO <<
"BesCgemConstruciton::ConstructFromCode(), Construct CgemLayer " << i <<
" Anode "<< endreq;
935 sssolid <<
"Anode_solid";
937 ssolid = sssolid.str();
939 sslogic <<
"Anode_logic";
941 slogic = sslogic.str();
943 ssphysi <<
"Anode_physi";
945 sphysi = ssphysi.str();
948 G4Tubs *lv_Anode_solid =
949 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
950 G4LogicalVolume *lv_Anode_logic =
951 new G4LogicalVolume(lv_Anode_solid, m_M_CgemGas, slogic);
952 G4VPhysicalVolume *lv_Anode_physi =
953 new G4PVPlacement(lv_rotation, lv_3vector, lv_Anode_logic, sphysi,
954 lv_CgemLayer_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
962 ssolid = sssolid.str();
967 slogic = sslogic.str();
971 sphysi = ssphysi.str();
976 if (lvd_R_i==lvd_R_o)
break;
978 G4Tubs *lv_Anode_Cu1_solid =
979 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
985 if(lv_use_v_strip_description ==
false)
988 G4LogicalVolume *lv_Anode_Cu1_logic =
989 new G4LogicalVolume(lv_Anode_Cu1_solid, m_M_Cu_AnodeStripV, slogic);
990 G4VPhysicalVolume *lv_Anode_Cu1_physi =
991 new G4PVPlacement(lv_rotation, lv_3vector, lv_Anode_Cu1_logic, sphysi,
992 lv_Anode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
999 cout<<
"construct v-strips on layer "<<i<<endl;
1003 double v_airgap = v_spacing - v_active;
1005 double anode_cu1_mean_radius = 0.5 * (lvd_R_i + lvd_R_o);
1006 double anode_full_v = anode_cu1_mean_radius * CLHEP::twopi;
1007 int nof_anode_v = floor(anode_full_v / v_spacing);
1014 if(tan_stereo < 0) tan_stereo *= -1.;
1017 int nof_replicas = tan_stereo * lvd_L_z / 0.10;
1020 double replica_length = lvd_L_z / nof_replicas;
1023 double phi_v = (CLHEP::twopi/nof_anode_v) * CLHEP::rad;
1024 double tilt =
tan(lv_CgemLayer->
getAngleOfStereo()) * lvd_L_z/(nof_replicas * anode_cu1_mean_radius);
1025 if(tilt > CLHEP::pi) tilt = CLHEP::twopi - tilt;
1030 G4LogicalVolume *lv_Anode_Cu1_logic =
1031 new G4LogicalVolume(lv_Anode_Cu1_solid, m_M_CgemGas,
"Anode_Cu1_logic");
1034 G4VSolid* lv_Anode_V_Strip_solid =
1035 new G4Tubs(
"Anode_V_Strip_solid", lvd_R_i, lvd_R_o, replica_length * 0.5, lvd_A_s, lvd_A_d);
1038 G4LogicalVolume *lv_Anode_V_Strip_logic =
1039 new G4LogicalVolume(lv_Anode_V_Strip_solid, m_M_CgemGas,
"Anode_V_Strip_logic");
1051 double v_active_phi = (v_active / anode_cu1_mean_radius) * CLHEP::radian;
1055 G4Tubs* lv_Anode_V_Active_solid =
1056 new G4Tubs(
"Anode_V_Active_solid", lvd_R_i, lvd_R_o, replica_length * 0.5,
1057 -0.5 * v_active_phi,
1060 G4LogicalVolume *lv_Anode_V_Active_logic =
1061 new G4LogicalVolume(lv_Anode_V_Active_solid, m_M_Cu,
"Anode_V_Active_logic");
1065 G4VisAttributes anode_v_active_attributes;
1068 anode_v_active_attributes.SetVisibility(
false);
1071 lv_Anode_V_Active_logic->SetVisAttributes(anode_v_active_attributes);
1074 G4VPhysicalVolume *lv_Anode_V_Active_physi =
1075 new G4PVReplica(
"Anode_V_Active_physi", lv_Anode_V_Active_logic, lv_Anode_V_Strip_logic, kPhi, nof_anode_v, phi_v);
1083 G4VPhysicalVolume* lv_Anode_V_Strip_physi =
1084 new G4PVParameterised(
"Anode_V_Strip_physi", lv_Anode_V_Strip_logic, lv_Anode_Cu1_logic, kZAxis, nof_replicas, sliceParam);
1086 G4VPhysicalVolume *lv_Anode_Cu1_physi =
1087 new G4PVPlacement(lv_rotation, lv_3vector, lv_Anode_Cu1_logic,
"Anode_Cu1_physi",
1088 lv_Anode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
1095 if (lvd_R_i==lvd_R_o)
break;
1096 G4Tubs *lv_Anode_Kapton1_solid =
1097 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
1098 G4LogicalVolume *lv_Anode_Kapton1_logic =
1099 new G4LogicalVolume(lv_Anode_Kapton1_solid, m_M_Kapton_StripV, slogic);
1100 G4VPhysicalVolume *lv_Anode_Kapton1_physi =
1101 new G4PVPlacement(lv_rotation, lv_3vector, lv_Anode_Kapton1_logic, sphysi,
1102 lv_Anode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
1107 if (lvd_R_i==lvd_R_o)
break;
1109 G4Tubs *lv_Anode_Cu2_solid =
1110 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
1112 if(lv_use_x_strip_description ==
false)
1115 G4LogicalVolume *lv_Anode_Cu2_logic =
1116 new G4LogicalVolume(lv_Anode_Cu2_solid, m_M_Cu_AnodeStripX, slogic);
1117 G4VPhysicalVolume *lv_Anode_Cu2_physi =
1118 new G4PVPlacement(lv_rotation, lv_3vector, lv_Anode_Cu2_logic, sphysi,
1119 lv_Anode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
1123 cout<<
"construct x-strips on layer "<<i<<endl;
1127 double x_airgap = x_spacing - x_active;
1129 double anode_cu2_mean_radius = 0.5 * (lvd_R_i + lvd_R_o);
1130 double anode_full_x = anode_cu2_mean_radius * CLHEP::twopi;
1131 int nof_anode_x = floor(anode_full_x / x_spacing);
1134 double phi_x = (CLHEP::twopi/nof_anode_x) * CLHEP::rad;
1141 G4LogicalVolume *lv_Anode_Cu2_logic =
1142 new G4LogicalVolume(lv_Anode_Cu2_solid, m_M_CgemGas,
"lv_Anode_Cu2_logic");
1143 G4VPhysicalVolume *lv_Anode_Cu2_physi =
1144 new G4PVPlacement(lv_rotation, lv_3vector, lv_Anode_Cu2_logic,
"Anode_Cu2_physi",
1145 lv_Anode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
1148 G4VSolid* lv_Anode_X_Strip_solid =
1149 new G4Tubs(
"lv_Anode_X_Strip_solid", lvd_R_i, lvd_R_o, lvd_L_z/2., -0.5 * phi_x, phi_x);
1152 G4LogicalVolume *lv_Anode_X_Strip_logic =
1153 new G4LogicalVolume(lv_Anode_X_Strip_solid, m_M_CgemGas,
"lv_Anode_Cu2_logic");
1164 double x_delay_phi = ((0.5 * x_airgap) / anode_cu2_mean_radius) * CLHEP::radian;
1165 double x_active_phi = (x_active / anode_cu2_mean_radius) * CLHEP::radian;
1167 G4Tubs* lv_Anode_X_Active_solid =
1168 new G4Tubs(
"Anode_X_Active_solid", lvd_R_i, lvd_R_o, lvd_L_z/2., -0.5 * x_active_phi, x_active_phi);
1169 G4LogicalVolume *lv_Anode_X_Active_logic =
1170 new G4LogicalVolume(lv_Anode_X_Active_solid, m_M_Cu,
"Anode_X_Active_logic");
1181 G4VPhysicalVolume *lv_Anode_X_Active_physi =
1182 new G4PVPlacement(lv_rotation, lv_3vector, lv_Anode_X_Active_logic,
"Anode_X_Strip_physi",
1183 lv_Anode_X_Strip_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
1186 G4VPhysicalVolume *lv_Anode_X_Strip_physi =
1187 new G4PVReplica(
"Anode_X_Strip_physi", lv_Anode_X_Strip_logic,
1188 lv_Anode_Cu2_logic, kPhi, nof_anode_x, phi_x);
1195 if (lvd_R_i==lvd_R_o)
break;
1196 G4Tubs *lv_Anode_Epoxy1_solid =
1197 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
1198 G4LogicalVolume *lv_Anode_Epoxy1_logic =
1199 new G4LogicalVolume(lv_Anode_Epoxy1_solid, m_M_Epoxy, slogic);
1200 G4VPhysicalVolume *lv_Anode_Epoxy1_physi =
1201 new G4PVPlacement(lv_rotation, lv_3vector, lv_Anode_Epoxy1_logic, sphysi,
1202 lv_Anode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
1207 if (lvd_R_i==lvd_R_o)
break;
1208 G4Tubs *lv_Anode_Kapton2_solid =
1209 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
1210 G4LogicalVolume *lv_Anode_Kapton2_logic =
1211 new G4LogicalVolume(lv_Anode_Kapton2_solid, m_M_Kapton, slogic);
1212 G4VPhysicalVolume *lv_Anode_Kapton2_physi =
1213 new G4PVPlacement(lv_rotation, lv_3vector, lv_Anode_Kapton2_logic, sphysi,
1214 lv_Anode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
1219 if (lvd_R_i==lvd_R_o)
break;
1220 G4Tubs *lv_Anode_Epoxy2_solid =
1221 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
1222 G4LogicalVolume *lv_Anode_Epoxy2_logic =
1223 new G4LogicalVolume(lv_Anode_Epoxy2_solid, m_M_Epoxy, slogic);
1224 G4VPhysicalVolume *lv_Anode_Epoxy2_physi =
1225 new G4PVPlacement(lv_rotation, lv_3vector, lv_Anode_Epoxy2_logic, sphysi,
1226 lv_Anode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
1231 if (lvd_R_i==lvd_R_o)
break;
1232 G4Tubs *lv_Anode_Rohacell1_solid =
1233 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
1234 G4LogicalVolume *lv_Anode_Rohacell1_logic =
1235 new G4LogicalVolume(lv_Anode_Rohacell1_solid, m_M_Rohacell, slogic);
1236 G4VPhysicalVolume *lv_Anode_Rohacell1_physi =
1237 new G4PVPlacement(lv_rotation, lv_3vector, lv_Anode_Rohacell1_logic, sphysi,
1238 lv_Anode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
1243 if (lvd_R_i==lvd_R_o)
break;
1244 G4Tubs *lv_Anode_Carbonf1_solid =
1245 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
1246 G4LogicalVolume *lv_Anode_Carbonf1_logic =
1247 new G4LogicalVolume(lv_Anode_Carbonf1_solid, m_M_CarbonFiber, slogic);
1248 G4VPhysicalVolume *lv_Anode_Carbonf1_physi =
1249 new G4PVPlacement(lv_rotation, lv_3vector, lv_Anode_Carbonf1_logic, sphysi,
1250 lv_Anode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
1255 if (lvd_R_i==lvd_R_o)
break;
1256 G4Tubs *lv_Anode_Kapton3_solid =
1257 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
1258 G4LogicalVolume *lv_Anode_Kapton3_logic =
1259 new G4LogicalVolume(lv_Anode_Kapton3_solid, m_M_Kapton, slogic);
1260 G4VPhysicalVolume *lv_Anode_Kapton3_physi =
1261 new G4PVPlacement(lv_rotation, lv_3vector, lv_Anode_Kapton3_logic, sphysi,
1262 lv_Anode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
1267 if (lvd_R_i==lvd_R_o)
break;
1268 G4Tubs *lv_Anode_Epoxy3_solid =
1269 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
1270 G4LogicalVolume *lv_Anode_Epoxy3_logic =
1271 new G4LogicalVolume(lv_Anode_Epoxy3_solid, m_M_Epoxy, slogic);
1272 G4VPhysicalVolume *lv_Anode_Epoxy3_physi =
1273 new G4PVPlacement(lv_rotation, lv_3vector, lv_Anode_Epoxy3_logic, sphysi,
1274 lv_Anode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
1279 if (lvd_R_i==lvd_R_o)
break;
1280 G4Tubs *lv_Anode_Honeycomb_solid =
1281 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
1282 G4LogicalVolume *lv_Anode_Honeycomb_logic =
1283 new G4LogicalVolume(lv_Anode_Honeycomb_solid, m_M_Honeycomb, slogic);
1284 G4VPhysicalVolume *lv_Anode_Honeycomb_physi =
1285 new G4PVPlacement(lv_rotation, lv_3vector, lv_Anode_Honeycomb_logic, sphysi,
1286 lv_Anode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
1291 if (lvd_R_i==lvd_R_o)
break;
1292 G4Tubs *lv_Anode_Kapton4_solid =
1293 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
1294 G4LogicalVolume *lv_Anode_Kapton4_logic =
1295 new G4LogicalVolume(lv_Anode_Kapton4_solid, m_M_Kapton, slogic);
1296 G4VPhysicalVolume *lv_Anode_Kapton4_physi =
1297 new G4PVPlacement(lv_rotation, lv_3vector, lv_Anode_Kapton4_logic, sphysi,
1298 lv_Anode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
1303 if (lvd_R_i==lvd_R_o)
break;
1304 G4Tubs *lv_Anode_Epoxy4_solid =
1305 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
1306 G4LogicalVolume *lv_Anode_Epoxy4_logic =
1307 new G4LogicalVolume(lv_Anode_Epoxy4_solid, m_M_Epoxy, slogic);
1308 G4VPhysicalVolume *lv_Anode_Epoxy4_physi =
1309 new G4PVPlacement(lv_rotation, lv_3vector, lv_Anode_Epoxy4_logic, sphysi,
1310 lv_Anode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
1315 if (lvd_R_i==lvd_R_o)
break;
1316 G4Tubs *lv_Anode_Rohacell2_solid =
1317 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
1318 G4LogicalVolume *lv_Anode_Rohacell2_logic =
1319 new G4LogicalVolume(lv_Anode_Rohacell2_solid, m_M_Rohacell, slogic);
1320 G4VPhysicalVolume *lv_Anode_Rohacell2_physi =
1321 new G4PVPlacement(lv_rotation, lv_3vector, lv_Anode_Rohacell2_logic, sphysi,
1322 lv_Anode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
1327 if (lvd_R_i==lvd_R_o)
break;
1328 G4Tubs *lv_Anode_Carbonf2_solid =
1329 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
1330 G4LogicalVolume *lv_Anode_Carbonf2_logic =
1331 new G4LogicalVolume(lv_Anode_Carbonf2_solid, m_M_CarbonFiber, slogic);
1332 G4VPhysicalVolume *lv_Anode_Carbonf2_physi =
1333 new G4PVPlacement(lv_rotation, lv_3vector, lv_Anode_Carbonf2_logic, sphysi,
1334 lv_Anode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
1339 if (lvd_R_i==lvd_R_o)
break;
1340 G4Tubs *lv_Anode_Epoxy5_solid =
1341 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
1342 G4LogicalVolume *lv_Anode_Epoxy5_logic =
1343 new G4LogicalVolume(lv_Anode_Epoxy5_solid, m_M_Epoxy, slogic);
1344 G4VPhysicalVolume *lv_Anode_Epoxy5_physi =
1345 new G4PVPlacement(lv_rotation, lv_3vector, lv_Anode_Epoxy5_logic, sphysi,
1346 lv_Anode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
1351 if (lvd_R_i==lvd_R_o)
break;
1352 G4Tubs *lv_Anode_Cu3_solid =
1353 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
1354 G4LogicalVolume *lv_Anode_Cu3_logic =
1355 new G4LogicalVolume(lv_Anode_Cu3_solid, m_M_Cu, slogic);
1356 G4VPhysicalVolume *lv_Anode_Cu3_physi =
1357 new G4PVPlacement(lv_rotation, lv_3vector, lv_Anode_Cu3_logic, sphysi,
1358 lv_Anode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
1363 if (lvd_R_i==lvd_R_o)
break;
1364 G4Tubs *lv_Anode_Kapton5_solid =
1365 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
1366 G4LogicalVolume *lv_Anode_Kapton5_logic =
1367 new G4LogicalVolume(lv_Anode_Kapton5_solid, m_M_Kapton, slogic);
1368 G4VPhysicalVolume *lv_Anode_Kapton5_physi =
1369 new G4PVPlacement(lv_rotation, lv_3vector, lv_Anode_Kapton5_logic, sphysi,
1370 lv_Anode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
1375 if (lvd_R_i==lvd_R_o)
break;
1376 G4Tubs *lv_Anode_Kapton6_solid =
1377 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
1378 G4LogicalVolume *lv_Anode_Kapton6_logic =
1379 new G4LogicalVolume(lv_Anode_Kapton6_solid, m_M_Kapton, slogic);
1380 G4VPhysicalVolume *lv_Anode_Kapton6_physi =
1381 new G4PVPlacement(lv_rotation, lv_3vector, lv_Anode_Kapton6_logic, sphysi,
1382 lv_Anode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
1388 if (lvd_R_i==lvd_R_o)
break;
1389 G4Tubs *lv_Anode_Cu4_solid =
1390 new G4Tubs(ssolid, lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
1391 G4LogicalVolume *lv_Anode_Cu4_logic =
1392 new G4LogicalVolume(lv_Anode_Cu4_solid, m_M_Cu, slogic);
1393 G4VPhysicalVolume *lv_Anode_Cu4_physi =
1394 new G4PVPlacement(lv_rotation, lv_3vector, lv_Anode_Cu4_logic, sphysi,
1395 lv_Anode_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
1404 lv_CgemLayer_logic -> SetVisAttributes(lv_white);
1405 lv_Cathode_logic -> SetVisAttributes(lv_green);
1406 lv_Anode_logic -> SetVisAttributes(lv_red);
1409 Print(lv_CgemLayer_logic);
1410 Print(lv_Cathode_logic);
1411 Print(lv_Anode_logic);
1419 G4double ring_rmax = ring_rmin + 4.65*mm;
1421 G4double ring1_rmax = ring1_rmin + 1.65*mm;
1423 G4double ring2_rmax = ring2_rmin + 1.65*mm;
1425 G4double ring3_rmax = ring3_rmin + 1.65*mm;
1426 G4double ring_hz = 0.3*mm;
1427 G4double ring_phimin = 0.*deg, ring_phimax = 360.*deg;
1428 G4double DeltaRing = 97.6*mm;
1429 G4double zPosRingL = 0.*mm;
1430 G4double zPosRingR = 0.*mm;
1433 G4String logicRingnameR;
1434 G4String logicRingnameL;
1439 G4double theta0 = 0.;
1440 G4double
theta1 = theta0 + 10.;
1441 G4double
theta2 = theta0 + 0.;
1442 G4double theta3 = theta0 + 10.;
1444 stringstream ssphysiRingR, ssphysiRingL;
1445 string sphysiRingR, sphysiRingL;
1446 stringstream ssphysiBar, ssphysiBarshort;
1447 string sphysiBar, sphysiBarshort;
1450 G4Tubs* RingCathodeR =
1451 new G4Tubs(
"RingCathodeR",ring_rmin, ring_rmax, ring_hz, ring_phimin, ring_phimax);
1452 G4LogicalVolume* logicRing =
new G4LogicalVolume(RingCathodeR,m_M_Peek,
"RingCathodeR");
1453 G4VPhysicalVolume *lv_RingCath_physi;
1455 for (G4int i=0;i<4;i++) {
1457 zPosRingR = DeltaRing/2.;
1458 zPosRingL = -DeltaRing/2.;
1461 zPosRingR = zPosRingR+DeltaRing;
1462 zPosRingL = zPosRingL-DeltaRing;
1464 ssphysiRingR.str(
"");
1465 ssphysiRingR <<
"lv_RingCath_physi";
1466 ssphysiRingR << i+4;
1467 sphysiRingR = ssphysiRingR.str();
1468 ssphysiRingL.str(
"");
1469 ssphysiRingL <<
"lv_RingCath_physi";
1471 sphysiRingL = ssphysiRingL.str();
1473 new G4PVPlacement(0,
1474 G4ThreeVector(0.,0.,zPosRingR),
1481 new G4PVPlacement(0,
1482 G4ThreeVector(0.,0.,zPosRingL),
1491 G4int k = 0, kshort = 0;
1492 G4double bars_y = 4.75/2.*mm;
1493 G4double bars_z = (DeltaRing)/2-ring_hz;
1494 G4double bars_zshort = (DeltaRing-15.7*mm)/2-ring_hz;
1495 G4double bars_x = 0.3/2.*mm;
1496 G4Box* bars =
new G4Box(
"bars",bars_x, bars_y, bars_z);
1497 G4LogicalVolume* logicBars =
new G4LogicalVolume(bars,
1500 G4Box* bars_short =
new G4Box(
"bars_short",bars_x, bars_y, bars_zshort);
1501 G4LogicalVolume* logicBars_short =
new G4LogicalVolume(bars_short,
1504 G4VPhysicalVolume *lv_BarCath_physi;
1505 G4VPhysicalVolume *lv_BarshortCath_physi;
1507 G4double zPosBarsR = 0.*mm;
1508 G4double zPosBarsL = 0.*mm;
1509 G4double zPosBars = 0.*mm;
1510 G4double xPosBars = 0.*mm;
1511 G4double yPosBars = ring_rmin+bars_y;
1512 G4double yPosBarstest = 0*mm;
1513 for(G4int j = 0; j<12; j++){
1514 xPosBars = yPosBars*
sin((theta0+j*30.)*deg);
1515 if(j==0 && theta0==0){
1516 yPosBarstest = yPosBars;
1519 yPosBarstest = yPosBars*
cos((theta0+j*30.)*deg);
1521 for(G4int i = 0; i<9; i++){
1529 if(i == 4) {zPosBarsR = zPosBarsR + (DeltaRing-(15.7/2.)*mm);}
1530 else {zPosBarsR = zPosBarsR + DeltaRing;}
1534 if(i == 8) {zPosBarsL = zPosBarsL - (DeltaRing-(15.7/2.)*mm);}
1535 else{zPosBarsL = zPosBarsL - DeltaRing;}
1539 ssphysiBar.str(
""); ssphysiBarshort.str(
"");
1540 ssphysiBar <<
"lv_BarCath_physi";
1542 ssphysiBarshort <<
"lv_BarshortCath_physi";
1543 ssphysiBarshort << kshort;
1544 sphysiBar = ssphysiBar.str();
1545 sphysiBarshort = ssphysiBarshort.str();
1547 G4ThreeVector posbars = G4ThreeVector(xPosBars, yPosBarstest, zPosBars);
1550 new G4PVPlacement(0,
1561 new G4PVPlacement(0,
1578 new G4Tubs(
"RingGem1",ring1_rmin, ring1_rmax, ring_hz, ring_phimin, ring_phimax);
1579 G4LogicalVolume* logicRing1 =
new G4LogicalVolume(RingGem1, m_M_Peek,
"RingGem1");
1580 G4VPhysicalVolume *lv_RingT1_physi;
1582 for (G4int i=0;i<4;i++) {
1584 zPosRingR = DeltaRing/2.;
1585 zPosRingL = -DeltaRing/2.;
1588 zPosRingR = zPosRingR+DeltaRing;
1589 zPosRingL = zPosRingL-DeltaRing;
1591 ssphysiRingR.str(
"");
1592 ssphysiRingR <<
"lv_RingT1_physi";
1593 ssphysiRingR << i+4;
1594 sphysiRingR = ssphysiRingR.str();
1595 ssphysiRingL.str(
"");
1596 ssphysiRingL <<
"lv_RingT1_physi";
1598 sphysiRingL = ssphysiRingL.str();
1599 new G4PVPlacement(0,
1600 G4ThreeVector(0.,0.,zPosRingR),
1607 new G4PVPlacement(0,
1608 G4ThreeVector(0.,0.,zPosRingL),
1618 bars_y = 1.75/2.*mm;
1619 G4Box* bars1 =
new G4Box(
"bars1",bars_x, bars_y, bars_z);
1620 G4LogicalVolume* logicBars1 =
new G4LogicalVolume(bars1,
1623 G4Box* bars_short1 =
new G4Box(
"bars_short1",bars_x, bars_y, bars_zshort);
1624 G4LogicalVolume* logicBars_short1 =
new G4LogicalVolume(bars_short1,
1627 G4VPhysicalVolume *lv_BarT1_physi;
1628 G4VPhysicalVolume *lv_BarshortT1_physi;
1633 yPosBars = ring1_rmin+bars_y;
1634 yPosBarstest = 0*mm;
1635 for(G4int j = 0; j<12; j++){
1636 xPosBars = yPosBars*
sin((
theta1+j*30.)*deg);
1637 G4RotationMatrix* rm =
new G4RotationMatrix();
1638 rm->rotateZ((
theta1+j*30.)*deg);
1640 yPosBarstest = yPosBars;
1643 yPosBarstest = yPosBars*
cos((
theta1+j*30.)*deg);
1645 for(G4int i = 0; i<9; i++){
1653 if(i == 4) {zPosBarsR = zPosBarsR + (DeltaRing-(15.7/2.)*mm);}
1654 else {zPosBarsR = zPosBarsR + DeltaRing;}
1658 if(i == 8) {zPosBarsL = zPosBarsL - (DeltaRing-(15.7/2.)*mm);}
1659 else{zPosBarsL = zPosBarsL - DeltaRing;}
1663 ssphysiBar.str(
""); ssphysiBarshort.str(
"");
1664 ssphysiBar <<
"lv_BarT1_physi";
1666 ssphysiBarshort <<
"lv_BarshortT1_physi";
1667 ssphysiBarshort << kshort;
1668 sphysiBar = ssphysiBar.str();
1669 sphysiBarshort = ssphysiBarshort.str();
1670 G4ThreeVector posbars = G4ThreeVector(xPosBars, yPosBarstest, zPosBars);
1672 new G4PVPlacement(0,
1683 new G4PVPlacement(0,
1700 new G4Tubs(
"RingGem2",ring2_rmin, ring2_rmax, ring_hz, ring_phimin, ring_phimax);
1701 G4LogicalVolume* logicRing2 =
new G4LogicalVolume(RingGem2, m_M_Peek,
"RingGem2");
1702 G4VPhysicalVolume *lv_RingT2_physi;
1704 for (G4int i=0;i<4;i++) {
1706 zPosRingR = DeltaRing/2.;
1707 zPosRingL = -DeltaRing/2.;
1710 zPosRingR = zPosRingR+DeltaRing;
1711 zPosRingL = zPosRingL-DeltaRing;
1713 ssphysiRingR.str(
"");
1714 ssphysiRingR <<
"lv_RingT2_physi";
1715 ssphysiRingR << i+4;
1716 sphysiRingR = ssphysiRingR.str();
1717 ssphysiRingL.str(
"");
1718 ssphysiRingL <<
"lv_RingT2_physi";
1720 sphysiRingL = ssphysiRingL.str();
1722 new G4PVPlacement(0,
1723 G4ThreeVector(0.,0.,zPosRingR),
1730 new G4PVPlacement(0,
1731 G4ThreeVector(0.,0.,zPosRingL),
1741 bars_y = 1.75/2.*mm;
1742 G4Box* bars2 =
new G4Box(
"bars2",bars_x, bars_y, bars_z);
1743 G4LogicalVolume* logicBars2 =
new G4LogicalVolume(bars2,
1746 G4Box* bars_short2 =
new G4Box(
"bars_short2",bars_x, bars_y, bars_zshort);
1747 G4LogicalVolume* logicBars_short2 =
new G4LogicalVolume(bars_short2,
1750 G4VPhysicalVolume *lv_BarT2_physi;
1751 G4VPhysicalVolume *lv_BarshortT2_physi;
1756 yPosBars = ring2_rmin+bars_y;
1757 yPosBarstest = 0*mm;
1758 for(G4int j = 0; j<12; j++){
1759 xPosBars = yPosBars*
sin((
theta2+j*30.)*deg);
1760 G4RotationMatrix* rm =
new G4RotationMatrix();
1761 rm->rotateZ((
theta2+j*30.)*deg);
1763 yPosBarstest = yPosBars;
1766 yPosBarstest = yPosBars*
cos((
theta2+j*30.)*deg);
1768 for(G4int i = 0; i<9; i++){
1776 if(i == 4) {zPosBarsR = zPosBarsR + (DeltaRing-(15.7/2.)*mm);}
1777 else {zPosBarsR = zPosBarsR + DeltaRing;}
1781 if(i == 8) {zPosBarsL = zPosBarsL - (DeltaRing-(15.7/2.)*mm);}
1782 else{zPosBarsL = zPosBarsL - DeltaRing;}
1786 ssphysiBar.str(
""); ssphysiBarshort.str(
"");
1787 ssphysiBar <<
"lv_BarT2_physi";
1789 ssphysiBarshort <<
"lv_BarshortT2_physi";
1790 ssphysiBarshort << kshort;
1791 sphysiBar = ssphysiBar.str();
1792 sphysiBarshort = ssphysiBarshort.str();
1794 G4ThreeVector posbars = G4ThreeVector(xPosBars, yPosBarstest, zPosBars);
1796 new G4PVPlacement(0,
1807 new G4PVPlacement(0,
1822 G4Tubs* RingGem3 =
new G4Tubs(
"RingGem3",ring3_rmin, ring3_rmax, ring_hz, ring_phimin, ring_phimax);
1823 G4LogicalVolume* logicRing3 =
new G4LogicalVolume(RingGem3,m_M_Peek,
"RingGem3");
1824 G4VPhysicalVolume *lv_RingI_physi;
1826 for (G4int i=0;i<4;i++) {
1828 zPosRingR = DeltaRing/2.;
1829 zPosRingL = -DeltaRing/2.;
1832 zPosRingR = zPosRingR+DeltaRing;
1833 zPosRingL = zPosRingL-DeltaRing;
1835 ssphysiRingR.str(
"");
1836 ssphysiRingR <<
"lv_RingI_physi";
1837 ssphysiRingR << i+4;
1838 sphysiRingR = ssphysiRingR.str();
1839 ssphysiRingL.str(
"");
1840 ssphysiRingL <<
"lv_RingI_physi";
1842 sphysiRingL = ssphysiRingL.str();
1844 new G4PVPlacement(0,
1845 G4ThreeVector(0.,0.,zPosRingR),
1852 new G4PVPlacement(0,
1853 G4ThreeVector(0.,0.,zPosRingL),
1863 bars_y = 1.75/2.*mm;
1864 G4Box* bars3 =
new G4Box(
"bars3",bars_x, bars_y, bars_z);
1865 G4LogicalVolume* logicBars3 =
new G4LogicalVolume(bars3,
1868 G4Box* bars_short3 =
new G4Box(
"bars_short3",bars_x, bars_y, bars_zshort);
1869 G4LogicalVolume* logicBars_short3 =
new G4LogicalVolume(bars_short3,
1872 G4VPhysicalVolume *lv_BarI_physi;
1873 G4VPhysicalVolume *lv_BarshortI_physi;
1879 yPosBars = ring3_rmin+bars_y;
1880 yPosBarstest = 0*mm;
1881 for(G4int j = 0; j<12; j++){
1882 xPosBars = yPosBars*
sin((theta3+j*30.)*deg);
1883 G4RotationMatrix* rm =
new G4RotationMatrix();
1884 rm->rotateZ((theta3+j*30.)*deg);
1885 if(j==0 && theta3==0){
1886 yPosBarstest = yPosBars;
1889 yPosBarstest = yPosBars*
cos((theta3+j*30.)*deg);
1892 for(G4int i = 0; i<9; i++){
1900 if(i == 4) {zPosBarsR = zPosBarsR + (DeltaRing-(15.7/2.)*mm);}
1901 else {zPosBarsR = zPosBarsR + DeltaRing;}
1905 if(i == 8) {zPosBarsL = zPosBarsL - (DeltaRing-(15.7/2.)*mm);}
1906 else{zPosBarsL = zPosBarsL - DeltaRing;}
1910 ssphysiBar.str(
""); ssphysiBarshort.str(
"");
1911 ssphysiBar <<
"lv_BarI_physi";
1913 ssphysiBarshort <<
"lv_BarshortI_physi";
1914 ssphysiBarshort << kshort;
1915 sphysiBar = ssphysiBar.str();
1916 sphysiBarshort = ssphysiBarshort.str();
1918 G4ThreeVector posbars = G4ThreeVector(xPosBars, yPosBarstest, zPosBars);
1920 new G4PVPlacement(0,
1931 new G4PVPlacement(0,
1953 lvd_R_i = lv_CgemSeparator->
getInnerR()*mm;
1954 lvd_R_o = lv_CgemSeparator->
getOuterR()*mm;
1955 lvd_L_z = lv_CgemSeparator->
getLength()*mm;
1957 G4Tubs *lv_Separator_solid =
1958 new G4Tubs(
"Separator_solid", lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
1961 G4Tubs *lv_Separator_solid_Al1 =
1962 new G4Tubs(
"Separator_solid_Al1", lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
1965 G4Tubs *lv_Separator_solid_CarFib =
1966 new G4Tubs(
"Separator_solid_CarFib", lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
1969 G4Tubs *lv_Separator_solid_Al2 =
1970 new G4Tubs(
"Separator_solid_Al2", lvd_R_i, lvd_R_o, lvd_L_z/2., lvd_A_s, lvd_A_d);
1992 G4LogicalVolume *lv_Separator_logic =
1993 new G4LogicalVolume(lv_Separator_solid, m_M_Air,
"Separator_logic");
1994 G4LogicalVolume *lv_Separator_logic_Al1 =
1995 new G4LogicalVolume(lv_Separator_solid_Al1, m_M_Aluminum,
"Separator_logic_Al1");
1996 G4LogicalVolume *lv_Separator_logic_CarFib =
1997 new G4LogicalVolume(lv_Separator_solid_CarFib, m_M_CarbonFiber,
"Separator_logic_CarFib");
1998 G4LogicalVolume *lv_Separator_logic_Al2 =
1999 new G4LogicalVolume(lv_Separator_solid_Al2, m_M_Aluminum,
"Separator_logic_Al2");
2001 G4VPhysicalVolume *lv_Separator_physi =
2002 new G4PVPlacement(lv_rotation, lv_3vector, lv_Separator_logic,
"Separator_physi",
2003 lv_Cgem_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
2004 G4VPhysicalVolume *lv_Separator_physi_Al1 =
2005 new G4PVPlacement(lv_rotation, lv_3vector, lv_Separator_logic_Al1,
"Separator_physi_Al1",
2006 lv_Separator_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
2007 G4VPhysicalVolume *lv_Separator_physi_CarFib =
2008 new G4PVPlacement(lv_rotation, lv_3vector, lv_Separator_logic_CarFib,
"Separator_physi_CarFib",
2009 lv_Separator_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
2010 G4VPhysicalVolume *lv_Separator_physi_Al2 =
2011 new G4PVPlacement(lv_rotation, lv_3vector, lv_Separator_logic_Al2,
"Separator_physi_Al2",
2012 lv_Separator_logic, lv_boolen, lv_copyNo, m_CheckOverlaps);
2014 return lv_Cgem_logic;
2017void BesCgemConstruction::ConstructPassiveElements(G4LogicalVolume* logicCgem)
2023 Gaudi::svcLocator() -> service(
"MessageSvc",
msgSvc);
2024 MsgStream log(
msgSvc,
"BesCgemConstruction::ConstructPassiveElements()");
2025 log<< MSG::INFO <<
"===========================================" << endreq;
2026 log<< MSG::INFO <<
"BesCgemConstruction::ConstructPassiveElements(), Begin to construct CGEM passives!" << endreq;
2029 G4VisAttributes *lv_white =
new G4VisAttributes(G4Colour::White());
2030 G4VisAttributes *lv_yellow =
new G4VisAttributes(G4Colour::Yellow());
2031 G4VisAttributes *lv_cyan =
new G4VisAttributes(G4Colour::Cyan());
2032 G4bool lv_boolen =
false;
2033 G4int lv_copyNo = 0;
2040 double displ_as_L2_1 = 64;
2041 double displ_as_L3_4 = 83;
2042 double displ_ef_1 = 171;
2046 double as_L1_1_rin = 71.;
2047 double as_L1_2_rin = 90.1;
2048 double as_L1_3_rin = 96.;
2049 double as_L1_4_rin = 71.;
2051 double as_L1_1_rout = 90.1;
2052 double as_L1_2_rout = 112.;
2053 double as_L1_3_rout = 112.;
2054 double as_L1_4_rout = 88.;
2056 double as_L1_1_thick = 34;
2057 double as_L1_2_thick = 48;
2058 double as_L1_3_thick = 32.5;
2059 double as_L1_4_thick = 45;
2062 double as_L2_1_rin = 113.5;
2063 double as_L2_2_rin = 132.5;
2064 double as_L2_3_rin = 139.5;
2065 double as_L2_4_rin = 113.5;
2066 double as_L2_5_0_rin = 132.5;
2067 double as_L2_5_1_rin = 132.5;
2069 double as_L2_1_rout = 132.5;
2070 double as_L2_2_rout = 154.5;
2071 double as_L2_3_rout = 154.5;
2072 double as_L2_4_rout = 130.5;
2073 double as_L2_5_0_rout = 152.6;
2074 double as_L2_5_1_rout = 154.5;
2076 double as_L2_1_thick = 34;
2077 double as_L2_2_thick = 43;
2078 double as_L2_3_thick = 34;
2079 double as_L2_4_thick = 33;
2080 double as_L2_5_thick = 5;
2083 double as_L3_1_rin = 156.;
2084 double as_L3_2_rin = 154.5;
2085 double as_L3_3_rin = 175.;
2086 double as_L3_4_0_rin = 156.;
2087 double as_L3_4_1_rin = 156.;
2088 double as_L3_5_0_rin = 175.;
2089 double as_L3_5_1_rin = 175.;
2091 double as_L3_1_rout = 175.;
2092 double as_L3_2_rout = 162.1;
2093 double as_L3_3_rout = 180.7;
2094 double as_L3_4_0_rout = 170.96;
2095 double as_L3_4_1_rout = 175.;
2096 double as_L3_5_0_rout = 176.;
2097 double as_L3_5_1_rout = 180.7;
2099 double as_L3_1_thick = 21;
2100 double as_L3_2_thick = 28;
2101 double as_L3_3_thick = 34.5;
2102 double as_L3_4_thick = 10;
2103 double as_L3_5_thick = 14.5;
2106 double cfo_1_rin = 65.5;
2107 double cfo_1_rout = 71.;
2108 double cfo_2_rin = cfo_1_rin;
2109 double cfo_2_rout = 85.;
2111 double cfo_brick_2_x = 40.5;
2112 double cfo_brick_2_y = 13;
2113 double cfo_brick_2_z = 12;
2115 double cfo_brick_1_rin = cfo_2_rout;
2116 double cfo_brick_1_rout = cfo_2_rout + as_L2_4_rin - cfo_2_rout;
2117 double cfo_brick_1_thick = 10;
2118 double cfo_rad = (cfo_2_rout + 0.5 * (cfo_brick_1_rout - cfo_brick_1_rin)) *CLHEP::mm;
2119 double cfo_phi = cfo_brick_2_y/cfo_rad;
2124 double sep_rin = lv_CgemSeparator->
getInnerR()*mm;
2125 double sep_rout = lv_CgemSeparator->
getOuterR()*mm;
2126 double sep_len = lv_CgemSeparator->
getLength()*mm;
2129 double ef_1_rin = 159.;
2130 double ef_2_rin = 174.5;
2132 double ef_1_rout = 186.5;
2133 double ef_2_rout = ef_1_rout;
2135 double ef_1_thick = 12;
2136 double ef_2_thick = 35;
2139 double ef_1_a_rin = ef_1_rin;
2140 double ef_2_a_rin = ef_2_rin;
2142 double ef_1_a_rout = sep_rin;
2143 double ef_2_a_rout = sep_rin;
2145 double ef_1_a_thick = ef_1_thick;
2146 double ef_2_a_thick = ef_2_thick;
2149 double ef_3_rin = sep_rout;
2150 double ef_4_rin = sep_rin;
2152 double ef_3_rout = ef_1_rout;
2153 double ef_4_rout = sep_rout;
2155 double ef_3_thick = ef_1_thick + ef_2_thick;
2156 double ef_4_thick = ef_3_thick - (0.5 * sep_len - (zref + displ_ef_1) + 0.5 * ef_1_thick);
2159 double pf_1_rin = 60;
2160 double pf_2_rin = 60;
2161 double pf_3_0_rin = 75.174;
2162 double pf_3_1_rin = 75.174;
2163 double pf_side_0_0_rin = 75.174;
2164 double pf_side_0_1_rin = 115.516;
2165 double pf_side_1_0_rin = pf_side_0_1_rin;
2166 double pf_side_1_1_rin = 132;
2168 double pf_arc_rin = 132;
2170 double pf_1_rout = 90.5;
2171 double pf_2_rout = 75.174;
2172 double pf_3_0_rout = 90.5;
2173 double pf_3_1_rout = 91.657;
2174 double pf_side_0_0_rout = 91.657;
2175 double pf_side_0_1_rout = 132;
2176 double pf_side_1_0_rout = pf_side_0_1_rout;
2177 double pf_side_1_1_rout = 155;
2180 double pf_arc_rout = 155;
2182 double pf_1_thick = 5.7;
2183 double pf_2_thick = 10.3;
2184 double pf_3_thick = 10.3;
2185 double pf_side_0_thick = 23.332;
2186 double pf_side_1_thick = 9.332;
2188 double pf_brick_x = 24;
2189 double pf_brick_y = 36;
2190 double pf_brick_z = 10;
2192 double pf_arc_thick = 9;
2195 double sh_0_rin = 90.5;
2196 double sh_1_rin = 131.78;
2198 double sh_0_rout = 91.5;
2199 double sh_1_rout = 132.78;
2201 double sh_thick = 25.8;
2204 double nwr_1_rin = 159.;
2205 double nwr_2_rin = as_L3_5_1_rout;
2207 double nwr_1_rout = 182.6;
2208 double nwr_2_rout = 182.6;
2210 double nwr_1_thick = 2;
2211 double nwr_2_thick = 15;
2214 double nwr_1_a_rin = nwr_1_rin;
2215 double nwr_1_a_rout = as_L3_5_1_rout;
2216 double nwr_1_a_thick = nwr_1_thick;
2219 double nwr_1_b_rin = as_L3_5_1_rout;
2220 double nwr_1_b_rout = nwr_1_rout;
2221 double nwr_1_b_thick = nwr_1_thick;
2224 double w_brick_x = 40.;
2225 double w_brick_y = 18.;
2226 double w_brick_z = 11.;
2230 double z_as_L1_2_eP = zref;
2231 double z_as_L1_1_eP = z_as_L1_2_eP + 0.5 * as_L1_2_thick - 0.5 * as_L1_1_thick;
2232 double z_as_L1_3_eP = z_as_L1_2_eP + 0.5 * as_L1_2_thick + 0.5 * as_L1_3_thick;
2233 double z_as_L1_4_eP = z_as_L1_2_eP + 0.5 * as_L1_2_thick + 0.5 * as_L1_4_thick;
2242 double z_as_L2_1_eP = zref + displ_as_L2_1;
2243 double z_as_L2_2_eP = z_as_L2_1_eP + 0.5 * as_L2_1_thick - 0.5 * as_L2_2_thick;
2244 double z_as_L2_3_eP = z_as_L2_2_eP + 0.5 * as_L2_2_thick + 0.5 * as_L2_3_thick;
2245 double z_as_L2_4_eP = z_as_L2_1_eP + 0.5 * as_L2_1_thick + 0.5 * as_L2_4_thick;
2246 double z_as_L2_5_eP = z_as_L2_2_eP - 0.5 * as_L2_2_thick - 0.5 * as_L2_5_thick;
2255 double z_as_L3_4_eP = zref + displ_as_L3_4;
2256 double z_as_L3_1_eP = z_as_L3_4_eP + 0.5 * as_L3_4_thick + 0.5 * as_L3_1_thick;
2257 double z_as_L3_2_eP = z_as_L3_1_eP + 0.5 * as_L3_1_thick + 0.5 * as_L3_2_thick;
2258 double z_as_L3_5_eP = z_as_L3_4_eP + 0.5 * as_L3_4_thick + 0.5 * as_L3_5_thick;
2259 double z_as_L3_3_eP = z_as_L3_5_eP + 0.5 * as_L3_5_thick + 0.5 * as_L3_3_thick;
2268 double z_cfo_1_eP = 427.;
2269 double z_cfo_2_eP = 473.;
2271 double z_ef_1_eP = zref + displ_ef_1;
2272 double z_ef_1_a_eP = z_ef_1_eP;
2273 double z_ef_2_a_eP = z_ef_1_eP + 0.5 * (ef_1_a_thick + ef_2_a_thick);
2274 double z_ef_3_eP = z_ef_1_a_eP - 0.5* ef_1_a_thick + 0.5 * ef_3_thick;
2275 double z_ef_4_eP = z_ef_3_eP + 0.5 * ef_3_thick - 0.5 * ef_4_thick;
2277 double z_pf_1_eP = 486.85;
2278 double z_pf_2_eP = 494.85;
2279 double z_pf_3_eP = 494.85;
2280 double z_pf_side_0_eP = 511.666;
2281 double z_pf_side_1_eP = z_pf_side_0_eP + 0.5 * (pf_side_0_thick + pf_side_1_thick);
2283 double z_pf_arc_eP = 527.832;
2284 double z_pf_brick_eP = z_ef_1_eP + 0.5 * (ef_1_thick + pf_brick_z);
2286 double z_sh_eP = 502.6;
2288 double z_cbe_brick_eP = 479.5;
2291 double zref_w = zref;
2292 double z_nwr_1_wP = 522.;
2293 double z_nwr_2_wP = zref + displ_ef_1 - 0.5 * ef_1_thick - 0.5*nwr_2_thick;
2295 double z_w_brick_wP = 479.5;
2298 double cable_1_rin = as_L1_1_rin;
2299 double cable_2_0_rin = cfo_1_rin;
2300 double cable_2_1_rin = cable_2_0_rin;
2301 double cable_3_rin = cable_2_0_rin;
2302 double cable_4_0_rin = cable_2_0_rin;
2303 double cable_4_1_rin = cable_2_0_rin;
2304 double cable_5_0_rin = cable_2_0_rin;
2305 double cable_5_1_rin = cable_2_0_rin;
2306 double cable_6_rin = cable_2_0_rin;
2307 double cable_7_rin = pf_1_rin;
2308 double cable_8_rin = cable_7_rin;
2310 double cable_1_rout = as_L1_2_rout;
2311 double cable_2_0_rout = as_L2_5_0_rout;
2312 double cable_2_1_rout = as_L2_5_1_rout;
2313 double cable_3_rout = cable_2_1_rout;
2314 double cable_4_0_rout = as_L3_4_0_rout;
2315 double cable_4_1_rout = as_L3_4_1_rout;
2316 double cable_5_0_rout = as_L3_5_0_rout;
2317 double cable_5_1_rout = as_L3_5_1_rout;
2318 double cable_6_rout = cable_5_1_rout;
2319 double cable_7_rout = cable_5_1_rout;
2320 double cable_8_rout = sep_rin;
2349 double z_limit_1 = zref - 0.5 * as_L1_2_thick;
2350 double z_limit_2 = zref + displ_as_L2_1 + 0.5 * as_L2_1_thick - as_L2_2_thick - as_L2_5_thick;
2351 double z_limit_3 = z_limit_2 + as_L2_5_thick;
2352 double z_limit_4 = zref + displ_as_L3_4 - 0.5 * as_L3_4_thick;
2353 double z_limit_5 = z_limit_4 + as_L3_4_thick;
2354 double z_limit_6 = z_limit_5 + as_L3_5_thick;
2355 double z_limit_7 = 484;
2356 double z_limit_8 = zref + displ_ef_1 - 0.5 * ef_1_thick;
2357 double z_limit_9 = z_limit_8 + ef_1_thick + ef_2_thick;
2359 double z_limit_min = z_limit_1;
2360 double z_limit_max = z_limit_9;
2362 double cable_1_thick = z_limit_2 - z_limit_1;
2363 double cable_2_thick = z_limit_3 - z_limit_2;
2364 double cable_3_thick = z_limit_4 - z_limit_3;
2365 double cable_4_thick = z_limit_5 - z_limit_4;
2366 double cable_5_thick = z_limit_6 - z_limit_5;
2367 double cable_6_thick = z_limit_7 - z_limit_6;
2368 double cable_7_thick = z_limit_8 - z_limit_7;
2369 double cable_8_thick = z_limit_9 - z_limit_8;
2371 double angle2pi = CLHEP::twopi *CLHEP::rad;
2373 G4Tubs* cable_1 =
new G4Tubs(
"cable_1", cable_1_rin *CLHEP::mm, cable_1_rout *CLHEP::mm,
2374 0.5 * cable_1_thick *CLHEP::mm, 0, angle2pi);
2375 G4Cons* cable_2 =
new G4Cons(
"cable_2", cable_2_0_rin *CLHEP::mm, cable_2_0_rout *CLHEP::mm,
2376 cable_2_1_rin *CLHEP::mm, cable_2_1_rout *CLHEP::mm,
2377 0.5 * cable_2_thick *CLHEP::mm, 0, angle2pi);
2378 G4Tubs* cable_3 =
new G4Tubs(
"cable_3", cable_3_rin *CLHEP::mm, cable_3_rout *CLHEP::mm,
2379 0.5 * cable_3_thick *CLHEP::mm, 0, angle2pi);
2380 G4Cons* cable_4 =
new G4Cons(
"cable_4", cable_4_0_rin *CLHEP::mm, cable_4_0_rout *CLHEP::mm,
2381 cable_4_1_rin *CLHEP::mm, cable_4_1_rout *CLHEP::mm,
2382 0.5 * cable_4_thick *CLHEP::mm, 0, angle2pi);
2383 G4Cons* cable_5 =
new G4Cons(
"cable_5", cable_5_0_rin *CLHEP::mm, cable_5_0_rout *CLHEP::mm,
2384 cable_5_1_rin *CLHEP::mm, cable_5_1_rout *CLHEP::mm,
2385 0.5 * cable_5_thick *CLHEP::mm, 0, angle2pi);
2386 G4Tubs* cable_6 =
new G4Tubs(
"cable_6", cable_6_rin *CLHEP::mm, cable_6_rout *CLHEP::mm,
2387 0.5 * cable_6_thick *CLHEP::mm, 0, angle2pi);
2388 G4Tubs* cable_7 =
new G4Tubs(
"cable_7", cable_7_rin *CLHEP::mm, cable_7_rout *CLHEP::mm,
2389 0.5 * cable_7_thick *CLHEP::mm, 0, angle2pi);
2390 G4Tubs* cable_8 =
new G4Tubs(
"cable_8", cable_8_rin *CLHEP::mm, cable_8_rout *CLHEP::mm,
2391 0.5 * cable_8_thick *CLHEP::mm, 0, angle2pi);
2416 double z_shift = -0.5*(cable_1_thick - as_L1_2_thick);
2419 G4Material* cable_copper = G4NistManager::Instance()->FindOrBuildMaterial(
"G4_Cu");
2420 G4Material* cable_plastic = G4NistManager::Instance()->FindOrBuildMaterial(
"G4_POLYETHYLENE");
2422 G4Material *cable_material =
new G4Material(
"cable_material", cable_density, 1);
2423 cable_material->AddMaterial(cable_copper, 1);
2434 G4RotationMatrix cable_rot;
2435 G4ThreeVector cable_tr(0, 0, 0.5* (cable_1_thick + cable_2_thick) *CLHEP::mm);
2437 G4Transform3D cable_tr12(cable_rot, cable_tr);
2438 G4UnionSolid *cable_12 =
new G4UnionSolid(
"cable_12", cable_1, cable_2, cable_tr12);
2440 cable_tr.set(0, 0, (0.5* (cable_1_thick + cable_3_thick) + cable_2_thick) * CLHEP::mm);
2441 G4Transform3D cable_tr123(cable_rot, cable_tr);
2442 G4UnionSolid *cable_123 =
new G4UnionSolid(
"cable_123", cable_12, cable_3, cable_tr123);
2444 cable_tr.set(0, 0, (0.5* (cable_1_thick + cable_4_thick) + cable_3_thick + cable_2_thick) * CLHEP::mm);
2445 G4Transform3D cable_tr1234(cable_rot, cable_tr);
2446 G4UnionSolid *cable_1234 =
new G4UnionSolid(
"cable_1234", cable_123, cable_4, cable_tr1234);
2448 cable_tr.set(0, 0, (0.5* (cable_1_thick + cable_5_thick) + cable_4_thick + cable_3_thick + cable_2_thick) * CLHEP::mm);
2449 G4Transform3D cable_tr12345(cable_rot, cable_tr);
2450 G4UnionSolid *cable_12345 =
new G4UnionSolid(
"cable_12345", cable_1234, cable_5, cable_tr12345);
2452 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);
2453 G4Transform3D cable_tr123456(cable_rot, cable_tr);
2454 G4UnionSolid *cable_123456 =
new G4UnionSolid(
"cable_123456", cable_12345, cable_6, cable_tr123456);
2456 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);
2457 G4Transform3D cable_tr1234567(cable_rot, cable_tr);
2458 G4UnionSolid *cable_1234567 =
new G4UnionSolid(
"cable_1234567", cable_123456, cable_7, cable_tr1234567);
2460 cable_tr.set(0, 0, (0.5* (cable_1_thick + cable_8_thick) +
2461 cable_7_thick + cable_6_thick + cable_5_thick + cable_4_thick + cable_3_thick + cable_2_thick) * CLHEP::mm);
2462 G4Transform3D cable_tr12345678(cable_rot, cable_tr);
2463 G4UnionSolid *cable_12345678 =
new G4UnionSolid(
"cable_12345678", cable_1234567, cable_8, cable_tr12345678);
2468 G4LogicalVolume* cable_e_L =
new G4LogicalVolume(cable_12345678, cable_material,
"cable_e_L", 0, 0, 0);
2470 G4LogicalVolume* cable_w_L =
new G4LogicalVolume(cable_12345678, cable_material,
"cable_w_L", 0, 0, 0);
2472 G4VisAttributes cable_attributes;
2474 cable_attributes.SetColor(G4Color::Magenta());
2475 cable_e_L->SetVisAttributes(cable_attributes);
2476 cable_attributes.SetColor(G4Color::Cyan());
2477 cable_w_L->SetVisAttributes(cable_attributes);
2481 G4Tubs* as_L1_1 =
new G4Tubs(
"as_L1_1", as_L1_1_rin *CLHEP::mm, as_L1_1_rout *CLHEP::mm,
2482 0.5 * as_L1_1_thick *CLHEP::mm, 0, angle2pi);
2483 G4Tubs* as_L1_2 =
new G4Tubs(
"as_L1_2", as_L1_2_rin *CLHEP::mm, as_L1_2_rout *CLHEP::mm,
2484 0.5 * as_L1_2_thick *CLHEP::mm, 0, angle2pi);
2485 G4Tubs* as_L1_3 =
new G4Tubs(
"as_L1_3", as_L1_3_rin *CLHEP::mm, as_L1_3_rout *CLHEP::mm,
2486 0.5 * as_L1_3_thick *CLHEP::mm, 0, angle2pi);
2487 G4Tubs* as_L1_4 =
new G4Tubs(
"as_L1_4", as_L1_4_rin *CLHEP::mm, as_L1_4_rout *CLHEP::mm,
2488 0.5 * as_L1_4_thick *CLHEP::mm, 0, angle2pi);
2491 G4Tubs* as_L2_1 =
new G4Tubs(
"as_L2_1", as_L2_1_rin *CLHEP::mm, as_L2_1_rout *CLHEP::mm,
2492 0.5 * as_L2_1_thick *CLHEP::mm, 0, angle2pi);
2493 G4Tubs* as_L2_2 =
new G4Tubs(
"as_L2_2", as_L2_2_rin *CLHEP::mm, as_L2_2_rout *CLHEP::mm,
2494 0.5 * as_L2_2_thick *CLHEP::mm, 0, angle2pi);
2495 G4Tubs* as_L2_3 =
new G4Tubs(
"as_L2_3", as_L2_3_rin *CLHEP::mm, as_L2_3_rout *CLHEP::mm,
2496 0.5 * as_L2_3_thick *CLHEP::mm, 0, angle2pi);
2497 G4Tubs* as_L2_4 =
new G4Tubs(
"as_L2_4", as_L2_4_rin *CLHEP::mm, as_L2_4_rout *CLHEP::mm,
2498 0.5 * as_L2_4_thick *CLHEP::mm, 0, angle2pi);
2499 G4Cons* as_L2_5 =
new G4Cons(
"as_L2_5", as_L2_5_0_rin *CLHEP::mm, as_L2_5_0_rout *CLHEP::mm,
2500 as_L2_5_1_rin *CLHEP::mm, as_L2_5_1_rout *CLHEP::mm,
2501 0.5 * as_L2_5_thick *CLHEP::mm, 0, angle2pi);
2503 G4Tubs* as_L3_1 =
new G4Tubs(
"as_L3_1", as_L3_1_rin *CLHEP::mm, as_L3_1_rout *CLHEP::mm,
2504 0.5 * as_L3_1_thick *CLHEP::mm, 0, angle2pi);
2505 G4Tubs* as_L3_2 =
new G4Tubs(
"as_L3_2", as_L3_2_rin *CLHEP::mm, as_L3_2_rout *CLHEP::mm,
2506 0.5 * as_L3_2_thick *CLHEP::mm, 0, angle2pi);
2507 G4Tubs* as_L3_3 =
new G4Tubs(
"as_L3_3", as_L3_3_rin *CLHEP::mm, as_L3_3_rout *CLHEP::mm,
2508 0.5 * as_L3_3_thick *CLHEP::mm, 0, angle2pi);
2509 G4Cons* as_L3_4 =
new G4Cons(
"as_L3_4", as_L3_4_0_rin *CLHEP::mm, as_L3_4_0_rout *CLHEP::mm,
2510 as_L3_4_1_rin *CLHEP::mm, as_L3_4_1_rout *CLHEP::mm,
2511 0.5 * as_L3_4_thick *CLHEP::mm, 0, angle2pi);
2512 G4Cons* as_L3_5 =
new G4Cons(
"as_L3_5", as_L3_5_0_rin *CLHEP::mm, as_L3_5_0_rout *CLHEP::mm,
2513 as_L3_5_1_rin *CLHEP::mm, as_L3_5_1_rout *CLHEP::mm,
2514 0.5 * as_L3_5_thick *CLHEP::mm, 0, angle2pi);
2517 G4Tubs* cfo_1 =
new G4Tubs(
"cfo_1", cfo_1_rin *CLHEP::mm, cfo_1_rout *CLHEP::mm, 0.5*70. *CLHEP::mm, 0, angle2pi);
2518 G4Tubs* cfo_2 =
new G4Tubs(
"cfo_2", cfo_2_rin *CLHEP::mm, cfo_2_rout *CLHEP::mm, 0.5*22. *CLHEP::mm, 0, angle2pi);
2521 G4Tubs* cfo_brick_1 =
new G4Tubs(
"cfo_brick_1", cfo_brick_1_rin *CLHEP::mm, cfo_brick_1_rout *CLHEP::mm,
2522 0.5 * cfo_brick_1_thick *CLHEP::mm, -0.5* cfo_phi * CLHEP::rad, cfo_phi * CLHEP::rad);
2523 G4Box *cfo_brick_2 =
new G4Box(
"cfo_brick_2",
2524 0.5* cfo_brick_2_x *CLHEP::mm,
2525 0.5* cfo_brick_2_y *CLHEP::mm,
2526 0.5* cfo_brick_2_z *CLHEP::mm);
2527 G4ThreeVector cfo_brick_pos_1_2((cfo_2_rout + 0.5* cfo_brick_2_x) *CLHEP::mm,
2529 0.5 * (cfo_brick_2_z + cfo_brick_1_thick) *CLHEP::mm);
2530 G4Transform3D cfo_transform(G4RotationMatrix(), cfo_brick_pos_1_2);
2531 G4UnionSolid *cfo_brick =
new G4UnionSolid(
"cfo_brick", cfo_brick_1, cfo_brick_2, cfo_transform);
2534 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);
2535 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);
2536 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);
2537 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);
2540 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);
2541 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);
2542 G4Cons* pf_3 =
new G4Cons(
"pf_3",
2543 pf_3_0_rin *CLHEP::mm, pf_3_0_rout *CLHEP::mm,
2544 pf_3_1_rin *CLHEP::mm, pf_3_1_rout *CLHEP::mm,
2545 0.5 * pf_3_thick *CLHEP::mm, 0, angle2pi);
2547 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);
2549 double pf_arc_dphi = 74.33;
2550 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);
2553 double pf_side_0_l = 84 *CLHEP::mm;
2554 double pf_side_0_R = 132. *CLHEP::mm;
2555 double pf_side_0_dphi = pf_side_0_l/pf_side_0_R;
2556 G4Cons* pf_side_0 =
new G4Cons(
"pf_side_0",
2557 pf_side_0_0_rin *CLHEP::mm, pf_side_0_0_rout *CLHEP::mm,
2558 pf_side_0_1_rin *CLHEP::mm, pf_side_0_1_rout *CLHEP::mm,
2559 0.5 * pf_side_0_thick *CLHEP::mm, - 0.5 * pf_side_0_dphi *CLHEP::rad, pf_side_0_dphi *CLHEP::rad);
2560 double pf_side_1_dphi = 90 - pf_arc_dphi;
2561 G4Cons* pf_side_1 =
new G4Cons(
"pf_side_1",
2562 pf_side_1_0_rin *CLHEP::mm, pf_side_1_0_rout *CLHEP::mm,
2563 pf_side_1_1_rin *CLHEP::mm, pf_side_1_1_rout *CLHEP::mm,
2564 0.5 * pf_side_1_thick *CLHEP::mm, -0.5 * pf_side_1_dphi*CLHEP::deg, pf_side_1_dphi*CLHEP::deg);
2568 G4Cons* sh =
new G4Cons(
"sh",
2569 sh_0_rin *CLHEP::mm, sh_0_rout *CLHEP::mm,
2570 sh_1_rin *CLHEP::mm, sh_1_rout *CLHEP::mm,
2571 0.5 * sh_thick *CLHEP::mm, 0, angle2pi);
2574 G4Box *cbe_brick =
new G4Box(
"cbe_brick", 0.5* 38.5*CLHEP::mm, 0.5* 18.*CLHEP::mm, 0.5* 13*CLHEP::mm);
2579 G4LogicalVolume* as_L1_1_L =
new G4LogicalVolume(as_L1_1, m_M_Permaglas,
"as_L1_1_L", 0, 0, 0);
2580 G4LogicalVolume* as_L1_2_L =
new G4LogicalVolume(as_L1_2, m_M_Permaglas,
"as_L1_2_L", 0, 0, 0);
2581 G4LogicalVolume* as_L1_3_L =
new G4LogicalVolume(as_L1_3, m_M_Permaglas,
"as_L1_3_L", 0, 0, 0);
2582 G4LogicalVolume* as_L1_4_L =
new G4LogicalVolume(as_L1_4, m_M_Permaglas,
"as_L1_4_L", 0, 0, 0);
2584 G4LogicalVolume* as_L2_1_L =
new G4LogicalVolume(as_L2_1, m_M_Permaglas,
"as_L2_1_L", 0, 0, 0);
2585 G4LogicalVolume* as_L2_2_L =
new G4LogicalVolume(as_L2_2, m_M_Permaglas,
"as_L2_2_L", 0, 0, 0);
2586 G4LogicalVolume* as_L2_3_L =
new G4LogicalVolume(as_L2_3, m_M_Permaglas,
"as_L2_3_L", 0, 0, 0);
2587 G4LogicalVolume* as_L2_4_L =
new G4LogicalVolume(as_L2_4, m_M_Permaglas,
"as_L2_4_L", 0, 0, 0);
2588 G4LogicalVolume* as_L2_5_L =
new G4LogicalVolume(as_L2_5, m_M_Permaglas,
"as_L2_5_L", 0, 0, 0);
2590 G4LogicalVolume* as_L3_1_L =
new G4LogicalVolume(as_L3_1, m_M_Permaglas,
"as_L3_1_L", 0, 0, 0);
2591 G4LogicalVolume* as_L3_2_L =
new G4LogicalVolume(as_L3_2, m_M_Permaglas,
"as_L3_2_L", 0, 0, 0);
2592 G4LogicalVolume* as_L3_3_L =
new G4LogicalVolume(as_L3_3, m_M_Permaglas,
"as_L3_3_L", 0, 0, 0);
2593 G4LogicalVolume* as_L3_4_L =
new G4LogicalVolume(as_L3_4, m_M_Permaglas,
"as_L3_4_L", 0, 0, 0);
2594 G4LogicalVolume* as_L3_5_L =
new G4LogicalVolume(as_L3_5, m_M_Permaglas,
"as_L3_5_L", 0, 0, 0);
2596 G4LogicalVolume* cfo_1_L =
new G4LogicalVolume(cfo_1, m_M_Permaglas,
"cfo_1_L", 0, 0, 0);
2597 G4LogicalVolume* cfo_2_L =
new G4LogicalVolume(cfo_2, m_M_Permaglas,
"cfo_2_L", 0, 0, 0);
2598 G4LogicalVolume* cfo_brick_L =
new G4LogicalVolume(cfo_brick, m_M_Permaglas,
"cfo_brick_L", 0, 0, 0);
2600 G4LogicalVolume* ef_1_a_L =
new G4LogicalVolume(ef_1_a, m_M_Aluminum,
"ef_1_a_L", 0, 0, 0);
2601 G4LogicalVolume* ef_2_a_L =
new G4LogicalVolume(ef_2_a, m_M_Aluminum,
"ef_2_a_L", 0, 0, 0);
2602 G4LogicalVolume* ef_3_L =
new G4LogicalVolume(ef_3, m_M_Aluminum,
"ef_3_L", 0, 0, 0);
2603 G4LogicalVolume* ef_4_L =
new G4LogicalVolume(ef_4, m_M_Aluminum,
"ef_4_L", 0, 0, 0);
2605 G4LogicalVolume* pf_1_L =
new G4LogicalVolume(pf_1, m_M_Permaglas,
"pf_1_L", 0, 0, 0);
2606 G4LogicalVolume* pf_2_L =
new G4LogicalVolume(pf_2, m_M_Permaglas,
"pf_2_L", 0, 0, 0);
2607 G4LogicalVolume* pf_3_L =
new G4LogicalVolume(pf_3, m_M_Permaglas,
"pf_3_L", 0, 0, 0);
2608 G4LogicalVolume* pf_arc_L =
new G4LogicalVolume(pf_arc, m_M_Aluminum,
"pf_arc_L", 0, 0, 0);
2609 G4LogicalVolume* pf_brick_L =
new G4LogicalVolume(pf_brick, m_M_Aluminum,
"pf_brick_L", 0, 0, 0);
2610 G4LogicalVolume* pf_side_0_L =
new G4LogicalVolume(pf_side_0, m_M_Permaglas,
"pf_side_0_L", 0, 0, 0);
2611 G4LogicalVolume* pf_side_1_L =
new G4LogicalVolume(pf_side_1, m_M_Permaglas,
"pf_side_1_L", 0, 0, 0);
2613 G4LogicalVolume* sh_L =
new G4LogicalVolume(sh, m_M_Aluminum,
"sh_L", 0, 0, 0);
2615 G4LogicalVolume* cbe_brick_L =
new G4LogicalVolume(cbe_brick, m_M_Permaglas,
"cbe_brick_L", 0, 0, 0);
2618 G4VisAttributes Al_attributes;
2619 Al_attributes.SetForceSolid(
true);
2620 Al_attributes.SetColor(G4Color::Grey());
2621 as_L1_1_L->SetVisAttributes(Al_attributes);
2622 as_L1_2_L->SetVisAttributes(Al_attributes);
2623 as_L1_3_L->SetVisAttributes(Al_attributes);
2625 as_L2_2_L->SetVisAttributes(Al_attributes);
2626 as_L2_3_L->SetVisAttributes(Al_attributes);
2627 as_L2_5_L->SetVisAttributes(Al_attributes);
2629 as_L3_3_L->SetVisAttributes(Al_attributes);
2630 as_L3_5_L->SetVisAttributes(Al_attributes);
2632 ef_1_a_L->SetVisAttributes(Al_attributes);
2633 ef_2_a_L->SetVisAttributes(Al_attributes);
2634 ef_3_L->SetVisAttributes(Al_attributes);
2635 ef_4_L->SetVisAttributes(Al_attributes);
2637 pf_arc_L->SetVisAttributes(Al_attributes);
2638 pf_brick_L->SetVisAttributes(Al_attributes);
2640 sh_L->SetVisAttributes(Al_attributes);
2643 G4VisAttributes PER_attributes;
2644 PER_attributes.SetForceSolid(
true);
2645 PER_attributes.SetColor(G4Color::Yellow());
2647 as_L1_4_L->SetVisAttributes(PER_attributes);
2649 as_L2_1_L->SetVisAttributes(PER_attributes);
2650 as_L2_4_L->SetVisAttributes(PER_attributes);
2652 as_L3_1_L->SetVisAttributes(PER_attributes);
2653 as_L3_2_L->SetVisAttributes(PER_attributes);
2654 as_L3_4_L->SetVisAttributes(PER_attributes);
2656 cfo_1_L->SetVisAttributes(PER_attributes);
2657 cfo_2_L->SetVisAttributes(PER_attributes);
2658 cfo_brick_L->SetVisAttributes(PER_attributes);
2659 cbe_brick_L->SetVisAttributes(PER_attributes);
2661 pf_1_L->SetVisAttributes(PER_attributes);
2662 pf_2_L->SetVisAttributes(PER_attributes);
2663 pf_3_L->SetVisAttributes(PER_attributes);
2664 pf_side_0_L->SetVisAttributes(PER_attributes);
2665 pf_side_1_L->SetVisAttributes(PER_attributes);
2724 G4AssemblyVolume *common_supp =
new G4AssemblyVolume();
2726 G4ThreeVector position;
2729 position.set(0, 0, (z_as_L1_1_eP - zref) * CLHEP::mm);
2730 common_supp->AddPlacedVolume(as_L1_1_L, position, 0);
2731 position.set(0, 0, (z_as_L1_2_eP - zref)*CLHEP::mm);
2732 common_supp->AddPlacedVolume(as_L1_2_L, position, 0);
2733 position.set(0, 0, (z_as_L1_3_eP - zref)*CLHEP::mm);
2734 common_supp->AddPlacedVolume(as_L1_3_L, position, 0);
2735 position.set(0, 0, (z_as_L1_4_eP - zref)*CLHEP::mm);
2736 common_supp->AddPlacedVolume(as_L1_4_L, position, 0);
2739 position.set(0, 0, (z_as_L2_1_eP - zref)*CLHEP::mm);
2740 common_supp->AddPlacedVolume(as_L2_1_L, position, 0);
2741 position.set(0, 0, (z_as_L2_2_eP - zref)*CLHEP::mm);
2742 common_supp->AddPlacedVolume(as_L2_2_L, position, 0);
2743 position.set(0, 0, (z_as_L2_3_eP - zref)*CLHEP::mm);
2744 common_supp->AddPlacedVolume(as_L2_3_L, position, 0);
2745 position.set(0, 0, (z_as_L2_4_eP - zref)*CLHEP::mm);
2746 common_supp->AddPlacedVolume(as_L2_4_L, position, 0);
2747 position.set(0, 0, (z_as_L2_5_eP - zref)*CLHEP::mm);
2748 common_supp->AddPlacedVolume(as_L2_5_L, position, 0);
2752 position.set(0, 0, (z_as_L3_1_eP - zref)*CLHEP::mm);
2753 common_supp->AddPlacedVolume(as_L3_1_L, position, 0);
2754 position.set(0, 0, (z_as_L3_2_eP - zref)*CLHEP::mm);
2755 common_supp->AddPlacedVolume(as_L3_2_L, position, 0);
2756 position.set(0, 0, (z_as_L3_3_eP - zref)*CLHEP::mm);
2757 common_supp->AddPlacedVolume(as_L3_3_L, position, 0);
2758 position.set(0, 0, (z_as_L3_4_eP - zref)*CLHEP::mm);
2759 common_supp->AddPlacedVolume(as_L3_4_L, position, 0);
2760 position.set(0, 0, (z_as_L3_5_eP - zref)*CLHEP::mm);
2761 common_supp->AddPlacedVolume(as_L3_5_L, position, 0);
2765 position.set(0, 0, (z_cfo_1_eP - zref)*CLHEP::mm);
2766 common_supp->AddPlacedVolume(cfo_1_L, position, 0);
2767 position.set(0, 0, (z_cfo_2_eP - zref)*CLHEP::mm);
2768 common_supp->AddPlacedVolume(cfo_2_L, position, 0);
2794 position.set(0, 0, z_ef_1_a_eP - zref);
2795 common_supp->AddPlacedVolume(ef_1_a_L, position, 0);
2796 position.set(0, 0, z_ef_2_a_eP - zref);
2797 common_supp->AddPlacedVolume(ef_2_a_L, position, 0);
2800 position.set(0, 0, z_pf_1_eP - zref);
2801 common_supp->AddPlacedVolume(pf_1_L, position, 0);
2802 position.set(0, 0, z_pf_2_eP - zref);
2803 common_supp->AddPlacedVolume(pf_2_L, position, 0);
2804 position.set(0, 0, z_pf_3_eP - zref);
2805 common_supp->AddPlacedVolume(pf_3_L, position, 0);
2807 position.set(0, 0, z_pf_arc_eP - zref);
2808 common_supp->AddPlacedVolume(pf_arc_L, position, 0);
2810 G4RotationMatrix *pf_arc_2_rot =
new G4RotationMatrix();
2811 pf_arc_2_rot->rotateZ(-90. *CLHEP::deg);
2812 position.set(0, 0, z_pf_arc_eP - zref);
2813 common_supp->AddPlacedVolume(pf_arc_L, position, pf_arc_2_rot);
2815 G4RotationMatrix *pf_arc_3_rot =
new G4RotationMatrix();
2816 pf_arc_3_rot->rotateZ(-180. *CLHEP::deg);
2817 position.set(0, 0, z_pf_arc_eP - zref);
2818 common_supp->AddPlacedVolume(pf_arc_L, position, pf_arc_3_rot);
2820 G4RotationMatrix *pf_arc_4_rot =
new G4RotationMatrix();
2821 pf_arc_4_rot->rotateZ(-270. *CLHEP::deg);
2822 position.set(0, 0, z_pf_arc_eP - zref);
2823 common_supp->AddPlacedVolume(pf_arc_L, position, pf_arc_4_rot);
2825 double pf_angle = 45 *CLHEP::deg;
double pf_rad = pf_side_1_0_rout + 0.5*pf_brick_y;
2826 position.set(pf_rad *
cos(pf_angle), pf_rad *
sin(pf_angle), z_pf_brick_eP - zref);
2827 G4RotationMatrix *pf_brick_1_rot =
new G4RotationMatrix();
2828 pf_brick_1_rot->rotateZ(-pf_angle);
2829 common_supp->AddPlacedVolume(pf_brick_L, position, pf_brick_1_rot);
2831 position.set(pf_rad *
cos(3*pf_angle), pf_rad *
sin(3*pf_angle), z_pf_brick_eP - zref);
2832 G4RotationMatrix *pf_brick_2_rot =
new G4RotationMatrix();
2833 pf_brick_2_rot->rotateZ(pf_angle);
2834 common_supp->AddPlacedVolume(pf_brick_L, position, pf_brick_2_rot);
2836 position.set(pf_rad *
cos(5*pf_angle), pf_rad *
sin(5*pf_angle), z_pf_brick_eP - zref);
2837 G4RotationMatrix *pf_brick_3_rot =
new G4RotationMatrix();
2838 pf_brick_3_rot->rotateZ(3*pf_angle);
2839 common_supp->AddPlacedVolume(pf_brick_L, position, pf_brick_3_rot);
2841 position.set(pf_rad *
cos(7*pf_angle), pf_rad *
sin(7*pf_angle), z_pf_brick_eP - zref);
2842 G4RotationMatrix *pf_brick_4_rot =
new G4RotationMatrix();
2843 pf_brick_4_rot->rotateZ(-3*pf_angle);
2844 common_supp->AddPlacedVolume(pf_brick_L, position, pf_brick_4_rot);
2846 double pf_side_0_angle = 45. *CLHEP::deg;
2848 position.set(0, 0, z_pf_side_0_eP - zref);
2849 G4RotationMatrix * pf_side_0_1_rot =
new G4RotationMatrix();
2850 pf_side_0_1_rot->rotateZ(pf_side_0_angle);
2851 common_supp->AddPlacedVolume(pf_side_0_L, position, pf_side_0_1_rot);
2852 position.set(0, 0, z_pf_side_1_eP - zref);
2853 common_supp->AddPlacedVolume(pf_side_1_L, position, pf_side_0_1_rot);
2855 position.set(0, 0, z_pf_side_0_eP - zref);
2856 G4RotationMatrix * pf_side_0_2_rot =
new G4RotationMatrix();
2857 pf_side_0_2_rot->rotateZ(3*pf_side_0_angle);
2858 common_supp->AddPlacedVolume(pf_side_0_L, position, pf_side_0_2_rot);
2859 position.set(0, 0, z_pf_side_1_eP - zref);
2860 common_supp->AddPlacedVolume(pf_side_1_L, position, pf_side_0_2_rot);
2862 position.set(0, 0, z_pf_side_0_eP - zref);
2863 G4RotationMatrix * pf_side_0_3_rot =
new G4RotationMatrix();
2864 pf_side_0_3_rot->rotateZ(5*pf_side_0_angle);
2865 common_supp->AddPlacedVolume(pf_side_0_L, position, pf_side_0_3_rot);
2866 position.set(0, 0, z_pf_side_1_eP - zref);
2867 common_supp->AddPlacedVolume(pf_side_1_L, position, pf_side_0_3_rot);
2869 position.set(0, 0, z_pf_side_0_eP - zref);
2870 G4RotationMatrix * pf_side_0_4_rot =
new G4RotationMatrix();
2871 pf_side_0_4_rot->rotateZ(7*pf_side_0_angle);
2872 common_supp->AddPlacedVolume(pf_side_0_L, position, pf_side_0_4_rot);
2873 position.set(0, 0, z_pf_side_1_eP - zref);
2874 common_supp->AddPlacedVolume(pf_side_1_L, position, pf_side_0_4_rot);
2881 double cfo_angle = 97 *CLHEP::deg;
2882 G4RotationMatrix *cfo_brick_1_rot =
new G4RotationMatrix();
2883 cfo_brick_1_rot->rotateZ(cfo_angle);
2884 position.set(0, 0, z_cfo_2_eP - zref - 0.5 * cfo_brick_2_z + z_shift);
2885 G4VPhysicalVolume* cfo_brick_1_eP =
new G4PVPlacement(cfo_brick_1_rot, position, cfo_brick_L,
2886 "cfo_brick_1_eP", cable_e_L,
false, 0, m_CheckOverlaps);
2888 cfo_angle = 22.5 *CLHEP::deg;
2889 G4RotationMatrix *cfo_brick_2_rot =
new G4RotationMatrix();
2890 cfo_brick_2_rot->rotateZ(cfo_angle);
2891 G4VPhysicalVolume* cfo_brick_2_eP =
new G4PVPlacement(cfo_brick_2_rot, position, cfo_brick_L,
2892 "cfo_brick_2_eP", cable_e_L,
false, 1, m_CheckOverlaps);
2894 cfo_angle = 276.5 *CLHEP::deg;
2895 G4RotationMatrix *cfo_brick_3_rot =
new G4RotationMatrix();
2896 cfo_brick_3_rot->rotateZ(cfo_angle);
2897 G4VPhysicalVolume* cfo_brick_3_eP =
new G4PVPlacement(cfo_brick_3_rot, position, cfo_brick_L,
2898 "cfo_brick_3_eP", cable_e_L,
false, 2, m_CheckOverlaps);
2900 cfo_angle = 202.5 *CLHEP::deg;
2901 G4RotationMatrix *cfo_brick_4_rot =
new G4RotationMatrix();
2902 cfo_brick_4_rot->rotateZ(cfo_angle);
2903 G4VPhysicalVolume* cfo_brick_4_eP =
new G4PVPlacement(cfo_brick_4_rot, position, cfo_brick_L,
2904 "cfo_brick_4_eP", cable_e_L,
false, 3, m_CheckOverlaps);
2907 double cbe_rangle = 64.3 *CLHEP::deg;
double cbe_angle = 51.4 *CLHEP::deg;
double cbe_rad = 132.5 *CLHEP::mm;
2908 G4RotationMatrix * cbe_brick_1_rot =
new G4RotationMatrix(); cbe_brick_1_rot->rotateZ(-cbe_rangle);
2909 G4VPhysicalVolume* cbe_brick_1_eP =
new G4PVPlacement(cbe_brick_1_rot,
2910 G4ThreeVector(cbe_rad *
cos(cbe_rangle),
2911 cbe_rad *
sin(cbe_rangle),
2912 z_cbe_brick_eP - zref + z_shift),
2913 cbe_brick_L,
"cbe_brick_1_eP", cable_e_L,
false, 1, m_CheckOverlaps);
2914 G4VPhysicalVolume* cbe_brick_4_eP =
new G4PVPlacement(cbe_brick_1_rot,
2915 G4ThreeVector(cbe_rad *
cos(CLHEP::pi+cbe_rangle),
2916 cbe_rad *
sin(CLHEP::pi+cbe_rangle),
2917 z_cbe_brick_eP - zref + z_shift),
2918 cbe_brick_L,
"cbe_brick_4_eP", cable_e_L,
false, 4, m_CheckOverlaps);
2920 cbe_rangle += cbe_angle;
2921 G4RotationMatrix * cbe_brick_2_rot =
new G4RotationMatrix(); cbe_brick_2_rot->rotateZ(-cbe_rangle);
2922 G4VPhysicalVolume* cbe_brick_2_eP =
new G4PVPlacement(cbe_brick_2_rot,
2923 G4ThreeVector(cbe_rad *
cos(cbe_rangle),
2924 cbe_rad *
sin(cbe_rangle),
2925 z_cbe_brick_eP - zref + z_shift),
2926 cbe_brick_L,
"cbe_brick_2_eP", cable_e_L,
false, 2, m_CheckOverlaps);
2927 G4VPhysicalVolume* cbe_brick_5_eP =
new G4PVPlacement(cbe_brick_2_rot,
2928 G4ThreeVector(cbe_rad *
cos(CLHEP::pi+cbe_rangle),
2929 cbe_rad *
sin(CLHEP::pi+cbe_rangle),
2930 z_cbe_brick_eP - zref + z_shift),
2931 cbe_brick_L,
"cbe_brick_5_eP", cable_e_L,
false, 5, m_CheckOverlaps);
2933 cbe_rangle += cbe_angle;
2934 G4RotationMatrix * cbe_brick_3_rot =
new G4RotationMatrix(); cbe_brick_3_rot->rotateZ(-cbe_rangle);
2935 G4VPhysicalVolume* cbe_brick_3_eP =
new G4PVPlacement(cbe_brick_3_rot,
2936 G4ThreeVector(cbe_rad *
cos(cbe_rangle),
2937 cbe_rad *
sin(cbe_rangle),
2938 z_cbe_brick_eP - zref + z_shift),
2939 cbe_brick_L,
"cbe_brick_3_eP", cable_e_L,
false, 3, m_CheckOverlaps);
2940 G4VPhysicalVolume* cbe_brick_6_eP =
new G4PVPlacement(cbe_brick_3_rot,
2941 G4ThreeVector(cbe_rad *
cos(CLHEP::pi+cbe_rangle),
2942 cbe_rad *
sin(CLHEP::pi+cbe_rangle),
2943 z_cbe_brick_eP - zref + z_shift),
2944 cbe_brick_L,
"cbe_brick_6_eP", cable_e_L,
false, 6, m_CheckOverlaps);
2946 double ef_east_thick = 4;
2947 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);
2948 G4LogicalVolume* ef_east_L =
new G4LogicalVolume(ef_east, m_M_Aluminum,
"ef_east_L", 0, 0, 0);
2949 double z_ef_east = z_ef_1_eP + 0.5*ef_1_thick + ef_2_thick+0.5*ef_east_thick;
2950 G4VPhysicalVolume* ef_east_eP =
new G4PVPlacement(0, G4ThreeVector(0., 0., z_ef_east), ef_east_L,
"ef_east_eP", logicCgem,
false, 0, m_CheckOverlaps);
2951 ef_east_L->SetVisAttributes(Al_attributes);
2954 double cfo_w_angle = -55. *CLHEP::deg;
2955 G4RotationMatrix *cfo_w_brick_1_rot =
new G4RotationMatrix();
2956 cfo_w_brick_1_rot->rotateZ(cfo_w_angle);
2957 position.set(0, 0, z_cfo_2_eP - zref - 0.5 * cfo_brick_2_z + z_shift);
2958 G4VPhysicalVolume* cfo_w_brick_1_eP =
new G4PVPlacement(cfo_w_brick_1_rot, position, cfo_brick_L,
2959 "cfo_w_brick_1_eP", cable_w_L,
false, 1, m_CheckOverlaps);
2960 cfo_w_angle = -160 *CLHEP::deg;
2961 G4RotationMatrix *cfo_w_brick_2_rot =
new G4RotationMatrix();
2962 cfo_w_brick_2_rot->rotateZ(cfo_w_angle);
2963 G4VPhysicalVolume* cfo_w_brick_2_eP =
new G4PVPlacement(cfo_w_brick_2_rot, position, cfo_brick_L,
2964 "cfo_w_brick_2_eP", cable_w_L,
false, 2, m_CheckOverlaps);
2965 cfo_w_angle = -235 *CLHEP::deg;
2966 G4RotationMatrix *cfo_w_brick_3_rot =
new G4RotationMatrix();
2967 cfo_w_brick_3_rot->rotateZ(cfo_w_angle);
2968 G4VPhysicalVolume* cfo_w_brick_3_eP =
new G4PVPlacement(cfo_w_brick_3_rot, position, cfo_brick_L,
2969 "cfo_w_brick_3_eP", cable_w_L,
false, 3, m_CheckOverlaps);
2970 cfo_w_angle = -340. *CLHEP::deg;
2971 G4RotationMatrix *cfo_w_brick_4_rot =
new G4RotationMatrix();
2972 cfo_w_brick_4_rot->rotateZ(cfo_w_angle);
2973 G4VPhysicalVolume* cfo_w_brick_4_eP =
new G4PVPlacement(cfo_w_brick_4_rot, position, cfo_brick_L,
2974 "cfo_w_brick_4_eP", cable_w_L,
false, 4, m_CheckOverlaps);
2976 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);
2977 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);
2978 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);
2981 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);
2984 G4LogicalVolume* nwr_1_a_L =
new G4LogicalVolume(nwr_1_a, m_M_Aluminum,
"nwr_1_a_L", 0, 0, 0);
2985 G4LogicalVolume* nwr_1_b_L =
new G4LogicalVolume(nwr_1_b, m_M_Aluminum,
"nwr_1_b_L", 0, 0, 0);
2986 G4LogicalVolume* nwr_2_L =
new G4LogicalVolume(nwr_2, m_M_Aluminum,
"nwr_2_L", 0, 0, 0);
2987 G4LogicalVolume* w_brick_L =
new G4LogicalVolume(w_brick, m_M_Permaglas,
"w_brick_L", 0, 0, 0);
2989 nwr_1_a_L->SetVisAttributes(Al_attributes);
2990 nwr_1_b_L->SetVisAttributes(Al_attributes);
2991 nwr_2_L->SetVisAttributes(Al_attributes);
2992 w_brick_L->SetVisAttributes(PER_attributes);
2995 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);
2997 double w_rangle = 38.6 *CLHEP::deg;
double w_angle = 25.7 *CLHEP::deg;
double w_rad = 133.25 *CLHEP::mm;
2998 G4RotationMatrix * w_brick_1_rot =
new G4RotationMatrix(); w_brick_1_rot->rotateZ(-w_rangle);
2999 G4VPhysicalVolume* w_brick_1_wP =
new G4PVPlacement(w_brick_1_rot,
3000 G4ThreeVector(w_rad *
cos(w_rangle),
3001 w_rad *
sin(w_rangle),
3002 z_w_brick_wP - zref_w + z_shift),
3003 w_brick_L,
"w_brick_1_wP", cable_w_L,
false, 1, m_CheckOverlaps);
3004 G4VPhysicalVolume* w_brick_5_wP =
new G4PVPlacement(w_brick_1_rot,
3005 G4ThreeVector(w_rad *
cos(CLHEP::pi+w_rangle),
3006 w_rad *
sin(CLHEP::pi+w_rangle),
3007 z_w_brick_wP - zref_w + z_shift),
3008 w_brick_L,
"w_brick_5_wP", cable_w_L,
false, 5, m_CheckOverlaps);
3010 w_rangle += w_angle;
3011 G4RotationMatrix * w_brick_2_rot =
new G4RotationMatrix(); w_brick_2_rot->rotateZ(-w_rangle);
3012 G4VPhysicalVolume* w_brick_2_wP =
new G4PVPlacement(w_brick_2_rot,
3013 G4ThreeVector(w_rad *
cos(w_rangle),
3014 w_rad *
sin(w_rangle),
3015 z_w_brick_wP - zref_w + z_shift),
3016 w_brick_L,
"w_brick_2_wP", cable_w_L,
false, 2, m_CheckOverlaps);
3017 G4VPhysicalVolume* w_brick_6_wP =
new G4PVPlacement(w_brick_2_rot,
3018 G4ThreeVector(w_rad *
cos(CLHEP::pi+w_rangle),
3019 w_rad *
sin(CLHEP::pi+w_rangle),
3020 z_w_brick_wP - zref_w + z_shift),
3021 w_brick_L,
"w_brick_6_wP", cable_w_L,
false, 6, m_CheckOverlaps);
3023 w_rangle += w_angle;
3024 G4RotationMatrix * w_brick_3_rot =
new G4RotationMatrix(); w_brick_3_rot->rotateZ(-w_rangle);
3025 G4VPhysicalVolume* w_brick_3_wP =
new G4PVPlacement(w_brick_3_rot,
3026 G4ThreeVector(w_rad *
cos(w_rangle),
3027 w_rad *
sin(w_rangle),
3028 z_w_brick_wP - zref_w + z_shift),
3029 w_brick_L,
"w_brick_3_wP", cable_w_L,
false, 3, m_CheckOverlaps);
3030 G4VPhysicalVolume* w_brick_7_wP =
new G4PVPlacement(w_brick_3_rot,
3031 G4ThreeVector(w_rad *
cos(CLHEP::pi+w_rangle),
3032 w_rad *
sin(CLHEP::pi+w_rangle),
3033 z_w_brick_wP - zref_w + z_shift),
3034 w_brick_L,
"w_brick_7_wP", cable_w_L,
false, 7,m_CheckOverlaps);
3036 w_rangle += w_angle;
3037 G4RotationMatrix * w_brick_4_rot =
new G4RotationMatrix(); w_brick_4_rot->rotateZ(-w_rangle);
3038 G4VPhysicalVolume* w_brick_4_wP =
new G4PVPlacement(w_brick_4_rot,
3039 G4ThreeVector(w_rad *
cos(w_rangle),
3040 w_rad *
sin(w_rangle),
3041 z_w_brick_wP - zref_w + z_shift),
3042 w_brick_L,
"w_brick_4_wP", cable_w_L,
false, 4, m_CheckOverlaps);
3043 G4VPhysicalVolume* w_brick_8_wP =
new G4PVPlacement(w_brick_4_rot,
3044 G4ThreeVector(w_rad *
cos(CLHEP::pi+w_rangle),
3045 w_rad *
sin(CLHEP::pi+w_rangle),
3046 z_w_brick_wP - zref_w + z_shift),
3047 w_brick_L,
"w_brick_8_wP", cable_w_L,
false, 8, m_CheckOverlaps);
3053 G4ThreeVector pos(0, 0, z_shift);
3056 common_supp->MakeImprint(cable_e_L, pos, 0, m_CheckOverlaps);
3057 G4VPhysicalVolume* cable_e_P =
new G4PVPlacement(0, G4ThreeVector(0, 0, zref), cable_e_L,
"cable_e_P", logicCgem, lv_boolen, lv_copyNo, m_CheckOverlaps);
3059 pos.set(0, 0, z_ef_3_eP);
3060 G4VPhysicalVolume* ef_3_eP =
new G4PVPlacement(0, pos, ef_3_L,
"ef_3_eP", logicCgem, 0, 0, m_CheckOverlaps);
3061 pos.set(0, 0, z_ef_4_eP);
3062 G4VPhysicalVolume* ef_4_eP =
new G4PVPlacement(0, pos, ef_4_L,
"ef_4_eP", logicCgem, 0, 0, m_CheckOverlaps);
3077 pos.set(0, 0, z_shift);
3078 common_supp->MakeImprint(cable_w_L, pos, 0, m_CheckOverlaps);
3079 G4RotationMatrix *rot_west =
new G4RotationMatrix();
3080 rot_west->rotateX(180 *CLHEP::deg);
3081 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);
3083 pos.set(0, 0, -z_ef_3_eP);
3084 G4VPhysicalVolume* ef_3_wP =
new G4PVPlacement(rot_west, pos, ef_3_L,
"ef_3_wP", logicCgem, 0, 1, m_CheckOverlaps);
3085 pos.set(0, 0, -z_ef_4_eP);
3086 G4VPhysicalVolume* ef_4_wP =
new G4PVPlacement(rot_west, pos, ef_4_L,
"ef_4_wP", logicCgem, 0, 1, m_CheckOverlaps);
3088 pos.set(0, 0, -(z_nwr_1_wP+z_shift));
3089 G4VPhysicalVolume* nwr_1_b_wP =
new G4PVPlacement(0, pos, nwr_1_b_L,
"nwr_1_b_wP", logicCgem,
false, 0, m_CheckOverlaps);
3090 bool ovl = nwr_1_b_wP->CheckOverlaps();
3093 pos.set(0, 0, -(z_nwr_2_wP+z_shift));
3094 G4VPhysicalVolume* nwr_2_wP =
new G4PVPlacement(rot_west, pos, nwr_2_L,
"nwr_2_wP", logicCgem,
false, 0, m_CheckOverlaps);
3095 ovl= nwr_2_wP->CheckOverlaps();
3100void BesCgemConstruction::ConstructMaterial()
3103 Gaudi::svcLocator() -> service(
"MessageSvc",
msgSvc);
3104 MsgStream log(
msgSvc,
"BesCgemConstruction::ConstructMaterial()");
3105 log<< MSG::INFO <<
"INFO : BesCgemConstruction::ConstructMaterial(), Construct Material needed by Cgem!" << endreq;
3108 G4NistManager *gv_NistManager = G4NistManager::Instance();
3111 m_M_Air = gv_NistManager -> FindOrBuildMaterial(
"G4_AIR");
3114 m_M_Cu = gv_NistManager -> FindOrBuildMaterial(
"G4_Cu");
3117 m_M_Kapton = gv_NistManager -> FindOrBuildMaterial(
"G4_KAPTON");
3123 G4double lvd_density;
3124 G4double lvd_fractionmass;
3141 lvs_name =
"CgemGas";
3142 lvd_density = 0.0017451520*g/cm3;
3144 G4Material *lv_Ar = gv_NistManager->FindOrBuildMaterial(
"G4_Ar");
3145 G4Material *lv_C4H10 = gv_NistManager->FindOrBuildMaterial(
"G4_BUTANE");
3146 m_M_CgemGas =
new G4Material(lvs_name, lvd_density, lvi_element);
3147 m_M_CgemGas -> AddMaterial(lv_Ar , lvd_fractionmass=0.85712247);
3148 m_M_CgemGas -> AddMaterial(lv_C4H10, lvd_fractionmass=0.14287753);
3152 lvd_density = 3.2e-2*g/cm3;
3154 G4Element *
C = G4Element::GetElement(
"Carbon");
3155 G4Element *
H = G4Element::GetElement(
"Hydrogen");
3156 G4Element *O = G4Element::GetElement(
"Oxygen");
3157 G4Element *N = G4Element::GetElement(
"Nitrogen");
3158 m_M_Honeycomb =
new G4Material(lvs_name, lvd_density, lvi_element);
3159 m_M_Honeycomb -> AddElement(
C, lvi_natoms=14);
3160 m_M_Honeycomb -> AddElement(
H, lvi_natoms=22);
3161 m_M_Honeycomb -> AddElement(O, lvi_natoms=2 );
3162 m_M_Honeycomb -> AddElement(N, lvi_natoms=2 );
3165 lvs_name =
"Rohacell31";
3166 lvd_density = 3.e-2*g/cm3;
3172 m_M_Rohacell =
new G4Material(lvs_name, lvd_density, lvi_element);
3173 m_M_Rohacell -> AddElement(
C, lvi_natoms=9);
3174 m_M_Rohacell -> AddElement(
H, lvi_natoms=13);
3175 m_M_Rohacell -> AddElement(O, lvi_natoms=2 );
3176 m_M_Rohacell -> AddElement(N, lvi_natoms=1 );
3180 lvd_density = 1.32*g/cm3;
3182 m_M_Peek =
new G4Material(lvs_name, lvd_density, lvi_element);
3183 m_M_Peek -> AddElement(
C, lvi_natoms=19);
3184 m_M_Peek -> AddElement(
H, lvi_natoms=12);
3185 m_M_Peek -> AddElement(O, lvi_natoms=3);
3189 lvd_density = 1.25*g/cm3;
3191 m_M_Epoxy =
new G4Material(lvs_name, lvd_density, lvi_element);
3192 m_M_Epoxy -> AddElement(
C, lvi_natoms=18);
3193 m_M_Epoxy -> AddElement(
H, lvi_natoms=31);
3194 m_M_Epoxy -> AddElement(O, lvi_natoms=3 );
3197 lvs_name =
"CarbonFiber";
3198 lvd_density = 1.57*g/cm3;
3200 m_M_CarbonFiber =
new G4Material(lvs_name, lvd_density, lvi_element);
3201 m_M_CarbonFiber -> AddElement(
C, 0.697 );
3202 m_M_CarbonFiber -> AddElement(
H, 0.0061);
3203 m_M_CarbonFiber -> AddElement(O, 0.2969);
3213 G4Material* SiO2 = G4NistManager::Instance()->FindOrBuildMaterial(
"G4_SILICON_DIOXIDE");
3214 G4Material* B2O3 = G4NistManager::Instance()->FindOrBuildMaterial(
"G4_BORON_OXIDE");
3215 G4Material* Al2O3 = G4NistManager::Instance()->FindOrBuildMaterial(
"G4_ALUMINUM_OXIDE");
3216 G4Material* CaO = G4NistManager::Instance()->FindOrBuildMaterial(
"G4_CALCIUM_OXIDE");
3218 lvs_name =
"Fiberglass";
3219 lvd_density = 1.99*g/cm3;;
3221 G4Material *m_M_Fiberglass =
new G4Material(lvs_name, lvd_density, lvi_element);
3222 m_M_Fiberglass->AddMaterial(SiO2, 0.6);
3223 m_M_Fiberglass->AddMaterial(B2O3, 0.05);
3224 m_M_Fiberglass->AddMaterial(Al2O3, 0.13);
3225 m_M_Fiberglass->AddMaterial(CaO, 0.22);
3229 lvs_name =
"Permaglas";
3230 lvd_density = 1.97*g/cm3;
3232 m_M_Permaglas =
new G4Material(lvs_name, lvd_density, lvi_element);
3233 m_M_Permaglas->AddMaterial(m_M_Fiberglass, 0.6);
3234 m_M_Permaglas->AddMaterial(m_M_Epoxy, 0.4);
3237 m_M_Aluminum= G4NistManager::Instance()->FindOrBuildMaterial(
"G4_Al");
3243 log<< MSG::INFO <<
"BesCgemConstruction::ConstructMaterial(), check if effective density for HOLES is used : " << m_cgem_geomsvc->
isEffDensityHoles() << endreq;
3244 log<< MSG::INFO <<
"BesCgemConstruction::ConstructMaterial(), check if effective density for STRIPS is used : " << m_cgem_geomsvc->
isEffDensityStrips() << endreq;
3247 G4Material *myCu = G4NistManager::Instance()->FindOrBuildMaterial(
"G4_Cu");
3248 lvs_name =
"G4_Cu_GEMFoils";
3249 lvd_density = 8.960*g/cm3;
3251 lvd_density = 6.44708*g/cm3;
3253 m_M_Cu_GEMFoils =
new G4Material(lvs_name, lvd_density, lvi_element);
3254 m_M_Cu_GEMFoils->AddMaterial(myCu, 1.0);
3256 lvs_name =
"G4_Cu_AnodeStripX";
3257 lvd_density = 8.960*g/cm3;
3259 lvd_density = 7.88*g/cm3;
3261 m_M_Cu_AnodeStripX =
new G4Material(lvs_name, lvd_density, lvi_element);
3262 m_M_Cu_AnodeStripX->AddMaterial(myCu, 1.0);
3264 lvs_name =
"G4_Cu_AnodeStripV";
3265 lvd_density = 8.960*g/cm3;
3267 lvd_density = 1.77*g/cm3;
3269 m_M_Cu_AnodeStripV =
new G4Material(lvs_name, lvd_density, lvi_element);
3270 m_M_Cu_AnodeStripV->AddMaterial(myCu, 1.0);
3272 G4Material *myKapton = G4NistManager::Instance()->FindOrBuildMaterial(
"G4_KAPTON");
3273 lvs_name =
"G4_KAPTON_GEMFoils";
3274 lvd_density = 1.420*g/cm3;
3276 lvd_density = 1.14794*g/cm3;
3278 m_M_Kapton_GEMFoils =
new G4Material(lvs_name, lvd_density, lvi_element);
3279 m_M_Kapton_GEMFoils->AddMaterial(myKapton, 1.0);
3281 lvs_name =
"G4_KAPTON_StripV";
3282 lvd_density = 1.420*g/cm3;
3284 lvd_density = 0.284*g/cm3;
3286 m_M_Kapton_StripV =
new G4Material(lvs_name, lvd_density, lvi_element);
3287 m_M_Kapton_StripV->AddMaterial(myKapton, 1.0);
3303void BesCgemConstruction::Print(G4LogicalVolume* f_LV)
3306 Gaudi::svcLocator() -> service(
"MessageSvc",
msgSvc);
3307 MsgStream log(
msgSvc,
"BesCgemConstruction::Print()");
3308 G4Material *lv_M = f_LV->GetMaterial();
3309 G4Tubs *lv_tub =
dynamic_cast<G4Tubs*
>(f_LV->GetSolid());
3310 G4double lvd_M_Z = 0.;
3311 G4double lvd_M_A = 0.;
3312 for (G4int i = 0; i < lv_M->GetElementVector()->size(); i++)
3314 lvd_M_Z += (lv_M->GetElement(i)->GetZ()) * (lv_M->GetFractionVector()[i]);
3315 lvd_M_A += (lv_M->GetElement(i)->GetA()) * (lv_M->GetFractionVector()[i]);
3317 G4double lvd_ionisation = lv_M->GetIonisation()->GetMeanExcitationEnergy();
3318 G4double lvd_density = lv_M->GetDensity() / (g/cm3);
3319 G4double lvd_X0 = lv_M->GetRadlen() / (mm);
3320 G4double lvd_R_i = lv_tub->GetInnerRadius() / (mm);
3321 G4double lvd_R_o = lv_tub->GetOuterRadius() / (mm);
3322 G4double lvd_L = lv_tub->GetZHalfLength() / (mm) * 2.0;
3324 log<< MSG::INFO <<
"BesCgemConstruction::Print(), Construct Detector Volume : " << f_LV->GetName() << endreq;
3325 log<< MSG::INFO << left << setw(10) <<
"Material "
3326 << left << setw(10) <<
"Z "
3327 << left << setw(10) <<
"A "
3328 << left << setw(11) <<
"Ionisation "
3329 << left << setw(12) <<
"Density "
3330 << left << setw(10) <<
"X0 "
3331 << left << setw(10) <<
"Inner R "
3332 << left << setw(10) <<
"Outer R "
3333 << left << setw(10) <<
"Length" << endreq;
3334 log<< MSG::INFO << left << setw(10) << lv_M->GetName()
3335 << left << setw(10) << lvd_M_Z
3336 << left << setw(10) << lvd_M_A / (g/mole)
3337 << left << setw(11) << lvd_ionisation / eV
3338 << left << setw(12) << lvd_density
3339 << left << setw(10) << lvd_X0
3340 << left << setw(10) << lvd_R_i
3341 << left << setw(10) << lvd_R_o
3342 << left << setw(10) << lvd_L
3344 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 setGeomPtr(CgemGeomSvc *geomSvc)
void SetTiltAngle(double tangle)
void SetAnodeLength(double alength)
void SetSliceLength(double slength)
double getOuterROfCgemFoilCu1() const
double getInnerROfCgemFoilCu2() const
double getOuterR2OfCgemFoilHole() const
double getOuterROfCgemFoilKapton() const
double getInnerROfCgemFoil() const
double getInnerROfCgemFoilHole() const
double getInnerROfCgemFoilCu1() const
double getInnerROfCgemFoilKapton() const
double getOuterROfCgemFoilCu2() const
double getOuterROfCgemFoil() const
double getOuterR1OfCgemFoilHole() const
double getLengthOfCgemFoilHole() const
double getOuterROfAnodeCu1() const
double getInnerROfCathode() const
double getInnerROfAnodeEpoxy4() const
double getInnerROfAnodeEpoxy1() const
CgemGeoFoil * getCgemFoil(int i) const
double getInnerROfCathodeKapton2() const
double getInnerROfCathodeEpoxy0() const
double getWidthOfPitchV() const
double getOuterROfCathodeEpoxy4() const
double getInnerROfGapI() const
double getOuterROfAnodeCarbonf1() const
double getWidthOfStripV() const
double getOuterROfGapD() const
double getInnerROfCathodeKapton3() const
double getInnerROfAnodeHoneycomb() const
double getOuterROfAnodeEpoxy2() const
double getInnerROfGapT1() const
double getInnerROfCathodeCu1() const
double getLengthOfCgemLayer() const
double getOuterROfCathodeEpoxy1() const
double getInnerROfCathodeCu2() const
double getInnerROfCathodeEpoxy2() const
double getInnerROfAnodeKapton6() const
double getOuterROfCathodeKapton1() const
double getOuterROfAnodeHoneycomb() const
double getOuterROfAnodeKapton2() const
double getInnerROfCathodeEpoxy4() const
double getOuterROfAnodeCu4() const
double getOuterROfAnodeKapton1() const
double getOuterROfCathodeCu2() 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 getOuterROfCathodeCarbonf() const
double getOuterROfGapT2() const
double getInnerROfAnodeCu3() const
double getOuterROfAnodeCu3() const
double getInnerROfCathodeEpoxy3() const
double getOuterROfAnodeKapton3() const
double getOuterROfAnode() const
double getOuterROfCathodeCu1() const
double getOuterROfCathodeKapton3() const
double getInnerROfAnodeRohacell1() const
double getOuterROfCathode() const
double getOuterROfAnodeEpoxy1() const
double getInnerROfAnodeEpoxy2() const
double getOuterROfCathodeRohacell1() const
double getOuterROfAnodeEpoxy4() const
double getInnerROfAnodeCu4() const
double getOuterROfAnodeCarbonf2() const
double getOuterROfGapI() const
double getInnerROfAnodeRohacell2() const
double getOuterROfCgemLayer() const
double getInnerROfCathodeCarbonf() const
double getAngleOfStereo() const
double getInnerROfAnodeCarbonf1() 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 getInnerROfAnodeCarbonf2() const
double getInnerROfAnodeKapton5() const
double getOuterROfAnodeEpoxy3() const
double getInnerROfAnodeKapton1() const
double getOuterROfCathodeEpoxy2() const
double getInnerROfAnodeCu2() const
double getOuterROfCathodeHoneycomb() const
double getOuterROfCathodeKapton2() const
double getOuterROfAnodeKapton4() const
double getInnerROfCathodeHoneycomb() const
double getInnerROfCathodeRohacell1() const
double getOuterROfAnodeKapton5() const
double getInnerROfCathodeRohacell2() const
double getOuterROfAnodeRohacell2() const
double getOuterROfAnodeKapton6() const
double getOuterROfCathodeEpoxy0() const
double getThickOfOuterAluminum() const
double getThickOfInnerAluminum() const
double getThickOfCarbonFiber() const
int getNumberOfCgemFoil() const
bool isVStripDescriptionOn() const
bool isXStripDescriptionOn() const
string getMaterialOfAnode(int i) const
bool isEffDensityHoles() const
string getMaterialOfCathode(int i) const
CgemGeoLayer * getCgemLayer(int i) const
double getDensityOfCable() const
double getLengthOfCgem() const
int getNumberOfCgemLayer() const
double getOuterROfCgem() const
double getInnerROfCgem() const
CgemGeoSeparator * getCgemSeparator() const
int getNMaterialsAnode() const
bool isEffDensityStrips() const
int getNMaterialsCathode() const