FEDRA emulsion software from the OPERA Collaboration
EdbVertexG Class Reference

#include <EdbDisplay.h>

Inheritance diagram for EdbVertexG:
Collaboration diagram for EdbVertexG:

Public Member Functions

virtual void DeleteVertex ()
 
virtual void DumpVertex ()
 
 EdbVertexG ()
 
 EdbVertexG (EdbDisplay *D)
 
virtual const char * GetName () const
 
virtual char * GetObjectInfo (int px, int py) const
 
virtual const char * GetTitle () const
 
virtual void InspectVertex ()
 
virtual void RemoveKink ()
 
virtual void SetAsWorking ()
 
void SetVertex (EdbVertex *v)
 
virtual void TestVertex ()
 
virtual ~EdbVertexG ()
 

Private Attributes

EdbDisplayeD
 
EdbVertexeV
 

Constructor & Destructor Documentation

◆ EdbVertexG() [1/2]

EdbVertexG::EdbVertexG ( )
inline
140 :TPolyMarker3D(1) {eV=0; eD=0;}
EdbVertex * eV
Definition: EdbDisplay.h:136
EdbDisplay * eD
Definition: EdbDisplay.h:137

◆ EdbVertexG() [2/2]

EdbVertexG::EdbVertexG ( EdbDisplay D)
inline
141 :TPolyMarker3D(1) {eV=0; eD=D;}

◆ ~EdbVertexG()

virtual EdbVertexG::~EdbVertexG ( )
inlinevirtual
142 {}

Member Function Documentation

◆ DeleteVertex()

void EdbVertexG::DeleteVertex ( )
virtual
1891 {
1892  EdbDisplay *eDs = 0;
1893  EdbVertex *eVs = 0;
1894  eDs = eD;
1895  eVs = eV;
1896  if (eDs && eVs)
1897  {
1898  if (eDs->eWait_Answer) return;
1899  if (eDs->eWorking == eVs)
1900  {
1901  eDs->DialogModifiedVTX();
1902  return;
1903  }
1904  if (eDs->eVertex == eVs)
1905  {
1906  eDs->CancelModifiedVTX();
1907  }
1908  if (eDs->eArrV)
1909  {
1910  eDs->eArrV->Remove((TObject *)eVs);
1911  eDs->eArrV->Compress();
1912  eDs->Draw();
1913  }
1914  else
1915  {
1916  if ((eDs->eArrV)->FindObject(eVs))
1917  {
1918  eDs->eArrV->Remove(eVs);
1919  eDs->eArrV->Compress();
1920  eDs->eVertex = 0;
1921  eDs->Draw();
1922  }
1923  }
1924  delete eVs;
1925  eDs->Draw();
1926  }
1927 }
virtual void Draw(Option_t *option="")
Definition: EdbDisplayBase.cxx:786
Definition: EdbDisplay.h:21
TObjArray * eArrV
Definition: EdbDisplay.h:43
void CancelModifiedVTX()
Definition: EdbDisplay.cxx:3220
EdbVertex * eVertex
Definition: EdbDisplay.h:48
Bool_t eWait_Answer
Definition: EdbDisplay.h:55
EdbVertex * eWorking
Definition: EdbDisplay.h:47
void DialogModifiedVTX()
Definition: EdbDisplay.cxx:4043
Definition: EdbVertex.h:68

◆ DumpVertex()

void EdbVertexG::DumpVertex ( )
virtual
33 {
34  if (eV) eV->Print();
35 }
void Print()
Definition: EdbVertex.cxx:328

◆ GetName()

const char * EdbVertexG::GetName ( ) const
virtual
56 {
57  static char name[] = "Vertex";
58  return name;
59 }
const char * name
Definition: merge_Energy_SytematicSources_Electron.C:24

◆ GetObjectInfo()

char * EdbVertexG::GetObjectInfo ( int  px,
int  py 
) const
virtual
63 {
64  static char coordinates[80];
65  if (eV->V())
66  sprintf(coordinates, "X = %.1f, Y = %.1f, Z = %.1f", eV->VX(), eV->VY(), eV->VZ());
67  else
68  sprintf(coordinates, "X = %.1f, Y = %.1f, Z = %.1f", eV->X(), eV->Y(), eV->Z());
69  return coordinates;
70 }
Float_t VX() const
Definition: EdbVertex.h:133
Float_t X() const
Definition: EdbVertex.h:130
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
Float_t Y() const
Definition: EdbVertex.h:131

