BmnRoot
Loading...
Searching...
No Matches
BmnDch.h
Go to the documentation of this file.
1// -------------------------------------------------------------------------
2// ----- BmnDch header file -----
3// -------------------------------------------------------------------------
4
11#ifndef BMNDCH_H
12#define BMNDCH_H
13
14#include "BmnDchPoint.h"
15#include "FairDetector.h"
16#include "TClonesArray.h"
17#include "TGeoMedium.h"
18#include "TLorentzVector.h"
19#include "TString.h"
20#include "TVector3.h"
21
22#include <map>
23
24class BmnDch : public FairDetector
25{
26 public:
27 // *@param name detector name
28 // *@param active sensitivity flag
29 BmnDch(const char* name, Bool_t active);
30
32 virtual ~BmnDch();
33
34 // Defines the action to be taken when a step is inside the
35 // active volume. Creates BmnDchPoints and adds them to the collection.
36 // @param vol Pointer to the active volume
37 virtual Bool_t ProcessHits(FairVolume* vol = 0);
38
39 // If verbosity level is set, print hit collection at the
40 // end of the event and resets it afterwards.
41 virtual void EndOfEvent();
42
43 // Registers the hit collection in the ROOT manager.
44 virtual void Register();
45
46 // Accessor to the hit collection
47 virtual TClonesArray* GetCollection(Int_t iColl) const;
48
49 // Screen output of hit collection.
50 virtual void Print(Option_t*) const;
51
52 // Clears the hit collection
53 virtual void Reset();
54
55 // *@param cl1 Origin
56 // *@param cl2 Target
57 // *@param offset Index offset
58 virtual void CopyClones(TClonesArray* cl1, TClonesArray* cl2, Int_t offset);
59
60 // Constructs the DCH geometry
61 virtual void ConstructGeometry();
62 // Construct the geometry from an ASCII geometry file
63 virtual void ConstructAsciiGeometry();
64 // Construct the geometry from a GDML geometry file
65 virtual void ConstructGDMLGeometry(TGeoMatrix*);
66 void ExpandNodeForGdml(TGeoNode* node);
67 map<TString, TGeoMedium*> fFixedMedia; // List of media "repaired" after importing GMDL
68
69 // Check whether a volume is sensitive.
70 // The decision is based on the volume name. Only used in case
71 // of GDML and ROOT geometry.
72 // @param name Volume name
73 // @value kTRUE if volume is sensitive, else kFALSE
74 virtual Bool_t CheckIfSensitive(std::string name);
75
76 // static Int_t GetWheel(Int_t uid){ return ((uid-1) >>3); }; //lsp [0-1] == [inner,outer]
77 // static Int_t GetProj(Int_t uid){ return ((uid-1) & 6)>>1; }; //lsp [0-3] == [x,y,u,v]
78 // static Int_t GetGasGap(Int_t uid){ return ((uid-1) & 0x0001); }; //lsp [0-1] == [inner,outer]
79
80 private:
81 // Track information to be stored until the track leaves the active volume.
82 Int_t fTrackID;
83 Int_t fVolumeID;
84 Int_t fPlaneNumber;
85 TVector3 fPos;
86 TVector3 fPosLocal;
87 TLorentzVector fMom;
88 Double32_t fTime;
89 Double32_t fLength;
90 Double32_t fELoss;
91 Int_t fIsPrimary;
92 Double_t fCharge;
93 Double_t fRadius;
94 Int_t fPdgId;
95 Int_t fwheel;
96 TVector3 fPosIn;
97 TVector3 fPosOut;
98
99 TVector3 fPosInTmp;
100 Int_t fTrackIDTmp;
101 Int_t fwheelTmp;
102
103 Int_t fPosIndex;
104 TClonesArray* fPointCollection;
105
106 int DistAndPoints(TVector3 p3, TVector3 p4, TVector3& pa, TVector3& pb);
107 TVector3 GlobalToLocal(TVector3& global);
108 TVector3 LocalToGlobal(TVector3& local);
109
110 // Adds a BmnDchPoint to the HitCollection
111 BmnDchPoint* AddHit(Int_t trackID,
112 Int_t detID,
113 TVector3 pos,
114 Double_t radius,
115 TVector3 mom,
116 Double_t time,
117 Double_t length,
118 Double_t eLoss,
119 Int_t isPrimary,
120 Double_t charge,
121 Int_t fPdgId,
122 TVector3 trackPos);
123
124 // Resets the private members for the track parameters
125 void ResetParameters();
126 BmnDch(const BmnDch&) = delete;
127 BmnDch operator=(const BmnDch&) = delete;
128
129 ClassDef(BmnDch, 1)
130};
131
132//------------------------------------------------------------------------------------------------------------------------
133inline void BmnDch::ResetParameters()
134{
135 fTrackID = -1;
136 fVolumeID = fwheel = 0;
137 fPos.SetXYZ(0.0, 0.0, 0.0);
138 fMom.SetXYZM(0.0, 0.0, 0.0, 0.0);
139 fTime = fLength = fELoss = 0;
140 fPosIndex = 0;
141
142 fPosInTmp.SetXYZ(0.0, 0.0, 0.0);
143 fTrackIDTmp = -1;
144 fwheelTmp = -1;
145};
146
147#endif
virtual Bool_t ProcessHits(FairVolume *vol=0)
virtual void ConstructGeometry()
virtual void ConstructAsciiGeometry()
virtual void Print(Option_t *) const
virtual void Register()
virtual void CopyClones(TClonesArray *cl1, TClonesArray *cl2, Int_t offset)
virtual ~BmnDch()
virtual void Reset()
BmnDch(const char *name, Bool_t active)
virtual TClonesArray * GetCollection(Int_t iColl) const
virtual Bool_t CheckIfSensitive(std::string name)
void ExpandNodeForGdml(TGeoNode *node)
virtual void ConstructGDMLGeometry(TGeoMatrix *)
virtual void EndOfEvent()
map< TString, TGeoMedium * > fFixedMedia
Definition BmnDch.h:67