FEDRA emulsion software from the OPERA Collaboration
EdbDataProc Class Reference

#include <EdbDataSet.h>

Inheritance diagram for EdbDataProc:
Collaboration diagram for EdbDataProc:

Public Member Functions

void AjustZ (int doZ)
 
void Align (int alignFlag)
 
void AlignLinkTracks (int alg=0, int alignFlag=0)
 
int CheckCCD ()
 
int CheckShrinkage (EdbPVRec *ali, int couple, float &shr1, float &shr2)
 
void CloseCouplesTree (TTree *tree)
 
void CorrectAngles ()
 
 EdbDataProc ()
 ============================================================================== More...
 
 EdbDataProc (const char *file)
 ============================================================================== More...
 
 EdbDataProc (int npl, TArrayI &ids, TArrayF &zs)
 
EdbPVRecExtractDataVolume (EdbSegP &v, int plmin, int plmax, float accept[4], int datatype=0)
 
EdbPVRecExtractDataVolume (EdbTrackP &tr, float binx=20, float bint=10, int datatype=0)
 
EdbPVRecExtractDataVolumeF (EdbTrackP &tr, float binx=20, float bint=10, int datatype=0)
 
void FillCouplesTree (TTree *tree, EdbPVRec *al, int fillraw=0)
 
void FineAlignment (int doFine)
 
void FineAlignmentTracks ()
 
EdbDataSetGetDataSet ()
 
EdbPVRecGetPVR () const
 
EdbVertexGetVertexFromTree (EdbVertexRec &vertexrec, const char *fname, const int vertexID)
 
int InitVolume (EdbPVRec *ali, int datatype=0, TIndex2 *trseg=0)
 
int InitVolume (int datatype=0, const char *rcut="1")
 
int InitVolumeRaw (EdbPVRec *ali)
 
int InitVolumeTracks (EdbPVRec *ali, const char *rcut)
 
int Link ()
 
int Link (EdbDataPiece &piece)
 
void LinkRawTracks (int alg=0)
 
void LinkTracks (int alg=0, float p=-1.)
 
void LinkTracksC (int alg=0, float p=-1.)
 
TIndex2MakeTracksSegmentsList (EdbPVRec &ali)
 
int NoUpdate () const
 
int Process ()
 
EdbPVRecPVR () const
 
void SetNoUpdate (int nu)
 
void SetPVR (EdbPVRec *pvr)
 
int ShrinkCorr ()
 
virtual ~EdbDataProc ()
 

Static Public Member Functions

static int LinkTracksWithFlag (EdbPVRec *ali, float p, float probmin, int nsegmin, int maxgap, int flag, float mass=0.1396)
 
static int MakeTracksTree (EdbPVRec *ali=0, const char *file="linked_tracks.root")
 
static int MakeTracksTree (TObjArray &tracks, float xv=0, float yv=0, const char *file="linked_tracks.root")
 
static int MakeVertexTree (TObjArray &vtxarr, const char *file)
 
static int ReadTracksTree (EdbPVRec &ali, const char *fname="linked_tracks.root", const char *rcut="t.eFlag>-1&&nseg>2&&t.eProb>.01")
 
static int ReadVertexTree (EdbVertexRec &vertexrec, const char *fname, const char *rcut, std::map< int, EdbTrackP * > &trackID_map)
 
static int ReadVertexTree (EdbVertexRec &vertexrec, const char *fname, const char *rcut, TObjArray *builttracks=0)
 

Private Attributes

EdbDataSeteDataSet
 
int eNoUpdate
 
EdbPVRecePVR
 

Constructor & Destructor Documentation

◆ EdbDataProc() [1/3]

EdbDataProc::EdbDataProc ( )

==============================================================================

1589 {
1590  eDataSet=0;
1591  eNoUpdate=1;
1592  ePVR = new EdbPVRec();
1593 }
EdbDataSet * eDataSet
Definition: EdbDataSet.h:184
int eNoUpdate
Definition: EdbDataSet.h:188
EdbPVRec * ePVR
Definition: EdbDataSet.h:186
Definition: EdbPVRec.h:148

◆ EdbDataProc() [2/3]

EdbDataProc::EdbDataProc ( int  npl,
TArrayI &  ids,
TArrayF &  zs 
)

1605 {
1606  // Special constructor (requested by Nicolai) set everything as default as possible
1607 
1608  eDataSet = new EdbDataSet();
1609  ePVR = 0;
1610  eNoUpdate = 0;
1611 
1612  if( npl>ids.GetSize() ) return;
1613  if( npl>zs.GetSize() ) return;
1614 
1615  ePVR = new EdbPVRec();
1616  EdbPattern *pat =0;
1617  for(int i=0; i<npl; i++) {
1618  pat = new EdbPattern( 0,0, zs.At(i) );
1619  pat->SetPID(ids.At(i));
1620  ePVR->AddPattern(pat);
1621  }
1622  ePVR->SetPatternsID();
1623 
1624  ePVR->SetScanCond( new EdbScanCond() );
1625  ePVR->SetCouplesAll();
1626 }
Definition: EdbDataSet.h:143
void SetCouplesAll()
Definition: EdbPVRec.cxx:974
void SetScanCond(EdbScanCond *scan)
Definition: EdbPVRec.h:171
Definition: EdbPattern.h:280
void SetPID(int pid)
Definition: EdbPattern.h:319
void AddPattern(EdbPattern *pat)
Definition: EdbPattern.cxx:1867
void SetPatternsID()
Definition: EdbPattern.cxx:1763
Definition: EdbScanCond.h:10

◆ EdbDataProc() [3/3]

EdbDataProc::EdbDataProc ( const char *  file)

==============================================================================

1597 {
1598  eDataSet = new EdbDataSet(file);
1599  ePVR = 0;
1600  eNoUpdate=0;
1601 }
TFile * file
Definition: write_pvr.C:3

◆ ~EdbDataProc()

EdbDataProc::~EdbDataProc ( )
virtual

1630 {
1631  if(eDataSet) delete eDataSet;
1632  if(ePVR) delete ePVR;
1633 }

Member Function Documentation

◆ AjustZ()

void EdbDataProc::AjustZ ( int  doZ)

2248 {
2249  EdbPVRec *ali = new EdbPVRec();
2250  InitVolume(ali);
2251  ali->Link();
2252  ali->FillTracksCell();
2253  ali->SelectLongTracks(doZ);
2255  ali->FineCorrZnew();
2256  for(int i=0; i<ali->Npatterns(); i++)
2257  if(!NoUpdate()) eDataSet->GetPiece(i)->UpdateZPar(0,ali->GetPattern(i)->Z());
2258 }
EdbPVRec * ali
Definition: align.C:1
int UpdateZPar(int layer, float z)
Definition: EdbDataSet.cxx:513
int NoUpdate() const
Definition: EdbDataSet.h:226
int InitVolume(int datatype=0, const char *rcut="1")
Definition: EdbDataSet.cxx:2071
EdbDataPiece * GetPiece(int id)
Definition: EdbDataSet.h:162
int FineCorrZnew()
Definition: EdbPVRec.cxx:2185
int SelectLongTracks(int nsegments)
Definition: EdbPVRec.cxx:2290
int MakeSummaryTracks()
Definition: EdbPVRec.cxx:2276
void FillTracksCell()
Definition: EdbPVRec.cxx:1315
int Link()
Definition: EdbPVRec.cxx:1183
Int_t Npatterns() const
Definition: EdbPattern.h:380
EdbPattern * GetPattern(int id) const
Definition: EdbPattern.cxx:1887
Float_t Z() const
Definition: EdbPattern.h:87

◆ Align()

void EdbDataProc::Align ( int  doAlign)

2232 {
2233  EdbPVRec *ali = new EdbPVRec();
2234  InitVolume(ali);
2235 
2236  ali->Align(doAlign);
2237 
2238  if(gEDBDEBUGLEVEL>1) ali->PrintAff();
2239  EdbAffine2D aff;
2240  for(int i=0; i<ali->Npatterns(); i++) {
2241  ali->GetPattern(i)->GetKeep(aff);
2242  if(!NoUpdate()) eDataSet->GetPiece(i)->UpdateAffPar(0,aff);
2243  }
2244 }
Definition: EdbAffine.h:17
int UpdateAffPar(int layer, EdbAffine2D &aff)
Definition: EdbDataSet.cxx:493
int Align(int alignFlag)
Definition: EdbPVRec.cxx:1206
void PrintAff() const
Definition: EdbPattern.cxx:1811
virtual const EdbAffine2D * GetKeep() const
Definition: EdbVirtual.h:175
gEDBDEBUGLEVEL
Definition: energy.C:7

◆ AlignLinkTracks()

void EdbDataProc::AlignLinkTracks ( int  alg = 0,
int  doAlign = 0 
)

2480 {
2481  EdbPVRec *ali = new EdbPVRec();
2482  InitVolume(ali);
2483 
2484  ali->Align(doAlign);
2485  if(gEDBDEBUGLEVEL>1) ali->PrintAff();
2486  EdbAffine2D aff;
2487  for(int i=0; i<ali->Npatterns(); i++) {
2488  ali->GetPattern(i)->GetKeep(aff);
2489  if(!NoUpdate()) eDataSet->GetPiece(i)->UpdateAffPar(0,aff);
2490  }
2491 
2492  ali->Link();
2493  Log(2,"EdbDataProc::AlignLinkTracks","link ok");
2494 
2495 // if(alg==1) {
2496 // ali->MakeHoles();
2497 // ali->Link();
2498 // printf("link ok\n");
2499 // }
2500 
2501  ali->FillTracksCell();
2502 
2503  TTree *cptree=EdbDataPiece::InitCouplesTree("linked_couples.root","RECREATE");
2504  FillCouplesTree(cptree, ali,0);
2505  CloseCouplesTree(cptree);
2506 
2508 }
bool Log(int level, const char *location, const char *fmt,...)
Definition: EdbLog.cxx:75
int InitCouplesTree(const char *mode="READ")
Definition: EdbDataSet.cxx:1244
void FillCouplesTree(TTree *tree, EdbPVRec *al, int fillraw=0)
Definition: EdbDataSet.cxx:1745
void CloseCouplesTree(TTree *tree)
Definition: EdbDataSet.cxx:1814
static int MakeTracksTree(EdbPVRec *ali=0, const char *file="linked_tracks.root")
Definition: EdbDataSet.cxx:2511

