34 #include "RunAction.hh"
36 #include "DetectorConstruction.hh"
37 #include "PrimaryGeneratorAction.hh"
38 #include "HistoManager.hh"
78 fTruePL = fTruePL2 = fGeomPL = fGeomPL2 = 0.;
79 fLDispl = fLDispl2 = fPsiSpa = fPsiSpa2 = 0.;
80 fTetPrj = fTetPrj2 = 0.;
81 fPhiCor = fPhiCor2 = 0.;
86 if ( analysisManager->IsActive() ) {
87 analysisManager->OpenFile();
96 size_t nbProc = fProcCounter->size();
98 while ((i<nbProc)&&((*fProcCounter)[i]->GetName()!=procName)) i++;
99 if (i == nbProc) fProcCounter->push_back(
new OneProcessCount(procName));
101 (*fProcCounter)[i]->Count();
109 if (NbOfEvents == 0)
return;
120 G4cout <<
"\n The run consists of " << NbOfEvents <<
" "<< Particle <<
" of "
123 << material->
GetName() <<
" (density: "
127 G4cout <<
"\n Process calls frequency --->";
128 for (
size_t i=0; i< fProcCounter->size();i++) {
129 G4String procName = (*fProcCounter)[i]->GetName();
130 G4int count = (*fProcCounter)[i]->GetCounter();
131 G4cout <<
"\t" << procName <<
" = " << count;
134 if (fTotalCount == 0)
return;
138 G4double MeanTPL = fTruePL /fTotalCount;
139 G4double MeanTPL2 = fTruePL2/fTotalCount;
140 G4double rmsTPL = std::sqrt(std::fabs(MeanTPL2 - MeanTPL*MeanTPL));
142 G4double MeanGPL = fGeomPL /fTotalCount;
143 G4double MeanGPL2 = fGeomPL2/fTotalCount;
144 G4double rmsGPL = std::sqrt(std::fabs(MeanGPL2 - MeanGPL*MeanGPL));
146 G4double MeanLaD = fLDispl /fTotalCount;
147 G4double MeanLaD2 = fLDispl2/fTotalCount;
148 G4double rmsLaD = std::sqrt(std::fabs(MeanLaD2 - MeanLaD*MeanLaD));
150 G4double MeanPsi = fPsiSpa /(fTotalCount);
151 G4double MeanPsi2 = fPsiSpa2/(fTotalCount);
152 G4double rmsPsi = std::sqrt(std::fabs(MeanPsi2 - MeanPsi*MeanPsi));
154 G4double MeanTeta = fTetPrj /(2*fTotalCount);
155 G4double MeanTeta2 = fTetPrj2/(2*fTotalCount);
156 G4double rmsTeta = std::sqrt(std::fabs(MeanTeta2 - MeanTeta*MeanTeta));
158 G4double MeanCorrel = fPhiCor /(fTotalCount);
159 G4double MeanCorrel2 = fPhiCor2/(fTotalCount);
160 G4double rmsCorrel = std::sqrt(std::fabs(MeanCorrel2-MeanCorrel*MeanCorrel));
164 <<
"\n geomPathLength :\t" <<
G4BestUnit(MeanGPL,
"Length")
166 <<
"\n lateralDisplac :\t" <<
G4BestUnit(MeanLaD,
"Length")
168 <<
"\n Psi :\t" << MeanPsi/
mrad <<
" mrad"
169 <<
" +- " << rmsPsi /
mrad <<
" mrad"
170 <<
" (" << MeanPsi/
deg <<
" deg"
171 <<
" +- " << rmsPsi /
deg <<
" deg)"
174 G4cout <<
"\n Theta_plane :\t" << rmsTeta/
mrad <<
" mrad"
175 <<
" (" << rmsTeta/
deg <<
" deg)"
176 <<
"\n phi correlation:\t" << MeanCorrel
177 <<
" +- " << rmsCorrel
178 <<
" (std::cos(phi_pos - phi_dir))"
184 G4cout <<
"\n Verification from G4EmCalculator. \n";
196 if (MeanTPL/range >= 0.99) efFacrange = 1.;
199 <<
"\n range from restrict dE/dx:\t" <<
G4BestUnit(range,
"Length")
200 <<
"\n ---> effective facRange :\t" << efFacrange
203 G4cout <<
"\n compute theta0 from Highland :\t"
212 while (fProcCounter->size()>0){
214 fProcCounter->pop_back();
221 if ( analysisManager->IsActive() ) {
222 analysisManager->Write();
223 analysisManager->CloseFile();
247 G4double teta0 = 13.6*
MeV*z*std::sqrt(t)*(1.+0.038*std::log(t))/bpc;
std::vector< OneProcessCount * > ProcessesCount
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
void CountProcesses(G4String procName)
G4double GetMeanFreePath(G4double kinEnergy, const G4ParticleDefinition *, const G4String &processName, const G4Material *, const G4Region *r=0)
const G4String & GetParticleName() const
double precision function energy(A, Z)
G4GLOB_DLL std::ostream G4cout
G4int GetNumberOfEvent() const
G4Material * GetMaterial()
void EndOfRunAction(const G4Run *)
G4double GetRangeFromRestricteDEDX(G4double kinEnergy, const G4ParticleDefinition *, const G4Material *, const G4Region *r=0)
ExG4HbookAnalysisManager G4AnalysisManager
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()
G4ParticleDefinition * GetParticleDefinition() const
G4double GetPDGCharge() const
G4double GetParticleEnergy() const