File indexing completed on 2025-02-23 09:21:11
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 #include "SensitiveDetector.hh"
0028
0029 #include "SensitiveDetectorHit.hh"
0030
0031 #include "G4HCofThisEvent.hh"
0032 #include "G4Navigator.hh"
0033 #include "G4SDManager.hh"
0034 #include "G4Step.hh"
0035 #include "G4TouchableHistory.hh"
0036 #include "G4Track.hh"
0037 #include "G4ios.hh"
0038
0039 SensitiveDetector::SensitiveDetector(G4String name) : G4VSensitiveDetector(name)
0040 {
0041 G4String HCname;
0042 collectionName.insert(HCname = "collection");
0043 fHCID = -1;
0044 }
0045
0046
0047
0048 SensitiveDetector::~SensitiveDetector() {}
0049
0050
0051
0052 void SensitiveDetector::Initialize(G4HCofThisEvent* HCE)
0053 {
0054 fHitsCollection = new SensitiveDetectorHitsCollection(SensitiveDetectorName, collectionName[0]);
0055 if (fHCID < 0) {
0056 fHCID = G4SDManager::GetSDMpointer()->GetCollectionID(fHitsCollection);
0057 }
0058 HCE->AddHitsCollection(fHCID, fHitsCollection);
0059 }
0060
0061
0062
0063 G4bool SensitiveDetector::ProcessHits(G4Step* aStep, G4TouchableHistory*)
0064 {
0065 if (aStep->GetTrack()->GetTrackID() > 1) return true;
0066
0067 G4StepPoint* postStepPoint = aStep->GetPostStepPoint();
0068 if (!(postStepPoint->GetStepStatus() == fGeomBoundary)) return true;
0069
0070 G4StepPoint* preStepPoint = aStep->GetPreStepPoint();
0071
0072 G4TouchableHistory* theTouchable = (G4TouchableHistory*)(preStepPoint->GetTouchable());
0073 G4VPhysicalVolume* thePhysical = theTouchable->GetVolume(0);
0074 G4int copyNo = thePhysical->GetCopyNo();
0075
0076 G4ThreeVector worldPos = preStepPoint->GetPosition();
0077
0078 SensitiveDetectorHit* aHit = new SensitiveDetectorHit(copyNo);
0079 aHit->SetLayerID(copyNo);
0080 aHit->SetWorldPos(worldPos);
0081
0082 fHitsCollection->insert(aHit);
0083 return true;
0084 }
0085
0086
0087
0088 void SensitiveDetector::EndOfEvent(G4HCofThisEvent* ) {}
0089
0090