◆ CheckCCD()

int EdbDataProc::CheckCCD ( )

1637 {
1638  if(!eDataSet) return 0;
1639  EdbDataPiece *piece;
1640  int ndef=0;
1641  int np=eDataSet->N();
1642  for(int i=0; i<np; i++) {
1643  piece = eDataSet->GetPiece(i);
1644  ndef = piece->CheckCCD();
1645  if(ndef<0) { Log(2,"EdbDataProc::CheckCCD","skip piece"); continue; }
1646  Log(1,"EdbDataProc::CheckCCD","piece %s: eliminated defects: %d",piece->GetName(),ndef);
1647  piece->WriteCuts();
1648  piece->CloseRun();
1649  }
1650  return np;
1651 }
Definition: EdbDataSet.h:25
void WriteCuts()
Definition: EdbDataSet.cxx:559
int CheckCCD(int maxentr=2000)
Definition: EdbDataSet.cxx:947
void CloseRun()
Definition: EdbDataSet.cxx:105
int N() const
Definition: EdbDataSet.h:161

◆ CheckShrinkage()

int EdbDataProc::CheckShrinkage ( EdbPVRec ali,
int  couple,
float &  shr1,
float &  shr2 
)

1825 {
1826  EdbPatCouple *patc = ali->GetCouple(couple);
1827  if(!patc) return 0;
1828 
1829  EdbSegCouple *sc=0;
1830  EdbSegP *s1=0, *s2=0;
1831  double dz,tx,ty,t,t1,t2,sumt1=0,sumt2=0;
1832  int nsum=0;
1833 
1834  int nc=patc->Ncouples();
1835  for( int ic=0; ic<nc; ic++ ) {
1836  sc = patc->GetSegCouple(ic);
1837 
1838  if(sc->CHI2()>1.5) continue;
1839 
1840  s1 = patc->Pat1()->GetSegment(sc->ID1());
1841  s2 = patc->Pat2()->GetSegment(sc->ID2());
1842 
1843  dz = s2->Z() - s1->Z();
1844  tx = (s2->X() - s1->X())/dz;
1845  ty = (s2->Y() - s1->Y())/dz;
1846 
1847  t = TMath::Sqrt( tx*tx + ty*ty );
1848  if(t<.1) continue;
1849  if(t>.45) continue;
1850  t1 = TMath::Sqrt( s1->TX()*s1->TX() + s1->TY()*s1->TY() );
1851  t2 = TMath::Sqrt( s2->TX()*s2->TX() + s2->TY()*s2->TY() );
1852 
1853  nsum++;
1854  sumt1 += t1/t;
1855  sumt2 += t2/t;
1856  }
1857 
1858  if(nsum<1) return 0;
1859 
1860  shr1 = sumt1/nsum;
1861  shr2 = sumt2/nsum;
1862 
1863  return nsum;
1864 }
brick dz
Definition: RecDispMC.C:107
TTree * t
Definition: check_shower.C:4
EdbPatCouple * GetCouple(int i) const
Definition: EdbPVRec.h:190
Definition: EdbPVRec.h:27
EdbPattern * Pat2()
Definition: EdbPVRec.h:90
EdbPattern * Pat1()
Definition: EdbPVRec.h:89
EdbSegCouple * GetSegCouple(int i) const
Definition: EdbPVRec.h:85
int Ncouples() const
Definition: EdbPVRec.h:80
Definition: EdbSegCouple.h:14
int ID2() const
Definition: EdbSegCouple.h:53
int ID1() const
Definition: EdbSegCouple.h:52
float CHI2() const
Definition: EdbSegCouple.h:58
Definition: EdbSegP.h:18
Float_t TX() const
Definition: EdbSegP.h:172
Float_t X() const
Definition: EdbSegP.h:170
Float_t Z() const
Definition: EdbSegP.h:150
Float_t Y() const
Definition: EdbSegP.h:171
Float_t TY() const
Definition: EdbSegP.h:173
EdbSegP * GetSegment(int i) const
Definition: EdbPattern.h:66
EdbSegP * s1
Definition: tlg2pattern.C:30
EdbSegP * s2
Definition: tlg2pattern.C:31

◆ CloseCouplesTree()

void EdbDataProc::CloseCouplesTree ( TTree *  tree)

1815 {
1816  tree->AutoSave();
1817  TFile *f=0;
1818  f = tree->GetCurrentFile();
1819  if (f) SafeDelete(f);
1820  tree=0;
1821 }
FILE * f
Definition: RecDispMC.C:150

◆ CorrectAngles()

void EdbDataProc::CorrectAngles ( )

1868 {
1869  EdbDataPiece *piece;
1870  int npieces = eDataSet->N();
1871  Log(2,"EdbDataProc::CorrectAngles","npieces = %d",npieces);
1872  if(!npieces) return;
1873 
1874  for(int i=0; i<npieces; i++ ) {
1875  piece = eDataSet->GetPiece(i);
1876  if(piece) piece->CorrectAngles();
1877  }
1878 }
int CorrectAngles()
Definition: EdbDataSet.cxx:880

◆ ExtractDataVolume() [1/2]

EdbPVRec * EdbDataProc::ExtractDataVolume ( EdbSegP seg,
int  plmin,
int  plmax,
float  acc[4],
int  datatype = 0 
)

1922 {
1923  // datatype: 0 - base track
1924  // 1 - up
1925  // 2 - down
1926  // 100 - raw?
1927 
1928  if(!ePVR) return 0;
1929  int npat = ePVR->Npatterns();
1930 
1931  EdbPVRec *ali = new EdbPVRec();
1932 
1933  Log(2,"EdbDataProc::ExtractDataVolume","Select Data %d in EdbPVRec with %d patterns:",
1934  datatype, npat);
1935 
1936  float dz, min[5], max[5];
1937  EdbPattern *pat=0;
1938 
1939  for(int i=0; i<npat; i++) {
1940 
1941  pat = ePVR->GetPattern(i);
1942  if(!pat) continue;
1943 
1944  dz = pat->Z() - seg.Z();
1945 
1946  min[0] = seg.X() + dz*seg.TX() - acc[0];
1947  min[1] = seg.Y() + dz*seg.TY() - acc[1];
1948  max[0] = seg.X() + dz*seg.TX() + acc[0];
1949  max[1] = seg.Y() + dz*seg.TY() + acc[1];
1950 
1951  min[2] = -.6; max[2] = .6;
1952  min[3] = -.6; max[3] = .6;
1953  min[4] = 0.; max[4] = 100.;
1954 
1956  }
1957 
1958  return ali;
1959 }
Int_t npat
Definition: Xi2HatStartScript.C:33
float min(TClonesArray *t)
Definition: bitview.cxx:275
int max
Definition: check_shower.C:41
EdbPattern * ExtractSubPattern(float min[5], float max[5], int MCevt=-1)
Definition: EdbPattern.cxx:1593

◆ ExtractDataVolume() [2/2]

EdbPVRec * EdbDataProc::ExtractDataVolume ( EdbTrackP tr,
float  binx = 20,
float  bint = 10,
int  datatype = 0 
)

2012 {
2013  // datatype: 0 - base track
2014  // 1 - up
2015  // 2 - down
2016  // 100 - raw?
2017 
2018  if(!ePVR) return 0;
2019  int npat = ePVR->Npatterns();
2020 
2021  EdbPVRec *ali = new EdbPVRec();
2022 
2023  Log(2,"EdbDataProc::ExtractDataVolume","Select Data %d in EdbPVRec with %d patterns",
2024  datatype, npat);
2025 
2026  float min[5], max[5];
2027 
2028  float dx = binx*TMath::Sqrt(tr.SX()*tr.N());
2029  float dy = binx*TMath::Sqrt(tr.SY()*tr.N());
2030  float dtx = bint*TMath::Sqrt(tr.STX()*tr.N());
2031  float dty = bint*TMath::Sqrt(tr.STY()*tr.N());
2032 
2033  float dz = (tr.GetSegment(tr.N()-1)->Z() - tr.GetSegment(0)->Z());
2034  float tx = (tr.GetSegment(tr.N()-1)->X() - tr.GetSegment(0)->X())/dz;
2035  float ty = (tr.GetSegment(tr.N()-1)->Y() - tr.GetSegment(0)->Y())/dz;
2036 
2037  Log(2,"EdbDataProc::ExtractDataVolume","select segments with acceptance: %f %f [microns] %f %f [mrad]",
2038  dx,dy,dtx*1000,dty*1000);
2039 
2040  EdbPattern *pat = 0;
2041  EdbPattern *spat = 0;
2042  int nseg =0;
2043 
2044  for(int i=0; i<npat; i++) {
2045 
2046  pat = ePVR->GetPattern(i);
2047  if(!pat) continue;
2048 
2049  dz = pat->Z() - tr.Z() + 107.; //TODO
2050 
2051  min[0] = tr.X() + dz*tx - dx;
2052  max[0] = tr.X() + dz*tx + dx;
2053  min[1] = tr.Y() + dz*ty - dy;
2054  max[1] = tr.Y() + dz*ty + dy;
2055  min[2] = tx - dtx;
2056  max[2] = tx + dtx;
2057  min[3] = ty - dty;
2058  max[3] = ty + dty;
2059  min[4] = 0.;
2060  max[4] = 100.;
2061 
2062  spat = pat->ExtractSubPattern(min,max);
2063  nseg += spat->N();
2064  ali->AddPattern( spat );
2065  }
2066  Log(2,"EdbDataProc::ExtractDataVolume","%d segments are selected",nseg);
2067  return ali;
2068 }
TTree * tr
Definition: Shower_E_FromShowerRoot.C:5
Int_t N() const
Definition: EdbPattern.h:89
Double_t X
Definition: tlg2pattern.C:77
Double_t Y
Definition: tlg2pattern.C:77

