ECCE @ EIC Software
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
GammaRayTelAnticoincidenceSD.cc
Go to the documentation of this file. Or view the newest version in sPHENIX GitHub for file GammaRayTelAnticoincidenceSD.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 // ------------ GammaRayTelAnticoincidenceSD ------
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 
53 {
55  Detector =
57 
60 
61  G4cout << NbOfACDLateralTiles << " LAT " << G4endl;
62  G4cout << NbOfACDTopTiles << " TOP " << G4endl;
63 
66  collectionName.insert("AnticoincidenceCollection");
67 }
68 
69 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
70 
72 {
73  delete [] HitLateralID;
74  delete [] HitTopID;
75 }
76 
77 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
78 
80 {
83  for (G4int i=0;i<NbOfACDLateralTiles;i++)
84  {
85  HitLateralID[i] = -1;
86  };
87 
88  for (G4int j=0;j<NbOfACDTopTiles;j++)
89  {
90 
91  HitTopID[j] = -1;
92  };
93 }
94 
95 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
96 
98 {
99 
101  if ((edep/keV == 0.)) return false;
102 
103  // This TouchableHistory is used to obtain the physical volume
104  // of the hit
105  G4TouchableHistory* theTouchable
107 
108  G4VPhysicalVolume* acd_tile = theTouchable->GetVolume();
109 
110  G4int ACDTileNumber=acd_tile->GetCopyNo();
111  G4String ACDTileName = acd_tile->GetName();
112 
113  // G4cout << ACDTileName << " " << edep/keV << G4endl;
114 
115  if (ACDTileName == "ACT" )
116  // The hit is on an top ACD tile (ACDType 0)
117  {
118  // This is a new hit
119  if (HitTopID[ACDTileNumber]==-1)
120  {
122  AnticoincidenceHit = new GammaRayTelAnticoincidenceHit;
123  AnticoincidenceHit->SetACDType(0);
124  AnticoincidenceHit->AddEnergy(edep);
125  AnticoincidenceHit->SetPos(aStep->GetPreStepPoint()->GetPosition());
126  AnticoincidenceHit->SetACDTileNumber(ACDTileNumber);
127  HitTopID[ACDTileNumber] =
128  AnticoincidenceCollection->insert(AnticoincidenceHit) -1;
129  }
130  else // This is not new
131  {
132  (*AnticoincidenceCollection)
133  [HitTopID[ACDTileNumber]]->AddEnergy(edep);
134  }
135  }
136 
137  if (ACDTileName == "ACL1")
138  // The hit is on an lateral (left-right) ACD tile (ACDType 1)
139  {
140  // This is a new hit
141  if (HitLateralID[ACDTileNumber]==-1)
142  {
144  AnticoincidenceHit = new GammaRayTelAnticoincidenceHit;
145  AnticoincidenceHit->SetACDType(1);
146  AnticoincidenceHit->AddEnergy(edep);
147  AnticoincidenceHit->SetPos(aStep->GetPreStepPoint()->GetPosition());
148  AnticoincidenceHit->SetACDTileNumber(ACDTileNumber);
149  HitLateralID[ACDTileNumber] =
150  AnticoincidenceCollection->insert(AnticoincidenceHit) -1;
151  }
152  else // This is not new
153  {
154  (*AnticoincidenceCollection)
155  [HitLateralID[ACDTileNumber]]->AddEnergy(edep);
156  }
157  }
158 
159  if (ACDTileName == "ACL2")
160  // The hit is on an lateral (rear - front) ACD tile (ACDType 2)
161  {
162  // This is a new hit
163  if (HitLateralID[ACDTileNumber]==-1)
164  {
166  AnticoincidenceHit = new GammaRayTelAnticoincidenceHit;
167  AnticoincidenceHit->SetACDType(2);
168  AnticoincidenceHit->AddEnergy(edep);
169  AnticoincidenceHit->SetPos(aStep->GetPreStepPoint()->GetPosition());
170  AnticoincidenceHit->SetACDTileNumber(ACDTileNumber);
171  HitLateralID[ACDTileNumber] =
172  AnticoincidenceCollection->insert(AnticoincidenceHit) -1;
173  }
174  else // This is not new
175  {
176  (*AnticoincidenceCollection)
177  [HitLateralID[ACDTileNumber]]->AddEnergy(edep);
178  }
179  }
180  return true;
181 }
182 
183 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
184 
186 {
187  static G4int HCID = -1;
188  if(HCID<0)
189  {
191  }
193 
194  for (G4int i=0;i<NbOfACDLateralTiles;i++)
195  {
196  HitLateralID[i] = -1;
197  };
198 
199  for (G4int j=0;j<NbOfACDTopTiles;j++)
200  {
201 
202  HitTopID[j] = -1;
203  };
204 
205 }
206 
207 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
208 
210 {}
211 
212 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
213 
215 {}
216 
217 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
218 
220 {}
221 
222 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
223 
224 
225 
226 
227 
228 
229 
230 
231 
232 
233 
234 
235 
236