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 10.1.p3)


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