FEDRA emulsion software from the OPERA Collaboration
EdbPatternsVolume Class Reference

#include <EdbPattern.h>

Inheritance diagram for EdbPatternsVolume:
Collaboration diagram for EdbPatternsVolume:

Public Member Functions

void AddPattern (EdbPattern *pat)
 
void AddPatternAt (EdbPattern *pat, int id)
 
void Centralize ()
 
void Centralize (float xc, float yc)
 
void DropCell ()
 
int DropCouples ()
 
 EdbPatternsVolume ()
 
 EdbPatternsVolume (EdbPatternsVolume &pvol)
 
int FindComplimentsVol (EdbSegP &s, TObjArray &arr, float nsig, float nsigt, int dpat)
 
EdbPatternGetPattern (int id) const
 
EdbPatternGetPatternByPID (int pid) const
 
EdbPatternGetPatternByPlate (int plate, int side)
 
EdbPatternGetPatternByZ (float z, float tolerance=5) const
 
EdbPatternGetPatternNext (float z, int dir) const
 
EdbPatternGetPatternPreceding (EdbPattern *pat) const
 
EdbPatternGetPatternSucceding (EdbPattern *pat) const
 
EdbPatternGetPatternZLowestHighest (Bool_t lowestZ=kTRUE) const
 
EdbSegPGetSegment (Long_t vid) const
 
EdbPatternInsertPattern (EdbPattern *pat, Bool_t descendingZ=0)
 
EdbPatternNextPattern (float z, int dir) const
 
Int_t Npatterns () const
 
void PassProperties (EdbPatternsVolume &pvol)
 
Int_t Pid (Long_t vid) const
 
void Print () const
 
void PrintAff () const
 
void PrintStat (EdbPattern &pat) const
 
void PrintStat (Option_t *opt="") const
 
void Set0 ()
 
void SetPatternsID ()
 
void SetXYZ (float x, float y, float z)
 
void Shift (float x, float y)
 
Int_t Sid (Long_t vid) const
 
void SortPatternsByZ (Bool_t descendingZ=0)
 
void Transform (const EdbAffine2D *aff)
 
Long_t Vid (int pid, int sid) const
 
Float_t X () const
 
Float_t Xmean ()
 
Float_t Y () const
 
Float_t Ymean ()
 
Float_t Z () const
 
virtual ~EdbPatternsVolume ()
 

Public Attributes

Bool_t eDescendingZ
 "pid:id1:chi2:id2" - all found couples More...
 
TObjArray * ePatterns
 
TIndexCellePatternsCell
 "vidt:vids" - connected segments cell More...
 
TIndexCelleTracksCell
 

Private Attributes

Float_t eX
 
Float_t eY
 
Float_t eZ
 

Constructor & Destructor Documentation

◆ EdbPatternsVolume() [1/2]

EdbPatternsVolume::EdbPatternsVolume ( )
1706 {
1707  ePatterns = new TObjArray();
1708  eTracksCell = 0;
1709  ePatternsCell = 0;
1710  Set0();
1711 }
TIndexCell * eTracksCell
Definition: EdbPattern.h:358
TIndexCell * ePatternsCell
"vidt:vids" - connected segments cell
Definition: EdbPattern.h:359
void Set0()
Definition: EdbPattern.cxx:1745
TObjArray * ePatterns
Definition: EdbPattern.h:356

◆ EdbPatternsVolume() [2/2]

EdbPatternsVolume::EdbPatternsVolume ( EdbPatternsVolume pvol)
1715 {
1716  ePatterns = new TObjArray();
1717  eTracksCell = 0;
1718  ePatternsCell = 0;
1719  Set0();
1720 
1721  pvol.PassProperties(*this);
1722  int npat,nseg;
1723  npat = Npatterns();
1724  for(int j=0; j<npat; j++) {
1725  nseg = GetPattern(j)->N();
1726  for(int i=0; i<nseg; i++ ) {
1727  pvol.GetPattern(j)->AddSegment( *(GetPattern(j)->GetSegment(i)) );
1728  }
1729  }
1730 }
Int_t npat
Definition: Xi2HatStartScript.C:33
void PassProperties(EdbPatternsVolume &pvol)
Definition: EdbPattern.cxx:1895
Int_t Npatterns() const
Definition: EdbPattern.h:380
EdbSegP * GetSegment(Long_t vid) const
Definition: EdbPattern.h:411
EdbPattern * GetPattern(int id) const
Definition: EdbPattern.cxx:1887
Int_t N() const
Definition: EdbPattern.h:89
EdbSegP * AddSegment(int i, EdbSegP &s)
Definition: EdbPattern.cxx:71

