29 #include "G4Material.hh"
32 #include "G4Polyhedra.hh"
33 #include "G4Sphere.hh"
34 #include "G4Polycone.hh"
36 #include "G4LogicalVolume.hh"
37 #include "G4AssemblyVolume.hh"
39 #include "G4PVPlacement.hh"
40 #include "G4PVParameterised.hh"
41 #include "G4UserLimits.hh"
42 #include "G4VisAttributes.hh"
43 #include "G4Colour.hh"
45 #include "G4SubtractionSolid.hh"
46 #include "G4PhysicalVolumeStore.hh"
47 #include "G4LogicalVolumeStore.hh"
48 #include "G4SDManager.hh"
49 #include "G4UnitsTable.hh"
118 G4VPhysicalVolume *theDetector = 0x0; G4String detname;
121 if ( name ==
"ParisPW" ) {
123 detname = GetDetName(
"ParisPW",version_string);
125 if ( version_string.contains(
"2") ) {
126 if ( version_string ==
"2" ) {
127 theDetector = MakePPW(detname,0.5*CLHEP::mm,0.0*CLHEP::mm,
"");
129 if ( version_string.contains(
"2-bare") ) {
130 theDetector = MakePPW(detname,0.5*CLHEP::mm,0.0*CLHEP::mm,
"bare");
133 if ( version_string.contains(
"3") ) {
134 if ( version_string ==
"3" ) {
135 theDetector = MakePPW(detname,1.0*CLHEP::mm,0.0*CLHEP::mm,
"");
137 if ( version_string.contains(
"3-bare") ) {
138 theDetector = MakePPW(detname,1.0*CLHEP::mm,0.0*CLHEP::mm,
"bare");
142 if ( name ==
"CParisPW" ) {
143 detname = GetDetName(
"CParisPW",version_string);
144 theDetector = MakeCPPW(detname,version_string);
147 if ( name ==
"aChateau2Crystal" ) {
148 detname = GetDetName(
"aChateau2Crystal",version_string);
149 theDetector = MakeCdC(detname,version_string);
153 if ( name.index(
"FATIMA") == 0 ) {
154 if ( name ==
"FATIMAM" ) {
155 detname = GetDetName(
"FATIMAM",version_string);
156 theDetector = MakeFATIMAM(detname,version_string);
158 if ( name ==
"FATIMAQ" ) {
159 detname = GetDetName(
"FATIMAQ",version_string);
160 theDetector = MakeFATIMAQ(detname,version_string);
165 if ( name ==
"EDEN" ) {
166 detname = GetDetName(
"EDEN",version_string);
167 theDetector = MakeEDEN(detname,1.*CLHEP::mm, 10.*CLHEP::cm ,version_string);
176 G4VPhysicalVolume *theDetector = 0x0; G4LogicalVolume *detlogicWorld; G4Box *detWorld; G4bool do_caps =
true;
179 const G4double caps_width = 0.9*CLHEP::mm, teflon_width = 0.1*CLHEP::mm, crystal_radius = 5.0*CLHEP::cm, crystal_depth = 14*CLHEP::cm;
180 const G4int numSide = 6, numZPlanes = 2;
183 G4double inner_crystal_radius = crystal_radius * ::sqrt(3) / 2.;
185 z[] = { caps_width + teflon_width, crystal_depth + caps_width + teflon_width },
186 rInner[] = { 0., 0. },
187 rOuter[] = { inner_crystal_radius, inner_crystal_radius },
189 z_caps_front[] = { 0.0, caps_width + teflon_width },
190 rInner_caps_front[] = { 0., 0.},
191 rOuter_caps_front[] = { inner_crystal_radius, inner_crystal_radius },
193 z_caps[] = { 0., crystal_depth + 2.0*(caps_width + teflon_width) },
194 rInner_caps[] = { inner_crystal_radius, inner_crystal_radius },
195 rOuter_caps[] = { inner_crystal_radius + teflon_width + caps_width, inner_crystal_radius + teflon_width + caps_width };
198 if ( opt ==
"bare" ) {
203 detWorld=
new G4Box(detname,15.*CLHEP::cm,15.*CLHEP::cm,25.*CLHEP::cm);
204 detlogicWorld=
new G4LogicalVolume(detWorld, SToGS::MaterialConsultant::theConsultant()->FindOrBuildMaterial(
"AIR"), detname, 0, 0, 0);
206 detlogicWorld->SetVisAttributes(G4VisAttributes::Invisible);
208 theDetector =
new G4PVPlacement(0,
218 =
new G4Polyhedra(
"ShapeC2CCrys",0.,360.1*CLHEP::deg,numSide,numZPlanes,z,rInner,rOuter);
220 G4LogicalVolume *a_log
221 =
new G4LogicalVolume(a_solid,SToGS::MaterialConsultant::theConsultant()->FindOrBuildMaterial(
"BaF2"),
"C2CCrysLV",0,0,0);
223 G4VisAttributes *visatt =
new G4VisAttributes( G4Colour(0.0, 0.6, 0.0) );
224 visatt->SetVisibility(
true);
225 a_log->SetVisAttributes( visatt );
235 new G4PVPlacement(0,Ta,a_log,
"C2CCrys",detlogicWorld,
false,0);
238 G4VisAttributes *Capsule_visatt;
239 a_solid =
new G4Polyhedra(
"ShapeC2CCapsSide",0.,360.*CLHEP::deg,numSide,numZPlanes,z_caps,rInner_caps,rOuter_caps);
242 =
new G4LogicalVolume(a_solid,SToGS::MaterialConsultant::theConsultant()->FindOrBuildMaterial(
"Al"),
"C2CCapsSideLV",0,0,0);
244 Capsule_visatt =
new G4VisAttributes( G4Colour(0.8, 0.8, 0.8, 0.75) );
245 Capsule_visatt->SetVisibility(
true);
246 a_log->SetVisAttributes( Capsule_visatt );
250 =
new G4LogicalVolume(a_solid,SToGS::MaterialConsultant::theConsultant()->FindOrBuildMaterial(
"AIR"),
"C2CCapsSideLV",0,0,0);
252 Capsule_visatt =
new G4VisAttributes( G4Colour(1, 1, 1, 0.5) );
253 Capsule_visatt->SetVisibility(
true);
254 a_log->SetVisAttributes( Capsule_visatt );
260 new G4PVPlacement(0,Ta,a_log,
"C2CCapsSide",detlogicWorld,
false,-1);
263 a_solid =
new G4Polyhedra(
"C2CCapsFront",0.,360.*CLHEP::deg,numSide,numZPlanes,z_caps_front,rInner_caps_front,rOuter_caps_front);
267 =
new G4LogicalVolume(a_solid,SToGS::MaterialConsultant::theConsultant()->FindOrBuildMaterial(
"Al"),
"C2CCapsFrontLV",0,0,0);
269 a_log->SetVisAttributes( Capsule_visatt );
273 =
new G4LogicalVolume(a_solid,SToGS::MaterialConsultant::theConsultant()->FindOrBuildMaterial(
"AIR"),
"C2CCapsFrontLV",0,0,0);
275 a_log->SetVisAttributes( Capsule_visatt );
280 new G4PVPlacement(0,Ta,a_log,
"C2CCapsFront",detlogicWorld,
false,-1);
283 Ta.setZ( crystal_depth + caps_width + teflon_width );
284 new G4PVPlacement(0,Ta,a_log,
"C2CCapsBack",detlogicWorld,
false,-1);
559 G4VPhysicalVolume *theDetector = 0x0; G4LogicalVolume *detlogicWorld; G4Box *detWorld; G4bool do_caps =
false, do_housing =
false;
565 if ( caps_width != 0.0 ) {
566 if ( opt !=
"bare" ) {
570 if ( housing_width != 0.0 ) {
571 if ( opt !=
"bare" ) {
577 detWorld=
new G4Box(detname,10.*CLHEP::cm,10.*CLHEP::cm,50.*CLHEP::cm);
578 detlogicWorld=
new G4LogicalVolume(detWorld, SToGS::MaterialConsultant::theConsultant()->FindOrBuildMaterial(
"AIR"), detname, 0, 0, 0);
580 detlogicWorld->SetVisAttributes(G4VisAttributes::Invisible);
582 theDetector =
new G4PVPlacement(0,
591 const char *matInner =
"LaBr3", *matOuter =
"NaI", *matCapsule =
"Al";
595 InnerX = 2*2.54*CLHEP::cm, InnerY = 2*2.54*CLHEP::cm, InnerZ = 2*2.54*CLHEP::cm,
596 OuterX = 2*2.54*CLHEP::cm, OuterY = 2*2.54*CLHEP::cm, OuterZ = 6*2.54*CLHEP::cm;
599 ExtraHousingBack = 20*CLHEP::mm,
600 eps_caps = 0.1*CLHEP::mm,
601 Shift = 0.01*CLHEP::mm;
611 G4double zplane[2], rinner[2], router[2];
613 zplane[0] = Shift+caps_width-eps_caps;
614 zplane[1] = Shift+caps_width+InnerZ+OuterZ+ExtraHousingBack;
615 rinner[0] = InnerX / 2. + eps_caps; rinner[1] = InnerX / 2. + eps_caps;
616 router[0] = InnerX / 2. + caps_width ; router[1] = InnerX / 2. + caps_width;
618 G4Polyhedra *Capsule_solid =
new G4Polyhedra(
"ShapePWCaps",
619 45.0*CLHEP::deg,360.0*CLHEP::deg,
620 4,2,zplane,rinner,router
622 G4Box *CapsTap_solid =
new G4Box(
"ShapeCapsTap",
623 InnerX/2.+caps_width,
624 InnerY/2.+caps_width,
625 caps_width-eps_caps);
627 G4LogicalVolume *Capsule_logic;
628 G4LogicalVolume *CapsTap_logic;
629 G4VisAttributes *Capsule_visatt;
633 new G4LogicalVolume(Capsule_solid,SToGS::MaterialConsultant::theConsultant()->FindOrBuildMaterial(matCapsule),
"PWCaps",0,0,0);
636 new G4LogicalVolume(CapsTap_solid,SToGS::MaterialConsultant::theConsultant()->FindOrBuildMaterial(matCapsule),
"PWCapsTaps",0,0,0);
638 Capsule_visatt =
new G4VisAttributes( G4Colour(0.8, 0.8, 0.8, 0.75) );
639 Capsule_visatt->SetVisibility(
true);
640 Capsule_logic->SetVisAttributes( Capsule_visatt );
641 CapsTap_logic->SetVisAttributes( Capsule_visatt );
645 new G4LogicalVolume(Capsule_solid,SToGS::MaterialConsultant::theConsultant()->FindOrBuildMaterial(
"AIR"),
"PWCaps",0,0,0);
648 new G4LogicalVolume(CapsTap_solid,SToGS::MaterialConsultant::theConsultant()->FindOrBuildMaterial(
"AIR"),
"PWCapsTaps",0,0,0);
650 Capsule_visatt =
new G4VisAttributes( G4Colour(1, 1, 1, 0.5) );
651 Capsule_visatt->SetVisibility(
true);
652 Capsule_logic->SetVisAttributes( Capsule_visatt );
653 CapsTap_logic->SetVisAttributes( Capsule_visatt );
659 new G4PVPlacement(0,T,Capsule_logic,
"PwCaps",detlogicWorld,
false,-1);
661 T.setZ( Shift+(caps_width-eps_caps)/2. );
662 new G4PVPlacement(0,T,CapsTap_logic,
"PwCapsTaps",detlogicWorld,
false,-1);
665 G4Box *Inner_solid =
new G4Box(
"ShapePW0", InnerX/2., InnerY/2., InnerZ/2.);
666 G4LogicalVolume *Inner_logic =
667 new G4LogicalVolume(Inner_solid, SToGS::MaterialConsultant::theConsultant()->FindOrBuildMaterial(matInner),
"PWLV:0",0,0,0);
668 G4VisAttributes *Inner_visatt =
new G4VisAttributes( G4Colour(0.0, 0.0, 1.0) );
669 Inner_visatt->SetVisibility(
true);
670 Inner_logic->SetVisAttributes( Inner_visatt );
675 T.setZ( Shift + caps_width + InnerZ/2. );
676 new G4PVPlacement(0,T,Inner_logic,
"PW:0:",detlogicWorld,
false,0);
679 G4Box *Outer_solid =
new G4Box(
"ShapePW1", OuterX/2., OuterY/2., OuterZ/2.);
680 G4LogicalVolume *Outer_logic =
681 new G4LogicalVolume(Outer_solid,SToGS::MaterialConsultant::theConsultant()->FindOrBuildMaterial(matOuter),
"PWLV:1",0,0,0);
682 G4VisAttributes *Outer_visatt =
new G4VisAttributes( G4Colour(1.0, 0.0, 0.0) );
683 Outer_visatt->SetVisibility(
true);
684 Outer_logic->SetVisAttributes( Outer_visatt );
689 T.setZ( Shift + caps_width + InnerZ + OuterZ/2. );
690 new G4PVPlacement(0,T,Outer_logic,
"PW:1:",detlogicWorld,
false,1);
698 G4VPhysicalVolume *theDetector = 0x0; G4LogicalVolume *detlogicWorld; G4Box *detWorld; G4double caps_width = 0.5*CLHEP::mm;
704 G4String base_element =
"DetectorFactory/Scintillators/ParisPW_";
711 detWorld=
new G4Box(detname,20.*CLHEP::cm,20.*CLHEP::cm,25.*CLHEP::cm);
712 detlogicWorld=
new G4LogicalVolume(detWorld, SToGS::MaterialConsultant::theConsultant()->FindOrBuildMaterial(
"AIR"), detname, 0, 0, 0);
714 detlogicWorld->SetVisAttributes(G4VisAttributes::Invisible);
717 theDetector =
new G4PVPlacement(0,
725 if ( opt.contains(
"3") ) {
726 caps_width = 1.0*CLHEP::mm;
729 const G4double HalfInnerX = 2.54*CLHEP::cm + 1.001*caps_width, HalfInnerY = 2.54*CLHEP::cm + 1.001*caps_width;
750 ShiftX[0] = 0*(HalfInnerX); ShiftX[1] = +2*(HalfInnerX); ShiftX[2] = 0*(HalfInnerX);
751 ShiftX[3] = -2*(HalfInnerX); ShiftX[4] = -2*(HalfInnerX); ShiftX[5] = -2*(HalfInnerX);
752 ShiftX[6] = 0*(HalfInnerX); ShiftX[7] = 2*(HalfInnerX); ShiftX[8] = 2*(HalfInnerX);
754 ShiftY[0] = 0*(HalfInnerY); ShiftY[1] = +2*(HalfInnerY); ShiftY[2] = 2*(HalfInnerY);
755 ShiftY[3] = 2*(HalfInnerY); ShiftY[4] = 0*(HalfInnerY); ShiftY[5] = -2*(HalfInnerY);
756 ShiftY[6] = -2*(HalfInnerY); ShiftY[7] = -2*(HalfInnerY); ShiftY[8] = 0*(HalfInnerY);
759 for (G4int i = 0; i < 9; i++) {
763 assembly->MakeImprint( detlogicWorld, T, &R );
775 G4VPhysicalVolume *theDetector = 0x0; G4LogicalVolume *detlogicWorld; G4Box *detWorld; G4bool do_caps =
true;
781 detWorld=
new G4Box(detname,10.*CLHEP::cm,10.*CLHEP::cm,50.*CLHEP::cm);
782 detlogicWorld=
new G4LogicalVolume(detWorld, SToGS::MaterialConsultant::theConsultant()->FindOrBuildMaterial(
"AIR"), detname, 0, 0, 0);
784 detlogicWorld->SetVisAttributes(G4VisAttributes::Invisible);
786 theDetector =
new G4PVPlacement(0,
795 G4String matPMT =
"Al", matShielding =
"Pb", matWindow =
"SToGS_Quartz", matSD =
"LaBr3";
796 if ( opt.contains(
"bare") ) {
798 matShielding =
"AIR";
805 const double Labr_Length = 45.75*CLHEP::mm;
806 const double Labr_Rad = 19.0*CLHEP::mm;
807 const double Window_Length = 5.0*CLHEP::mm;
810 G4double zPlane1[16] =
811 {0.0*CLHEP::mm,1.0*CLHEP::mm,1.0*CLHEP::mm,1.5*CLHEP::mm,1.5*CLHEP::mm,46.0*CLHEP::mm,46.0*CLHEP::mm,56.0*CLHEP::mm,
812 56.0*CLHEP::mm,71.0*CLHEP::mm,71.0*CLHEP::mm,244.3*CLHEP::mm,244.3*CLHEP::mm,260.8*CLHEP::mm,260.8*CLHEP::mm,263.3*CLHEP::mm};
813 G4double rInner1[16] =
814 {19.0*CLHEP::mm,19.0*CLHEP::mm,0.0*CLHEP::mm,0.0*CLHEP::mm,Labr_Rad,Labr_Rad,Labr_Rad,Labr_Rad,
815 32.0*CLHEP::mm,32.0*CLHEP::mm,32.0*CLHEP::mm,32.0*CLHEP::mm,32.0*CLHEP::mm,32.0*CLHEP::mm, 0.0*CLHEP::mm,0.0*CLHEP::mm};
816 G4double rOuter1[16] =
817 {22.75*CLHEP::mm,22.75*CLHEP::mm,22.75*CLHEP::mm,22.75*CLHEP::mm,22.75*CLHEP::mm,22.75*CLHEP::mm,37.5*CLHEP::mm,37.5*CLHEP::mm,
818 37.5*CLHEP::mm,37.5*CLHEP::mm,35.0*CLHEP::mm,35.0*CLHEP::mm,37.5*CLHEP::mm,37.5*CLHEP::mm,37.5*CLHEP::mm,35.5*CLHEP::mm};
820 G4Polycone *solid_PMT =
new G4Polycone(
"ShapeFATIMAPMT", 0.0, 360.*CLHEP::deg, 16, zPlane1 ,rInner1, rOuter1);
821 G4LogicalVolume *logicPMT =
new G4LogicalVolume( solid_PMT, SToGS::MaterialConsultant::theConsultant()->FindOrBuildMaterial(matPMT),
"FATIMAPMTLV", 0, 0, 0 );
824 G4double zPlane2[5] = {0.0*CLHEP::mm , 2.0*CLHEP::mm, 40.0*CLHEP::mm, 40.0*CLHEP::mm, 46.0*CLHEP::mm};
825 G4double rInner2[5] = {22.8*CLHEP::mm , 22.8*CLHEP::mm, 22.8*CLHEP::mm, 22.8*CLHEP::mm, 22.8*CLHEP::mm};
826 G4double rOuter2[5] = {25.75*CLHEP::mm, 27.75*CLHEP::mm, 27.75*CLHEP::mm, 37.5*CLHEP::mm, 37.5*CLHEP::mm};
827 G4Polycone *solid_Shielding =
new G4Polycone(
"ShapeFATIMAShielding", 0.0, 360.*CLHEP::deg, 5, zPlane2 ,rInner2, rOuter2);
828 G4LogicalVolume *logicShielding =
new G4LogicalVolume( solid_Shielding, SToGS::MaterialConsultant::theConsultant()->FindOrBuildMaterial(matShielding),
"FATIMAShieldingLV", 0, 0, 0 );
831 G4Tubs *solid_Scintillator =
new G4Tubs(
"ShapeFATIMAScintillator", 0.0*CLHEP::mm, Labr_Rad, Labr_Length/2 ,0, 360.*CLHEP::deg);
832 G4LogicalVolume *logicScintillator =
new G4LogicalVolume( solid_Scintillator, SToGS::MaterialConsultant::theConsultant()->FindOrBuildMaterial(matSD),
"FATIMAScintillatorLV", 0, 0, 0 );
834 G4Tubs *solid_Window =
new G4Tubs(
"ShapeFATIMAWindow", 0.0*CLHEP::mm, Labr_Rad, Window_Length/2 ,0, 360.*CLHEP::deg);
835 G4LogicalVolume *logicWindow =
new G4LogicalVolume( solid_Window, SToGS::MaterialConsultant::theConsultant()->FindOrBuildMaterial(matWindow),
"FATIMAWindowLV", 0, 0, 0 );
837 G4VisAttributes *visatt;
843 visatt =
new G4VisAttributes( G4Colour(0.0, 1.0, 1.0, 0.75) );
844 visatt->SetVisibility(
true);
845 logicPMT->SetVisAttributes( visatt );
848 visatt =
new G4VisAttributes( G4Colour(1.0, 1.0, 1.0, 0.5) );
849 visatt->SetVisibility(
true);
850 logicPMT->SetVisAttributes( visatt );
852 new G4PVPlacement(0,T,logicPMT,
"PMT",detlogicWorld,
false,-1);
858 visatt =
new G4VisAttributes( G4Colour(1.0, 1.0, 0.0, 0.75) );
859 visatt->SetVisibility(
true);
860 logicShielding->SetVisAttributes( visatt );
863 visatt =
new G4VisAttributes( G4Colour(1.0, 1.0, 1.0, 0.5) );
864 visatt->SetVisibility(
true);
865 logicShielding->SetVisAttributes( visatt );
867 new G4PVPlacement(0,T,logicShielding,
"Shield",detlogicWorld,
false,-1);
871 T.setZ( 2.*CLHEP::mm + Labr_Length/2. );
873 visatt =
new G4VisAttributes( G4Colour(0.0, 1.0, 0.0, 1) );
874 visatt->SetVisibility(
true);
875 logicScintillator->SetVisAttributes( visatt );
877 new G4PVPlacement(0,T,logicScintillator,
"Sensor",detlogicWorld,
false,0);
881 T.setZ( 2.*CLHEP::mm + Labr_Length + Window_Length/2. );
883 visatt =
new G4VisAttributes( G4Colour(0.0, 0.0, 1.0, 0.75) );
884 visatt->SetVisibility(
true);
885 logicWindow->SetVisAttributes( visatt );
888 visatt =
new G4VisAttributes( G4Colour(1.0, 1.0, 1.0, 0.5) );
889 visatt->SetVisibility(
true);
890 logicWindow->SetVisAttributes( visatt );
892 new G4PVPlacement(0,T,logicWindow,
"Window",detlogicWorld,
false,-1);
902 G4VPhysicalVolume *theDetector = 0x0; G4LogicalVolume *detlogicWorld; G4Box *detWorld;
907 G4String base_element =
"DetectorFactory/Scintillators/FATIMAM";
917 detWorld=
new G4Box(detname,10.*CLHEP::cm,10.*CLHEP::cm,25.*CLHEP::cm);
918 detlogicWorld=
new G4LogicalVolume(detWorld, SToGS::MaterialConsultant::theConsultant()->FindOrBuildMaterial(
"AIR"), detname, 0, 0, 0);
920 detlogicWorld->SetVisAttributes(G4VisAttributes::Invisible);
923 theDetector =
new G4PVPlacement(0,
931 T.setX( +37.5*CLHEP::mm );
932 T.setY( +37.5*CLHEP::mm );
934 assembly->MakeImprint( detlogicWorld, T, &R);
935 T.setX( +37.5*CLHEP::mm );
936 T.setY( -37.5*CLHEP::mm );
938 assembly->MakeImprint( detlogicWorld, T, &R);
939 T.setX( -37.5*CLHEP::mm );
940 T.setY( +37.5*CLHEP::mm );
942 assembly->MakeImprint( detlogicWorld, T, &R);
943 T.setX( -37.5*CLHEP::mm );
944 T.setY( -37.5*CLHEP::mm );
946 assembly->MakeImprint( detlogicWorld, T, &R);
958 G4VPhysicalVolume *theDetector = 0x0;
959 G4LogicalVolume *detlogicWorld;
966 detWorld=
new G4Box(detname,10.*CLHEP::cm,10.*CLHEP::cm,50.*CLHEP::cm);
967 detlogicWorld=
new G4LogicalVolume(detWorld, SToGS::MaterialConsultant::theConsultant()->FindOrBuildMaterial(
"AIR"), detname, 0, 0, 0);
969 detlogicWorld->SetVisAttributes(G4VisAttributes::Invisible);
971 theDetector =
new G4PVPlacement(0,
984 *matScint =
"XYLENE",
985 *matCapsule =
"STAINLESS-STEEL",
986 *matBack1 =
"GLASS_PLATE",
991 r_cell = 10.*CLHEP::cm,
992 h_cell = 5.*CLHEP::cm,
993 front_width = 0.2*CLHEP::mm,
994 glass_width = 6.*CLHEP::mm,
996 Shift = 0.01*CLHEP::mm;
1011 rint_caps = r_scint + eps,
1012 rext_caps = r_scint + caps_width,
1013 h_caps = h_scint + glass_width + 2.*eps + extra_back,
1015 r_front = rext_caps,
1016 h_front = front_width,
1019 h_back1 = glass_width,
1020 h_back2 = h_caps - h_scint - h_back1 - 2.*eps;
1022 G4Tubs * Scint_solid =
new G4Tubs(
"ShapeEDENscint",0.*CLHEP::mm,r_scint,h_scint/2.,0.*CLHEP::deg,360.*CLHEP::deg);
1024 G4Tubs * Caps_solid =
new G4Tubs(
"ShapeEDENcaps",rint_caps,rext_caps,h_caps/2.,0.*CLHEP::deg,360.*CLHEP::deg);
1026 G4Tubs * CapsFront_solid =
new G4Tubs(
"ShapeEDENcapsfront",0.*CLHEP::mm,r_front,h_front/2.,0.*CLHEP::deg,360.*CLHEP::deg);
1028 G4Tubs * Back1_solid =
new G4Tubs(
"ShapeEDENback1",0.*CLHEP::mm,r_back,h_back1/2.,0.*CLHEP::deg,360.*CLHEP::deg);
1030 G4Tubs * Back2_solid =
new G4Tubs(
"ShapeEDENback2",0.*CLHEP::mm,r_back,h_back2/2.,0.*CLHEP::deg,360.*CLHEP::deg);
1034 G4LogicalVolume *Scint_logic =
new G4LogicalVolume(Scint_solid,SToGS::MaterialConsultant::theConsultant()->FindOrBuildMaterial(matScint),
"EDENscint",0,0,0);
1036 G4LogicalVolume *Caps_logic =
new G4LogicalVolume(Caps_solid,SToGS::MaterialConsultant::theConsultant()->FindOrBuildMaterial(matCapsule),
"EDENcaps",0,0,0);
1038 G4LogicalVolume *CapsFront_logic =
new G4LogicalVolume(CapsFront_solid,SToGS::MaterialConsultant::theConsultant()->FindOrBuildMaterial(matCapsule),
"EDENcapsfront",0,0,0);
1040 G4LogicalVolume *Back1_logic =
new G4LogicalVolume(Back1_solid,SToGS::MaterialConsultant::theConsultant()->FindOrBuildMaterial(matBack1),
"EDENback1",0,0,0);
1042 G4LogicalVolume *Back2_logic =
new G4LogicalVolume(Back2_solid,SToGS::MaterialConsultant::theConsultant()->FindOrBuildMaterial(matBack2),
"EDENback2",0,0,0);
1047 G4VisAttributes *Scint_visatt =
new G4VisAttributes( G4Colour(0.0, 1.0, 0.0) );
1048 Scint_visatt->SetVisibility(
true);
1049 Scint_logic->SetVisAttributes( Scint_visatt );
1051 G4VisAttributes *Capsule_visatt =
new G4VisAttributes( G4Colour(0.8, 0.8, 0.8, 0.75) );
1052 Capsule_visatt->SetVisibility(
true);
1053 Caps_logic->SetVisAttributes( Capsule_visatt );
1054 CapsFront_logic->SetVisAttributes( Capsule_visatt );
1056 G4VisAttributes *Back1_visatt =
new G4VisAttributes( G4Colour(0.0, 0.0, 1.0, 0.5) );
1057 Back1_visatt->SetVisibility(
true);
1058 Back1_logic->SetVisAttributes( Back1_visatt );
1060 G4VisAttributes *Back2_visatt =
new G4VisAttributes( G4Colour(0.0, 0.0, 1.0, 0.25) );
1061 Back2_visatt->SetVisibility(
true);
1062 Back2_logic->SetVisAttributes( Back2_visatt );
1072 T.setZ( Shift + h_front/2. );
1073 new G4PVPlacement(0,T,CapsFront_logic,
"EdenCapsFront",detlogicWorld,
false,-1);
1075 T.setZ( Shift + h_front + eps + h_scint/2. );
1076 new G4PVPlacement(0,T,Scint_logic,
"EdenScint",detlogicWorld,
false,0);
1078 T.setZ( Shift + h_front + eps + h_scint + eps + h_back1/2.);
1079 new G4PVPlacement(0,T,Back1_logic,
"EdenBack1",detlogicWorld,
false,-1);
1081 T.setZ( Shift + h_front + eps + h_scint + eps + h_back1 + eps + h_back2/2.);
1082 new G4PVPlacement(0,T,Back2_logic,
"EdenBack2",detlogicWorld,
false,-1);
1084 T.setZ( Shift + h_front + eps + h_caps/2.);
1085 new G4PVPlacement(0,T,Caps_logic,
"EdenCaps",detlogicWorld,
false,-1);
1087 else if(opt==
"bare")
1089 T.setZ( Shift + h_front + eps + h_scint/2. );
1090 new G4PVPlacement(0,T,Scint_logic,
"EdenScint",detlogicWorld,
false,0);
Base classe to build scintillators.
void MakeInStore(G4String name, G4String version_string)
build in store a particular detector from its names and version. i.e. call th Make method of the sub ...
G4VPhysicalVolume * MakeCdC(G4String detname, G4String opt="bare")
static G4int GetGCopyNb()
virtual G4VPhysicalVolume * Get(G4String basename)
search for a detector in DetectorFactory
G4VPhysicalVolume * MakeFATIMAQ(G4String detname, G4String opt="bare")
static DetectorFactory * theMainFactory()
to get the main factory
static G4int SetGCopyNb(G4int val)
G4VPhysicalVolume * MakeCPPW(G4String detname, G4String opt="bare")
static G4VSensitiveDetector * GetCopClusterSD(G4String name="/SToGS/SD/CopCluster")
to get a general SToGS Calorimeter. In Multi-threading mode, return a new instance otherwise a global...
virtual void MakeStore()
build the default store i.e. all the scintillators detectors.
G4VPhysicalVolume * MakeFATIMAM(G4String detname, G4String opt="bare")
static G4VSensitiveDetector * GetTrackerSD(G4String name="/SToGS/SD/Tracker")
to get a general SToGS tracker. In Multi-threading mode, return a new instance otherwise a global one...
G4VPhysicalVolume * MakeEDEN(G4String detname, G4double caps_width=0.0, G4double extra_back=0.0, G4String opt="v0")
G4VPhysicalVolume * MakePPW(G4String detname, G4double caps_width=0.0, G4double housing_width=0.0, G4String opt="bare")
virtual G4VPhysicalVolume * Make(G4String, G4String)
Should be implemented in any sub factory. It built (C++) a detector and return it.
G4AssemblyVolume * GetAssembly(G4String basename)