FEDRA emulsion software from the OPERA Collaboration
EdbSegmentsBox Class Reference

#include <EdbPattern.h>

Inheritance diagram for EdbSegmentsBox:
Collaboration diagram for EdbSegmentsBox:

Public Member Functions

EdbSegPAddSegment (EdbSegP &s)
 
EdbSegPAddSegment (EdbSegP &s1, EdbSegP &s2)
 
EdbSegPAddSegment (int i, EdbSegP &s)
 
EdbSegPAddSegment (int id, float x, float y, float tx, float ty, float w=0, int flag=0)
 
EdbSegPAddSegmentNoDuplicate (EdbSegP &s)
 
EdbPointAt (int i) const
 
Int_t CalculateAXAY (EdbSegmentsBox *p, EdbAffine2D *affA)
 
Int_t CalculateXY (EdbSegmentsBox *p, EdbAffine2D *aff)
 
Float_t Diff (EdbSegmentsBox &p)
 
Float_t DiffAff (EdbAffine2D *aff)
 
Float_t DZ () const
 
 EdbSegmentsBox (EdbSegmentsBox &box)
 
 EdbSegmentsBox (float x0, float y0, float z0, int nseg=0)
 
 EdbSegmentsBox (int nseg=0)
 
Int_t GetN () const
 
EdbSegPGetSegment (int i) const
 
EdbSegPGetSegmentLast () const
 
TClonesArray * GetSegments () const
 
voidGetSegmentsAddr ()
 
Float_t GetSize (Int_t XorY)
 
Float_t GetSizeX ()
 
Float_t GetSizeXY ()
 
Float_t GetSizeY ()
 
Float_t GetTrackDensity ()
 
Float_t GetTrackDensitymm2 ()
 
Int_t N () const
 
void Print (Option_t *opt="") const
 other functions More...
 
void ProjectTo (const float dz)
 
void Reset ()
 
void Set0 ()
 
void SetSegmentsDZ (float dz)
 
void SetSegmentsPlate (int plate)
 
void SetSegmentsZ ()
 
void SetX (float x)
 mandatory virtual functions: More...
 
void SetY (float y)
 
void SetZ (float z)
 
void TransformA (const EdbAffine2D *affA)
 
void TransformARot (const EdbAffine2D *affA)
 
void TransformShr (const float shr)
 
Float_t X () const
 
Float_t Y () const
 
Float_t Z () const
 
virtual ~EdbSegmentsBox ()
 
- Public Member Functions inherited from EdbPointsBox2D
virtual EdbPointAt (int i) const =0
 
virtual Float_t DeltaX ()
 
virtual Float_t DeltaY ()
 
virtual void DrawPoints (int style=23, int col=4, float size=1.)
 
 EdbPointsBox2D ()
 
 EdbPointsBox2D (const EdbPointsBox2D &pb)
 
virtual const EdbAffine2DGetKeep () const
 
virtual void GetKeep (EdbAffine2D &aff)
 
virtual Int_t N () const =0
 
virtual void Print (Option_t *opt="") const
 
virtual void Retransform ()
 
virtual void Rotate (float angle)
 
virtual void ScaleX (float scaleFactor)
 
virtual void ScaleY (float scaleFactor)
 
virtual void SetKeep (float a11, float a12, float a21, float a22, float b1, float b2)
 
virtual void SetX (float x)
 
virtual void SetY (float y)
 
virtual void SetZ (float z)
 
virtual void ShiftX (float offset)
 
virtual void ShiftY (float offset)
 
virtual void SmearXY (float sigmax, float sigmay)
 
virtual void Substruct (EdbPointsBox2D *b)
 
virtual void Transform (const EdbAffine2D *a)
 
virtual Float_t X () const
 
virtual TH1F * Xhist ()
 
virtual Float_t Xmax () const
 
virtual Float_t Xmin () const
 
virtual TH2F * XYhist ()
 
virtual Float_t Y () const
 
virtual TH1F * Yhist ()
 
virtual Float_t Ymax () const
 
virtual Float_t Ymin () const
 
virtual Float_t Z () const
 
virtual ~EdbPointsBox2D ()
 
