34 #include "RunAction.hh"
36 #include "DetectorConstruction.hh"
37 #include "PrimaryGeneratorAction.hh"
38 #include "HistoManager.hh"
52 : fDetector(det), fPrimary(prim), fProcCounter(0)
77 fTruePL = fTruePL2 = fGeomPL = fGeomPL2 = 0.;
78 fLDispl = fLDispl2 = fPsiSpa = fPsiSpa2 = 0.;
79 fTetPrj = fTetPrj2 = 0.;
80 fPhiCor = fPhiCor2 = 0.;
85 if ( analysisManager->IsActive() ) {
86 analysisManager->OpenFile();
95 size_t nbProc = fProcCounter->size();
97 while ((i<nbProc)&&((*fProcCounter)[i]->GetName()!=procName)) i++;
98 if (i == nbProc) fProcCounter->push_back(
new OneProcessCount(procName));
100 (*fProcCounter)[i]->Count();
108 if (NbOfEvents == 0)
return;
119 G4cout <<
"\n The run consists of " << NbOfEvents <<
" "<< Particle <<
" of "
122 << material->
GetName() <<
" (density: "
126 G4cout <<
"\n Process calls frequency --->";
127 for (
size_t i=0; i< fProcCounter->size();i++) {
128 G4String procName = (*fProcCounter)[i]->GetName();
129 G4int count = (*fProcCounter)[i]->GetCounter();
130 G4cout <<
"\t" << procName <<
" = " << count;
133 if (fTotalCount == 0)
return;
137 G4double MeanTPL = fTruePL /fTotalCount;
138 G4double MeanTPL2 = fTruePL2/fTotalCount;
139 G4double rmsTPL = std::sqrt(std::fabs(MeanTPL2 - MeanTPL*MeanTPL));
141 G4double MeanGPL = fGeomPL /fTotalCount;
142 G4double MeanGPL2 = fGeomPL2/fTotalCount;
143 G4double rmsGPL = std::sqrt(std::fabs(MeanGPL2 - MeanGPL*MeanGPL));
145 G4double MeanLaD = fLDispl /fTotalCount;
146 G4double MeanLaD2 = fLDispl2/fTotalCount;
147 G4double rmsLaD = std::sqrt(std::fabs(MeanLaD2 - MeanLaD*MeanLaD));
149 G4double MeanPsi = fPsiSpa /(fTotalCount);
150 G4double MeanPsi2 = fPsiSpa2/(fTotalCount);
151 G4double rmsPsi = std::sqrt(std::fabs(MeanPsi2 - MeanPsi*MeanPsi));
153 G4double MeanTeta = fTetPrj /(2*fTotalCount);
154 G4double MeanTeta2 = fTetPrj2/(2*fTotalCount);
155 G4double rmsTeta = std::sqrt(std::fabs(MeanTeta2 - MeanTeta*MeanTeta));
157 G4double MeanCorrel = fPhiCor /(fTotalCount);
158 G4double MeanCorrel2 = fPhiCor2/(fTotalCount);
159 G4double rmsCorrel = std::sqrt(std::fabs(MeanCorrel2-MeanCorrel*MeanCorrel));
163 <<
"\n geomPathLength :\t" <<
G4BestUnit(MeanGPL,
"Length")
165 <<
"\n lateralDisplac :\t" <<
G4BestUnit(MeanLaD,
"Length")
167 <<
"\n Psi :\t" << MeanPsi/
mrad <<
" mrad"
168 <<
" +- " << rmsPsi /
mrad <<
" mrad"
169 <<
" (" << MeanPsi/
deg <<
" deg"
170 <<
" +- " << rmsPsi /
deg <<
" deg)"
173 G4cout <<
"\n Theta_plane :\t" << rmsTeta/
mrad <<
" mrad"
174 <<
" (" << rmsTeta/
deg <<
" deg)"
175 <<
"\n phi correlation:\t" << MeanCorrel
176 <<
" +- " << rmsCorrel
177 <<
" (std::cos(phi_pos - phi_dir))"
183 G4cout <<
"\n Verification from G4EmCalculator. \n";
194 G4double efFacrange = MeanTPL/std::max(MSmfp, range);
195 if (MeanTPL/range >= 0.99) efFacrange = 1.;
198 <<
"\n range from restrict dE/dx:\t" <<
G4BestUnit(range,
"Length")
199 <<
"\n ---> effective facRange :\t" << efFacrange
202 G4cout <<
"\n compute theta0 from Highland :\t"
211 while (fProcCounter->size()>0){
213 fProcCounter->pop_back();
220 if ( analysisManager->IsActive() ) {
221 analysisManager->Write();
222 analysisManager->CloseFile();
246 G4double teta0 = 13.6*
MeV*z*std::sqrt(t)*(1.+0.038*std::log(t))/bpc;