Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/examples/advanced/gammaray_telescope/src/GammaRayTelAnticoincidenceSD.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/GammaRayTelAnticoincidenceSD.cc (Version 11.3.0) and /examples/advanced/gammaray_telescope/src/GammaRayTelAnticoincidenceSD.cc (Version 11.0.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 //      ------------ GammaRayTelAnticoincidenc     32 //      ------------ GammaRayTelAnticoincidenceSD  ------
 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 "GammaRayTelAnticoincidenceSD.hh"         37 #include "GammaRayTelAnticoincidenceSD.hh"
 38 #include "GammaRayTelAnticoincidenceHit.hh"        38 #include "GammaRayTelAnticoincidenceHit.hh"
 39 #include "GammaRayTelDetectorConstruction.hh"      39 #include "GammaRayTelDetectorConstruction.hh"
 40                                                    40 
 41 #include "G4ios.hh"                            << 
 42 #include "G4RunManager.hh"                     << 
 43 #include "G4SDManager.hh"                      << 
 44 #include "G4Step.hh"                           << 
 45 #include "G4SystemOfUnits.hh"                      41 #include "G4SystemOfUnits.hh"
 46 #include "G4TouchableHistory.hh"               << 
 47 #include "G4VPhysicalVolume.hh"                    42 #include "G4VPhysicalVolume.hh"
                                                   >>  43 #include "G4Step.hh"
 48 #include "G4VTouchable.hh"                         44 #include "G4VTouchable.hh"
                                                   >>  45 #include "G4TouchableHistory.hh"
                                                   >>  46 #include "G4SDManager.hh"
                                                   >>  47 #include "G4ios.hh"
 49                                                    48 
 50 //....oooOO0OOooo........oooOO0OOooo........oo     49 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 51                                                    50 
 52 GammaRayTelAnticoincidenceSD::GammaRayTelAntic <<  51 GammaRayTelAnticoincidenceSD::GammaRayTelAnticoincidenceSD(G4String name)
 53     auto *runManager = G4RunManager::GetRunMan <<  52 :G4VSensitiveDetector(name)
 54     detector = (GammaRayTelDetectorConstructio <<  53 {
 55                                                <<  54   G4RunManager* runManager = G4RunManager::GetRunManager();
 56     numberOfACDLateralTiles = detector->GetNbO <<  55   Detector =
 57     numberOfACDTopTiles = detector->GetNbOfACD <<  56     (GammaRayTelDetectorConstruction*)(runManager->GetUserDetectorConstruction());
 58                                                <<  57   
 59     G4cout << numberOfACDLateralTiles << " LAT <<  58   NbOfACDLateralTiles  =  Detector->GetNbOfACDLateralTiles();
 60     G4cout << numberOfACDTopTiles << " TOP " < <<  59   NbOfACDTopTiles  =  Detector->GetNbOfACDTopTiles(); 
 61                                                <<  60 
 62     hitLateralID = new G4int[numberOfACDLatera <<  61   G4cout <<  NbOfACDLateralTiles << " LAT " << G4endl;
 63     hitTopID = new G4int[numberOfACDTopTiles]; <<  62   G4cout <<  NbOfACDTopTiles << " TOP " << G4endl;
 64     collectionName.insert("AnticoincidenceColl <<  63   
                                                   >>  64   HitLateralID = new G4int[NbOfACDLateralTiles];
                                                   >>  65   HitTopID = new G4int[NbOfACDTopTiles];
                                                   >>  66   collectionName.insert("AnticoincidenceCollection");
                                                   >>  67 }
                                                   >>  68 
                                                   >>  69 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
                                                   >>  70 
                                                   >>  71 GammaRayTelAnticoincidenceSD::~GammaRayTelAnticoincidenceSD()
                                                   >>  72 {
                                                   >>  73   delete [] HitLateralID;
                                                   >>  74   delete [] HitTopID;
                                                   >>  75 }
                                                   >>  76 
                                                   >>  77 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
                                                   >>  78 
                                                   >>  79 void GammaRayTelAnticoincidenceSD::Initialize(G4HCofThisEvent*)
                                                   >>  80 {
                                                   >>  81   AnticoincidenceCollection = new GammaRayTelAnticoincidenceHitsCollection
                                                   >>  82     (SensitiveDetectorName,collectionName[0]);
                                                   >>  83   for (G4int i=0;i<NbOfACDLateralTiles;i++)
                                                   >>  84     {
                                                   >>  85       HitLateralID[i] = -1;
                                                   >>  86     };
                                                   >>  87   
                                                   >>  88   for (G4int j=0;j<NbOfACDTopTiles;j++) 
                                                   >>  89     {
                                                   >>  90       
                                                   >>  91       HitTopID[j] = -1;
                                                   >>  92     };
                                                   >>  93 }
                                                   >>  94 
                                                   >>  95 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
                                                   >>  96 
                                                   >>  97 G4bool GammaRayTelAnticoincidenceSD::ProcessHits(G4Step* aStep, G4TouchableHistory*)
                                                   >>  98 { 
                                                   >>  99   
                                                   >> 100   G4double edep = aStep->GetTotalEnergyDeposit();
                                                   >> 101   if ((edep/keV == 0.)) return false;      
                                                   >> 102   
                                                   >> 103   // This TouchableHistory is used to obtain the physical volume
                                                   >> 104   // of the hit
                                                   >> 105   G4TouchableHistory* theTouchable
                                                   >> 106     = (G4TouchableHistory*)(aStep->GetPreStepPoint()->GetTouchable());
                                                   >> 107   
                                                   >> 108   G4VPhysicalVolume* acd_tile = theTouchable->GetVolume();  
                                                   >> 109 
                                                   >> 110   G4int ACDTileNumber=acd_tile->GetCopyNo();
                                                   >> 111   G4String ACDTileName = acd_tile->GetName();
                                                   >> 112   
                                                   >> 113   //  G4cout << ACDTileName << " " << edep/keV << G4endl;
                                                   >> 114 
                                                   >> 115   if (ACDTileName == "ACT" )
                                                   >> 116     // The hit is on an top ACD tile (ACDType 0)
                                                   >> 117     {
                                                   >> 118       // This is a new hit
                                                   >> 119       if (HitTopID[ACDTileNumber]==-1)
                                                   >> 120   {       
                                                   >> 121     GammaRayTelAnticoincidenceHit* 
                                                   >> 122       AnticoincidenceHit = new GammaRayTelAnticoincidenceHit;
                                                   >> 123     AnticoincidenceHit->SetACDType(0);
                                                   >> 124     AnticoincidenceHit->AddEnergy(edep);
                                                   >> 125     AnticoincidenceHit->SetPos(aStep->GetPreStepPoint()->GetPosition());
                                                   >> 126     AnticoincidenceHit->SetACDTileNumber(ACDTileNumber);
                                                   >> 127     HitTopID[ACDTileNumber] = 
                                                   >> 128       AnticoincidenceCollection->insert(AnticoincidenceHit) -1;
                                                   >> 129   }
                                                   >> 130       else // This is not new
                                                   >> 131   {
                                                   >> 132     (*AnticoincidenceCollection)
                                                   >> 133       [HitTopID[ACDTileNumber]]->AddEnergy(edep);
                                                   >> 134   }
                                                   >> 135     }
                                                   >> 136  
                                                   >> 137   if (ACDTileName == "ACL1")
                                                   >> 138     // The hit is on an lateral (left-right) ACD tile (ACDType 1)
                                                   >> 139     {   
                                                   >> 140       // This is a new hit
                                                   >> 141       if (HitLateralID[ACDTileNumber]==-1)
                                                   >> 142   {       
                                                   >> 143     GammaRayTelAnticoincidenceHit* 
                                                   >> 144       AnticoincidenceHit = new GammaRayTelAnticoincidenceHit;
                                                   >> 145     AnticoincidenceHit->SetACDType(1);
                                                   >> 146     AnticoincidenceHit->AddEnergy(edep);
                                                   >> 147     AnticoincidenceHit->SetPos(aStep->GetPreStepPoint()->GetPosition());
                                                   >> 148     AnticoincidenceHit->SetACDTileNumber(ACDTileNumber);
                                                   >> 149     HitLateralID[ACDTileNumber] = 
                                                   >> 150       AnticoincidenceCollection->insert(AnticoincidenceHit) -1;
                                                   >> 151   }
                                                   >> 152       else // This is not new
                                                   >> 153   {
                                                   >> 154     (*AnticoincidenceCollection)
                                                   >> 155       [HitLateralID[ACDTileNumber]]->AddEnergy(edep);
                                                   >> 156   }
                                                   >> 157     }
                                                   >> 158 
                                                   >> 159    if (ACDTileName == "ACL2")
                                                   >> 160     // The hit is on an lateral (rear - front) ACD tile (ACDType 2)
                                                   >> 161     {   
                                                   >> 162       // This is a new hit
                                                   >> 163       if (HitLateralID[ACDTileNumber]==-1)
                                                   >> 164   {       
                                                   >> 165     GammaRayTelAnticoincidenceHit* 
                                                   >> 166       AnticoincidenceHit = new GammaRayTelAnticoincidenceHit;
                                                   >> 167     AnticoincidenceHit->SetACDType(2);
                                                   >> 168     AnticoincidenceHit->AddEnergy(edep);
                                                   >> 169     AnticoincidenceHit->SetPos(aStep->GetPreStepPoint()->GetPosition());
                                                   >> 170     AnticoincidenceHit->SetACDTileNumber(ACDTileNumber);
                                                   >> 171     HitLateralID[ACDTileNumber] = 
                                                   >> 172       AnticoincidenceCollection->insert(AnticoincidenceHit) -1;
                                                   >> 173   }
                                                   >> 174       else // This is not new
                                                   >> 175   {
                                                   >> 176     (*AnticoincidenceCollection)
                                                   >> 177       [HitLateralID[ACDTileNumber]]->AddEnergy(edep);
                                                   >> 178   }
                                                   >> 179     }
                                                   >> 180   return true;
                                                   >> 181 }
                                                   >> 182 
                                                   >> 183 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
                                                   >> 184 
                                                   >> 185 void GammaRayTelAnticoincidenceSD::EndOfEvent(G4HCofThisEvent* HCE)
                                                   >> 186 {
                                                   >> 187   static G4int HCID = -1;
                                                   >> 188   if(HCID<0)
                                                   >> 189     { 
                                                   >> 190       HCID = G4SDManager::GetSDMpointer()->GetCollectionID(collectionName[0]);
                                                   >> 191     }
                                                   >> 192   HCE->AddHitsCollection(HCID,AnticoincidenceCollection);
                                                   >> 193 
                                                   >> 194   for (G4int i=0;i<NbOfACDLateralTiles;i++)
                                                   >> 195     {
                                                   >> 196       HitLateralID[i] = -1;
                                                   >> 197     };
                                                   >> 198   
                                                   >> 199   for (G4int j=0;j<NbOfACDTopTiles;j++) 
                                                   >> 200     {
                                                   >> 201       
                                                   >> 202       HitTopID[j] = -1;
                                                   >> 203     };
                                                   >> 204 
 65 }                                                 205 }
 66                                                   206 
 67 //....oooOO0OOooo........oooOO0OOooo........oo    207 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 68                                                   208 
 69 GammaRayTelAnticoincidenceSD::~GammaRayTelAnti << 209 void GammaRayTelAnticoincidenceSD::clear()
 70     delete[] hitLateralID;                     << 210 {} 
 71     delete[] hitTopID;                         << 
 72 }                                              << 
 73                                                   211 
 74 //....oooOO0OOooo........oooOO0OOooo........oo    212 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 75                                                   213 
 76 void GammaRayTelAnticoincidenceSD::Initialize( << 214 void GammaRayTelAnticoincidenceSD::DrawAll()
 77     anticoincidenceCollection = new GammaRayTe << 215 {} 
 78     for (auto i = 0; i < numberOfACDLateralTil << 
 79         hitLateralID[i] = -1;                  << 
 80     }                                          << 
 81                                                << 
 82     for (auto j = 0; j < numberOfACDTopTiles;  << 
 83         hitTopID[j] = -1;                      << 
 84     }                                          << 
 85 }                                              << 
 86                                                   216 
 87 //....oooOO0OOooo........oooOO0OOooo........oo    217 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 88                                                   218 
 89 auto GammaRayTelAnticoincidenceSD::ProcessHits << 219 void GammaRayTelAnticoincidenceSD::PrintAll()
 90     auto depositedEnergy = step->GetTotalEnerg << 220 {} 
 91     if (depositedEnergy / keV == 0.) {         << 
 92         return false;                          << 
 93     }                                          << 
 94                                                   221 
 95     // This TouchableHistory is used to obtain << 222 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 96     auto *theTouchable = (G4TouchableHistory*) << 
 97                                                   223 
 98     auto *acdTile = theTouchable->GetVolume(); << 
 99     auto acdTileNumber = acdTile->GetCopyNo(); << 
100     auto acdTileName = acdTile->GetName();     << 
101                                                << 
102     // G4cout << acdTileName << " " << deposit << 
103                                                << 
104     if (acdTileName == "ACT") { // The hit is  << 
105         if (hitTopID[acdTileNumber] == -1) { / << 
106             auto *anticoincidenceHit = new Gam << 
107             anticoincidenceHit->SetACDType(0); << 
108             anticoincidenceHit->AddEnergy(depo << 
109             anticoincidenceHit->SetPosition(st << 
110             anticoincidenceHit->SetACDTileNumb << 
111             hitTopID[acdTileNumber] = anticoin << 
112         } else { // This is not new            << 
113             (*anticoincidenceCollection)[hitTo << 
114         }                                      << 
115     }                                          << 
116                                                   224 
117     if (acdTileName == "ACL1") { // The hit is << 
118         if (hitLateralID[acdTileNumber] == -1) << 
119             auto *anticoincidenceHit = new Gam << 
120             anticoincidenceHit->SetACDType(1); << 
121             anticoincidenceHit->AddEnergy(depo << 
122             anticoincidenceHit->SetPosition(st << 
123             anticoincidenceHit->SetACDTileNumb << 
124             hitLateralID[acdTileNumber] = anti << 
125         } else { // This is not new            << 
126             (*anticoincidenceCollection)[hitLa << 
127         }                                      << 
128     }                                          << 
129                                                   225 
130     if (acdTileName == "ACL2") { // The hit is << 
131         if (hitLateralID[acdTileNumber] == -1) << 
132             auto *anticoincidenceHit = new Gam << 
133             anticoincidenceHit->SetACDType(2); << 
134             anticoincidenceHit->AddEnergy(depo << 
135             anticoincidenceHit->SetPosition(st << 
136             anticoincidenceHit->SetACDTileNumb << 
137             hitLateralID[acdTileNumber] = anti << 
138         } else { // This is not new            << 
139             (*anticoincidenceCollection)[hitLa << 
140         }                                      << 
141     }                                          << 
142                                                   226 
143     return true;                               << 
144 }                                              << 
145                                                   227 
146 //....oooOO0OOooo........oooOO0OOooo........oo << 
147                                                   228 
148 void GammaRayTelAnticoincidenceSD::EndOfEvent( << 
149     static G4int collectionIdentifier = -1;    << 
150     if (collectionIdentifier < 0) {            << 
151         collectionIdentifier = G4SDManager::Ge << 
152     }                                          << 
153     collection->AddHitsCollection(collectionId << 
154                                                   229 
155     for (auto i = 0; i < numberOfACDLateralTil << 
156         hitLateralID[i] = -1;                  << 
157     }                                          << 
158                                                   230 
159     for (auto j = 0; j < numberOfACDTopTiles;  << 
160         hitTopID[j] = -1;                      << 
161     }                                          << 
162 }                                              << 
163                                                   231 
164 //....oooOO0OOooo........oooOO0OOooo........oo << 
165                                                   232 
166 void GammaRayTelAnticoincidenceSD::clear() {   << 
167 }                                              << 
168                                                   233 
169 //....oooOO0OOooo........oooOO0OOooo........oo << 
170                                                   234 
171 void GammaRayTelAnticoincidenceSD::DrawAll() { << 
172 }                                              << 
173                                                   235 
174 //....oooOO0OOooo........oooOO0OOooo........oo << 
175                                                   236 
176 void GammaRayTelAnticoincidenceSD::PrintAll()  << 
177 }                                              << 
178                                                   237