#include "GeneHe3detSD.hh" #include "G4HCofThisEvent.hh" #include "G4Ions.hh" #include "G4ParticleDefinition.hh" #include "G4ParticleTypes.hh" #include "G4SDManager.hh" #include "G4Step.hh" #include "G4VPhysicalVolume.hh" #include "G4ios.hh" #include "GeneHe3detHit.hh" GeneHe3detSD::GeneHe3detSD(G4String name) : G4VSensitiveDetector(name) { G4String HCname = "GeneHe3detHitCollection"; collectionName.insert(HCname); } GeneHe3detSD::~GeneHe3detSD() {} void GeneHe3detSD::Initialize(G4HCofThisEvent* HCE) { scintillatorCollection = new GeneHe3detHitsCollection(SensitiveDetectorName, collectionName[0]); static G4int HCID = -1; if (HCID < 0) HCID = G4SDManager::GetSDMpointer()->GetCollectionID(collectionName[0]); HCE->AddHitsCollection(HCID, scintillatorCollection); } G4bool GeneHe3detSD::ProcessHits(G4Step* aStep, G4TouchableHistory*) { G4double edep = aStep->GetTotalEnergyDeposit(); if (edep == 0.) return false; G4ParticleDefinition* particleType = aStep->GetTrack()->GetDefinition(); G4String particleName = particleType->GetParticleName(); if (particleName == "opticalphoton") return false; G4StepPoint* preStepPoint = aStep->GetPreStepPoint(); G4TouchableHistory* theTouchable = (G4TouchableHistory*)(preStepPoint->GetTouchable()); G4int copyNo = theTouchable->GetVolume()->GetCopyNo(); // fill in hit GeneHe3detHit* newHit = new GeneHe3detHit(); newHit->SetCpNo(copyNo); newHit->SetEdep(edep); newHit->SetPos(aStep->GetPostStepPoint()->GetPosition()); newHit->SetTime(aStep->GetPostStepPoint()->GetGlobalTime()); newHit->SetParticle(particleName); newHit->SetParticleEnergy(aStep->GetPreStepPoint()->GetKineticEnergy()); scintillatorCollection->insert(newHit); return true; } void GeneHe3detSD::EndOfEvent(G4HCofThisEvent* HCE) { G4int nHits = scintillatorCollection->entries(); if (verboseLevel >= 1) G4cout << " Si collection: " << nHits << " hits" << G4endl; if (verboseLevel >= 2) scintillatorCollection->PrintAllHits(); } void GeneHe3detSD::clear() {} void GeneHe3detSD::DrawAll() {} void GeneHe3detSD::PrintAll() {}