- Public Member Functions inherited from EdbPoint3D
virtual void Print (Option_t *opt="") const
 
virtual void SetZ (float z)=0
 
virtual void Substruct (EdbPoint *p)
 
virtual void Test () const
 
virtual void TestPoint3D () const
 
virtual void Transform (const EdbAffine3D *a)
 
virtual Float_t Z () const =0
 
virtual ~EdbPoint3D ()
 
- Public Member Functions inherited from EdbPoint2D
virtual void Print (Option_t *opt="") const
 
virtual void SetX (float x)=0
 
virtual void SetY (float y)=0
 
virtual void SetZ (float z)
 
virtual void Substruct (EdbPoint *p)
 
virtual void Test () const
 
virtual void TestPoint2D () const
 
virtual void Transform (const EdbAffine2D *a)
 
virtual Float_t X () const =0
 
virtual Float_t Y () const =0
 
virtual Float_t Z () const
 
virtual ~EdbPoint2D ()
 
- Public Member Functions inherited from EdbPoint
virtual void SetX (float x)=0
 
virtual void SetY (float y)=0
 
virtual void SetZ (float z)=0
 
virtual void Substruct (EdbPoint *p)=0
 
virtual void Test () const
 
virtual void Transform (const EdbAffine2D *a)
 
virtual void Transform (const EdbAffine3D *a)
 
virtual Float_t X () const =0
 
virtual Float_t Y () const =0
 
virtual Float_t Z () const =0
 
virtual ~EdbPoint ()
 

Private Attributes

Float_t eDZkeep
 eDZkeep = eZ - Zoriginal (before any projections) More...
 
TClonesArray * eSegments
 collection of segments (EdbSegP) More...
 
Float_t eX
 
Float_t eY
 
Float_t eZ
 central point More...
 

Constructor & Destructor Documentation

◆ EdbSegmentsBox() [1/3]

EdbSegmentsBox::EdbSegmentsBox ( int  nseg = 0)
32{
33 if(nseg>0) eSegments = new TClonesArray("EdbSegP",nseg);
34 else eSegments = new TClonesArray("EdbSegP");
35 Set0();
36}
void Set0()
Definition: EdbPattern.cxx:58
TClonesArray * eSegments
collection of segments (EdbSegP)
Definition: EdbPattern.h:33

◆ EdbSegmentsBox() [2/3]

EdbSegmentsBox::EdbSegmentsBox ( EdbSegmentsBox box)
inline
46 {
47 eX=box.X();
48 eY=box.Y();
49 eZ=box.Z();
50 int n=box.N();
51 eSegments = new TClonesArray("EdbSegP",n);
52 for(int i=0; i<n; i++)
53 AddSegment( *(box.GetSegment(i)) );
54 }
Float_t Z() const
Definition: EdbPattern.h:84
Float_t eY
Definition: EdbPattern.h:31
Float_t eZ
central point
Definition: EdbPattern.h:31
Int_t N() const
Definition: EdbPattern.h:86
Float_t Y() const
Definition: EdbPattern.h:83
EdbSegP * GetSegment(int i) const
Definition: EdbPattern.h:66
Float_t eX
Definition: EdbPattern.h:31
Float_t X() const
Definition: EdbPattern.h:82
EdbSegP * AddSegment(int i, EdbSegP &s)
Definition: EdbPattern.cxx:72

◆ EdbSegmentsBox() [3/3]

EdbSegmentsBox::EdbSegmentsBox ( float  x0,
float  y0,
float  z0,
int  nseg = 0 
)
40{
41 if(nseg>0) eSegments = new TClonesArray("EdbSegP",nseg);
42 else eSegments = new TClonesArray("EdbSegP");
43 eX=x0; eY=y0; eZ=z0;
44 eDZkeep=0;
45}
brick z0
Definition: RecDispMC.C:106
Float_t eDZkeep
eDZkeep = eZ - Zoriginal (before any projections)
Definition: EdbPattern.h:35

◆ ~EdbSegmentsBox()

EdbSegmentsBox::~EdbSegmentsBox ( )
virtual
49{
50 if(eSegments) {
51 eSegments->Delete();
52 delete eSegments;
53 eSegments=0;
54 }
55}

