source: trunk/examples/advanced/composite_calorimeter/include/CCaloSD.hh @ 1319

Last change on this file since 1319 was 807, checked in by garnier, 16 years ago

update

File size: 4.3 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// File: CCaloSD.hh
28// Description: Stores hits of calorimetric type in appropriate container
29//
30// Use in your geometry routine:
31//    CCaloSD* caloSD = new CCaloSD(SDname, new CalorimeterOrganization);
32//    G4SDManager::GetSDMpointer()->AddNewDetector(caloSD);
33//  and then for every Logical Volume to be declared as sensitive
34//    logVolume->SetSensitiveDetector(caloSD);
35//
36///////////////////////////////////////////////////////////////////////////////
37
38#ifndef CCaloSD_h
39#define CCaloSD_h 1
40
41#include "CCalG4HitCollection.hh"
42#include "CCalG4Hit.hh"
43
44#include "G4VPhysicalVolume.hh"
45#include "G4LogicalVolume.hh"
46#include "G4Track.hh"
47#include "G4ParticleDefinition.hh"
48#include "G4Step.hh"
49#include "G4TransportationManager.hh"
50#include "G4VSensitiveDetector.hh"
51
52#include <iostream>
53#include <fstream>
54
55class CCalVOrganization;
56
57//#define debug
58 
59class CCaloSD : public G4VSensitiveDetector {
60
61public:
62  CCaloSD(G4String aSDname, CCalVOrganization* numberingScheme);
63  virtual ~CCaloSD();
64
65  void Initialize(G4HCofThisEvent*HCE);
66  G4bool ProcessHits(G4Step*aStep,G4TouchableHistory*ROhist);
67  void EndOfEvent(G4HCofThisEvent*HCE);
68  void clear();
69  void DrawAll();
70  void PrintAll();
71
72public:
73 
74  void SetPrimaryID(int i) {PrimaryID = i;
75#ifdef debug
76  G4cout << "CCaloSD SetPrimaryID primID =" << i << G4endl;
77#endif
78  }
79  int  GetPrimaryID( )     {return PrimaryID;}
80  void SetOrganization(CCalVOrganization* org);
81
82private:
83 
84  // Data relative to primary particle (the one which triggers a shower)
85  // These data are common to all Hits of a given shower.
86  // One shower is made of several hits which differ by the
87  // unit ID (cristal/fiber/scintillator) and the Time slice ID.
88
89  G4ThreeVector EntrancePoint;
90  float IncidentEnergy;
91  G4int PrimID  ; //@@ ID of the primary particle.
92
93
94private:
95  G4int                HCID;
96  G4String             SDname;
97  CCalG4HitCollection* theHC; 
98
99  G4int              TSID; 
100  CCalG4Hit*         CurrentHit;
101  G4Track*           theTrack;
102  G4VPhysicalVolume* CurrentPV;
103  G4VPhysicalVolume* PreviousPV;
104  unsigned int       UnitID, PreviousUnitID;
105  G4int              PrimaryID, TSliceID; 
106  G4double           TSlice;
107
108  G4StepPoint*   PreStepPoint  ; 
109  G4StepPoint*   PostStepPoint ; 
110  float          EdepositEM, EdepositEHAD     ;
111  G4ThreeVector  HitPoint      ;         
112 
113private:
114
115  G4ThreeVector SetToLocal(G4ThreeVector globalPoint);
116  void getStepInfo(G4Step* aStep);
117  G4bool hitExists();
118  void createNewHit();
119  void updateHit();
120  void StoreHit(CCalG4Hit* ahit);
121  void ResetForNewPrimary();
122  void summarize();
123  G4double curve_LY(G4StepPoint* stepPoint);
124     
125private:
126  CCalVOrganization* theDescription;
127
128};
129
130
131#endif
132
Note: See TracBrowser for help on using the repository browser.