◆ ~EdbPatternsVolume()

EdbPatternsVolume::~EdbPatternsVolume ( )
virtual
1734 {
1735  if(ePatterns) {
1736  ePatterns->Delete();
1737  delete ePatterns;
1738  ePatterns=0;
1739  }
1740  if(eTracksCell) { delete eTracksCell; eTracksCell=0; }
1741  if(ePatternsCell) { delete ePatternsCell; ePatternsCell=0; }
1742 }

Member Function Documentation

◆ AddPattern()

void EdbPatternsVolume::AddPattern ( EdbPattern pat)
1868 {
1869  ePatterns->Add(pat);
1870 }

◆ AddPatternAt()

void EdbPatternsVolume::AddPatternAt ( EdbPattern pat,
int  id 
)
1874 {
1875  if(id>=0&&id<1000 && pat)
1876  {
1877  if(ePatterns->GetSize()<id+1) ePatterns->Expand(id+1);
1878  pat->SetID(id);
1879  ePatterns->AddAt(pat,id);
1880  } else {
1881  Log(1,"EdbPatternsVolume::AddPatternAt","Error! id out of range (0,1000): id = %d",id);
1882  if(!pat) Log(1,"EdbPatternsVolume::AddPatternAt","Error! pat is not defined!");
1883  }
1884 }
bool Log(int level, const char *location, const char *fmt,...)
Definition: EdbLog.cxx:75
void SetID(int id)
Definition: EdbPattern.h:318

◆ Centralize() [1/2]

void EdbPatternsVolume::Centralize ( )
1782 {
1783  // find geometrical center (XY) of all patterns and set it as the center of
1784  // coordinates to simplify transformations
1785  // To be used before any operations on patterns
1786 
1787  float xc=0;
1788  float yc=0;
1789  int npat = Npatterns();
1790  for(int i=0; i<npat; i++ ) {
1791  xc += GetPattern(i)->Xmax() + GetPattern(i)->Xmin();
1792  yc += GetPattern(i)->Ymax() + GetPattern(i)->Ymin();
1793  }
1794  xc = xc/Npatterns()/2;
1795  yc = yc/Npatterns()/2;
1796 
1797  Centralize(xc,yc);
1798 }
void Centralize()
Definition: EdbPattern.cxx:1781
virtual Float_t Xmax() const
Definition: EdbVirtual.cxx:195
virtual Float_t Ymin() const
Definition: EdbVirtual.cxx:205
virtual Float_t Xmin() const
Definition: EdbVirtual.cxx:185
virtual Float_t Ymax() const
Definition: EdbVirtual.cxx:215

◆ Centralize() [2/2]

void EdbPatternsVolume::Centralize ( float  xc,
float  yc 
)
1802 {
1803  eX = xc; eY=yc;
1804  Shift(-xc,-yc);
1805  float npat = Npatterns();
1806  for(int i=0; i<npat; i++ )
1807  GetPattern(i)->SetKeep(1,0,0,1,0,0);
1808 }
Float_t eX
Definition: EdbPattern.h:352
void Shift(float x, float y)
Definition: EdbPattern.cxx:1914
Float_t eY
Definition: EdbPattern.h:352
virtual void SetKeep(float a11, float a12, float a21, float a22, float b1, float b2)
Definition: EdbVirtual.cxx:142

◆ DropCell()

void EdbPatternsVolume::DropCell ( )
1927 {
1928  int npat = Npatterns();
1929  for(int i=0; i<npat; i++ ) GetPattern(i)->Cell()->Drop();
1930 }
TIndexCell * Cell() const
Definition: EdbPattern.h:330
void Drop()
Definition: TIndexCell.cpp:237

