Geant4 Cross Reference

Cross-Referencing   Geant4
Geant4/examples/advanced/xray_fluorescence/src/XrayFluoSD.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/xray_fluorescence/src/XrayFluoSD.cc (Version 11.3.0) and /examples/advanced/xray_fluorescence/src/XrayFluoSD.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 // Author: Elena Guardincerri (Elena.Guardince     28 // Author: Elena Guardincerri (Elena.Guardincerri@ge.infn.it)
 29 //                                                 29 //
 30 // History:                                        30 // History:
 31 // -----------                                     31 // -----------
 32 // 28 Nov 2001 Elena Guardincerri     Created      32 // 28 Nov 2001 Elena Guardincerri     Created
 33 // 29 Nov 2002 Energy deposition bug fixed (Al     33 // 29 Nov 2002 Energy deposition bug fixed (Alfonso.mantero@ge.infn.it)
 34 // 17 Jul 2003 Name changed to XrayFluoSD          34 // 17 Jul 2003 Name changed to XrayFluoSD
 35 // 01 Sep 2003 Constructor overload for differ     35 // 01 Sep 2003 Constructor overload for different geometries handling
 36 // -------------------------------------------     36 // -------------------------------------------------------------------
 37                                                    37 
 38 #include "XrayFluoSD.hh"                           38 #include "XrayFluoSD.hh"
 39 #include "XrayFluoSensorHit.hh"                    39 #include "XrayFluoSensorHit.hh"
 40 #include "XrayFluoDetectorConstruction.hh"         40 #include "XrayFluoDetectorConstruction.hh"
 41 #include "XrayFluoPlaneDetectorConstruction.hh     41 #include "XrayFluoPlaneDetectorConstruction.hh"
 42 #include "XrayFluoMercuryDetectorConstruction.     42 #include "XrayFluoMercuryDetectorConstruction.hh"
 43 #include "G4VPhysicalVolume.hh"                    43 #include "G4VPhysicalVolume.hh"
 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 #include "G4ios.hh"                                48 #include "G4ios.hh"
 49 #include "G4VProcess.hh"                           49 #include "G4VProcess.hh"
 50                                                    50 
 51 //....oooOO0OOooo........oooOO0OOooo........oo     51 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 52                                                    52 
 53 XrayFluoSD::XrayFluoSD(G4String name,              53 XrayFluoSD::XrayFluoSD(G4String name,
 54                                    XrayFluoDet     54                                    XrayFluoDetectorConstruction* det)
 55   :G4VSensitiveDetector(name),Detector(0),plan     55   :G4VSensitiveDetector(name),Detector(0),planeDetector(0),mercuryDetector(0)
 56 {                                                  56 {
 57                                                    57 
 58   Detector = det;                                  58   Detector = det;
 59   collectionName.insert("HPGeCollection");         59   collectionName.insert("HPGeCollection");
 60   HitHPGeID = new G4int[500];                      60   HitHPGeID = new G4int[500];
 61   G4cout << "XrayFluoSD created" << G4endl;        61   G4cout << "XrayFluoSD created" << G4endl;
 62                                                    62 
 63 }                                                  63 }
 64                                                    64 
 65 //....oooOO0OOooo........oooOO0OOooo........oo     65 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 66                                                    66 
 67 XrayFluoSD::XrayFluoSD(G4String name,              67 XrayFluoSD::XrayFluoSD(G4String name,
 68            XrayFluoPlaneDetectorConstruction*      68            XrayFluoPlaneDetectorConstruction* det)
 69   :G4VSensitiveDetector(name),Detector(0),plan     69   :G4VSensitiveDetector(name),Detector(0),planeDetector(0),mercuryDetector(0)
 70 {                                                  70 {
 71   planeDetector = det;                             71   planeDetector = det;
 72   collectionName.insert("HPGeCollection");         72   collectionName.insert("HPGeCollection");
 73   HitHPGeID = new G4int[500];                      73   HitHPGeID = new G4int[500];
 74   G4cout << "XrayFluoSD created" << G4endl;        74   G4cout << "XrayFluoSD created" << G4endl;
 75                                                    75 
 76 }                                                  76 }
 77                                                    77 
 78 //....oooOO0OOooo........oooOO0OOooo........oo     78 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 79                                                    79 
 80 XrayFluoSD::XrayFluoSD(G4String name,              80 XrayFluoSD::XrayFluoSD(G4String name,
 81            XrayFluoMercuryDetectorConstruction     81            XrayFluoMercuryDetectorConstruction* det)
 82   :G4VSensitiveDetector(name),Detector(0),plan     82   :G4VSensitiveDetector(name),Detector(0),planeDetector(0),mercuryDetector(0)
 83 {                                                  83 {
 84   mercuryDetector = det;                           84   mercuryDetector = det;
 85   collectionName.insert("HPGeCollection");         85   collectionName.insert("HPGeCollection");
 86   HitHPGeID = new G4int[500];                      86   HitHPGeID = new G4int[500];
 87   G4cout << "XrayFluoSD created" << G4endl;        87   G4cout << "XrayFluoSD created" << G4endl;
 88 }                                                  88 }
 89                                                    89 
 90 // //....oooOO0OOooo........oooOO0OOooo.......     90 // //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
 91                                                    91 
 92                                                    92 
 93                                                    93 
 94                                                    94 
 95 XrayFluoSD::~XrayFluoSD()                          95 XrayFluoSD::~XrayFluoSD()
 96 {                                                  96 {
 97                                                    97 
 98   delete [] HitHPGeID;                             98   delete [] HitHPGeID;
 99                                                    99 
100   // delete HPGeCollection;                       100   // delete HPGeCollection;
101                                                   101 
102   G4cout << "XrayFluoSD deleted" << G4endl;       102   G4cout << "XrayFluoSD deleted" << G4endl;
103 }                                                 103 }
104                                                   104 
105 //....oooOO0OOooo........oooOO0OOooo........oo    105 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
106                                                   106 
107 void XrayFluoSD::Initialize(G4HCofThisEvent*)     107 void XrayFluoSD::Initialize(G4HCofThisEvent*)
108                                                   108  
109 //initializes HCE with the hits collection(s)     109 //initializes HCE with the hits collection(s) created by this 
110   //sensitive detector                            110   //sensitive detector
111 {                                                 111 { 
112   HPGeCollection = new XrayFluoSensorHitsColle    112   HPGeCollection = new XrayFluoSensorHitsCollection
113     (SensitiveDetectorName,collectionName[0]);    113     (SensitiveDetectorName,collectionName[0]); 
114                                                   114   
115   G4int nPixel = 0;                               115   G4int nPixel = 0;
116                                                   116   
117   if (Detector) {nPixel = Detector->GetNbOfPix    117   if (Detector) {nPixel = Detector->GetNbOfPixels();}
118   else if (planeDetector) {nPixel = planeDetec    118   else if (planeDetector) {nPixel = planeDetector->GetNbOfPixels();}
119   else if (mercuryDetector) {nPixel = mercuryD    119   else if (mercuryDetector) {nPixel = mercuryDetector->GetNbOfPixels();}
120                                                   120   
121   for (G4int j=0;j<nPixel;j++)                    121   for (G4int j=0;j<nPixel;j++)
122     {HitHPGeID [j]= -1;};                         122     {HitHPGeID [j]= -1;};
123 }                                                 123 }
124                                                   124 
125 //....oooOO0OOooo........oooOO0OOooo........oo    125 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
126                                                   126 
127 G4bool XrayFluoSD::ProcessHits(G4Step* aStep,G    127 G4bool XrayFluoSD::ProcessHits(G4Step* aStep,G4TouchableHistory*)
128 {                                                 128 { 
129                                                   129 
130                                                   130 
131                                                   131 
132   G4double edep = aStep->GetTotalEnergyDeposit    132   G4double edep = aStep->GetTotalEnergyDeposit();
133                                                   133 
134   /*                                              134   /*
135     G4String particleName = aStep->GetTrack()-    135     G4String particleName = aStep->GetTrack()->GetDynamicParticle()->GetDefinition()->GetParticleName();
136                                                   136 
137     G4Track* track = aStep->GetTrack();           137     G4Track* track = aStep->GetTrack();
138     G4int trackId = track->GetTrackID();          138     G4int trackId = track->GetTrackID();
139     //G4String processName = aStep->GetTrack()    139     //G4String processName = aStep->GetTrack()->GetCreatorProcess()->GetProcessName();
140                                                   140 
141     G4double partEnergy = aStep->GetPreStepPoi    141     G4double partEnergy = aStep->GetPreStepPoint()->GetKineticEnergy(); 
142     G4double secondEnergy = aStep->GetPostStep    142     G4double secondEnergy = aStep->GetPostStepPoint()->GetKineticEnergy();
143     G4cout << " la particella che deposita e':    143     G4cout << " la particella che deposita e': " << particleName << " ha una energia di keV "
144      << partEnergy  << " e deposita "<< edep <    144      << partEnergy  << " e deposita "<< edep << G4endl;
145     G4cout << " la particella creata ha energi    145     G4cout << " la particella creata ha energia cinetica: " << secondEnergy << G4endl;  
146   */                                              146   */
147                                                   147 
148   if (edep==0.) return false;                     148   if (edep==0.) return false;      
149                                                   149 
150   //G4cout << " edep =  " << edep << G4endl;      150   //G4cout << " edep =  " << edep << G4endl;
151                                                   151 
152   G4TouchableHistory* theTouchable                152   G4TouchableHistory* theTouchable
153     = (G4TouchableHistory*)(aStep->GetPreStepP    153     = (G4TouchableHistory*)(aStep->GetPreStepPoint()->GetTouchable());
154                                                   154     
155                                                   155 
156                                                   156 
157   G4VPhysicalVolume* physVol = theTouchable->G    157   G4VPhysicalVolume* physVol = theTouchable->GetVolume(); 
158   G4int PixelNumber = 0;                          158   G4int PixelNumber = 0;
159                                                   159 
160   if (Detector && Detector->GetNbOfPixels()>1)    160   if (Detector && Detector->GetNbOfPixels()>1) {PixelNumber= physVol->GetCopyNo();}
161   else if (planeDetector && planeDetector->Get    161   else if (planeDetector && planeDetector->GetNbOfPixels()>1) {PixelNumber= physVol->GetCopyNo();}
162   else if (mercuryDetector && mercuryDetector-    162   else if (mercuryDetector && mercuryDetector->GetNbOfPixels()>1) {PixelNumber= physVol->GetCopyNo();}
163                                                   163 
164                                                   164 
165                                                   165   
166   if ( HitHPGeID[PixelNumber]==-1)                166   if ( HitHPGeID[PixelNumber]==-1)
167     {                                             167     { 
168       XrayFluoSensorHit* HPGeHit = new XrayFlu    168       XrayFluoSensorHit* HPGeHit = new XrayFluoSensorHit();
169       HPGeHit->AddEnergy(edep);                   169       HPGeHit->AddEnergy(edep);
170       HitHPGeID[PixelNumber] = HPGeCollection-    170       HitHPGeID[PixelNumber] = HPGeCollection->insert(HPGeHit) - 1;
171       if (verboseLevel>0){                        171       if (verboseLevel>0){
172   G4cout << " New Hit on pixel: " << PixelNumb    172   G4cout << " New Hit on pixel: " << PixelNumber << G4endl;
173       }                                           173       }
174     }                                             174     }
175   else                                            175   else
176     {                                             176     { 
177       (*HPGeCollection)[HitHPGeID[PixelNumber]    177       (*HPGeCollection)[HitHPGeID[PixelNumber]]->AddEnergy(edep);
178       //G4double ED =(*HPGeCollection)[HitHPGe    178       //G4double ED =(*HPGeCollection)[HitHPGeID[PixelNumber]]->GetEdepTot(); 
179       if (verboseLevel>0)                         179       if (verboseLevel>0)
180   G4cout << " Energy added to Pixel: " << Pixe    180   G4cout << " Energy added to Pixel: " << PixelNumber << G4endl; 
181     }                                             181     }
182                                                   182   
183   return true;                                    183   return true;
184 }                                                 184 }
185                                                   185 
186                                                   186 
187 //....oooOO0OOooo........oooOO0OOooo........oo    187 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
188                                                   188 
189 void XrayFluoSD::EndOfEvent(G4HCofThisEvent* H    189 void XrayFluoSD::EndOfEvent(G4HCofThisEvent* HCE)
190 {                                                 190 {
191   static G4int HCID = -1;                         191   static G4int HCID = -1;
192   if(HCID<0)                                      192   if(HCID<0)
193   { HCID = G4SDManager::GetSDMpointer()->GetCo    193   { HCID = G4SDManager::GetSDMpointer()->GetCollectionID(collectionName[0]); }
194   HCE->AddHitsCollection(HCID,HPGeCollection);    194   HCE->AddHitsCollection(HCID,HPGeCollection);
195 }                                                 195 }
196                                                   196 
197 //....oooOO0OOooo........oooOO0OOooo........oo    197 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
198                                                   198 
199 void XrayFluoSD::clear()                          199 void XrayFluoSD::clear()
200 {}                                                200 {} 
201                                                   201 
202 //....oooOO0OOooo........oooOO0OOooo........oo    202 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
203                                                   203 
204 void XrayFluoSD::DrawAll()                        204 void XrayFluoSD::DrawAll()
205 {}                                                205 {} 
206                                                   206 
207 //....oooOO0OOooo........oooOO0OOooo........oo    207 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
208                                                   208 
209 void XrayFluoSD::PrintAll()                       209 void XrayFluoSD::PrintAll()
210 {}                                                210 {} 
211                                                   211 
212 //....oooOO0OOooo........oooOO0OOooo........oo    212 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
213                                                   213 
214                                                   214 
215                                                   215 
216                                                   216 
217                                                   217 
218                                                   218 
219                                                   219 
220                                                   220 
221                                                   221 
222                                                   222 
223                                                   223 
224                                                   224 
225                                                   225 
226                                                   226 
227                                                   227 
228                                                   228