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