ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
XrayFluoSD.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file XrayFluoSD.cc
1 //
2 // ********************************************************************
3 // * License and Disclaimer *
4 // * *
5 // * The Geant4 software is copyright of the Copyright Holders of *
6 // * the Geant4 Collaboration. It is provided under the terms and *
7 // * conditions of the Geant4 Software License, included in the file *
8 // * LICENSE and available at http://cern.ch/geant4/license . These *
9 // * include a list of copyright holders. *
10 // * *
11 // * Neither the authors of this software system, nor their employing *
12 // * institutes,nor the agencies providing financial support for this *
13 // * work make any representation or warranty, express or implied, *
14 // * regarding this software system or assume any liability for its *
15 // * use. Please see the license in the file LICENSE and URL above *
16 // * for the full disclaimer and the limitation of liability. *
17 // * *
18 // * This code implementation is the result of the scientific and *
19 // * technical work of the GEANT4 collaboration. *
20 // * By using, copying, modifying or distributing the software (or *
21 // * any work based on the software) you agree to acknowledge its *
22 // * use in resulting scientific publications, and indicate your *
23 // * acceptance of all terms of the Geant4 Software license. *
24 // ********************************************************************
25 //
26 //
27 //
28 // Author: Elena Guardincerri (Elena.Guardincerri@ge.infn.it)
29 //
30 // History:
31 // -----------
32 // 28 Nov 2001 Elena Guardincerri Created
33 // 29 Nov 2002 Energy deposition bug fixed (Alfonso.mantero@ge.infn.it)
34 // 17 Jul 2003 Name changed to XrayFluoSD
35 // 01 Sep 2003 Constructor overload for different geometries handling
36 // -------------------------------------------------------------------
37 
38 #include "XrayFluoSD.hh"
39 #include "XrayFluoSensorHit.hh"
43 #include "G4VPhysicalVolume.hh"
44 #include "G4Step.hh"
45 #include "G4VTouchable.hh"
46 #include "G4TouchableHistory.hh"
47 #include "G4SDManager.hh"
48 #include "G4ios.hh"
49 #include "G4VProcess.hh"
50 
51 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
52 
55  :G4VSensitiveDetector(name),Detector(0),planeDetector(0),mercuryDetector(0)
56 {
57 
58  Detector = det;
59  collectionName.insert("HPGeCollection");
60  HitHPGeID = new G4int[500];
61  G4cout << "XrayFluoSD created" << G4endl;
62 
63 }
64 
65 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
66 
69  :G4VSensitiveDetector(name),Detector(0),planeDetector(0),mercuryDetector(0)
70 {
71  planeDetector = det;
72  collectionName.insert("HPGeCollection");
73  HitHPGeID = new G4int[500];
74  G4cout << "XrayFluoSD created" << G4endl;
75 
76 }
77 
78 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
79 
82  :G4VSensitiveDetector(name),Detector(0),planeDetector(0),mercuryDetector(0)
83 {
84  mercuryDetector = det;
85  collectionName.insert("HPGeCollection");
86  HitHPGeID = new G4int[500];
87  G4cout << "XrayFluoSD created" << G4endl;
88 }
89 
90 // //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
91 
92 
93 
94 
96 {
97 
98  delete [] HitHPGeID;
99 
100  // delete HPGeCollection;
101 
102  G4cout << "XrayFluoSD deleted" << G4endl;
103 }
104 
105 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
106 
108 
109 //initializes HCE with the hits collection(s) created by this
110  //sensitive detector
111 {
114 
115  G4int nPixel = 0;
116 
117  if (Detector) {nPixel = Detector->GetNbOfPixels();}
118  else if (planeDetector) {nPixel = planeDetector->GetNbOfPixels();}
119  else if (mercuryDetector) {nPixel = mercuryDetector->GetNbOfPixels();}
120 
121  for (G4int j=0;j<nPixel;j++)
122  {HitHPGeID [j]= -1;};
123 }
124 
125 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
126 
128 {
129 
130 
131 
133 
134  /*
135  G4String particleName = aStep->GetTrack()->GetDynamicParticle()->GetDefinition()->GetParticleName();
136 
137  G4Track* track = aStep->GetTrack();
138  G4int trackId = track->GetTrackID();
139  //G4String processName = aStep->GetTrack()->GetCreatorProcess()->GetProcessName();
140 
141  G4double partEnergy = aStep->GetPreStepPoint()->GetKineticEnergy();
142  G4double secondEnergy = aStep->GetPostStepPoint()->GetKineticEnergy();
143  G4cout << " la particella che deposita e': " << particleName << " ha una energia di keV "
144  << partEnergy << " e deposita "<< edep << G4endl;
145  G4cout << " la particella creata ha energia cinetica: " << secondEnergy << G4endl;
146  */
147 
148  if (edep==0.) return false;
149 
150  //G4cout << " edep = " << edep << G4endl;
151 
152  G4TouchableHistory* theTouchable
154 
155 
156 
157  G4VPhysicalVolume* physVol = theTouchable->GetVolume();
158  G4int PixelNumber = 0;
159 
160  if (Detector && Detector->GetNbOfPixels()>1) {PixelNumber= physVol->GetCopyNo();}
161  else if (planeDetector && planeDetector->GetNbOfPixels()>1) {PixelNumber= physVol->GetCopyNo();}
162  else if (mercuryDetector && mercuryDetector->GetNbOfPixels()>1) {PixelNumber= physVol->GetCopyNo();}
163 
164 
165 
166  if ( HitHPGeID[PixelNumber]==-1)
167  {
168  XrayFluoSensorHit* HPGeHit = new XrayFluoSensorHit();
169  HPGeHit->AddEnergy(edep);
170  HitHPGeID[PixelNumber] = HPGeCollection->insert(HPGeHit) - 1;
171  if (verboseLevel>0){
172  G4cout << " New Hit on pixel: " << PixelNumber << G4endl;
173  }
174  }
175  else
176  {
177  (*HPGeCollection)[HitHPGeID[PixelNumber]]->AddEnergy(edep);
178  //G4double ED =(*HPGeCollection)[HitHPGeID[PixelNumber]]->GetEdepTot();
179  if (verboseLevel>0)
180  G4cout << " Energy added to Pixel: " << PixelNumber << G4endl;
181  }
182 
183  return true;
184 }
185 
186 
187 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
188 
190 {
191  static G4int HCID = -1;
192  if(HCID<0)
195 }
196 
197 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
198 
200 {}
201 
202 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
203 
205 {}
206 
207 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
208 
210 {}
211 
212 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
213 
214 
215 
216 
217 
218 
219 
220 
221 
222 
223 
224 
225 
226 
227