File indexing completed on 2025-01-31 09:22:22
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 #include "SiPMSD.hh"
0027
0028 SiPMSD::SiPMSD(G4String name) : G4VSensitiveDetector("SiPMHitCollection") {
0029 G4cout << "creating a sensitive detector with name: " << name << G4endl;
0030 collectionName.insert("SiPMHitCollection");
0031 }
0032
0033 SiPMSD::~SiPMSD() {}
0034
0035 void SiPMSD::Initialize(G4HCofThisEvent *HCE) {
0036 fHitCollection = new SiPMHitCollection(GetName(), collectionName[0]);
0037
0038 if (fHCID < 0)
0039 fHCID = GetCollectionID(0);
0040 HCE->AddHitsCollection(fHCID, fHitCollection);
0041
0042 fTmpHits.clear();
0043 }
0044 void SiPMSD::EndOfEvent(G4HCofThisEvent *) {
0045 for (auto it = fTmpHits.begin(); it != fTmpHits.end(); ++it)
0046 fHitCollection->insert(it->second);
0047 }
0048
0049 G4bool SiPMSD::ProcessHits(G4Step *step, G4TouchableHistory *) {
0050 G4TouchableHandle touchable = step->GetPreStepPoint()->GetTouchableHandle();
0051
0052 G4int copyNumCell = touchable->GetVolume(0)->GetCopyNo();
0053 G4int copyNumSensor = touchable->GetVolume(1)->GetCopyNo();
0054 int tmp_ID = 1000 * copyNumSensor + copyNumCell;
0055 if (fTmpHits.find(tmp_ID) == fTmpHits.end()) {
0056 G4String vol_name = touchable->GetVolume(0)->GetName();
0057 fTmpHits[tmp_ID] = new SiPMHit(vol_name, copyNumSensor, copyNumCell);
0058 G4double hitX = (touchable->GetVolume(1)->GetTranslation().x() +
0059 touchable->GetVolume(0)->GetTranslation().x()) /
0060 CLHEP::cm;
0061 G4double hitY = (touchable->GetVolume(1)->GetTranslation().x() +
0062 touchable->GetVolume(0)->GetTranslation().y()) /
0063 CLHEP::cm;
0064 G4double hitZ = touchable->GetVolume(1)->GetTranslation().z() / CLHEP::cm;
0065 fTmpHits[tmp_ID]->SetPosition(hitX, hitY, hitZ);
0066 }
0067
0068 G4double edep = step->GetTotalEnergyDeposit() / CLHEP::keV;
0069 G4double edepNonIonizing = step->GetNonIonizingEnergyDeposit() / CLHEP::keV;
0070
0071 G4double timedep = step->GetPostStepPoint()->GetGlobalTime() / CLHEP::ns;
0072
0073 fTmpHits[tmp_ID]->AddEdep(edep, timedep);
0074 fTmpHits[tmp_ID]->AddEdepNonIonizing(edepNonIonizing, timedep);
0075
0076 return true;
0077 }