FairRoot/PandaRoot
PndEmcCluster.h
Go to the documentation of this file.
1 //----------------------------------------------------------------------
2 // Software developed for the BaBar Detector at the SLAC B-Factory.
3 // Adapted for the PANDA experiment at GSI
4 //
5 // Author List:
6 // Xiaorong Shi Lawrence Livermore National Lab
7 // Steve Playfer University of Edinburgh
8 // Stephen Gowdy University of Edinburgh
9 //
10 //-----------------------------------------------------------------------
11 //#pragma once
12 #ifndef PNDEMCCLUSTER_H
13 #define PNDEMCCLUSTER_H
14 
15 #include "TObject.h"
16 #include "FairTimeStamp.h"
17 #include "TMatrixD.h"
18 #include "TVector3.h"
19 #include <vector>
20 #include <map>
21 
22 class PndEmcDigi;
24 
29 class PndEmcCluster : public FairTimeStamp
30 {
31 
32 public:
33  // Constructors
34  PndEmcCluster();
35  virtual void Print(const Option_t* opt ="") const;
36  // Destructor
37  virtual ~PndEmcCluster();
38 
39  // List of Digi indexes
40  const std::vector<Int_t> &DigiList() const {return fDigiList;};
41  std::vector<Int_t> &DigiList() {return fDigiList;};
42  const std::map<Int_t,Int_t> &LocalMaxMap() const {return fLocalMaxMap;};
43  const std::map<Int_t,Int_t> &MemberDigiMap() const {return fMemberDigiMap;};
44 
45  // Digi with largest energy in cluster
46  virtual const PndEmcDigi* Maxima(const TClonesArray *digiArray) const;
47  virtual PndEmcDigi* Maxima(const TClonesArray *digiArray);
48 
49  // Total Energy of Cluster
50  virtual Double_t energy() const;
51  // Theta centroid of cluster
52  Double_t theta() const;
53  // Phi centroid of cluster
54  Double_t phi() const;
55  // Theta centroid of cluster in index units
56  TVector3 position() const;
57  // Where is cluster?
58  TVector3 where() const;
59  // x co-ordinate of clus
60  Double_t x() const;
61  // y co-ordinate of clus
62  Double_t y() const;
63  // z co-ordinate of clus
64  Double_t z() const;
65  // Cluster moments
66  // Zernike moment (2,0)
67  Double_t Z20() const {return fZ20;}
68  // Zernike moment (5,3)
69  Double_t Z53() const {return fZ53;}
70  // Lateral energy deposition within the cluster
71  Double_t LatMom() const {return fLatMom;}
72 
73  // Get Module in which cluster is located
74  Short_t GetModule() const;
75 
76 
77  bool IsEnergyValid() const {return fEnergyValid;};
78  bool IsPositionValid() const {return fWhereValid;};
79 
80  Int_t NumberOfDigis() const;
81  Int_t NBumps() const;
82 
83  bool isInCluster(PndEmcDigi* theDigi, const TClonesArray *digiArray);
84 
85  // Distance from centre of cluster to a point
86  virtual Double_t DistanceToCentre( const TVector3& aPoint ) const;
87  virtual Double_t DistanceToCentre( const PndEmcDigi* aDigi ) const;
88  // Returns the difference between the two phi angles, defined as the
89  // first minus the second, but deals with the overlap at 2 pi.
91 
92  // Modifiers
93  virtual void addDigi(const TClonesArray *digiArray, Int_t iDigi);
94  virtual void removeDigi(const TClonesArray *digiArray, Int_t iDigi);
95  virtual std::vector<Int_t>::iterator removeDigi(const TClonesArray *digiArray, std::vector<Int_t>::iterator it);
96  void addCluster( PndEmcCluster* cluster, const TClonesArray *digiArray);
97  virtual void addLocalMax( const TClonesArray *digiArray, Int_t iDigi);
98  virtual void addLocalMax( const PndEmcDigi *digi);
99  virtual void SetNBumps( unsigned nbumps);
101  void SetPosition(TVector3 pos){fWhere=pos; fWhereValid=true;}
102  void SetZ20(Double_t z20){fZ20=z20;}
103  void SetZ53(Double_t z53){fZ53=z53;}
104  void SetLatMom(Double_t latMom){fLatMom=latMom;}
105  void SetTrackEntering(const FairMultiLinkedData& tracks){fTrackEntering = tracks;}
106  void SetTrackExiting(const FairMultiLinkedData& tracks){fTrackExiting = tracks;}
107 
108 
109  void AddTracksEnteringExiting(const FairMultiLinkedData& tracksEntering, const FairMultiLinkedData& tracksExiting);
110 
111 
113 
114  const std::vector<Int_t> &GetMcList() const;
115  Int_t GetMcSize() { return fMcList.size(); }
116  Int_t GetMcIndex(Int_t i = 0) { return fMcList[i]; }
117  FairMultiLinkedData GetTrackEntering() const { return fTrackEntering;}
118  FairMultiLinkedData GetTrackExiting() const { return fTrackExiting;}
119 
120 
121 private:
122  friend class PndEmcMakeCluster;
123  void invalidateCache(bool );
124 
125 protected:
127  public:
128  Short_t score;
129 
130  void SetValShift(Bool_t val, Int_t shift){
131  if (shift < 4)
132  score |= val << shift;
133  }
134 
135  Bool_t GetValShift(Int_t shift){ return score >> shift & 0x1;}
136  };
137 
138  void FillScoreBoard(FairMultiLinkedData tracks, std::map<FairLink, LinkScoreBoard>& scoreBoard, Int_t shift);
139 
140  std::vector<Int_t> fDigiList;
141  mutable std::vector<Int_t> fMcList;
142  mutable std::map<Int_t, Int_t> fMcMap;//<track, count>
143  std::map<Int_t,Int_t> fMemberDigiMap; // Map <detId,digiIndex>
144  std::map<Int_t,Int_t> fLocalMaxMap; // Map<detId, digiIndex> for the maxima
145 
149  TVector3 fWhere;
150  unsigned fNbumps;
151  Double_t fZ20; // Zernike moment (2,0)
152  Double_t fZ53; // Zernike moment (5,3)
153  Double_t fLatMom; // Lateral energy deposition within the cluster
154 
155  FairMultiLinkedData fTrackEntering;
156  FairMultiLinkedData fTrackExiting;
157 
158  ClassDef(PndEmcCluster,3)
159 };
160 
161 #endif // EMCCLUSTER_HH
virtual void Print(const Option_t *opt="") const
TVector3 pos
void SetEnergy(Double_t en)
Double_t fEnergy
Bool_t GetValShift(Int_t shift)
TClonesArray * digi
bool isInCluster(PndEmcDigi *theDigi, const TClonesArray *digiArray)
TVector3 where() const
represents the reconstructed hit of one emc crystal
Definition: PndEmcDigi.h:40
Int_t i
Definition: run_full.C:25
Short_t GetModule() const
std::map< Int_t, Int_t > fMcMap
TVector3 fWhere
Double_t val[nBoxes][nFEBox]
Definition: createCalib.C:11
Double_t fLatMom
virtual ~PndEmcCluster()
void SetTrackExiting(const FairMultiLinkedData &tracks)
bool IsEnergyValid() const
Definition: PndEmcCluster.h:77
virtual void SetNBumps(unsigned nbumps)
const std::vector< Int_t > & DigiList() const
Definition: PndEmcCluster.h:40
stores crystal index coordinates (x,y) or (theta,phi)
Int_t GetMcIndex(Int_t i=0)
void AddTracksEnteringExiting(const FairMultiLinkedData &tracksEntering, const FairMultiLinkedData &tracksExiting)
Updates the links to entering and exiting tracks.
const std::vector< Int_t > & GetMcList() const
void addCluster(PndEmcCluster *cluster, const TClonesArray *digiArray)
TVector3 position() const
Double_t z() const
FairMultiLinkedData GetTrackExiting() const
FairMultiLinkedData fTrackExiting
Double_t Z53() const
Definition: PndEmcCluster.h:69
virtual const PndEmcDigi * Maxima(const TClonesArray *digiArray) const
Double_t Z20() const
Definition: PndEmcCluster.h:67
Double_t
std::vector< Int_t > fMcList
const std::map< Int_t, Int_t > & LocalMaxMap() const
Definition: PndEmcCluster.h:42
FairMultiLinkedData fTrackEntering
virtual Double_t DistanceToCentre(const TVector3 &aPoint) const
Double_t LatMom() const
Definition: PndEmcCluster.h:71
Int_t GetMcSize()
Double_t x() const
virtual void removeDigi(const TClonesArray *digiArray, Int_t iDigi)
a cluster (group of neighboring crystals) of hit emc crystals
Definition: PndEmcCluster.h:29
std::map< Int_t, Int_t > fMemberDigiMap
const std::map< Int_t, Int_t > & MemberDigiMap() const
Definition: PndEmcCluster.h:43
Task to cluster PndEmcDigis.
void SetZ20(Double_t z20)
Int_t NumberOfDigis() const
void SetZ53(Double_t z53)
Int_t NBumps() const
void invalidateCache(bool)
void SetValShift(Bool_t val, Int_t shift)
Double_t GetEnergyCorrected() const
bool IsPositionValid() const
Definition: PndEmcCluster.h:78
virtual Double_t energy() const
void SetPosition(TVector3 pos)
std::vector< Int_t > fDigiList
void SetTrackEntering(const FairMultiLinkedData &tracks)
Double_t theta() const
virtual void addLocalMax(const TClonesArray *digiArray, Int_t iDigi)
Double_t phi() const
std::map< Int_t, Int_t > fLocalMaxMap
void SetLatMom(Double_t latMom)
Double_t y() const
std::vector< Int_t > & DigiList()
Definition: PndEmcCluster.h:41
FairMultiLinkedData GetTrackEntering() const
static Double_t FindPhiDiff(Double_t, Double_t)
virtual void addDigi(const TClonesArray *digiArray, Int_t iDigi)
unsigned fNbumps
void FillScoreBoard(FairMultiLinkedData tracks, std::map< FairLink, LinkScoreBoard > &scoreBoard, Int_t shift)