◆ ExtractDataVolumeF()

EdbPVRec * EdbDataProc::ExtractDataVolumeF ( EdbTrackP tr,
float  binx = 20,
float  bint = 10,
int  datatype = 0 
)

1964 {
1965  if(!ePVR) return 0;
1966  int npat = ePVR->Npatterns();
1967  EdbPVRec *ali = new EdbPVRec();
1968  Log(2,"EdbDataProc::ExtractDataVolumeF","Select Data %d in EdbPVRec with %d patterns:",
1969  datatype, npat);
1970 
1971  EdbSegP ss; // the "selector" segment
1972  ss.SetCOV( tr.GetSegment(0)->COV() );
1973 
1974  float dz = (tr.GetSegment(tr.N()-1)->Z() - tr.GetSegment(0)->Z());
1975  float tx = (tr.GetSegment(tr.N()-1)->X() - tr.GetSegment(0)->X())/dz;
1976  float ty = (tr.GetSegment(tr.N()-1)->Y() - tr.GetSegment(0)->Y())/dz;
1977 
1978  ss.SetTX(tx);
1979  ss.SetTY(ty);
1980  ss.SetX(tr.X());
1981  ss.SetY(tr.Y());
1982  ss.SetZ(tr.Z());
1983 
1984  if(gEDBDEBUGLEVEL>2) ss.Print();
1985 
1986  EdbPattern *pat = 0;
1987  EdbPattern *spat = 0;
1988  int nseg =0;
1989 
1990  TObjArray arr;
1991 
1992  for(int i=0; i<npat; i++) {
1993  pat = ePVR->GetPattern(i);
1994  if(!pat) continue;
1995  ss.PropagateTo(pat->Z());
1996  nseg += pat->FindCompliments(ss,arr,binx,bint);
1997  }
1998 
1999  spat = new EdbPattern(0,0,0);
2000  for(int i=0; i<arr.GetEntriesFast(); i++)
2001  spat->AddSegment( *((EdbSegP*)(arr.At(i))) );
2002 
2003  ali->AddPattern( spat );
2004 
2005  Log(2,"EdbDataProc::ExtractDataVolumeF","%d segments are selected",nseg);
2006  return ali;
2007 }
int FindCompliments(EdbSegP &s, TObjArray &arr, float nsig, float nsigt)
Definition: EdbPattern.cxx:1447
EdbSegP * AddSegment(int i, EdbSegP &s)
Definition: EdbPattern.cxx:71
ss
Definition: energy.C:62

◆ FillCouplesTree()

void EdbDataProc::FillCouplesTree ( TTree *  tree,
EdbPVRec al,
int  fillraw = 0 
)

1746 {
1747  tree->GetDirectory()->cd();
1748 
1749  Log(2,"EdbDataProc::FillCouplesTree","fill couples tree...");
1750 
1751  EdbPatCouple *patc=0;
1752  float xv = al->X();
1753  float yv = al->Y();
1754 
1755  int pid1,pid2;
1756  EdbSegCouple *cp=0;
1757  EdbSegP *s1=0;
1758  EdbSegP *s2=0;
1759  EdbSegP *s=0;
1760 
1761  tree->SetBranchAddress("pid1",&pid1);
1762  tree->SetBranchAddress("pid2",&pid2);
1763  tree->SetBranchAddress("xv" ,&xv);
1764  tree->SetBranchAddress("yv" ,&yv);
1765  tree->SetBranchAddress("cp" ,&cp);
1766  tree->SetBranchAddress("s1." ,&s1);
1767  tree->SetBranchAddress("s2." ,&s2);
1768  tree->SetBranchAddress("s." ,&s );
1769 
1770  if(fillraw) {
1771  // **** fill tree with raw segments ****
1772  EdbPattern *pat=0;
1773  int nic;
1774  int nip=al->Npatterns();
1775  for( int ip=0; ip<nip; ip++ ) {
1776  pat = al->GetPattern(ip);
1777  pid1 = pat->ID();
1778  pid2 = -1;
1779  nic=pat->N();
1780  for( int ic=0; ic<nic; ic++ ) {
1781  s1 = pat->GetSegment(ic);
1782  tree->Fill();
1783  }
1784  }
1785  }
1786 
1787  // **** fill tree with found couples ****
1788 
1789  s = new EdbSegP();
1790 
1791  int nip=al->Ncouples();
1792  for( int ip=0; ip<nip; ip++ ) {
1793  patc = al->GetCouple(ip);
1794  pid1 = patc->Pat1()->ID();
1795  pid2 = patc->Pat2()->ID();
1796 
1797  int nic=patc->Ncouples();
1798  for( int ic=0; ic<nic; ic++ ) {
1799  cp = patc->GetSegCouple(ic);
1800  s1 = patc->Pat1()->GetSegment(cp->ID1());
1801  s2 = patc->Pat2()->GetSegment(cp->ID2());
1802  s = cp->eS;
1803  tree->SetBranchAddress("s." ,&s );
1804 
1805  s->SetID(tree->GetEntries()); // basetrack id will be the tree entry number
1806  EdbTraceBack::SetBaseTrackVid( *s, 0, 0, tree->GetEntries() ); //TODO: plate, piece if available
1807  tree->Fill();
1808  }
1809  }
1810 
1811 }
Int_t Ncouples() const
Definition: EdbPVRec.h:188
int ID() const
Definition: EdbPattern.h:328
Float_t Y() const
Definition: EdbPattern.h:378
Float_t X() const
Definition: EdbPattern.h:377
EdbSegP * eS
Definition: EdbSegCouple.h:24
void SetID(int id)
Definition: EdbSegP.h:125
static void SetBaseTrackVid(EdbSegP &s, int plate, int piece, int entry)
EdbSegP * s
Definition: tlg2pattern.C:32
EdbSegCouple * cp
Definition: tlg2pattern.C:29

◆ FineAlignment()

void EdbDataProc::FineAlignment ( int  doFine)

2401 {
2402  EdbPVRec ali;
2403  InitVolume(&ali);
2404  ali.Link();
2405  Log(2,"EdbDataProc::FineAlignment","link ok");
2406  ali.FillTracksCell();
2407 
2408  EdbAffine2D aff;
2409 
2410  int fctr=0;
2411  int fcMin = 49;
2412 
2413  int i;
2416  for( i=0; i<ali.Npatterns(); i++ ) {
2417  fctr = ali.FineCorrXY(i,aff,doFine);
2418  }
2419 
2422  for( i=0; i<ali.Npatterns(); i++ ) {
2423  fctr = ali.FineCorrXY(i,aff,doFine);
2424  }
2425 
2426  if(fctr>fcMin) {
2427  for( i=0; i<ali.Npatterns(); i++) {
2428  ali.GetPattern(i)->GetKeep(aff);
2429  if(!NoUpdate()) eDataSet->GetPiece(i)->UpdateAffPar(0,aff);
2430  }
2431  }
2432 
2435  float dz=0;
2436  float z = ali.GetPattern(ali.Npatterns()-1)->Z();
2437  for( i=ali.Npatterns()-2; i>=0; i-- ) {
2438  fctr = ali.FineCorrZ(i,dz);
2439  if(fctr<=fcMin) break;
2440  z -= dz;
2441  Log(2,"EdbDataProc::FineAlignment","dz = %f z = %f",dz,z);
2442  if(!NoUpdate()) eDataSet->GetPiece(i)->UpdateZPar(0,z);
2443  }
2444 
2447  for( i=0; i<ali.Npatterns(); i++ ) {
2448  fctr = ali.FineCorrTXTY(i,aff);
2449  if(fctr<=fcMin) break;
2450  if(gEDBDEBUGLEVEL>2) aff.Print();
2451  if(!NoUpdate()) eDataSet->GetPiece(i)->UpdateAffTPar(0,aff);
2452  }
2453 
2456  dz=0;
2457  z = ali.GetPattern(ali.Npatterns()-1)->Z();
2458  for( i=ali.Npatterns()-2; i>=0; i-- ) {
2459  fctr = ali.FineCorrZ(i,dz);
2460  if(fctr<=fcMin) break;
2461  z -= dz;
2462  Log(2,"EdbDataProc::FineAlignment","dz = %f z = %f",dz,z);
2463  if(!NoUpdate()) eDataSet->GetPiece(i)->UpdateZPar(0,z);
2464  }
2465 
2468  float shr=0;
2469  for( i=0; i<ali.Npatterns(); i++ ) {
2470  fctr = ali.FineCorrShr(i,shr);
2471  if(fctr<=fcMin) break;
2472  eDataSet->GetPiece(i)->CorrectShrinkage(0,shr);
2473  if(!NoUpdate()) eDataSet->GetPiece(i)->UpdateShrPar(0);
2474  }
2475 
2476 }
void Print(Option_t *opt="") const
Definition: EdbAffine.cxx:52
int UpdateAffTPar(int layer, EdbAffine2D &aff)
Definition: EdbDataSet.cxx:534
int UpdateShrPar(int layer)
Definition: EdbDataSet.cxx:474
void CorrectShrinkage(int layer, float shr)
Definition: EdbDataSet.cxx:468
int FineCorrXY(int ipat, EdbAffine2D &aff, int flag)
Definition: EdbPVRec.cxx:2090
int FineCorrTXTY(int ipat, EdbAffine2D &aff)
Definition: EdbPVRec.cxx:2121
int FineCorrZ(int ipat, float &dz)
Definition: EdbPVRec.cxx:2152
int FineCorrShr(int ipat, float &shr)
Definition: EdbPVRec.cxx:2247

