ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
GammaRayTelCalorimeterSD.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file GammaRayTelCalorimeterSD.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 // GEANT 4 class implementation file
29 // CERN Geneva Switzerland
30 //
31 //
32 // ------------ GammaRayTelCalorimeterSD ------
33 // by R.Giannitrapani, F.Longo & G.Santin (13 nov 2000)
34 //
35 // ************************************************************
36 #include "G4RunManager.hh"
40 
41 #include "G4SystemOfUnits.hh"
42 #include "G4VPhysicalVolume.hh"
43 #include "G4Step.hh"
44 #include "G4VTouchable.hh"
45 #include "G4TouchableHistory.hh"
46 #include "G4SDManager.hh"
47 #include "G4ios.hh"
48 
49 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
50 
52 {
54  Detector =
56 
59 
60  //G4cout << NbOfCALBars << " bars " << G4endl;
61  //G4cout << NbOfCALLayers << " layers " << G4endl;
62 
64 
67  collectionName.insert("CalorimeterCollection");
68 }
69 
70 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
71 
73 {
74  delete [] ChitXID;
75  delete [] ChitYID;
76 }
77 
78 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
79 
81 {
84  for (G4int i=0;i<NbOfCALChannels;i++)
85  {
86  ChitXID[i] = -1;
87  ChitYID[i] = -1;
88  };
89 }
90 
91 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
92 
94 {
95 
96  G4double edep = 0.;
97  edep = aStep->GetTotalEnergyDeposit();
98  if (edep == 0.) return false;
99 
100  // This TouchableHistory is used to obtain the physical volume
101  // of the hit
102  G4TouchableHistory* theTouchable
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  {
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
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....
173 {
174  static G4int HCID = -1;
175  if(HCID<0)
176  {
178  }
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 
193 {}
194 
195 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
196 
198 {}
199 
200 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
201 
203 {}
204 
205 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
206 
207 
208 
209 
210 
211 
212 
213 
214 
215 
216 
217 
218 
219