Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/examples/advanced/gammaray_telescope/src/GammaRayTelTrackerSD.cc

Version: [ ReleaseNotes ] [ 1.0 ] [ 1.1 ] [ 2.0 ] [ 3.0 ] [ 3.1 ] [ 3.2 ] [ 4.0 ] [ 4.0.p1 ] [ 4.0.p2 ] [ 4.1 ] [ 4.1.p1 ] [ 5.0 ] [ 5.0.p1 ] [ 5.1 ] [ 5.1.p1 ] [ 5.2 ] [ 5.2.p1 ] [ 5.2.p2 ] [ 6.0 ] [ 6.0.p1 ] [ 6.1 ] [ 6.2 ] [ 6.2.p1 ] [ 6.2.p2 ] [ 7.0 ] [ 7.0.p1 ] [ 7.1 ] [ 7.1.p1 ] [ 8.0 ] [ 8.0.p1 ] [ 8.1 ] [ 8.1.p1 ] [ 8.1.p2 ] [ 8.2 ] [ 8.2.p1 ] [ 8.3 ] [ 8.3.p1 ] [ 8.3.p2 ] [ 9.0 ] [ 9.0.p1 ] [ 9.0.p2 ] [ 9.1 ] [ 9.1.p1 ] [ 9.1.p2 ] [ 9.1.p3 ] [ 9.2 ] [ 9.2.p1 ] [ 9.2.p2 ] [ 9.2.p3 ] [ 9.2.p4 ] [ 9.3 ] [ 9.3.p1 ] [ 9.3.p2 ] [ 9.4 ] [ 9.4.p1 ] [ 9.4.p2 ] [ 9.4.p3 ] [ 9.4.p4 ] [ 9.5 ] [ 9.5.p1 ] [ 9.5.p2 ] [ 9.6 ] [ 9.6.p1 ] [ 9.6.p2 ] [ 9.6.p3 ] [ 9.6.p4 ] [ 10.0 ] [ 10.0.p1 ] [ 10.0.p2 ] [ 10.0.p3 ] [ 10.0.p4 ] [ 10.1 ] [ 10.1.p1 ] [ 10.1.p2 ] [ 10.1.p3 ] [ 10.2 ] [ 10.2.p1 ] [ 10.2.p2 ] [ 10.2.p3 ] [ 10.3 ] [ 10.3.p1 ] [ 10.3.p2 ] [ 10.3.p3 ] [ 10.4 ] [ 10.4.p1 ] [ 10.4.p2 ] [ 10.4.p3 ] [ 10.5 ] [ 10.5.p1 ] [ 10.6 ] [ 10.6.p1 ] [ 10.6.p2 ] [ 10.6.p3 ] [ 10.7 ] [ 10.7.p1 ] [ 10.7.p2 ] [ 10.7.p3 ] [ 10.7.p4 ] [ 11.0 ] [ 11.0.p1 ] [ 11.0.p2 ] [ 11.0.p3, ] [ 11.0.p4 ] [ 11.1 ] [ 11.1.1 ] [ 11.1.2 ] [ 11.1.3 ] [ 11.2 ] [ 11.2.1 ] [ 11.2.2 ] [ 11.3.0 ]

Diff markup