◆ DropCouples()

int EdbPatternsVolume::DropCouples ( )
1753 {
1754  int count=0;
1755  int npat=Npatterns();
1756  for(int i=0; i<npat; i++ )
1757  count += GetPattern(i)->Cell()->DropCouples(4);
1758  if(count) printf("%d couples are dropped in volume cells\n",count);
1759  return count;
1760 }
int DropCouples(int level)
Definition: TIndexCell.cpp:206

◆ FindComplimentsVol()

int EdbPatternsVolume::FindComplimentsVol ( EdbSegP s,
TObjArray &  arr,
float  nsig,
float  nsigt,
int  dpat 
)
2105 {
2106  EdbPattern *pat = 0;
2107  int npat = Npatterns();
2108  bool p_inverse_z = (GetPattern(1)->Z() - GetPattern(0)->Z()) > 0. ? false : true ;
2109  int ii = 0;
2110  int dpat = 1;
2111  int pid = 0;
2112  if (p_inverse_z) dpat = -1;
2113  for (int i = 0; i<npat; i++)
2114  {
2115  ii = i;
2116  if (p_inverse_z) ii = npat-1-i;
2117  pat = GetPattern(ii);
2118  if (ss.Z() < pat->Z())
2119  {
2120  pid = ii - dpat;
2121  if ( pid >= npat ) ss.SetPID(npat-1);
2122  if ( pid < 0 ) ss.SetPID(0);
2123  else ss.SetPID(pid);
2124  break;
2125  }
2126  else if (ss.Z() == pat->Z())
2127  {
2128  ss.SetPID(ii);
2129  break;
2130  }
2131  }
2132 
2133  int p0 = ss.PID();
2134  int pend = p0 + Dpat;
2135  if (pend >= npat) pend = npat - 1;
2136  int pstart = p0 - Dpat;
2137  if (pstart < 0) pstart = 0;
2138 
2139  //arr.Clear();
2140  int nseg = 0;
2141  int n = 0;
2142  for(int i=pstart; i <=pend; i++ ) {
2143  pat = GetPattern(i);
2144  if(!pat) continue;
2145  n = pat->FindCompliments(ss,arr,nsig,nsigt);
2146  nseg += n;
2147  }
2148 
2149  return nseg;
2150 }
Definition: EdbPattern.h:280
int FindCompliments(EdbSegP &s, TObjArray &arr, float nsig, float nsigt)
Definition: EdbPattern.cxx:1447
Float_t Z() const
Definition: EdbPattern.h:87
ss
Definition: energy.C:62
int pid[1000]
Definition: m2track.cpp:13

◆ GetPattern()

EdbPattern * EdbPatternsVolume::GetPattern ( int  id) const
1888 {
1889  if(Npatterns()>id) return (EdbPattern*)ePatterns->At(id);
1890  else return 0;
1891 }

◆ GetPatternByPID()

EdbPattern * EdbPatternsVolume::GetPatternByPID ( int  pid) const
2046 {
2047  // Return pattern having PID() == pid.
2048  // If there is no such pattern, return a NULL pattern.
2049  //
2050  // This is important because some codings (libShower for example).
2051  // rely on getting Patterns by the PIDs.
2052 
2053  EdbPattern *pat=0;
2054  for(int i=0; i<Npatterns(); i++) {
2055  pat = GetPattern(i);
2056  if (GetPattern(i)->PID() == pid ) return pat;
2057  }
2058 
2059  if (gEDBDEBUGLEVEL>2)
2060  if (pat == 0) cout << "EdbPattern* EdbPatternsVolume::GetPatternNext() WARNING: pattern is NULL ! Check your input!" << endl;
2061  return NULL;
2062 }
gEDBDEBUGLEVEL
Definition: energy.C:7
#define NULL
Definition: nidaqmx.h:84
Definition: Flexmotn.h:102

◆ GetPatternByPlate()