◆ FineAlignmentTracks()

void EdbDataProc::FineAlignmentTracks ( )

2139 {
2140  InitVolume(100);
2141  EdbPVRec *ali = PVR();
2142 
2143  EdbAffine2D aff,afft;
2144 
2145  int fctr=0,fctr0=10000, fcMin=50;
2146 
2147  for( int i=0; i<ali->Npatterns(); i++ ) {
2148  fctr = ali->FineCorrF(i,aff,afft);
2149  if(fctr<fctr0) fctr0=fctr;
2150  Log(2,"EdbDataProc::FineAlignmentTracks","fctr = %d",fctr);
2151  }
2152 
2153  if(fctr0>fcMin) {
2154  for( int i=0; i<ali->Npatterns(); i++) {
2155  ali->GetPattern(i)->GetKeep(aff);
2156  if(!NoUpdate()) eDataSet->GetPiece(i)->UpdateAffPar(0,aff);
2157 
2158  //if(!NoUpdate()) eDataSet->GetPiece(i)->UpdateAffTPar(0,afft);
2159  }
2160  }
2161 }
EdbPVRec * PVR() const
Definition: EdbDataSet.h:197
int FineCorrF(int ipat, EdbAffine2D &aff, EdbAffine2D &afft)
Definition: EdbPVRec.cxx:2035

◆ GetDataSet()

EdbDataSet* EdbDataProc::GetDataSet ( )
inline
196 {return eDataSet;}

◆ GetPVR()

EdbPVRec* EdbDataProc::GetPVR ( ) const
inline
198 {return ePVR;}

◆ GetVertexFromTree()

EdbVertex * EdbDataProc::GetVertexFromTree ( EdbVertexRec vertexrec,
const char *  fname,
const int  vertexID 
)
2855 {
2856  //reading vertex tree, getting only the vertex I need
2857  map<int,EdbTrackP*>emptymap;
2858  ReadVertexTree(vertexrec, fname, Form("vID==%i",vertexID),emptymap); //vertex is added to EdbPVRec
2859 
2860  EdbVertex *myvertex;
2861  EdbPVRec *ali = vertexrec.ePVR;
2862  //looking for myvertex (when called more than once, ali keeps adding vertices)
2863  for (int ivtx = 0; ivtx<ali->eVTX->GetEntriesFast();ivtx++){
2864  EdbVertex *v1 = (EdbVertex*) ali->eVTX->At(ivtx);
2865  if (v1->ID()==vertexID) myvertex = v1;
2866  }
2867 
2868  return myvertex;
2869 
2870  }
static int ReadVertexTree(EdbVertexRec &vertexrec, const char *fname, const char *rcut, std::map< int, EdbTrackP * > &trackID_map)
TObjArray * eVTX
Definition: EdbPVRec.h:162
EdbPVRec * ePVR
Definition: EdbVertex.h:206
Definition: EdbVertex.h:68
Int_t ID() const
Definition: EdbVertex.h:126
const char * fname
Definition: mc2raw.cxx:41

◆ InitVolume() [1/2]

int EdbDataProc::InitVolume ( EdbPVRec ali,
int  datatype = 0,
TIndex2 trseg = 0 
)

TO CHECK!!!

2165 {
2166  if (!eDataSet) Log(2,"EdbDataProc::InitVolume","Warning. eDataSet is NULL");
2167 
2168  EdbScanCond *cond = eDataSet->GetPiece(0)->GetCond(0);
2169  ali->SetScanCond( cond );
2170 
2171  EdbDataPiece *piece;
2172  int npieces = eDataSet->N();
2173  Log(2,"EdbDataProc::InitVolume","npieces = %d",npieces);
2174  if(!npieces) return 0;
2175 
2176  //TTree *cptree=0;
2177  int i;
2178 
2179  EdbPattern *pat=0;
2180  EdbPattern *p1=0;
2181  EdbPattern *p2=0;
2182 
2183  for(i=0; i<npieces; i++ ) {
2184  piece = eDataSet->GetPiece(i);
2185  if(!piece->InitCouplesTree("READ")) Log(1," EdbDataProc::InitVolume","no tree %d",i);
2186 
2187  pat = new EdbPattern( 0.,0., piece->GetLayer(0)->Z(),100 );
2188  pat->SetPID(i);
2189  //pat->SetSegmentsPID(); //TO CHECK!!
2190  if(datatype==10) {
2191  p1 = new EdbPattern( 0.,0., piece->GetLayer(0)->Z() + piece->GetLayer(1)->Z() );
2192  p2 = new EdbPattern( 0.,0., piece->GetLayer(0)->Z() + piece->GetLayer(2)->Z() );
2193  p1->SetPID(i);
2194  p2->SetPID(i);
2195  }
2196 
2197  piece->GetCPData_new( pat,p1,p2,trseg );
2198 
2199  ali->AddPattern( pat );
2200  if(datatype==10) {
2201  ali->AddPattern( p1 );
2202  ali->AddPattern( p2 );
2203  }
2204  piece->CloseCPData();
2205  }
2206 
2207  float x0 = eDataSet->GetPiece(npieces-1)->GetLayer(0)->X();
2208  float y0 = eDataSet->GetPiece(npieces-1)->GetLayer(0)->Y();
2209  //ali->Centralize();
2210  ali->Centralize(x0,y0);
2211 
2212  int npat = ali->Npatterns();
2213  for(i=0; i<npat; i++ ) {
2214  pat = ali->GetPattern(i);
2215  pat->SetSegmentsZ();
2216  pat->Transform( eDataSet->GetPiece(pat->PID())->GetLayer(0)->GetAffineXY() );
2217  pat->TransformA( eDataSet->GetPiece(pat->PID())->GetLayer(0)->GetAffineTXTY() );
2218  pat->TransformShr( eDataSet->GetPiece(pat->PID())->GetLayer(0)->Shr() );
2219  }
2220  ali->SetPatternsID();
2221 
2223 
2224  ali->SetCouplesAll();
2225  ali->SetChi2Max(cond->Chi2PMax());
2226  ali->SetOffsetsMax(cond->OffX(),cond->OffY());
2227  return npieces;
2228 }
void trseg(int event=40, const char *def)
Definition: check_vertex.C:44
int GetCPData_new(EdbPattern *pat, EdbPattern *p1=0, EdbPattern *p2=0, TIndex2 *trseg=0)
Definition: EdbDataSet.cxx:797
void CloseCPData()
Definition: EdbDataSet.cxx:91
EdbScanCond * GetCond(int id)
Definition: EdbDataSet.h:89
EdbLayer * GetLayer(int id)
Definition: EdbDataSet.h:86
float Y() const
Definition: EdbLayer.h:77
float X() const
Definition: EdbLayer.h:76
EdbAffine2D * GetAffineXY()
Definition: EdbLayer.h:120
float Shr() const
Definition: EdbLayer.h:90
EdbAffine2D * GetAffineTXTY()
Definition: EdbLayer.h:121
float Z() const
Definition: EdbLayer.h:78
void SetSegmentsErrors()
Definition: EdbPVRec.cxx:1125
void SetChi2Max(float chi)
Definition: EdbPVRec.h:186
void SetOffsetsMax(float ox, float oy)
Definition: EdbPVRec.cxx:924
int PID() const
Definition: EdbPattern.h:329
void Centralize()
Definition: EdbPattern.cxx:1781
virtual void Transform(const EdbAffine2D *a)
Definition: EdbVirtual.cxx:154
float OffY() const
Definition: EdbScanCond.h:70
float Chi2PMax() const
Definition: EdbScanCond.h:86
float OffX() const
Definition: EdbScanCond.h:69
void TransformA(const EdbAffine2D *affA)
Definition: EdbPattern.cxx:367
void TransformShr(const float shr)
Definition: EdbPattern.cxx:384
void SetSegmentsZ()
Definition: EdbPattern.cxx:275

◆ InitVolume() [2/2]

int EdbDataProc::InitVolume ( int  datatype = 0,
const char *  rcut = "1" 
)

2072 {
2073  // datatype: 0 - couples basetrack data
2074  // 10 - couples full data
2075  // 100 - tracks only
2076  // 1000 - tracks and basetracks
2077 
2078  if(!ePVR) ePVR = new EdbPVRec();
2079  if(datatype==100) return InitVolumeTracks(ePVR, rcut);
2080 
2081  if(datatype==1000) {
2082  InitVolumeTracks(ePVR, rcut);
2084  delete ePVR;
2085  ePVR = new EdbPVRec();
2086  int n = InitVolume(ePVR, datatype, trseg);
2087  n += InitVolumeTracks(ePVR, rcut);
2088  return n;
2089  }
2090 
2091  return InitVolume(ePVR, datatype);
2092 }
int InitVolumeTracks(EdbPVRec *ali, const char *rcut)
Definition: EdbDataSet.cxx:2096
TIndex2 * MakeTracksSegmentsList(EdbPVRec &ali)
Definition: EdbDataSet.cxx:3018
Definition: EdbMath.h:49

