Geant4 Cross Reference |
1 // 1 // 2 // ******************************************* 2 // ******************************************************************** 3 // * License and Disclaimer << 3 // * DISCLAIMER * 4 // * 4 // * * 5 // * The Geant4 software is copyright of th << 5 // * The following disclaimer summarizes all the specific disclaimers * 6 // * the Geant4 Collaboration. It is provided << 6 // * of contributors to this software. The specific disclaimers,which * 7 // * conditions of the Geant4 Software License << 7 // * govern, are listed with their locations in: * 8 // * LICENSE and available at http://cern.ch/ << 8 // * http://cern.ch/geant4/license * 9 // * include a list of copyright holders. << 10 // * 9 // * * 11 // * Neither the authors of this software syst 10 // * Neither the authors of this software system, nor their employing * 12 // * institutes,nor the agencies providing fin 11 // * institutes,nor the agencies providing financial support for this * 13 // * work make any representation or warran 12 // * work make any representation or warranty, express or implied, * 14 // * regarding this software system or assum 13 // * regarding this software system or assume any liability for its * 15 // * use. Please see the license in the file << 14 // * use. * 16 // * for the full disclaimer and the limitatio << 17 // * 15 // * * 18 // * This code implementation is the result << 16 // * This code implementation is the intellectual property of the * 19 // * technical work of the GEANT4 collaboratio << 17 // * GEANT4 collaboration. * 20 // * By using, copying, modifying or distri << 18 // * By copying, distributing or modifying the Program (or any work * 21 // * any work based on the software) you ag << 19 // * based on the Program) you indicate your acceptance of this * 22 // * use in resulting scientific publicati << 20 // * statement, and all its terms. * 23 // * acceptance of all terms of the Geant4 Sof << 24 // ******************************************* 21 // ******************************************************************** 25 // 22 // 26 // 23 // 27 // ------------------------------------------- 24 // -------------------------------------------------------------- 28 // GEANT 4 - Underground Dark Matter Detecto 25 // GEANT 4 - Underground Dark Matter Detector Advanced Example 29 // 26 // 30 // For information related to this code c 27 // For information related to this code contact: Alex Howard 31 // e-mail: alexander.howard@cern.ch << 28 // e-mail: a.s.howard@ic.ac.uk 32 // ------------------------------------------- 29 // -------------------------------------------------------------- 33 // Comments 30 // Comments 34 // 31 // 35 // Underground Advanced 32 // Underground Advanced 36 // by A. Howard and H. Araujo 33 // by A. Howard and H. Araujo 37 // (27th November 2001) 34 // (27th November 2001) 38 // 35 // 39 // History: 36 // History: 40 // 17 Jan 2002 Alex Howard Added Analysis 37 // 17 Jan 2002 Alex Howard Added Analysis 41 // 23 Oct 2009 Luciano Pandola Removed un-nece << 42 // 38 // 43 // RunAction program 39 // RunAction program 44 // ------------------------------------------- 40 // -------------------------------------------------------------- 45 41 46 #include "DMXRunActionMessenger.hh" 42 #include "DMXRunActionMessenger.hh" 47 #include "DMXRunAction.hh" 43 #include "DMXRunAction.hh" 48 44 49 #include "G4Run.hh" 45 #include "G4Run.hh" >> 46 #include "G4UImanager.hh" >> 47 #include "G4VVisManager.hh" 50 #include "G4ios.hh" 48 #include "G4ios.hh" 51 #include "G4AnalysisManager.hh" << 52 49 53 #include <fstream> 50 #include <fstream> >> 51 #include <iomanip> >> 52 #include <vector> >> 53 >> 54 #ifdef G4ANALYSIS_USE >> 55 #include "DMXAnalysisManager.hh" >> 56 #endif 54 57 55 //....oooOO0OOooo........oooOO0OOooo........oo 58 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 56 59 57 DMXRunAction::DMXRunAction() 60 DMXRunAction::DMXRunAction() 58 { 61 { 59 runMessenger = new DMXRunActionMessenger(thi 62 runMessenger = new DMXRunActionMessenger(this); 60 savehitsFile = "hits.out"; 63 savehitsFile = "hits.out"; 61 savepmtFile = "pmt.out"; 64 savepmtFile = "pmt.out"; 62 savehistFile = "dmx"; << 65 savehistFile = "dmx.his"; >> 66 plotevent = false; >> 67 interactplot = false; 63 } 68 } 64 69 65 //....oooOO0OOooo........oooOO0OOooo........oo 70 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 66 71 67 DMXRunAction::~DMXRunAction() 72 DMXRunAction::~DMXRunAction() 68 { 73 { 69 delete runMessenger; 74 delete runMessenger; 70 runMessenger = 0; 75 runMessenger = 0; 71 76 72 } 77 } 73 78 74 //....oooOO0OOooo........oooOO0OOooo........oo 79 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 75 80 76 void DMXRunAction::BeginOfRunAction(const G4Ru 81 void DMXRunAction::BeginOfRunAction(const G4Run* aRun) 77 { 82 { 78 //Master mode or sequential << 83 79 if (IsMaster()) << 84 G4cout << "### Run " << aRun->GetRunID() << " start." << G4endl; 80 G4cout << "### Run " << aRun->GetRunID() < << 81 else << 82 G4cout << "### Run " << aRun->GetRunID() < << 83 85 84 // Book histograms and ntuples << 86 if (G4VVisManager::GetConcreteInstance()) { 85 Book(); << 87 G4UImanager* UI = G4UImanager::GetUIpointer(); >> 88 UI->ApplyCommand("/vis/scene/notifyHandlers"); >> 89 } 86 90 >> 91 #ifdef G4ANALYSIS_USE >> 92 // Book histograms and ntuples >> 93 DMXAnalysisManager* analysis = DMXAnalysisManager::getInstance(); >> 94 analysis->book(savehistFile, plotevent); >> 95 // analysis->PlotHistosInit(); >> 96 #endif 87 } 97 } 88 98 89 //....oooOO0OOooo........oooOO0OOooo........oo 99 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 90 100 91 void DMXRunAction::EndOfRunAction(const G4Run* 101 void DMXRunAction::EndOfRunAction(const G4Run*) 92 {;} << 102 { 93 << 94 //....oooOO0OOooo........oooOO0OOooo........oo << 95 << 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 103 167 return; << 104 #ifdef G4ANALYSIS_USE >> 105 DMXAnalysisManager* analysis = DMXAnalysisManager::getInstance(); >> 106 //analysis->PlotHistos(interactplot); >> 107 //analysis->PulseTimeFit(); >> 108 analysis->Finish(); >> 109 #endif >> 110 >> 111 if (G4VVisManager::GetConcreteInstance()) { >> 112 G4UImanager::GetUIpointer()->ApplyCommand("/vis/viewer/update"); >> 113 } 168 114 169 } 115 } 170 116 171 << 117 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 172 118