Differences between /examples/advanced/gammaray_telescope/src/GammaRayTelTrackerSD.cc (Version 11.3.0) and /examples/advanced/gammaray_telescope/src/GammaRayTelTrackerSD.cc (Version 9.2.p2)


  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 //      GEANT 4 class implementation file          28 //      GEANT 4 class implementation file
 29 //      CERN Geneva Switzerland                    29 //      CERN Geneva Switzerland
 30 //                                                 30 //
 31 //                                                 31 //
 32 //      ------------ GammaRayTelTrackerSD  ---     32 //      ------------ GammaRayTelTrackerSD  ------
 33 //           by  R.Giannitrapani, F.Longo & G.     33 //           by  R.Giannitrapani, F.Longo & G.Santin (13 nov 2000)
 34 //                                                 34 //
 35 // *******************************************     35 // ************************************************************
 36                                                <<  36 #include "G4RunManager.hh"
 37 #include "GammaRayTelTrackerSD.hh"                 37 #include "GammaRayTelTrackerSD.hh"
                                                   >>  38 
 38 #include "GammaRayTelTrackerHit.hh"                39 #include "GammaRayTelTrackerHit.hh"
 39 #include "GammaRayTelDetectorConstruction.hh"      40 #include "GammaRayTelDetectorConstruction.hh"
 40                                                    41 
 41 #include "G4RunManager.hh"                     << 
 42 #include "G4SystemOfUnits.hh"                  << 
 43 #include "G4VPhysicalVolume.hh"                    42 #include "G4VPhysicalVolume.hh"
                                                   >>  43 
 44 #include "G4Step.hh"                               44 #include "G4Step.hh"
 45 #include "G4VTouchable.hh"                         45 #include "G4VTouchable.hh"
 46 #include "G4TouchableHistory.hh"                   46 #include "G4TouchableHistory.hh"
 47 #include "G4SDManager.hh"                          47 #include "G4SDManager.hh"
                                                   >>  48 
 48 #include "G4ios.hh"                                49 #include "G4ios.hh"
 49                                                    50 
 50 //....oooOO0OOooo........oooOO0OOooo........oo     51 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 51                                                    52 
 52 GammaRayTelTrackerSD::GammaRayTelTrackerSD(G4S <<  53 GammaRayTelTrackerSD::GammaRayTelTrackerSD(G4String name):G4VSensitiveDetector(name)
 53     auto *runManager = G4RunManager::GetRunMan <<  54 {
 54                                                <<  55  G4RunManager* runManager = G4RunManager::GetRunManager();
 55     detector = (GammaRayTelDetectorConstructio <<  56   Detector =
 56                                                <<  57     (GammaRayTelDetectorConstruction*)(runManager->GetUserDetectorConstruction());
 57     auto numberOfTKRTiles = detector->GetNbOfT <<  58   
 58     numberOfTKRStrips = detector->GetNbOfTKRSt <<  59   G4int NbOfTKRTiles  =  Detector->GetNbOfTKRTiles();
 59     numberOfTKRLayers = detector->GetNbOfTKRLa <<  60   NbOfTKRStrips  = Detector->GetNbOfTKRStrips();
 60     numberOfTKRStrips = numberOfTKRStrips * nu <<  61   NbOfTKRLayers  = Detector->GetNbOfTKRLayers();  
 61     numberOfTKRChannels = numberOfTKRStrips *  <<  62   NbOfTKRStrips = NbOfTKRStrips*NbOfTKRTiles;  
 62                                                <<  63   
 63     tkrHitXID = new G4int[numberOfTKRChannels] <<  64   NbOfTKRChannels = NbOfTKRStrips* NbOfTKRTiles * NbOfTKRLayers;
 64     tkrHitYID = new G4int[numberOfTKRChannels] <<  65   
 65                                                <<  66   ThitXID = new G4int[NbOfTKRChannels];
 66     constexpr auto TRACKER_COLLECTION_NAME = " <<  67   ThitYID = new G4int[NbOfTKRChannels];
 67     collectionName.insert(TRACKER_COLLECTION_N <<  68   collectionName.insert("TrackerCollection");
                                                   >>  69 }
                                                   >>  70 
                                                   >>  71 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
                                                   >>  72 
                                                   >>  73 GammaRayTelTrackerSD::~GammaRayTelTrackerSD()
                                                   >>  74 {
                                                   >>  75   delete [] ThitXID;
                                                   >>  76   delete [] ThitYID;
                                                   >>  77 }
                                                   >>  78 
                                                   >>  79 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
                                                   >>  80 
                                                   >>  81 void GammaRayTelTrackerSD::Initialize(G4HCofThisEvent*)
                                                   >>  82 {
                                                   >>  83   TrackerCollection = new GammaRayTelTrackerHitsCollection
                                                   >>  84     (SensitiveDetectorName,collectionName[0]);
                                                   >>  85 
                                                   >>  86  for (G4int i=0;i<NbOfTKRChannels;i++)
                                                   >>  87    {
                                                   >>  88      ThitXID[i] = -1;
                                                   >>  89      ThitYID[i] = -1;
                                                   >>  90    };
                                                   >>  91 }
                                                   >>  92 
                                                   >>  93 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
                                                   >>  94 
                                                   >>  95 G4bool GammaRayTelTrackerSD::ProcessHits(G4Step* aStep,G4TouchableHistory* ROhist)
                                                   >>  96 { 
                                                   >>  97    
                                                   >>  98   G4double edep = aStep->GetTotalEnergyDeposit();
                                                   >>  99   if ((edep/keV == 0.)) return false;      
                                                   >> 100   
                                                   >> 101   G4int StripTotal = Detector->GetNbOfTKRStrips();
                                                   >> 102   G4int TileTotal  = Detector->GetNbOfTKRTiles();  
                                                   >> 103 
                                                   >> 104   // This TouchableHistory is used to obtain the physical volume
                                                   >> 105   // of the hit
                                                   >> 106   G4TouchableHistory* theTouchable
                                                   >> 107     = (G4TouchableHistory*)(aStep->GetPreStepPoint()->GetTouchable());
                                                   >> 108   
                                                   >> 109   //G4VPhysicalVolume* phys_tile = theTouchable->GetVolume();  
                                                   >> 110   
                                                   >> 111   G4VPhysicalVolume* plane = theTouchable->GetVolume(1);  
                                                   >> 112   
                                                   >> 113   G4int PlaneNumber = 0;
                                                   >> 114   PlaneNumber=plane->GetCopyNo();
                                                   >> 115   G4String PlaneName = plane->GetName();
                                                   >> 116 
                                                   >> 117   // The RO History is used to obtain the real strip
                                                   >> 118   // of the hit
                                                   >> 119 
                                                   >> 120   G4int StripNumber = 0;
                                                   >> 121   G4VPhysicalVolume* strip = 0;
                                                   >> 122   strip = ROhist->GetVolume();
                                                   >> 123 
                                                   >> 124   //  if (strip){
                                                   >> 125     G4String StripName = strip->GetName();
                                                   >> 126     StripNumber= strip->GetCopyNo();  
                                                   >> 127     //  }
                                                   >> 128   //  ROhist->MoveUpHistory();
                                                   >> 129   G4VPhysicalVolume* tile = ROhist->GetVolume(1); 
                                                   >> 130   G4int TileNumber = tile->GetCopyNo();  
                                                   >> 131   G4String TileName = tile->GetName();   
                                                   >> 132   
                                                   >> 133   G4int NTile = (TileNumber%TileTotal);  
                                                   >> 134   G4int j=0;
                                                   >> 135   
                                                   >> 136   G4int NChannel = 0;
                                                   >> 137   
                                                   >> 138   for (j=0;j<TileTotal;j++)
                                                   >> 139     {
                                                   >> 140       if(NTile==j) StripNumber += StripTotal*NTile;
                                                   >> 141     }  
                                                   >> 142   
                                                   >> 143   NChannel = PlaneNumber*TileTotal*StripTotal + StripNumber;
                                                   >> 144 
                                                   >> 145   /*  G4cout << NChannel << " Channel Number" << G4endl;
                                                   >> 146       G4cout << " Plane Number = " << PlaneNumber << " " << PlaneName 
                                                   >> 147       << G4endl;
                                                   >> 148       G4cout << StripName << " " << StripNumber << G4endl;      */ 
                                                   >> 149   
                                                   >> 150   if (PlaneName == "TKRDetectorX" )
                                                   >> 151     // The hit is on an X silicon plane
                                                   >> 152     {
                                                   >> 153       // This is a new hit
                                                   >> 154       if (ThitXID[NChannel]==-1)
                                                   >> 155   {       
                                                   >> 156     GammaRayTelTrackerHit* TrackerHit = new GammaRayTelTrackerHit;
                                                   >> 157     TrackerHit->SetPlaneType(1);
                                                   >> 158     TrackerHit->AddSil(edep);
                                                   >> 159     TrackerHit->SetPos(aStep->GetPreStepPoint()->GetPosition());
                                                   >> 160     TrackerHit->SetNSilPlane(PlaneNumber);
                                                   >> 161     TrackerHit->SetNStrip(StripNumber);
                                                   >> 162     ThitXID[NChannel] = 
                                                   >> 163       TrackerCollection->insert(TrackerHit) -1;
                                                   >> 164   }
                                                   >> 165       else // This is not new
                                                   >> 166   {
                                                   >> 167     (*TrackerCollection)[ThitXID[NChannel]]->AddSil(edep);
                                                   >> 168           // G4cout << "X" << PlaneNumber << " " << StripNumber << G4endl;
                                                   >> 169   }
                                                   >> 170     }
                                                   >> 171   
                                                   >> 172   if (PlaneName == "TKRDetectorY")
                                                   >> 173     // The hit is on an Y silicon plane    
                                                   >> 174     {   
                                                   >> 175       // This is a new hit
                                                   >> 176       if (ThitYID[NChannel]==-1)
                                                   >> 177   {       
                                                   >> 178     GammaRayTelTrackerHit* TrackerHit = new GammaRayTelTrackerHit;
                                                   >> 179     TrackerHit->SetPlaneType(0);
                                                   >> 180     TrackerHit->AddSil(edep);
                                                   >> 181     TrackerHit->SetPos(aStep->GetPreStepPoint()->GetPosition());
                                                   >> 182     TrackerHit->SetNSilPlane(PlaneNumber);
                                                   >> 183     TrackerHit->SetNStrip(StripNumber);
                                                   >> 184     ThitYID[NChannel] = 
                                                   >> 185       TrackerCollection->insert(TrackerHit)-1;
                                                   >> 186   }
                                                   >> 187       else // This is not new
                                                   >> 188   {
                                                   >> 189     (*TrackerCollection)[ThitYID[NChannel]]->AddSil(edep);
                                                   >> 190           // G4cout << "Y" << PlaneNumber << " " << StripNumber << G4endl;
                                                   >> 191   }
                                                   >> 192     }
                                                   >> 193   
                                                   >> 194   return true;
 68 }                                                 195 }
 69                                                   196 
 70 //....oooOO0OOooo........oooOO0OOooo........oo    197 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 71                                                   198 
 72 GammaRayTelTrackerSD::~GammaRayTelTrackerSD()  << 199 void GammaRayTelTrackerSD::EndOfEvent(G4HCofThisEvent* HCE)
 73     delete[] tkrHitXID;                        << 200 {
 74     delete[] tkrHitYID;                        << 201   static G4int HCID = -1;
                                                   >> 202   if(HCID<0)
                                                   >> 203     { 
                                                   >> 204       HCID = G4SDManager::GetSDMpointer()->GetCollectionID(collectionName[0]);
                                                   >> 205     }
                                                   >> 206   HCE->AddHitsCollection(HCID,TrackerCollection);
                                                   >> 207 
                                                   >> 208 
                                                   >> 209   for (G4int i=0;i<NbOfTKRChannels;i++) 
                                                   >> 210     {
                                                   >> 211       ThitXID[i] = -1;
                                                   >> 212       ThitYID[i] = -1;
                                                   >> 213     };
 75 }                                                 214 }
 76                                                   215 
 77 //....oooOO0OOooo........oooOO0OOooo........oo    216 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 78                                                   217 
 79 void GammaRayTelTrackerSD::Initialize(G4HCofTh << 218 void GammaRayTelTrackerSD::clear()
 80     trackerCollection = new GammaRayTelTracker << 219 {} 
 81                                                << 
 82     for (auto i = 0; i < numberOfTKRChannels;  << 
 83         tkrHitXID[i] = -1;                     << 
 84         tkrHitYID[i] = -1;                     << 
 85     };                                         << 
 86 }                                              << 
 87                                                   220 
 88 //....oooOO0OOooo........oooOO0OOooo........oo    221 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 89                                                   222 
 90 auto GammaRayTelTrackerSD::ProcessHits(G4Step  << 223 void GammaRayTelTrackerSD::DrawAll()
 91     G4double depositedEnergy = 0.;             << 224 {} 
 92     depositedEnergy = step->GetTotalEnergyDepo << 
 93     if (depositedEnergy == 0.) {               << 
 94         return false;                          << 
 95     }                                          << 
 96                                                   225 
 97     auto totalNumberOfStrips = detector->GetNb << 226 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 98     auto totalnumberOfTiles = detector->GetNbO << 
 99                                                   227 
100     // This TouchableHistory is used to obtain << 228 void GammaRayTelTrackerSD::PrintAll()
101     auto *touchable = (G4TouchableHistory*) (s << 229 {} 
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                                                   230 
130     channelNumber = planeNumber * totalnumberO << 231 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
131                                                   232 
132 /*                                             << 
133     G4cout << " Channel: " << channelNumber << << 
134     G4cout << " Plane: " << planeNumber << " " << 
135     G4cout << " Strip: " << stripNumber << " " << 
136 */                                             << 
137                                                   233 
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                                                   234 
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                                                   235 
170     return true;                               << 
171 }                                              << 
172                                                   236 
173 //....oooOO0OOooo........oooOO0OOooo........oo << 
174                                                   237 
175 void GammaRayTelTrackerSD::EndOfEvent(G4HCofTh << 
176     static G4int collectionIdentifier = -1;    << 
177     if (collectionIdentifier < 0) {            << 
178         collectionIdentifier = G4SDManager::Ge << 
179     }                                          << 
180     collection->AddHitsCollection(collectionId << 
181                                                   238 
182     for (auto i = 0; i < numberOfTKRChannels;  << 
183         tkrHitXID[i] = -1;                     << 
184         tkrHitYID[i] = -1;                     << 
185     }                                          << 
186 }                                              << 
187                                                   239 
188 //....oooOO0OOooo........oooOO0OOooo........oo << 
189                                                   240 
190 void GammaRayTelTrackerSD::clear() {           << 
191 }                                              << 
192                                                   241 
193 //....oooOO0OOooo........oooOO0OOooo........oo << 
194                                                   242 
195 void GammaRayTelTrackerSD::DrawAll() {         << 
196 }                                              << 
197                                                   243 
198 //....oooOO0OOooo........oooOO0OOooo........oo << 
199                                                   244 
200 void GammaRayTelTrackerSD::PrintAll() {        << 
201 }                                              << 
202                                                   245