EdbPattern * EdbPatternsVolume::GetPatternByPlate ( int  plate,
int  side 
)
1934 {
1935  EdbPattern *p=0;
1936  for(int i=0; i<Npatterns(); i++) {
1937  p = GetPattern(i);
1938  if(p) if( p->Plate()==plate && p->Side()==side ) return p;
1939  }
1940  return 0;
1941 }
Int_t plate
Definition: merge_Energy_SytematicSources_Electron.C:1
p
Definition: testBGReduction_AllMethods.C:8

◆ GetPatternByZ()

EdbPattern * EdbPatternsVolume::GetPatternByZ ( float  z,
float  tolerance = 5 
) const
2066 {
2067  // Return pattern having Z() == z +- tolerance(microns) due to roundings.
2068  // If there is no such pattern, return a NULL pattern.
2069  //
2070  // This is important because some codings (libShower for example).
2071  // rely on getting Patterns by the Z.
2072  // Warning: If tolerance is to big, there is not a unique solution anymore
2073 
2074  EdbPattern *pat=0;
2075  for(int i=0; i<Npatterns(); i++) {
2076  pat = GetPattern(i);
2077  if ( TMath::Abs(GetPattern(i)->Z() - z)<tolerance ) return pat;
2078  }
2079 
2080  if (gEDBDEBUGLEVEL>2)
2081  if (pat == 0) cout << "EdbPattern* EdbPatternsVolume::GetPatternNext() WARNING: pattern is NULL ! Check your input!" << endl;
2082  return NULL;
2083 }
Float_t Z() const
Definition: EdbPattern.h:379

◆ GetPatternNext()

EdbPattern * EdbPatternsVolume::GetPatternNext ( float  z,
int  dir 
) const
2024 {
2025  // Return next pattern in either downstream (dir=+1) (i.e. Z gets bigger)
2026  // or in either upstream (dir=-1) (i.e. Z gets smaller)
2027  // direction.
2028  // If the last/first pattern is already given and one ask therefor
2029  // for a pattern that does not exists, then return a NULL pattern.
2030 
2031  EdbPattern *pat=0;
2032  float dz=dir*99999999.;
2033  float zpat;
2034  for(int i=0; i<Npatterns(); i++) {
2035  zpat=GetPattern(i)->Z();
2036  if(dir>0) if(zpat>z) if(zpat-z<dz) {dz=zpat-z; pat=GetPattern(i);}
2037  if(dir<0) if(zpat<z) if(zpat-z>dz) {dz=zpat-z; pat=GetPattern(i);}
2038  }
2039  if (gEDBDEBUGLEVEL>2)
2040  if (pat == 0) cout << "EdbPattern* EdbPatternsVolume::GetPatternNext() WARNING: pattern is NULL ! Check your input!" << endl;
2041  return pat;
2042 }
brick dz
Definition: RecDispMC.C:107

◆ GetPatternPreceding()

EdbPattern * EdbPatternsVolume::GetPatternPreceding ( EdbPattern pat) const
2018 {
2019  return GetPatternNext(pat->Z(),-1);
2020 }
EdbPattern * GetPatternNext(float z, int dir) const
Definition: EdbPattern.cxx:2023

◆ GetPatternSucceding()

EdbPattern * EdbPatternsVolume::GetPatternSucceding ( EdbPattern pat) const
2012 {
2013  return GetPatternNext(pat->Z(),1);
2014 }

◆ GetPatternZLowestHighest()

EdbPattern * EdbPatternsVolume::GetPatternZLowestHighest ( Bool_t  lowestZ = kTRUE) const
1983 {
1984  // By default it returns the pattern with the lowest Z position. This is
1985  // NOT necessarily the first pattern of the patterns volume.
1986 
1987  if (Npatterns()==0) {
1988  Log(1,"EdbPatternsVolume::GetPatternZLowestHighest","ERROR: Attempt to get Pattern, but NO patterns are in EdbPatternsVolume!");
1989  return 0;
1990  }
1991  if (gEDBDEBUGLEVEL>3) cout << "EdbPatternsVolume::GetPatternZLowestHighest lowestZ = " << lowestZ << endl;
1992 
1993  EdbPattern *pat=0;
1994  pat=GetPattern(0);
1995  if (Npatterns()==1) return pat;
1996  float zpat0,zpat1;
1997  zpat0=GetPattern(0)->Z();
1998  zpat1=GetPattern(Npatterns()-1)->Z();
1999  if (gEDBDEBUGLEVEL>2) {
2000  cout << "EdbPatternsVolume Pattern At Position 0 has Z = " << zpat0 << endl;
2001  cout << "EdbPatternsVolume Pattern At Position last has Z = " << zpat1 << endl;
2002  }
2003  if (zpat0>zpat1) pat=GetPattern(Npatterns()-1);
2004  if (kTRUE==lowestZ) return pat;
2005  if (kFALSE==lowestZ && zpat0<zpat1) return GetPattern(Npatterns()-1);
2006  return GetPattern(0);
2007 }

