source: trunk/examples/advanced/gammaray_telescope/src/GammaRayTelAnticoincidenceSD.cc @ 1272

Last change on this file since 1272 was 1230, checked in by garnier, 14 years ago

update to geant4.9.3

File size: 7.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// $Id: GammaRayTelAnticoincidenceSD.cc,v 1.6 2006/06/29 15:56:15 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//      ------------ GammaRayTelAnticoincidenceSD  ------
35//           by  R.Giannitrapani, F.Longo & G.Santin (13 nov 2000)
36//
37// ************************************************************
38#include "G4RunManager.hh"
39#include "GammaRayTelAnticoincidenceSD.hh"
40#include "GammaRayTelAnticoincidenceHit.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
52GammaRayTelAnticoincidenceSD::GammaRayTelAnticoincidenceSD(G4String name)
53:G4VSensitiveDetector(name)
54{
55  G4RunManager* runManager = G4RunManager::GetRunManager();
56  Detector =
57    (GammaRayTelDetectorConstruction*)(runManager->GetUserDetectorConstruction());
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
72GammaRayTelAnticoincidenceSD::~GammaRayTelAnticoincidenceSD()
73{
74  delete [] HitLateralID;
75  delete [] HitTopID;
76}
77
78//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
79
80void GammaRayTelAnticoincidenceSD::Initialize(G4HCofThisEvent*)
81{
82  AnticoincidenceCollection = new GammaRayTelAnticoincidenceHitsCollection
83    (SensitiveDetectorName,collectionName[0]);
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
98G4bool GammaRayTelAnticoincidenceSD::ProcessHits(G4Step* aStep, G4TouchableHistory*)
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
107    = (G4TouchableHistory*)(aStep->GetPreStepPoint()->GetTouchable());
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        {       
122          GammaRayTelAnticoincidenceHit* 
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        {       
144          GammaRayTelAnticoincidenceHit* 
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        {       
166          GammaRayTelAnticoincidenceHit* 
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
186void GammaRayTelAnticoincidenceSD::EndOfEvent(G4HCofThisEvent* HCE)
187{
188  static G4int HCID = -1;
189  if(HCID<0)
190    { 
191      HCID = G4SDManager::GetSDMpointer()->GetCollectionID(collectionName[0]);
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
210void GammaRayTelAnticoincidenceSD::clear()
211{} 
212
213//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
214
215void GammaRayTelAnticoincidenceSD::DrawAll()
216{} 
217
218//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
219
220void GammaRayTelAnticoincidenceSD::PrintAll()
221{} 
222
223//....oooOO0OOooo........oooOO0OOooo........oooOO0OOooo........oooOO0OOooo....
224
225
226
227
228
229
230
231
232
233
234
235
236
237
Note: See TracBrowser for help on using the repository browser.