102 G4Box * World_box =
new G4Box(
"World",World_x,World_y,World_z);
122 G4cout <<
"\n \n \n \n \n \n \n \n \n \n \n \n \n " <<
G4endl ;
124 G4cout <<
"######################################################" <<
G4endl ;
136 G4cout <<
"######################################################" <<
G4endl ;
139 #ifdef ULTRA_MIRROR_USE
141 G4cout <<
"Using mirror reflecting surface " <<
G4endl ;
146 #elif ULTRA_GROUND_USE
148 G4cout <<
"Using ground reflecting surface " <<
G4endl ;
202 density = 1.29e-03*
g/
cm3;
212 new G4Material(name=
"Aluminum", z=13., a, density);
218 density = 2.64*
g/
cm3;
226 density = 1.19*
g/
cm3;
237 const G4int NUMENTRIES = 2;
244 G4double RINDEX_AIR[NUMENTRIES] = {1.00, 1.00} ;
247 for(
G4int j=0 ; j<NUMENTRIES ; j++){
248 RINDEX_AIR[j] = RINDEX_AIR[j] + 2.73*std::pow(10.0,-4) ;
252 MPT_Air->
AddProperty(
"RINDEX", X_RINDEX, RINDEX_AIR, NUMENTRIES);
263 const G4int N_RINDEX_QUARTZ = 2 ;
265 G4double RINDEX_QUARTZ[N_RINDEX_QUARTZ] = {1.54, 1.54};
268 MPT_PMT->
AddProperty(
"RINDEX", X_RINDEX_QUARTZ, RINDEX_QUARTZ, N_RINDEX_QUARTZ);
279 const G4int NENTRIES = 11 ;
288 G4double bParam[4] = {1760.7010,-1.3687,2.4388e-3,-1.5178e-6} ;
290 for(
G4int i=0;i<NENTRIES; i++){
293 RINDEX_ACRYLIC[i] = 0.0 ;
295 for (
G4int jj=0 ; jj<4 ; jj++)
297 RINDEX_ACRYLIC[i] += (bParam[jj]/1000.0)*std::pow(LAMBDA_ACRYLIC[i]/
nm,jj) ;
300 ENERGY_ACRYLIC[i] = h_Planck*c_light/LAMBDA_ACRYLIC[i] ;
306 MPT_Acrylic->
AddProperty(
"RINDEX", ENERGY_ACRYLIC, RINDEX_ACRYLIC, NENTRIES);
310 const G4int NENT = 25 ;
314 246.528671, 260.605103, 263.853516, 266.019104, 268.726105,
315 271.433136, 273.598724, 276.305725, 279.554138, 300.127380,
316 320.159241, 340.191101, 360.764343, 381.337585, 399.745239,
317 421.401276, 440.891724, 460.382172, 480.414001, 500.987274,
318 520.477722, 540.509583, 559.458618,
325 0.0000000, 5.295952, 9.657321, 19.937695, 29.283491,
326 39.252335, 48.598133, 58.255451, 65.109039, 79.439247,
327 85.669785, 89.719627, 91.277260, 91.588783, 91.900307,
328 91.588783, 91.277260, 91.277260, 91.588783, 91.588783,
329 91.900307, 91.900307, 91.588783,
335 for(
G4int i=0;i<NENT; i++){
343 abslength = -3.0*
mm/(
G4Log(ABS[i]/100.0)) ;
346 MPT_Acrylic->
AddEntry(
"ABSLENGTH", energy, abslength);
366 G4Box * boxMirror =
new G4Box(
"Mirror",Mirror_x,Mirror_y,Mirror_z);
383 physMirror =
new G4PVPlacement(Surfrot,SurfacePosition,
"MirrorPV",logMirror,World_phys,
false,0);
403 G4double ICEREFLECTIVITY[NUM] = { 0.95, 0.95 };
406 AirMirrorMPT->
AddProperty(
"REFLECTIVITY", XX, ICEREFLECTIVITY,NUM);
425 G4Box * boxGround =
new G4Box(
"Ground",Ground_x,Ground_y,Ground_z);
442 physGround =
new G4PVPlacement(Surfrot,SurfacePosition,
"GroundPV",logGround,World_phys,
false,0);
462 G4double ICEREFLECTIVITY[NUM] = { 0.95, 0.95 };
465 AirGroundMPT->
AddProperty(
"REFLECTIVITY", XX, ICEREFLECTIVITY,NUM);
499 G4double UVscopeInnerRadius = UVscopeDiameter/2.0-UVscopeThickness ;
500 G4double UVscopeOuterRadius = UVscopeDiameter/2.0 ;
508 new G4Tubs(
"UVscopeSolid",UVscopeInnerRadius,UVscopeOuterRadius,UVscopeHeight/2.0,0.0,
twopi) ;
512 new G4PVPlacement(0,UVscopePosition,
"UVSCopePV",logicUVscope,World_phys,
false,0);
519 G4Tubs *solidUVscopeBack =
520 new G4Tubs(
"UVscopeBackSolid",0.0,UVscopeOuterRadius,UVscopeThickness/2.0,0.0,
twopi) ;
526 UVscopeBackPosition = UVscopePosition+
G4ThreeVector(0.0*
mm,0.0*
mm,-(UVscopeHeight/2.0+UVscopeThickness/2.0)) ;
528 new G4PVPlacement(0,UVscopeBackPosition,
"UVscopeBack",logicUVscopeBack,World_phys,
false,0);
535 G4cout <<
"# Building the Fresnel lens ... #" <<
G4endl ;
539 G4int LensNumOfGrooves = 13 ;
546 G4ThreeVector LensPosition = UVscopePosition+
G4ThreeVector(0.0*
mm,0.0*
mm,UVscopeHeight/2.0-UVscopeBaffle) ;
556 G4Tubs *solidLensFrame =
new G4Tubs(
"LensFrame",LensDiameter/2.0,UVscopeInnerRadius,LensBorderThickness/2.0,0.0,
twopi) ;
559 G4ThreeVector LensFramePosition ;
563 new G4PVPlacement(0,LensFramePosition,
"LensFramePV",logicLensFrame,World_phys,
false,0);
569 G4cout <<
"# Building the photomultiplier ... #" <<
G4endl ;
581 solidPMT =
new G4Sphere(
"PMT_solid",PMT_curv-PMT_thick,PMT_curv,0.0,
twopi,StartTheta,EndTheta);
589 G4ThreeVector PMTpos = LensPosition +
G4ThreeVector(0.0*
cm,0.0*
cm,-(LensFocalLength+PMT_curv)) ;
605 G4cout <<
"# Defining interface's optical properties ... #" <<
G4endl ;
616 G4double BLACKPAINTREFLECTIVITY[NUM] = { 0.05, 0.05 };
620 AirPaintMPT->
AddProperty(
"REFLECTIVITY", XX, BLACKPAINTREFLECTIVITY,NUM);
629 new G4LogicalBorderSurface(
"Air/UVscope Back Cover Surface",World_phys,physicalUVscopeBack,OpticalAirPaint);
656 return physicalUVscope;
void SetFinish(const G4OpticalSurfaceFinish)
static constexpr double mm
UltraFresnelLens * FresnelLens
static const G4double kInfinity
CLHEP::Hep3Vector G4ThreeVector
CLHEP::HepRotation G4RotationMatrix
std::vector< ExP01TrackerHit * > a
static G4Material * GetMaterial(const G4String &name, G4bool warning=true)
G4VPhysicalVolume * GetPhysicalVolume()
void SetMaterialPropertiesTable(G4MaterialPropertiesTable *anMPT)
void AddEntry(const char *key, G4double aPhotonEnergy, G4double aPropertyValue)
G4VPhysicalVolume * ConstructGround(G4VPhysicalVolume *)
static G4MaterialTable * GetMaterialTable()
const char * name(G4int ptype)
static constexpr double g
~UltraDetectorConstruction()
G4LogicalVolume * logicalPMT
G4MaterialPropertyVector * AddProperty(const char *key, G4double *PhotonEnergies, G4double *PropertyValues, G4int NumEntries)
static constexpr double twopi
G4GLOB_DLL std::ostream G4cout
G4PhysicsOrderedFreeVector G4MaterialPropertyVector
static constexpr double m
void SetVisibility(G4bool=true)
static constexpr double cm
static constexpr double cm3
void SetSensitiveDetector(const G4String &logVolName, G4VSensitiveDetector *aSD, G4bool multi=false)
G4double G4Log(G4double x)
void AddNewDetector(G4VSensitiveDetector *aSD)
void ConstructSDandField()
G4LogicalVolume * GetLogicalVolume() const
UltraDetectorConstruction()
static constexpr double nm
G4double energy(const ThreeVector &p, const G4double m)
static G4SDManager * GetSDMpointer()
G4VPhysicalVolume * ConstructUVscope(G4VPhysicalVolume *)
G4double GetZHalfLength() const
void AddElement(G4Element *element, G4int nAtoms)
static constexpr double pi
G4VPhysicalVolume * ConstructMirror(G4VPhysicalVolume *)
void SetModel(const G4OpticalSurfaceModel model)
void ConstructTableMaterials()
G4VPhysicalVolume * Construct()
void SetMaterialPropertiesTable(G4MaterialPropertiesTable *anMPT)
static constexpr double mole
static const G4VisAttributes & GetInvisible()
void SetType(const G4SurfaceType &type)
void SetForceWireframe(G4bool=true)
void SetVisAttributes(const G4VisAttributes *pVA)