◆ InitVolumeRaw()

int EdbDataProc::InitVolumeRaw ( EdbPVRec ali)

1882 {
1883  EdbScanCond *cond = eDataSet->GetPiece(0)->GetCond(1);
1884  ali->SetScanCond( cond );
1885 
1886  EdbDataPiece *piece;
1887  int npieces = eDataSet->N();
1888  Log(2,"EdbDataProc::InitVolumeRaw","npieces = %d",npieces);
1889  if(!npieces) return 0;
1890 
1891  for(int i=0; i<npieces; i++ ) {
1892  piece = eDataSet->GetPiece(i);
1893  piece->GetRawData(ali);
1894  }
1895 
1896  float x0 = eDataSet->GetPiece(npieces-1)->GetLayer(0)->X();
1897  float y0 = eDataSet->GetPiece(npieces-1)->GetLayer(0)->Y();
1898  ali->Centralize(x0,y0);
1899 
1900  for(int j=0; j<npieces; j++ ) {
1901  for(int ip=0; ip<2; ip++ ) {
1902  int i = 2*j+ip;
1903  ali->GetPattern(i)->SetSegmentsZ();
1907  }
1908  }
1909  ali->SetPatternsID();
1911 
1912  ali->SetCouplesAll();
1913  ali->SetChi2Max(cond->Chi2PMax());
1914  ali->SetOffsetsMax(cond->OffX(),cond->OffY());
1915  return npieces;
1916 }
int GetRawData(EdbPVRec *ali)
Definition: EdbDataSet.cxx:1088

◆ InitVolumeTracks()

int EdbDataProc::InitVolumeTracks ( EdbPVRec ali,
const char *  rcut 
)

2097 {
2098  EdbScanCond *cond=0;
2099  if(eDataSet) {
2100  cond= eDataSet->GetPiece(0)->GetCond(0);
2101  ali->SetScanCond( cond );
2102 
2103  EdbDataPiece *piece;
2104  int npieces = eDataSet->N();
2105  Log(2,"EdbDataProc::InitVolumeTracks","npieces = %d",npieces);
2106  if(!npieces) return 0;
2107 
2108  if( ali->Npatterns() == 0) { // case of segments already readed
2109  EdbAffine2D *a=0;
2110  EdbPattern *pat=0;
2111  for(int i=0; i<npieces; i++ ) {
2112  piece = eDataSet->GetPiece(i);
2113  pat = new EdbPattern( 0.,0., piece->GetLayer(0)->Z(),100 );
2114  a = piece->GetLayer(0)->GetAffineXY();
2115  pat->SetKeep( a->A11(),a->A12(),a->A21(),a->A22(), a->B1(),a->B2() );
2116  pat->SetPID(i);
2117  ali->AddPattern( pat );
2118  }
2119  ali->SetPatternsID();
2120  }
2121  }
2122  else {
2123  cond = new EdbScanCond();
2124  ali->SetScanCond( cond );
2125  }
2126 
2127  ReadTracksTree( *ali, "linked_tracks.root", rcut );
2128 
2129  ali->SetSegmentsTracks(); // reset the id of tracks????? to check that it is really necessary!!
2131  ali->SetCouplesAll();
2132  ali->SetChi2Max(cond->Chi2PMax());
2133  ali->SetOffsetsMax(cond->OffX(),cond->OffY());
2134  return ali->Npatterns();
2135 }
void a()
Definition: check_aligned.C:59
static int ReadTracksTree(EdbPVRec &ali, const char *fname="linked_tracks.root", const char *rcut="t.eFlag>-1&&nseg>2&&t.eProb>.01")
Definition: EdbDataSet.cxx:2937
void SetSegmentsTracks()
Definition: EdbPVRec.cxx:2470
virtual void SetKeep(float a11, float a12, float a21, float a22, float b1, float b2)
Definition: EdbVirtual.cxx:142

◆ Link() [1/2]

int EdbDataProc::Link ( )
1655 {
1656  if (!eDataSet) return 0;
1657  EdbDataPiece *piece;
1658  Int_t np = eDataSet->N();
1659  for (Int_t i = 0; i < np; i++) {
1660  piece = eDataSet->GetPiece(i);
1661  if (piece->TakePiecePar() >= 0) {
1662  if (gEDBDEBUGLEVEL > 2) piece->Print();
1663  piece->WriteCuts();
1664  if (piece->Flag() == 1) Link(*piece);
1665  }
1666  piece->CloseRun();
1667  }
1668  return np;
1669 }
int TakePiecePar()
Definition: EdbDataSet.cxx:281
int Flag() const
Definition: EdbDataSet.h:84
void Print()
Definition: EdbDataSet.cxx:166
int Link()
Definition: EdbDataSet.cxx:1654

◆ Link() [2/2]

int EdbDataProc::Link ( EdbDataPiece piece)

!! 0

1673 {
1674  EdbPVRec *ali;
1675 
1676  //const char *file_name=piece.GetNameCP();
1677  //TTree *cptree=EdbDataPiece::InitCouplesTree(file_name,"RECREATE");
1678  //if(!cptree) return 0;
1679 
1680  if (!piece.InitCouplesTree("RECREATE")) return 0;
1681 
1682  EdbScanCond *cond = piece.GetCond(1);
1683  int ntot=0, nareas=0;
1684  float shr1=1,shr2=1;
1685  double shrtot1=0., shrtot2=0.;
1686  int nshr=0,nshrtot=0;
1687 
1688  for( int irun=0; irun<piece.Nruns(); irun++ ) {
1689  nareas = piece.MakeLinkListCoord(irun);
1690  //nareas = piece.MakeLinkListArea(irun);
1691  Log(2,"EdbDataProc::Link","%d areas mapped",nareas);
1692  if (nareas <= 0) continue;
1693 
1694  for (Int_t i = 0; i < nareas; i++ ) {
1695 
1696  ali = new EdbPVRec();
1697  ali->SetScanCond( cond );
1698 
1699  piece.GetAreaData(ali,i,1);
1700  piece.GetAreaData(ali,i,2);
1701 
1702  //ali->SetSegmentsErrors();
1703 
1704  ali->SetCouplesAll();
1705  ali->SetChi2Max(cond->Chi2PMax());
1706 
1707  for(int ic=0; ic<ali->Ncouples(); ic++)
1708  ali->GetCouple(ic)->SetCHI2mode(cond->Chi2Mode());
1709 
1710  ali->Link();
1711 
1712  if( ShrinkCorr() ) {
1713  shr1 = 1;
1714  shr2 = 1;
1715  nshr = CheckShrinkage( ali,0, shr1, shr2 );
1716  if(nshr) {
1717  nshrtot += nshr;
1718  shrtot1 += nshr*shr1;
1719  shrtot2 += nshr*shr2;
1720  }
1721  }
1722 
1723  FillCouplesTree( piece.eCouplesTree, ali,piece.GetOUTPUT());
1724 
1725  delete ali;
1726  }
1727  ntot+=nareas;
1728  if(nshrtot>3) {
1729  shrtot1 = shrtot1/nshrtot;
1730  shrtot2 = shrtot2/nshrtot;
1731  if(nshrtot<20) Log(1,"EdbDataProc::Link","WARNING: unreliable shrinkage correction - low statistics");
1732  Log(2,"EdbDataProc::Link","Shrinkage correction(%d): %f %f", nshrtot, (float)shrtot1,(float)shrtot2);
1733  piece.CorrectShrinkage( 1, (float)shrtot1 );
1734  piece.CorrectShrinkage( 2, (float)shrtot2 );
1735  if(!NoUpdate()) piece.UpdateShrPar(1);
1736  if(!NoUpdate()) piece.UpdateShrPar(2);
1737  }
1738  }
1739  int ncp = piece.eCouplesTree->GetEntries();
1740  piece.CloseCPData();
1741  return ncp;
1742 }
int GetOUTPUT() const
Definition: EdbDataSet.h:106
int GetAreaData(EdbPVRec *ali, int const area, int const side)
Definition: EdbDataSet.cxx:1142
int Nruns() const
Definition: EdbDataSet.h:83
TTree * eCouplesTree
Definition: EdbDataSet.h:54
int MakeLinkListCoord(int irun)
Definition: EdbDataSet.cxx:1309
int CheckShrinkage(EdbPVRec *ali, int couple, float &shr1, float &shr2)
Definition: EdbDataSet.cxx:1824
int ShrinkCorr()
Definition: EdbDataSet.h:228
void SetCHI2mode(int m)
Definition: EdbPVRec.h:103
int Chi2Mode() const
Definition: EdbScanCond.h:89

◆ LinkRawTracks()

void EdbDataProc::LinkRawTracks ( int  alg = 0)

2378 {
2379  EdbPVRec *ali = new EdbPVRec();
2380  InitVolumeRaw(ali);
2381  ali->Link();
2382  Log(2,"EdbDataProc::LinkRawTracks","link ok");
2383 
2384 // if(alg==1) {
2385 // ali->MakeHoles();
2386 // ali->Link();
2387 // printf("link ok\n");
2388 // }
2389 
2390  ali->FillTracksCell();
2391 
2392  TTree *cptree=EdbDataPiece::InitCouplesTree("linked_couples.root","RECREATE");
2393  FillCouplesTree(cptree, ali,0);
2394  CloseCouplesTree(cptree);
2395 
2397 }
int InitVolumeRaw(EdbPVRec *ali)
Definition: EdbDataSet.cxx:1881