Member Function Documentation

◆ AddSegment() [1/4]

EdbSegP * EdbSegmentsBox::AddSegment ( EdbSegP s)
79{
80 return new((*eSegments)[N()]) EdbSegP( s );
81}
Definition: EdbSegP.h:21
s
Definition: check_shower.C:55

◆ AddSegment() [2/4]

EdbSegP * EdbSegmentsBox::AddSegment ( EdbSegP s1,
EdbSegP s2 
)
85{
86 EdbSegP *s = new((*eSegments)[N()]) EdbSegP( s1 );
87 s->MergeTo(s2);
88 return s;
89}
EdbSegP * s1
Definition: tlg2couples.C:29
EdbSegP * s2
Definition: tlg2couples.C:30

◆ AddSegment() [3/4]

EdbSegP * EdbSegmentsBox::AddSegment ( int  i,
EdbSegP s 
)
73{
74 return new((*eSegments)[i]) EdbSegP( s );
75}

◆ AddSegment() [4/4]

EdbSegP * EdbSegmentsBox::AddSegment ( int  id,
float  x,
float  y,
float  tx,
float  ty,
float  w = 0,
int  flag = 0 
)
67{
68 return new((*eSegments)[N()]) EdbSegP( id,x,y,tx,ty,w,flag );
69}
void w(int rid=2, int nviews=2)
Definition: test.C:27

◆ AddSegmentNoDuplicate()

EdbSegP * EdbSegmentsBox::AddSegmentNoDuplicate ( EdbSegP s)

This function will add the segment s to the current list of segments checking for duplicates. If any segment in the list is found, that is compatible to this, the segment will not be added, instead a warning message will be printed (according to
verbosity level) This function might be slow.

93{
100
101 //cout << endl << endl;
102 //cout <<"EdbSegmentsBox::AddSegmentNoDuplicate( EdbSegP &s )" << endl;
103 //s.PrintNice();
104 Int_t eSegmentsN = GetN();
105 //cout << "Segments already in the eSegments list: " << eSegmentsN << endl;
106 //cout << "Check now if segment s is already in the list..." << endl;
107
108 EdbSegP* sComparison;
109
110 for (int i=0; i<eSegmentsN; ++i) {
111
112 sComparison=(EdbSegP* )eSegments->At(i);
113 //sComparison->PrintNice();
114 //Bool_t EdbSegP::IsEqual(const TObject *obj) const
115 //cout << "Evaluating s.IsEqual(sComparison) = " << s.IsEqual(sComparison) << endl;
116 if (s.IsEqual(sComparison)==kTRUE) {
117 //cout << "Tested Segment is witin one sigma equal with one already in the list. DO NOT ADD THIS Segment..." << endl;
118 return NULL;
119 }
120
121 //bool EdbSegP::IsCompatible( EdbSegP &s, float nsigx, float nsigt ) const
122 /*
123 cout << "Evaluating s.IsCompatible(*sComparison,1,1) = " << s.IsCompatible(*sComparison,1,1) << endl;
124 if (s.IsCompatible(*sComparison,1,1)==kTRUE) {
125 cout << "Tested Segment is witin one sigma compatible with one already in the list. DO NOT ADD THIS Segment..." << endl;
126 return NULL;
127 }
128 */
129
130 }
131
132 //cout <<" EdbSegmentsBox::AddSegmentNoDuplicate( EdbSegP &s ) Segment s added." << endl;
133 return new((*eSegments)[N()]) EdbSegP( s );
134}
Int_t GetN() const
Definition: EdbPattern.h:65
#define NULL
Definition: nidaqmx.h:84

◆ At()

EdbPoint * EdbSegmentsBox::At ( int  i) const
inlinevirtual

Implements EdbPointsBox2D.

87{return (EdbPoint*)GetSegment(i);}
protocol class for point (virtual point)
Definition: EdbVirtual.h:28

◆ CalculateAXAY()

