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 - ULTRA experiment 25 // GEANT 4 - ULTRA experiment example 29 // ------------------------------------------- 26 // -------------------------------------------------------------- 30 // 27 // 31 // Code developed by: 28 // Code developed by: 32 // B. Tome, M.C. Espirito-Santo, A. Trindade, << 29 // B. Tome, M.C. Espirito-Santo, A. Trindade, P. Rodrigues 33 // 30 // 34 // **************************************** 31 // **************************************************** 35 // * UltraEventAction.cc 32 // * UltraEventAction.cc 36 // **************************************** 33 // **************************************************** 37 // 34 // 38 // Ultra EventAction class. The UltraAnalys 35 // Ultra EventAction class. The UltraAnalysisManager class is used for histogram 39 // filling << 36 // filling if the G4ANALYSIS_USE environment variable is set. 40 // 37 // 41 #include "UltraEventAction.hh" 38 #include "UltraEventAction.hh" >> 39 #include "UltraRunAction.hh" 42 #include "UltraPrimaryGeneratorAction.hh" 40 #include "UltraPrimaryGeneratorAction.hh" 43 #include "UltraOpticalHit.hh" 41 #include "UltraOpticalHit.hh" 44 42 45 #include "G4RunManager.hh" << 43 #include "G4RunManager.hh" 46 #include "G4Event.hh" 44 #include "G4Event.hh" 47 #include "G4EventManager.hh" << 45 #include "G4EventManager.hh" 48 #include "G4SDManager.hh" 46 #include "G4SDManager.hh" 49 #include "G4HCofThisEvent.hh" 47 #include "G4HCofThisEvent.hh" 50 #include "G4VHitsCollection.hh" 48 #include "G4VHitsCollection.hh" 51 #include "G4GeneralParticleSource.hh" << 49 #include "G4GeneralParticleSource.hh" 52 #include "G4AnalysisManager.hh" << 53 #include "G4SystemOfUnits.hh" << 54 50 >> 51 #include "G4TrajectoryContainer.hh" >> 52 #include "G4Trajectory.hh" >> 53 #include "G4VVisManager.hh" >> 54 >> 55 #ifdef G4ANALYSIS_USE >> 56 #include "UltraAnalysisManager.hh" >> 57 #endif 55 //....oooOO0OOooo........oooOO0OOooo........oo 58 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 56 59 57 UltraEventAction::UltraEventAction() << 60 UltraEventAction::UltraEventAction(UltraRunAction* run) 58 :OpticalHitsCollID(-1) << 61 :UltraRun(run),OpticalHitsCollID(-1) 59 {;} 62 {;} 60 63 61 //....oooOO0OOooo........oooOO0OOooo........oo 64 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 62 65 63 UltraEventAction::~UltraEventAction(){;} 66 UltraEventAction::~UltraEventAction(){;} 64 67 65 //....oooOO0OOooo........oooOO0OOooo........oo 68 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 66 69 67 void UltraEventAction::BeginOfEventAction(cons 70 void UltraEventAction::BeginOfEventAction(const G4Event* evt) 68 { 71 { 69 auto printModulo = 100; << 72 G4int printModulo = 100; 70 73 71 evtNb = evt->GetEventID(); 74 evtNb = evt->GetEventID(); 72 75 73 auto SDman = G4SDManager::GetSDMpointer(); << 76 G4SDManager * SDman = G4SDManager::GetSDMpointer(); 74 77 75 78 76 if(OpticalHitsCollID==-1) { 79 if(OpticalHitsCollID==-1) { 77 OpticalHitsCollID = SDman->GetCollectionID 80 OpticalHitsCollID = SDman->GetCollectionID("OpticalHitsCollection"); 78 } 81 } 79 82 80 83 81 if (evtNb%printModulo == 0) 84 if (evtNb%printModulo == 0) 82 G4cout << "\n---> Begin of Event: " << evt 85 G4cout << "\n---> Begin of Event: " << evtNb << G4endl; 83 86 84 } 87 } 85 //....oooOO0OOooo........oooOO0OOooo........oo 88 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 86 89 87 void UltraEventAction::EndOfEventAction(const 90 void UltraEventAction::EndOfEventAction(const G4Event* evt) 88 { 91 { 89 92 90 auto HCE = evt->GetHCofThisEvent(); << 93 G4HCofThisEvent* HCE = evt->GetHCofThisEvent(); 91 UltraOpticalHitsCollection* OpticalHitsColl << 94 UltraOpticalHitsCollection* OpticalHitsColl = 0; >> 95 >> 96 if(HCE){ 92 97 93 // Fill histograms << 98 if(OpticalHitsCollID != -1) OpticalHitsColl = 94 auto man = G4AnalysisManager::Instance(); << 99 (UltraOpticalHitsCollection*)(HCE->GetHC(OpticalHitsCollID)); 95 100 96 if(HCE){ << 101 } 97 if(OpticalHitsCollID != -1) OpticalHitsCol << 102 G4int nOptHits = 0 ; 98 (UltraOpticalHitsCollection*)(HCE->GetHC << 99 } << 100 << 101 auto nOptHits = 0 ; << 102 103 103 if(OpticalHitsColl){ 104 if(OpticalHitsColl){ >> 105 104 nOptHits = OpticalHitsColl->entries(); 106 nOptHits = OpticalHitsColl->entries(); 105 107 106 #ifdef ULTRA_VERBOSE 108 #ifdef ULTRA_VERBOSE 107 if (nOptHits > 0){ 109 if (nOptHits > 0){ 108 G4cout << " Optical Hit # " << " " << "E << 110 G4cout << " Optical Hit # " << " " << "Energy (eV)" << " " << "x,y,z (cm)" << G4endl ; 109 } 111 } 110 #endif 112 #endif 111 113 112 for(auto iHit=0; iHit<nOptHits; iHit++){ << 114 for(G4int iHit=0; iHit<nOptHits; iHit++){ 113 auto HitEnergy = (*OpticalHitsColl)[iHit << 115 114 man->FillH1(1,HitEnergy/eV); << 116 G4double HitEnergy ; >> 117 HitEnergy = (*OpticalHitsColl)[iHit]->GetEnergy() ; >> 118 G4ThreeVector HitPos = (*OpticalHitsColl)[iHit]->GetPosition()/cm; >> 119 >> 120 #ifdef G4ANALYSIS_USE >> 121 UltraAnalysisManager* analysis = UltraAnalysisManager::getInstance(); >> 122 analysis->FillHistogram(1,HitEnergy/eV); >> 123 #endif >> 124 115 } 125 } 116 126 117 } << 127 } >> 128 >> 129 #ifdef G4ANALYSIS_USE >> 130 UltraAnalysisManager* analysis = UltraAnalysisManager::getInstance(); >> 131 analysis->FillHistogram(2,nOptHits); >> 132 #endif >> 133 >> 134 // Define visualization atributes: 118 135 119 man->FillH1(2,nOptHits); << 136 G4String drawFlag = "all"; >> 137 G4VVisManager* pVVisManager = G4VVisManager::GetConcreteInstance(); >> 138 >> 139 if(pVVisManager) >> 140 { >> 141 G4TrajectoryContainer* trajectoryContainer = evt->GetTrajectoryContainer(); >> 142 G4int n_trajectories = 0; >> 143 if (trajectoryContainer) n_trajectories = trajectoryContainer->entries(); >> 144 for(G4int i=0; i<n_trajectories; i++) >> 145 { G4Trajectory* trj = (G4Trajectory *)((*(evt->GetTrajectoryContainer()))[i]); >> 146 if (drawFlag == "all") trj->DrawTrajectory(); >> 147 else if ((drawFlag == "charged")&&(trj->GetCharge() != 0.)) >> 148 trj->DrawTrajectory(); >> 149 } >> 150 } 120 151 121 } 152 } >> 153 >> 154 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo.... 122 155