41 #include <CLHEP/Units/SystemOfUnits.h>
91 #ifdef G4ANALYSIS_USE_ROOT
96 if(particleType ==
"nucleus") {
105 analysisMgr->FillFragmentTuple(A, Z, energy, posX, posY, posZ);
106 }
else if(particleName ==
"proton") {
114 G4String secondaryParticleName = def -> GetParticleName();
119 if(secondaryParticleName ==
"proton") {
120 analysis->hydrogenEnergy(secondaryParticleKineticEnergy /
CLHEP::MeV);
122 if(secondaryParticleName ==
"deuteron") {
123 analysis->hydrogenEnergy((secondaryParticleKineticEnergy/2) /
CLHEP::MeV);
125 if(secondaryParticleName ==
"triton") {
126 analysis->hydrogenEnergy((secondaryParticleKineticEnergy/3) /
CLHEP::MeV);
128 if(secondaryParticleName ==
"alpha") {
129 analysis->heliumEnergy((secondaryParticleKineticEnergy/4) /
CLHEP::MeV);
131 if(secondaryParticleName ==
"He3"){
132 analysis->heliumEnergy((secondaryParticleKineticEnergy/3) /
CLHEP::MeV);
141 if ((aStep -> GetTrack() -> GetTrackID() == 1) &&
142 (aStep -> GetTrack() -> GetVolume() -> GetName() ==
"PhantomPhys") &&
143 (aStep -> GetPostStepPoint() -> GetProcessDefinedStep() != NULL))
145 G4String process = aStep -> GetPostStepPoint() ->
146 GetProcessDefinedStep() -> GetProcessName();
148 if ((process ==
"Transportation") || (process ==
"StepLimiter")) {;}
151 if ((process ==
"msc") || (process ==
"hLowEIoni") || (process ==
"hIoni"))
159 if ( (process !=
"LElastic") && (process !=
"ProtonInelastic") && (process !=
"hElastic") )
160 G4cout <<
"Warning! Unknown proton process: "<< process <<
G4endl;
173 G4TrackVector* fSecondary = steppingManager -> GetfSecondary();
175 for(
size_t lp1=0;lp1<(*fSecondary).size(); lp1++)
177 G4String volumeName = (*fSecondary)[lp1] -> GetVolume() -> GetName();
179 if (volumeName ==
"phantomPhys")
181 #ifdef G4ANALYSIS_USE_ROOT
182 G4String secondaryParticleName = (*fSecondary)[lp1]->GetDefinition() -> GetParticleName();
183 G4double secondaryParticleKineticEnergy = (*fSecondary)[lp1] -> GetKineticEnergy();
187 if (secondaryParticleName ==
"e-")
188 analysis -> electronEnergyDistribution(secondaryParticleKineticEnergy/
CLHEP::MeV);
190 if (secondaryParticleName ==
"gamma")
191 analysis -> gammaEnergyDistribution(secondaryParticleKineticEnergy/
CLHEP::MeV);
193 if (secondaryParticleName ==
"deuteron")
194 analysis -> deuteronEnergyDistribution(secondaryParticleKineticEnergy/
CLHEP::MeV);
196 if (secondaryParticleName ==
"triton")
197 analysis -> tritonEnergyDistribution(secondaryParticleKineticEnergy/
CLHEP::MeV);
199 if (secondaryParticleName ==
"alpha")
200 analysis -> alphaEnergyDistribution(secondaryParticleKineticEnergy/
CLHEP::MeV);
202 G4double z = (*fSecondary)[lp1]-> GetDynamicParticle() -> GetDefinition() -> GetPDGCharge();
205 G4int a = (*fSecondary)[lp1]-> GetDynamicParticle() -> GetDefinition() -> GetBaryonNumber();
206 G4int electronOccupancy = (*fSecondary)[lp1] -> GetDynamicParticle() -> GetTotalOccupancy();
210 analysis -> genericIonInformation(a, z, electronOccupancy, secondaryParticleKineticEnergy/
CLHEP::MeV);
IORTRunAction * runAction
void SetTrackStatus(const G4TrackStatus aTrackStatus)
G4ParticleDefinition * GetDefinition() const
const G4ThreeVector & GetPosition() const
A class for connecting the simulation to an analysis package.
const G4String & GetParticleName() const
void UserSteppingAction(const G4Step *)
G4double GetKineticEnergy() const
G4GLOB_DLL std::ostream G4cout
const G4String & GetName() const
G4SteppingManager * fpSteppingManager
const G4String & GetParticleType() const
static const G4double A[nN]
static IORTAnalysisManager * GetInstance()
Get the pointer to the analysis manager.
std::vector< G4Track * > G4TrackVector
G4double energy(const ThreeVector &p, const G4double m)
IORTSteppingAction(IORTRunAction *)
G4VPhysicalVolume * GetVolume() const
G4Track * GetTrack() const
G4double GetPDGCharge() const
G4int GetBaryonNumber() const