int EdbSegmentsBox::CalculateAXAY ( EdbSegmentsBox p,
EdbAffine2D affA 
)
294{
295 int n=N();
296 if( n>pat->N() ) n=pat->N();
297 if(n<2) return 0;
298
299 float *ax1 = new float[n];
300 float *ay1 = new float[n];
301 float *ax2 = new float[n];
302 float *ay2 = new float[n];
303
304 EdbSegP *p1,*p2;
305 for(int i=0; i<n; i++ ) {
306 p1 = GetSegment(i);
307 p2 = pat->GetSegment(i);
308 ax1[i] = p1->TX();
309 ay1[i] = p1->TY();
310 ax2[i] = p2->TX();
311 ay2[i] = p2->TY();
312 }
313 aff->Calculate(n,ax1,ay1,ax2,ay2);
314
315 delete ax1;
316 delete ay1;
317 delete ax2;
318 delete ay2;
319
320 return 1;
321}
Float_t TX() const
tangens = deltaX/deltaZ
Definition: EdbSegP.h:175
Float_t TY() const
tangens = deltaY/deltaZ
Definition: EdbSegP.h:176

◆ CalculateXY()

int EdbSegmentsBox::CalculateXY ( EdbSegmentsBox p,
EdbAffine2D aff 
)
283{
284 int n=N();
285 if( n>pat->N() ) n=pat->N();
286 if(n<2) return 0;
287
288 aff->Calculate(this,pat);
289 return 1;
290}
Int_t Calculate(EdbPointsBox2D *b1, EdbPointsBox2D *b2)
Definition: EdbAffine.cxx:231

◆ Diff()

float EdbSegmentsBox::Diff ( EdbSegmentsBox p)

return the mean difference beteween pattern elements

166{
168 int nseg = TMath::Min( N(), p.N() );
169
170 if(nseg<1) return 0;
171
172 EdbSegP *s1=0, *s2=0;
173
174 float dx=0, dy=0;
175 double sdx=0;
176 for(int i=0; i<nseg; i++ ) {
177 s1 = GetSegment(i);
178 s2 = p.GetSegment(i);
179 dx = s2->X() - s1->X();
180 dy = s2->Y() - s1->Y();
181 sdx += TMath::Sqrt( dx*dx + dy*dy);
182 }
183 return sdx/nseg;
184}
Float_t X() const
Definition: EdbSegP.h:173
Float_t Y() const
Definition: EdbSegP.h:174
p
Definition: testBGReduction_AllMethods.C:8

◆ DiffAff()

float EdbSegmentsBox::DiffAff ( EdbAffine2D aff)
148{
149 EdbSegmentsBox p,p1;
150 p.AddSegment(0,Xmin(),Ymin(),0.,0.);
151 p.AddSegment(0,Xmax(),Ymin(),0.,0.);
152 p.AddSegment(0,Xmin(),Ymax(),0.,0.);
153 p.AddSegment(0,Xmax(),Ymax(),0.,0.);
154
155 p1.AddSegment(0,Xmin(),Ymin(),0.,0.);
156 p1.AddSegment(0,Xmax(),Ymin(),0.,0.);
157 p1.AddSegment(0,Xmin(),Ymax(),0.,0.);
158 p1.AddSegment(0,Xmax(),Ymax(),0.,0.);
159
160 p1.Transform(aff);
161 return p.Diff(p1);
162}
virtual Float_t Xmax() const
Definition: EdbVirtual.cxx:196
virtual Float_t Ymin() const
Definition: EdbVirtual.cxx:206
virtual Float_t Xmin() const
Definition: EdbVirtual.cxx:186
virtual void Transform(const EdbAffine2D *a)
Definition: EdbVirtual.cxx:155
virtual Float_t Ymax() const
Definition: EdbVirtual.cxx:216
Definition: EdbPattern.h:27

◆ DZ()

Float_t EdbSegmentsBox::DZ ( ) const
inline
85{return eDZkeep;}

◆ GetN()

Int_t EdbSegmentsBox::GetN ( ) const
inline
65{return eSegments ? eSegments->GetEntriesFast() : 0;}

◆ GetSegment()

EdbSegP * EdbSegmentsBox::GetSegment ( int  i) const
inline
66{return (EdbSegP*)eSegments->At(i); }

◆ GetSegmentLast()

EdbSegP * EdbSegmentsBox::GetSegmentLast ( ) const
inline
67{return GetN() ? (EdbSegP*)eSegments->Last() : 0;}

