aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorshivesh <s.p.mandalia@qmul.ac.uk>2018-08-21 15:36:34 +0100
committershivesh <s.p.mandalia@qmul.ac.uk>2018-08-21 15:36:34 +0100
commit2925dbae7f488c3113b5f574eca1ceaba0ffdaac (patch)
tree40d8a7000690af2ba40433fc77c38fd23c841b25 /src
parent3e2608bb7c803eea644edf9fc7afa5bf3921a429 (diff)
downloadG4BeamTest-2925dbae7f488c3113b5f574eca1ceaba0ffdaac.tar.gz
G4BeamTest-2925dbae7f488c3113b5f574eca1ceaba0ffdaac.zip
Tue 21 Aug 15:36:34 BST 2018
Diffstat (limited to 'src')
-rw-r--r--src/G4BeamTestDetectorConstruction.cxx93
-rw-r--r--src/G4BeamTestEMPhysics.cxx13
-rw-r--r--src/G4BeamTestGeneralPhysics.cxx11
-rw-r--r--src/G4BeamTestHadronPhysics.cxx.backup (renamed from src/G4BeamTestHadronPhysics.cxx)13
-rw-r--r--src/G4BeamTestIonPhysics.cxx.backup (renamed from src/G4BeamTestIonPhysics.cxx)12
-rw-r--r--src/G4BeamTestMuonPhysics.cxx15
-rw-r--r--src/G4BeamTestPhysicsList.cxx12
-rw-r--r--src/G4BeamTestRunManager.cxx14
-rw-r--r--src/G4BeamTestTank.cxx470
-rw-r--r--src/G4BeamTestUserSteppingAction.cxx16
-rw-r--r--src/G4BeamTestUserTrackingAction.cxx16
-rw-r--r--src/G4Interface.cxx244
-rw-r--r--src/G4TankIceSD.cxx80
13 files changed, 328 insertions, 681 deletions
diff --git a/src/G4BeamTestDetectorConstruction.cxx b/src/G4BeamTestDetectorConstruction.cxx
index 6eeaa54..cf75551 100644
--- a/src/G4BeamTestDetectorConstruction.cxx
+++ b/src/G4BeamTestDetectorConstruction.cxx
@@ -30,71 +30,31 @@ G4VPhysicalVolume* G4BeamTestDetectorConstruction::Construct()
CreateMaterials();
- // Determine bottom z position of snow volume
- G4double zSnowBottom(tankList_.at(0)->GetPos().z());
- BOOST_FOREACH(G4BeamTestTank* tank, tankList_)
- {
- // z position of bottom of tank
- G4double z = tank->GetPos().z() - 0.5*tank->GetTankHeight_G4();
- zSnowBottom = std::min(z, zSnowBottom);
- }
-
- // Subtract safety margin
- zSnowBottom -= 1.0*CLHEP::m;
-
- // Triangulate snow surface
- G4Delaunay delaunay;
- BOOST_FOREACH(G4BeamTestTank* tank, tankList_)
- {
- // z position of snow surface
- G4double z = tank->GetPos().z() + 0.5 * tank->GetTankHeight_G4() + tank->GetSnowHeight_G4();
-
- delaunay.AddPoint(tank->GetDelaunayPoint1().x(),
- tank->GetDelaunayPoint1().y(),
- z - zSnowBottom);
- delaunay.AddPoint(tank->GetDelaunayPoint2().x(),
- tank->GetDelaunayPoint2().y(),
- z - zSnowBottom);
- delaunay.AddPoint(tank->GetDelaunayPoint3().x(),
- tank->GetDelaunayPoint3().y(),
- z - zSnowBottom);
- }
-
- // Create tesselated snow volume
- G4TessellatedSolid* solidSnow = new G4TessellatedSolid("solid_snow");
- delaunay.BuildSolid(solidSnow, 50.0*CLHEP::m, 100.0*CLHEP::m);
+ /* // World origin in IceCube coordinates */
+ /* origin_.set(delaunay.GetOrigin().x(), delaunay.GetOrigin().y(), zSnowBottom + zHalfLength); */
// Determine World dimensions
- G4double xHalfLength = 0.5 * (delaunay.GetXmax() - delaunay.GetXmin());
- G4double yHalfLength = 0.5 * (delaunay.GetYmax() - delaunay.GetYmin());
- G4double zHalfLength = 0.5 * (delaunay.GetZmax() + 20.0 * CLHEP::m); // 20 m of atmosphere
-
- // World origin in IceCube coordinates
- origin_.set(delaunay.GetOrigin().x(), delaunay.GetOrigin().y(), zSnowBottom + zHalfLength);
+ G4double xWorld = 20.0 * CLHEP::m;
+ G4double yWorld = 20.0 * CLHEP::m;
+ G4double zWorld = 20.0 * CLHEP::m;
// Create world volume
- G4Box* world_box = new G4Box("solid_world", xHalfLength, yHalfLength, zHalfLength);
+ G4Box* world_box = new G4Box("solid_world", xWorld, yWorld, zWorld);
G4LogicalVolume* worldLog =
- new G4LogicalVolume(world_box, G4Material::GetMaterial("Air"), "log_world", 0, 0, 0);
+ new G4LogicalVolume(world_box, G4Material::GetMaterial("G4_AIR"), "log_world", 0, 0, 0);
G4VPhysicalVolume* worldPhys =
new G4PVPlacement(0, G4ThreeVector(), worldLog, "world", 0, false, 0);
- // Snow layer
- G4LogicalVolume* snowLog =
- new G4LogicalVolume(solidSnow, G4Material::GetMaterial("Snow"), "log_snow", 0, 0, 0);
- G4VPhysicalVolume* snowPhys =
- new G4PVPlacement(0, G4ThreeVector(0, 0, -zHalfLength), snowLog, "snow", worldLog, 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);
+ /* // 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 tanks
- BOOST_FOREACH(G4BeamTestTank* tank, tankList_)
- {
- tank->InstallTank(snowPhys, origin_);
- }
+ // Install tank
+ /* BOOST_FOREACH(G4BeamTestTank* tank, tankList_) */
+ /* { */
+ tank_->InstallTank(worldPhys, origin_);
+ // }
// User limits (energy cutoffs)
// Do not create photons or electrons below cherenkov threshold
@@ -102,7 +62,7 @@ G4VPhysicalVolume* G4BeamTestDetectorConstruction::Construct()
G4UserLimits* energyLimit = new G4UserLimits();
energyLimit->SetUserMinEkine(280.0 * CLHEP::keV); // Cherenkov threshold of electrons in ice TODO(shivesh)
worldLog->SetUserLimits(energyLimit);
- snowLog->SetUserLimits(energyLimit);
+ /* snowLog->SetUserLimits(energyLimit); */
return worldPhys;
}
@@ -128,7 +88,7 @@ void G4BeamTestDetectorConstruction::CreateMaterials()
void G4BeamTestDetectorConstruction::CreateAir()
{
G4NistManager* nistManager = G4NistManager::Instance();
- nistManager->ConstructNewGasMaterial("Air","G4_AIR"/* , (273.15 - 40.0)*CLHEP::kelvin, 670.0E-3*CLHEP::bar */);
+ nistManager->ConstructNewGasMaterial("Air","G4_AIR" , (273.15 + 20.0)*CLHEP::kelvin, 1.0*CLHEP::atmosphere);
}
/*****************************************************************/
@@ -136,10 +96,19 @@ void G4BeamTestDetectorConstruction::CreateAir()
void G4BeamTestDetectorConstruction::CreateWater()
{
G4NistManager* nistManager = G4NistManager::Instance();
- // G4Material* ice = new G4Material("Water", 1.0 * CLHEP::g / CLHEP::cm3, 2, kStateLiquid);
- // ice->AddElement(nistManager->FindOrBuildElement("H"), 2);
- // ice->AddElement(nistManager->FindOrBuildElement("O"), 1);
- nistManager->ConstructNewGasMaterial("Water","G4_WATER");
+ G4Material* water = new G4Material("Water", 1.0 * CLHEP::g / CLHEP::cm3, 2, kStateLiquid);
+ 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_refr[water_bins] = {1.33, 1.33};
+ G4MaterialPropertiesTable *mpt_water = new G4MaterialPropertiesTable ();
+ mpt_water->AddProperty ("RINDEX", water_ephot, water_refr, water_bins);
+ water->SetMaterialPropertiesTable(mpt_water);
}
/*****************************************************************/
diff --git a/src/G4BeamTestEMPhysics.cxx b/src/G4BeamTestEMPhysics.cxx
index d36207a..55ecf99 100644
--- a/src/G4BeamTestEMPhysics.cxx
+++ b/src/G4BeamTestEMPhysics.cxx
@@ -1,16 +1,3 @@
-/*
- * copyright (C) 2010
- * The Icecube Collaboration
- *
- * $Id: G4BeamTestEMPhysics.cxx 86420 2012-03-20 16:00:37Z kislat $
- *
- * @version $Revision: 86420 $
- * @date $LastChangedDate: 2012-03-20 16:00:37 +0000 (Tue, 20 Mar 2012) $
- * @author Fabian Kislat <fabian.kislat@desy.de>, Peter Nießen (tanktop)
- * Last changed by: $LastChangedBy: kislat $
- */
-
-
#include <globals.hh>
#include <G4ParticleDefinition.hh>
#include <G4ParticleTable.hh>
diff --git a/src/G4BeamTestGeneralPhysics.cxx b/src/G4BeamTestGeneralPhysics.cxx
index 2def9b4..93304a8 100644
--- a/src/G4BeamTestGeneralPhysics.cxx
+++ b/src/G4BeamTestGeneralPhysics.cxx
@@ -1,14 +1,3 @@
-/*
- * copyright (C) 2010
- * The Icecube Collaboration
- *
- * $Id: G4BeamTestGeneralPhysics.cxx 152849 2017-01-20 21:44:25Z jgonzalez $
- *
- * @version $Revision: 152849 $
- * @date $LastChangedDate: 2017-01-20 21:44:25 +0000 (Fri, 20 Jan 2017) $
- * @author Fabian Kislat <fabian.kislat@desy.de> Last changed by: $LastChangedBy: jgonzalez $
- */
-
#include "G4BeamTestGeneralPhysics.h"
#include <iomanip>
diff --git a/src/G4BeamTestHadronPhysics.cxx b/src/G4BeamTestHadronPhysics.cxx.backup
index 5150b67..1e37ed5 100644
--- a/src/G4BeamTestHadronPhysics.cxx
+++ b/src/G4BeamTestHadronPhysics.cxx.backup
@@ -1,16 +1,3 @@
-/*
- * copyright (C) 2010
- * The Icecube Collaboration
- *
- * $Id: G4BeamTestHadronPhysics.cxx 152814 2017-01-19 21:34:52Z jgonzalez $
- *
- * @version $Revision: 152814 $
- * @date $LastChangedDate: 2017-01-19 21:34:52 +0000 (Thu, 19 Jan 2017) $
- * @author Fabian Kislat <fabian.kislat@desy.de> Last changed by: $LastChangedBy: jgonzalez $
- *
- * Copied from tanktop
- */
-
#include <iomanip>
#include <globals.hh>
diff --git a/src/G4BeamTestIonPhysics.cxx b/src/G4BeamTestIonPhysics.cxx.backup
index 3c7e553..a8cc573 100644
--- a/src/G4BeamTestIonPhysics.cxx
+++ b/src/G4BeamTestIonPhysics.cxx.backup
@@ -1,15 +1,3 @@
-/*
- * copyright (C) 2010
- * The Icecube Collaboration
- *
- * $Id: G4BeamTestIonPhysics.cxx 86420 2012-03-20 16:00:37Z kislat $
- *
- * @version $Revision: 86420 $
- * @date $LastChangedDate: 2012-03-20 16:00:37 +0000 (Tue, 20 Mar 2012) $
- * @author Fabian Kislat <fabian.kislat@desy.de>, Peter Nießen (tanktop)
- * Last changed by: $LastChangedBy: kislat $
- */
-
#include <iomanip>
#include <globals.hh>
diff --git a/src/G4BeamTestMuonPhysics.cxx b/src/G4BeamTestMuonPhysics.cxx
index 92264a2..2c5404e 100644
--- a/src/G4BeamTestMuonPhysics.cxx
+++ b/src/G4BeamTestMuonPhysics.cxx
@@ -1,16 +1,3 @@
-/*
- * copyright (C) 2010
- * The Icecube Collaboration
- *
- * $Id: G4BeamTestMuonPhysics.cxx 86420 2012-03-20 16:00:37Z kislat $
- *
- * @version $Revision: 86420 $
- * @date $LastChangedDate: 2012-03-20 16:00:37 +0000 (Tue, 20 Mar 2012) $
- * @author Fabian Kislat <fabian.kislat@desy.de>, Peter Nießen (tanktop)
- * Last changed by: $LastChangedBy: kislat $
- */
-
-
#include <globals.hh>
#include <G4ParticleDefinition.hh>
#include <G4ParticleTable.hh>
@@ -78,7 +65,7 @@ void G4BeamTestMuonPhysics::ConstructProcess()
pManager->AddProcess(&muMinusBremsstrahlung_, -1, 3, 3);
pManager->AddProcess(&muMinusPairProduction_, -1, 4, 4);
- pManager->AddRestProcess(&muMinusCaptureAtRest_);
+ pManager->AddRestProcess(&muMinusCapture_);
// Tau Plus Physics
pManager = G4TauPlus::TauPlus()->GetProcessManager();
diff --git a/src/G4BeamTestPhysicsList.cxx b/src/G4BeamTestPhysicsList.cxx
index 5a5befd..0c27b0b 100644
--- a/src/G4BeamTestPhysicsList.cxx
+++ b/src/G4BeamTestPhysicsList.cxx
@@ -1,15 +1,3 @@
-/**
- * Copyright (C) 2009
- * The IceCube collaboration
- * ID: $Id: G4BeamTestPhysicsList.cxx 152849 2017-01-20 21:44:25Z jgonzalez $
- *
- * @file G4BeamTestPhysicsList.cxx
- * @version $Rev: 152849 $
- * @date $Date: 2017-01-20 21:44:25 +0000 (Fri, 20 Jan 2017) $
- * @author Tilo Waldenmaier, Thomas Melzig, Javier Gonzalez
- */
-
-
#include <globals.hh>
#include <G4Version.hh>
#include "G4BeamTestPhysicsList.h"
diff --git a/src/G4BeamTestRunManager.cxx b/src/G4BeamTestRunManager.cxx
index 753deb8..5ed2e05 100644
--- a/src/G4BeamTestRunManager.cxx
+++ b/src/G4BeamTestRunManager.cxx
@@ -1,20 +1,8 @@
-/**
- * Copyright (C) 2009
- * The IceCube collaboration
- * ID: $Id: G4BeamTestRunManager.cxx 162348 2018-04-25 20:09:46Z nega $
- *
- * @file G4BeamTestRunManager.cxx
- * @version $Rev: 162348 $
- * @date $Date: 2018-04-25 21:09:46 +0100 (Wed, 25 Apr 2018) $
- * @author Tilo Waldenmaier
- */
-
-
// On Sun, to prevent conflict with ObjectSpace, G4Timer.hh has to be
// loaded *before* globals.hh...
#include "G4Timer.hh"
-#include <g4-tankresponse/g4classes/G4BeamTestRunManager.h>
+#include "G4BeamTestRunManager.h"
#include <G4ParticleGun.hh>
#include <G4Run.hh>
diff --git a/src/G4BeamTestTank.cxx b/src/G4BeamTestTank.cxx
index 4f12c7a..2fc5bed 100644
--- a/src/G4BeamTestTank.cxx
+++ b/src/G4BeamTestTank.cxx
@@ -1,25 +1,3 @@
-/**
- * Copyright (C) 2009
- * The IceCube collaboration
- * ID: $Id: G4BeamTestTank.cxx 158930 2017-10-20 01:17:41Z cweaver $
- *
- * @file G4BeamTestTank.cxx
- * @version $Rev: 158930 $
- * @date $Date: 2017-10-20 02:17:41 +0100 (Fri, 20 Oct 2017) $
- * @author Tilo Waldenmaier, Thomas Melzig
- */
-
-
-#include <g4-tankresponse/g4classes/G4BeamTestTank.h>
-#include <g4-tankresponse/g4classes/G4TankIceSD.h>
-#include <icetray/I3Units.h>
-
-#include <icetray/OMKey.h>
-#include <dataclasses/TankKey.h>
-#include <dataclasses/geometry/I3TankGeo.h>
-#include <dataclasses/geometry/I3Geometry.h>
-#include <dataclasses/I3Position.h>
-
#include <G4LogicalVolume.hh>
#include <G4PVPlacement.hh>
#include <G4Material.hh>
@@ -33,7 +11,10 @@
#include <G4UserLimits.hh>
-#include <boost/foreach.hpp>
+/* #include <boost/foreach.hpp> */
+
+#include "G4BeamTestTank.h"
+#include "G4TankIceSD.h"
//prevent gcc to make something stupid with pretended unused variables
#ifdef __GNUC__
@@ -43,121 +24,26 @@
#endif
-G4BeamTestTank::G4BeamTestTank(const TankKey& tankKey, const I3Geometry& geometry):
-tankKey_(tankKey), geometry_(geometry)
+G4BeamTestTank::G4BeamTestTank()
{
- const I3StationGeoMap& stationMap = geometry.stationgeo;
- unsigned int tankID = tankKey.tank==TankKey::TankA?0:1;
- I3StationGeoMap::const_iterator station_iter = stationMap.find(tankKey.string);
-
- if(station_iter==stationMap.end())
- {
- log_fatal("The requested station %d in not in the geometry!", tankKey.string);
- return;
- }
-
- if(station_iter->second.size()<tankID)
- {
- log_fatal("The number of tanks in station %d is not correct!", tankKey.string);
- return;
- }
- const I3TankGeo& tankGeo = station_iter->second.at(tankID);
-
// Get tank dimensions
- tankThickness_ = 0.5*CLHEP::cm;
- tankHeight_ = (tankGeo.tankheight / I3Units::m) * CLHEP::m + tankThickness_;
- innerRadius_ = (tankGeo.tankradius / I3Units::m) * CLHEP::m;
+ tankThickness_ = 0.5*CLHEP::cm; // TODO(shivesh) : check thickness
+ tankHeight_ = 76.83 * 2.54 * CLHEP::cm;
+ innerRadius_ = 32 * 2.54 * CLHEP::cm;
outerRadius_ = innerRadius_ + tankThickness_;
-
- // Get fill and snow heights
- fillHeight_ = (tankGeo.fillheight / I3Units::m) * CLHEP::m;
- snowHeight_ = (tankGeo.snowheight / I3Units::m) * CLHEP::m;
- perliteHeight_ = tankHeight_ - tankThickness_ - fillHeight_;
-
+
+ // Get fill height
+ fillHeight_ = 55.1 * 2.54 * CLHEP::cm;
+
// Set DOM dimensions
glassOuterRadius_ = 6.5 * 2.54 * CLHEP::cm; // 6.5" outer glass sphere radius
glassThickness_ = 0.5 * 2.54 * CLHEP::cm; // 0.5" glass sphere thickness
-
- // Calculate tank position (tank center)
- // tankGeo.position corresponds to the average position of the two DOMs in a tank
- position_.set((tankGeo.position.GetX() / I3Units::m) * CLHEP::m,
- (tankGeo.position.GetY() / I3Units::m) * CLHEP::m,
- (tankGeo.position.GetZ() / I3Units::m) * CLHEP::m - fillHeight_ + 0.5*tankHeight_);
-
- // Get positions of the doms relativ to tank center
- BOOST_FOREACH(const OMKey& omKey, tankGeo.omKeyList_)
- {
- I3OMGeoMap::const_iterator omGeo_iter = geometry_.omgeo.find(omKey);
- if(omGeo_iter==geometry_.omgeo.end())
- {
- log_error_stream(omKey << " is missing in Tank " << tankKey_);
- continue;
- }
-
- G4ThreeVector relPos(omGeo_iter->second.position.GetX() - tankGeo.position.GetX(),
- omGeo_iter->second.position.GetY() - tankGeo.position.GetY(),
- omGeo_iter->second.position.GetZ() - tankGeo.position.GetZ());
-
- relDomPositions_[omKey] = (relPos / I3Units::m) * CLHEP::m;
- }
-
- //
- // Calculate Delaunay points
- //
- G4ThreeVector triangleDir(NAN, NAN, NAN);
- switch(station_iter->second.size())
- {
- case 1: // Single tank
- {
- // Vector orthogonal to DOM positions
- triangleDir.set(relDomPositions_.begin()->second.y(),
- -relDomPositions_.begin()->second.x(),
- 0.0);
- break;
- }
- case 2: // Two tanks
- {
- const I3TankGeo& neighborGeo = station_iter->second.at(tankID==0?1:0);
- G4ThreeVector neighborPos(neighborGeo.position.GetX(),
- neighborGeo.position.GetY(),
- neighborGeo.position.GetZ());
-
- // Convert to G4 units
- neighborPos *= CLHEP::m/I3Units::m;
-
- // Same z position same as other tank
- neighborPos.setZ(position_.z());
-
- triangleDir = position_ - neighborPos;
- break;
- }
- default:
- {
- log_fatal("Invalid number of tanks (%zu) in station %d!",
- station_iter->second.size(), tankKey_.string);
- break;
- }
- }
-
- // side length
- double triangleLength = 10.0 * CLHEP::m;
-
- triangleDir.setMag(0.5*triangleLength/cos(CLHEP::pi/6.0));
- delaunayPoint1_ = position_ + triangleDir;
-
- // Rotate by 120 deg
- triangleDir.rotateZ(CLHEP::pi/1.5);
- delaunayPoint2_ = position_ + triangleDir;
-
- // Rotate by 120 deg
- triangleDir.rotateZ(CLHEP::pi/1.5);
- delaunayPoint3_ = position_ + triangleDir;
}
G4BeamTestTank::~G4BeamTestTank()
{
-
+
}
@@ -166,217 +52,219 @@ G4VPhysicalVolume* G4BeamTestTank::InstallTank(G4VPhysicalVolume* mother, const
// User limits (energy cutoffs)
// Do not create photons or electrons below cherenkov threshold
// See also corresponding UserSpecialCuts in Physicslist !!!!
- // Maybe do all of this as stepping action ??????
+ // TODO(shivesh): Maybe do all of this as stepping action ??????
G4UserLimits* energyLimit = new G4UserLimits();
- energyLimit->SetUserMinEkine(280.0 * CLHEP::keV); // Cherenkov threshold of electrons in ice
-
- std::string tankName=boost::lexical_cast<std::string>(tankKey_);
-
- // Define plastic frame
+ energyLimit->SetUserMinEkine(264.1 * CLHEP::keV); // Cherenkov threshold of electrons in water
+
+ // std::string tankName=boost::lexical_cast<std::string>(tankKey_);
+ std::string tankName = "BTT";
+
+ // Define plastic frame TODO(shivesh): plastic or polyethelene?
G4Material* plastic = G4Material::GetMaterial("Plastic");
G4Tubs* solidTank = new G4Tubs(("solid_tank_" + tankName).c_str(),
0.0 * CLHEP::m, outerRadius_, 0.5 * tankHeight_,
0.0 * CLHEP::deg, 360.0 * CLHEP::deg);
tankLog_ = new G4LogicalVolume(solidTank, plastic,
("log_tank_" + tankName).c_str(), 0, 0, 0);
-
- // Define ice volume
- G4Material* ice = G4Material::GetMaterial("Ice");
- G4Tubs* solidIce = new G4Tubs(("solid_ice_" + tankName).c_str(),
+
+ // Define water volume
+ G4Material* water = G4Material::GetMaterial("Water");
+ G4Tubs* solidWater = new G4Tubs(("solid_water_" + tankName).c_str(),
0.0 * CLHEP::m, innerRadius_, 0.5 * fillHeight_,
0.0 * CLHEP::deg, 360.0 * CLHEP::deg);
- G4LogicalVolume* logIce =
- new G4LogicalVolume(solidIce, ice, ("log_ice_" + tankName).c_str(), 0, 0, 0);
- G4ThreeVector physIcePosition(0, 0, -0.5*tankHeight_ + tankThickness_ + 0.5*fillHeight_);
- G4VPhysicalVolume* physIce ATTRIBUTE_UNUSED =
- new G4PVPlacement(0, physIcePosition, logIce,
- ("ice_" + tankName).c_str(), tankLog_, false, 0);
-
- // Define perlite volume
- G4Material* perlite = G4Material::GetMaterial("Perlite");
- G4Tubs* solidPerlite = new G4Tubs(("solid_perlite_" + tankName).c_str(),
- 0.0 * CLHEP::m, innerRadius_, 0.5 * perliteHeight_,
+ G4LogicalVolume* logWater =
+ new G4LogicalVolume(solidWater, water, ("log_water_" + tankName).c_str(), 0, 0, 0);
+ G4ThreeVector physWaterPosition(0, 0, -0.5*tankHeight_ + tankThickness_ + 0.5*fillHeight_);
+ G4VPhysicalVolume* physWater ATTRIBUTE_UNUSED =
+ new G4PVPlacement(0, physWaterPosition, logWater,
+ ("water_" + tankName).c_str(), tankLog_, false, 0);
+
+ // Define air volume
+ G4Material* air = G4Material::GetMaterial("Air");
+ G4Tubs* solidAir = new G4Tubs(("solid_air_" + tankName).c_str(),
+ 0.0 * CLHEP::m, innerRadius_, 0.5 * airHeight_,
0.0 * CLHEP::deg, 360.0 * CLHEP::deg);
- G4LogicalVolume* logPerlite =
- new G4LogicalVolume(solidPerlite, perlite, ("log_perlite_" + tankName).c_str(), 0, 0, 0);
- G4ThreeVector physPerlitePosition(0, 0, -0.5 * tankHeight_ + 0.5 * CLHEP::cm + fillHeight_ +
- 0.5 * perliteHeight_);
- G4VPhysicalVolume* physPerlite ATTRIBUTE_UNUSED =
- new G4PVPlacement(0, physPerlitePosition, logPerlite,
- ("perlite_" + tankName).c_str(), tankLog_, false, 0);
-
+ G4LogicalVolume* logAir =
+ new G4LogicalVolume(solidAir, air, ("log_air_" + tankName).c_str(), 0, 0, 0);
+ G4ThreeVector physAirPosition(0, 0, -0.5 * tankHeight_ + 0.5 * CLHEP::cm + fillHeight_ +
+ 0.5 * airHeight_);
+ G4VPhysicalVolume* physAir_UNUSED =
+ new G4PVPlacement(0, physAirPosition, logAir,
+ ("air_" + tankName).c_str(), tankLog_, false, 0);
+
// Define glass sphere & effective DOM material splitted in upper and lower part
G4Material* glass = G4Material::GetMaterial("Glass");
G4Material* effectiveDOM = G4Material::GetMaterial("effectiveDOM");
-
- std::map<OMKey, G4ThreeVector> domPosIce;
- std::map<OMKey, G4ThreeVector>::const_iterator om_iter;
- for(om_iter=relDomPositions_.begin(); om_iter!=relDomPositions_.end(); ++om_iter)
- {
- const OMKey& omKey = om_iter->first;
-
- G4ThreeVector upperDOMpos(om_iter->second.x(), om_iter->second.y(), -0.5 * perliteHeight_);
- G4ThreeVector lowerDOMpos(om_iter->second.x(), om_iter->second.y(), 0.5 * fillHeight_);
-
- domPosIce[omKey] = lowerDOMpos;
-
- std::string omName=boost::lexical_cast<std::string>(omKey);
-
- G4Sphere *upperglasssphere = new G4Sphere (("solid_dom_up_" + omName).c_str(),
- 0.0 * CLHEP::m, glassOuterRadius_,
- 0.0 * CLHEP::deg, 360.0 * CLHEP::deg,
- 0.0 * CLHEP::deg, 90.0 * CLHEP::deg);
- G4Sphere *lowerglasssphere = new G4Sphere (("solid_dom_lo_" + omName).c_str(),
- 0.0 * CLHEP::m, glassOuterRadius_,
- 0.0 * CLHEP::deg, 360.0 * CLHEP::deg,
- 90.0 * CLHEP::deg, 180.0 * CLHEP::deg);
-
- G4double domInnerRadius = glassOuterRadius_ - glassThickness_;
- G4Sphere *upperdomsphere = new G4Sphere (("solid_inside_dom_up_" + omName).c_str(),
- 0.0 * CLHEP::m, domInnerRadius,
+
+ // std::map<OMKey, G4ThreeVector> domPosIce;
+ // std::map<OMKey, G4ThreeVector>::const_iterator om_iter;
+ // for(om_iter=relDomPositions_.begin(); om_iter!=relDomPositions_.end(); ++om_iter)
+ // {
+ /* const OMKey& omKey = om_iter->first; */
+
+ G4ThreeVector upperDOMpos(0, 0, -0.5 * airHeight_);
+ G4ThreeVector lowerDOMpos(0, 0, 0.5 * fillHeight_);
+
+ // domPosIce[omKey] = lowerDOMpos;
+
+ // std::string omName=boost::lexical_cast<std::string>(omKey);
+ std::string omName="BTOM";
+
+ G4Sphere *upperglasssphere = new G4Sphere (("solid_dom_up_" + omName).c_str(),
+ 0.0 * CLHEP::m, glassOuterRadius_,
0.0 * CLHEP::deg, 360.0 * CLHEP::deg,
0.0 * CLHEP::deg, 90.0 * CLHEP::deg);
- G4Sphere *lowerdomsphere = new G4Sphere (("solid_inside_dom_lo_" + omName).c_str(),
- 0.0 * CLHEP::m, domInnerRadius,
+ G4Sphere *lowerglasssphere = new G4Sphere (("solid_dom_lo_" + omName).c_str(),
+ 0.0 * CLHEP::m, glassOuterRadius_,
0.0 * CLHEP::deg, 360.0 * CLHEP::deg,
90.0 * CLHEP::deg, 180.0 * CLHEP::deg);
-
- G4LogicalVolume* logUpperGlass =
- new G4LogicalVolume(upperglasssphere, glass,
- ("log_dom_up_" + omName).c_str(), 0, 0, 0);
- G4LogicalVolume* logLowerGlass =
- new G4LogicalVolume(lowerglasssphere, glass,
- ("log_dom_lo_" + omName).c_str(), 0, 0, 0);
- G4LogicalVolume* logUpperDOM =
- new G4LogicalVolume(upperdomsphere, effectiveDOM,
- ("log_inside_dom_up_" + omName).c_str(), 0, 0, 0);
- G4LogicalVolume* logLowerDOM =
- new G4LogicalVolume(lowerdomsphere, effectiveDOM,
- ("log_inside_dom_lo_" + omName).c_str(), 0, 0, 0);
- G4VPhysicalVolume* physUpperGlass ATTRIBUTE_UNUSED =
- new G4PVPlacement(0, upperDOMpos, logUpperGlass,
- ("dom_up_" + omName).c_str(), logPerlite, false, 0);
- G4VPhysicalVolume* physLowerGlass ATTRIBUTE_UNUSED =
- new G4PVPlacement(0, lowerDOMpos, logLowerGlass,
- ("dom_lo_" + omName).c_str(), logIce, false, 0);
- G4VPhysicalVolume* physUpperDOM ATTRIBUTE_UNUSED =
- new G4PVPlacement(0, G4ThreeVector(0,0,0), logUpperDOM,
- ("inside_dom_up_" + omName).c_str(), logUpperGlass, false, 0);
- G4VPhysicalVolume* physLowerDOM ATTRIBUTE_UNUSED =
- new G4PVPlacement(0, G4ThreeVector(0,0,0), logLowerDOM,
- ("inside_dom_lo_" + omName).c_str(), logLowerGlass, false, 0);
-
- // apply energy limits
- logUpperGlass->SetUserLimits(energyLimit);
- logLowerGlass->SetUserLimits(energyLimit);
- logUpperDOM->SetUserLimits(energyLimit);
- logLowerDOM->SetUserLimits(energyLimit);
- }
-
- // Define sensitive detector
+
+ G4double domInnerRadius = glassOuterRadius_ - glassThickness_;
+ G4Sphere *upperdomsphere = new G4Sphere (("solid_inside_dom_up_" + omName).c_str(),
+ 0.0 * CLHEP::m, domInnerRadius,
+ 0.0 * CLHEP::deg, 360.0 * CLHEP::deg,
+ 0.0 * CLHEP::deg, 90.0 * CLHEP::deg);
+ G4Sphere *lowerdomsphere = new G4Sphere (("solid_inside_dom_lo_" + omName).c_str(),
+ 0.0 * CLHEP::m, domInnerRadius,
+ 0.0 * CLHEP::deg, 360.0 * CLHEP::deg,
+ 90.0 * CLHEP::deg, 180.0 * CLHEP::deg);
+
+ G4LogicalVolume* logUpperGlass =
+ new G4LogicalVolume(upperglasssphere, glass,
+ ("log_dom_up_" + omName).c_str(), 0, 0, 0);
+ G4LogicalVolume* logLowerGlass =
+ new G4LogicalVolume(lowerglasssphere, glass,
+ ("log_dom_lo_" + omName).c_str(), 0, 0, 0);
+ G4LogicalVolume* logUpperDOM =
+ new G4LogicalVolume(upperdomsphere, effectiveDOM,
+ ("log_inside_dom_up_" + omName).c_str(), 0, 0, 0);
+ G4LogicalVolume* logLowerDOM =
+ new G4LogicalVolume(lowerdomsphere, effectiveDOM,
+ ("log_inside_dom_lo_" + omName).c_str(), 0, 0, 0);
+ G4VPhysicalVolume* physUpperGlass ATTRIBUTE_UNUSED =
+ new G4PVPlacement(0, upperDOMpos, logUpperGlass,
+ ("dom_up_" + omName).c_str(), logAir, false, 0);
+ G4VPhysicalVolume* physLowerGlass ATTRIBUTE_UNUSED =
+ new G4PVPlacement(0, lowerDOMpos, logLowerGlass,
+ ("dom_lo_" + omName).c_str(), logWater, false, 0);
+ G4VPhysicalVolume* physUpperDOM ATTRIBUTE_UNUSED =
+ new G4PVPlacement(0, G4ThreeVector(0,0,0), logUpperDOM,
+ ("inside_dom_up_" + omName).c_str(), logUpperGlass, false, 0);
+ G4VPhysicalVolume* physLowerDOM ATTRIBUTE_UNUSED =
+ new G4PVPlacement(0, G4ThreeVector(0,0,0), logLowerDOM,
+ ("inside_dom_lo_" + omName).c_str(), logLowerGlass, false, 0);
+
+ // apply energy limits
+ logUpperGlass->SetUserLimits(energyLimit);
+ logLowerGlass->SetUserLimits(energyLimit);
+ logUpperDOM->SetUserLimits(energyLimit);
+ logLowerDOM->SetUserLimits(energyLimit);
+ // }
+
+ // Define sensitive detector TODO(shivesh): make the PMT the SD
G4SDManager* sdManager = G4SDManager::GetSDMpointer();
- iceSD_ = new G4TankIceSD(("ice_SD_" + tankName).c_str(), domPosIce);
+ iceSD_ = new G4TankIceSD(("ice_SD_" + tankName).c_str());
sdManager->AddNewDetector(iceSD_);
- logIce->SetSensitiveDetector(iceSD_);
-
+ logWater->SetSensitiveDetector(iceSD_);
+
// Instantiation of a set of visualization attributes with red colour
G4VisAttributes * tankVisAtt = new G4VisAttributes(G4Colour(1,0,0));
- // Set the forced wireframe style
+ // Set the forced wireframe style
//snowVisAtt->SetForceWireFrame(true);
// Assignment of the visualization attributes to the logical volume
tankLog_->SetVisAttributes(tankVisAtt);
-
+
G4ThreeVector tankPos = position_ - origin - mother->GetTranslation();
-
+
G4VPhysicalVolume* tankPhys = new G4PVPlacement(0, tankPos, tankLog_,
("tank_" + tankName).c_str(),
mother->GetLogicalVolume(), false, 0);
-
+
// apply energy limits
tankLog_->SetUserLimits(energyLimit);
- logPerlite->SetUserLimits(energyLimit);
- logIce->SetUserLimits(energyLimit);
-
- return tankPhys;
-}
-
-
-double G4BeamTestTank::GetNumCherenkov(const OMKey& omKey)
-{
- return std::max(iceSD_->GetNumCherenkov(omKey), 0.);
-}
-
+ logAir->SetUserLimits(energyLimit);
+ logWater->SetUserLimits(energyLimit);
-double G4BeamTestTank::GetNumCherenkovWeight(const OMKey& omKey)
-{
- return std::max(iceSD_->GetNumCherenkovWeight(omKey), 0.);
-}
-
-
-double G4BeamTestTank::GetEDep_G4(const OMKey& omKey)
-{
- return std::max(iceSD_->GetEDep(omKey), 0.);
-}
-
-
-double G4BeamTestTank::GetTime_G4(const OMKey& omKey)
-{
- return iceSD_->GetTime(omKey);
-}
-
-
-double G4BeamTestTank::GetEDep_I3(const OMKey& omKey)
-{
- return std::max(iceSD_->GetEDep(omKey), 0.) / CLHEP::keV * I3Units::keV;
-}
-
-
-double G4BeamTestTank::GetTime_I3(const OMKey& omKey)
-{
- return (iceSD_->GetTime(omKey) / CLHEP::s) * I3Units::s;
-}
-
-
-I3Position G4BeamTestTank::GetPos_I3()
-{
- I3Position pos((position_.x() / CLHEP::m) * I3Units::m,
- (position_.y() / CLHEP::m) * I3Units::m,
- (position_.z() / CLHEP::m) * I3Units::m);
- return pos;
-}
-
-
-double G4BeamTestTank::GetX_I3()
-{
- return (position_.x() / CLHEP::m) * I3Units::m;
+ return tankPhys;
}
-double G4BeamTestTank::GetY_I3()
+double G4BeamTestTank::GetNumCherenkov(/* const OMKey& omKey */)
{
- return (position_.y() / CLHEP::m) * I3Units::m;
+ return std::max(iceSD_->GetNumCherenkov(/* omKey */), 0.);
}
-double G4BeamTestTank::GetZ_I3()
+double G4BeamTestTank::GetNumCherenkovWeight(/* const OMKey& omKey */)
{
- return (position_.z() / CLHEP::m) * I3Units::m;
+ return std::max(iceSD_->GetNumCherenkovWeight(/* omKey */), 0.);
}
-double G4BeamTestTank::GetTankHeight_I3()
+double G4BeamTestTank::GetEDep_G4(/* const OMKey& omKey */)
{
- return (tankHeight_ / CLHEP::m) * I3Units::m;
+ return std::max(iceSD_->GetEDep(/* omKey */), 0.);
}
-double G4BeamTestTank::GetTankRadius_I3()
+double G4BeamTestTank::GetTime_G4(/* const OMKey& omKey */)
{
- return (outerRadius_ / CLHEP::m) * I3Units::m;
+ return iceSD_->GetTime(/* omKey */);
}
-double G4BeamTestTank::GetSnowHeight_I3()
-{
- return (snowHeight_ / CLHEP::m) * I3Units::m;
-}
+/* double G4BeamTestTank::GetEDep_I3(const OMKey& omKey) */
+/* { */
+/* return std::max(iceSD_->GetEDep(omKey), 0.) / CLHEP::keV * I3Units::keV; */
+/* } */
+
+
+/* double G4BeamTestTank::GetTime_I3(const OMKey& omKey) */
+/* { */
+/* return (iceSD_->GetTime(omKey) / CLHEP::s) * I3Units::s; */
+/* } */
+
+
+/* I3Position G4BeamTestTank::GetPos_I3() */
+/* { */
+/* I3Position pos((position_.x() / CLHEP::m) * I3Units::m, */
+/* (position_.y() / CLHEP::m) * I3Units::m, */
+/* (position_.z() / CLHEP::m) * I3Units::m); */
+/* return pos; */
+/* } */
+
+
+/* double G4BeamTestTank::GetX_I3() */
+/* { */
+/* return (position_.x() / CLHEP::m) * I3Units::m; */
+/* } */
+/* */
+/* */
+/* double G4BeamTestTank::GetY_I3() */
+/* { */
+/* return (position_.y() / CLHEP::m) * I3Units::m; */
+/* } */
+/* */
+/* */
+/* double G4BeamTestTank::GetZ_I3() */
+/* { */
+/* return (position_.z() / CLHEP::m) * I3Units::m; */
+/* } */
+/* */
+
+/* double G4BeamTestTank::GetTankHeight_I3() */
+/* { */
+/* return (tankHeight_ / CLHEP::m) */
+/* } */
+/* */
+/* */
+/* double G4BeamTestTank::GetTankRadius_I3() */
+/* { */
+/* return (outerRadius_ / CLHEP::m) */
+/* } */
+/* */
+/* */
+/* double G4BeamTestTank::GetFillHeight_I3() */
+/* { */
+/* return (fillHeight_ / CLHEP::m) */
+/* } */
diff --git a/src/G4BeamTestUserSteppingAction.cxx b/src/G4BeamTestUserSteppingAction.cxx
index b16098c..e064628 100644
--- a/src/G4BeamTestUserSteppingAction.cxx
+++ b/src/G4BeamTestUserSteppingAction.cxx
@@ -1,18 +1,4 @@
-/**
- * Copyright (C) 2011
- * The IceCube collaboration
- * ID: $Id$
- *
- * @file G4BeamTestUserSteppingAction.cxx
- * @version $Revision$
- * @date $Date$
- * @author Thomas Melzig
- *
- * $LastChangedBy$
- */
-
-
-#include <g4-tankresponse/g4classes/G4BeamTestUserSteppingAction.h>
+#include "G4BeamTestUserSteppingAction.h"
#include "G4Step.hh"
#include "G4Track.hh"
diff --git a/src/G4BeamTestUserTrackingAction.cxx b/src/G4BeamTestUserTrackingAction.cxx
index d554152..c6317df 100644
--- a/src/G4BeamTestUserTrackingAction.cxx
+++ b/src/G4BeamTestUserTrackingAction.cxx
@@ -1,18 +1,4 @@
-/**
- * Copyright (C) 2011
- * The IceCube collaboration
- * ID: $Id$
- *
- * @file G4BeamTestUserTrackingAction.cxx
- * @version $Revision$
- * @date $Date$
- * @author Thomas Melzig
- *
- * $LastChangedBy$
- */
-
-
-#include <g4-tankresponse/g4classes/G4BeamTestUserTrackingAction.h>
+#include "G4BeamTestUserTrackingAction.h"
#include "G4Track.hh"
#include "G4UserLimits.hh"
diff --git a/src/G4Interface.cxx b/src/G4Interface.cxx
index 36ba3d9..9f44d3e 100644
--- a/src/G4Interface.cxx
+++ b/src/G4Interface.cxx
@@ -1,23 +1,12 @@
-/**
- * Copyright (C) 2009
- * The IceCube collaboration
- * ID: $Id: G4Interface.cxx 149388 2016-08-18 21:50:04Z jgonzalez $
- *
- * @file G4Interface.cxx
- * @version $Rev: 149388 $
- * @date $Date: 2016-08-18 22:50:04 +0100 (Thu, 18 Aug 2016) $
- * @author Tilo Waldenmaier
- */
-
-#include <dataclasses/physics/I3Particle.h>
-
-#include <g4-tankresponse/g4classes/G4Interface.h>
-#include <g4-tankresponse/g4classes/G4BeamTestDetectorConstruction.h>
-#include <g4-tankresponse/g4classes/G4BeamTestPhysicsList.h>
-#include <g4-tankresponse/g4classes/G4BeamTestUserTrackingAction.h>
-#include <g4-tankresponse/g4classes/G4BeamTestUserSteppingAction.h>
-
-#include <icetray/I3Logging.h>
+/* #include <dataclasses/physics/I3Particle.h> */
+
+#include "G4Interface.h"
+#include "G4BeamTestDetectorConstruction.h"
+#include "G4BeamTestPhysicsList.h"
+#include "G4BeamTestUserTrackingAction.h"
+#include "G4BeamTestUserSteppingAction.h"
+
+/* #include <icetray/I3Logging.h> */
#ifdef G4VIS_USE
#include <G4VisExecutive.hh>
@@ -26,7 +15,7 @@
#include <G4ParticleGun.hh>
#include <G4ParticleTable.hh>
#include <G4ParticleDefinition.hh>
-#include <G4UImanager.hh>
+/* #include <G4UImanager.hh> */
G4Interface* G4Interface::g4Interface_ = NULL;
@@ -40,11 +29,8 @@ G4Interface::G4Interface(const std::string& visMacro):
// Visualization manager
#ifdef G4VIS_USE
visManager_ = NULL;
- if(!visMacro_.empty())
- {
- visManager_ = new G4VisExecutive();
- visManager_->Initialize();
- }
+ visManager_ = new G4VisExecutive();
+ visManager_->Initialize();
#endif
}
@@ -63,7 +49,8 @@ void G4Interface::InstallTank(G4BeamTestTank* tank)
{
if(initialized_)
{
- log_fatal("G4Interface aleady initialized. Cannot install tank!");
+ /* log_fatal("G4Interface aleady initialized. Cannot install tank!"); */
+ G4cout << "G4Interface aleady initialized. Cannot install tank!" << G4endl;
return;
}
@@ -92,117 +79,37 @@ void G4Interface::InitializeEvent()
}
-void G4Interface::InjectParticle(const I3Particle& particle)
+void G4Interface::InjectParticle(
+ const std::string& particleName, const G4ThreeVector& particlePosition,
+ const G4ThreeVector& particleDirection, const G4double particleEnergy
+ )
{
if(!eventInitialized_)
{
- log_fatal("No event initialized. Cannot inject particle!");
+ /* log_fatal("No event initialized. Cannot inject particle!"); */
+ G4cout << "No event initialized. Cannot inject particle!" << G4endl;
return;
}
G4ParticleTable* particleTable = G4ParticleTable::GetParticleTable();
G4ParticleDefinition* particleDef = NULL;
- switch(particle.GetType())
- {
- case I3Particle::Gamma:
- particleDef = particleTable->FindParticle("gamma");
- break;
- case I3Particle::EMinus:
- particleDef = particleTable->FindParticle("e-");
- break;
- case I3Particle::EPlus:
- particleDef = particleTable->FindParticle("e+");
- break;
- case I3Particle::MuMinus:
- particleDef = particleTable->FindParticle("mu-");
- break;
- case I3Particle::MuPlus:
- particleDef = particleTable->FindParticle("mu+");
- break;
- case I3Particle::PPlus:
- particleDef = particleTable->FindParticle("proton");
- break;
- case I3Particle::PMinus:
- particleDef = particleTable->FindParticle("anti_proton");
- break;
- case I3Particle::Neutron:
- particleDef = particleTable->FindParticle("neutron");
- break;
-#ifdef I3PARTICLE_SUPPORTS_PDG_ENCODINGS
- case I3Particle::NeutronBar:
-#else
- case 25:
-#endif
- particleDef = particleTable->FindParticle("anti_neutron");
- break;
- case I3Particle::PiPlus:
- particleDef = particleTable->FindParticle("pi+");
- break;
- case I3Particle::PiMinus:
- particleDef = particleTable->FindParticle("pi-");
- break;
- case I3Particle::Pi0:
- particleDef = particleTable->FindParticle("pi0");
- break;
- case I3Particle::KPlus:
- particleDef = particleTable->FindParticle("kaon+");
- break;
- case I3Particle::KMinus:
- particleDef = particleTable->FindParticle("kaon-");
- break;
- case I3Particle::K0_Long:
- particleDef = particleTable->FindParticle("kaon0L");
- break;
- case I3Particle::K0_Short:
- particleDef = particleTable->FindParticle("kaon0S");
- break;
- case I3Particle::NuE:
- particleDef = particleTable->FindParticle("nu_e");
- break;
- case I3Particle::NuEBar:
- particleDef = particleTable->FindParticle("anti_nu_e");
- break;
- case I3Particle::NuMu:
- particleDef = particleTable->FindParticle("nu_mu");
- break;
- case I3Particle::NuMuBar:
- particleDef = particleTable->FindParticle("anti_nu_mu");
- break;
- case I3Particle::NuTau:
- particleDef = particleTable->FindParticle("nu_tau");
- break;
- case I3Particle::NuTauBar:
- particleDef = particleTable->FindParticle("anti_nu_tau");
- break;
- default:
- log_warn("Man, check out that strange particle \"%s\" ?!", particle.GetTypeString().c_str());
- return;
- }
-
- // Particle position in G4 units
- G4ThreeVector position((particle.GetX() / I3Units::m) * CLHEP::m,
- (particle.GetY() / I3Units::m) * CLHEP::m,
- (particle.GetZ() / I3Units::m) * CLHEP::m);
+ particleDef = particleTable->FindParticle(particleName);
- // Transform I3 coorinates to world system
- position -= detector_->GetWorldOrigin();
-
- G4ThreeVector direction(particle.GetDir().GetX(),
- particle.GetDir().GetY(),
- particle.GetDir().GetZ());
+ // Transform coordinates to world system
+ G4ThreeVector position = particlePosition - detector_->GetWorldOrigin();
G4ParticleGun gun(1);
gun.SetParticleDefinition(particleDef);
- gun.SetParticleEnergy((particle.GetEnergy() / I3Units::GeV) * CLHEP::GeV);
+ gun.SetParticleEnergy(particleEnergy);
gun.SetParticlePosition(position);
- gun.SetParticleMomentumDirection(direction);
+ gun.SetParticleMomentumDirection(particleDirection);
- log_trace("Injecting %s: x=%.2f m, y=%.2f m, z=%.2f m, E=%.3f MeV",
- particle.GetTypeString().c_str(),
+ G4cout << "Injecting %s: x=%.2f m, y=%.2f m, z=%.2f m, E=%.3f MeV",
+ particleName.c_str(),
position.x() / CLHEP::m,
position.y() / CLHEP::m,
position.z() / CLHEP::m,
- gun.GetParticleEnergy() / CLHEP::MeV);
+ gun.GetParticleEnergy() / CLHEP::MeV;
runManager_.InjectParticle(&gun);
}
@@ -227,66 +134,73 @@ void G4Interface::Initialize()
{
if(initialized_)
{
- log_error("G4Interface has already been initialized. Ignoring this call!");
+ /* log_error("G4Interface has already been initialized. Ignoring this call!"); */
+ G4cout << "G4Interface has already been initialized. Ignoring this call!" << G4endl;
return;
}
- log_debug("Init geometry ...");
+ /* log_debug("Init geometry ..."); */
+ G4cout << "Init geometry ..." << G4endl;
runManager_.SetUserInitialization(detector_);
- log_debug("Init physics list ...");
+ /* log_debug("Init physics list ..."); */
+ G4cout << "Init physics list ..." << G4endl;
runManager_.SetUserInitialization(new G4BeamTestPhysicsList());
- log_debug("Init UserTrackingAction ...");
+ /* log_debug("Init UserTrackingAction ..."); */
+ G4cout << "Init UserTrackingAction ..." << G4endl;
runManager_.SetUserAction(new G4BeamTestUserTrackingAction());
- log_debug("Init UserSteppingAction ...");
+ /* log_debug("Init UserSteppingAction ..."); */
+ G4cout << "Init UserSteppingAction ..." << G4endl;
runManager_.SetUserAction(new G4BeamTestUserSteppingAction());
// Initialize G4 kernel
- log_debug("Init run manager ...");
+ /* log_debug("Init run manager ..."); */
+ G4cout << "Init run manager ..." << G4endl;
runManager_.Initialize();
- // Set verbosity
- int verboseLevel = 0;
- switch (GetIcetrayLogger()->LogLevelForUnit("G4Interface"))
- {
- case I3LOG_FATAL:
- case I3LOG_ERROR:
- case I3LOG_WARN:
- case I3LOG_INFO:
- case I3LOG_NOTICE:
- default:
- verboseLevel = 0;
- break;
- case I3LOG_DEBUG:
- verboseLevel = 1;
- break;
- case I3LOG_TRACE:
- verboseLevel = 2;
- break;
- }
-
- runManager_.SetVerboseLevel(verboseLevel);
- G4EventManager::GetEventManager()->SetVerboseLevel(verboseLevel);
- G4EventManager::GetEventManager()->GetStackManager()->SetVerboseLevel(verboseLevel);
- G4EventManager::GetEventManager()->GetTrackingManager()->SetVerboseLevel(verboseLevel);
-#ifdef G4VIS_USE
- if(visManager_) visManager_->SetVerboseLevel(verboseLevel);
-#endif
+ /* // Set verbosity */
+ /* int verboseLevel = 0; */
+ /* switch (GetIcetrayLogger()->LogLevelForUnit("G4Interface")) */
+ /* { */
+ /* case I3LOG_FATAL: */
+ /* case I3LOG_ERROR: */
+ /* case I3LOG_WARN: */
+ /* case I3LOG_INFO: */
+ /* case I3LOG_NOTICE: */
+ /* default: */
+ /* verboseLevel = 0; */
+ /* break; */
+ /* case I3LOG_DEBUG: */
+ /* verboseLevel = 1; */
+ /* break; */
+ /* case I3LOG_TRACE: */
+ /* verboseLevel = 2; */
+ /* break; */
+ /* } */
+
+ // TODO(shivesh): verbosity
+/* runManager_.SetVerboseLevel(verboseLevel); */
+/* G4EventManager::GetEventManager()->SetVerboseLevel(verboseLevel); */
+/* G4EventManager::GetEventManager()->GetStackManager()->SetVerboseLevel(verboseLevel); */
+/* G4EventManager::GetEventManager()->GetTrackingManager()->SetVerboseLevel(verboseLevel); */
+/* #ifdef G4VIS_USE */
+/* if(visManager_) visManager_->SetVerboseLevel(verboseLevel); */
+/* #endif */
// Execute visualization macro (if specified)
- if(!visMacro_.empty())
- {
- G4UImanager* uim = G4UImanager::GetUIpointer();
-
- // Checking geometry
- uim->ApplyCommand("/geometry/test/grid_test");
-
- // Execute visualization macro
- std::string visCmd = "/control/execute " + visMacro_;
- uim->ApplyCommand(visCmd.c_str());
- }
+ /* if(!visMacro_.empty()) */
+ /* { */
+ /* G4UImanager* uim = G4UImanager::GetUIpointer(); */
+ /* */
+ /* // Checking geometry */
+ /* uim->ApplyCommand("/geometry/test/grid_test"); */
+ /* */
+ /* // Execute visualization macro */
+ /* std::string visCmd = "/control/execute " + visMacro_; */
+ /* uim->ApplyCommand(visCmd.c_str()); */
+ /* } */
initialized_ = true;
}
diff --git a/src/G4TankIceSD.cxx b/src/G4TankIceSD.cxx
index 4a1be0b..2974837 100644
--- a/src/G4TankIceSD.cxx
+++ b/src/G4TankIceSD.cxx
@@ -1,17 +1,5 @@
-/**
- * Copyright (C) 2009
- * The IceCube collaboration
- * ID: $Id: G4TankIceSD.cxx 152814 2017-01-19 21:34:52Z jgonzalez $
- *
- * @file G4TankIceSD.cxx
- * @version $Rev: 152814 $
- * @date $Date: 2017-01-19 21:34:52 +0000 (Thu, 19 Jan 2017) $
- * @author Tilo Waldenmaier, Thomas Melzig
- */
-
-
-#include <g4-tankresponse/g4classes/G4TankIceSD.h>
-#include <g4-tankresponse/g4classes/G4BeamTestTank.h>
+#include "G4TankIceSD.h"
+#include "G4BeamTestTank.h"
#include <G4Step.hh>
#include <G4HCofThisEvent.hh>
@@ -25,7 +13,7 @@
#include <G4OpticalPhoton.hh>
#include "G4Poisson.hh"
-#include <icetray/I3Units.h>
+/* #include <icetray/I3Units.h> */
#include "G4Version.hh"
@@ -38,8 +26,8 @@
#endif
-G4TankIceSD::G4TankIceSD(G4String name, const std::map<OMKey, G4ThreeVector>& domPositions)
- : G4VSensitiveDetector(name), domPositions_(domPositions)
+G4TankIceSD::G4TankIceSD(G4String name/* , const std::map<OMKey, G4ThreeVector>& domPositions */)
+ : G4VSensitiveDetector(name)/* , domPositions_(domPositions) */
{}
@@ -48,14 +36,14 @@ G4TankIceSD::~G4TankIceSD() {}
void G4TankIceSD::Initialize(G4HCofThisEvent* HCE)
{
- std::map<OMKey, G4ThreeVector>::const_iterator om_iter;
- for(om_iter=domPositions_.begin(); om_iter!=domPositions_.end(); ++om_iter)
- {
- sumEdep_[om_iter->first] = 0;
- cogTime_[om_iter->first] = 0;
- cherenkovCounter_[om_iter->first] = 0;
- cherenkovCounterWeight_[om_iter->first] = 0;
- }
+ // std::map<OMKey, G4ThreeVector>::const_iterator om_iter;
+ // for(om_iter=domPositions_.begin(); om_iter!=domPositions_.end(); ++om_iter)
+ // {
+ sumEdep_ = 0;
+ cogTime_ = 0;
+ cherenkovCounter_ = 0;
+ cherenkovCounterWeight_ = 0;
+ // }
}
@@ -76,32 +64,32 @@ G4bool G4TankIceSD::ProcessHits(G4Step* aStep, G4TouchableHistory*)
G4ThreeVector localPosition = theTouchable->GetHistory()->
GetTopTransform().TransformPoint(worldPosition);
- std::map<OMKey, G4ThreeVector>::const_iterator om_iter;
- for(om_iter=domPositions_.begin(); om_iter!=domPositions_.end(); ++om_iter)
- {
- G4double radius = sqrt(pow(om_iter->second.x() - localPosition.x(), 2) +
- pow(om_iter->second.y() - localPosition.y(), 2));
- G4double height = (om_iter->second.z() - localPosition.z());
-
- sumEdep_[om_iter->first] += edep;
- cogTime_[om_iter->first] += edep*time;
- cherenkovCounterWeight_[om_iter->first] += GetProbability(radius, height) * cherenkovNumber;
- cherenkovCounter_[om_iter->first] += cherenkovNumber;
- }
+ // std::map<OMKey, G4ThreeVector>::const_iterator om_iter;
+ // for(om_iter=domPositions_.begin(); om_iter!=domPositions_.end(); ++om_iter)
+ // {
+ G4double radius = sqrt(pow(domPositions_.x() - localPosition.x(), 2) +
+ pow(domPositions_.y() - localPosition.y(), 2));
+ G4double height = (domPositions_.z() - localPosition.z());
+
+ sumEdep_ += edep;
+ cogTime_ += edep*time;
+ cherenkovCounterWeight_ += GetProbability(radius, height) * cherenkovNumber;
+ cherenkovCounter_ += cherenkovNumber;
+ // }
return true;
}
void G4TankIceSD::EndOfEvent(G4HCofThisEvent*)
{
- std::map<OMKey, G4ThreeVector>::const_iterator om_iter;
- for(om_iter=domPositions_.begin(); om_iter!=domPositions_.end(); ++om_iter)
+ // std::map<OMKey, G4ThreeVector>::const_iterator om_iter;
+ // for(om_iter=domPositions_.begin(); om_iter!=domPositions_.end(); ++om_iter)
+ // {
+ if(sumEdep_>0)
{
- if(sumEdep_[om_iter->first]>0)
- {
- cogTime_[om_iter->first] /= sumEdep_[om_iter->first];
- }
+ cogTime_ /= sumEdep_;
}
+ // }
}
@@ -122,7 +110,7 @@ G4double G4TankIceSD::GetCerenkovNumber(G4Step* aStep)
G4MaterialPropertyVector* Rindex = aMaterialPropertiesTable->GetProperty("RINDEX");
if (!Rindex) return 0.0;
- const G4double Rfact = 369.81 / (CLHEP::eV * CLHEP::cm);
+ const G4double Rfact = 369.81 / (CLHEP::eV * CLHEP::cm); // TODO(shivesh): check this
const G4double charge = aParticle->GetDefinition()->GetPDGCharge();
const G4double beta = (pPreStepPoint->GetBeta() + pPostStepPoint->GetBeta()) / 2.;
if (beta <= 0.0) return 0.0;
@@ -147,7 +135,8 @@ G4double G4TankIceSD::GetCerenkovNumber(G4Step* aStep)
#endif
if (nMin!=nMax)
{
- log_error("Support for energy dependent refraction index not yet implemented!");
+ /* log_error("Support for energy dependent refraction index not yet implemented!"); */
+ G4cout << "Support for energy dependent refraction index not yet implemented!";
return 0.0;
}
@@ -163,6 +152,7 @@ G4double G4TankIceSD::GetCerenkovNumber(G4Step* aStep)
}
+// TODO(shivesh): what is this
G4double G4TankIceSD::GetProbability(G4double radius, G4double height)
{
height = 0.90 - height / CLHEP::m;