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 //* ) ( 28 //* ) ( * 29 //* =\ /= 29 //* =\ /= * 30 //* )===( 30 //* )===( * 31 //* / \ CaTS: Calorimeter a 31 //* / \ CaTS: Calorimeter and Tracker Simulation * 32 //* | | is a flexible and e 32 //* | | is a flexible and extend-able framework * 33 //* / \ for the simulation 33 //* / \ for the simulation of various detector * 34 //* \ / systems 34 //* \ / systems * 35 //* \__ _/ https://github.com/ 35 //* \__ _/ https://github.com/hanswenzel/CaTS * 36 //* ( ( 36 //* ( ( * 37 //* ) ) 37 //* ) ) * 38 //* (_( 38 //* (_( * 39 //* CaTS also serves as an example that demons 39 //* CaTS also serves as an example that demonstrates how to use * 40 //* opticks from within Geant4 for the creatio 40 //* opticks from within Geant4 for the creation and propagation of * 41 //* optical photons. 41 //* optical photons. * 42 //* see https://bitbucket.org/simoncblyth/opti 42 //* see https://bitbucket.org/simoncblyth/opticks.git). * 43 //* Ascii Art by Joan Stark: https://www.ascii 43 //* Ascii Art by Joan Stark: https://www.asciiworld.com/-Cats-2-.html * 44 //-------------------------------------------- 44 //--------------------------------------------------------------------- 45 // 45 // 46 /// \file readPhotonHits.cc 46 /// \file readPhotonHits.cc 47 /// \brief example how to read the CaTS::Phot 47 /// \brief example how to read the CaTS::PhotonHits 48 // 48 // 49 // Root headers 49 // Root headers 50 #include "TFile.h" 50 #include "TFile.h" 51 #include "TSystem.h" 51 #include "TSystem.h" 52 #include "TTree.h" 52 #include "TTree.h" 53 #include "TH1.h" 53 #include "TH1.h" 54 #include "TH2.h" 54 #include "TH2.h" 55 // Project headers 55 // Project headers 56 #include "Event.hh" 56 #include "Event.hh" 57 #include "lArTPCHit.hh" 57 #include "lArTPCHit.hh" 58 #include "PhotonHit.hh" 58 #include "PhotonHit.hh" 59 59 60 int main(int argc, char** argv) 60 int main(int argc, char** argv) 61 { 61 { 62 // initialize ROOT 62 // initialize ROOT 63 TSystem ts; 63 TSystem ts; 64 gSystem->Load("libCaTSClassesDict"); 64 gSystem->Load("libCaTSClassesDict"); 65 if(argc < 4) 65 if(argc < 4) 66 { 66 { 67 G4cout << "Program requires 3 arguments: n 67 G4cout << "Program requires 3 arguments: name of input file, name of " 68 "output file, Volume that sensit 68 "output file, Volume that sensitive detector is attached to" 69 << G4endl; 69 << G4endl; 70 exit(1); 70 exit(1); 71 } 71 } 72 TFile* outfile = new TFile(argv[2], "RECREAT 72 TFile* outfile = new TFile(argv[2], "RECREATE"); 73 outfile->cd(); 73 outfile->cd(); 74 TH2F* pos2 = new TH2F("position", "position 74 TH2F* pos2 = new TH2F("position", "position of Photon Hits", 400, -1000., 75 1000., 400, -500, 500) 75 1000., 400, -500, 500); 76 TH1F* time = new TH1F("time", "timing of ph 76 TH1F* time = new TH1F("time", "timing of photon hits", 1000, 0., 250.); 77 TH1F* time0 = new TH1F("time0", "timing of p 77 TH1F* time0 = new TH1F("time0", "timing of photon hits", 1000, 0., 250.); 78 TH1F* time1 = new TH1F("time1", "timing of p 78 TH1F* time1 = new TH1F("time1", "timing of photon hits", 1000, 0., 250.); 79 TH1F* time2 = new TH1F("time2", "timing of p 79 TH1F* time2 = new TH1F("time2", "timing of photon hits", 1000, 0., 250.); 80 TH1F* wl = new TH1F("wl", "wavelength of det 80 TH1F* wl = new TH1F("wl", "wavelength of detected photons", 1000, 0., 250.); 81 TH1F* np = new TH1F("np", "number of detecte 81 TH1F* np = new TH1F("np", "number of detected photons", 100, 0., 50.); 82 TFile fo(argv[1]); 82 TFile fo(argv[1]); 83 fo.GetListOfKeys()->Print(); 83 fo.GetListOfKeys()->Print(); 84 Event* event = new Event(); 84 Event* event = new Event(); 85 TTree* Tevt = (TTree*) fo.Get("Events"); 85 TTree* Tevt = (TTree*) fo.Get("Events"); 86 Tevt->SetBranchAddress("event.", &event); 86 Tevt->SetBranchAddress("event.", &event); 87 TBranch* fevtbranch = Tevt->GetBranch("event 87 TBranch* fevtbranch = Tevt->GetBranch("event."); 88 Int_t nevent = fevtbranch->GetEntries 88 Int_t nevent = fevtbranch->GetEntries(); 89 G4cout << "Nr. of Events: " << nevent << G4 89 G4cout << "Nr. of Events: " << nevent << G4endl; 90 std::string CollectionName = argv[3]; 90 std::string CollectionName = argv[3]; 91 CollectionName = CollectionName 91 CollectionName = CollectionName + "_Photondetector_HC"; 92 for(Int_t i = 0; i < nevent; i++) 92 for(Int_t i = 0; i < nevent; i++) 93 { 93 { 94 fevtbranch->GetEntry(i); 94 fevtbranch->GetEntry(i); 95 auto* hcmap = event->GetHCMap(); 95 auto* hcmap = event->GetHCMap(); 96 for(const auto& ele : *hcmap) 96 for(const auto& ele : *hcmap) 97 { 97 { 98 auto hits = ele.second; 98 auto hits = ele.second; 99 if(ele.first.compare(CollectionName) == 99 if(ele.first.compare(CollectionName) == 0) 100 { 100 { 101 auto hits = ele.second; 101 auto hits = ele.second; 102 G4int NbHits = hits.size(); 102 G4int NbHits = hits.size(); 103 G4cout << "Event: " << i << " Number 103 G4cout << "Event: " << i << " Number of Hits: " << NbHits << G4endl; 104 np->Fill(NbHits); 104 np->Fill(NbHits); 105 for(G4int ii = 0; ii < NbHits; ii++) 105 for(G4int ii = 0; ii < NbHits; ii++) 106 { 106 { 107 PhotonHit* photonHit = dynamic_cast< 107 PhotonHit* photonHit = dynamic_cast<PhotonHit*>(hits.at(ii)); 108 time->Fill(photonHit->GetTime()); 108 time->Fill(photonHit->GetTime()); 109 wl->Fill(photonHit->GetWavelength()) 109 wl->Fill(photonHit->GetWavelength()); 110 if(photonHit->GetPosition().getZ() < 110 if(photonHit->GetPosition().getZ() < -100.) 111 time0->Fill(photonHit->GetTime()); 111 time0->Fill(photonHit->GetTime()); 112 if(photonHit->GetPosition().getZ() > 112 if(photonHit->GetPosition().getZ() > -100. && 113 photonHit->GetPosition().getZ() < 113 photonHit->GetPosition().getZ() < 100) 114 time1->Fill(photonHit->GetTime()); 114 time1->Fill(photonHit->GetTime()); 115 if(photonHit->GetPosition().getZ() < 115 if(photonHit->GetPosition().getZ() < 100.) 116 time2->Fill(photonHit->GetTime()); 116 time2->Fill(photonHit->GetTime()); 117 pos2->Fill(photonHit->GetPosition(). 117 pos2->Fill(photonHit->GetPosition().getZ(), 118 photonHit->GetPosition(). 118 photonHit->GetPosition().getY()); 119 } 119 } 120 } 120 } 121 } 121 } 122 } 122 } 123 outfile->cd(); 123 outfile->cd(); 124 outfile->Write(); 124 outfile->Write(); 125 } 125 } 126 126