34 #include "RunAction.hh"
35 #include "DetectorConstruction.hh"
36 #include "PrimaryGeneratorAction.hh"
37 #include "HistoManager.hh"
53 :fDetector(det),fKinematic(kin),fProcCounter(0),fHistoManager(0),
54 fMateWall(0),fMateCavity(0)
74 CLHEP::HepRandom::showEngineStatus();
122 if ( analysisManager->IsActive() ) {
123 analysisManager->OpenFile();
134 while ((i<nbProc)&&((*
fProcCounter)[i]->GetName()!=procName)) i++;
137 (*fProcCounter)[i]->Count();
144 if (NbofEvents == 0)
return;
164 G4double doseOverBeam = doseCavity*surfaceBeam/(NbofEvents*beamEnergy);
170 std::ios::fmtflags mode =
G4cout.flags();
171 G4cout.setf(std::ios::fixed,std::ios::floatfield);
174 G4cout <<
"\n ---> NbofEvents= " << NbofEvents
175 <<
" NbOfelectr= " <<
fNbSec
176 <<
" Tkin= " <<
G4BestUnit(meanEsecond,
"Energy")
177 <<
" (" << rateEmean <<
" %)"
179 <<
" Dose/EnFluence= " <<
G4BestUnit(doseOverBeam,
"Surface/Mass")
180 <<
" (" << rateDose <<
" %)"
184 G4cout.setf(mode,std::ios::floatfield);
192 std::ios::fmtflags mode =
G4cout.flags();
193 G4cout.setf(std::ios::fixed,std::ios::floatfield);
196 if (NbofEvents == 0)
return;
205 G4cout <<
"\n ======================== run summary ======================\n";
209 G4cout <<
"\n The run consists of " << NbofEvents <<
" "<< partName <<
" of "
210 <<
G4BestUnit(energy,
"Energy") <<
" through 2*"
215 G4cout <<
"\n the cavity is "
216 <<
G4BestUnit(fCavityThickness,
"Length") <<
" of "
218 <<
G4BestUnit(fDensityCavity,
"Volumic Mass") <<
"); Mass = "
221 G4cout <<
"\n ============================================================\n";
225 G4cout <<
"\n Process calls frequency --->";
227 G4String procName = (*fProcCounter)[i]->GetName();
228 G4int count = (*fProcCounter)[i]->GetCounter();
229 G4cout <<
" " << procName <<
"= " << count;
236 G4cout <<
"\n Gamma crossSections in wall material :";
239 G4String procName = (*fProcCounter)[i]->GetName();
243 if (massSigma > 0.) {
245 G4cout <<
" " << procName <<
"= "
256 G4double varianceEsec = meanEsecond2 - meanEsecond*meanEsecond;
258 if (varianceEsec>0.) dToverT = std::sqrt(varianceEsec/
fNbSec)/meanEsecond;
264 <<
"\n Mean energy of secondary e- = " <<
G4BestUnit(meanEsecond,
"Energy")
265 <<
" +- " << 100*dToverT <<
" %"
266 <<
" (--> range in wall material = " <<
G4BestUnit(csdaRange,
"Length")
274 G4cout <<
" Mass_energy_transfer coef: "
288 <<
"\n StoppingPower in wall = "
291 <<
G4BestUnit(dedxCavity,
"Energy*Surface/Mass")
297 <<
"\n Charged particle flow in cavity :"
316 G4double varianceEdep = meanEdep2 - meanEdep*meanEdep;
318 if(varianceEdep>0.) dEoverE = std::sqrt(varianceEdep/
fNbEventCavity)/meanEdep;
323 G4double doseOverBeam = doseCavity*surfaceBeam/(NbofEvents*
energy);
331 <<
" +- " << 100*dEoverE <<
" %"
333 <<
" (mean value = " <<
G4BestUnit(meantrack,
"Length") <<
")"
334 <<
"\n Total dose in cavity = " << doseCavity/(
MeV/
mg) <<
" MeV/mg"
335 <<
"\n Dose/EnergyFluence = " <<
G4BestUnit(doseOverBeam,
"Surface/Mass")
340 G4double ratio = doseOverBeam/massTransfCoef;
341 G4double error = ratio*std::sqrt(dEoverE*dEoverE + dToverT*dToverT);
345 <<
"\n (Dose/EnergyFluence)/Mass_energy_transfer = " << ratio
346 <<
" +- " << error <<
G4endl;
352 if (rms>0.) rms = std::sqrt(rms);
else rms = 0.;
356 <<
"\n StepSize of ch. tracks in wall = "
362 if (rms>0.) rms = std::sqrt(rms);
else rms = 0.;
365 <<
"\n StepSize of ch. tracks in cavity = "
372 G4cout.setf(mode,std::ios::floatfield);
385 if ( analysisManager->IsActive() ) {
386 analysisManager->Write();
387 analysisManager->CloseFile();
391 CLHEP::HepRandom::showEngineStatus();
std::vector< OneProcessCount * > ProcessesCount
G4Material * GetCavityMaterial()
void BeginOfRunAction(const G4Run *)
G4Material * GetWallMaterial()
const G4String & GetName() const
G4double GetDensity() const
#define G4BestUnit(a, b)
#define G4_USE_G4BESTUNIT_FOR_VERBOSE 1
void SetRandomNumberStore(G4bool flag)
DetectorConstruction * fDetector
const G4String & GetParticleName() const
HistoManager * fHistoManager
G4double GetDEDX(G4double kinEnergy, const G4ParticleDefinition *, const G4Material *, const G4Region *r=0)
G4double GetWallThickness()
G4double GetCSDARange(G4double kinEnergy, const G4ParticleDefinition *, const G4Material *, const G4Region *r=0)
PrimaryGeneratorAction * fKinematic
G4GLOB_DLL std::ostream G4cout
G4int GetNumberOfEvent() const
void EndOfRunAction(const G4Run *)
ExG4HbookAnalysisManager G4AnalysisManager
G4double GetCavityThickness()
void CountProcesses(G4String)
G4long fPartFlowCavity[2]
ProcessesCount * fProcCounter
static G4RunManager * GetRunManager()
G4ParticleGun * GetParticleGun()
G4double energy(const ThreeVector &p, const G4double m)
G4double ComputeCrossSectionPerVolume(G4double kinEnergy, const G4ParticleDefinition *, const G4String &processName, const G4Material *, G4double cut=0.0)
G4double fEnerFlowCavity[2]
void SurveyConvergence(G4int)
G4ParticleDefinition * GetParticleDefinition() const
G4double GetCavityRadius()
static G4Electron * Electron()
Detector construction class to demonstrate various ways of placement.
static PROLOG_HANDLER error
G4double GetParticleEnergy() const
G4double fCavityThickness