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

Last change on this file since 1321 was 1230, checked in by garnier, 14 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.