◆ GetSegment()

EdbSegP* EdbPatternsVolume::GetSegment ( Long_t  vid) const
inline
412  {return GetPattern(Pid(vid))->GetSegment( Sid(vid) );}
Int_t Sid(Long_t vid) const
Definition: EdbPattern.h:409
Int_t Pid(Long_t vid) const
Definition: EdbPattern.h:408
EdbSegP * GetSegment(int i) const
Definition: EdbPattern.h:66

◆ InsertPattern()

EdbPattern * EdbPatternsVolume::InsertPattern ( EdbPattern pat,
Bool_t  descendingZ = 0 
)

1945 {
1946  // insert new pattern using it's Z as a main criteria for the positioning
1947  EdbPattern *p = GetPatternByPlate( pat->Plate(), pat->Side() );
1948  if(p) {
1949  Log(1,"EdbPatternsVolume::InsertPattern",
1950  "ERROR: Attempt to insert new pattern for already existing plate/side z = %f znew = %f",
1951  pat->Plate(), pat->Side(), p->Z(), pat->Z());
1952  return p;
1953  }
1954  AddPattern(pat);
1955  SortPatternsByZ(descendingZ);
1956  return pat;
1957 }
Int_t Side() const
Definition: EdbPattern.h:342
Int_t Plate() const
Definition: EdbPattern.h:340
void AddPattern(EdbPattern *pat)
Definition: EdbPattern.cxx:1867
void SortPatternsByZ(Bool_t descendingZ=0)
Definition: EdbPattern.cxx:1960
EdbPattern * GetPatternByPlate(int plate, int side)
Definition: EdbPattern.cxx:1933

◆ NextPattern()

EdbPattern * EdbPatternsVolume::NextPattern ( float  z,
int  dir 
) const
2087 {
2088  // Return next pattern in either downstream (dir=+1)
2089  // or in either upstream (dir=-1)
2090  // direction.
2091 
2092  EdbPattern *pat=0;
2093  float dz=dir*99999999.;
2094  float zpat;
2095  for(int i=0; i<Npatterns(); i++) {
2096  zpat=GetPattern(i)->Z();
2097  if(dir>0) if(zpat>z) if(zpat-z<dz) {dz=zpat-z; pat=GetPattern(i);}
2098  if(dir<0) if(zpat<z) if(zpat-z>dz) {dz=zpat-z; pat=GetPattern(i);}
2099  }
2100  return pat;
2101 }

◆ Npatterns()

Int_t EdbPatternsVolume::Npatterns ( ) const
inline
380  { if(ePatterns)
381  return ePatterns->GetEntriesFast();
382  else return 0; }

◆ PassProperties()

void EdbPatternsVolume::PassProperties ( EdbPatternsVolume pvol)
1896 {
1897  pvol.SetXYZ(eX,eY,eZ);
1898  EdbAffine2D a;
1899  EdbPattern *p=0;
1900 
1901  int npat = Npatterns();
1902  for(int i=0; i<npat; i++ ) {
1903  p = GetPattern(i);
1904  p->GetKeep(a);
1905  EdbPattern *psel = new EdbPattern( p->X(),p->Y(),p->Z() );
1906  psel->SetKeep( a.A11(), a.A12(), a.A21(), a.A22(), a.B1(),a.B2() );
1907  pvol.AddPattern(psel);
1908  }
1909  pvol.SetPatternsID();
1910 }
void a()
Definition: check_aligned.C:59
Definition: EdbAffine.h:17
void SetXYZ(float x, float y, float z)
Definition: EdbPattern.h:375
void SetPatternsID()
Definition: EdbPattern.cxx:1763
Float_t eZ
Definition: EdbPattern.h:352

