34 #include "RunAction.hh"
36 #include "DetectorConstruction.hh"
37 #include "PrimaryGeneratorAction.hh"
56 : detector(det), primary(prim), ProcCounter(0), fAnalysisManager(0)
129 const G4String id[] = {
"h1",
"h2",
"h3",
"h4",
"h5",
130 "h6",
"h7",
"h8",
"h9",
"h10",
"h11",
"h12"};
132 {
"Gamma Energy distribution",
133 "Gamma Cos(Theta) distribution",
134 "Gamma Phi angular distribution",
135 "Gamma longitudinal Polarization",
136 "Electron Energy distribution",
137 "Electron Cos(Theta) distribution",
138 "Electron Phi angular distribution",
139 "Electron longitudinal Polarization",
140 "Positron Energy distribution",
141 "Positron Cos(Theta) distribution",
142 "Positron Phi angular distribution",
143 "Positron longitudinal Polarization"
147 for(
int i=0; i<12; ++i) {
149 if(0==j) { vmin = 0.; vmax = 12.*
MeV; }
150 else if(1==j) { vmin = -1.; vmax = 1.; }
151 else if(2==j) { vmin = 0.; vmax =
pi; }
152 else { vmin = -1.5; vmax = 1.5; }
164 for(
int i=0; i<12; ++i) {
182 while ((i<nbProc)&&((*
ProcCounter)[i]->GetName()!=procName)) i++;
185 (*ProcCounter)[i]->Count();
193 if (NbOfEvents == 0)
return;
204 G4cout <<
"\n The run consists of " << NbOfEvents <<
" "<< Particle <<
" of "
207 << material->
GetName() <<
" (density: "
211 G4cout <<
"\n Process calls frequency --->\n";
213 G4String procName = (*ProcCounter)[i]->GetName();
214 G4int count = (*ProcCounter)[i]->GetCounter();
215 G4cout <<
"\t" << procName <<
" = " << count<<
"\n";
238 CLHEP::HepRandom::showEngineStatus();
255 totalNumber(0), totalNumber2(0),
256 sumEnergy(0), sumEnergy2(0),
257 sumPolarization(0), sumPolarization2(0),
258 sumCosTheta(0), sumCosTheta2(0)
270 totalNumber+=currentNumber;
271 totalNumber2+=currentNumber*currentNumber;
281 sumEnergy+=kinEnergy;
282 sumEnergy2+=kinEnergy*kinEnergy;
283 sumPolarization+=longitudinalPolarization;
284 sumPolarization2+=longitudinalPolarization*longitudinalPolarization;
285 sumCosTheta+=costheta;
286 sumCosTheta2+=costheta*costheta;
293 G4cout<<
"Mean Number per Event :"
295 if (totalNumber==0) totalNumber=1;
296 G4double energyMean=sumEnergy/totalNumber;
297 G4double energyRms=std::sqrt(sumEnergy2/totalNumber-energyMean*energyMean);
299 <<
" +- "<<
G4BestUnit(energyRms,
"Energy")<<
"\n";
300 G4double polarizationMean=sumPolarization/totalNumber;
302 std::sqrt(sumPolarization2/totalNumber-polarizationMean*polarizationMean);
303 G4cout<<
"Mean Polarization :"<< polarizationMean
304 <<
" +- "<<polarizationRms<<
"\n";
312 totalNumber=totalNumber2=0;
313 sumEnergy=sumEnergy2=0;
314 sumPolarization=sumPolarization2=0;
315 sumCosTheta=sumCosTheta2=0;
std::vector< OneProcessCount * > ProcessesCount
void BeginOfRunAction(const G4Run *)
const G4ParticleDefinition * fPositron
const G4String & GetName() const
G4double GetDensity() const
#define G4BestUnit(a, b)
#define G4_USE_G4BESTUNIT_FOR_VERBOSE 1
const G4String & GetParticleName() const
ParticleStatistics electronStats
ParticleStatistics photonStats
G4GLOB_DLL std::ostream G4cout
void FillData(G4double kinEnergy, G4double costheta, G4double longitudinalPolarization)
ParticleStatistics positronStats
G4int GetNumberOfEvent() const
G4Material * GetMaterial()
void EndOfRunAction(const G4Run *)
void PrintResults(G4int totalNumberOfEvents)
void CountProcesses(G4String)
const G4ParticleDefinition * fElectron
ProcessesCount * ProcCounter
static G4Positron * Positron()
G4AnalysisManager * fAnalysisManager
G4ParticleGun * GetParticleGun()
G4double energy(const ThreeVector &p, const G4double m)
PrimaryGeneratorAction * primary
G4ParticleDefinition * GetParticleDefinition() const
static G4Electron * Electron()
DetectorConstruction * detector
Detector construction class to demonstrate various ways of placement.
void FillData(const G4ParticleDefinition *particle, G4double kinEnergy, G4double costheta, G4double phi, G4double longitudinalPolarization)
const G4ParticleDefinition * fGamma
G4double GetParticleEnergy() const
void SaveHisto(G4int nevents)