Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/examples/advanced/gammaray_telescope/src/GammaRayTelDigitizer.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/GammaRayTelDigitizer.cc (Version 11.3.0) and /examples/advanced/gammaray_telescope/src/GammaRayTelDigitizer.cc (Version 9.1)


  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 // $Id: GammaRayTelDigitizer.cc,v 1.6 2006/06/29 15:56:31 gunter Exp $
                                                   >>  28 // GEANT4 tag $Name: geant4-09-01 $
 27 // -------------------------------------------     29 // ------------------------------------------------------------
 28 //      GEANT 4 class implementation file          30 //      GEANT 4 class implementation file
 29 //      CERN Geneva Switzerland                    31 //      CERN Geneva Switzerland
 30 //                                                 32 //
 31 //                                                 33 //
 32 //      ------------ GammaRayTelDigitizer  ---     34 //      ------------ GammaRayTelDigitizer  ------
 33 //           by   F.Longo, R.Giannitrapani & G     35 //           by   F.Longo, R.Giannitrapani & G.Santin (13 nov 2000)
 34 //                                                 36 //
 35 // *******************************************     37 // ************************************************************
 36                                                    38 
 37 #include <vector>                              << 
 38                                                << 
 39 #include "GammaRayTelAnticoincidenceHit.hh"    << 
 40 #include "GammaRayTelCalorimeterHit.hh"        << 
 41 #include "GammaRayTelDigi.hh"                  << 
 42 #include "GammaRayTelDigitizer.hh"                 39 #include "GammaRayTelDigitizer.hh"
                                                   >>  40 #include "GammaRayTelDigi.hh"
 43 #include "GammaRayTelDigitizerMessenger.hh"        41 #include "GammaRayTelDigitizerMessenger.hh"
                                                   >>  42 
 44 #include "GammaRayTelTrackerHit.hh"                43 #include "GammaRayTelTrackerHit.hh"
                                                   >>  44 #include "GammaRayTelCalorimeterHit.hh"
                                                   >>  45 #include "GammaRayTelAnticoincidenceHit.hh"
 45                                                    46 
 46 #include "G4DigiManager.hh"                    << 
 47 #include "G4Event.hh"                          << 
 48 #include "G4EventManager.hh"                       47 #include "G4EventManager.hh"
 49 #include "G4ios.hh"                            <<  48 #include "G4Event.hh"
 50 #include "G4SDManager.hh"                          49 #include "G4SDManager.hh"
 51 #include "G4SystemOfUnits.hh"                  <<  50 #include "G4DigiManager.hh"
                                                   >>  51 #include "G4ios.hh"
                                                   >>  52 
                                                   >>  53 //#include "G4CollectionNameVector.hh"
                                                   >>  54 #include <vector>
 52                                                    55 
 53 //....oooOO0OOooo........oooOO0OOooo........oo     56 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 54                                                    57 
 55 GammaRayTelDigitizer::GammaRayTelDigitizer(G4S <<  58 GammaRayTelDigitizer::GammaRayTelDigitizer(G4String name)
 56     constexpr auto DIGIT_COLLECTION_NAME{"Digi <<  59   :G4VDigitizerModule(name)
 57     collectionName.push_back(DIGIT_COLLECTION_ <<  60 {
 58                                                    61 
 59     // create a messenger for this class       << 
 60     digitizerMessenger = new GammaRayTelDigiti << 
 61 }                                              << 
 62                                                    62 
 63 //....oooOO0OOooo........oooOO0OOooo........oo <<  63   G4String colName = "DigitsCollection";
                                                   >>  64   collectionName.push_back(colName);
                                                   >>  65   Energy_Threshold = 120.*keV;
                                                   >>  66   TotalEnergy = 0.;
                                                   >>  67   ACDThreshold = 15*keV;
                                                   >>  68 
                                                   >>  69 //create a messenger for this class
                                                   >>  70   digiMessenger = new GammaRayTelDigitizerMessenger(this);
 64                                                    71 
 65 GammaRayTelDigitizer::~GammaRayTelDigitizer()  << 
 66     delete digitizerMessenger;                 << 
 67 }                                                  72 }
 68                                                    73 
 69 //....oooOO0OOooo........oooOO0OOooo........oo     74 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 70                                                    75 
 71 void GammaRayTelDigitizer::Digitize() {        <<  76 GammaRayTelDigitizer::~GammaRayTelDigitizer()
 72     digitsCollection = new GammaRayTelDigitsCo <<  77 {
 73                                                <<  78   delete digiMessenger;
 74     auto *digitManager = G4DigiManager::GetDMp <<  79 }
 75                                                << 
 76     G4int trackerCollectionIdentifier{0}; // T << 
 77     G4int calorimeterCollectionIdentifier{0};  << 
 78     G4int anticoincidenceCollectionIdentifier{ << 
 79                                                << 
 80     totalEnergy = 0.; // at each event         << 
 81                                                    80 
 82     // TKR hits collection                     <<  81 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 83                                                    82 
 84     trackerCollectionIdentifier = digitManager <<  83 void GammaRayTelDigitizer::Digitize()
 85     GammaRayTelTrackerHitsCollection *trackerC <<  84 {
 86     trackerCollection = (GammaRayTelTrackerHit <<  85   DigitsCollection = new GammaRayTelDigitsCollection
                                                   >>  86     ("GammaRayTelDigitizer","DigitsCollection"); // to create the Digi Collection
                                                   >>  87   
                                                   >>  88   G4DigiManager* DigiMan = G4DigiManager::GetDMpointer();
                                                   >>  89   
                                                   >>  90   G4int THCID; // TrackerCollection
                                                   >>  91   G4int CHCID; // CalorimeterCollection
                                                   >>  92   G4int AHCID; // AnticoincidenceCollection
                                                   >>  93 
                                                   >>  94   TotalEnergy = 0.; // at each event
                                                   >>  95   
                                                   >>  96   // TKR Hits collection
                                                   >>  97   
                                                   >>  98   THCID = DigiMan->GetHitsCollectionID("TrackerCollection");  
                                                   >>  99   GammaRayTelTrackerHitsCollection* THC = 0; 
                                                   >> 100   THC = (GammaRayTelTrackerHitsCollection*)
                                                   >> 101     (DigiMan->GetHitsCollection(THCID));
                                                   >> 102 
                                                   >> 103 
                                                   >> 104   // CAL Hits collection
                                                   >> 105 
                                                   >> 106   CHCID = DigiMan->GetHitsCollectionID("CalorimeterCollection");
                                                   >> 107   GammaRayTelCalorimeterHitsCollection* CHC = 0;
                                                   >> 108   CHC = (GammaRayTelCalorimeterHitsCollection*)
                                                   >> 109      (DigiMan->GetHitsCollection(CHCID));
                                                   >> 110 
                                                   >> 111   // ACD Hits collection
                                                   >> 112 
                                                   >> 113   AHCID = DigiMan->GetHitsCollectionID("AnticoincidenceCollection");  
                                                   >> 114   GammaRayTelAnticoincidenceHitsCollection* AHC = 0;
                                                   >> 115   AHC = (GammaRayTelAnticoincidenceHitsCollection*)
                                                   >> 116      (DigiMan->GetHitsCollection(AHCID));
                                                   >> 117 
                                                   >> 118   
                                                   >> 119   if (THC)
                                                   >> 120     {
                                                   >> 121       G4int n_hit = THC->entries();
                                                   >> 122 
                                                   >> 123       for (G4int i=0;i<n_hit;i++)
                                                   >> 124   {
                                                   >> 125     G4double ESil = (*THC)[i]->GetEdepSil();
                                                   >> 126     G4int NStrip = (*THC)[i]->GetNStrip();
                                                   >> 127     G4int NPlane = (*THC)[i]->GetNSilPlane();
                                                   >> 128     G4int IsX = (*THC)[i]->GetPlaneType();
                                                   >> 129     
                                                   >> 130        // digi generation only if energy deposit greater than threshold
                                                   >> 131 
                                                   >> 132     if (ESil>Energy_Threshold)
                                                   >> 133       {
                                                   >> 134         GammaRayTelDigi* Digi = new GammaRayTelDigi();
                                                   >> 135         Digi->SetPlaneNumber(NPlane);
                                                   >> 136         Digi->SetPlaneType(IsX);
                                                   >> 137         Digi->SetStripNumber(NStrip);
                                                   >> 138         Digi->SetDigiType(0);
                                                   >> 139         Digi->SetEnergy(0.);
                                                   >> 140         DigitsCollection->insert(Digi); 
                                                   >> 141       }  
                                                   >> 142   }
                                                   >> 143     }
                                                   >> 144   if (CHC)
                                                   >> 145     {
                                                   >> 146       G4int n_hit = CHC->entries();
                                                   >> 147       
                                                   >> 148       for (G4int i=0;i<n_hit;i++)
                                                   >> 149   {
                                                   >> 150     TotalEnergy +=(*CHC)[i]->GetEdepCAL();
                                                   >> 151   }
                                                   >> 152       // digi generation only if energy deposit greater than 0.
                                                   >> 153       
                                                   >> 154       if (TotalEnergy>0.)
                                                   >> 155   {
                                                   >> 156     GammaRayTelDigi* Digi = new GammaRayTelDigi();
                                                   >> 157     Digi->SetPlaneNumber(0);
                                                   >> 158     Digi->SetPlaneType(0);
                                                   >> 159     Digi->SetStripNumber(0);
                                                   >> 160     Digi->SetDigiType(1);
                                                   >> 161     Digi->SetEnergy(TotalEnergy);
                                                   >> 162     DigitsCollection->insert(Digi); 
                                                   >> 163   }  
 87                                                   164 
 88     // CAL hits collection                     << 165     }
 89                                                   166 
 90     calorimeterCollectionIdentifier = digitMan << 167   if (AHC)
 91     GammaRayTelCalorimeterHitsCollection *calo << 168     {
 92     calorimeterCollection = (GammaRayTelCalori << 169       G4int n_hit = AHC->entries();
                                                   >> 170       
                                                   >> 171       for (G4int i=0;i<n_hit;i++)
                                                   >> 172   {
                                                   >> 173     G4double energy = (*AHC)[i]->GetEdepACD();
                                                   >> 174     G4int type = (*AHC)[i]->GetACDTileNumber();
                                                   >> 175     
                                                   >> 176     // digi generation only if energy deposit greater than 0.
                                                   >> 177     
                                                   >> 178     if (energy>ACDThreshold)
                                                   >> 179       {
                                                   >> 180         GammaRayTelDigi* Digi = new GammaRayTelDigi();
                                                   >> 181         Digi->SetPlaneNumber(0);
                                                   >> 182         Digi->SetPlaneType(0);
                                                   >> 183         Digi->SetStripNumber(type);
                                                   >> 184         Digi->SetDigiType(2);
                                                   >> 185         Digi->SetEnergy(energy);
                                                   >> 186         DigitsCollection->insert(Digi); 
                                                   >> 187       }  
                                                   >> 188     
                                                   >> 189   }
                                                   >> 190     }
                                                   >> 191   
                                                   >> 192   if (THC||AHC||CHC){
                                                   >> 193     G4cout << "Number of digits in this event =  " 
                                                   >> 194      << DigitsCollection->entries()  
                                                   >> 195       // << " " << DigitsCollection->GetName()  
                                                   >> 196       // << " " << DigitsCollection->GetDMname() 
                                                   >> 197      << G4endl;
                                                   >> 198   }
                                                   >> 199   
                                                   >> 200   StoreDigiCollection(DigitsCollection);
                                                   >> 201   
                                                   >> 202   G4int DCID = -1;
                                                   >> 203   if(DCID<0)
                                                   >> 204     { 
                                                   >> 205       //    DigiMan->List();
                                                   >> 206       DCID = DigiMan->GetDigiCollectionID("GammaRayTelDigitizer/DigitsCollection");
                                                   >> 207     }
                                                   >> 208   
                                                   >> 209   
                                                   >> 210 }
 93                                                   211 
 94     // ACD hits collection                     << 
 95                                                   212 
 96     anticoincidenceCollectionIdentifier = digi << 
 97     GammaRayTelAnticoincidenceHitsCollection * << 
 98     anticoincidenceCollection = (GammaRayTelAn << 
 99                                                   213 
100     if (trackerCollection != nullptr) {        << 214 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
101         G4int numberOfHits = trackerCollection << 
102                                                   215 
103         for (auto i = 0; i < numberOfHits; i++ << 
104             G4double depositedEnergy = (*track << 
105             G4int stripNumber = (*trackerColle << 
106             G4int planeNumber = (*trackerColle << 
107             G4int IsX = (*trackerCollection)[i << 
108                                                   216 
109             // digi generation only if energy  << 
110                                                   217 
111             if (depositedEnergy > energyThresh << 
112                 auto *digit = new GammaRayTelD << 
113                 digit->SetPlaneNumber(planeNum << 
114                 digit->SetPlaneType(IsX);      << 
115                 digit->SetStripNumber(stripNum << 
116                 digit->SetDigitType(0);        << 
117                 digit->SetEnergy(0.);          << 
118                 digitsCollection->insert(digit << 
119             }                                  << 
120         }                                      << 
121     }                                          << 
122                                                   218 
123     if (calorimeterCollection != nullptr) {    << 
124         G4int numberOfHits = calorimeterCollec << 
125                                                   219 
126         for (auto i = 0; i < numberOfHits; i++ << 
127             totalEnergy += (*calorimeterCollec << 
128         }                                      << 
129                                                << 
130         // digit generation only if energy dep << 
131                                                << 
132         if (totalEnergy > 0.) {                << 
133             auto *digit = new GammaRayTelDigi( << 
134             digit->SetPlaneNumber(0);          << 
135             digit->SetPlaneType(0);            << 
136             digit->SetStripNumber(0);          << 
137             digit->SetDigitType(1);            << 
138             digit->SetEnergy(totalEnergy);     << 
139             digitsCollection->insert(digit);   << 
140         }                                      << 
141     }                                          << 
142                                                   220 
143     if (anticoincidenceCollection != nullptr)  << 
144         G4int numberOfHits = anticoincidenceCo << 
145                                                   221 
146         for (G4int i = 0; i < numberOfHits; i+ << 
147             auto energy = (*anticoincidenceCol << 
148             auto type = (*anticoincidenceColle << 
149                                                << 
150             // digit generation only if energy << 
151                                                << 
152             if (energy > acdThreshold) {       << 
153                 auto *digit = new GammaRayTelD << 
154                 digit->SetPlaneNumber(0);      << 
155                 digit->SetPlaneType(0);        << 
156                 digit->SetStripNumber(type);   << 
157                 digit->SetDigitType(2);        << 
158                 digit->SetEnergy(energy);      << 
159                 digitsCollection->insert(digit << 
160             }                                  << 
161         }                                      << 
162     }                                          << 
163                                                   222 
164     if (trackerCollection != nullptr || antico << 
165         G4cout << "Number of digits in this ev << 
166         // << " " << digitsCollection->GetName << 
167         // << " " << digitsCollection->GetDMna << 
168             << G4endl;                         << 
169     }                                          << 
170                                                   223 
171     StoreDigiCollection(digitsCollection);     << 
172                                                   224 
173     G4int digitsCollectionIdentifier{-1};      << 
174     if (digitsCollectionIdentifier < 0) {      << 
175         // digiManager->List();                << 
176         digitsCollectionIdentifier = digitMana << 
177     }                                          << 
178 }                                              << 
179                                                   225