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) ;
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;
CLHEP::Hep3Vector G4ThreeVector
std::vector< ExP01TrackerHit * > a
G4LogicalVolume * GetLogicalVolume() const
static const G4double kInfinity
~UltraDetectorConstruction()
void SetSensitiveDetector(const G4String &logVolName, G4VSensitiveDetector *aSD, G4bool multi=false)
static G4MaterialTable * GetMaterialTable()
static constexpr double nm
static constexpr double mm
void AddNewDetector(G4VSensitiveDetector *aSD)
G4VPhysicalVolume * ConstructGround(G4VPhysicalVolume *)
CLHEP::HepRotation G4RotationMatrix
G4PhysicsOrderedFreeVector G4MaterialPropertyVector
G4VPhysicalVolume * ConstructMirror(G4VPhysicalVolume *)
UltraFresnelLens * FresnelLens
G4VPhysicalVolume * GetPhysicalVolume()
void SetMaterialPropertiesTable(G4MaterialPropertiesTable *anMPT)
static constexpr double h_Planck
static G4Material * GetMaterial(const G4String &name, G4bool warning=true)
G4LogicalVolume * logicalPMT
G4double G4Log(G4double x)
G4VPhysicalVolume * ConstructUVscope(G4VPhysicalVolume *)
static const G4VisAttributes & GetInvisible()
void ConstructTableMaterials()
static constexpr double g
static constexpr double m
void SetMaterialPropertiesTable(G4MaterialPropertiesTable *anMPT)
void SetType(const G4SurfaceType &type)
G4MaterialPropertyVector * AddProperty(const char *key, G4double *PhotonEnergies, G4double *PropertyValues, G4int NumEntries)
void AddEntry(const char *key, G4double aPhotonEnergy, G4double aPropertyValue)
static constexpr double twopi
G4double GetZHalfLength() const
void SetVisAttributes(const G4VisAttributes *pVA)
UltraDetectorConstruction()
void SetVisibility(G4bool=true)
static G4SDManager * GetSDMpointer()
static constexpr double c_light
void AddElement(G4Element *element, G4int nAtoms)
static constexpr double cm
G4GLOB_DLL std::ostream G4cout
void ConstructSDandField()
void SetForceWireframe(G4bool=true)
static constexpr double pi
static constexpr double mole
static constexpr double cm3
void SetModel(const G4OpticalSurfaceModel model)
G4VPhysicalVolume * Construct()
void SetFinish(const G4OpticalSurfaceFinish)