FEDRA emulsion software from the OPERA Collaboration
EdbMosaicPath Class Reference

#include <EdbMosaicPath.h>

Inheritance diagram for EdbMosaicPath:
Collaboration diagram for EdbMosaicPath:

Public Member Functions

Float_t Dist (const int i) const
 
 EdbMosaicPath (int n)
 
EdbViewHeaderFindNearest (const TObjArray &harr, const float x0, const float y0)
 
int GetAlignedNeighbours (const int i0, TArrayI &list) const
 
EdbViewHeaderGetHeader (int i) const
 
int I (const int i) const
 
void InitArea (const TObjArray &harr, const float x0, const float y0, int nsegmin)
 
float InitLineX (const TObjArray &harr, const float y0, const float dy)
 
float InitLineY (const TObjArray &harr, const float x0, const float dx)
 
int N () const
 
int N0 () const
 
int OK (const int i) const
 
void SetOK (const int i)
 
virtual ~EdbMosaicPath ()
 

Public Attributes

Float_t eR0
 
Float_t eX0
 
Float_t eY0
 

Private Attributes

TArrayF eDist
 
TObjArray eHarr
 
TArrayI eInd
 
Int_t eN
 
Int_t eN0
 
TArrayI eOK
 

Constructor & Destructor Documentation

◆ EdbMosaicPath()

EdbMosaicPath::EdbMosaicPath ( int  n)
inline
33 : eHarr(n),eOK(n),eDist(n),eInd(n) {eN0=n;}
TArrayI eInd
Definition: EdbMosaicPath.h:26
TArrayF eDist
Definition: EdbMosaicPath.h:25
TArrayI eOK
Definition: EdbMosaicPath.h:24
Int_t eN0
Definition: EdbMosaicPath.h:22
TObjArray eHarr
Definition: EdbMosaicPath.h:23

◆ ~EdbMosaicPath()

virtual EdbMosaicPath::~EdbMosaicPath ( )
inlinevirtual
34 {}

Member Function Documentation

◆ Dist()

Float_t EdbMosaicPath::Dist ( const int  i) const
inline
47 { return eDist[i]; }

◆ FindNearest()

EdbViewHeader * EdbMosaicPath::FindNearest ( const TObjArray &  harr,
const float  x0,
const float  y0 
)
83 {
84  int n = harr.GetEntries();
85  float r2min=kMaxLong;
86  EdbViewHeader *h0=0;
87  for(int i=0; i<n; i++)
88  {
89  EdbViewHeader *h=(EdbViewHeader *)(harr.At(i));
90  float dx = h->GetXview()-x0;
91  float dy = h->GetYview()-y0;
92  float r2 = dx*dx+dy*dy;
93  if(r2<r2min)
94  {
95  r2min=r2;
96  h0=h;
97  }
98  }
99  return h0;
100 }
Definition: EdbView.h:26
Float_t GetXview() const
Definition: EdbView.h:93
Float_t GetYview() const
Definition: EdbView.h:94

◆ GetAlignedNeighbours()

int EdbMosaicPath::GetAlignedNeighbours ( const int  i0,
TArrayI &  list 
) const
22 {
23  // for a given view return list of already aligned neighbours
24  EdbViewHeader *h0 = (EdbViewHeader *)(eHarr.At(i0));
25  int n=0;
26  for(int i=0; i<eN; i++)
27  {
28  if(eOK[i]) {
29  EdbViewHeader *h=(EdbViewHeader *)(eHarr.At(i));
30  float dx = h->GetXview() - h0->GetXview();
31  float dy = h->GetYview() - h0->GetYview();
32  float d = Sqrt(dx*dx+dy*dy);
33  if( d<eR0 && d>0.1 ) { list[n] = i; n++; }
34  }
35  }
36  return n;
37 }
void d()
Definition: RecDispEX.C:381
Int_t eN
Definition: EdbMosaicPath.h:27

◆ GetHeader()

EdbViewHeader* EdbMosaicPath::GetHeader ( int  i) const
inline
36 { return (EdbViewHeader *)(eHarr.At(i)); }

◆ I()

int EdbMosaicPath::I ( const int  i) const
inline
43 { return eInd[i]; }

◆ InitArea()