◆ LinkTracks()

void EdbDataProc::LinkTracks ( int  alg = 0,
float  p = -1. 
)

2315 {
2316  EdbPVRec *ali = new EdbPVRec();
2317  InitVolume(ali);
2318 
2319  Log(2,"EdbDataProc::LinkTracks","tracking: alg = %d \t p= %f", alg, p);
2320 
2321  ali->SetCouplesPeriodic(0,1);
2322  int ntr=0;
2323 
2324  ntr = LinkTracksWithFlag( ali, p, 0.05, 2, 3, 0 );
2325  //ntr = LinkTracksWithFlag( ali, p/4., 0.01, 2, 3, 1 );
2326  //if(merge>0) ali->MergeTracks(merge);
2327 
2328  if(alg==-1) { // this is a test option produce couples tree from the first 2 linked patterns
2329  TTree *cptree=EdbDataPiece::InitCouplesTree("linked_couples.root","RECREATE");
2330  FillCouplesTree(cptree, ali,0);
2331  CloseCouplesTree(cptree);
2332  }
2333 
2334  float mass=0.139; //TODO!
2335  ali->FitTracks( p, mass ); // is important to call it before MakeTracksTree!
2336 
2338 
2339  // After the EdbPVRec is created and filled, set it also as the EdbDataProc own object.
2340  SetPVR(ali);
2341  if (gEDBDEBUGLEVEL>2) {
2342  ali->Print();
2343  }
2344  Log(2,"EdbDataProc::LinkTracks","EdbDataProc::LinkTracks...Done.");
2345  return;
2346 }
static int LinkTracksWithFlag(EdbPVRec *ali, float p, float probmin, int nsegmin, int maxgap, int flag, float mass=0.1396)
Definition: EdbDataSet.cxx:2261
void SetPVR(EdbPVRec *pvr)
Definition: EdbDataSet.h:199
void SetCouplesPeriodic(int istart, int iperiod)
Definition: EdbPVRec.cxx:981
void FitTracks(float p=10., float mass=0.139, TObjArray *gener=0, int design=0)
Definition: EdbPVRec.cxx:1889
void Print() const
Definition: EdbPattern.cxx:1853
float mass
Definition: check_vertex.C:21
p
Definition: testBGReduction_AllMethods.C:8

◆ LinkTracksC()

void EdbDataProc::LinkTracksC ( int  alg = 0,
float  p = -1. 
)

2350 {
2351  // special tracking procedure for carbonium dataset
2352 
2353  EdbPVRec *ali = new EdbPVRec();
2354  InitVolume(ali);
2355 
2356  Log(2,"EdbDataProc::LinkTracksC","carbonium tracking: alg = %d \t p= %f", alg, p);
2357 
2358  ali->SetCouplesPeriodic(0,1);
2359  LinkTracksWithFlag( ali, p, 0.01, 2, 3, 0 );
2360 
2361  ali->SetCouplesPeriodic(0,3);
2362  LinkTracksWithFlag( ali, p, 0.01, 2, 6, 1 );
2363 
2364  ali->SetCouplesPeriodic(1,3);
2365  LinkTracksWithFlag( ali, p, 0.01, 2, 6, 2 );
2366 
2367  ali->SetCouplesPeriodic(2,3);
2368  LinkTracksWithFlag( ali, p, 0.01, 2, 6, 3 );
2369 
2370  float mass=0.139; //TODO!
2371  ali->FitTracks( p, mass ); // is important to call it before MakeTracksTree!
2372 
2374 }

◆ LinkTracksWithFlag()

int EdbDataProc::LinkTracksWithFlag ( EdbPVRec ali,
float  p,
float  probmin,
int  nsegmin,
int  maxgap,
int  flag,
float  mass = 0.1396 
)
static

2262 {
2263  // p - momentum expected for tracks
2264  // probmin - minimum probability to accept tracks
2265  // nsegmin - min number of segments/track
2266  // maxgap - max gap permitted for propagation
2267  // flag - to be assigned for the tracks found in this pass
2268 
2269  int ntr0 = ali->Ntracks();
2270  ali->Link();
2271  ali->FillTracksCell();
2272  ali->MakeTracks(nsegmin,flag);
2273 
2274  int noProp=0;
2275  if(p<0) noProp=1;
2276  //if(p<0.01) p=4.; //TODO: this protection should be out of this function?
2277 
2278  int ntr = ali->Ntracks();
2279  float X0 = ali->GetScanCond()->RadX0();
2280  EdbTrackP *tr=0;
2281  for(int itr=ntr0; itr<ntr; itr++) {
2282  tr = ali->GetTrack(itr);
2283  tr->ClearF();
2284  if(p<0) tr->SetP(1.);
2285  else tr->SetP(p);
2286  tr->SetM(mass);
2287  tr->FitTrackKFS(false,X0);
2288  }
2289 
2290  if(!noProp)
2291  if( ali->Npatterns()>2 ) {
2292  ali->FillCell(50,50,0.015,0.015);
2293  for(int i=0; i<10; i++)
2294  if( ali->PropagateTracks(ali->Npatterns()-1,2, probmin, maxgap ) <1) break;
2295  }
2296 
2297  /*
2298  ntr = ali->Ntracks();
2299  for(int i=0; i<ntr; i++) {
2300  tr = ali->GetTrack(i);
2301  if(tr->Flag()<0) continue;
2302  if(tr->N()<5) tr->SetP(0.5);
2303  else tr->SetP(tr->P_MS());
2304  }
2305 
2306  for(int i=0; i<10; i++)
2307  if( ali->PropagateTracks(ali->Npatterns()-1,2, probmin, maxgap ) <1) break;
2308  */
2309 
2310  return ntr-ntr0;
2311 }
int MakeTracks(int nsegments=2, int flag=0)
Definition: EdbPVRec.cxx:1985
EdbScanCond const * GetScanCond()
Definition: EdbPVRec.h:172
EdbTrackP * GetTrack(int i) const
Definition: EdbPVRec.h:241
Int_t Ntracks() const
Definition: EdbPVRec.h:203
void FillCell(float stepx, float stepy, float steptx, float stepty)
Definition: EdbPVRec.cxx:1088
int PropagateTracks(int nplmax, int nplmin, float probMin=0.05, int ngapMax=3, int design=0)
Definition: EdbPVRec.cxx:2483
float RadX0() const
Definition: EdbScanCond.h:58
Definition: EdbPattern.h:118
float X0
Definition: emthickness.cpp:69
int nsegmin
Definition: check_vertex.C:23

◆ MakeTracksSegmentsList()

TIndex2 * EdbDataProc::MakeTracksSegmentsList ( EdbPVRec ali)
3019 {
3020  TIndex2 *itracks = 0;
3021  int nsegtot=0;
3022  EdbTrackP *tr=0;
3023  int ntr = ali.eTracks->GetEntriesFast();
3024 
3025  if(!ntr) return 0;
3026  Double_t *w = new Double_t[500000];
3027  itracks = new TIndex2();
3028 
3029  for(int i=0; i<ntr; i++) {
3030  tr = (EdbTrackP*)(ali.eTracks->At(i));
3031  if(!tr) continue;
3032  EdbSegP *s=0;
3033  int nseg=tr->N();
3034  for(int j=0; j<nseg; j++) {
3035  s = tr->GetSegment(j);
3036  if(!s) continue;
3037  w[nsegtot] = TIndex2::BuildValue( s->Vid(0), s->Vid(1) );
3038  nsegtot++;
3039  }
3040  }
3041  itracks->Set(0);
3042  itracks->BuildIndex(nsegtot,w);
3043  delete[] w;
3044  return itracks;
3045 }
TObjArray * eTracks
Definition: EdbPVRec.h:161
Int_t Vid(int i) const
Definition: EdbSegP.h:165
static Double_t BuildValue(Int_t major, Int_t minor)
Definition: EdbMath.h:57
void BuildIndex(int n, double *w)
Definition: EdbMath.cxx:359
void w(int rid=2, int nviews=2)
Definition: test.C:27

◆ MakeTracksTree() [1/2]

int EdbDataProc::MakeTracksTree ( EdbPVRec ali = 0,
const char *  file = "linked_tracks.root" 
)
static
2512 {
2513  if(!ali) return 0;
2514  TObjArray *trarr = ali->eTracks;
2515  if(!trarr) return 0;
2516  float xv=ali->X();
2517  float yv=ali->Y();
2518 
2519  return MakeTracksTree(*trarr,xv,yv, file);
2520 }

◆ MakeTracksTree() [2/2]

