ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
B1RunAction.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file B1RunAction.cc
1 //
2 // ********************************************************************
3 // * License and Disclaimer *
4 // * *
5 // * The Geant4 software is copyright of the Copyright Holders of *
6 // * the Geant4 Collaboration. It is provided under the terms and *
7 // * conditions of the Geant4 Software License, included in the file *
8 // * LICENSE and available at http://cern.ch/geant4/license . These *
9 // * include a list of copyright holders. *
10 // * *
11 // * Neither the authors of this software system, nor their employing *
12 // * institutes,nor the agencies providing financial support for this *
13 // * work make any representation or warranty, express or implied, *
14 // * regarding this software system or assume any liability for its *
15 // * use. Please see the license in the file LICENSE and URL above *
16 // * for the full disclaimer and the limitation of liability. *
17 // * *
18 // * This code implementation is the result of the scientific and *
19 // * technical work of the GEANT4 collaboration. *
20 // * By using, copying, modifying or distributing the software (or *
21 // * any work based on the software) you agree to acknowledge its *
22 // * use in resulting scientific publications, and indicate your *
23 // * acceptance of all terms of the Geant4 Software license. *
24 // ********************************************************************
25 //
26 //
29 
30 #include "B1RunAction.hh"
31 #include "B1PrimaryGeneratorAction.hh"
32 #include "B1DetectorConstruction.hh"
33 #include "B1Run.hh"
34 
35 #include "G4RunManager.hh"
36 #include "G4LogicalVolumeStore.hh"
37 #include "G4LogicalVolume.hh"
38 #include "G4UnitsTable.hh"
39 #include "G4SystemOfUnits.hh"
40 
41 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
42 
45 {
46  // add new units for dose
47  //
48  const G4double milligray = 1.e-3*gray;
49  const G4double microgray = 1.e-6*gray;
50  const G4double nanogray = 1.e-9*gray;
51  const G4double picogray = 1.e-12*gray;
52 
53  new G4UnitDefinition("milligray", "milliGy" , "Dose", milligray);
54  new G4UnitDefinition("microgray", "microGy" , "Dose", microgray);
55  new G4UnitDefinition("nanogray" , "nanoGy" , "Dose", nanogray);
56  new G4UnitDefinition("picogray" , "picoGy" , "Dose", picogray);
57 }
58 
59 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
60 
62 {}
63 
64 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
65 
67 {
68  return new B1Run;
69 }
70 
71 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
72 
74 {
75  //inform the runManager to save random number seed
77 }
78 
79 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......
80 
81 void B1RunAction::EndOfRunAction(const G4Run* run)
82 {
83  G4int nofEvents = run->GetNumberOfEvent();
84  if (nofEvents == 0) return;
85 
86  const B1Run* b1Run = static_cast<const B1Run*>(run);
87 
88  // Compute dose
89  //
90  G4double edep = b1Run->GetEdep();
91  G4double edep2 = b1Run->GetEdep2();
92  G4double rms = edep2 - edep*edep/nofEvents;
93  if (rms > 0.) rms = std::sqrt(rms); else rms = 0.;
94 
95  const B1DetectorConstruction* detectorConstruction
96  = static_cast<const B1DetectorConstruction*>
98  G4double mass = detectorConstruction->GetScoringVolume()->GetMass();
99  G4double dose = edep/mass;
100  G4double rmsDose = rms/mass;
101 
102  // Run conditions
103  // note: There is no primary generator action object for "master"
104  // run manager for multi-threaded mode.
105  const B1PrimaryGeneratorAction* generatorAction
106  = static_cast<const B1PrimaryGeneratorAction*>
108  G4String runCondition;
109  if (generatorAction)
110  {
111  const G4ParticleGun* particleGun = generatorAction->GetParticleGun();
112  runCondition += particleGun->GetParticleDefinition()->GetParticleName();
113  runCondition += " of ";
114  G4double particleEnergy = particleGun->GetParticleEnergy();
115  runCondition += G4BestUnit(particleEnergy,"Energy");
116  }
117 
118  // Print
119  //
120  if (IsMaster()) {
121  G4cout
122  << "\n--------------------End of Global Run-----------------------";
123  }
124  else {
125  G4cout
126  << "\n--------------------End of Local Run------------------------";
127  }
128 
129  G4cout
130  << "\n The run consists of " << nofEvents << " "<< runCondition
131  << "\n Dose in scoring volume : "
132  << G4BestUnit(dose,"Dose") << " +- " << G4BestUnit(rmsDose,"Dose")
133  << "\n------------------------------------------------------------\n"
134  << G4endl;
135 }
136 
137 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo......