FEDRA emulsion software from the OPERA Collaboration
EdbCluster.h
Go to the documentation of this file.
1 #ifndef ROOT_EdbCluster
2 #define ROOT_EdbCluster
3 
5 // //
6 // EdbCluster //
7 // //
8 // cluster (spot of pixels) //
9 // //
11 
12 #include "TClonesArray.h"
13 
14 #ifndef ROOT_EdbVirtual
15 #include "EdbVirtual.h"
16 #endif
17 
18 //______________________________________________________________________________
19 class EdbCluster : public TObject, public EdbPoint3D {
20 
21 public:
22 
23  Float_t eX; // cluster coordinates in pixels(?)
24  Float_t eY; //
25  Float_t eZ; //
26  Float_t eArea; // Cluster area: number of pixels
27  Float_t eVolume; // Cluster volume - in case of greyscale pixels
28  Int_t eFrame; // frame index
29  Int_t eSide; // emulsion side index
30  Int_t eSegment; // segment id to be attached (-1 if no segment)
31 
32 public:
33  EdbCluster() { }
34  EdbCluster( float x, float y, float z,
35  float a, float v, int f, int s, int seg=-1 ) :
36  eX(x), eY(y), eZ(z),
37  eArea(a),eVolume(v), eFrame(f), eSide(s), eSegment(seg) {}
38  virtual ~EdbCluster() { }
39 
40  void Print( Option_t *opt=0 ) const;
41 
42  void Set0();
43  void Set(float x, float y, float z, float a, float v, int f, int s, int seg=-1)
44  {eX=x; eY=y; eZ=z; eArea=a; eVolume=v; eFrame=f; eSide=s; eSegment=seg;}
45  void SetArea(float a) { eArea=a;}
46  void SetVolume(float v) { eVolume=v;}
47  void SetFrame(int f) { eFrame=f;}
48  void SetSide(int s) { eSide=s;}
49  void SetSegment(int seg) { eSegment=seg;}
50 
51  Float_t GetX() const { return eX ;}
52  Float_t GetY() const { return eY ;}
53  Float_t GetZ() const { return eZ ;}
54  Float_t GetArea() const { return eArea ;}
55  Float_t GetVolume() const { return eVolume ;}
56  Int_t GetFrame() const { return eFrame ;}
57  Int_t GetSide() const { return eSide ;}
58  Int_t GetSegment() const { return eSegment;}
59 
60  void AddPixelSum( int x, int y, unsigned char pix )
61  {
62  //to speedup the calculation; use Normalize() at the end!
63  eArea++;
64  eVolume += pix ;
65  eX += x;
66  eY += y;
67  }
68 
69  void Normalize()
70  {
71  // assumed to be used only once at the end!
72  eX = eX/eArea - 0.5;
73  eY = eY/eArea - 0.5;
74  }
75 
76  //mandatory virtual functions
77 
78  virtual Float_t X() const { return eX; }
79  virtual Float_t Y() const { return eY; }
80  virtual Float_t Z() const { return eZ; }
81  virtual void SetX( float x ) { eX=x; }
82  virtual void SetY( float y ) { eY=y; }
83  virtual void SetZ( float z ) { eZ=z; }
84 
85  //other functions
86  void Draw(Option_t *opt="") const;
87 
88  void TT() const { Test(); }
89 
90  Bool_t IsSortable() const { return kTRUE; }
91  Bool_t IsEqual(const TObject *obj) const
92  {
93  const EdbCluster *c=(EdbCluster*)obj;
94  if(c->eFrame != eFrame) return false;
95  if(c->eX != eX) return false;
96  if(c->eY != eY) return false;
97  return true;
98  }
99 
100  Int_t Compare(const TObject *obj) const
101  {
102  const EdbCluster *c=(EdbCluster*)obj;
103  Long_t f1=0, f2=0;
104  f1 = eFrame*1000000+int(eX)*10000+int(eY);
105  f2 = c->eFrame*1000000+int(c->eX)*10000+int(c->eY);
106  if (f1>f2)
107  return 1;
108  else if (f1<f2)
109  return -1;
110  else
111  return 0;
112  }
113 
114  ClassDef(EdbCluster,2) // single cluster
115 };
116 
117 //______________________________________________________________________________
118 class EdbClustersBox : public TObject, public EdbPointsBox3D {
119 
120  private:
121 
122  TClonesArray *eClusters; // collection of clusters
123 
124  public:
125  EdbClustersBox();
126  EdbClustersBox( int n );
127  virtual ~EdbClustersBox();
128 
129  //members access functions
130  void AddCluster( EdbCluster *c );
131  void AddCluster( float x, float y, float z,
132  float a, float v, int f, int s, int seg );
133 
134  Int_t GetN() const;
135  EdbCluster *GetCluster(int i) const;
136  TClonesArray *GetClusters() const { return eClusters; }
137 
138  // mandatory virtual functions:
139  Int_t N() const { return GetN(); }
140  EdbPoint *At(int i) { return (EdbPoint*)GetCluster(i); }
141 
142  // void Draw(int style=23, int col=4, float size=1. ){}
143 
144  // other finctions
145  // void Print( Option_t *opt="") const;
146 
147  ClassDef(EdbClustersBox,2) // collection of clusters
148 };
149 
150 
151 #endif /* ROOT_EdbCluster */
152 
FILE * f
Definition: RecDispMC.C:150
void a()
Definition: check_aligned.C:59
Definition: EdbCluster.h:19
Bool_t IsEqual(const TObject *obj) const
Definition: EdbCluster.h:91
Int_t GetSegment() const
Definition: EdbCluster.h:58
virtual ~EdbCluster()
Definition: EdbCluster.h:38
void SetArea(float a)
Definition: EdbCluster.h:45
EdbCluster()
Definition: EdbCluster.h:33
void SetSide(int s)
Definition: EdbCluster.h:48
Float_t eZ
Definition: EdbCluster.h:25
void Draw(Option_t *opt="") const
Definition: EdbCluster.cxx:65
Int_t eFrame
Definition: EdbCluster.h:28
void TT() const
Definition: EdbCluster.h:88
void Set(float x, float y, float z, float a, float v, int f, int s, int seg=-1)
Definition: EdbCluster.h:43
Bool_t IsSortable() const
Definition: EdbCluster.h:90
void SetSegment(int seg)
Definition: EdbCluster.h:49
virtual Float_t Y() const
Definition: EdbCluster.h:79
Int_t GetFrame() const
Definition: EdbCluster.h:56
void Print(Option_t *opt=0) const
Definition: EdbCluster.cxx:58
virtual Float_t X() const
Definition: EdbCluster.h:78
Float_t eY
Definition: EdbCluster.h:24
Int_t Compare(const TObject *obj) const
Definition: EdbCluster.h:100
void SetFrame(int f)
Definition: EdbCluster.h:47
Int_t eSegment
Definition: EdbCluster.h:30
void Normalize()
Definition: EdbCluster.h:69
Float_t GetVolume() const
Definition: EdbCluster.h:55
virtual void SetX(float x)
Definition: EdbCluster.h:81
virtual void SetY(float y)
Definition: EdbCluster.h:82
EdbCluster(float x, float y, float z, float a, float v, int f, int s, int seg=-1)
Definition: EdbCluster.h:34
Float_t GetX() const
Definition: EdbCluster.h:51
void AddPixelSum(int x, int y, unsigned char pix)
Definition: EdbCluster.h:60
Float_t GetY() const
Definition: EdbCluster.h:52
Float_t eArea
Definition: EdbCluster.h:26
virtual Float_t Z() const
Definition: EdbCluster.h:80
void SetVolume(float v)
Definition: EdbCluster.h:46
Int_t GetSide() const
Definition: EdbCluster.h:57
Float_t eX
Definition: EdbCluster.h:23
Int_t eSide
Definition: EdbCluster.h:29
Float_t GetArea() const
Definition: EdbCluster.h:54
virtual void SetZ(float z)
Definition: EdbCluster.h:83
Float_t eVolume
Definition: EdbCluster.h:27
void Set0()
Definition: EdbCluster.cxx:50
Float_t GetZ() const
Definition: EdbCluster.h:53
Definition: EdbCluster.h:118
void AddCluster(EdbCluster *c)
Definition: EdbCluster.cxx:113
TClonesArray * GetClusters() const
Definition: EdbCluster.h:136
Int_t GetN() const
Definition: EdbCluster.cxx:128
Int_t N() const
Definition: EdbCluster.h:139
TClonesArray * eClusters
Definition: EdbCluster.h:122
EdbPoint * At(int i)
Definition: EdbCluster.h:140
EdbCluster * GetCluster(int i) const
Definition: EdbCluster.cxx:134
EdbClustersBox()
Definition: EdbCluster.cxx:72
virtual ~EdbClustersBox()
Definition: EdbCluster.cxx:84
Definition: EdbVirtual.h:101
virtual void Test() const
Definition: EdbVirtual.h:115
Definition: EdbVirtual.h:28
Definition: EdbVirtual.h:205
const char * opt
Definition: mc2raw.cxx:42
EdbSegP * s
Definition: tlg2pattern.C:32