aboutsummaryrefslogtreecommitdiffstats
path: root/src/G4BeamTestDetectorConstruction.cxx
diff options
context:
space:
mode:
authorshivesh <s.p.mandalia@qmul.ac.uk>2019-08-22 01:37:19 +0100
committershivesh <s.p.mandalia@qmul.ac.uk>2019-08-22 01:37:19 +0100
commite3079fb2367c26f767be41e6c313d960c517bbcd (patch)
tree509f081184a4179894ab8370ea06425d46729e9a /src/G4BeamTestDetectorConstruction.cxx
parentba4dd395d1f163983f7102ff9a6c513cfe17912e (diff)
downloadG4BeamTest-e3079fb2367c26f767be41e6c313d960c517bbcd.tar.gz
G4BeamTest-e3079fb2367c26f767be41e6c313d960c517bbcd.zip
Thu 22 Aug 01:37:19 BST 2019
Diffstat (limited to 'src/G4BeamTestDetectorConstruction.cxx')
-rw-r--r--src/G4BeamTestDetectorConstruction.cxx200
1 files changed, 131 insertions, 69 deletions
diff --git a/src/G4BeamTestDetectorConstruction.cxx b/src/G4BeamTestDetectorConstruction.cxx
index 495330a..2942ec6 100644
--- a/src/G4BeamTestDetectorConstruction.cxx
+++ b/src/G4BeamTestDetectorConstruction.cxx
@@ -13,6 +13,7 @@
#include "G4BeamTestDetectorConstruction.h"
#include "G4BeamTestTank.h"
+#include "G4BeamTestSC4SD.h"
G4BeamTestDetectorConstruction::G4BeamTestDetectorConstruction():
origin_(0, 0, 0), verboseLevel_(0)/* , tankList_(0) */
@@ -27,22 +28,18 @@ G4BeamTestDetectorConstruction::~G4BeamTestDetectorConstruction()
G4VPhysicalVolume* G4BeamTestDetectorConstruction::Construct()
{
- /* if(tankList_.empty()) return NULL; */
-
CreateMaterials();
- /* // World origin in IceCube coordinates */
- /* origin_.set(delaunay.GetOrigin().x(), delaunay.GetOrigin().y(), zSnowBottom + zHalfLength); */
-
// Determine World dimensions
+ // G4double xWorld = 20.0 * CLHEP::m;
G4double xWorld = 4.0 * CLHEP::m;
G4double yWorld = 4.0 * CLHEP::m;
G4double zWorld = 4.0 * CLHEP::m;
// SC4 dimensions
- G4double scinHeight_ = 1 * 2.54 * CLHEP::cm;
- G4double scinWidth_ = 1 * 2.54 * CLHEP::cm;
- G4double scinThickness_ = 1 * 2.54 * CLHEP::cm;
+ G4double scinX_ = 0.25 * 2.54 * CLHEP::cm;
+ G4double scinY_ = 1 * 2.54 * CLHEP::cm;
+ G4double scinZ_ = 1 * 2.54 * CLHEP::cm;
// Create world volume
G4Box* world_box = new G4Box("solid_world", xWorld*0.5, yWorld*0.5, zWorld*0.5);
@@ -51,39 +48,61 @@ G4VPhysicalVolume* G4BeamTestDetectorConstruction::Construct()
G4VPhysicalVolume* worldPhys =
new G4PVPlacement(0, G4ThreeVector(), worldLog, "world", 0, false, 0);
- /* // Instantiation of a set of visualization attributes with cyan colour */
- /* G4VisAttributes * snowVisAtt = new G4VisAttributes(G4Colour(0., 1., 1.)); */
- /* // Assignment of the visualization attributes to the logical volume */
- /* snowLog->SetVisAttributes(snowVisAtt); */
-
- // Install tank
- /* BOOST_FOREACH(G4BeamTestTank* tank, tankList_) */
- /* { */
- tank_->InstallTank(worldPhys, origin_);
- // }
+ // Location calculations
+ G4ThreeVector mwpc1Vec = G4ThreeVector(198.8*CLHEP::cm-xWorld*0.5, 0, 0);
+ G4ThreeVector sc1Vec = mwpc1Vec + G4ThreeVector(-50.0*CLHEP::cm, 0, 0);
+ G4ThreeVector sc2Vec = mwpc1Vec + G4ThreeVector( 80.0*CLHEP::cm, 0, 0);
+ G4ThreeVector sc3Vec = mwpc1Vec + G4ThreeVector(180.0*CLHEP::cm, 0, 0);
+ G4ThreeVector mwpc2Vec = mwpc1Vec + G4ThreeVector(275.3*CLHEP::cm, 0, 0);
+ G4ThreeVector mwpc3Vec = mwpc2Vec + G4ThreeVector(284.6*CLHEP::cm, 0, 0);
+ G4ThreeVector mwpc4Vec = mwpc3Vec + G4ThreeVector(771.8*CLHEP::cm, 0, 0);
+ // G4ThreeVector tankVec = mwpc4Vec + G4ThreeVector(300.0*CLHEP::cm, 0, 0);
+ G4ThreeVector tankVec = G4ThreeVector(0, 0, 0);
+ G4ThreeVector sc4Vec = tankVec + G4ThreeVector(120.0*CLHEP::cm, 0, 0);
+
+ tank_->InstallTank(worldPhys, tankVec);
+
+ // // Define SC1
+ // G4Box* sc1_box = new G4Box("sc1",scinX_*0.5, scinY_*2.0, scinZ_*2.0);
+ // G4LogicalVolume* sc1Log =
+ // new G4LogicalVolume(sc1_box, G4Material::GetMaterial("SC4"), "log_sc1", 0, 0, 0);
+ // G4VPhysicalVolume* sc1Phys =
+ // new G4PVPlacement(0, sc1Vec, sc1Log, "sc1", worldLog, false, 0);
+
+ // // Define SC2
+ // G4Box* sc2_box = new G4Box("sc2",scinX_*0.5, scinY_*2.0, scinZ_*2.0);
+ // G4LogicalVolume* sc2Log =
+ // new G4LogicalVolume(sc2_box, G4Material::GetMaterial("SC4"), "log_sc2", 0, 0, 0);
+ // G4VPhysicalVolume* sc2Phys =
+ // new G4PVPlacement(0, sc2Vec, sc2Log, "sc2", worldLog, false, 0);
+
+ // // Define SC3
+ // G4Box* sc3_box = new G4Box("sc3",scinX_*0.5, scinY_*2.0, scinZ_*2.0);
+ // G4LogicalVolume* sc3Log =
+ // new G4LogicalVolume(sc3_box, G4Material::GetMaterial("SC4"), "log_sc3", 0, 0, 0);
+ // G4VPhysicalVolume* sc3Phys =
+ // new G4PVPlacement(0, sc3Vec, sc3Log, "sc3", worldLog, false, 0);
// Define SC4
- G4Box* sc4_box = new G4Box("sc4",scinHeight_*0.5, scinWidth_*0.5, scinThickness_*0.5);
+ G4Box* sc4_box = new G4Box("sc4",scinX_, scinY_*0.5, scinZ_*0.5);
G4LogicalVolume* sc4Log =
new G4LogicalVolume(sc4_box, G4Material::GetMaterial("SC4"), "log_sc4", 0, 0, 0);
G4VPhysicalVolume* sc4Phys =
- new G4PVPlacement(0, G4ThreeVector(1.2*CLHEP::m,0,0), sc4Log, "sc4", worldLog, false, 0);
+ new G4PVPlacement(0, sc4Vec, sc4Log, "sc4", worldLog, false, 0);
// User limits (energy cutoffs)
- // Do not create photons or electrons below cherenkov threshold
- // See also corresponding UserSpecialCuts in Physicslist !!!!
G4UserLimits* energyLimit = new G4UserLimits();
- /* energyLimit->SetUserMinEkine(280.0 * CLHEP::keV); // Cherenkov threshold of electrons in ice */
energyLimit->SetUserMinEkine(2.26 * CLHEP::eV); // Lower threshold of PMT - 550nm
- // energyLimit->SetUserMaxEkine(3.55 * CLHEP::eV); //upper threshold of PMT - 350nm
worldLog->SetUserLimits(energyLimit);
- /* snowLog->SetUserLimits(energyLimit); */
+ // sc1Log->SetUserLimits(energyLimit);
+ // sc2Log->SetUserLimits(energyLimit);
+ // sc3Log->SetUserLimits(energyLimit);
sc4Log->SetUserLimits(energyLimit);
-
- // G4SDManager* sdManager = G4SDManager::GetSDMpointer();
- // sc4SD_ = new G4BeamTestSC4SD("sc4_SD_", "HitsCollection");
- // sdManager->AddNewDetector(sc4SD_);
- // sc4Log->SetSensitiveDetector(sc4SD_);
+
+ G4SDManager* sdManager = G4SDManager::GetSDMpointer();
+ sc4SD_ = new G4BeamTestSC4SD("sc4_SD_", "SDHitsCollection");
+ sdManager->AddNewDetector(sc4SD_);
+ sc4Log->SetSensitiveDetector(sc4SD_);
return worldPhys;
}
@@ -93,16 +112,11 @@ G4VPhysicalVolume* G4BeamTestDetectorConstruction::Construct()
void G4BeamTestDetectorConstruction::CreateMaterials()
{
CreateAir();
- /* CreateIce(); */
- /* CreateSnow(); */
CreateWater();
CreatePlastic();
- /* CreatePerlite(); */
CreateGlassSphere();
CreateEffectiveDOMMaterial();
CreateSC4();
-
- //if(verboseLevel_>0) G4cout << *G4Material::GetMaterialTable() << G4endl;
}
/*****************************************************************/
@@ -122,16 +136,86 @@ void G4BeamTestDetectorConstruction::CreateWater()
water->AddElement(nistManager->FindOrBuildElement("H"), 2);
water->AddElement(nistManager->FindOrBuildElement("O"), 1);
- // pmt spectral response 300-650nm
- // https://docushare.icecube.wisc.edu/dsweb/Get/Document-6637/R7081-02%20data%20sheet.pdf<Paste>
- // TODO(shivesh): add more properties?
- const G4int water_bins = 2;
- // G4double water_ephot[water_bins] = {1.91 * CLHEP::eV, 4.13 * CLHEP::eV};
- G4double water_ephot[water_bins] = {0.1 * CLHEP::eV, 10 * CLHEP::eV};
- G4double water_refr[water_bins] = {1.33, 1.33};
+ // const G4int water_bins = 2;
+ // G4double water_ephot[water_bins] = {0.1 * CLHEP::eV, 10 * CLHEP::eV};
+ // G4double water_refr[water_bins] = {1.33, 1.33};
+
+ //From SFDETSIM water absorption
+ const G4int NUMENTRIES_water=60;
+
+ G4double ENERGY_water[NUMENTRIES_water] =
+ { 1.56962e-09*GeV, 1.58974e-09*GeV, 1.61039e-09*GeV, 1.63157e-09*GeV,
+ 1.65333e-09*GeV, 1.67567e-09*GeV, 1.69863e-09*GeV, 1.72222e-09*GeV,
+ 1.74647e-09*GeV, 1.77142e-09*GeV,1.7971e-09*GeV, 1.82352e-09*GeV,
+ 1.85074e-09*GeV, 1.87878e-09*GeV, 1.90769e-09*GeV, 1.93749e-09*GeV,
+ 1.96825e-09*GeV, 1.99999e-09*GeV, 2.03278e-09*GeV, 2.06666e-09*GeV,
+ 2.10169e-09*GeV, 2.13793e-09*GeV, 2.17543e-09*GeV, 2.21428e-09*GeV,
+ 2.25454e-09*GeV, 2.29629e-09*GeV, 2.33962e-09*GeV, 2.38461e-09*GeV,
+ 2.43137e-09*GeV, 2.47999e-09*GeV, 2.53061e-09*GeV, 2.58333e-09*GeV,
+ 2.63829e-09*GeV, 2.69565e-09*GeV, 2.75555e-09*GeV, 2.81817e-09*GeV,
+ 2.88371e-09*GeV, 2.95237e-09*GeV, 3.02438e-09*GeV, 3.09999e-09*GeV,
+ 3.17948e-09*GeV, 3.26315e-09*GeV, 3.35134e-09*GeV, 3.44444e-09*GeV,
+ 3.54285e-09*GeV, 3.64705e-09*GeV, 3.75757e-09*GeV, 3.87499e-09*GeV,
+ 3.99999e-09*GeV, 4.13332e-09*GeV, 4.27585e-09*GeV, 4.42856e-09*GeV,
+ 4.59258e-09*GeV, 4.76922e-09*GeV, 4.95999e-09*GeV, 5.16665e-09*GeV,
+ 5.39129e-09*GeV, 5.63635e-09*GeV, 5.90475e-09*GeV, 6.19998e-09*GeV };
+
+ // M Fechner : new ; define the water refraction index using refsg.F
+ //from skdetsim using the whole range.
+ G4double RINDEX1[NUMENTRIES_water] =
+ {1.32885, 1.32906, 1.32927, 1.32948, 1.3297, 1.32992, 1.33014,
+ 1.33037, 1.3306, 1.33084, 1.33109, 1.33134, 1.3316, 1.33186, 1.33213,
+ 1.33241, 1.3327, 1.33299, 1.33329, 1.33361, 1.33393, 1.33427, 1.33462,
+ 1.33498, 1.33536, 1.33576, 1.33617, 1.3366, 1.33705, 1.33753, 1.33803,
+ 1.33855, 1.33911, 1.3397, 1.34033, 1.341, 1.34172, 1.34248, 1.34331,
+ 1.34419, 1.34515, 1.3462, 1.34733, 1.34858, 1.34994, 1.35145, 1.35312,
+ 1.35498, 1.35707, 1.35943, 1.36211, 1.36518, 1.36872, 1.37287, 1.37776,
+ 1.38362, 1.39074, 1.39956, 1.41075, 1.42535};
+
+ G4double ABWFF = 1.0;
+ //T. Akiri: Values from Skdetsim
+ G4double ABSORPTION_water[NUMENTRIES_water] =
+ {
+ 16.1419*cm*ABWFF, 18.278*cm*ABWFF, 21.0657*cm*ABWFF, 24.8568*cm*ABWFF, 30.3117*cm*ABWFF,
+ 38.8341*cm*ABWFF, 54.0231*cm*ABWFF, 81.2306*cm*ABWFF, 120.909*cm*ABWFF, 160.238*cm*ABWFF,
+ 193.771*cm*ABWFF, 215.017*cm*ABWFF, 227.747*cm*ABWFF, 243.85*cm*ABWFF, 294.036*cm*ABWFF,
+ 321.647*cm*ABWFF, 342.81*cm*ABWFF, 362.827*cm*ABWFF, 378.041*cm*ABWFF, 449.378*cm*ABWFF,
+ 739.434*cm*ABWFF, 1114.23*cm*ABWFF, 1435.56*cm*ABWFF, 1611.06*cm*ABWFF, 1764.18*cm*ABWFF,
+ 2100.95*cm*ABWFF, 2292.9*cm*ABWFF, 2431.33*cm*ABWFF, 3053.6*cm*ABWFF, 4838.23*cm*ABWFF,
+ 6539.65*cm*ABWFF, 7682.63*cm*ABWFF, 9137.28*cm*ABWFF, 12220.9*cm*ABWFF, 15270.7*cm*ABWFF,
+ 19051.5*cm*ABWFF, 23671.3*cm*ABWFF, 29191.1*cm*ABWFF, 35567.9*cm*ABWFF, 42583*cm*ABWFF,
+ 49779.6*cm*ABWFF, 56465.3*cm*ABWFF, 61830*cm*ABWFF, 65174.6*cm*ABWFF, 66143.7*cm*ABWFF,
+ 64820*cm*ABWFF, 61635*cm*ABWFF, 57176.2*cm*ABWFF, 52012.1*cm*ABWFF, 46595.7*cm*ABWFF,
+ 41242.1*cm*ABWFF, 36146.3*cm*ABWFF, 31415.4*cm*ABWFF, 27097.8*cm*ABWFF, 23205.7*cm*ABWFF,
+ 19730.3*cm*ABWFF, 16651.6*cm*ABWFF, 13943.6*cm*ABWFF, 11578.1*cm*ABWFF, 9526.13*cm*ABWFF
+ };
+
+ G4double RAYFF = 0.625;
+ //T. Akiri: Values from Skdetsim
+ G4double RAYLEIGH_water[NUMENTRIES_water] = {
+ 386929*cm*RAYFF, 366249*cm*RAYFF, 346398*cm*RAYFF, 327355*cm*RAYFF, 309097*cm*RAYFF,
+ 291603*cm*RAYFF, 274853*cm*RAYFF, 258825*cm*RAYFF, 243500*cm*RAYFF, 228856*cm*RAYFF,
+ 214873*cm*RAYFF, 201533*cm*RAYFF, 188816*cm*RAYFF, 176702*cm*RAYFF, 165173*cm*RAYFF,
+ 154210*cm*RAYFF, 143795*cm*RAYFF, 133910*cm*RAYFF, 124537*cm*RAYFF, 115659*cm*RAYFF,
+ 107258*cm*RAYFF, 99318.2*cm*RAYFF, 91822.2*cm*RAYFF, 84754*cm*RAYFF, 78097.3*cm*RAYFF,
+ 71836.5*cm*RAYFF, 65956*cm*RAYFF, 60440.6*cm*RAYFF, 55275.4*cm*RAYFF, 50445.6*cm*RAYFF,
+ 45937*cm*RAYFF, 41735.2*cm*RAYFF, 37826.6*cm*RAYFF, 34197.6*cm*RAYFF, 30834.9*cm*RAYFF,
+ 27725.4*cm*RAYFF, 24856.6*cm*RAYFF, 22215.9*cm*RAYFF, 19791.3*cm*RAYFF, 17570.9*cm*RAYFF,
+ 15543*cm*RAYFF, 13696.6*cm*RAYFF, 12020.5*cm*RAYFF, 10504.1*cm*RAYFF, 9137.15*cm*RAYFF,
+ 7909.45*cm*RAYFF, 6811.3*cm*RAYFF, 5833.25*cm*RAYFF, 4966.2*cm*RAYFF, 4201.36*cm*RAYFF,
+ 3530.28*cm*RAYFF, 2944.84*cm*RAYFF, 2437.28*cm*RAYFF, 2000.18*cm*RAYFF, 1626.5*cm*RAYFF,
+ 1309.55*cm*RAYFF, 1043.03*cm*RAYFF, 821.016*cm*RAYFF, 637.97*cm*RAYFF, 488.754*cm*RAYFF
+ };
+
+ // G4MaterialPropertiesTable *mpt_water = new G4MaterialPropertiesTable ();
+ // mpt_water->AddProperty ("RINDEX", water_ephot, water_refr, water_bins);
+ // water->SetMaterialPropertiesTable(mpt_water);
G4MaterialPropertiesTable *mpt_water = new G4MaterialPropertiesTable ();
- mpt_water->AddProperty ("RINDEX", water_ephot, water_refr, water_bins);
+ mpt_water->AddProperty ("RINDEX", ENERGY_water, RINDEX1, NUMENTRIES_water);
+ mpt_water->AddProperty("ABSLENGTH",ENERGY_water, ABSORPTION_water, NUMENTRIES_water);
+ mpt_water->AddProperty("RAYLEIGH",ENERGY_water,RAYLEIGH_water,NUMENTRIES_water);
water->SetMaterialPropertiesTable(mpt_water);
+
}
/*****************************************************************/
@@ -139,52 +223,32 @@ void G4BeamTestDetectorConstruction::CreateWater()
void G4BeamTestDetectorConstruction::CreatePlastic()
{
G4NistManager* nistManager = G4NistManager::Instance();
- /*
- G4Material* plastic = new G4Material("Plastic", 1.5 * CLHEP::g / CLHEP::cm3, 3, kStateSolid);
- plastic->AddElement(nistManager->FindOrBuildElement("H"), 20);
- plastic->AddElement(nistManager->FindOrBuildElement("C"), 10);
- plastic->AddElement(nistManager->FindOrBuildElement("O"), 5);
- */
-
- // POM
G4Material* plastic = new G4Material("Plastic", 1.425 * CLHEP::g / CLHEP::cm3, 3, kStateSolid);
plastic->AddElement(nistManager->FindOrBuildElement("H"), 2);
plastic->AddElement(nistManager->FindOrBuildElement("C"), 1);
plastic->AddElement(nistManager->FindOrBuildElement("O"), 1);
-
- //nistManager->FindOrBuildMaterial("G4_POLYOXYMETHYLENE");
-
}
/*****************************************************************/
void G4BeamTestDetectorConstruction::CreateGlassSphere()
{
- // Elemental composition not exact for detailed line-up look at
- // docushare collection 690 -> XRF and ICP Analysis of Pressure Sphere Glass
-
- // 20 lbs. weight = 9072 g
- // 6.5" outer radius & 0.5" thickness = 4024 cm3
- G4NistManager* nistManager = G4NistManager::Instance();
- // G4Material* glass = new G4Material("Glass", 2.254 * CLHEP::g / CLHEP::cm3, 2, kStateSolid);
- // glass->AddElement(nistManager->FindOrBuildElement("Si"), 1);
- // glass->AddElement(nistManager->FindOrBuildElement("O"), 2);
-
// http://hypernews.slac.stanford.edu/HyperNews/geant4/get/AUX/2013/03/11/12.39-85121-chDetectorConstruction.cc
+ G4NistManager* nistManager = G4NistManager::Instance();
// Define elements for all materials not found in the NIST database
G4Element* Si = nistManager->FindOrBuildElement("Si");
G4Element* B = nistManager->FindOrBuildElement("B");
G4Element* O = nistManager->FindOrBuildElement("O");
G4Element* Na = nistManager->FindOrBuildElement("Na");
G4Element* Al = nistManager->FindOrBuildElement("Al");
- G4Element* K = nistManager->FindOrBuildElement("K");
+ G4Element* K = nistManager->FindOrBuildElement("K");
G4double density;
G4int ncomponents;
G4double fractionmass;
G4Material* glass = new G4Material("Glass", density= 2.23*CLHEP::g/CLHEP::cm3, ncomponents=6);
glass->AddElement(B, fractionmass=0.040064);
- glass->AddElement(O, fractionmass=0.539562);
+ glass->AddElement(O, fractionmass=0.539562);
glass->AddElement(Na, fractionmass=0.028191);
glass->AddElement(Al, fractionmass=0.011644);
glass->AddElement(Si, fractionmass=0.377220);
@@ -192,7 +256,6 @@ void G4BeamTestDetectorConstruction::CreateGlassSphere()
// pmt spectral response 300-650nm
// https://docushare.icecube.wisc.edu/dsweb/Get/Document-6637/R7081-02%20data%20sheet.pdf<Paste>
- // TODO(shivesh): add more properties?
const G4int glass_bins = 2;
// G4double glass_ephot[glass_bins] = {1.91 * CLHEP::eV, 4.13 * CLHEP::eV};
G4double glass_ephot[glass_bins] = {0.1 * CLHEP::eV, 10 * CLHEP::eV};
@@ -216,7 +279,7 @@ void G4BeamTestDetectorConstruction::CreateEffectiveDOMMaterial()
// const G4int glass_bins = 2;
// G4double glass_ephot[glass_bins] = {1.91 * CLHEP::eV, 4.13 * CLHEP::eV};
- // glass
+ // glass
// G4double glass_ephot[glass_bins] = {0.1 * CLHEP::eV, 10 * CLHEP::eV};
// G4double glass_refr[glass_bins] = {1.47, 1.47};
// G4MaterialPropertiesTable *mpt_glass = new G4MaterialPropertiesTable ();
@@ -227,7 +290,6 @@ void G4BeamTestDetectorConstruction::CreateEffectiveDOMMaterial()
void G4BeamTestDetectorConstruction::CreateSC4()
{
G4NistManager* nistManager = G4NistManager::Instance();
- // POM
G4Material* plastic = new G4Material("SC4", 1.425 * CLHEP::g / CLHEP::cm3, 3, kStateSolid);
plastic->AddElement(nistManager->FindOrBuildElement("H"), 2);
plastic->AddElement(nistManager->FindOrBuildElement("C"), 1);