#include "EventAction.hh" #include "AnalysisManager.hh" #include "GeHit.hh" #include "G4Track.hh" #include "G4Event.hh" #include "G4EventManager.hh" #include "G4HCofThisEvent.hh" #include "G4VHitsCollection.hh" #include "G4TrajectoryContainer.hh" #include "G4Trajectory.hh" #include "G4VVisManager.hh" #include "G4SDManager.hh" #include "G4UImanager.hh" #include "G4ios.hh" #include "AnalysisManager.hh" #include "EventActionMessenger.hh" EventAction::EventAction(AnalysisManager* AM):analysismanager(AM) { eventActionMessenger = new EventActionMessenger(this); GeCollID = -1; NofSec = 0; } EventAction::~EventAction() { delete eventActionMessenger; } void EventAction::BeginOfEventAction(const G4Event* evt) { NofSec = 0; for(int i=0;i<10000;i++) { SecKinE[i] = 0; SecMom[i] = G4ThreeVector(0,0,0); ParKinE[i] = 0; ParMom[i] = G4ThreeVector(0,0,0); ParPos[i] = G4ThreeVector(0,0,0); ParTrackID[i] = -1; OriginalTrackID[i] = -1; LevelEnergy[i] = 0.0; OriginalEnergy[i] = 0.0; } analysismanager->ClearVariables(); G4int eventID = evt->GetEventID(); //G4cout << " eventID: " << eventID << G4endl; G4SDManager * SDman = G4SDManager::GetSDMpointer(); if(GeCollID<0) { G4String colNam; GeCollID = SDman->GetCollectionID(colNam="GeCollection"); } } void EventAction::EndOfEventAction(const G4Event* evt) { if(GeCollID<0) return; G4HCofThisEvent* HCE = evt->GetHCofThisEvent(); GeHitsCollection* GeHC = 0; if(HCE) { GeHC = (GeHitsCollection*)(HCE->GetHC(GeCollID)); } G4double eDep_Ge = 0; G4double eDepGauss_Ge = 0; if(GeHC) { int NofHits = GeHC->entries(); //G4cout << " NofHits in Ge: " << NofHits << G4endl; if(NofHits > 0) { for(int i=0;iGetEdep()/keV; // noise level : N_PD, N_DD G4double sigmaE = 0; if((*GeHC)[i]->GetCopyNo() == 0) sigmaE = N_PD*sqrt((*GeHC)[i]->GetEdep()/keV); // keV else if((*GeHC)[i]->GetCopyNo() == 1) sigmaE = N_DD*sqrt((*GeHC)[i]->GetEdep()/keV); // keV eDepGauss_Ge = eDep_Ge + G4RandGauss::shoot(0.0,sigmaE); //G4cout << "Hit: " << i << " copyNo: " << (*GeHC)[i]->GetCopyNo() << " eDep: " << eDep_Ge << G4endl; analysismanager->FillhGeTotEdep(eDep_Ge,eDepGauss_Ge,(*GeHC)[i]->GetCopyNo(),NofHits,(*GeHC)[i]->GetParticleCode(),(*GeHC)[i]->GetLevelEnergy(),(*GeHC)[i]->GetOriginalEnergy()); } } } /* G4cout << "EventAction:" << G4endl; G4cout << "NofSec: " << NofSec << G4endl; for(int i=0;iFillhSecondaries(SecKinE[i],SecMom[i],SecPartDef[i],ParKinE[i],ParMom[i],ParPos[i],ParPartDef[i]); } */ analysismanager->FillhSecondaries(NofSec,SecKinE,SecMom,SecPartDef,ParKinE,ParMom,ParPos,ParPartDef,ParTrackID,OriginalTrackID,LevelEnergy,OriginalEnergy); analysismanager->FillHistogramsAndTree(); } void EventAction::SetSecondaryInfo(G4double fSecKinE, G4ThreeVector fSecMom, G4ParticleDefinition *fSecPartDef, G4double fParKinE, G4ThreeVector fParMom, G4ThreeVector fParPos, G4ParticleDefinition *fParPartDef, G4int fParTrackID, G4int foriginalTrackID, G4double fLevelEnergy, G4double fOriginalEnergy) { SecKinE[NofSec] = fSecKinE; SecMom[NofSec] = fSecMom; SecPartDef[NofSec] = fSecPartDef; ParKinE[NofSec] = fParKinE; ParMom[NofSec] = fParMom; ParPos[NofSec] = fParPos; ParPartDef[NofSec] = fParPartDef; ParTrackID[NofSec] = fParTrackID; OriginalTrackID[NofSec] = foriginalTrackID; LevelEnergy[NofSec] = fLevelEnergy; OriginalEnergy[NofSec] = fOriginalEnergy; NofSec++; //G4cout << NofSec << G4endl; //G4cout << fSecKinE << "\t" << fSecMom << G4endl; }