int EdbDataProc::MakeTracksTree ( TObjArray &  tracks,
float  xv = 0,
float  yv = 0,
const char *  file = "linked_tracks.root" 
)
static
2874 {
2875  Log(2,"EdbDataProc::MakeTracksTree","write tracks into %s ... ",file);
2876  TFile *fil = TFile::Open(file,"RECREATE");
2877  TTree *tracks= new TTree("tracks","tracks");
2878 
2879  EdbTrackP *track = new EdbTrackP(8); // why is this track initialised with 8 segments by default ???
2880  EdbSegP *tr = new EdbSegP();
2881  TClonesArray *segments = new TClonesArray("EdbSegP");
2882  TClonesArray *segmentsf = new TClonesArray("EdbSegP");
2883 
2884  int nseg,trid,npl,n0;
2885  float w=0.;
2886 
2887  tracks->Branch("trid",&trid,"trid/I");
2888  tracks->Branch("nseg",&nseg,"nseg/I");
2889  tracks->Branch("npl",&npl,"npl/I");
2890  tracks->Branch("n0",&n0,"n0/I");
2891  tracks->Branch("xv",&xv,"xv/F");
2892  tracks->Branch("yv",&yv,"yv/F");
2893  tracks->Branch("w",&w,"w/F");
2894  tracks->Branch("t.","EdbSegP",&tr,32000,99); // track data is now filled after using Copy method
2895  //tracks->Branch("t.","EdbSegP",&track,32000,99);
2896  tracks->Branch("s", &segments);
2897  tracks->Branch("sf",&segmentsf);
2898 
2899  int ntr = trarr.GetEntriesFast();
2900 
2901  for(int itr=0; itr<ntr; itr++) {
2902 
2903  track = (EdbTrackP*)(trarr.At(itr));
2904  tr->Copy(*track); //Using Copy method from EdbSegP avoids the cast
2905  tr->ForceCOV(track->COV());
2906  trid = track->ID();
2907  nseg = track->N();
2908  npl = track->Npl();
2909  n0 = track->N0();
2910 
2911  segments->Clear("C");
2912  segmentsf->Clear("C");
2913  nseg = track->N();
2914  w = track->Wgrains();
2915  EdbSegP *s=0,*sf=0;
2916  for(int is=0; is<nseg; is++) {
2917  s = track->GetSegment(is);
2918  if(s) new((*segments)[is]) EdbSegP( *s );
2919  sf = track->GetSegmentF(is);
2920  if(sf) new((*segmentsf)[is]) EdbSegP( *sf );
2921  }
2922 
2923  tr->SetVid( 0, tracks->GetEntries() ); // put track counter in t.eVid[1]
2924  tracks->Fill();
2925  // track->Clear(); // if this Clear() is written at this stage, the corresponding track in
2926  // the EdbPattern Volume (ali, eTracks) will also be cleared! This behavior is not
2927  // wanted, is it? So we do comment this out here ... (Frank, 09 26 2016)
2928  }
2929 
2930  tracks->Write();
2931  fil->Close();
2932  Log(2,"EdbDataProc::MakeTracksTree","%d tracks are written",ntr);
2933  return ntr;
2934 }
Definition: bitview.h:14
TTree * tracks
Definition: check_tr.C:19

◆ MakeVertexTree()

int EdbDataProc::MakeVertexTree ( TObjArray &  vtxarr,
const char *  file 
)
static
2523 {
2524  Log(2,"EdbDataProc::MakeVertexTree","write vertices into %s ... ",file);
2525  TFile *fil = TFile::Open(file,"RECREATE");
2526  TTree *vtx= new TTree("vtx","Reconstructed vertices in emulion");
2527 
2528  EdbSegP *tr = new EdbSegP();
2529  EdbTrackP *track = NULL;
2530 
2531  TClonesArray *tracks = new TClonesArray("EdbSegP"); //tracks are saved as EdbSegP, like in MakeTracksTree
2532  TClonesArray *segments = new TClonesArray("EdbSegP");
2533  TClonesArray *segmentsf = new TClonesArray("EdbSegP");
2534 
2535  //list of variables to be stored
2536 
2537  Float_t vx, vy, vz; //true reconstructed vertex position
2538  TMatrixD vCOV(3,3); //covariance matrix vertex
2539  Float_t meanvx, meanvy, meanvz; //track connection point
2540  Int_t vID = 0;
2541  Float_t maxaperture;
2542  Float_t probability;
2543  Int_t n;
2544  Int_t flag; //we need also the flag to check vertex type
2545  const Int_t maxdim = 1000; //maximum number of tracks associated to a vertex that can be saved in the tree
2546  //big arrays for containers of track variables
2547  Int_t TrackID[maxdim];
2548  Int_t nholes[maxdim];
2549  Int_t maxgap[maxdim];
2550  Int_t nseg[maxdim];
2551  Int_t npl[maxdim];
2552  Float_t TX[maxdim];
2553  Float_t TY[maxdim];
2554  Float_t impactparameter[maxdim];
2555  Int_t incoming[maxdim]; //coming from the vertex
2556  //MC information
2557  Int_t MCEventID[maxdim];
2558  Int_t MCTrackID[maxdim];
2559  Int_t MCTrackPdgCode[maxdim];
2560  Int_t MCMotherID[maxdim];
2561 
2562  //list of branches
2563  vtx->Branch("vID",&vID,"vID/I");
2564  vtx->Branch("flag",&flag,"flag/I");
2565  vtx->Branch("vx",&vx,"vx/F");
2566  vtx->Branch("vy",&vy,"vy/F");
2567  vtx->Branch("vz",&vz,"vz/F");
2568  vtx->Branch("vCOV",&vCOV);
2569  vtx->Branch("meanvx",&meanvx,"meanvx/F");
2570  vtx->Branch("meanvy",&meanvy,"meanvy/F");
2571  vtx->Branch("meanvz",&meanvz,"meanvz/F");
2572  vtx->Branch("maxaperture",&maxaperture,"maxaperture/F");
2573  //vtx->Branch("maxrmsthetaspace",&maxrmsthetaspace,"maxrmsthetaspace/F");
2574  vtx->Branch("probability",&probability,"probability/F");
2575  vtx->Branch("n",&n,"n/I");
2576  vtx->Branch("t.",&tracks); // track data is now filled after using Copy method
2577  //tracks->Branch("t.","EdbSegP",&track,32000,99);
2578  vtx->Branch("s", &segments);
2579  vtx->Branch("sf",&segmentsf);
2580  //track variables (they are array with the number of tracks as size)
2581  vtx->Branch("TrackID",&TrackID,"TrackID[n]/I");
2582  vtx->Branch("nseg",&nseg,"nseg[n]/I");
2583  vtx->Branch("npl",&npl,"npl[n]/I");
2584  vtx->Branch("nholes",&nholes,"nholes[n]/I"); //even more variables in this tree
2585  vtx->Branch("maxgap",&maxgap,"maxgap[n]/I");
2586  vtx->Branch("incoming",&incoming,"incoming[n]/I");
2587  vtx->Branch("impactparameter",&impactparameter,"impactparameter[n]/F");
2588  //inserting MCtrue information
2589  vtx->Branch("MCEventID", &MCEventID, "MCEventID[n]/I");
2590  vtx->Branch("MCTrackID",&MCTrackID,"MCTrackID[n]/I");
2591  vtx->Branch("MCTrackPdgCode",&MCTrackPdgCode,"MCTrackPdgCode[n]/I");
2592  vtx->Branch("MCMotherID",&MCMotherID,"MCMotherID[n]/I");
2593 
2594  int nvtx = vtxarr.GetEntriesFast();
2595  //START TREE FILLING
2596  for(int ivtx=0; ivtx<nvtx; ivtx++) {
2597  int itotalseg = 0;
2598  tracks->Clear("C");
2599  segments->Clear("C");
2600  segmentsf->Clear("C");
2601 
2602  EdbVertex* vertex = (EdbVertex*) (vtxarr.At(ivtx));
2603  if(vertex->Flag()<0) continue; //saving only 'true' vertices in the tree file and in the object
2604  vx=vertex->VX();
2605  vy=vertex->VY();
2606  vz=vertex->VZ();
2607  meanvx=vertex->X();
2608  meanvy=vertex->Y();
2609  meanvz=vertex->Z();
2610 
2611  //covariance matrix, need to do it by hand due to no known conversion command from SMatrix to TMatrix
2612  for (int irow = 0; irow < 3; irow++){
2613  for (int icolumn = 0; icolumn < 3; icolumn++){
2614  vCOV(irow,icolumn) = vertex->V()->VCOV()(irow,icolumn);
2615  }
2616  }
2617 
2618  n=vertex->N();
2619  maxaperture = vertex->MaxAperture();
2620  probability = vertex->V()->prob();
2621  flag = vertex->Flag();
2622  //adding vertex to list to be saved
2623  //loop on tracks //now it can be done offline (again)
2624  for (int itrk = 0; itrk < n; itrk++){
2625  //getting track and track variables to fill branches
2626  track = vertex->GetTrack(itrk);
2627  tr->Copy(*track);
2628 // tr->ForceCOV(track->COV());
2629  if(tr) new((*tracks)[itrk]) EdbSegP( *tr ); //adding track to trackclonesarray
2630  ((EdbSegP*) tracks->At(itrk))->ForceCOV(track->COV()); //default copy does NOT save COV corrrectly
2631  TrackID[itrk] = track->Track(); //the eTrack attribute of EdbSegP now allows association to original root tree
2632  nseg[itrk] = track->N();
2633  npl[itrk] = track->Npl();
2634  Int_t zpos = vertex->GetVTa(itrk)->Zpos();
2635  incoming[itrk] = zpos;
2636  nholes[itrk] = track->N0();
2637  maxgap[itrk] = track->CheckMaxGap();
2638  impactparameter[itrk] = vertex->GetVTa(itrk)->Imp();
2639  //Storing MCTrue information (of course for real data these values have no sense)
2640  MCEventID[itrk] = track->MCEvt();
2641  MCTrackID[itrk] = track->MCTrack();
2642  if(MCEventID[itrk]>-1){ //vertices from MC simulation, used Vid[0] and Aid[0] to store these information
2643  MCTrackPdgCode[itrk] = track->GetSegment(0)->Vid(0); //due to MakeTracksTree, Vid[0] is always 0
2644  MCMotherID[itrk] = track->Aid(0); //used to store MotherID information
2645  }
2646  else { //vertices from data, set default values
2647  MCTrackPdgCode[itrk] = -999;
2648  MCMotherID[itrk] = -999;
2649  }
2650  //w = track->Wgrains();
2651  EdbSegP *s=0,*sf=0;
2652  //loop on segments
2653  for(int is=0; is<nseg[itrk]; is++) {
2654  s = track->GetSegment(is);
2655  if(s) new((*segments)[itotalseg]) EdbSegP( *s );
2656  ((EdbSegP*) segments->At(itotalseg))->ForceCOV(s->COV()); //default copy does NOT save COV corrrectly
2657  sf = track->GetSegmentF(is);
2658  if(sf) new((*segmentsf)[itotalseg]) EdbSegP( *sf );
2659  ((EdbSegP*) segmentsf->At(itotalseg))->ForceCOV(sf->COV()); //default copy does NOT save COV corrrectly
2660  itotalseg++;
2661  }
2662 
2663  // track->SetVid( 0, tracks->GetEntries() ); // put track counter in t.eVid[1]
2664  }
2665  vtx->Fill();
2666  vID++; //now the number of elements in the tree and vertices is the same. vID starts from 0
2667  }
2668  vtx->Write();
2669  fil->Close();
2670  Log(2,"EdbDataProc::MakeVertexTree","%d vertices are written",nvtx);
2671  return nvtx;
2672 }
TMatrixD & COV() const
Definition: EdbSegP.h:120
Float_t Imp() const
Definition: EdbVertex.h:48
Int_t Zpos() const
Definition: EdbVertex.h:46
Float_t VX() const
Definition: EdbVertex.h:133
EdbTrackP * GetTrack(int i)
Definition: EdbVertex.h:141
Float_t X() const
Definition: EdbVertex.h:130
Int_t N() const
Definition: EdbVertex.h:121
VERTEX::Vertex * V() const
Definition: EdbVertex.h:154
Float_t VY() const
Definition: EdbVertex.h:134
Float_t VZ() const
Definition: EdbVertex.h:135
Float_t Z() const
Definition: EdbVertex.h:132
EdbVTA * GetVTa(int i)
Definition: EdbVertex.h:139
Int_t Flag() const
Definition: EdbVertex.h:124
Float_t MaxAperture()
Definition: EdbVertex.cxx:252
Float_t Y() const
Definition: EdbVertex.h:131
float prob() const
upper tail $\chi^2$ probability
Definition: VtVertex.C:237
Double_t TY
Definition: tlg2pattern.C:79
Double_t TX
Definition: tlg2pattern.C:79
#define NULL
Definition: nidaqmx.h:84

