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 // ------------ GammaRayTelTrackerSD --- 33 // by R.Giannitrapani, F.Longo & G. 34 // 35 // ******************************************* 36 37 #include "GammaRayTelTrackerSD.hh" 38 #include "GammaRayTelTrackerHit.hh" 39 #include "GammaRayTelDetectorConstruction.hh" 40 41 #include "G4RunManager.hh" 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 GammaRayTelTrackerSD::GammaRayTelTrackerSD(G4S 53 auto *runManager = G4RunManager::GetRunMan 54 55 detector = (GammaRayTelDetectorConstructio 56 57 auto numberOfTKRTiles = detector->GetNbOfT 58 numberOfTKRStrips = detector->GetNbOfTKRSt 59 numberOfTKRLayers = detector->GetNbOfTKRLa 60 numberOfTKRStrips = numberOfTKRStrips * nu 61 numberOfTKRChannels = numberOfTKRStrips * 62 63 tkrHitXID = new G4int[numberOfTKRChannels] 64 tkrHitYID = new G4int[numberOfTKRChannels] 65 66 constexpr auto TRACKER_COLLECTION_NAME = " 67 collectionName.insert(TRACKER_COLLECTION_N 68 } 69 70 //....oooOO0OOooo........oooOO0OOooo........oo 71 72 GammaRayTelTrackerSD::~GammaRayTelTrackerSD() 73 delete[] tkrHitXID; 74 delete[] tkrHitYID; 75 } 76 77 //....oooOO0OOooo........oooOO0OOooo........oo 78 79 void GammaRayTelTrackerSD::Initialize(G4HCofTh 80 trackerCollection = new GammaRayTelTracker 81 82 for (auto i = 0; i < numberOfTKRChannels; 83 tkrHitXID[i] = -1; 84 tkrHitYID[i] = -1; 85 }; 86 } 87 88 //....oooOO0OOooo........oooOO0OOooo........oo 89 90 auto GammaRayTelTrackerSD::ProcessHits(G4Step 91 G4double depositedEnergy = 0.; 92 depositedEnergy = step->GetTotalEnergyDepo 93 if (depositedEnergy == 0.) { 94 return false; 95 } 96 97 auto totalNumberOfStrips = detector->GetNb 98 auto totalnumberOfTiles = detector->GetNbO 99 100 // This TouchableHistory is used to obtain 101 auto *touchable = (G4TouchableHistory*) (s 102 auto *plane = touchable->GetVolume(2); 103 104 G4int planeNumber = 0; 105 planeNumber = plane->GetCopyNo(); 106 auto planeName = plane->GetName(); 107 108 // The hits sees now the real strip 109 110 G4int stripNumber = 0; 111 G4VPhysicalVolume *strip{nullptr}; 112 strip = touchable->GetVolume(); 113 114 G4String stripName = strip->GetName(); 115 stripNumber = strip->GetCopyNo(); 116 117 auto *tile = touchable->GetVolume(1); 118 auto tileNumber = tile->GetCopyNo(); 119 auto tileName = tile->GetName(); 120 auto NTile = (tileNumber % totalnumberOfTi 121 122 G4int channelNumber = 0; 123 124 for (auto j = 0; j < totalnumberOfTiles; j 125 if (NTile == j) { 126 stripNumber += totalNumberOfStrips 127 } 128 } 129 130 channelNumber = planeNumber * totalnumberO 131 132 /* 133 G4cout << " Channel: " << channelNumber << 134 G4cout << " Plane: " << planeNumber << " " 135 G4cout << " Strip: " << stripNumber << " " 136 */ 137 138 // The hit is on an X silicon plane 139 if (planeName == "TKRDetectorX") { 140 if (tkrHitXID[channelNumber] == -1) { 141 auto *trackerHit = new GammaRayTel 142 trackerHit->SetPlaneType(1); 143 trackerHit->AddDepositedEnergy(dep 144 trackerHit->SetPosition(step->GetP 145 trackerHit->SetSiliconPlaneNumber( 146 trackerHit->SetStripNumber(stripNu 147 tkrHitXID[channelNumber] = tracker 148 } else { // This is not new 149 (*trackerCollection)[tkrHitXID[cha 150 // G4cout << "X" << planeNumber << 151 } 152 } 153 154 // The hit is on an Y silicon plane 155 if (planeName == "TKRDetectorY") { 156 if (tkrHitYID[channelNumber] == -1) { 157 auto *trackerHit = new GammaRayTel 158 trackerHit->SetPlaneType(0); 159 trackerHit->AddDepositedEnergy(dep 160 trackerHit->SetPosition(step->GetP 161 trackerHit->SetSiliconPlaneNumber( 162 trackerHit->SetStripNumber(stripNu 163 tkrHitYID[channelNumber] = tracker 164 } else { // This is not new 165 (*trackerCollection)[tkrHitYID[cha 166 // G4cout << "Y" << planeNumber << 167 } 168 } 169 170 return true; 171 } 172 173 //....oooOO0OOooo........oooOO0OOooo........oo 174 175 void GammaRayTelTrackerSD::EndOfEvent(G4HCofTh 176 static G4int collectionIdentifier = -1; 177 if (collectionIdentifier < 0) { 178 collectionIdentifier = G4SDManager::Ge 179 } 180 collection->AddHitsCollection(collectionId 181 182 for (auto i = 0; i < numberOfTKRChannels; 183 tkrHitXID[i] = -1; 184 tkrHitYID[i] = -1; 185 } 186 } 187 188 //....oooOO0OOooo........oooOO0OOooo........oo 189 190 void GammaRayTelTrackerSD::clear() { 191 } 192 193 //....oooOO0OOooo........oooOO0OOooo........oo 194 195 void GammaRayTelTrackerSD::DrawAll() { 196 } 197 198 //....oooOO0OOooo........oooOO0OOooo........oo 199 200 void GammaRayTelTrackerSD::PrintAll() { 201 } 202