Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer 3 // * License and Disclaimer * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th 5 // * The Geant4 software is copyright of the Copyright Holders of * 6 // * the Geant4 Collaboration. It is provided 6 // * the Geant4 Collaboration. It is provided under the terms and * 7 // * conditions of the Geant4 Software License 7 // * conditions of the Geant4 Software License, included in the file * 8 // * LICENSE and available at http://cern.ch/ 8 // * LICENSE and available at http://cern.ch/geant4/license . These * 9 // * include a list of copyright holders. 9 // * include a list of copyright holders. * 10 // * 10 // * * 11 // * Neither the authors of this software syst 11 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 12 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 13 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 14 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file 15 // * use. Please see the license in the file LICENSE and URL above * 16 // * for the full disclaimer and the limitatio 16 // * for the full disclaimer and the limitation of liability. * 17 // * 17 // * * 18 // * This code implementation is the result 18 // * This code implementation is the result of the scientific and * 19 // * technical work of the GEANT4 collaboratio 19 // * technical work of the GEANT4 collaboration. * 20 // * By using, copying, modifying or distri 20 // * By using, copying, modifying or distributing the software (or * 21 // * any work based on the software) you ag 21 // * any work based on the software) you agree to acknowledge its * 22 // * use in resulting scientific publicati 22 // * use in resulting scientific publications, and indicate your * 23 // * acceptance of all terms of the Geant4 Sof 23 // * acceptance of all terms of the Geant4 Software license. * 24 // ******************************************* 24 // ******************************************************************** 25 // 25 // 26 #include "Par03RunAction.hh" 26 #include "Par03RunAction.hh" 27 << 28 #include "Par03DetectorConstruction.hh" 27 #include "Par03DetectorConstruction.hh" 29 28 30 #include "G4AnalysisManager.hh" 29 #include "G4AnalysisManager.hh" 31 30 32 Par03RunAction::Par03RunAction(Par03DetectorCo 31 Par03RunAction::Par03RunAction(Par03DetectorConstruction* aDetector) 33 : G4UserRunAction(), fDetector(aDetector) << 32 : G4UserRunAction() >> 33 , fDetector(aDetector) 34 { 34 { 35 // Create analysis manager 35 // Create analysis manager 36 G4AnalysisManager* analysisManager = G4Analy 36 G4AnalysisManager* analysisManager = G4AnalysisManager::Instance(); 37 analysisManager->SetDefaultFileType("root"); 37 analysisManager->SetDefaultFileType("root"); 38 38 39 // Default filename, can be overriden with / 39 // Default filename, can be overriden with /analysis/setFileName 40 analysisManager->SetFileName("Par03Output"); 40 analysisManager->SetFileName("Par03Output"); 41 } 41 } 42 42 43 //....oooOO0OOooo........oooOO0OOooo........oo 43 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 44 44 45 Par03RunAction::~Par03RunAction() = default; 45 Par03RunAction::~Par03RunAction() = default; 46 46 47 //....oooOO0OOooo........oooOO0OOooo........oo 47 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 48 48 49 void Par03RunAction::BeginOfRunAction(const G4 49 void Par03RunAction::BeginOfRunAction(const G4Run*) 50 { 50 { 51 // Get detector dimensions 51 // Get detector dimensions 52 G4int cellNumZ = fDetector->GetNbOfLayers(); << 52 G4int cellNumZ = fDetector->GetNbOfLayers(); 53 G4int cellNumRho = fDetector->GetNbOfRhoCell << 53 G4int cellNumRho = fDetector->GetNbOfRhoCells(); 54 G4double cellSizeZ = fDetector->GetLength() << 54 G4double cellSizeZ = fDetector->GetLength() / cellNumZ; 55 G4double cellSizeRho = fDetector->GetRadius( 55 G4double cellSizeRho = fDetector->GetRadius() / cellNumRho; 56 // Default max value of energy stored in his 56 // Default max value of energy stored in histogram (in GeV) 57 G4double maxEnergy = 100; 57 G4double maxEnergy = 100; 58 58 59 // Get analysis manager 59 // Get analysis manager 60 auto analysisManager = G4AnalysisManager::In 60 auto analysisManager = G4AnalysisManager::Instance(); 61 61 62 // Creating control histograms 62 // Creating control histograms 63 analysisManager->CreateH1("energyParticle", << 63 analysisManager->CreateH1("energyParticle", >> 64 "Primary energy;E_{MC} (GeV);Entries", 256, 0, 64 1.1 * maxEnergy); 65 1.1 * maxEnergy); 65 analysisManager->CreateH1("energyDeposited", << 66 analysisManager->CreateH1("energyDeposited", >> 67 "Deposited energy;E_{MC} (GeV);Entries", 256, 0, 66 1.1 * maxEnergy); 68 1.1 * maxEnergy); 67 analysisManager->CreateH1( 69 analysisManager->CreateH1( 68 "energyRatio", "Ratio of energy deposited << 70 "energyRatio", 69 analysisManager->CreateH1("time", "Simulatio << 71 "Ratio of energy deposited to primary;E_{dep} / E_{MC};Entries", 1024, 0, 70 analysisManager->CreateH1("longProfile", "Lo << 72 1); 71 -0.5 * cellSizeZ, << 73 analysisManager->CreateH1("time", "Simulation time; time (s);Entries", 2048, 72 analysisManager->CreateH1("transProfile", "T << 74 0, 30); 73 -0.5 * cellSizeRho << 75 analysisManager->CreateH1( 74 analysisManager->CreateH1("longFirstMoment", << 76 "longProfile", "Longitudinal profile;t (mm);#LTE#GT (MeV)", cellNumZ, 75 "First moment of l << 77 -0.5 * cellSizeZ, (cellNumZ - 0.5) * cellSizeZ); 76 1024, -0.5 * cellS << 78 analysisManager->CreateH1( 77 cellNumZ * cellSiz << 79 "transProfile", "Transverse profile;r (mm);#LTE#GT (MeV)", cellNumRho, >> 80 -0.5 * cellSizeRho, (cellNumRho - 0.5) * cellSizeRho); >> 81 analysisManager->CreateH1( >> 82 "longFirstMoment", >> 83 "First moment of longitudinal distribution;#LT#lambda#GT (mm);Entries", >> 84 1024, -0.5 * cellSizeZ, >> 85 cellNumZ * cellSizeZ / 2); // arbitrary scaling of max value on axis 78 analysisManager->CreateH1("transFirstMoment" 86 analysisManager->CreateH1("transFirstMoment", 79 "First moment of t 87 "First moment of transverse distribution;#LTr#GT " 80 "(mm);Entries", 88 "(mm);Entries", 81 1024, -0.5 * cellS 89 1024, -0.5 * cellSizeRho, 82 cellNumRho * cellS << 90 cellNumRho * cellSizeRho / 83 / 10); // arbit << 91 10); // arbitrary scaling of max value on axis 84 analysisManager->CreateH1( 92 analysisManager->CreateH1( 85 "longSecondMoment", 93 "longSecondMoment", 86 "Second moment of longitudinal distributio 94 "Second moment of longitudinal distribution;#LT#lambda^{2}#GT " 87 "(mm^{2});Entries", 95 "(mm^{2});Entries", 88 1024, 0, std::pow(cellNumZ * cellSizeZ, 2) << 96 1024, 0, >> 97 std::pow(cellNumZ * cellSizeZ, 2) / >> 98 25); // arbitrary scaling of max value on axis >> 99 analysisManager->CreateH1( >> 100 "transSecondMoment", >> 101 "Second moment of transverse distribution;#LTr^{2}#GT (mm^{2});Entries", >> 102 1024, 0, >> 103 std::pow(cellNumRho * cellSizeRho, 2) / >> 104 25); // arbitrary scaling of max value on axis 89 analysisManager->CreateH1( 105 analysisManager->CreateH1( 90 "transSecondMoment", "Second moment of tra << 106 "hitType", "hit type;type (0=full, 1= fast);Entries", 2, -0.5, 1.5); 91 1024, 0, std::pow(cellNumRho * cellSizeRho << 92 analysisManager->CreateH1("hitType", "hit ty << 93 107 94 // Open an output file 108 // Open an output file 95 analysisManager->OpenFile(); 109 analysisManager->OpenFile(); 96 } 110 } 97 111 98 //....oooOO0OOooo........oooOO0OOooo........oo 112 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo...... 99 113 100 void Par03RunAction::EndOfRunAction(const G4Ru 114 void Par03RunAction::EndOfRunAction(const G4Run*) 101 { 115 { 102 auto analysisManager = G4AnalysisManager::In 116 auto analysisManager = G4AnalysisManager::Instance(); 103 analysisManager->Write(); 117 analysisManager->Write(); 104 analysisManager->CloseFile(); 118 analysisManager->CloseFile(); 105 analysisManager->Clear(); 119 analysisManager->Clear(); 106 } 120 }