Geant4.10
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
GammaRayTelAnticoincidenceSD.cc
Go to the documentation of this file.
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: GammaRayTelAnticoincidenceSD.cc 66508 2012-12-19 10:16:45Z gcosmo $
28 // ------------------------------------------------------------
29 // GEANT 4 class implementation file
30 // CERN Geneva Switzerland
31 //
32 //
33 // ------------ GammaRayTelAnticoincidenceSD ------
34 // by R.Giannitrapani, F.Longo & G.Santin (13 nov 2000)
35 //
36 // ************************************************************
37 #include "G4RunManager.hh"
41 
42 #include "G4SystemOfUnits.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 
50 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
51 
54 {
56  Detector =
58 
59  NbOfACDLateralTiles = Detector->GetNbOfACDLateralTiles();
60  NbOfACDTopTiles = Detector->GetNbOfACDTopTiles();
61 
62  G4cout << NbOfACDLateralTiles << " LAT " << G4endl;
63  G4cout << NbOfACDTopTiles << " TOP " << G4endl;
64 
65  HitLateralID = new G4int[NbOfACDLateralTiles];
66  HitTopID = new G4int[NbOfACDTopTiles];
67  collectionName.insert("AnticoincidenceCollection");
68 }
69 
70 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
71 
73 {
74  delete [] HitLateralID;
75  delete [] HitTopID;
76 }
77 
78 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
79 
81 {
82  AnticoincidenceCollection = new GammaRayTelAnticoincidenceHitsCollection
84  for (G4int i=0;i<NbOfACDLateralTiles;i++)
85  {
86  HitLateralID[i] = -1;
87  };
88 
89  for (G4int j=0;j<NbOfACDTopTiles;j++)
90  {
91 
92  HitTopID[j] = -1;
93  };
94 }
95 
96 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
97 
99 {
100 
101  G4double edep = aStep->GetTotalEnergyDeposit();
102  if ((edep/keV == 0.)) return false;
103 
104  // This TouchableHistory is used to obtain the physical volume
105  // of the hit
106  G4TouchableHistory* theTouchable
108 
109  G4VPhysicalVolume* acd_tile = theTouchable->GetVolume();
110 
111  G4int ACDTileNumber=acd_tile->GetCopyNo();
112  G4String ACDTileName = acd_tile->GetName();
113 
114  // G4cout << ACDTileName << " " << edep/keV << G4endl;
115 
116  if (ACDTileName == "ACT" )
117  // The hit is on an top ACD tile (ACDType 0)
118  {
119  // This is a new hit
120  if (HitTopID[ACDTileNumber]==-1)
121  {
123  AnticoincidenceHit = new GammaRayTelAnticoincidenceHit;
124  AnticoincidenceHit->SetACDType(0);
125  AnticoincidenceHit->AddEnergy(edep);
126  AnticoincidenceHit->SetPos(aStep->GetPreStepPoint()->GetPosition());
127  AnticoincidenceHit->SetACDTileNumber(ACDTileNumber);
128  HitTopID[ACDTileNumber] =
129  AnticoincidenceCollection->insert(AnticoincidenceHit) -1;
130  }
131  else // This is not new
132  {
133  (*AnticoincidenceCollection)
134  [HitTopID[ACDTileNumber]]->AddEnergy(edep);
135  }
136  }
137 
138  if (ACDTileName == "ACL1")
139  // The hit is on an lateral (left-right) ACD tile (ACDType 1)
140  {
141  // This is a new hit
142  if (HitLateralID[ACDTileNumber]==-1)
143  {
145  AnticoincidenceHit = new GammaRayTelAnticoincidenceHit;
146  AnticoincidenceHit->SetACDType(1);
147  AnticoincidenceHit->AddEnergy(edep);
148  AnticoincidenceHit->SetPos(aStep->GetPreStepPoint()->GetPosition());
149  AnticoincidenceHit->SetACDTileNumber(ACDTileNumber);
150  HitLateralID[ACDTileNumber] =
151  AnticoincidenceCollection->insert(AnticoincidenceHit) -1;
152  }
153  else // This is not new
154  {
155  (*AnticoincidenceCollection)
156  [HitLateralID[ACDTileNumber]]->AddEnergy(edep);
157  }
158  }
159 
160  if (ACDTileName == "ACL2")
161  // The hit is on an lateral (rear - front) ACD tile (ACDType 2)
162  {
163  // This is a new hit
164  if (HitLateralID[ACDTileNumber]==-1)
165  {
167  AnticoincidenceHit = new GammaRayTelAnticoincidenceHit;
168  AnticoincidenceHit->SetACDType(2);
169  AnticoincidenceHit->AddEnergy(edep);
170  AnticoincidenceHit->SetPos(aStep->GetPreStepPoint()->GetPosition());
171  AnticoincidenceHit->SetACDTileNumber(ACDTileNumber);
172  HitLateralID[ACDTileNumber] =
173  AnticoincidenceCollection->insert(AnticoincidenceHit) -1;
174  }
175  else // This is not new
176  {
177  (*AnticoincidenceCollection)
178  [HitLateralID[ACDTileNumber]]->AddEnergy(edep);
179  }
180  }
181  return true;
182 }
183 
184 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
185 
187 {
188  static G4int HCID = -1;
189  if(HCID<0)
190  {
192  }
193  HCE->AddHitsCollection(HCID,AnticoincidenceCollection);
194 
195  for (G4int i=0;i<NbOfACDLateralTiles;i++)
196  {
197  HitLateralID[i] = -1;
198  };
199 
200  for (G4int j=0;j<NbOfACDTopTiles;j++)
201  {
202 
203  HitTopID[j] = -1;
204  };
205 
206 }
207 
208 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
209 
211 {}
212 
213 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
214 
216 {}
217 
218 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
219 
221 {}
222 
223 //....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
224 
225 
226 
227 
228 
229 
230 
231 
232 
233 
234 
235 
236 
237 
G4int GetCollectionID(G4String colName)
Definition: G4SDManager.cc:131
G4VPhysicalVolume * GetVolume(G4int depth=0) const
const G4VUserDetectorConstruction * GetUserDetectorConstruction() const
const XML_Char * name
const G4VTouchable * GetTouchable() const
G4bool ProcessHits(G4Step *astep, G4TouchableHistory *)
int G4int
Definition: G4Types.hh:78
G4StepPoint * GetPreStepPoint() const
G4THitsCollection< GammaRayTelAnticoincidenceHit > GammaRayTelAnticoincidenceHitsCollection
G4GLOB_DLL std::ostream G4cout
const G4String & GetName() const
const G4ThreeVector & GetPosition() const
bool G4bool
Definition: G4Types.hh:79
Definition: G4Step.hh:76
G4double GetTotalEnergyDeposit() const
void AddHitsCollection(G4int HCID, G4VHitsCollection *aHC)
static G4RunManager * GetRunManager()
Definition: G4RunManager.cc:74
static G4SDManager * GetSDMpointer()
Definition: G4SDManager.cc:40
virtual G4int GetCopyNo() const =0
#define G4endl
Definition: G4ios.hh:61
G4CollectionNameVector collectionName
double G4double
Definition: G4Types.hh:76