11 #include <simulation/background/BkgSensitiveDetector.h>
12 #include <simulation/background/BkgNeutronWeight.h>
13 #include <simulation/dataobjects/BeamBackHit.h>
14 #include <framework/gearbox/Unit.h>
19 #include <framework/datastore/StoreArray.h>
20 #include <framework/datastore/RelationArray.h>
32 BkgSensitiveDetector::BkgSensitiveDetector(
const char* subDett,
int iden):
33 Simulation::SensitiveDetectorBase(
"BKG",
Const::invalidDetector), m_trackID(0), m_startPos(0., 0., 0.), m_startMom(0., 0., 0.),
34 m_startTime(0), m_startEnergy(0), m_energyDeposit(0), m_trackLength(0.)
41 beamBackHits.registerInDataStore();
50 std::string subDet = subDett;
52 else if (subDet ==
"PXD")
m_subDet = 1;
53 else if (subDet ==
"SVD")
m_subDet = 2;
54 else if (subDet ==
"CDC")
m_subDet = 3;
55 else if (subDet ==
"ARICH")
m_subDet = 4;
56 else if (subDet ==
"TOP")
m_subDet = 5;
57 else if (subDet ==
"ECL")
m_subDet = 6;
58 else if (subDet ==
"EKLM")
m_subDet = 7;
59 else if (subDet ==
"BKLM")
m_subDet = 8;
63 const int nc[] = {3, 4, 6, 9, 2, 9, 6, 4};
64 const int indx[] = {96, 288, 864, 1151, 7776, 8064, 8544, 8736};
65 std::vector<int> indxv(indx, indx +
sizeof(indx) /
sizeof(
int));
66 m_eclrepscale = nc[upper_bound(indxv.begin(), indxv.end(), iden) - indxv.begin()];
77 const G4StepPoint& preStep = *aStep->GetPreStepPoint();
78 G4Track& track = *aStep->GetTrack();
84 const G4ThreeVector& worldPosition = preStep.GetPosition();
88 const G4ThreeVector& momentum = preStep.GetMomentum() ;
106 if (track.GetNextVolume() != track.GetVolume() || track.GetTrackStatus() >= fStopAndKill) {
107 int pdgCode = track.GetDefinition()->GetPDGEncoding();
108 double endEnergy = track.GetKineticEnergy() *
Unit::MeV;
109 double neutWeight = 0;
110 if (pdgCode == 2112) {
118 int sector = preStep.GetTouchable()->GetCopyNumber(1);
119 if ((sector == 0) && (
m_eclrepscale == 2) && ((
id & 1) != 0))
id += 144;
128 RelationArray relBeamBackHitToMCParticle(mcParticles, beamBackHits);