34 #include "RunAction.hh"
36 #include "DetectorConstruction.hh"
37 #include "PrimaryGeneratorAction.hh"
38 #include "HistoManager.hh"
76 fTruePL = fTruePL2 = fGeomPL = fGeomPL2 = 0.;
77 fLDispl = fLDispl2 = fPsiSpa = fPsiSpa2 = 0.;
78 fTetPrj = fTetPrj2 = 0.;
79 fPhiCor = fPhiCor2 = 0.;
84 if ( analysisManager->IsActive() ) {
85 analysisManager->OpenFile();
94 size_t nbProc = fProcCounter->size();
96 while ((i<nbProc)&&((*fProcCounter)[i]->GetName()!=procName)) i++;
97 if (i == nbProc) fProcCounter->push_back(
new OneProcessCount(procName));
99 (*fProcCounter)[i]->Count();
107 if (NbOfEvents == 0)
return;
118 G4cout <<
"\n The run consists of " << NbOfEvents <<
" "<< Particle <<
" of "
121 << material->
GetName() <<
" (density: "
125 G4cout <<
"\n Process calls frequency --->";
126 for (
size_t i=0; i< fProcCounter->size();i++) {
127 G4String procName = (*fProcCounter)[i]->GetName();
128 G4int count = (*fProcCounter)[i]->GetCounter();
129 G4cout <<
"\t" << procName <<
" = " << count;
132 if (fTotalCount == 0)
return;
136 G4double MeanTPL = fTruePL /fTotalCount;
137 G4double MeanTPL2 = fTruePL2/fTotalCount;
138 G4double rmsTPL = std::sqrt(std::fabs(MeanTPL2 - MeanTPL*MeanTPL));
140 G4double MeanGPL = fGeomPL /fTotalCount;
141 G4double MeanGPL2 = fGeomPL2/fTotalCount;
142 G4double rmsGPL = std::sqrt(std::fabs(MeanGPL2 - MeanGPL*MeanGPL));
144 G4double MeanLaD = fLDispl /fTotalCount;
145 G4double MeanLaD2 = fLDispl2/fTotalCount;
146 G4double rmsLaD = std::sqrt(std::fabs(MeanLaD2 - MeanLaD*MeanLaD));
148 G4double MeanPsi = fPsiSpa /(fTotalCount);
149 G4double MeanPsi2 = fPsiSpa2/(fTotalCount);
150 G4double rmsPsi = std::sqrt(std::fabs(MeanPsi2 - MeanPsi*MeanPsi));
152 G4double MeanTeta = fTetPrj /(2*fTotalCount);
153 G4double MeanTeta2 = fTetPrj2/(2*fTotalCount);
154 G4double rmsTeta = std::sqrt(std::fabs(MeanTeta2 - MeanTeta*MeanTeta));
156 G4double MeanCorrel = fPhiCor /(fTotalCount);
157 G4double MeanCorrel2 = fPhiCor2/(fTotalCount);
158 G4double rmsCorrel = std::sqrt(std::fabs(MeanCorrel2-MeanCorrel*MeanCorrel));
162 <<
"\n geomPathLength :\t" <<
G4BestUnit(MeanGPL,
"Length")
164 <<
"\n lateralDisplac :\t" <<
G4BestUnit(MeanLaD,
"Length")
166 <<
"\n Psi :\t" << MeanPsi/
mrad <<
" mrad"
167 <<
" +- " << rmsPsi /
mrad <<
" mrad"
168 <<
" (" << MeanPsi/
deg <<
" deg"
169 <<
" +- " << rmsPsi /
deg <<
" deg)"
172 G4cout <<
"\n Theta_plane :\t" << rmsTeta/
mrad <<
" mrad"
173 <<
" (" << rmsTeta/
deg <<
" deg)"
174 <<
"\n phi correlation:\t" << MeanCorrel
175 <<
" +- " << rmsCorrel
176 <<
" (std::cos(phi_pos - phi_dir))"
182 G4cout <<
"\n Verification from G4EmCalculator. \n";
194 if (MeanTPL/range >= 0.99) efFacrange = 1.;
197 <<
"\n range from restrict dE/dx:\t" <<
G4BestUnit(range,
"Length")
198 <<
"\n ---> effective facRange :\t" << efFacrange
201 G4cout <<
"\n compute theta0 from Highland :\t"
210 while (fProcCounter->size()>0){
212 fProcCounter->pop_back();
219 if ( analysisManager->IsActive() ) {
220 analysisManager->Write();
221 analysisManager->CloseFile();
245 G4double teta0 = 13.6*
MeV*z*std::sqrt(t)*(1.+0.038*std::log(t))/bpc;
std::vector< OneProcessCount * > ProcessesCount
The primary generator action class with particle gun.
void BeginOfRunAction(const G4Run *)
G4double ComputeMscHighland(G4double pathLength)
const G4String & GetName() const
G4double GetDensity() const
#define G4BestUnit(a, b)
#define G4_USE_G4BESTUNIT_FOR_VERBOSE 1
const G4String & GetParticleName() const
G4GLOB_DLL std::ostream G4cout
const G4ParticleDefinition const G4Material *G4double range
G4int GetNumberOfEvent() const
G4Material * GetMaterial()
G4double GetRangeFromRestricteDEDX(G4double kinEnergy, const G4ParticleDefinition *, const G4Material *, const G4Region *r=nullptr)
void EndOfRunAction(const G4Run *)
static constexpr double eplus
static constexpr double mrad
void CountProcesses(G4String)
G4double GetRadlen() const
static void showEngineStatus()
G4double GetPDGMass() const
T max(const T t1, const T t2)
brief Return the largest of the two arguments
G4ParticleGun * GetParticleGun()
G4double energy(const ThreeVector &p, const G4double m)
G4ParticleDefinition * GetParticleDefinition() const
Detector construction class to define materials and geometry.
static constexpr double MeV
static constexpr double deg
G4double GetPDGCharge() const
G4CsvAnalysisManager G4AnalysisManager
G4double GetMeanFreePath(G4double kinEnergy, const G4ParticleDefinition *, const G4String &processName, const G4Material *, const G4Region *r=nullptr)
G4double GetParticleEnergy() const