◆ GetSegments()

TClonesArray * EdbSegmentsBox::GetSegments ( ) const
inline
69{ return eSegments; }

◆ GetSegmentsAddr()

void * EdbSegmentsBox::GetSegmentsAddr ( )
inline
70{ return &eSegments; }

◆ GetSize()

float EdbSegmentsBox::GetSize ( Int_t  XorY)

return the size of the segments box in X//Y simple approach using max/min values of segments works only if 2 or more segemts are in it.

188{
192 int nseg = N();
193 if(nseg<2) return 0;
194 EdbSegP *s1=0;
195
196 float minX=0; float maxX=0;
197 float minY=0; float maxY=0;
198 for(int i=0; i<nseg; i++ ) {
199 s1 = GetSegment(i);
200 if (i==0) {
201 minX=s1->X(); maxX=s1->X();
202 minY=s1->Y(); maxY=s1->Y();
203 }
204 maxX=TMath::Max(maxX,s1->X());
205 minX=TMath::Min(minX,s1->X());
206 maxY=TMath::Max(maxY,s1->Y());
207 minY=TMath::Min(minY,s1->Y());
208 }
209 float sizeX=TMath::Abs(maxX-minX);
210 float sizeY=TMath::Abs(maxY-minY);
211
212 if (XorY==1) { return sizeY; }
213 else { return sizeX; }
214}

◆ GetSizeX()

Float_t EdbSegmentsBox::GetSizeX ( )
inline
103{ return GetSize(0); }
Float_t GetSize(Int_t XorY)
Definition: EdbPattern.cxx:187

◆ GetSizeXY()

float EdbSegmentsBox::GetSizeXY ( )
218{
219 return (GetSize(0)*GetSize(1));
220}

◆ GetSizeY()

Float_t EdbSegmentsBox::GetSizeY ( )
inline
104{ return GetSize(1); }

◆ GetTrackDensity()

float EdbSegmentsBox::GetTrackDensity ( )

Returns number of tracks per area (in microns usually)

224{
226 int nseg = N();
227 if(nseg<2) return 0;
228 float size=GetSizeXY();
229 return float(nseg)/size;
230}
Float_t GetSizeXY()
Definition: EdbPattern.cxx:217

◆ GetTrackDensitymm2()

float EdbSegmentsBox::GetTrackDensitymm2 ( )

Returns number of tracks per area in millimeter squared Original area is in microns x microns

234{
237 return GetTrackDensity()*1e6;
238}
Float_t GetTrackDensity()
Definition: EdbPattern.cxx:223

◆ N()

Int_t EdbSegmentsBox::N ( ) const
inlinevirtual

Implements EdbPointsBox2D.

86{return GetN();}

◆ Print()

void EdbSegmentsBox::Print ( Option_t *  opt = "") const
virtual

other functions

Reimplemented from EdbPointsBox2D.

378{
379 int nseg=GetN();
380 printf("EdbSegmentsBox: %d segments\n", nseg );
381 for(int i=0; i<nseg; i++) GetSegment(i)->Print();
382}
void Print(Option_t *opt="") const
Definition: EdbSegP.cxx:379

◆ ProjectTo()

void EdbSegmentsBox::ProjectTo ( const float  dz)
269{
270 eZ += dz; eDZkeep += dz;
271 int nseg = N();
272 for(int i=0; i<nseg; i++ ) GetSegment(i)->PropagateToDZ(dz);
273/* for(int i=0; i<nseg; i++ ) {
274 p = GetSegment(i);
275 p->SetX( p->X() + p->TX()*dz );
276 p->SetY( p->Y() + p->TY()*dz );
277 p->SetZ( Z() );
278 }*/
279}
brick dz
Definition: RecDispMC.C:107
void PropagateToDZ(float dz)
Definition: EdbSegP.cxx:281

◆ Reset()

void EdbSegmentsBox::Reset ( )
141{
142 Set0();
143 if(eSegments) eSegments->Clear();
144}

◆ Set0()

void EdbSegmentsBox::Set0 ( )
59{
60 eX=0; eY=0; eZ=0;
61 eDZkeep=0;
62}

