File indexing completed on 2026-09-15 08:28:19
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 #include "SteppingAction.hh"
0030
0031 #include "EventAction.hh"
0032 #include "HistoManager.hh"
0033 #include "RunAction.hh"
0034
0035 #include "G4ParticleTypes.hh"
0036 #include "G4Step.hh"
0037
0038
0039
0040 SteppingAction::SteppingAction(RunAction* RA, EventAction* EA) : fRunaction(RA), fEventaction(EA) {}
0041
0042
0043
0044 void SteppingAction::UserSteppingAction(const G4Step* step)
0045 {
0046
0047
0048 G4int trackID = step->GetTrack()->GetTrackID();
0049 G4double Edep = step->GetTotalEnergyDeposit();
0050 if (Edep > 0.) fEventaction->SumEnergyDeposited(trackID, Edep);
0051
0052
0053 if (trackID > 1) return;
0054
0055
0056
0057 const G4StepPoint* endPoint = step->GetPostStepPoint();
0058 const G4VProcess* process = endPoint->GetProcessDefinedStep();
0059 G4String procName = process->GetProcessName();
0060 G4int subtype = process->GetProcessSubType();
0061 G4int nbsec = step->GetNumberOfSecondariesInCurrentStep();
0062 if ((subtype == 2) && (nbsec == 0)) procName = "Edep alone";
0063 fRunaction->CountProcesses(procName);
0064
0065
0066
0067 G4double stepSize = step->GetStepLength();
0068 fRunaction->TrackLength(stepSize);
0069 G4AnalysisManager::Instance()->FillH1(1, stepSize);
0070
0071 if (nbsec == 0) return;
0072
0073
0074
0075 const std::vector<const G4Track*>* secondaries = step->GetSecondaryInCurrentStep();
0076 G4double Etransfer = 0.;
0077 for (G4int itr = 0; itr < nbsec; itr++) {
0078 const G4Track* trk = (*secondaries)[itr];
0079 const G4ParticleDefinition* particle = trk->GetParticleDefinition();
0080 G4String name = particle->GetParticleName();
0081 G4double energy = trk->GetKineticEnergy();
0082 fRunaction->EnergySpectrumOfSecondaries(name, energy);
0083 G4int ih = 0;
0084 if (particle == G4Gamma::Gamma())
0085 ih = 11;
0086 else if (particle == G4Electron::Electron())
0087 ih = 12;
0088 else if (particle == G4Positron::Positron())
0089 ih = 13;
0090 if (ih > 0) G4AnalysisManager::Instance()->FillH1(ih, energy);
0091 if (subtype == 4) energy = trk->GetTotalEnergy();
0092 Etransfer += energy;
0093 }
0094 fEventaction->SumEnergyTransfered(process, Etransfer);
0095 }
0096
0097