Geant4 Cross Reference |
1 // 1 2 // ******************************************* 3 // * License and Disclaimer 4 // * 5 // * The Geant4 software is copyright of th 6 // * the Geant4 Collaboration. It is provided 7 // * conditions of the Geant4 Software License 8 // * LICENSE and available at http://cern.ch/ 9 // * include a list of copyright holders. 10 // * 11 // * Neither the authors of this software syst 12 // * institutes,nor the agencies providing fin 13 // * work make any representation or warran 14 // * regarding this software system or assum 15 // * use. Please see the license in the file 16 // * for the full disclaimer and the limitatio 17 // * 18 // * This code implementation is the result 19 // * technical work of the GEANT4 collaboratio 20 // * By using, copying, modifying or distri 21 // * any work based on the software) you ag 22 // * use in resulting scientific publicati 23 // * acceptance of all terms of the Geant4 Sof 24 // ******************************************* 25 // 26 // 27 // ------------------------------------------- 28 // GEANT 4 - ULTRA experiment 29 // ------------------------------------------- 30 // 31 // Code developed by: 32 // B. Tome, M.C. Espirito-Santo, A. Trindade, 33 // 34 // **************************************** 35 // * UltraPMTSD.cc 36 // **************************************** 37 // 38 // Class used to define the Ultra photomult 39 // Hits in this sensitive detector are defi 40 // 41 #include "UltraPMTSD.hh" 42 43 #include "G4Material.hh" 44 #include "G4Step.hh" 45 #include "G4VTouchable.hh" 46 #include "G4TouchableHistory.hh" 47 #include "G4SDManager.hh" 48 #include "G4OpticalPhoton.hh" 49 #include "G4ParticleDefinition.hh" 50 51 //....oooOO0OOooo........oooOO0OOooo........oo 52 53 UltraPMTSD::UltraPMTSD(G4String name):G4VSensi 54 { 55 56 collectionName.insert("OpticalHitsCollection 57 58 } 59 60 61 //....oooOO0OOooo........oooOO0OOooo........oo 62 63 UltraPMTSD::~UltraPMTSD() 64 {;} 65 66 //....oooOO0OOooo........oooOO0OOooo........oo 67 68 void UltraPMTSD::Initialize(G4HCofThisEvent* H 69 { 70 71 72 static int HCID1 = -1; 73 74 75 // SensitiveDetectorName and collectionName 76 77 OpticalHitsCollection = 78 new UltraOpticalHitsCollection(SensitiveDe 79 80 if(HCID1<0) 81 { HCID1 = GetCollectionID(0); } 82 HCE->AddHitsCollection(HCID1,OpticalHitsColl 83 84 } 85 86 //....oooOO0OOooo........oooOO0OOooo........oo 87 88 G4bool UltraPMTSD::ProcessHits(G4Step* aStep,G 89 { 90 91 // Get Material 92 93 auto thisVolume = aStep->GetTrack()->GetVolu 94 const auto particle = aStep->GetTrack()->Get 95 96 97 if (thisVolume != "PMT1" && thisVolume != "P 98 return false; 99 if (particle != G4OpticalPhoton::Definition( 100 return false; 101 102 if(particle == G4OpticalPhoton::Definition() 103 aStep->GetTrack()->SetTrackStatus(fStopAnd 104 105 auto kineticEnergy = aStep->GetTrack()- 106 auto HitPosition = aStep->GetPreStepPoint( 107 108 auto OpticalHit = new UltraOpticalHit ; 109 OpticalHit->SetEnergy(kineticEnergy); 110 OpticalHit->SetPosition(HitPosition); 111 112 113 OpticalHitsCollection->insert(OpticalHit); 114 115 116 #ifdef ULTRA_VERBOSE 117 G4cout << "*******************************" 118 G4cout << " PMT HIT " 119 G4cout << " Volume: " 120 G4cout << " Photon energy (eV) : " 121 G4cout << " POSITION (mm) : " 122 << HitPosition.x()/CLHEP::mm << " " << HitP 123 G4cout << "*******************************" 124 #endif 125 126 127 return true; 128 } 129 130 131 void UltraPMTSD::EndOfEvent(G4HCofThisEvent* H 132 { 133 static G4int HCID = -1; 134 if(HCID<0) 135 { 136 HCID = G4SDManager::GetSDMpointer()->Get 137 } 138 HCE->AddHitsCollection(HCID,OpticalHitsColle 139 140 } 141 142 //....oooOO0OOooo........oooOO0OOooo........oo 143 144 void UltraPMTSD::clear() 145 {;} 146 147 //....oooOO0OOooo........oooOO0OOooo........oo 148 149 void UltraPMTSD::DrawAll() 150 {;} 151 152 //....oooOO0OOooo........oooOO0OOooo........oo 153 154 void UltraPMTSD::PrintAll() 155 {;} 156 157 //....oooOO0OOooo........oooOO0OOooo........oo 158