FairRoot/PandaRoot
PndGemDigi.h
Go to the documentation of this file.
1 //* $Id: */
2 
3 // -------------------------------------------------------------------------
4 // ----- PndGemDigi header file -----
5 // ----- Adapted in 2010 by R. Karabowicz -----
6 // -------------------------------------------------------------------------
7 
8 
21 #ifndef PNDGEMDIGI_H
22 #define PNDGEMDIGI_H 1
23 
24 #include <vector>
25 
26 #include "FairTimeStamp.h"
27 
28 #include "PndDetectorList.h"
29 
30 #include "TObject.h"
31 
32 class PndGemDigi : public FairTimeStamp
33 {
35  out << "PndGemDigi in: " << digi.GetDetectorId()
36  << "( system = " << digi.GetSystemId()
37  << ", station = " << digi.GetStationNr()
38  << ", sensor = " << digi.GetSensorNr()
39  << ", side = " << digi.GetSide()
40  << "), channelNr = " << digi.GetChannelNr()
41  << ", charge = " << digi.GetCharge()
42  << ", cor = " << digi.GetCor()
43  << ", timestamp "<< digi.GetTimeStamp()
44  << ", from Point(s) ";
45  std::vector<Int_t>indices = digi.GetIndices();
46  for (unsigned int i = 0; i < indices.size(); i++){
47  out << indices[i] << " ";
48  }
49  out << std::endl;
50 
51  return out;
52  }
53 
54  public:
55 
57  PndGemDigi();
58 
59 
67  PndGemDigi(Int_t iDetectorId, Double_t iChannel, Int_t index);
68  PndGemDigi(Int_t iDetectorId, Double_t iChannel, Int_t index, Double_t signal, Double_t time);
69 
71  virtual ~PndGemDigi();
72 
73  void SetCharge(Double_t iCharge) { fDigiCharge = iCharge; }
74  void SetCor(Double_t iCor) { fDigiCor = iCor; }
75 
76  void AddCharge(Double_t iCharge) { fDigiCharge+= iCharge; }
77 
79  Int_t GetDetectorId() const { return fDetectorId; }
80  Double_t GetChannelNr() const { return fChannelNr; }
81 
82  Int_t GetSystemId() const {
83  return ( ( fDetectorId & ( 31<<27) ) >> 27); }
84  Int_t GetStationNr() const {
85  return ( ( fDetectorId & (8191<< 8) ) >> 8 ); }
86  Int_t GetSensorNr() const { // sensor number within station
87  return ( ( fDetectorId & ( 3<< 6) ) >> 6 ); }
88  Int_t GetSide() const {
89  return ( ( fDetectorId & ( 1<< 5) ) >> 5 ); } // 0=front, 1=back
90 
91  Double_t GetCharge() const { return fDigiCharge; }
92  Double_t GetCor() const { return fDigiCor; }
93 
94  std::vector<Int_t> GetIndices() const {
95  std::vector<Int_t> result;
96  std::set<FairLink> myLinks = GetLinks();
97  for (std::set<FairLink>::iterator it = myLinks.begin(); it != myLinks.end(); it++){
98  result.push_back(it->GetIndex());
99  }
100  return result;
101  }
102  Int_t GetNIndices() {return GetNLinks();}
103  Int_t GetIndex(int i = 0) const{ return GetLink(i).GetIndex();}
104 
105  void AddIndex(int index){
106  AddLink(FairLink("GEMPoint", index));
107  }
108  void AddIndex(std::vector<Int_t> index){
109  SetLinks(FairMultiLinkedData("GEMPoint", index));
110  }
111 
112  virtual bool equal(FairTimeStamp* data) {
113  PndGemDigi* myDigi = dynamic_cast <PndGemDigi*> (data);
114  if (myDigi != 0){
115  if (fDetectorId == myDigi->GetDetectorId() )
116  return kTRUE;
117  }
118  return false;
119  }
120 
121  virtual bool operator<(const PndGemDigi& myDigi) const{
122  if (fDetectorId < myDigi.GetDetectorId()) return true; else if (fDetectorId > myDigi.GetDetectorId()) return false;
123  if (fChannelNr < myDigi.GetChannelNr ()) return true; else if (fChannelNr > myDigi.GetChannelNr ()) return false;
124  return false;
125  }
126 
127  virtual bool operator>(const PndGemDigi& myDigi) const{
128  if (fDetectorId > myDigi.GetDetectorId()) return true; else if (fDetectorId < myDigi.GetDetectorId()) return false;
129  if (fChannelNr > myDigi.GetChannelNr ()) return true; else if (fChannelNr < myDigi.GetChannelNr ()) return false;
130  return false;
131  }
132 
133  virtual bool operator==(const PndGemDigi& myDigi) const{
134  if (fDetectorId == myDigi.GetDetectorId())
135  if (fChannelNr == myDigi.GetChannelNr ())
136  return true;
137  return false;
138  }
139 
140  private:
141 
142  Int_t fDetectorId; // detectorId * 256 + stationId * 16 + sensorId
143  Double_t fChannelNr; // channel number
144 
145  Double_t fDigiCharge; // charge in the digi
146  Double_t fDigiCor; // correlation between digis
147 
148  ClassDef(PndGemDigi,2);
149 
150 };
151 
152 #endif
TClonesArray * digi
friend std::ostream & operator<<(std::ostream &out, PndGemDigi &digi)
Definition: PndGemDigi.h:34
virtual bool operator<(const PndGemDigi &myDigi) const
Definition: PndGemDigi.h:121
Int_t i
Definition: run_full.C:25
Int_t fDetectorId
Definition: PndGemDigi.h:142
Int_t GetStationNr() const
Definition: PndGemDigi.h:84
virtual ~PndGemDigi()
Definition: PndGemDigi.cxx:49
Double_t fDigiCor
Definition: PndGemDigi.h:146
Int_t GetDetectorId() const
Definition: PndGemDigi.h:79
Double_t fChannelNr
Definition: PndGemDigi.h:143
Int_t GetNIndices()
Definition: PndGemDigi.h:102
void SetCharge(Double_t iCharge)
Definition: PndGemDigi.h:73
Int_t GetSensorNr() const
Definition: PndGemDigi.h:86
void AddCharge(Double_t iCharge)
Definition: PndGemDigi.h:76
virtual bool operator==(const PndGemDigi &myDigi) const
Definition: PndGemDigi.h:133
Double_t
void AddIndex(int index)
Definition: PndGemDigi.h:105
Double_t GetChannelNr() const
Definition: PndGemDigi.h:80
void SetCor(Double_t iCor)
Definition: PndGemDigi.h:74
TFile * out
Definition: reco_muo.C:20
ClassDef(PndGemDigi, 2)
virtual bool operator>(const PndGemDigi &myDigi) const
Definition: PndGemDigi.h:127
Double_t fDigiCharge
Definition: PndGemDigi.h:145
std::vector< Int_t > GetIndices() const
Definition: PndGemDigi.h:94
virtual bool equal(FairTimeStamp *data)
Definition: PndGemDigi.h:112
Int_t GetIndex(int i=0) const
Definition: PndGemDigi.h:103
Double_t GetCharge() const
Definition: PndGemDigi.h:91
void AddIndex(std::vector< Int_t > index)
Definition: PndGemDigi.h:108
Double_t GetCor() const
Definition: PndGemDigi.h:92
Int_t GetSide() const
Definition: PndGemDigi.h:88
Int_t GetSystemId() const
Definition: PndGemDigi.h:82