◆ GetTitle()

const char * EdbVertexG::GetTitle ( ) const
virtual
45 {
46  static char title[80];
47  if (eV->V())
48  sprintf(title, "Vertex ID %d, Prongs %d, Prob %f", eV->ID(), eV->N(), eV->V()->prob());
49  else
50  sprintf(title, "Vertex ID %d, Prongs %d, Prob %f", eV->ID(), eV->N(), 1.);
51  return title;
52 }
Int_t ID() const
Definition: EdbVertex.h:126
Int_t N() const
Definition: EdbVertex.h:121
float prob() const
upper tail $\chi^2$ probability
Definition: VtVertex.C:237

◆ InspectVertex()

void EdbVertexG::InspectVertex ( )
virtual
39 {
40  if (eV) eV->Inspect();
41 }

◆ RemoveKink()

void EdbVertexG::RemoveKink ( )
virtual
1931 {
1932  EdbDisplay *eDs = 0;
1933  EdbVertex *eVs = 0;
1934  eDs = eD;
1935  eVs = eV;
1936  if (eDs && eVs)
1937  {
1938  if (eDs->eWait_Answer) return;
1939  if (eVs->N() != 2)
1940  {
1941  printf("Wrong vertex type - not a kink-like!\n");
1942  fflush(stdout);
1943  return;
1944  }
1945  EdbTrackP *etr = 0;
1946  for (int it=0; it<eVs->N(); it++)
1947  {
1948  etr = eVs->GetTrack(it);
1949  if (etr->VTAS() && etr->VTAE())
1950  {
1951  if (etr->VertexS() == eVs && etr->VertexE()->Flag() >= 0)
1952  {
1953  printf("Vertex track (at zmax) belong to another vertex (ID=%d) too - impossible delete it!\n", etr->VertexE()->ID());
1954  fflush(stdout);
1955  return;
1956  }
1957  if (etr->VertexE() == eVs && etr->VertexS()->Flag() >= 0)
1958  {
1959  printf("Vertex track (at zmin) belong to another vertex (ID=%d) too - impossible delete it!\n", etr->VertexS()->ID());
1960  fflush(stdout);
1961  return;
1962  }
1963  }
1964  }
1965  if (eDs->eWorking == eVs)
1966  {
1967  eDs->DialogModifiedVTX();
1968  return;
1969  }
1970  if (eDs->eVertex == eVs)
1971  {
1972  eDs->CancelModifiedVTX();
1973  }
1974  if (eDs->eArrV)
1975  {
1976  eDs->eArrV->Remove((TObject *)eVs);
1977  eDs->eArrV->Compress();
1978  eDs->Draw();
1979  }
1980  else
1981  {
1982  if ((eDs->eArrV)->FindObject(eVs))
1983  {
1984  eDs->eArrV->Remove(eVs);
1985  eDs->eArrV->Compress();
1986  eDs->eVertex = 0;
1987  eDs->Draw();
1988  }
1989  }
1990  EdbSegP *seg = 0;
1991  if (!eD->eTrack) eD->eTrack = new EdbTrackP();
1992  for (int it=0; it<eVs->N(); it++)
1993  {
1994  etr = eVs->GetTrack(it);
1995  for(int is=0; is<etr->N(); is++) {
1996  seg = etr->GetSegment(is);
1997  (eD->eTrack)->AddSegment((EdbSegP *)seg);
1998  }
1999  etr->SetFlag(-10);
2000  etr->SetSegmentsTrack(-2-(etr->ID()+1));
2001  if(eD->eArrTr) if((eD->eArrTr)->FindObject(etr))
2002  {
2003  eD->eArrTr->Remove(etr);
2004  eD->eArrTr->Compress();
2005  if (!(eD->eArrSegP)) eD->eArrSegP = new TObjArray();
2006  for(int is=0; is<etr->N(); is++) {
2007  seg = etr->GetSegment(is);
2008  if(eD->eArrSegP) if(!((eD->eArrSegP)->FindObject(seg))) eD->eArrSegP->Add(seg);
2009  }
2010  }
2011  if(eD->eArrTrSave) if((eD->eArrTrSave)->FindObject(etr))
2012  {
2013  eD->eArrTrSave->Remove(etr);
2014  eD->eArrTrSave->Compress();
2015  if (!(eD->eArrSegPSave)) eD->eArrSegPSave = new TObjArray();
2016  for(int is=0; is<etr->N(); is++) {
2017  seg = etr->GetSegment(is);
2018  if(eD->eArrSegPSave) if(!((eD->eArrSegPSave)->FindObject(seg))) eD->eArrSegPSave->Add(seg);
2019  }
2020  }
2021  }
2022  if(eD->eArrTr) eD->eArrTr->Compress();
2023  if(eD->eArrTrSave) eD->eArrTrSave->Compress();
2024  eVs->SetFlag(-11);
2025  eDs->Draw();
2026  float mass = etr->M();
2027  float momentum = etr->P();
2028  if (eD->eP > 0.) momentum = eD->eP;
2029  if (eD->eM > 0.) mass = eD->eM;
2030  (eD->eTrack)->SetM(mass);
2031  (eD->eTrack)->SetP(momentum);
2032  float X0 = 0.;
2033  if (eD->eVerRec) if ((eD->eVerRec)->ePVR) X0 = (((eD->eVerRec)->ePVR)->GetScanCond())->RadX0();
2034  (eD->eTrack)->FitTrackKFS(true, X0, 0);
2035  if (!eD->eArrTr) eD->eArrTr = new TObjArray();
2036  (eD->eArrTr)->Add(eD->eTrack);
2037  if (eD->eArrTrSave) (eD->eArrTrSave)->Add(eD->eTrack);
2038  eD->Draw();
2039  }
2040 }
FILE * stdout
Double_t eM
Definition: EdbDisplay.h:63
TObjArray * eArrTrSave
Definition: EdbDisplay.h:45
EdbVertexRec * eVerRec
Definition: EdbDisplay.h:40
TObjArray * eArrSegP
Definition: EdbDisplay.h:41
TObjArray * eArrTr
Definition: EdbDisplay.h:42
TObjArray * eArrSegPSave
Definition: EdbDisplay.h:44
Double_t eP
Definition: EdbDisplay.h:62
EdbTrackP * eTrack
Definition: EdbDisplay.h:51
Definition: EdbSegP.h:18
Int_t ID() const
Definition: EdbSegP.h:144
Float_t P() const
Definition: EdbSegP.h:149
void SetFlag(int flag)
Definition: EdbSegP.h:127
Definition: EdbPattern.h:118
EdbVertex * VertexS()
Definition: EdbPattern.cxx:1284
EdbVertex * VertexE()
Definition: EdbPattern.cxx:1291
Int_t N() const
Definition: EdbPattern.h:182
Float_t M() const
Definition: EdbPattern.h:160
int SetSegmentsTrack(int id)
Definition: EdbPattern.h:252
EdbVTA * VTAS() const
Definition: EdbPattern.h:148
EdbSegP * GetSegment(int i) const
Definition: EdbPattern.h:200
EdbVTA * VTAE() const
Definition: EdbPattern.h:149
EdbTrackP * GetTrack(int i)
Definition: EdbVertex.h:141
Int_t Flag() const
Definition: EdbVertex.h:124
float X0
Definition: emthickness.cpp:69
float mass
Definition: check_vertex.C:21
float momentum
Definition: check_vertex.C:20

