File indexing completed on 2026-03-28 07:51:09
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029 #include "ExP01TrackerSD.hh"
0030
0031 #include "RootIO.hh"
0032
0033 #include "G4HCofThisEvent.hh"
0034 #include "G4SDManager.hh"
0035 #include "G4Step.hh"
0036 #include "G4ThreeVector.hh"
0037 #include "G4ios.hh"
0038
0039
0040
0041 ExP01TrackerSD::ExP01TrackerSD(G4String name)
0042 : G4VSensitiveDetector(name), fTrackerCollection(0), fHCID(0)
0043 {
0044 G4String HCname = name + "_HC";
0045 collectionName.insert(HCname);
0046 G4cout << collectionName.size() << " CalorimeterSD name: " << name
0047 << " collection Name: " << HCname << G4endl;
0048 fHCID = -1;
0049 }
0050
0051
0052
0053 ExP01TrackerSD::~ExP01TrackerSD()
0054 {
0055 RootIO::GetInstance()->Close();
0056 }
0057
0058
0059
0060 void ExP01TrackerSD::Initialize(G4HCofThisEvent* HCE)
0061 {
0062 fTrackerCollection = new ExP01TrackerHitsCollection(SensitiveDetectorName, collectionName[0]);
0063 if (fHCID < 0) {
0064 G4cout << "CalorimeterSD::Initialize: " << SensitiveDetectorName << " " << collectionName[0]
0065 << G4endl;
0066 fHCID = G4SDManager::GetSDMpointer()->GetCollectionID(collectionName[0]);
0067 }
0068 HCE->AddHitsCollection(fHCID, fTrackerCollection);
0069 }
0070
0071
0072
0073 G4bool ExP01TrackerSD::ProcessHits(G4Step* aStep, G4TouchableHistory*)
0074 {
0075 G4double edep = aStep->GetTotalEnergyDeposit();
0076
0077 if (edep == 0.) return false;
0078
0079 ExP01TrackerHit* newHit = new ExP01TrackerHit();
0080 newHit->SetTrackID(aStep->GetTrack()->GetTrackID());
0081 newHit->SetChamberNb(aStep->GetPreStepPoint()->GetTouchable()->GetReplicaNumber());
0082 newHit->SetEdep(edep);
0083 newHit->SetPos(aStep->GetPostStepPoint()->GetPosition());
0084 fTrackerCollection->insert(newHit);
0085
0086
0087
0088
0089 return true;
0090 }
0091
0092
0093
0094 void ExP01TrackerSD::EndOfEvent(G4HCofThisEvent*)
0095 {
0096
0097 G4int NbHits = fTrackerCollection->entries();
0098 std::vector<ExP01TrackerHit*> hitsVector;
0099
0100 {
0101 G4cout << "\n-------->Storing hits in the ROOT file: in this event there are " << NbHits
0102 << " hits in the tracker chambers: " << G4endl;
0103 for (G4int i = 0; i < NbHits; i++)
0104 (*fTrackerCollection)[i]->Print();
0105 }
0106
0107 for (G4int i = 0; i < NbHits; i++)
0108 hitsVector.push_back((*fTrackerCollection)[i]);
0109
0110 RootIO::GetInstance()->Write(&hitsVector);
0111
0112
0113 }
0114
0115