◆ Pid()

Int_t EdbPatternsVolume::Pid ( Long_t  vid) const
inline
408 { return vid/1000000; }

◆ Print()

void EdbPatternsVolume::Print ( ) const
1854 {
1855  int npat = Npatterns();
1856  printf("\nEdbPatternsVolume with %d patterns\n",npat);
1857  EdbPattern *pat=0;
1858  for(int i=0; i<npat; i++ ) {
1859  pat = GetPattern(i);
1860  printf(" id=%3d pid=%3d x:y:z = %12.3f %12.3f %12.3f n= %8d ScanID = %s \tside=%d\n",
1861  pat->ID(), pat->PID(), pat->X(),pat->Y(),pat->Z(),pat->N(), pat->ScanID().AsString(), pat->Side() );
1862  }
1863  printf("\n");
1864 }
char * AsString() const
Definition: EdbID.cxx:24
int PID() const
Definition: EdbPattern.h:329
EdbID ScanID() const
Definition: EdbPattern.h:339
int ID() const
Definition: EdbPattern.h:328
Float_t Y() const
Definition: EdbPattern.h:86
Float_t X() const
Definition: EdbPattern.h:85

◆ PrintAff()

void EdbPatternsVolume::PrintAff ( ) const
1812 {
1813  EdbAffine2D a;
1814  int npat = Npatterns();
1815  for(int i=0; i<npat; i++ ) {
1816  GetPattern(i)->GetKeep(a);
1817  printf(" %3d (%5d) Z=%13.3f ",i,GetPattern(i)->NAff(), GetPattern(i)->Z() ); a.Print();
1818  }
1819 }
virtual const EdbAffine2D * GetKeep() const
Definition: EdbVirtual.h:175

◆ PrintStat() [1/2]

void EdbPatternsVolume::PrintStat ( EdbPattern pat) const
1849 {
1850 }

◆ PrintStat() [2/2]

void EdbPatternsVolume::PrintStat ( Option_t *  opt = "") const
1823 {
1824  int npat = Npatterns();
1825  printf("\nVolume statistics for %d patterns\n",npat);
1826 
1827  float dx,dy;
1828  EdbPattern *pat=0;
1829  printf("pat# \t segments \t dX \t\tdY \t meanDist \n");
1830  for(int i=0; i<npat; i++ ) {
1831  pat = GetPattern(i);
1832  if(pat) {
1833  dx = pat->Xmax() - pat->Xmin();
1834  dy = pat->Ymax()- pat->Ymin();
1835  printf(" %d\t %d\t %10.2f \t %10.2f \t %10.4f \n",
1836  i, pat->GetN(),dx,dy, TMath::Sqrt(dx*dy/pat->GetN()) );
1837  }
1838  }
1839 
1840  npat=Npatterns();
1841  for(int i=0; i<npat; i++ ) {
1842  pat = GetPattern(i);
1843  if(pat) if(pat->Cell()) pat->Cell()->PrintStat();
1844  }
1845 }
Int_t GetN() const
Definition: EdbPattern.h:65
void PrintStat() const
Definition: TIndexCell.cpp:264

◆ Set0()

void EdbPatternsVolume::Set0 ( )
1746 {
1747  eX=0; eY=0; eZ=0;
1748  eDescendingZ=0;
1749 }
Bool_t eDescendingZ
"pid:id1:chi2:id2" - all found couples
Definition: EdbPattern.h:361

◆ SetPatternsID()

void EdbPatternsVolume::SetPatternsID ( )
1764 {
1765  int npat = Npatterns();
1766  for(int i=0; i<npat; i++ )
1767  GetPattern(i)->SetID(i);
1768 }

◆ SetXYZ()

void EdbPatternsVolume::SetXYZ ( float  x,
float  y,
float  z 
)
inline
375 { eX=x; eY=y; eZ=z; }

◆ Shift()