◆ SetAsWorking()

void EdbVertexG::SetAsWorking ( )
virtual
1696 {
1697  char text[512];
1698  EdbTrackP *tr = 0;
1699  EdbDisplay *eDs = 0;
1700  EdbVertex *eVs = 0;
1701  eDs = eD;
1702  eVs = eV;
1703  if (eDs && eVs)
1704  {
1705  if (eDs->eVertex == eVs) return;
1706  if (eDs->eWait_Answer) return;
1707  if (eDs->eWorking)
1708  {
1709  eDs->DialogModifiedVTX();
1710  return;
1711  }
1712  if (eDs->eVertex)
1713  {
1714  eDs->CancelModifiedVTX();
1715  }
1716  if (eDs->eSegPM)
1717  {
1718  eDs->ClearSegmentEnv();
1719  }
1720  SetMarkerColor(kGreen);
1721  if (!(eDs->eArrV))
1722  {
1723  eDs->eArrV = new TObjArray(20);
1724  eDs->eArrV->Add((TObject *)eVs);
1725  if (!(eDs->eArrTr)) eDs->eArrTr = new TObjArray(20);
1726  for (int i=0; i<eVs->N(); i++)
1727  {
1728  tr = eVs->GetTrack(i);
1729  if(!(eDs->eArrTr->FindObject(tr))) eDs->eArrTr->Add(tr);
1730  }
1731  eDs->Draw();
1732  }
1733  else
1734  {
1735  if (!((eDs->eArrV)->FindObject(eVs)))
1736  {
1737  eDs->eArrV->Add(eVs);
1738  if (!(eDs->eArrTr)) eDs->eArrTr = new TObjArray(20);
1739  for (int i=0; i<eVs->N(); i++)
1740  {
1741  tr = eVs->GetTrack(i);
1742  if(!(eDs->eArrTr->FindObject(tr))) eDs->eArrTr->Add(tr);
1743  }
1744  eDs->eVertex = 0;
1745  eDs->Draw();
1746  }
1747  }
1748  eDs->eSegment = 0;
1749  eDs->eVertex = eVs;
1750  eDs->ePrevious = 0;
1751  eDs->CreateCanvasVTX();
1752  eVs->V()->rmsDistAngle();
1753  sprintf(text,"Orig %-4d %-4d %-8.1f %-8.1f %-8.1f %-6.1f %-7.1f %-7.5f",
1754  eVs->ID(), eVs->N(), eVs->VX(), eVs->VY(), eVs->VZ(), eVs->V()->dist(),
1755  eVs->V()->chi2()/eVs->V()->ndf(), eVs->V()->prob());
1756  eDs->DrawOldVTX(text);
1757  eDs->DrawVTXTracks("Original", eDs->eVertex);
1758  eDs->DrawEnv();
1759  if (eDs->eArrV) eDs->eIndVert = (eDs->eArrV)->IndexOf(eVs);
1760  else eDs->eIndVert = -1;
1761  (eDs->eCreatedTracks).Clear();
1762  eDs->Draw();
1763  }
1764 }
TText * text
Definition: Canv_SYSTEMATICS_ALLCOMBINED__RMSEnergy__vs__Energy__ELECTRON.C:164
entry SetMarkerColor(1)
TTree * tr
Definition: Shower_E_FromShowerRoot.C:5
virtual void CreateCanvasVTX()
Definition: EdbDisplayBase.cxx:992
virtual void DrawOldVTX(char *text)
Definition: EdbDisplayBase.cxx:926
virtual void DrawEnv()
Definition: EdbDisplayBase.cxx:1185
void DrawVTXTracks(char *type, EdbVertex *v=0)
Definition: EdbDisplay.cxx:4083
EdbVertex * ePrevious
Definition: EdbDisplay.h:49
Int_t eIndVert
Definition: EdbDisplay.h:56
TList eCreatedTracks
Definition: EdbDisplay.h:58
EdbSegP * eSegment
Definition: EdbDisplay.h:50
void ClearSegmentEnv()
Definition: EdbDisplay.cxx:4214
TPolyMarker3D * eSegPM
Definition: EdbDisplay.h:54

◆ SetVertex()

void EdbVertexG::SetVertex ( EdbVertex v)
inline
144 {eV=v;}

◆ TestVertex()

void EdbVertexG::TestVertex ( )
virtual
1683 {
1684  printf("\n");
1685  eV->Print();
1686  EdbTrackP *t=0;
1688  for(int i=0; i<eV->N(); i++) {
1689  t = eV->GetTrack(i);
1690  //t->PrintNice();
1691  printf("nseg = %d p = %f\n",t->N(), (float)(me.PMSang(*t)) );
1692  }
1693 }
TTree * t
Definition: check_shower.C:4
Definition: EdbMomentumEstimator.h:20
float PMSang(EdbTrackP &tr)
Definition: EdbMomentumEstimator.cxx:255

Member Data Documentation

◆ eD

EdbDisplay* EdbVertexG::eD
private

◆ eV

EdbVertex* EdbVertexG::eV
private

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