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 // 26 // 27 // ------------------------------------------- 27 // -------------------------------------------------------------- 28 // GEANT 4 - Underground Dark Matter Detecto 28 // GEANT 4 - Underground Dark Matter Detector Advanced Example 29 // 29 // 30 // For information related to this code c 30 // For information related to this code contact: Alex Howard 31 // e-mail: alexander.howard@cern.ch 31 // e-mail: alexander.howard@cern.ch 32 // ------------------------------------------- 32 // -------------------------------------------------------------- 33 // Comments 33 // Comments 34 // 34 // 35 // Underground Advanced 35 // Underground Advanced 36 // by A. Howard and H. Araujo 36 // by A. Howard and H. Araujo 37 // (27th November 2001) 37 // (27th November 2001) 38 // 38 // 39 // History: 39 // History: 40 // 17 Jan 2002 Alex Howard Added Analysis 40 // 17 Jan 2002 Alex Howard Added Analysis 41 // 23 Oct 2009 Luciano Pandola Removed un-nece 41 // 23 Oct 2009 Luciano Pandola Removed un-necessary calls from EndOfRun() 42 // 42 // 43 // RunAction program 43 // RunAction program 44 // ------------------------------------------- 44 // -------------------------------------------------------------- 45 45 46 #include "DMXRunActionMessenger.hh" 46 #include "DMXRunActionMessenger.hh" 47 #include "DMXRunAction.hh" 47 #include "DMXRunAction.hh" 48 48 49 #include "G4Run.hh" 49 #include "G4Run.hh" >> 50 #include "G4UImanager.hh" >> 51 #include "G4VVisManager.hh" 50 #include "G4ios.hh" 52 #include "G4ios.hh" 51 #include "G4AnalysisManager.hh" << 52 53 53 #include <fstream> 54 #include <fstream> >> 55 #include <iomanip> >> 56 #include <vector> >> 57 >> 58 #ifdef G4ANALYSIS_USE >> 59 #include "DMXAnalysisManager.hh" >> 60 #endif 54 61 55 //....oooOO0OOooo........oooOO0OOooo........oo 62 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 56 63 57 DMXRunAction::DMXRunAction() 64 DMXRunAction::DMXRunAction() 58 { 65 { 59 runMessenger = new DMXRunActionMessenger(thi 66 runMessenger = new DMXRunActionMessenger(this); 60 savehitsFile = "hits.out"; 67 savehitsFile = "hits.out"; 61 savepmtFile = "pmt.out"; 68 savepmtFile = "pmt.out"; 62 savehistFile = "dmx"; << 69 savehistFile = "dmx.his"; >> 70 plotevent = false; >> 71 interactplot = false; 63 } 72 } 64 73 65 //....oooOO0OOooo........oooOO0OOooo........oo 74 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 66 75 67 DMXRunAction::~DMXRunAction() 76 DMXRunAction::~DMXRunAction() 68 { 77 { 69 delete runMessenger; 78 delete runMessenger; 70 runMessenger = 0; 79 runMessenger = 0; 71 80 72 } 81 } 73 82 74 //....oooOO0OOooo........oooOO0OOooo........oo 83 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 75 84 76 void DMXRunAction::BeginOfRunAction(const G4Ru 85 void DMXRunAction::BeginOfRunAction(const G4Run* aRun) 77 { 86 { 78 //Master mode or sequential << 87 79 if (IsMaster()) << 88 G4cout << "### Run " << aRun->GetRunID() << " start." << G4endl; 80 G4cout << "### Run " << aRun->GetRunID() < << 81 else << 82 G4cout << "### Run " << aRun->GetRunID() < << 83 89 84 // Book histograms and ntuples << 90 if (G4VVisManager::GetConcreteInstance()) { 85 Book(); << 91 G4UImanager* UI = G4UImanager::GetUIpointer(); >> 92 UI->ApplyCommand("/vis/scene/notifyHandlers"); >> 93 } 86 94 >> 95 #ifdef G4ANALYSIS_USE >> 96 // Book histograms and ntuples >> 97 DMXAnalysisManager* analysis = DMXAnalysisManager::getInstance(); >> 98 analysis->book(savehistFile, plotevent); >> 99 // analysis->PlotHistosInit(); >> 100 #endif 87 } 101 } 88 102 89 //....oooOO0OOooo........oooOO0OOooo........oo 103 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 90 104 91 void DMXRunAction::EndOfRunAction(const G4Run* 105 void DMXRunAction::EndOfRunAction(const G4Run*) 92 {;} << 106 { 93 << 107 if (G4VVisManager::GetConcreteInstance()) { 94 //....oooOO0OOooo........oooOO0OOooo........oo << 108 G4UImanager::GetUIpointer()->ApplyCommand("/vis/viewer/update"); 95 << 109 } 96 void DMXRunAction::Book() << 97 { << 98 // Get/create analysis manager << 99 G4AnalysisManager* man = G4AnalysisManager:: << 100 man->SetDefaultFileType("root"); << 101 << 102 man->SetNtupleMerging(true); << 103 << 104 // Open an output file << 105 man->OpenFile(savehistFile); << 106 man->SetFirstHistoId(1); << 107 man->SetFirstNtupleId(1); << 108 << 109 << 110 // ---- primary ntuple ------ << 111 // id==1 << 112 man->CreateNtuple("tree1", "Particle Source << 113 man->CreateNtupleDColumn("energy"); << 114 man->FinishNtuple(); << 115 << 116 // ---- secondary ntuple ------ << 117 //id==2 << 118 man->CreateNtuple("tree2", "Scintillation Hi << 119 man->CreateNtupleDColumn("Event"); << 120 man->CreateNtupleDColumn("e_prim"); << 121 man->CreateNtupleDColumn("tot_e"); << 122 man->CreateNtupleDColumn("s_hits"); << 123 man->CreateNtupleDColumn("xe_time"); << 124 man->CreateNtupleDColumn("num_ph"); << 125 man->CreateNtupleDColumn("avphtime"); << 126 man->CreateNtupleDColumn("firstpart"); << 127 man->CreateNtupleDColumn("firstparte"); << 128 man->CreateNtupleDColumn("gamma"); << 129 man->CreateNtupleDColumn("neutron"); << 130 man->CreateNtupleDColumn("posi"); << 131 man->CreateNtupleDColumn("elec"); << 132 man->CreateNtupleDColumn("other"); << 133 man->CreateNtupleDColumn("seed1"); << 134 man->CreateNtupleDColumn("seed2"); << 135 man->FinishNtuple(); << 136 << 137 // ---- tertiary ntuple ------ << 138 //id==3 << 139 man->CreateNtuple("tree3", "PMT Hits Info"); << 140 man->CreateNtupleDColumn("event"); << 141 man->CreateNtupleDColumn("hits"); << 142 man->CreateNtupleDColumn("xpos"); << 143 man->CreateNtupleDColumn("ypos"); << 144 man->CreateNtupleDColumn("zpos"); << 145 man->FinishNtuple(); << 146 << 147 // Creating 1-dimensional histograms << 148 man->CreateH1("h1","Source Energy /keV", 10 << 149 man->CreateH1("h2","Energy Deposit /keV", 10 << 150 man->CreateH1("h3","Nuclear Recoil Edep /keV << 151 man->CreateH1("h4","Number of Photons - LowE << 152 man->CreateH1("h5","Number of Photons - High << 153 man->CreateH1("h6","Average Photon Arrival/n << 154 man->CreateH1("h7","1st event Photon Arrival << 155 man->CreateH1("h8","Gamma Energy Deposit/keV << 156 man->CreateH1("h9","Neutron Ener Deposit/keV << 157 man->CreateH1("h10","Electron Ener Deposit/k << 158 man->CreateH1("h11","Positron Ener Deposit/k << 159 man->CreateH1("h12","Other Ener Deposit/keV" << 160 << 161 //Creating 2-dimensional histograms << 162 man->CreateH2("hh1","PMT Hit Pattern", << 163 300 ,-30.,30.,300,-30.,30.); << 164 man->CreateH2("hh2","1st event PMT Hit Patte << 165 300 ,-30.,30.,300,-30.,30.); << 166 << 167 return; << 168 110 169 } 111 } 170 112 171 << 113 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 172 114