49 #include "HistoManager.hh"
77 #include "DetectorConstruction.hh"
112 fPrimaryKineticEnergy = 0.0;
116 fHisto =
new Histo();
117 fHisto->SetVerbose(fVerbose);
126 void HistoManager::Initialise()
128 fAbsZ0 = -0.5*fLength;
161 fHisto->Add1D(
"0",
"Energy deposition (MeV/mm/event) in the target",
162 fNSlices,0.0,fLength/
mm,
MeV/
mm);
163 fHisto->Add1D(
"1",
"Log10 Energy (GeV) of gammas",fNBinsE,-5.,5.,1.0);
164 fHisto->Add1D(
"2",
"Log10 Energy (GeV) of electrons",fNBinsE,-5.,5.,1.0);
165 fHisto->Add1D(
"3",
"Log10 Energy (GeV) of positrons",fNBinsE,-5.,5.,1.0);
166 fHisto->Add1D(
"4",
"Log10 Energy (GeV) of protons",fNBinsE,-5.,5.,1.0);
167 fHisto->Add1D(
"5",
"Log10 Energy (GeV) of neutrons",fNBinsE,-5.,5.,1.0);
168 fHisto->Add1D(
"6",
"Log10 Energy (GeV) of charged pions",fNBinsE,-4.,6.,1.0);
169 fHisto->Add1D(
"7",
"Log10 Energy (GeV) of pi0",fNBinsE,-4.,6.,1.0);
170 fHisto->Add1D(
"8",
"Log10 Energy (GeV) of charged kaons",fNBinsE,-4.,6.,1.0);
171 fHisto->Add1D(
"9",
"Log10 Energy (GeV) of neutral kaons",fNBinsE,-4.,6.,1.0);
172 fHisto->Add1D(
"10",
"Log10 Energy (GeV) of deuterons and tritons",
174 fHisto->Add1D(
"11",
"Log10 Energy (GeV) of He3 and alpha",fNBinsE,-5.,5.,1.0);
175 fHisto->Add1D(
"12",
"Log10 Energy (GeV) of Generic Ions",fNBinsE,-5.,5.,1.0);
176 fHisto->Add1D(
"13",
"Log10 Energy (GeV) of muons",fNBinsE,-4.,6.,1.0);
177 fHisto->Add1D(
"14",
"Log10 Energy (GeV) of pi+",fNBinsE,-4.,6.,1.0);
178 fHisto->Add1D(
"15",
"Log10 Energy (GeV) of pi-",fNBinsE,-4.,6.,1.0);
179 fHisto->Add1D(
"16",
"X Section (mb) of Secondary Fragments Z with E>1 GeV (mb)"
181 fHisto->Add1D(
"17",
"Secondary Fragment A E>1 GeV",50,0.5,50.5,1.0);
182 fHisto->Add1D(
"18",
"Secondary Fragment Z E<1 GeV",25,0.5,25.5,1.0);
183 fHisto->Add1D(
"19",
"Secondary Fragment A E<1 GeV",50,0.5,50.5,1.0);
184 fHisto->Add1D(
"20",
"X Section (mb) of Secondary Fragments Z (mb) ",
186 fHisto->Add1D(
"21",
"Secondary Fragment A ",50,0.5,50.5,1.0);
198 G4cout <<
"HistoManager: Histograms are booked and run has been started"
208 G4cout <<
"HistoManager: End of run actions are started" <<
G4endl;
211 G4cout<<
"========================================================"<<
G4endl;
214 if(fNevt > 0) { x = 1.0/
x; }
233 fEdepSum2 -= fEdepSum*fEdepSum;
234 if(fEdepSum2 > 0.0) fEdepSum2 = std::sqrt(fEdepSum2);
235 else fEdepSum2 = 0.0;
237 G4cout <<
"Beam particle "
239 G4cout <<
"Beam Energy(GeV) "
241 G4cout <<
"Number of events "
243 G4cout << std::setprecision(4) <<
"Average energy deposit (GeV) "
245 <<
" RMS(GeV) " << fEdepSum2/
GeV <<
G4endl;
246 G4cout << std::setprecision(4) <<
"Average number of steps "
248 G4cout << std::setprecision(4) <<
"Average number of gamma "
250 G4cout << std::setprecision(4) <<
"Average number of e- "
252 G4cout << std::setprecision(4) <<
"Average number of e+ "
254 G4cout << std::setprecision(4) <<
"Average number of neutrons "
256 G4cout << std::setprecision(4) <<
"Average number of protons "
258 G4cout << std::setprecision(4) <<
"Average number of antiprotons "
260 G4cout << std::setprecision(4) <<
"Average number of pi+ & pi- "
262 G4cout << std::setprecision(4) <<
"Average number of pi0 "
264 G4cout << std::setprecision(4) <<
"Average number of kaons "
266 G4cout << std::setprecision(4) <<
"Average number of muons "
268 G4cout << std::setprecision(4) <<
"Average number of deuterons+tritons "
270 G4cout << std::setprecision(4) <<
"Average number of He3+alpha "
272 G4cout << std::setprecision(4) <<
"Average number of ions "
274 G4cout<<
"========================================================"<<
G4endl;
278 for(
G4int i=0; i<fNHisto; i++) {
279 fHisto->ScaleH1(i,x);
285 fHisto->ScaleH1(16, F);
286 fHisto->ScaleH1(20, F);
304 fEdepSum += fEdepEvt;
305 fEdepSum2 += fEdepEvt*fEdepEvt;
319 fPrimaryKineticEnergy = e;
323 G4cout <<
"### Primary " << name
324 <<
" kinE(GeV)= " << e/
GeV
333 G4cout <<
"=== Secondary " << name
334 <<
" kinE(GeV)= " << e/
GeV
339 e = std::log10(e/
GeV);
342 fHisto->Fill(1,e,1.0);
345 fHisto->Fill(2,e,1.0);
348 fHisto->Fill(3,e,1.0);
351 fHisto->Fill(4,e,1.0);
352 }
else if ( pd == fNeutron) {
354 fHisto->Fill(5,e,1.0);
359 fHisto->Fill(6,e,1.0);
360 fHisto->Fill(14,e,1.0);
364 fHisto->Fill(6,e,1.0);
365 fHisto->Fill(15,e,1.0);
369 fHisto->Fill(7,e,1.0);
373 fHisto->Fill(8,e,1.0);
377 fHisto->Fill(9,e,1.0);
380 fHisto->Fill(10,e,1.0);
383 fHisto->Fill(11,e,1.0);
386 fHisto->Fill(12,e,1.0);
390 fHisto->Fill(16,Z,1.0);
391 fHisto->Fill(17,A,1.0);
393 fHisto->Fill(18,Z,1.0);
394 fHisto->Fill(19,A,1.0);
396 fHisto->Fill(20,Z,1.0);
397 fHisto->Fill(21,A,1.0);
401 fHisto->Fill(13,e,1.0);
422 fHisto->Fill(0,z,edep);
426 G4cout <<
"HistoManager::AddEnergy: e(keV)= " << edep/
keV
427 <<
"; z(mm)= " << z/
mm
441 fHisto->SetVerbose(val);
448 fHisto->Fill(
id, x, w);
456 G4cout <<
"### HistoManager WARNING: Ion Physics is already defined: <"
457 << nam <<
"> is ignored!" <<
G4endl;
458 }
else if(nam ==
"DPMJET") {
462 G4cout <<
"### SetIonPhysics: Ion Physics DPMJET/Binary is added"
464 }
else if(nam ==
"FTF") {
468 G4cout <<
"### SetIonPhysics: Ion Physics FTFP/Binary is added"
470 }
else if(nam ==
"UrQMD") {
475 G4cout <<
"### SetIonPhysics: Ion Physics UrQMD is added"
478 G4cout <<
"Error: Ion Physics UrQMD is requested but is not available"
482 G4cout <<
"### HistoManager WARNING: Ion Physics <"
483 << nam <<
"> is unknown!" <<
G4endl;
G4ParticleDefinition * GetDefinition() const
G4int GetParentID() const
void AddTargetStep(const G4Step *)
static G4MuonPlus * MuonPlus()
G4double GetStepLength() const
Definition of the IonUrQMDPhysics class.
const G4ThreeVector & GetPosition() const
static G4KaonZeroLong * KaonZeroLong()
const G4String & GetParticleName() const
static G4KaonMinus * KaonMinus()
G4StepPoint * GetPreStepPoint() const
G4double GetKineticEnergy() const
G4GLOB_DLL std::ostream G4cout
const G4ThreeVector & GetPosition() const
void PhysicsHasBeenModified()
static G4KaonZeroShort * KaonZeroShort()
static G4AntiProton * AntiProton()
static G4Triton * Triton()
static G4Proton * Proton()
static G4PionPlus * PionPlus()
const G4String & GetParticleType() const
static G4Neutron * Neutron()
void Fill(G4int id, G4double x, G4double w)
static G4PionZero * PionZero()
static G4Deuteron * Deuteron()
G4double GetTotalEnergyDeposit() const
G4double GetTotNbOfAtomsPerVolume() const
static G4RunManager * GetRunManager()
static G4Positron * Positron()
void ReplacePhysics(G4VPhysicsConstructor *)
const G4ThreeVector & GetMomentumDirection() const
G4double GetPDGMass() const
static G4PionMinus * PionMinus()
G4StepPoint * GetPostStepPoint() const
void ScoreNewTrack(const G4Track *aTrack)
static G4MuonMinus * MuonMinus()
static G4Electron * Electron()
void SetIonPhysics(const G4String &)
static HistoManager * GetPointer()
static G4KaonPlus * KaonPlus()
G4Track * GetTrack() const
void SetVerbose(G4int value)
G4double GetPDGCharge() const
Definition of the IonDPMJETPhysics class.
G4int GetBaryonNumber() const