File indexing completed on 2026-09-16 08:29:32
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 #ifdef G4MULTITHREADED
0030 # include "G4MTRunManager.hh"
0031 #else
0032 # include "G4RunManager.hh"
0033 #endif
0034
0035 #include "SAXSEventAction.hh"
0036 #include "SAXSSensitiveDetectorHit.hh"
0037
0038 #include "G4AnalysisManager.hh"
0039 #include "G4Event.hh"
0040 #include "G4EventManager.hh"
0041 #include "G4HCofThisEvent.hh"
0042 #include "G4SDManager.hh"
0043 #include "G4SystemOfUnits.hh"
0044 #include "G4Trajectory.hh"
0045 #include "G4TrajectoryContainer.hh"
0046 #include "G4UImanager.hh"
0047 #include "G4VHitsCollection.hh"
0048 #include "G4VVisManager.hh"
0049 #include "G4ios.hh"
0050
0051
0052
0053 SAXSEventAction::SAXSEventAction()
0054 : G4UserEventAction(),
0055 fSensitiveDetector_ID(-1),
0056 fVerboseLevel(0),
0057 fNRi(0),
0058 fNCi(0),
0059 fNDi(0),
0060 fEventWeight(0.)
0061 {}
0062
0063
0064
0065 SAXSEventAction::~SAXSEventAction() {}
0066
0067
0068
0069 void SAXSEventAction::BeginOfEventAction(const G4Event*)
0070 {
0071 fNRi = 0;
0072 fNCi = 0;
0073 fNDi = 0;
0074 fEventWeight = 1.;
0075 }
0076
0077
0078
0079 void SAXSEventAction::EndOfEventAction(const G4Event* aEvent)
0080 {
0081
0082 G4SDManager* SDman = G4SDManager::GetSDMpointer();
0083
0084
0085 if (fSensitiveDetector_ID == -1) {
0086 G4String SensitiveDetectorName;
0087 if (SDman->FindSensitiveDetector(SensitiveDetectorName = "det", 0)) {
0088 fSensitiveDetector_ID = SDman->GetCollectionID(SensitiveDetectorName = "det/collection");
0089 }
0090 }
0091
0092 SensitiveDetectorHitsCollection* fSensitiveDetectorHC = 0;
0093 G4HCofThisEvent* HCE = aEvent->GetHCofThisEvent();
0094
0095 if (HCE) {
0096 if (fSensitiveDetector_ID != -1) {
0097 G4VHitsCollection* aHC = HCE->GetHC(fSensitiveDetector_ID);
0098 fSensitiveDetectorHC = (SensitiveDetectorHitsCollection*)(aHC);
0099 }
0100 }
0101
0102
0103 G4AnalysisManager* analysisManager = G4AnalysisManager::Instance();
0104
0105
0106 G4int eventNumber = G4RunManager::GetRunManager()->GetCurrentEvent()->GetEventID();
0107
0108
0109 if (fSensitiveDetectorHC) {
0110 size_t vNumberOfHit = fSensitiveDetectorHC->entries();
0111 for (size_t i = 0; i < vNumberOfHit; i++) {
0112 SAXSSensitiveDetectorHit* aHit = (*fSensitiveDetectorHC)[i];
0113 analysisManager->FillNtupleDColumn(0, 0, aHit->GetEnergy() / CLHEP::keV);
0114 analysisManager->FillNtupleDColumn(0, 1, aHit->GetPos().x() / CLHEP::mm);
0115 analysisManager->FillNtupleDColumn(0, 2, aHit->GetPos().y() / CLHEP::mm);
0116 analysisManager->FillNtupleDColumn(0, 3, aHit->GetPos().z() / CLHEP::mm);
0117 analysisManager->FillNtupleDColumn(0, 4, aHit->GetMom().x());
0118 analysisManager->FillNtupleDColumn(0, 5, aHit->GetMom().y());
0119 analysisManager->FillNtupleDColumn(0, 6, aHit->GetMom().z());
0120 analysisManager->FillNtupleDColumn(0, 7, aHit->GetTime() / CLHEP::ns);
0121 analysisManager->FillNtupleIColumn(0, 8, aHit->GetType());
0122 analysisManager->FillNtupleIColumn(0, 9, aHit->GetTrackID());
0123 analysisManager->FillNtupleIColumn(0, 10, fNRi);
0124 analysisManager->FillNtupleIColumn(0, 11, fNCi);
0125 analysisManager->FillNtupleIColumn(0, 12, fNDi);
0126 analysisManager->FillNtupleIColumn(0, 13, eventNumber);
0127 analysisManager->FillNtupleDColumn(0, 14, aHit->GetWeight());
0128 analysisManager->AddNtupleRow(0);
0129 }
0130 }
0131 }
0132
0133