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 class implementation file 29 // CERN Geneva Switzerland 30 // 31 // 32 // ------------ GammaRayTelCalorimeterSD 33 // by R.Giannitrapani, F.Longo & G. 34 // 35 // ******************************************* 36 37 #include "G4RunManager.hh" 38 #include "GammaRayTelCalorimeterSD.hh" 39 #include "GammaRayTelCalorimeterHit.hh" 40 #include "GammaRayTelDetectorConstruction.hh" 41 42 #include "G4SystemOfUnits.hh" 43 #include "G4VPhysicalVolume.hh" 44 #include "G4Step.hh" 45 #include "G4VTouchable.hh" 46 #include "G4TouchableHistory.hh" 47 #include "G4SDManager.hh" 48 #include "G4ios.hh" 49 50 //....oooOO0OOooo........oooOO0OOooo........oo 51 52 GammaRayTelCalorimeterSD::GammaRayTelCalorimet 53 auto *runManager = G4RunManager::GetRunManag 54 detector = (GammaRayTelDetectorConstruction* 55 56 numberOfCALBars = detector->GetNbOfCALBars() 57 numberOfCALLayers = detector->GetNbOfCALLaye 58 59 // G4cout << NbOfCALBars << " bars " << G4en 60 // G4cout << NbOfCALLayers << " layers " << 61 62 numberOfCALChannels = numberOfCALBars * numb 63 64 calHitXID = new G4int[numberOfCALChannels]; 65 calHitYID = new G4int[numberOfCALChannels]; 66 collectionName.insert("CalorimeterCollection 67 } 68 69 //....oooOO0OOooo........oooOO0OOooo........oo 70 71 GammaRayTelCalorimeterSD::~GammaRayTelCalorime 72 delete[] calHitXID; 73 delete[] calHitYID; 74 } 75 76 //....oooOO0OOooo........oooOO0OOooo........oo 77 78 void GammaRayTelCalorimeterSD::Initialize(G4HC 79 calorimeterCollection = new GammaRayTelCal 80 for (auto i = 0; i < numberOfCALChannels; i+ 81 calHitXID[i] = -1; 82 calHitYID[i] = -1; 83 } 84 } 85 86 //....oooOO0OOooo........oooOO0OOooo........oo 87 88 auto GammaRayTelCalorimeterSD::ProcessHits(G4S 89 G4double depositedEnergy = 0.; 90 depositedEnergy = step->GetTotalEnergyDeposi 91 if (depositedEnergy == 0.) { 92 return false; 93 } 94 95 // This TouchableHistory is used to obtain t 96 auto *theTouchable = (G4TouchableHistory*) ( 97 auto *calorimeterBar = theTouchable->GetVolu 98 auto *calorimeterPlane = theTouchable->GetVo 99 auto calorimeterBarNumber = calorimeterBar-> 100 auto calorimeterBarName = calorimeterBar->Ge 101 102 G4int planeNumber{0}; 103 planeNumber = calorimeterPlane->GetCopyNo(); 104 105 auto planeName = calorimeterPlane->GetName() 106 107 G4int NChannel = 0; 108 NChannel = planeNumber * numberOfCALBars + c 109 110 if (planeName == "CALLayerX") { // The hit i 111 if (calHitXID[NChannel] == -1) { // This i 112 auto *calorimeterHit = new GammaRayTelCa 113 calorimeterHit->SetCALType(1); 114 calorimeterHit->AddEnergy(depositedEnerg 115 calorimeterHit->SetPosition(step->GetPre 116 calorimeterHit->SetCALPlaneNumber(planeN 117 calorimeterHit->SetCALBarNumber(calorime 118 calHitXID[NChannel] = calorimeterCollect 119 } else { // This is not new 120 (*calorimeterCollection)[calHitXID[NChan 121 } 122 } 123 124 if (planeName == "CALLayerY") { // The hit i 125 if (calHitYID[NChannel] == -1) { // This i 126 auto *calorimeterHit = new GammaRayTelCa 127 calorimeterHit->SetCALType(0); 128 calorimeterHit->AddEnergy(depositedEnerg 129 calorimeterHit->SetPosition(step->GetPre 130 calorimeterHit->SetCALPlaneNumber(planeN 131 calorimeterHit->SetCALBarNumber(calorime 132 calHitYID[NChannel] = calorimeterCollect 133 } else { // This is not new 134 (*calorimeterCollection)[calHitYID[NChan 135 } 136 } 137 138 return true; 139 } 140 141 //....oooOO0OOooo........oooOO0OOooo........oo 142 143 void GammaRayTelCalorimeterSD::EndOfEvent(G4HC 144 static G4int collectionIdentifier = -1; 145 if (collectionIdentifier < 0) { 146 collectionIdentifier = G4SDManager::GetSDM 147 } 148 HCE->AddHitsCollection(collectionIdentifier, 149 150 for (auto i = 0; i < numberOfCALChannels; i+ 151 calHitXID[i] = -1; 152 calHitYID[i] = -1; 153 } 154 } 155 156 //....oooOO0OOooo........oooOO0OOooo........oo 157 158 void GammaRayTelCalorimeterSD::clear() { 159 } 160 161 //....oooOO0OOooo........oooOO0OOooo........oo 162 163 void GammaRayTelCalorimeterSD::DrawAll() { 164 } 165 166 //....oooOO0OOooo........oooOO0OOooo........oo 167 168 void GammaRayTelCalorimeterSD::PrintAll() { 169 } 170