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 "G4ios.hh" 50 #include "G4ios.hh" 51 #include "G4AnalysisManager.hh" << 52 51 53 #include <fstream> 52 #include <fstream> 54 53 >> 54 #include "DMXAnalysisManager.hh" >> 55 55 //....oooOO0OOooo........oooOO0OOooo........oo 56 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 56 57 57 DMXRunAction::DMXRunAction() 58 DMXRunAction::DMXRunAction() 58 { 59 { 59 runMessenger = new DMXRunActionMessenger(thi 60 runMessenger = new DMXRunActionMessenger(this); 60 savehitsFile = "hits.out"; 61 savehitsFile = "hits.out"; 61 savepmtFile = "pmt.out"; 62 savepmtFile = "pmt.out"; 62 savehistFile = "dmx"; 63 savehistFile = "dmx"; 63 } 64 } 64 65 65 //....oooOO0OOooo........oooOO0OOooo........oo 66 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 66 67 67 DMXRunAction::~DMXRunAction() 68 DMXRunAction::~DMXRunAction() 68 { 69 { 69 delete runMessenger; 70 delete runMessenger; 70 runMessenger = 0; 71 runMessenger = 0; 71 72 72 } 73 } 73 74 74 //....oooOO0OOooo........oooOO0OOooo........oo 75 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 75 76 76 void DMXRunAction::BeginOfRunAction(const G4Ru 77 void DMXRunAction::BeginOfRunAction(const G4Run* aRun) 77 { 78 { 78 //Master mode or sequential 79 //Master mode or sequential 79 if (IsMaster()) 80 if (IsMaster()) 80 G4cout << "### Run " << aRun->GetRunID() < 81 G4cout << "### Run " << aRun->GetRunID() << " starts (master)." << G4endl; 81 else 82 else 82 G4cout << "### Run " << aRun->GetRunID() < 83 G4cout << "### Run " << aRun->GetRunID() << " starts (worker)." << G4endl; 83 84 84 // Book histograms and ntuples 85 // Book histograms and ntuples 85 Book(); 86 Book(); 86 87 87 } 88 } 88 89 89 //....oooOO0OOooo........oooOO0OOooo........oo 90 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 90 91 91 void DMXRunAction::EndOfRunAction(const G4Run* 92 void DMXRunAction::EndOfRunAction(const G4Run*) 92 {;} 93 {;} 93 94 94 //....oooOO0OOooo........oooOO0OOooo........oo 95 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 95 96 96 void DMXRunAction::Book() 97 void DMXRunAction::Book() 97 { 98 { 98 // Get/create analysis manager 99 // Get/create analysis manager 99 G4AnalysisManager* man = G4AnalysisManager:: 100 G4AnalysisManager* man = G4AnalysisManager::Instance(); 100 man->SetDefaultFileType("root"); << 101 << 102 man->SetNtupleMerging(true); << 103 101 104 // Open an output file 102 // Open an output file 105 man->OpenFile(savehistFile); 103 man->OpenFile(savehistFile); 106 man->SetFirstHistoId(1); 104 man->SetFirstHistoId(1); 107 man->SetFirstNtupleId(1); 105 man->SetFirstNtupleId(1); 108 106 109 107 110 // ---- primary ntuple ------ 108 // ---- primary ntuple ------ 111 // id==1 109 // id==1 112 man->CreateNtuple("tree1", "Particle Source 110 man->CreateNtuple("tree1", "Particle Source Energy"); 113 man->CreateNtupleDColumn("energy"); 111 man->CreateNtupleDColumn("energy"); 114 man->FinishNtuple(); 112 man->FinishNtuple(); 115 113 116 // ---- secondary ntuple ------ 114 // ---- secondary ntuple ------ 117 //id==2 115 //id==2 118 man->CreateNtuple("tree2", "Scintillation Hi 116 man->CreateNtuple("tree2", "Scintillation Hits Info"); 119 man->CreateNtupleDColumn("Event"); 117 man->CreateNtupleDColumn("Event"); 120 man->CreateNtupleDColumn("e_prim"); 118 man->CreateNtupleDColumn("e_prim"); 121 man->CreateNtupleDColumn("tot_e"); 119 man->CreateNtupleDColumn("tot_e"); 122 man->CreateNtupleDColumn("s_hits"); 120 man->CreateNtupleDColumn("s_hits"); 123 man->CreateNtupleDColumn("xe_time"); 121 man->CreateNtupleDColumn("xe_time"); 124 man->CreateNtupleDColumn("num_ph"); 122 man->CreateNtupleDColumn("num_ph"); 125 man->CreateNtupleDColumn("avphtime"); 123 man->CreateNtupleDColumn("avphtime"); 126 man->CreateNtupleDColumn("firstpart"); 124 man->CreateNtupleDColumn("firstpart"); 127 man->CreateNtupleDColumn("firstparte"); 125 man->CreateNtupleDColumn("firstparte"); 128 man->CreateNtupleDColumn("gamma"); 126 man->CreateNtupleDColumn("gamma"); 129 man->CreateNtupleDColumn("neutron"); 127 man->CreateNtupleDColumn("neutron"); 130 man->CreateNtupleDColumn("posi"); 128 man->CreateNtupleDColumn("posi"); 131 man->CreateNtupleDColumn("elec"); 129 man->CreateNtupleDColumn("elec"); 132 man->CreateNtupleDColumn("other"); 130 man->CreateNtupleDColumn("other"); 133 man->CreateNtupleDColumn("seed1"); 131 man->CreateNtupleDColumn("seed1"); 134 man->CreateNtupleDColumn("seed2"); 132 man->CreateNtupleDColumn("seed2"); 135 man->FinishNtuple(); 133 man->FinishNtuple(); 136 134 137 // ---- tertiary ntuple ------ 135 // ---- tertiary ntuple ------ 138 //id==3 136 //id==3 139 man->CreateNtuple("tree3", "PMT Hits Info"); 137 man->CreateNtuple("tree3", "PMT Hits Info"); 140 man->CreateNtupleDColumn("event"); 138 man->CreateNtupleDColumn("event"); 141 man->CreateNtupleDColumn("hits"); 139 man->CreateNtupleDColumn("hits"); 142 man->CreateNtupleDColumn("xpos"); 140 man->CreateNtupleDColumn("xpos"); 143 man->CreateNtupleDColumn("ypos"); 141 man->CreateNtupleDColumn("ypos"); 144 man->CreateNtupleDColumn("zpos"); 142 man->CreateNtupleDColumn("zpos"); 145 man->FinishNtuple(); 143 man->FinishNtuple(); 146 144 147 // Creating 1-dimensional histograms 145 // Creating 1-dimensional histograms 148 man->CreateH1("h1","Source Energy /keV", 10 146 man->CreateH1("h1","Source Energy /keV", 1000,0.,10000.); 149 man->CreateH1("h2","Energy Deposit /keV", 10 147 man->CreateH1("h2","Energy Deposit /keV", 1000,0.,1000.); 150 man->CreateH1("h3","Nuclear Recoil Edep /keV 148 man->CreateH1("h3","Nuclear Recoil Edep /keV", 100,0.,100.); 151 man->CreateH1("h4","Number of Photons - LowE 149 man->CreateH1("h4","Number of Photons - LowE", 200,0.,200.); 152 man->CreateH1("h5","Number of Photons - High 150 man->CreateH1("h5","Number of Photons - HighE", 100,0.,10000.); 153 man->CreateH1("h6","Average Photon Arrival/n 151 man->CreateH1("h6","Average Photon Arrival/ns", 200,0.,200.); 154 man->CreateH1("h7","1st event Photon Arrival 152 man->CreateH1("h7","1st event Photon Arrival", 200,0.,200.); 155 man->CreateH1("h8","Gamma Energy Deposit/keV 153 man->CreateH1("h8","Gamma Energy Deposit/keV", 1000,0.,1000.); 156 man->CreateH1("h9","Neutron Ener Deposit/keV 154 man->CreateH1("h9","Neutron Ener Deposit/keV", 1000,0.,1000.); 157 man->CreateH1("h10","Electron Ener Deposit/k 155 man->CreateH1("h10","Electron Ener Deposit/keV",1000,0.,1000.); 158 man->CreateH1("h11","Positron Ener Deposit/k 156 man->CreateH1("h11","Positron Ener Deposit/keV",1000,0.,1000.); 159 man->CreateH1("h12","Other Ener Deposit/keV" 157 man->CreateH1("h12","Other Ener Deposit/keV", 1000,0.,1000.); 160 158 161 //Creating 2-dimensional histograms 159 //Creating 2-dimensional histograms 162 man->CreateH2("hh1","PMT Hit Pattern", 160 man->CreateH2("hh1","PMT Hit Pattern", 163 300 ,-30.,30.,300,-30.,30.); 161 300 ,-30.,30.,300,-30.,30.); 164 man->CreateH2("hh2","1st event PMT Hit Patte 162 man->CreateH2("hh2","1st event PMT Hit Pattern", 165 300 ,-30.,30.,300,-30.,30.); 163 300 ,-30.,30.,300,-30.,30.); 166 164 167 return; 165 return; 168 166 169 } 167 } 170 168 171 169 172 170