34 #include "RunAction.hh"
35 #include "PhysicsList.hh"
37 #include "PrimaryGeneratorAction.hh"
38 #include "HistoManager.hh"
53 :fDetector(det),fPhysics(phys),fKinematic(kin)
78 fEdeposit = fEdeposit2 = 0.;
82 fTrackLen = fTrackLen2 = 0.;
86 fProjRange = fProjRange2 = 0.;
90 fNbOfSteps = fNbOfSteps2 = 0; fStepSize = fStepSize2 = 0.;
94 fStatus[0] = fStatus[1] = fStatus[2] = 0;
99 fCsdaRange[i] = fXfrontNorm[i] = 0.;
105 if ( analysisManager->IsActive() ) {
106 analysisManager->OpenFile();
113 if (analysisManager->GetH1Activation(ih))
114 stepMax = analysisManager->GetH1Width(ih);
121 if (width == 0.) width = 1.;
125 for (
G4int i=1; i<= NbOfAbsor; i++) {
127 fCsdaRange[i] = emCalculator.
GetCSDARange(energy,particle,material);
128 if (analysisManager->GetH1Activation(ih))
129 stepMax = std::min(stepMax, width*fCsdaRange[i]);
132 fXfrontNorm[i] = fXfrontNorm[i-1] + thickness/fCsdaRange[i-1];
143 std::ios::fmtflags mode =
G4cout.flags();
144 G4cout.setf(std::ios::fixed,std::ios::floatfield);
147 if (NbofEvents == 0)
return;
148 G4double fNbofEvents = double(NbofEvents);
159 G4cout <<
"\n ======================== run summary ======================\n";
164 <<
"\n The run consists of " << NbofEvents <<
" "<< partName <<
" of "
166 <<
" through " << NbOfAbsor <<
" absorbers: \n";
167 for (
G4int i=1; i<= NbOfAbsor; i++) {
172 << material->
GetName() <<
" (density: "
175 G4cout <<
"\n ============================================================\n";
179 fEdeposit /= NbofEvents; fEdeposit2 /= NbofEvents;
180 G4double rms = fEdeposit2 - fEdeposit*fEdeposit;
181 if (rms>0.) rms = std::sqrt(rms);
else rms = 0.;
185 <<
"\n Total Energy deposited = " <<
G4BestUnit(fEdeposit,
"Energy")
191 fTrackLen /= NbofEvents; fTrackLen2 /= NbofEvents;
192 rms = fTrackLen2 - fTrackLen*fTrackLen;
193 if (rms>0.) rms = std::sqrt(rms);
else rms = 0.;
197 <<
"\n Track length of primary track = " <<
G4BestUnit(fTrackLen,
"Length")
202 if (NbOfAbsor == 1) {
204 <<
"\n Range from EmCalculator = " <<
G4BestUnit(fCsdaRange[1],
"Length")
205 <<
" (from full dE/dx)" <<
G4endl;
210 fProjRange /= NbofEvents; fProjRange2 /= NbofEvents;
211 rms = fProjRange2 - fProjRange*fProjRange;
212 if (rms>0.) rms = std::sqrt(rms);
else rms = 0.;
215 <<
"\n Projected range = " <<
G4BestUnit(fProjRange,
"Length")
221 G4double fNbSteps = fNbOfSteps/fNbofEvents, fNbSteps2 = fNbOfSteps2/fNbofEvents;
222 rms = fNbSteps2 - fNbSteps*fNbSteps;
223 if (rms>0.) rms = std::sqrt(rms);
else rms = 0.;
226 G4cout <<
"\n Nb of steps of primary track = " << fNbSteps <<
" +- " << rms;
228 fStepSize /= NbofEvents; fStepSize2 /= NbofEvents;
229 rms = fStepSize2 - fStepSize*fStepSize;
230 if (rms>0.) rms = std::sqrt(rms);
else rms = 0.;
234 <<
"\t Step size= " <<
G4BestUnit(fStepSize,
"Length")
241 G4double transmit = 100.*fStatus[1]/fNbofEvents;
242 G4double reflected = 100.*fStatus[2]/fNbofEvents;
246 <<
"\n absorbed = " << absorbed <<
" %"
247 <<
" transmit = " << transmit <<
" %"
248 <<
" reflected = " << reflected <<
" %" <<
G4endl;
254 G4double binWidth = analysisManager->GetH1Width(ih);
256 analysisManager->ScaleH1(ih,fac);
259 binWidth = analysisManager->GetH1Width(ih);
260 fac = (1./(NbofEvents*binWidth))*(
g/(
MeV*
cm2));
261 analysisManager->ScaleH1(ih,fac);
264 G4cout.setf(mode,std::ios::floatfield);
268 if ( analysisManager->IsActive() ) {
269 analysisManager->Write();
270 analysisManager->CloseFile();