34 #include "RunAction.hh"
35 #include "DetectorConstruction.hh"
36 #include "PrimaryGeneratorAction.hh"
37 #include "HistoManager.hh"
54 :fDetector(det),fKinematic(kin),fProcCounter(0),fHistoManager(histo)
81 fSurfaceCavity =
pi*fCavityRadius*fCavityRadius;
82 fVolumeCavity = fSurfaceCavity*fCavityThickness;
85 fMassCavity = fVolumeCavity*fDensityCavity;
93 fEsecondary = fEsecondary2 = 0.;
98 fPartFlowCavity[0] = fPartFlowCavity[1] = 0;
99 fEnerFlowCavity[0] = fEnerFlowCavity[1] = 0.;
103 fEdepCavity = fEdepCavity2 = fTrkSegmCavity = 0.;
108 fStepWall = fStepWall2 = fStepCavity = fStepCavity2 =0.;
109 fNbStepWall = fNbStepCavity = 0;
113 fHistoManager->
book();
122 size_t nbProc = fProcCounter->size();
124 while ((i<nbProc)&&((*fProcCounter)[i]->GetName()!=procName)) i++;
125 if (i == nbProc) fProcCounter->push_back(
new OneProcessCount(procName));
127 (*fProcCounter)[i]->Count();
134 if (NbofEvents == 0)
return;
139 if (fNbSec > 0) meanEsecond = fEsecondary/fNbSec;
142 if (fOldEmean > 0.) rateEmean = 100*(meanEsecond/fOldEmean - 1.);
143 fOldEmean = meanEsecond;
153 G4double doseCavity = fEdepCavity/fMassCavity;
154 G4double doseOverBeam = doseCavity*surfaceBeam/(NbofEvents*beamEnergy);
157 if (fOldDose > 0.) rateDose = 100*(doseOverBeam/fOldDose - 1.);
158 fOldDose = doseOverBeam;
160 std::ios::fmtflags mode =
G4cout.flags();
161 G4cout.setf(std::ios::fixed,std::ios::floatfield);
164 G4cout <<
"\n ---> NbofEvents= " << NbofEvents
165 <<
" NbOfelectr= " << fNbSec
166 <<
" Tkin= " <<
G4BestUnit(meanEsecond,
"Energy")
167 <<
" (" << rateEmean <<
" %)"
168 <<
" NbOfelec in cav= " << fPartFlowCavity[0]
169 <<
" Dose/EnFluence= " <<
G4BestUnit(doseOverBeam,
"Surface/Mass")
170 <<
" (" << rateDose <<
" %)"
174 G4cout.setf(mode,std::ios::floatfield);
182 std::ios::fmtflags mode =
G4cout.flags();
183 G4cout.setf(std::ios::fixed,std::ios::floatfield);
186 if (NbofEvents == 0)
return;
195 G4cout <<
"\n ======================== run summary ======================\n";
199 G4cout <<
"\n The run consists of " << NbofEvents <<
" "<< partName <<
" of "
200 <<
G4BestUnit(energy,
"Energy") <<
" through 2*"
201 <<
G4BestUnit(fWallThickness,
"Length") <<
" of "
202 << fMateWall->
GetName() <<
" (density: "
205 G4cout <<
"\n the cavity is "
206 <<
G4BestUnit(fCavityThickness,
"Length") <<
" of "
207 << fMateCavity->
GetName() <<
" (density: "
208 <<
G4BestUnit(fDensityCavity,
"Volumic Mass") <<
"); Mass = "
211 G4cout <<
"\n ============================================================\n";
215 G4cout <<
"\n Process calls frequency --->";
216 for (
size_t i=0; i< fProcCounter->size();i++) {
217 G4String procName = (*fProcCounter)[i]->GetName();
218 G4int count = (*fProcCounter)[i]->GetCounter();
219 G4cout <<
" " << procName <<
"= " << count;
226 G4cout <<
"\n Gamma crossSections in wall material :";
228 for (
size_t i=0; i< fProcCounter->size();i++) {
229 G4String procName = (*fProcCounter)[i]->GetName();
232 procName,fMateWall)/fDensityWall;
233 if (massSigma > 0.) {
235 G4cout <<
" " << procName <<
"= "
244 if (fNbSec == 0)
return;
245 G4double meanEsecond = fEsecondary/fNbSec, meanEsecond2 = fEsecondary2/fNbSec;
246 G4double varianceEsec = meanEsecond2 - meanEsecond*meanEsecond;
248 if (varianceEsec>0.) dToverT = std::sqrt(varianceEsec/fNbSec)/meanEsecond;
254 <<
"\n Mean energy of secondary e- = " <<
G4BestUnit(meanEsecond,
"Energy")
255 <<
" +- " << 100*dToverT <<
" %"
256 <<
" (--> range in wall material = " <<
G4BestUnit(csdaRange,
"Length")
264 G4cout <<
" Mass_energy_transfer coef: "
272 dedxWall /= fDensityWall;
275 dedxCavity /= fDensityCavity;
278 <<
"\n StoppingPower in wall = "
281 <<
G4BestUnit(dedxCavity,
"Energy*Surface/Mass")
287 <<
"\n Charged particle flow in cavity :"
288 <<
"\n Enter --> nbParticles = " << fPartFlowCavity[0]
289 <<
"\t Energy = " <<
G4BestUnit (fEnerFlowCavity[0],
"Energy")
290 <<
"\n Exit --> nbParticles = " << fPartFlowCavity[1]
291 <<
"\t Energy = " <<
G4BestUnit (fEnerFlowCavity[1],
"Energy")
294 if (fPartFlowCavity[0] == 0)
return;
303 if (fNbEventCavity == 0)
return;
304 G4double meanEdep = fEdepCavity/fNbEventCavity;
305 G4double meanEdep2 = fEdepCavity2/fNbEventCavity;
306 G4double varianceEdep = meanEdep2 - meanEdep*meanEdep;
308 if(varianceEdep>0.) dEoverE = std::sqrt(varianceEdep/fNbEventCavity)/meanEdep;
312 G4double doseCavity = fEdepCavity/fMassCavity;
313 G4double doseOverBeam = doseCavity*surfaceBeam/(NbofEvents*
energy);
316 G4double meantrack = fTrkSegmCavity/fPartFlowCavity[0];
320 <<
"\n Total edep in cavity = " <<
G4BestUnit(fEdepCavity,
"Energy")
321 <<
" +- " << 100*dEoverE <<
" %"
322 <<
"\t Total charged trackLength = " <<
G4BestUnit(fTrkSegmCavity,
"Length")
323 <<
" (mean value = " <<
G4BestUnit(meantrack,
"Length") <<
")"
324 <<
"\n Total dose in cavity = " << doseCavity/(
MeV/
mg) <<
" MeV/mg"
325 <<
"\n Dose/EnergyFluence = " <<
G4BestUnit(doseOverBeam,
"Surface/Mass")
330 G4double ratio = doseOverBeam/massTransfCoef;
331 G4double error = ratio*std::sqrt(dEoverE*dEoverE + dToverT*dToverT);
335 <<
"\n (Dose/EnergyFluence)/Mass_energy_transfer = " << ratio
336 <<
" +- " << error <<
G4endl;
340 fStepWall /= fNbStepWall; fStepWall2 /= fNbStepWall;
341 G4double rms = fStepWall2 - fStepWall*fStepWall;
342 if (rms>0.) rms = std::sqrt(rms);
else rms = 0.;
346 <<
"\n StepSize of ch. tracks in wall = "
348 <<
"\t (nbSteps/track = " << double(fNbStepWall)/fNbSec <<
")";
350 fStepCavity /= fNbStepCavity; fStepCavity2 /= fNbStepCavity;
351 rms = fStepCavity2 - fStepCavity*fStepCavity;
352 if (rms>0.) rms = std::sqrt(rms);
else rms = 0.;
355 <<
"\n StepSize of ch. tracks in cavity = "
357 <<
"\t (nbSteps/track = " << double(fNbStepCavity)/fPartFlowCavity[0] <<
")";
362 G4cout.setf(mode,std::ios::floatfield);
366 while (fProcCounter->size()>0){
368 fProcCounter->pop_back();
374 fHistoManager->
save();