source: trunk/examples/advanced/raredecay_calorimetry/src/PhotInStackingAction.cc@ 1305

Last change on this file since 1305 was 807, checked in by garnier, 17 years ago

update

File size: 12.4 KB
Line 
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//#define debug
28//#define errors
29
30#include "PhotInStackingAction.hh"
31
32// Can be moved to the PhotInConstants.hh
33G4int PhotInStackingAction::PhotInNGamma [PhotInDiNSections] = {0,0,0,0,0,0};
34G4int PhotInStackingAction::PhotInNElectron [PhotInDiNSections] = {0,0,0,0,0,0};
35G4int PhotInStackingAction::PhotInNPositron [PhotInDiNSections] = {0,0,0,0,0,0};
36G4int PhotInStackingAction::PhotInNNeutrons [PhotInDiNSections] = {0,0,0,0,0,0};
37G4int PhotInStackingAction::PhotInNProtons [PhotInDiNSections] = {0,0,0,0,0,0};
38G4int PhotInStackingAction::PhotInNDeuterons [PhotInDiNSections] = {0,0,0,0,0,0};
39G4int PhotInStackingAction::PhotInNTritons [PhotInDiNSections] = {0,0,0,0,0,0};
40G4int PhotInStackingAction::PhotInNHe3s [PhotInDiNSections] = {0,0,0,0,0,0};
41G4int PhotInStackingAction::PhotInNAlphas [PhotInDiNSections] = {0,0,0,0,0,0};
42G4int PhotInStackingAction::PhotInNLambdas [PhotInDiNSections] = {0,0,0,0,0,0};
43G4int PhotInStackingAction::PhotInNHeavyFrags[PhotInDiNSections] = {0,0,0,0,0,0};
44G4int PhotInStackingAction::PhotInNMesons [PhotInDiNSections] = {0,0,0,0,0,0};
45G4double PhotInStackingAction::PhotInEMinGamma [PhotInDiNSections] = {DBL_MAX,DBL_MAX,DBL_MAX,DBL_MAX,DBL_MAX,DBL_MAX};
46G4double PhotInStackingAction::PhotInEMinElectron [PhotInDiNSections] = {DBL_MAX,DBL_MAX,DBL_MAX,DBL_MAX,DBL_MAX,DBL_MAX};
47G4double PhotInStackingAction::PhotInEMinPositron [PhotInDiNSections] = {DBL_MAX,DBL_MAX,DBL_MAX,DBL_MAX,DBL_MAX,DBL_MAX};
48G4double PhotInStackingAction::PhotInEMinNeutrons [PhotInDiNSections] = {DBL_MAX,DBL_MAX,DBL_MAX,DBL_MAX,DBL_MAX,DBL_MAX};
49G4double PhotInStackingAction::PhotInEMinProtons [PhotInDiNSections] = {DBL_MAX,DBL_MAX,DBL_MAX,DBL_MAX,DBL_MAX,DBL_MAX};
50G4double PhotInStackingAction::PhotInEMinDeuterons [PhotInDiNSections] = {DBL_MAX,DBL_MAX,DBL_MAX,DBL_MAX,DBL_MAX,DBL_MAX};
51G4double PhotInStackingAction::PhotInEMinTritons [PhotInDiNSections] = {DBL_MAX,DBL_MAX,DBL_MAX,DBL_MAX,DBL_MAX,DBL_MAX};
52G4double PhotInStackingAction::PhotInEMinHe3s [PhotInDiNSections] = {DBL_MAX,DBL_MAX,DBL_MAX,DBL_MAX,DBL_MAX,DBL_MAX};
53G4double PhotInStackingAction::PhotInEMinAlphas [PhotInDiNSections] = {DBL_MAX,DBL_MAX,DBL_MAX,DBL_MAX,DBL_MAX,DBL_MAX};
54G4double PhotInStackingAction::PhotInEMinLambdas [PhotInDiNSections] = {DBL_MAX,DBL_MAX,DBL_MAX,DBL_MAX,DBL_MAX,DBL_MAX};
55G4double PhotInStackingAction::PhotInEMinHeavyFrags[PhotInDiNSections] = {DBL_MAX,DBL_MAX,DBL_MAX,DBL_MAX,DBL_MAX,DBL_MAX};
56G4double PhotInStackingAction::PhotInEMinMesons [PhotInDiNSections] = {DBL_MAX,DBL_MAX,DBL_MAX,DBL_MAX,DBL_MAX,DBL_MAX};
57G4double PhotInStackingAction::PhotInEMaxGamma [PhotInDiNSections]={0.,0.,0.,0.,0.,0.};
58G4double PhotInStackingAction::PhotInEMaxElectron [PhotInDiNSections]={0.,0.,0.,0.,0.,0.};
59G4double PhotInStackingAction::PhotInEMaxPositron [PhotInDiNSections]={0.,0.,0.,0.,0.,0.};
60G4double PhotInStackingAction::PhotInEMaxNeutrons [PhotInDiNSections]={0.,0.,0.,0.,0.,0.};
61G4double PhotInStackingAction::PhotInEMaxProtons [PhotInDiNSections]={0.,0.,0.,0.,0.,0.};
62G4double PhotInStackingAction::PhotInEMaxDeuterons [PhotInDiNSections]={0.,0.,0.,0.,0.,0.};
63G4double PhotInStackingAction::PhotInEMaxTritons [PhotInDiNSections]={0.,0.,0.,0.,0.,0.};
64G4double PhotInStackingAction::PhotInEMaxHe3s [PhotInDiNSections]={0.,0.,0.,0.,0.,0.};
65G4double PhotInStackingAction::PhotInEMaxAlphas [PhotInDiNSections]={0.,0.,0.,0.,0.,0.};
66G4double PhotInStackingAction::PhotInEMaxLambdas [PhotInDiNSections]={0.,0.,0.,0.,0.,0.};
67G4double PhotInStackingAction::PhotInEMaxHeavyFrags[PhotInDiNSections]={0.,0.,0.,0.,0.,0.};
68G4double PhotInStackingAction::PhotInEMaxMesons [PhotInDiNSections]={0.,0.,0.,0.,0.,0.};
69
70PhotInStackingAction::PhotInStackingAction() {}
71
72PhotInStackingAction::~PhotInStackingAction(){}
73
74G4ClassificationOfNewTrack PhotInStackingAction::ClassifyNewTrack(const G4Track* aTrack)
75{
76 G4TouchableHistory* theTouchable = (G4TouchableHistory*)(aTrack->GetTouchable());
77 G4int depth=0; // Depth of geometrical hierarchy of volumes
78 if(theTouchable)depth=theTouchable->GetHistoryDepth();
79#ifdef debug
80 G4cout<<"PhotInStackingAction::ClassifyNewTrack: --------->>>>>>> depth="<<depth<<G4endl;
81#endif
82#ifdef debug
83 G4cout<<"PhotInStackingAction::ClassifyNewTrack: XYZ="<<aTrack->GetPosition()<<G4endl;
84#endif
85 if(depth>1) // It is in one of the Sections, not in the Mother volume
86 {
87 G4VPhysicalVolume* calPhys = theTouchable->GetVolume(depth-1);// PhysVolume of Sections
88 if(calPhys)
89 {
90 G4String sectName=calPhys->GetName();
91#ifdef debug
92 G4cout<<"PhotInStackingAction::ClassifyNewTrack: SectionName="<<sectName<<G4endl;
93#endif
94 G4int i = -1; // 2 * Section_number
95 if (sectName==PhotInCalName[0]) { i = 0; }
96 else if(sectName==PhotInCalName[1]) { i = 2; }
97 else if(sectName==PhotInCalName[2]) { i = 4; }
98#ifdef errors
99 if(i<0) G4cerr<<"*PhotInStackingAction::ClassifyNewTrack: sensitive i="<<i<<G4endl;
100#endif
101#ifdef debug
102 G4int layerNumber=theTouchable->GetReplicaNumber(depth-2);//WhatIfLayers notFill Sect
103 G4cout<<"PhotInStackingAction::ClassifyNewTrack: Layer#"<<layerNumber<<G4endl;
104#endif
105 G4int slabNumber=-1; // Prototype of the slab number (-1 means absorber)
106 if(depth>2) slabNumber=theTouchable->GetReplicaNumber(depth-3);
107 else i++; // Collect information in the absorber
108#ifdef debug
109 G4cout<<"PhotInStackingAction::ClassifyNewTrack:Slab#"<<slabNumber<<",i="<<i<<G4endl;
110#endif
111 G4ParticleDefinition* particleType = aTrack->GetDefinition();
112 if(particleType==G4Gamma::GammaDefinition())
113 {
114 PhotInNGamma[i]++;
115 if(PhotInEMinGamma[i]>aTrack->GetKineticEnergy())
116 PhotInEMinGamma[i]=aTrack->GetKineticEnergy();
117 if(PhotInEMaxGamma[i]<aTrack->GetKineticEnergy())
118 PhotInEMaxGamma[i]=aTrack->GetKineticEnergy();
119 }
120 else if(particleType==G4Electron::ElectronDefinition())
121 {
122 PhotInNElectron[i]++;
123 if(PhotInEMinElectron[i]>aTrack->GetKineticEnergy())
124 PhotInEMinElectron[i]=aTrack->GetKineticEnergy();
125 if(PhotInEMaxElectron[i]<aTrack->GetKineticEnergy())
126 PhotInEMaxElectron[i]=aTrack->GetKineticEnergy();
127 }
128 else if(particleType==G4Positron::PositronDefinition())
129 {
130 PhotInNPositron[i]++;
131 if(PhotInEMinPositron[i]>aTrack->GetKineticEnergy())
132 PhotInEMinPositron[i]=aTrack->GetKineticEnergy();
133 if(PhotInEMaxPositron[i]<aTrack->GetKineticEnergy())
134 PhotInEMaxPositron[i]=aTrack->GetKineticEnergy();
135 }
136 else if(particleType==G4Neutron::NeutronDefinition())
137 {
138 PhotInNNeutrons[i]++;
139 if(PhotInEMinNeutrons[i]>aTrack->GetKineticEnergy())
140 PhotInEMinNeutrons[i]=aTrack->GetKineticEnergy();
141 if(PhotInEMaxNeutrons[i]<aTrack->GetKineticEnergy())
142 PhotInEMaxNeutrons[i]=aTrack->GetKineticEnergy();
143 }
144 else if(particleType==G4Proton::ProtonDefinition())
145 {
146 PhotInNProtons[i]++;
147 if(PhotInEMinProtons[i]>aTrack->GetKineticEnergy())
148 PhotInEMinProtons[i]=aTrack->GetKineticEnergy();
149 if(PhotInEMaxProtons[i]<aTrack->GetKineticEnergy())
150 PhotInEMaxProtons[i]=aTrack->GetKineticEnergy();
151 }
152 else if(particleType==G4Deuteron::DeuteronDefinition())
153 {
154 PhotInNDeuterons[i]++;
155 if(PhotInEMinDeuterons[i]>aTrack->GetKineticEnergy())
156 PhotInEMinDeuterons[i]=aTrack->GetKineticEnergy();
157 if(PhotInEMaxDeuterons[i]<aTrack->GetKineticEnergy())
158 PhotInEMaxDeuterons[i]=aTrack->GetKineticEnergy();
159 }
160 else if(particleType==G4Triton::TritonDefinition())
161 {
162 PhotInNTritons[i]++;
163 if(PhotInEMinTritons[i]>aTrack->GetKineticEnergy())
164 PhotInEMinTritons[i]=aTrack->GetKineticEnergy();
165 if(PhotInEMaxTritons[i]<aTrack->GetKineticEnergy())
166 PhotInEMaxTritons[i]=aTrack->GetKineticEnergy();
167 }
168 else if(particleType==G4He3::He3Definition())
169 {
170 PhotInNHe3s[i]++;
171 if(PhotInEMinHe3s[i]>aTrack->GetKineticEnergy())
172 PhotInEMinHe3s[i]=aTrack->GetKineticEnergy();
173 if(PhotInEMaxHe3s[i]<aTrack->GetKineticEnergy())
174 PhotInEMaxHe3s[i]=aTrack->GetKineticEnergy();
175 }
176 else if(particleType==G4Alpha::AlphaDefinition())
177 {
178 PhotInNAlphas[i]++;
179 if(PhotInEMinAlphas[i]>aTrack->GetKineticEnergy())
180 PhotInEMinAlphas[i]=aTrack->GetKineticEnergy();
181 if(PhotInEMaxAlphas[i]<aTrack->GetKineticEnergy())
182 PhotInEMaxAlphas[i]=aTrack->GetKineticEnergy();
183 }
184 else if(particleType==G4Lambda::LambdaDefinition())
185 {
186 PhotInNLambdas[i]++;
187 if(PhotInEMinLambdas[i]>aTrack->GetKineticEnergy())
188 PhotInEMinLambdas[i]=aTrack->GetKineticEnergy();
189 if(PhotInEMaxLambdas[i]<aTrack->GetKineticEnergy())
190 PhotInEMaxLambdas[i]=aTrack->GetKineticEnergy();
191 }
192 else if(particleType->GetBaryonNumber()>4)
193 {
194 PhotInNHeavyFrags[i]++;
195 if(PhotInEMinHeavyFrags[i]>aTrack->GetKineticEnergy())
196 PhotInEMinHeavyFrags[i]=aTrack->GetKineticEnergy();
197 if(PhotInEMaxHeavyFrags[i]<aTrack->GetKineticEnergy())
198 PhotInEMaxHeavyFrags[i]=aTrack->GetKineticEnergy();
199 }
200 else if(!particleType->GetBaryonNumber())
201 {
202 PhotInNMesons[i]++;
203 if(PhotInEMinMesons[i]>aTrack->GetKineticEnergy())
204 PhotInEMinMesons[i]=aTrack->GetKineticEnergy();
205 if(PhotInEMaxMesons[i]<aTrack->GetKineticEnergy())
206 PhotInEMaxMesons[i]=aTrack->GetKineticEnergy();
207 }
208 }
209 }
210 return fUrgent;
211}
212
213void PhotInStackingAction::PrepareNewEvent()
214{
215 for(int i=0; i<PhotInDiNSections ;i++)
216 {
217 PhotInNGamma [i] = 0;
218 PhotInNElectron [i] = 0;
219 PhotInNPositron [i] = 0;
220 PhotInNNeutrons [i] = 0;
221 PhotInNProtons [i] = 0;
222 PhotInNDeuterons [i] = 0;
223 PhotInNTritons [i] = 0;
224 PhotInNHe3s [i] = 0;
225 PhotInNAlphas [i] = 0;
226 PhotInNLambdas [i] = 0;
227 PhotInNHeavyFrags[i] = 0;
228 PhotInNMesons [i] = 0;
229
230 PhotInEMinGamma [i] = DBL_MAX;
231 PhotInEMinElectron [i] = DBL_MAX;
232 PhotInEMinPositron [i] = DBL_MAX;
233 PhotInEMinNeutrons [i] = DBL_MAX;
234 PhotInEMinProtons [i] = DBL_MAX;
235 PhotInEMinDeuterons [i] = DBL_MAX;
236 PhotInEMinTritons [i] = DBL_MAX;
237 PhotInEMinHe3s [i] = DBL_MAX;
238 PhotInEMinAlphas [i] = DBL_MAX;
239 PhotInEMinLambdas [i] = DBL_MAX;
240 PhotInEMinHeavyFrags[i] = DBL_MAX;
241 PhotInEMinMesons [i] = DBL_MAX;
242
243 PhotInEMaxGamma [i] = 0.;
244 PhotInEMaxElectron [i] = 0.;
245 PhotInEMaxPositron [i] = 0.;
246 PhotInEMaxNeutrons [i] = 0.;
247 PhotInEMaxProtons [i] = 0.;
248 PhotInEMaxDeuterons [i] = 0.;
249 PhotInEMaxTritons [i] = 0.;
250 PhotInEMaxHe3s [i] = 0.;
251 PhotInEMaxAlphas [i] = 0.;
252 PhotInEMaxLambdas [i] = 0.;
253 PhotInEMaxHeavyFrags[i] = 0.;
254 PhotInEMaxMesons [i] = 0.;
255 }
256}
257
258
Note: See TracBrowser for help on using the repository browser.