File indexing completed on 2025-10-13 08:25:14
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 "FlashSensitiveDetector.hh"
0027
0028 #include "G4HCofThisEvent.hh"
0029 #include "G4SDManager.hh"
0030
0031 FlashSensitiveDetector::FlashSensitiveDetector(const G4String& name) : G4VSensitiveDetector(name)
0032 {
0033
0034 }
0035
0036 FlashSensitiveDetector::~FlashSensitiveDetector()
0037 {
0038
0039 }
0040
0041
0042 G4bool FlashSensitiveDetector::ProcessHits(G4Step* step, G4TouchableHistory*)
0043
0044 {
0045 G4double edep = step -> GetTotalEnergyDeposit();
0046
0047 if (edep == 0) return false;
0048
0049 const G4VTouchable *touchable = step -> GetPreStepPoint() -> GetTouchable();
0050 G4VPhysicalVolume *physVol = touchable -> GetVolume();
0051 G4ThreeVector posDetector = physVol -> GetTranslation();
0052
0053 G4Track *track = step -> GetTrack();
0054
0055 auto material = track -> GetMaterial();
0056 auto density = material -> GetDensity();
0057 G4double cavityVolume = (track->GetVolume()->GetLogicalVolume()->GetSolid()->GetCubicVolume());
0058 G4double massOfCavity = cavityVolume * density;
0059 G4double dose = edep / massOfCavity / gray;
0060 edep = edep / MeV;
0061
0062
0063
0064 G4AnalysisManager *fAnalysisManager = G4AnalysisManager::Instance();
0065 fAnalysisManager -> FillNtupleDColumn(0, 0, posDetector[0]);
0066 fAnalysisManager -> FillNtupleDColumn(0, 1, posDetector[1]);
0067 fAnalysisManager -> FillNtupleDColumn(0, 2, posDetector[2]);
0068 fAnalysisManager -> FillNtupleDColumn(0, 3, dose);
0069 fAnalysisManager -> FillNtupleDColumn(0, 4, edep);
0070 fAnalysisManager -> FillNtupleIColumn(0, 5, G4RunManager::GetRunManager()->GetCurrentEvent()->GetEventID());
0071 fAnalysisManager -> FillNtupleIColumn(0, 6, track->GetParentID());
0072 fAnalysisManager -> FillNtupleSColumn(0, 7, track->GetDynamicParticle()->GetDefinition()->GetParticleName());
0073 fAnalysisManager -> AddNtupleRow(0);
0074
0075 return true;
0076 }