CMS 3D CMS Logo

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
CaloSD.h
Go to the documentation of this file.
1 #ifndef SimG4CMS_CaloSD_h
2 #define SimG4CMS_CaloSD_h
3 // File: CaloSD.h
5 // Description: Stores hits of calorimetric type in appropriate container
6 // Use in your sensitive detector builder:
7 // CaloSD* caloSD = new CaloSD(SDname, new CaloNumberingScheme());
9 
22 
24 
25 // To be replaced by something else
26 /* #include "Utilities/Notification/interface/TimerProxy.h" */
27 
28 #include "G4VPhysicalVolume.hh"
29 #include "G4Track.hh"
30 #include "G4VGFlashSensitiveDetector.hh"
31 
32 #include <iostream>
33 #include <fstream>
34 #include <vector>
35 #include <map>
36 
37 class G4Step;
38 class G4HCofThisEvent;
39 class CaloSlaveSD;
40 class G4GFlashSpot;
41 
42 class CaloSD : public SensitiveCaloDetector,
43  public G4VGFlashSensitiveDetector,
44  public Observer<const BeginOfRun *>,
45  public Observer<const BeginOfEvent *>,
46  public Observer<const BeginOfTrack *>,
47  public Observer<const EndOfTrack *>,
48  public Observer<const EndOfEvent *> {
49 
50 public:
51 
52  CaloSD(G4String aSDname, const DDCompactView & cpv,
54  edm::ParameterSet const & p, const SimTrackManager*,
55  int tSlice=1, bool ignoreTkID=false);
56  virtual ~CaloSD();
57  virtual bool ProcessHits(G4Step * step,G4TouchableHistory * tHistory);
58  virtual bool ProcessHits(G4GFlashSpot*aSpot,G4TouchableHistory*);
59  virtual double getEnergyDeposit(G4Step* step);
60  virtual uint32_t setDetUnitId(G4Step* step)=0;
61 
62  virtual void Initialize(G4HCofThisEvent * HCE);
63  virtual void EndOfEvent(G4HCofThisEvent * eventHC);
64  virtual void clear();
65  virtual void DrawAll();
66  virtual void PrintAll();
67 
68  void fillHits(edm::PCaloHitContainer&,std::string n);
69 
70 protected:
71 
72  virtual G4bool getStepInfo(G4Step* aStep);
73  G4ThreeVector setToLocal(G4ThreeVector, const G4VTouchable*);
74  G4bool hitExists();
75  G4bool checkHit();
77  void updateHit(CaloG4Hit*);
78  void resetForNewPrimary(G4ThreeVector, double);
79  double getAttenuation(G4Step* aStep, double birk1, double birk2,
80  double birk3);
81 
82  virtual void update(const BeginOfRun *);
83  virtual void update(const BeginOfEvent *);
84  virtual void update(const BeginOfTrack * trk);
85  virtual void update(const EndOfTrack * trk);
86  virtual void update(const ::EndOfEvent *);
87  virtual void clearHits();
88  virtual void initRun();
89  virtual bool filterHit(CaloG4Hit*, double);
90 
91  virtual int getTrackID(G4Track*);
92  virtual uint16_t getDepth(G4Step*);
93  double getResponseWt(G4Track*);
94 
95 private:
96 
97  void storeHit(CaloG4Hit*);
98  bool saveHit(CaloG4Hit*);
99  void summarize();
100  void cleanHitCollection();
101 
102 protected:
103 
104  // Data relative to primary particle (the one which triggers a shower)
105  // These data are common to all Hits of a given shower.
106  // One shower is made of several hits which differ by the
107  // unit ID (crystal/fibre/scintillator) and the Time slice ID.
108 
109  G4ThreeVector entrancePoint;
110  G4ThreeVector entranceLocal;
111  G4ThreeVector posGlobal;
113  int primIDSaved; // ID of the last saved primary
114 
116  G4Track* theTrack;
117 
118  G4StepPoint* preStepPoint;
120 
123  bool useMap;
124 
127 // TimerProxy theHitTimer;
128  bool runInit;
129 
131  double correctT;
133 
135  bool forceSave;
136 
137 private:
138 
142  int hcID;
144  std::map<CaloHitID,CaloG4Hit*> hitMap;
145 
146  std::map<int,TrackWithHistory*> tkMap;
148 
151  std::vector<CaloG4Hit*> reusehit;
152  std::vector<CaloG4Hit*> hitvec;
153  std::vector<unsigned int> selIndex;
155 
156 };
157 
158 #endif // SimG4CMS_CaloSD_h
G4ThreeVector setToLocal(G4ThreeVector, const G4VTouchable *)
Definition: CaloSD.cc:310
float edepositEM
Definition: CaloSD.h:119
double energyCut
Definition: CaloSD.h:121
int timeSlice
Definition: CaloSD.h:139
virtual uint32_t setDetUnitId(G4Step *step)=0
G4int emPDG
Definition: CaloSD.h:134
std::vector< PCaloHit > PCaloHitContainer
double kmaxNeutron
Definition: CaloSD.h:132
void updateHit(CaloG4Hit *)
Definition: CaloSD.cc:453
virtual void Initialize(G4HCofThisEvent *HCE)
Definition: CaloSD.cc:221
bool corrTOFBeam
Definition: CaloSD.h:130
Definition: CaloSD.h:42
int totalHits
Definition: CaloSD.h:154
virtual void EndOfEvent(G4HCofThisEvent *eventHC)
Definition: CaloSD.cc:238
bool useMap
Definition: CaloSD.h:123
virtual int getTrackID(G4Track *)
Definition: CaloSD.cc:596
int hcID
Definition: CaloSD.h:142
double eminHitD
Definition: CaloSD.h:121
G4ThreeVector posGlobal
Definition: CaloSD.h:111
int primIDSaved
Definition: CaloSD.h:113
int primAncestor
Definition: CaloSD.h:149
void fillHits(edm::PCaloHitContainer &, std::string n)
Definition: CaloSD.cc:262
type of data representation of DDCompactView
Definition: DDCompactView.h:81
double kmaxProton
Definition: CaloSD.h:132
double eminHit
Definition: CaloSD.h:121
std::vector< CaloG4Hit * > reusehit
Definition: CaloSD.h:151
G4bool checkHit()
Definition: CaloSD.cc:343
void cleanHitCollection()
Definition: CaloSD.cc:718
CaloSD(G4String aSDname, const DDCompactView &cpv, SensitiveDetectorCatalog &clg, edm::ParameterSet const &p, const SimTrackManager *, int tSlice=1, bool ignoreTkID=false)
Definition: CaloSD.cc:21
bool forceSave
Definition: CaloSD.h:135
virtual void clearHits()
Definition: CaloSD.cc:576
virtual void DrawAll()
Definition: CaloSD.cc:253
virtual void clear()
Definition: CaloSD.cc:251
double kmaxIon
Definition: CaloSD.h:132
bool suppressHeavy
Definition: CaloSD.h:130
float edepositHAD
Definition: CaloSD.h:119
G4int epPDG
Definition: CaloSD.h:134
CaloSlaveSD * slave
Definition: CaloSD.h:141
G4int gammaPDG
Definition: CaloSD.h:134
virtual void update(const BeginOfRun *)
This routine will be called when the appropriate signal arrives.
Definition: CaloSD.cc:504
std::vector< CaloG4Hit * > hitvec
Definition: CaloSD.h:152
CaloHitID previousID
Definition: CaloSD.h:115
virtual void PrintAll()
Definition: CaloSD.cc:255
double getAttenuation(G4Step *aStep, double birk1, double birk2, double birk3)
Definition: CaloSD.cc:480
CaloG4Hit * currentHit
Definition: CaloSD.h:126
std::vector< unsigned int > selIndex
Definition: CaloSD.h:153
CaloMeanResponse * meanResponse
Definition: CaloSD.h:147
void storeHit(CaloG4Hit *)
Definition: CaloSD.cc:640
virtual bool filterHit(CaloG4Hit *, double)
Definition: CaloSD.cc:620
G4Track * theTrack
Definition: CaloSD.h:116
virtual G4bool getStepInfo(G4Step *aStep)
Definition: CaloSD.cc:267
double tmaxHit
Definition: CaloSD.h:121
G4StepPoint * preStepPoint
Definition: CaloSD.h:118
virtual bool ProcessHits(G4Step *step, G4TouchableHistory *tHistory)
Definition: CaloSD.cc:130
void summarize()
Definition: CaloSD.cc:690
CaloHitID currentID
Definition: CaloSD.h:115
virtual void initRun()
Definition: CaloSD.cc:594
double correctT
Definition: CaloSD.h:131
bool runInit
Definition: CaloSD.h:128
std::map< CaloHitID, CaloG4Hit * > hitMap
Definition: CaloSD.h:144
virtual ~CaloSD()
Definition: CaloSD.cc:124
CaloG4HitCollection * theHC
Definition: CaloSD.h:143
float incidentEnergy
Definition: CaloSD.h:112
double getResponseWt(G4Track *)
Definition: CaloSD.cc:629
G4THitsCollection< CaloG4Hit > CaloG4HitCollection
int checkHits
Definition: CaloSD.h:122
G4bool hitExists()
Definition: CaloSD.cc:319
std::map< int, TrackWithHistory * > tkMap
Definition: CaloSD.h:146
void resetForNewPrimary(G4ThreeVector, double)
Definition: CaloSD.cc:468
const SimTrackManager * m_trackManager
Definition: CaloSD.h:125
bool saveHit(CaloG4Hit *)
Definition: CaloSD.cc:653
CaloG4Hit * createNewHit()
Definition: CaloSD.cc:375
virtual uint16_t getDepth(G4Step *)
Definition: CaloSD.cc:618
G4ThreeVector entrancePoint
Definition: CaloSD.h:109
G4ThreeVector entranceLocal
Definition: CaloSD.h:110
int cleanIndex
Definition: CaloSD.h:150
virtual double getEnergyDeposit(G4Step *step)
Definition: CaloSD.cc:217
bool ignoreTrackID
Definition: CaloSD.h:140