100 G4Box * World_box =
new G4Box(
"World",World_x,World_y,World_z);
120 G4cout <<
"\n \n \n \n \n \n \n \n \n \n \n \n \n " <<
G4endl ;
122 G4cout <<
"######################################################" <<
G4endl ;
134 G4cout <<
"######################################################" <<
G4endl ;
137 #ifdef ULTRA_MIRROR_USE
139 G4cout <<
"Using mirror reflecting surface " <<
G4endl ;
144 #elif ULTRA_GROUND_USE
146 G4cout <<
"Using ground reflecting surface " <<
G4endl ;
199 density = 1.29e-03*
g/
cm3;
209 new G4Material(name=
"Aluminum", z=13., a, density);
215 density = 2.64*
g/
cm3;
223 density = 1.19*
g/
cm3;
234 const G4int NUMENTRIES = 2;
241 G4double RINDEX_AIR[NUMENTRIES] = {1.00, 1.00} ;
244 for(
G4int j=0 ; j<NUMENTRIES ; j++){
245 RINDEX_AIR[j] = RINDEX_AIR[j] + 2.73*std::pow(10.0,-4) ;
249 MPT_Air->
AddProperty(
"RINDEX", X_RINDEX, RINDEX_AIR, NUMENTRIES);
260 const G4int N_RINDEX_QUARTZ = 2 ;
262 G4double RINDEX_QUARTZ[N_RINDEX_QUARTZ] = {1.54, 1.54};
265 MPT_PMT->
AddProperty(
"RINDEX", X_RINDEX_QUARTZ, RINDEX_QUARTZ, N_RINDEX_QUARTZ);
276 const G4int NENTRIES = 11 ;
285 G4double bParam[4] = {1760.7010,-1.3687,2.4388e-3,-1.5178e-6} ;
287 for(
G4int i=0;i<NENTRIES; i++){
290 RINDEX_ACRYLIC[i] = 0.0 ;
292 for (
G4int jj=0 ; jj<4 ; jj++)
294 RINDEX_ACRYLIC[i] += (bParam[jj]/1000.0)*std::pow(LAMBDA_ACRYLIC[i]/
nm,jj) ;
297 ENERGY_ACRYLIC[i] = h_Planck*c_light/LAMBDA_ACRYLIC[i] ;
303 MPT_Acrylic->
AddProperty(
"RINDEX", ENERGY_ACRYLIC, RINDEX_ACRYLIC, NENTRIES);
307 const G4int NENT = 25 ;
311 246.528671, 260.605103, 263.853516, 266.019104, 268.726105,
312 271.433136, 273.598724, 276.305725, 279.554138, 300.127380,
313 320.159241, 340.191101, 360.764343, 381.337585, 399.745239,
314 421.401276, 440.891724, 460.382172, 480.414001, 500.987274,
315 520.477722, 540.509583, 559.458618,
322 0.0000000, 5.295952, 9.657321, 19.937695, 29.283491,
323 39.252335, 48.598133, 58.255451, 65.109039, 79.439247,
324 85.669785, 89.719627, 91.277260, 91.588783, 91.900307,
325 91.588783, 91.277260, 91.277260, 91.588783, 91.588783,
326 91.900307, 91.900307, 91.588783,
332 for(
G4int i=0;i<NENT; i++){
340 abslength = -3.0*
mm/(std::log(ABS[i]/100.0)) ;
343 MPT_Acrylic->
AddEntry(
"ABSLENGTH", energy, abslength);
363 G4Box * boxMirror =
new G4Box(
"Mirror",Mirror_x,Mirror_y,Mirror_z);
380 physMirror =
new G4PVPlacement(Surfrot,SurfacePosition,
"MirrorPV",logMirror,World_phys,
false,0);
400 G4double ICEREFLECTIVITY[NUM] = { 0.95, 0.95 };
403 AirMirrorMPT->
AddProperty(
"REFLECTIVITY", XX, ICEREFLECTIVITY,NUM);
422 G4Box * boxGround =
new G4Box(
"Ground",Ground_x,Ground_y,Ground_z);
439 physGround =
new G4PVPlacement(Surfrot,SurfacePosition,
"GroundPV",logGround,World_phys,
false,0);
459 G4double ICEREFLECTIVITY[NUM] = { 0.95, 0.95 };
462 AirGroundMPT->
AddProperty(
"REFLECTIVITY", XX, ICEREFLECTIVITY,NUM);
496 G4double UVscopeInnerRadius = UVscopeDiameter/2.0-UVscopeThickness ;
497 G4double UVscopeOuterRadius = UVscopeDiameter/2.0 ;
505 new G4Tubs(
"UVscopeSolid",UVscopeInnerRadius,UVscopeOuterRadius,UVscopeHeight/2.0,0.0,
twopi) ;
509 new G4PVPlacement(0,UVscopePosition,
"UVSCopePV",logicUVscope,World_phys,
false,0);
516 G4Tubs *solidUVscopeBack =
517 new G4Tubs(
"UVscopeBackSolid",0.0,UVscopeOuterRadius,UVscopeThickness/2.0,0.0,
twopi) ;
523 UVscopeBackPosition = UVscopePosition+
G4ThreeVector(0.0*
mm,0.0*
mm,-(UVscopeHeight/2.0+UVscopeThickness/2.0)) ;
525 new G4PVPlacement(0,UVscopeBackPosition,
"UVscopeBack",logicUVscopeBack,World_phys,
false,0);
532 G4cout <<
"# Building the Fresnel lens ... #" <<
G4endl ;
536 G4int LensNumOfGrooves = 13 ;
543 G4ThreeVector LensPosition = UVscopePosition+
G4ThreeVector(0.0*
mm,0.0*
mm,UVscopeHeight/2.0-UVscopeBaffle) ;
553 G4Tubs *solidLensFrame =
new G4Tubs(
"LensFrame",LensDiameter/2.0,UVscopeInnerRadius,LensBorderThickness/2.0,0.0,
twopi) ;
556 G4ThreeVector LensFramePosition ;
560 new G4PVPlacement(0,LensFramePosition,
"LensFramePV",logicLensFrame,World_phys,
false,0);
566 G4cout <<
"# Building the photomultiplier ... #" <<
G4endl ;
578 solidPMT =
new G4Sphere(
"PMT_solid",PMT_curv-PMT_thick,PMT_curv,0.0,
twopi,StartTheta,EndTheta);
586 G4ThreeVector PMTpos = LensPosition +
G4ThreeVector(0.0*
cm,0.0*
cm,-(LensFocalLength+PMT_curv)) ;
602 G4cout <<
"# Defining interface's optical properties ... #" <<
G4endl ;
613 G4double BLACKPAINTREFLECTIVITY[NUM] = { 0.05, 0.05 };
617 AirPaintMPT->
AddProperty(
"REFLECTIVITY", XX, BLACKPAINTREFLECTIVITY,NUM);
626 new G4LogicalBorderSurface(
"Air/UVscope Back Cover Surface",World_phys,physicalUVscopeBack,OpticalAirPaint);
653 return physicalUVscope;
void SetFinish(const G4OpticalSurfaceFinish)
void SetForceWireframe(G4bool)
UltraFresnelLens * FresnelLens
static const G4double kInfinity
CLHEP::Hep3Vector G4ThreeVector
CLHEP::HepRotation G4RotationMatrix
static G4Material * GetMaterial(const G4String &name, G4bool warning=true)
G4VPhysicalVolume * GetPhysicalVolume()
void SetMaterialPropertiesTable(G4MaterialPropertiesTable *anMPT)
void AddEntry(const char *key, G4double aPhotonEnergy, G4double aPropertyValue)
void SetVisibility(G4bool)
G4VPhysicalVolume * ConstructGround(G4VPhysicalVolume *)
static G4MaterialTable * GetMaterialTable()
~UltraDetectorConstruction()
G4LogicalVolume * logicalPMT
G4MaterialPropertyVector * AddProperty(const char *key, G4double *PhotonEnergies, G4double *PropertyValues, G4int NumEntries)
G4GLOB_DLL std::ostream G4cout
G4PhysicsOrderedFreeVector G4MaterialPropertyVector
static const double twopi
void SetSensitiveDetector(const G4String &logVolName, G4VSensitiveDetector *aSD, G4bool multi=false)
void ConstructSDandField()
G4LogicalVolume * GetLogicalVolume() const
UltraDetectorConstruction()
G4double energy(const ThreeVector &p, const G4double m)
static const G4VisAttributes Invisible
G4VPhysicalVolume * ConstructUVscope(G4VPhysicalVolume *)
G4double GetZHalfLength() const
void AddElement(G4Element *element, G4int nAtoms)
G4VPhysicalVolume * ConstructMirror(G4VPhysicalVolume *)
void SetModel(const G4OpticalSurfaceModel model)
void ConstructTableMaterials()
G4VPhysicalVolume * Construct()
void SetMaterialPropertiesTable(G4MaterialPropertiesTable *anMPT)
void SetType(const G4SurfaceType &type)
void SetVisAttributes(const G4VisAttributes *pVA)