void EdbPatternsVolume::Shift ( float  x,
float  y 
)
1915 {
1916  EdbAffine2D aff;
1917  aff.ShiftX(x);
1918  aff.ShiftY(y);
1919 
1920  int npat = Npatterns();
1921  for(int i=0; i<npat; i++)
1922  GetPattern(i)->Transform(&aff);
1923 }
void ShiftX(float d)
Definition: EdbAffine.h:64
void ShiftY(float d)
Definition: EdbAffine.h:65
virtual void Transform(const EdbAffine2D *a)
Definition: EdbVirtual.cxx:154

◆ Sid()

Int_t EdbPatternsVolume::Sid ( Long_t  vid) const
inline
409 { return vid%1000000; }

◆ SortPatternsByZ()

void EdbPatternsVolume::SortPatternsByZ ( Bool_t  descendingZ = 0)
1961 {
1962  int n = Npatterns();
1963  int *ind = new int[n];
1964  float *z = new float[n];
1965  for(int i=0; i<Npatterns(); i++) {
1966  ind[i] = i;
1967  z[i] = GetPattern(i)->Z();
1968  }
1969  TMath::Sort(n,z,ind,descendingZ);
1970  TObjArray *pnew = new TObjArray(ePatterns->GetSize());
1971  for(int i=0; i<n; i++) pnew->Add(GetPattern(ind[i]));
1972  ePatterns->Clear();
1973  delete ePatterns;
1974  ePatterns = pnew;
1975  delete ind;
1976  delete z;
1977 }

◆ Transform()

void EdbPatternsVolume::Transform ( const EdbAffine2D aff)
1772 {
1773  int npat = Npatterns();
1774  for(int i=0; i<npat; i++ ) {
1775  GetPattern(i)->Transform(aff);
1776  GetPattern(i)->TransformARot(aff);
1777  }
1778 }
void TransformARot(const EdbAffine2D *affA)
Definition: EdbPattern.cxx:401

◆ Vid()

Long_t EdbPatternsVolume::Vid ( int  pid,
int  sid 
) const
inline
407 { return pid*1000000+sid; }

◆ X()

Float_t EdbPatternsVolume::X ( ) const
inline
377 {return eX;}

◆ Xmean()

Float_t EdbPatternsVolume::Xmean ( )
2154 {
2155  if (Npatterns()==0) return 0;
2156  EdbPattern* pat = GetPattern(0);
2157  Double_t s=0;
2158  int n=pat->N(); if(n<1) return 0;
2159  for(int i=0; i<n; i++) s += pat->GetSegment(i)->eX;
2160  s /= n;
2161  return (float)s;
2162 }
Float_t eX
Definition: EdbSegP.h:28
EdbSegP * s
Definition: tlg2pattern.C:32

◆ Y()

Float_t EdbPatternsVolume::Y ( ) const
inline
378 {return eY;}

◆ Ymean()

Float_t EdbPatternsVolume::Ymean ( )
2166 {
2167  if (Npatterns()==0) return 0;
2168  EdbPattern* pat = GetPattern(0);
2169  Double_t s=0;
2170  int n=pat->N(); if(n<1) return 0;
2171  for(int i=0; i<n; i++) s += pat->GetSegment(i)->eY;
2172  s /= n;
2173  return (float)s;
2174 }
Float_t eY
Definition: EdbSegP.h:28

◆ Z()

Float_t EdbPatternsVolume::Z ( ) const
inline
379 {return eZ;}

Member Data Documentation

◆ eDescendingZ

Bool_t EdbPatternsVolume::eDescendingZ

"pid:id1:chi2:id2" - all found couples

◆ ePatterns

TObjArray* EdbPatternsVolume::ePatterns

◆ ePatternsCell

TIndexCell* EdbPatternsVolume::ePatternsCell

"vidt:vids" - connected segments cell

◆ eTracksCell

TIndexCell* EdbPatternsVolume::eTracksCell

◆ eX

Float_t EdbPatternsVolume::eX
private

◆ eY

Float_t EdbPatternsVolume::eY
private

◆ eZ

Float_t EdbPatternsVolume::eZ
private

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