Geant4 Cross Reference |
1 // 1 2 // ******************************************* 3 // * License and Disclaimer 4 // * 5 // * The Geant4 software is copyright of th 6 // * the Geant4 Collaboration. It is provided 7 // * conditions of the Geant4 Software License 8 // * LICENSE and available at http://cern.ch/ 9 // * include a list of copyright holders. 10 // * 11 // * Neither the authors of this software syst 12 // * institutes,nor the agencies providing fin 13 // * work make any representation or warran 14 // * regarding this software system or assum 15 // * use. Please see the license in the file 16 // * for the full disclaimer and the limitatio 17 // * 18 // * This code implementation is the result 19 // * technical work of the GEANT4 collaboratio 20 // * By using, copying, modifying or distri 21 // * any work based on the software) you ag 22 // * use in resulting scientific publicati 23 // * acceptance of all terms of the Geant4 Sof 24 // ******************************************* 25 // 26 #include "Par04RunAction.hh" 27 28 #include "Par04DetectorConstruction.hh" // fo 29 #include "Par04EventAction.hh" // for Par04Ev 30 31 #include "G4AnalysisManager.hh" // for G4Anal 32 33 #include <G4GenericAnalysisManager.hh> // for 34 #include <G4ThreeVector.hh> // for G4ThreeVec 35 #include <G4Types.hh> // for G4int, G4double 36 #include <G4UserRunAction.hh> // for G4UserRu 37 38 //....oooOO0OOooo........oooOO0OOooo........oo 39 40 Par04RunAction::Par04RunAction(Par04DetectorCo 41 : G4UserRunAction(), fDetector(aDetector), f 42 { 43 // Create analysis manager 44 G4AnalysisManager* analysisManager = G4Analy 45 analysisManager->SetDefaultFileType("root"); 46 47 // Default filename, can be overriden with / 48 analysisManager->SetFileName("Par04Output"); 49 } 50 51 //....oooOO0OOooo........oooOO0OOooo........oo 52 53 Par04RunAction::~Par04RunAction() = default; 54 55 //....oooOO0OOooo........oooOO0OOooo........oo 56 57 void Par04RunAction::BeginOfRunAction(const G4 58 { 59 // Get analysis manager 60 G4AnalysisManager* analysisManager = G4Analy 61 62 // Create directories 63 analysisManager->SetNtupleMerging(true); 64 analysisManager->SetVerboseLevel(0); 65 66 // Get detector dimensions 67 G4int cellNumZ = fDetector->GetMeshNbOfCells 68 G4int cellNumRho = fDetector->GetMeshNbOfCel 69 G4int cellNumPhi = fDetector->GetMeshNbOfCel 70 G4double cellSizeZ = fDetector->GetMeshSizeO 71 G4double cellSizeRho = fDetector->GetMeshSiz 72 G4double cellSizePhi = fDetector->GetMeshSiz 73 // Default max value of energy stored in his 74 G4double maxEnergy = 1000; 75 76 // Creating control histograms 77 analysisManager->CreateH1("energyParticle", 78 1.1 * maxEnergy); 79 analysisManager->CreateH1("energyDepositedIn 80 1024, 0, 1.1 * max 81 analysisManager->CreateH1("energyRatioInVirt 82 "Ratio of energy d 83 0, 1); 84 analysisManager->CreateH1("time", "Simulatio 85 analysisManager->CreateH1("longProfile", "Lo 86 -0.5 * cellSizeZ, 87 analysisManager->CreateH1("transProfile", "T 88 -0.5 * cellSizeRho 89 analysisManager->CreateH1("longFirstMoment", 90 "First moment of l 91 1024, -0.5 * cellS 92 cellNumZ * cellSiz 93 analysisManager->CreateH1("transFirstMoment" 94 "First moment of t 95 "(mm);Entries", 96 1024, -0.5 * cellS 97 cellNumRho * cellS 98 / 1); // arbitr 99 analysisManager->CreateH1( 100 "longSecondMoment", 101 "Second moment of longitudinal distributio 102 "(mm^{2});Entries", 103 1024, 0, std::pow(cellNumZ * cellSizeZ, 2) 104 analysisManager->CreateH1( 105 "transSecondMoment", "Second moment of tra 106 1024, 0, std::pow(cellNumRho * cellSizeRho 107 analysisManager->CreateH1("hitType", "hit ty 108 analysisManager->CreateH1( 109 "phiProfile", "Azimuthal angle profile, ce 110 -(cellNumPhi - 0.5) * cellSizePhi, (cellNu 111 analysisManager->CreateH1("numHitsInVirtual" 112 analysisManager->CreateH1("cellEnergy", "Cel 113 2); 114 analysisManager->CreateH1("numDepositsInVirt 115 4048, 0, 40000); 116 analysisManager->CreateH1("cellDepositsInVir 117 "Distribution of n 118 analysisManager->CreateH1("energyDepositedIn 119 "Deposited energy 120 1024, 0, 1.1 * max 121 analysisManager->CreateH1( 122 "energyRatioInPhysical", 123 "Ratio of energy deposited in physical rea 124 1); 125 analysisManager->CreateH1("numHitsInPhysical 126 4048, 0, 5000); 127 analysisManager->CreateH1("cellEnergyInPhysi 128 "Physical cell ene 129 analysisManager->CreateH1("numDepositsInPhys 130 "Number of deposit 131 analysisManager->CreateH1("cellDepositsInPhy 132 "Distribution of n 133 0, 1024); 134 135 // Creating ntuple 136 analysisManager->CreateNtuple("global", "Eve 137 analysisManager->CreateNtupleDColumn("Energy 138 analysisManager->CreateNtupleDColumn("SimTim 139 analysisManager->FinishNtuple(); 140 141 analysisManager->CreateNtuple("virtualReadou 142 analysisManager->CreateNtupleDColumn("Energy 143 analysisManager->CreateNtupleIColumn("rhoCel 144 analysisManager->CreateNtupleIColumn("phiCel 145 analysisManager->CreateNtupleIColumn("zCell" 146 analysisManager->FinishNtuple(); 147 148 analysisManager->CreateNtuple("physicalReado 149 analysisManager->CreateNtupleDColumn("Energy 150 analysisManager->CreateNtupleIColumn("layerC 151 analysisManager->CreateNtupleIColumn("rowCel 152 analysisManager->CreateNtupleIColumn("sliceC 153 analysisManager->FinishNtuple(); 154 155 analysisManager->OpenFile(); 156 } 157 158 //....oooOO0OOooo........oooOO0OOooo........oo 159 160 void Par04RunAction::EndOfRunAction(const G4Ru 161 { 162 auto analysisManager = G4AnalysisManager::In 163 analysisManager->Write(); 164 analysisManager->CloseFile(); 165 } 166