Geant4 Cross Reference |
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 #include "Par03RunAction.hh" 27 28 #include "Par03DetectorConstruction.hh" 29 30 #include "G4AnalysisManager.hh" 31 32 Par03RunAction::Par03RunAction(Par03DetectorConstruction* aDetector) 33 : G4UserRunAction(), fDetector(aDetector) 34 { 35 // Create analysis manager 36 G4AnalysisManager* analysisManager = G4AnalysisManager::Instance(); 37 analysisManager->SetDefaultFileType("root"); 38 39 // Default filename, can be overriden with /analysis/setFileName 40 analysisManager->SetFileName("Par03Output"); 41 } 42 43 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 44 45 Par03RunAction::~Par03RunAction() = default; 46 47 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 48 49 void Par03RunAction::BeginOfRunAction(const G4Run*) 50 { 51 // Get detector dimensions 52 G4int cellNumZ = fDetector->GetNbOfLayers(); 53 G4int cellNumRho = fDetector->GetNbOfRhoCells(); 54 G4double cellSizeZ = fDetector->GetLength() / cellNumZ; 55 G4double cellSizeRho = fDetector->GetRadius() / cellNumRho; 56 // Default max value of energy stored in histogram (in GeV) 57 G4double maxEnergy = 100; 58 59 // Get analysis manager 60 auto analysisManager = G4AnalysisManager::Instance(); 61 62 // Creating control histograms 63 analysisManager->CreateH1("energyParticle", "Primary energy;E_{MC} (GeV);Entries", 256, 0, 64 1.1 * maxEnergy); 65 analysisManager->CreateH1("energyDeposited", "Deposited energy;E_{MC} (GeV);Entries", 256, 0, 66 1.1 * maxEnergy); 67 analysisManager->CreateH1( 68 "energyRatio", "Ratio of energy deposited to primary;E_{dep} / E_{MC};Entries", 1024, 0, 1); 69 analysisManager->CreateH1("time", "Simulation time; time (s);Entries", 2048, 0, 30); 70 analysisManager->CreateH1("longProfile", "Longitudinal profile;t (mm);#LTE#GT (MeV)", cellNumZ, 71 -0.5 * cellSizeZ, (cellNumZ - 0.5) * cellSizeZ); 72 analysisManager->CreateH1("transProfile", "Transverse profile;r (mm);#LTE#GT (MeV)", cellNumRho, 73 -0.5 * cellSizeRho, (cellNumRho - 0.5) * cellSizeRho); 74 analysisManager->CreateH1("longFirstMoment", 75 "First moment of longitudinal distribution;#LT#lambda#GT (mm);Entries", 76 1024, -0.5 * cellSizeZ, 77 cellNumZ * cellSizeZ / 2); // arbitrary scaling of max value on axis 78 analysisManager->CreateH1("transFirstMoment", 79 "First moment of transverse distribution;#LTr#GT " 80 "(mm);Entries", 81 1024, -0.5 * cellSizeRho, 82 cellNumRho * cellSizeRho 83 / 10); // arbitrary scaling of max value on axis 84 analysisManager->CreateH1( 85 "longSecondMoment", 86 "Second moment of longitudinal distribution;#LT#lambda^{2}#GT " 87 "(mm^{2});Entries", 88 1024, 0, std::pow(cellNumZ * cellSizeZ, 2) / 25); // arbitrary scaling of max value on axis 89 analysisManager->CreateH1( 90 "transSecondMoment", "Second moment of transverse distribution;#LTr^{2}#GT (mm^{2});Entries", 91 1024, 0, std::pow(cellNumRho * cellSizeRho, 2) / 25); // arbitrary scaling of max value on axis 92 analysisManager->CreateH1("hitType", "hit type;type (0=full, 1= fast);Entries", 2, -0.5, 1.5); 93 94 // Open an output file 95 analysisManager->OpenFile(); 96 } 97 98 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 99 100 void Par03RunAction::EndOfRunAction(const G4Run*) 101 { 102 auto analysisManager = G4AnalysisManager::Instance(); 103 analysisManager->Write(); 104 analysisManager->CloseFile(); 105 analysisManager->Clear(); 106 }