source: trunk/examples/advanced/gammaray_telescope/src/GammaRayTelCalorimeterSD.cc@ 1271

Last change on this file since 1271 was 1230, checked in by garnier, 16 years ago

update to geant4.9.3

File size: 6.6 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// $Id: GammaRayTelCalorimeterSD.cc,v 1.7 2006/06/29 15:56:19 gunter Exp $
28// GEANT4 tag $Name: geant4-09-03-cand-01 $
29// ------------------------------------------------------------
30// GEANT 4 class implementation file
31// CERN Geneva Switzerland
32//
33//
34// ------------ GammaRayTelCalorimeterSD ------
35// by R.Giannitrapani, F.Longo & G.Santin (13 nov 2000)
36//
37// ************************************************************
38#include "G4RunManager.hh"
39#include "GammaRayTelCalorimeterSD.hh"
40#include "GammaRayTelCalorimeterHit.hh"
41#include "GammaRayTelDetectorConstruction.hh"
42
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
50//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
51
52GammaRayTelCalorimeterSD::GammaRayTelCalorimeterSD(G4String name):G4VSensitiveDetector(name)
53{
54 G4RunManager* runManager = G4RunManager::GetRunManager();
55 Detector =
56 (GammaRayTelDetectorConstruction*)(runManager->GetUserDetectorConstruction());
57
58 NbOfCALBars = Detector->GetNbOfCALBars();
59 NbOfCALLayers = Detector->GetNbOfCALLayers();
60
61 //G4cout << NbOfCALBars << " bars " << G4endl;
62 //G4cout << NbOfCALLayers << " layers " << G4endl;
63
64 NbOfCALChannels = NbOfCALBars*NbOfCALLayers;
65
66 ChitXID = new G4int[NbOfCALChannels];
67 ChitYID = new G4int[NbOfCALChannels];
68 collectionName.insert("CalorimeterCollection");
69}
70
71//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
72
73GammaRayTelCalorimeterSD::~GammaRayTelCalorimeterSD()
74{
75 delete [] ChitXID;
76 delete [] ChitYID;
77}
78
79//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
80
81void GammaRayTelCalorimeterSD::Initialize(G4HCofThisEvent*)
82{
83 CalorimeterCollection = new GammaRayTelCalorimeterHitsCollection
84 (SensitiveDetectorName,collectionName[0]);
85 for (G4int i=0;i<NbOfCALChannels;i++)
86 {
87 ChitXID[i] = -1;
88 ChitYID[i] = -1;
89 };
90}
91
92//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
93
94G4bool GammaRayTelCalorimeterSD::ProcessHits(G4Step* aStep,G4TouchableHistory*)
95{
96
97 G4double edep = aStep->GetTotalEnergyDeposit();
98 if ((edep/keV == 0.)) return false;
99
100 // This TouchableHistory is used to obtain the physical volume
101 // of the hit
102 G4TouchableHistory* theTouchable
103 = (G4TouchableHistory*)(aStep->GetPreStepPoint()->GetTouchable());
104
105 G4VPhysicalVolume* cal_bar = theTouchable->GetVolume();
106 G4VPhysicalVolume* cal_plane = theTouchable->GetVolume(1);
107
108 G4int CALBarNumber=cal_bar->GetCopyNo();
109 G4String CALBarName = cal_bar->GetName();
110
111 G4int PlaneNumber = 0;
112 PlaneNumber=cal_plane->GetCopyNo();
113 G4String PlaneName = cal_plane->GetName();
114
115
116 G4int NChannel = 0;
117
118 NChannel = PlaneNumber * NbOfCALBars + CALBarNumber;
119
120 if (PlaneName == "CALLayerX" )
121
122 // The hit is on an X CsI plane
123
124 {
125 // This is a new hit
126 if (ChitXID[NChannel]==-1)
127 {
128 GammaRayTelCalorimeterHit* CalorimeterHit = new GammaRayTelCalorimeterHit;
129 CalorimeterHit->SetCALType(1);
130 CalorimeterHit->AddEnergy(edep);
131 CalorimeterHit->SetPos(aStep->GetPreStepPoint()->GetPosition());
132 CalorimeterHit->SetCALPlaneNumber(PlaneNumber);
133 CalorimeterHit->SetCALBarNumber(CALBarNumber);
134 ChitXID[NChannel] =
135 CalorimeterCollection->insert(CalorimeterHit) -1;
136 }
137 else // This is not new
138 {
139 (*CalorimeterCollection)
140 [ChitXID[NChannel]]->AddEnergy(edep);
141 }
142 }
143
144 if (PlaneName == "CALLayerY")
145 // The hit is on an Y CsI plane
146 {
147 // This is a new hit
148 if (ChitYID[NChannel]==-1)
149 {
150 GammaRayTelCalorimeterHit* CalorimeterHit
151 = new GammaRayTelCalorimeterHit;
152 CalorimeterHit->SetCALType(0);
153 CalorimeterHit->AddEnergy(edep);
154 CalorimeterHit->SetPos(aStep->GetPreStepPoint()->GetPosition());
155 CalorimeterHit->SetCALPlaneNumber(PlaneNumber);
156 CalorimeterHit->SetCALBarNumber(CALBarNumber);
157 ChitYID[NChannel] =
158 CalorimeterCollection->insert(CalorimeterHit)-1;
159 }
160 else // This is not new
161 {
162 (*CalorimeterCollection)
163 [ChitYID[NChannel]]->AddEnergy(edep);
164 }
165 }
166
167 return true;
168}
169
170
171//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
172void GammaRayTelCalorimeterSD::EndOfEvent(G4HCofThisEvent* HCE)
173{
174 static G4int HCID = -1;
175 if(HCID<0)
176 {
177 HCID = G4SDManager::GetSDMpointer()->GetCollectionID(collectionName[0]);
178 }
179 HCE->AddHitsCollection(HCID,CalorimeterCollection);
180
181
182 for (G4int i=0;i<NbOfCALChannels;i++)
183 {
184 ChitXID[i] = -1;
185 ChitYID[i] = -1;
186 };
187}
188
189
190//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
191
192void GammaRayTelCalorimeterSD::clear()
193{}
194
195//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
196
197void GammaRayTelCalorimeterSD::DrawAll()
198{}
199
200//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
201
202void GammaRayTelCalorimeterSD::PrintAll()
203{}
204
205//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
206
207
208
209
210
211
212
213
214
215
216
217
218
219
Note: See TracBrowser for help on using the repository browser.