void EdbMosaicPath::InitArea ( const TObjArray &  harr,
const float  x0,
const float  y0,
int  nsegmin 
)
104 {
105  eX0 = x0;
106  eY0 = y0;
107  int n = harr.GetEntries();
108  if(n>eN0) {Log(1,"EdbMosaicPath::InitArea","ERROR: array length %d > %d",n,eN0); return;}
109  int cnt=0;
110  for(int i=0; i<n; i++)
111  {
112  EdbViewHeader *h=(EdbViewHeader *)(harr.At(i));
113  //if( h->GetNsegments() >= nsegmin )
114  if( 1 )
115  {
116  eHarr.AddAt(h,cnt);
117  float dx = h->GetXview()-eX0;
118  float dy = h->GetYview()-eY0;
119  eDist[cnt] = Sqrt(dx*dx+dy*dy);
120  cnt++;
121  }
122  }
123  eN=cnt;
124  TMath::Sort(eN,eDist.GetArray(),eInd.GetArray(),0);
125 }
bool Log(int level, const char *location, const char *fmt,...)
Definition: EdbLog.cxx:75
Float_t eX0
Definition: EdbMosaicPath.h:29
Float_t eY0
Definition: EdbMosaicPath.h:29

◆ InitLineX()

float EdbMosaicPath::InitLineX ( const TObjArray &  harr,
const float  y0,
const float  dy 
)
41 {
42  eN0 = harr.GetEntries();
43  int cnt=0;
44  for(int i=0; i<eN0; i++)
45  {
46  EdbViewHeader *h=(EdbViewHeader *)(harr.At(i));
47  eHarr.Add(h);
48  if( Abs( h->GetYview()-y0 ) < dy0 ) {
49  eDist[i] = h->GetXview();
50  cnt++;
51  } else eDist[i] = kMaxLong;
52  }
53  eN = cnt;
54  TMath::Sort(eN0,eDist.GetArray(),eInd.GetArray(),0);
55  eY0 = y0;
56  eX0 = ((EdbViewHeader *)(eHarr.At(I(0))))->GetXview();
57  return ((EdbViewHeader *)(eHarr.At(I(eN-1))))->GetXview() - eX0;
58 }
int I(const int i) const
Definition: EdbMosaicPath.h:43

◆ InitLineY()

float EdbMosaicPath::InitLineY ( const TObjArray &  harr,
const float  x0,
const float  dx 
)
62 {
63  eN0 = harr.GetEntries();
64  int cnt=0;
65  for(int i=0; i<eN0; i++)
66  {
67  EdbViewHeader *h=(EdbViewHeader *)(harr.At(i));
68  eHarr.Add(h);
69  if( Abs( h->GetXview()-x0 ) < dx0 ) {
70  eDist[i] = h->GetYview();
71  cnt++;
72  } else eDist[i] = kMaxLong;
73  }
74  eN = cnt;
75  TMath::Sort(eN0,eDist.GetArray(),eInd.GetArray(),0);
76  eX0 = x0;
77  eY0 = ((EdbViewHeader *)(eHarr.At(I(0))))->GetYview();
78  return ((EdbViewHeader *)(eHarr.At(I(eN-1))))->GetYview() - eY0;
79 }

◆ N()

int EdbMosaicPath::N ( ) const
inline
45 { return eN; }

◆ N0()

int EdbMosaicPath::N0 ( ) const
inline
44 { return eN0; }

◆ OK()

int EdbMosaicPath::OK ( const int  i) const
inline
46 { return eOK[i]; }

◆ SetOK()

void EdbMosaicPath::SetOK ( const int  i)
inline
41 { eOK[i]++; }

Member Data Documentation

◆ eDist

TArrayF EdbMosaicPath::eDist
private

◆ eHarr

TObjArray EdbMosaicPath::eHarr
private

◆ eInd

TArrayI EdbMosaicPath::eInd
private

◆ eN

Int_t EdbMosaicPath::eN
private

◆ eN0

Int_t EdbMosaicPath::eN0
private

◆ eOK

TArrayI EdbMosaicPath::eOK
private

◆ eR0

Float_t EdbMosaicPath::eR0

◆ eX0

Float_t EdbMosaicPath::eX0

◆ eY0

Float_t EdbMosaicPath::eY0

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