◆ SetSegmentsDZ()

void EdbSegmentsBox::SetSegmentsDZ ( float  dz)
260{
261 int nseg = N();
262 for(int i=0; i<nseg; i++ ) {
263 GetSegment(i)->SetDZ( dz );
264 }
265}
void SetDZ(float dz)
Definition: EdbSegP.h:126

◆ SetSegmentsPlate()

void EdbSegmentsBox::SetSegmentsPlate ( int  plate)
242{
243 int nseg = N();
244 for(int i=0; i<nseg; i++ ) {
246 }
247}
void SetPlate(int plateid)
Definition: EdbSegP.h:142
Int_t plate
Definition: merge_Energy_SytematicSources_Electron.C:1

◆ SetSegmentsZ()

void EdbSegmentsBox::SetSegmentsZ ( )
251{
252 int nseg = N();
253 for(int i=0; i<nseg; i++ ) {
254 GetSegment(i)->SetZ( Z() );
255 }
256}
void SetZ(float z)
Definition: EdbSegP.h:125

◆ SetX()

void EdbSegmentsBox::SetX ( float  x)
inlinevirtual

mandatory virtual functions:

Reimplemented from EdbPointsBox2D.

79{ eX=x; }

◆ SetY()

void EdbSegmentsBox::SetY ( float  y)
inlinevirtual

Reimplemented from EdbPointsBox2D.

80{ eY=y; }

◆ SetZ()

void EdbSegmentsBox::SetZ ( float  z)
inlinevirtual

Reimplemented from EdbPointsBox2D.

41{ eZ=z; }

◆ TransformA()

void EdbSegmentsBox::TransformA ( const EdbAffine2D affA)
325{
326 EdbSegP *p;
327 float tx,ty;
328
329 int nseg = N();
330 for(int i=0; i<nseg; i++ ) {
331 p = GetSegment(i);
332
333 tx = aff->A11()*p->TX() + aff->A12()*p->TY() + aff->B1();
334 ty = aff->A21()*p->TX() + aff->A22()*p->TY() + aff->B2();
335 p->SetTX(tx);
336 p->SetTY(ty);
337 }
338}

◆ TransformARot()

void EdbSegmentsBox::TransformARot ( const EdbAffine2D affA)
359{
360 // apply to the angles only rotation members of transformation
361
362 EdbSegP *p;
363 float tx,ty;
364
365 int nseg = N();
366 for(int i=0; i<nseg; i++ ) {
367 p = GetSegment(i);
368
369 tx = aff->A11()*p->TX() + aff->A12()*p->TY();
370 ty = aff->A21()*p->TX() + aff->A22()*p->TY();
371 p->SetTX(tx);
372 p->SetTY(ty);
373 }
374}

◆ TransformShr()

void EdbSegmentsBox::TransformShr ( const float  shr)
342{
343 EdbSegP *p;
344 float tx,ty;
345
346 int nseg = N();
347 for(int i=0; i<nseg; i++ ) {
348 p = GetSegment(i);
349
350 tx = p->TX()/shr;
351 ty = p->TY()/shr;
352 p->SetTX(tx);
353 p->SetTY(ty);
354 }
355}

◆ X()

Float_t EdbSegmentsBox::X ( ) const
inlinevirtual

Reimplemented from EdbPointsBox2D.

82{return eX;}

◆ Y()

Float_t EdbSegmentsBox::Y ( ) const
inlinevirtual

Reimplemented from EdbPointsBox2D.

83{return eY;}

◆ Z()

Float_t EdbSegmentsBox::Z ( ) const
inlinevirtual

Reimplemented from EdbPointsBox2D.

84{return eZ;}

Member Data Documentation

◆ eDZkeep

Float_t EdbSegmentsBox::eDZkeep
private

eDZkeep = eZ - Zoriginal (before any projections)

◆ eSegments

TClonesArray* EdbSegmentsBox::eSegments
private

collection of segments (EdbSegP)

◆ eX

Float_t EdbSegmentsBox::eX
private

◆ eY

Float_t EdbSegmentsBox::eY
private

◆ eZ

Float_t EdbSegmentsBox::eZ
private

central point


The documentation for this class was generated from the following files: