49 #include "HistoManager.hh" 
   75 #include "DetectorConstruction.hh" 
  111   fPrimaryKineticEnergy = 0.0;
 
  115   fHisto     = 
new Histo();
 
  116   fHisto->SetVerbose(fVerbose);
 
  125 void HistoManager::Initialise()
 
  127   fAbsZ0       = -0.5*fLength;
 
  160   fHisto->Add1D(
"0",
"Energy deposition (MeV/mm/event) in the target",
 
  161                fNSlices,0.0,fLength/
mm,
MeV/
mm);
 
  162   fHisto->Add1D(
"1",
"Log10 Energy (GeV) of gammas",fNBinsE,-5.,5.,1.0);
 
  163   fHisto->Add1D(
"2",
"Log10 Energy (GeV) of electrons",fNBinsE,-5.,5.,1.0);
 
  164   fHisto->Add1D(
"3",
"Log10 Energy (GeV) of positrons",fNBinsE,-5.,5.,1.0);
 
  165   fHisto->Add1D(
"4",
"Log10 Energy (GeV) of protons",fNBinsE,-5.,5.,1.0);
 
  166   fHisto->Add1D(
"5",
"Log10 Energy (GeV) of neutrons",fNBinsE,-5.,5.,1.0);
 
  167   fHisto->Add1D(
"6",
"Log10 Energy (GeV) of charged pions",fNBinsE,-4.,6.,1.0);
 
  168   fHisto->Add1D(
"7",
"Log10 Energy (GeV) of pi0",fNBinsE,-4.,6.,1.0);
 
  169   fHisto->Add1D(
"8",
"Log10 Energy (GeV) of charged kaons",fNBinsE,-4.,6.,1.0);
 
  170   fHisto->Add1D(
"9",
"Log10 Energy (GeV) of neutral kaons",fNBinsE,-4.,6.,1.0);
 
  171   fHisto->Add1D(
"10",
"Log10 Energy (GeV) of deuterons and tritons",
 
  173   fHisto->Add1D(
"11",
"Log10 Energy (GeV) of He3 and alpha",fNBinsE,-5.,5.,1.0);
 
  174   fHisto->Add1D(
"12",
"Log10 Energy (GeV) of Generic Ions",fNBinsE,-5.,5.,1.0);
 
  175   fHisto->Add1D(
"13",
"Log10 Energy (GeV) of muons",fNBinsE,-4.,6.,1.0);
 
  176   fHisto->Add1D(
"14",
"Log10 Energy (GeV) of pi+",fNBinsE,-4.,6.,1.0);
 
  177   fHisto->Add1D(
"15",
"Log10 Energy (GeV) of pi-",fNBinsE,-4.,6.,1.0);
 
  178   fHisto->Add1D(
"16",
"X Section (mb) of Secondary Fragments Z with E>1 GeV (mb)" 
  180   fHisto->Add1D(
"17",
"Secondary Fragment A E>1 GeV",50,0.5,50.5,1.0);
 
  181   fHisto->Add1D(
"18",
"Secondary Fragment Z E<1 GeV",25,0.5,25.5,1.0);
 
  182   fHisto->Add1D(
"19",
"Secondary Fragment A E<1 GeV",50,0.5,50.5,1.0);
 
  183   fHisto->Add1D(
"20",
"X Section (mb) of Secondary Fragments Z (mb) ",
 
  185   fHisto->Add1D(
"21",
"Secondary Fragment A ",50,0.5,50.5,1.0);
 
  197     G4cout << 
"HistoManager: Histograms are booked and run has been started" 
  207   G4cout << 
"HistoManager: End of run actions are started" << 
G4endl;
 
  210   G4cout<<
"========================================================"<<
G4endl;
 
  213   if(fNevt > 0) { x = 1.0/
x; }
 
  232   fEdepSum2 -= fEdepSum*fEdepSum;
 
  233   if(fEdepSum2 > 0.0) fEdepSum2 = std::sqrt(fEdepSum2);
 
  234   else               fEdepSum2 = 0.0;
 
  236   G4cout                         << 
"Beam particle                        " 
  238   G4cout                         << 
"Beam Energy(GeV)                     "  
  240   G4cout                         << 
"Number of events                     "  
  242   G4cout << std::setprecision(4) << 
"Average energy deposit (GeV)         "  
  244          << 
"   RMS(GeV) " << fEdepSum2/
GeV << 
G4endl;
 
  245   G4cout << std::setprecision(4) << 
"Average number of steps              "  
  247   G4cout << std::setprecision(4) << 
"Average number of gamma              "  
  249   G4cout << std::setprecision(4) << 
"Average number of e-                 "  
  251   G4cout << std::setprecision(4) << 
"Average number of e+                 "  
  253   G4cout << std::setprecision(4) << 
"Average number of neutrons           "  
  255   G4cout << std::setprecision(4) << 
"Average number of protons            "  
  257   G4cout << std::setprecision(4) << 
"Average number of antiprotons        "  
  259   G4cout << std::setprecision(4) << 
"Average number of pi+ & pi-          "  
  261   G4cout << std::setprecision(4) << 
"Average number of pi0                "  
  263   G4cout << std::setprecision(4) << 
"Average number of kaons              "  
  265   G4cout << std::setprecision(4) << 
"Average number of muons              "  
  267   G4cout << std::setprecision(4) << 
"Average number of deuterons+tritons  "  
  269   G4cout << std::setprecision(4) << 
"Average number of He3+alpha          "  
  271   G4cout << std::setprecision(4) << 
"Average number of ions               "  
  273   G4cout<<
"========================================================"<<
G4endl;
 
  277   for(
G4int i=0; i<fNHisto; i++) {
 
  278     fHisto->ScaleH1(i,x);
 
  284     fHisto->ScaleH1(16, F); 
 
  285     fHisto->ScaleH1(20, F); 
 
  303   fEdepSum  += fEdepEvt;
 
  304   fEdepSum2 += fEdepEvt*fEdepEvt;
 
  318     fPrimaryKineticEnergy = e;
 
  322       G4cout << 
"### Primary " << name 
 
  323              << 
" kinE(GeV)= " << e/
GeV 
  332       G4cout << 
"=== Secondary " << name 
 
  333              << 
" 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 == 
"HIJING") {
 
  463     G4cout << 
"### SetIonPhysics: Ion Physics FTFP/Binary is added" 
  466     G4cout << 
"Error: Ion Physics HIJING is requested but is not available" 
  469   } 
else if(nam == 
"UrQMD") {
 
  474     G4cout << 
"### SetIonPhysics: Ion Physics UrQMD is added" 
  477     G4cout << 
"Error: Ion Physics UrQMD is requested but is not available" 
  481     G4cout << 
"### HistoManager WARNING: Ion Physics <" 
  482            << nam << 
"> is unknown!" << 
G4endl;
 
G4ParticleDefinition * GetDefinition() const 
 
G4int GetParentID() const 
 
void AddTargetStep(const G4Step *)
 
static G4MuonPlus * MuonPlus()
 
static constexpr double mm
 
Definition of the IonHIJINGPhysics class. 
 
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
 
double A(double temperature)
 
const G4ThreeVector & GetPosition() const 
 
void PhysicsHasBeenModified()
 
static G4KaonZeroShort * KaonZeroShort()
 
static G4AntiProton * AntiProton()
 
static constexpr double eplus
 
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 
 
static constexpr double GeV
 
void ScoreNewTrack(const G4Track *aTrack)
 
void SetVerbose(G4int val)
 
static G4MuonMinus * MuonMinus()
 
static G4Electron * Electron()
 
void SetIonPhysics(const G4String &)
 
static constexpr double MeV
 
static HistoManager * GetPointer()
 
static G4KaonPlus * KaonPlus()
 
G4Track * GetTrack() const 
 
static constexpr double barn
 
G4double GetPDGCharge() const 
 
static constexpr double keV
 
static const G4double pos
 
G4int GetBaryonNumber() const