◆ NoUpdate()

int EdbDataProc::NoUpdate ( ) const
inline
226 { return eNoUpdate; }

◆ Process()

int EdbDataProc::Process ( )
inline
213 { return Link(); } // to be removed

◆ PVR()

EdbPVRec* EdbDataProc::PVR ( ) const
inline
197 {return ePVR;}

◆ ReadTracksTree()

int EdbDataProc::ReadTracksTree ( EdbPVRec ali,
const char *  fname = "linked_tracks.root",
const char *  rcut = "t.eFlag>-1&&nseg>2&&t.eProb>.01" 
)
static
2940 {
2941  TFile *f = TFile::Open(fname);
2942  if(!f) { Log(1,"EdbDataProc::ReadTracksTree","Error open file %s", fname); return 0; }
2943 
2944  TTree *tracks = (TTree*)f->Get("tracks");
2945  Int_t trid=0;
2946  Int_t nseg=0;
2947  Int_t npl=0;
2948  Int_t n0=0;
2949  Float_t xv=0.;
2950  Float_t yv=0.;
2951 
2952  int nentr = (int)(tracks->GetEntries());
2953  TCut cut = rcut;
2954  tracks->Draw(">>lst", cut );
2955  TEventList *lst = (TEventList*)gDirectory->GetList()->FindObject("lst");
2956  int nlst =lst->GetN();
2957  if(cut) Log(2,"EdbDataProc::ReadTracksTree","select %d of %d tracks by cut %s",nlst, nentr, cut.GetTitle() );
2958 
2959  TClonesArray *seg = new TClonesArray("EdbSegP", 60);
2960  TClonesArray *segf = new TClonesArray("EdbSegP", 60);
2961  EdbSegP *trk=0;
2962  EdbSegP *s1=0;
2963  EdbSegP *s1f=0;
2964 
2965  tracks->SetBranchAddress("trid", &trid);
2966  tracks->SetBranchAddress("nseg", &nseg);
2967  tracks->SetBranchAddress("npl", &npl);
2968  tracks->SetBranchAddress("n0", &n0);
2969  tracks->SetBranchAddress("xv", &xv);
2970  tracks->SetBranchAddress("yv", &yv);
2971  tracks->SetBranchAddress("sf", &segf);
2972  tracks->SetBranchAddress("s", &seg);
2973  tracks->SetBranchAddress("t.", &trk);
2974 
2975  EdbPattern *pat=0;
2976  int entr=0;
2977  for (int j=0; j<nlst; j++){
2978  entr = lst->GetEntry(j);
2979  tracks->GetEntry(entr);
2980 
2981  EdbTrackP *tr1 = new EdbTrackP();
2982  ((EdbSegP*)tr1)->Copy(*trk);
2983  tr1->ForceCOV(trk->COV());
2984  tr1->SetM(0.139); //TODO
2985 
2986  for(int i=0; i<nseg; i++) {
2987  s1 = (EdbSegP*)(seg->At(i));
2988  s1f = (EdbSegP*)(segf->At(i));
2989  pat = ali.GetPattern( s1->PID() );
2990  if(!pat) {
2991  Log(3,"EdbDataProc::ReadTracksTree","WARNING: no pattern with pid %d: creating new one!",s1->PID());
2992  pat = new EdbPattern( 0., 0., s1->Z() );
2993  pat->SetID(s1->PID());
2994  pat->SetScanID(s1->ScanID());
2995  ali.AddPatternAt(pat,s1->PID());
2996  }
2997  //This way it should be more clear which segment instance is added to the track
2998  EdbSegP *segtobeadded = pat->AddSegment(*s1);
2999  EdbSegP *segftobeadded = new EdbSegP(*s1f);
3000  segtobeadded->ForceCOV(s1->COV());
3001  segftobeadded->ForceCOV(s1f->COV());
3002 
3003  tr1->AddSegment( segtobeadded );
3004  tr1->AddSegmentF( segftobeadded );
3005  }
3006  tr1->SetSegmentsTrack(tr1->ID());
3007  tr1->SetCounters();
3008  //tr1->FitTrackKFS(true);
3009  tr1->SetTrack(trid); //providing trackid to eTrack so it will not be lost when trackID resets
3010  ali.AddTrack(tr1);
3011  }
3012 
3013  Log(2,"EdbDataProc::ReadTracksTree","%d tracks are read",nlst);
3014  return nlst;
3015 }
TCut cut
Definition: check_shower.C:6
void AddTrack(EdbTrackP *track)
Definition: EdbPVRec.h:246
void SetID(int id)
Definition: EdbPattern.h:318
void SetScanID(EdbID id)
Definition: EdbPattern.h:303
void AddPatternAt(EdbPattern *pat, int id)
Definition: EdbPattern.cxx:1873
void SetTrack(int trid)
Definition: EdbSegP.h:128
Int_t ID() const
Definition: EdbSegP.h:144
void ForceCOV(TMatrixD &cov)
Definition: EdbSegP.h:108
Int_t PID() const
Definition: EdbSegP.h:145
EdbID ScanID() const
Definition: EdbSegP.h:157
void AddSegmentF(EdbSegP *s)
Definition: EdbPattern.h:238
void AddSegment(EdbSegP *s)
Definition: EdbPattern.h:219
int SetSegmentsTrack(int id)
Definition: EdbPattern.h:252
void SetCounters()
Definition: EdbPattern.h:164
void SetM(float m)
Definition: EdbPattern.h:159

◆ ReadVertexTree() [1/2]

static int EdbDataProc::ReadVertexTree ( EdbVertexRec vertexrec,
const char *  fname,
const char *  rcut,
std::map< int, EdbTrackP * > &  trackID_map 
)
static

◆ ReadVertexTree() [2/2]

int EdbDataProc::ReadVertexTree ( EdbVertexRec vertexrec,
const char *  fname,
const char *  rcut,
TObjArray *  builttracks = 0 
)
static
2838  {
2839 
2840  map<int,EdbTrackP*>emptymap;
2841  if (builttracks){
2842  int ntracks = builttracks->GetEntriesFast();
2843 
2844  for (int itrk = 0; itrk < ntracks; itrk++){
2845  EdbTrackP * track = (EdbTrackP*) builttracks->At(itrk);
2846  emptymap[track->Track()] = track; //adding this trackID to map
2847  }
2848  }
2849 
2850  int nlst = ReadVertexTree( vertexrec, fname, rcut,emptymap);
2851  return nlst;
2852  }

◆ SetNoUpdate()

void EdbDataProc::SetNoUpdate ( int  nu)
inline
225 { eNoUpdate=nu; }

◆ SetPVR()

void EdbDataProc::SetPVR ( EdbPVRec pvr)
inline
199 {ePVR=pvr;}

◆ ShrinkCorr()

int EdbDataProc::ShrinkCorr ( )
inline
228 {return 1;}

Member Data Documentation

◆ eDataSet

EdbDataSet* EdbDataProc::eDataSet
private

◆ eNoUpdate

int EdbDataProc::eNoUpdate
private

◆ ePVR

EdbPVRec* EdbDataProc::ePVR
private

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