FEDRA emulsion software from the OPERA Collaboration
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
EdbVertexG Class Reference

Vertex. More...

#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
 

Detailed Description

Vertex.

Constructor & Destructor Documentation

◆ EdbVertexG() [1/2]

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

◆ EdbVertexG() [2/2]

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

◆ ~EdbVertexG()

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

Member Function Documentation

◆ DeleteVertex()

void EdbVertexG::DeleteVertex ( )
virtual
1892{
1893 EdbDisplay *eDs = 0;
1894 EdbVertex *eVs = 0;
1895 eDs = eD;
1896 eVs = eV;
1897 if (eDs && eVs)
1898 {
1899 if (eDs->eWait_Answer) return;
1900 if (eDs->eWorking == eVs)
1901 {
1902 eDs->DialogModifiedVTX();
1903 return;
1904 }
1905 if (eDs->eVertex == eVs)
1906 {
1907 eDs->CancelModifiedVTX();
1908 }
1909 if (eDs->eArrV)
1910 {
1911 eDs->eArrV->Remove((TObject *)eVs);
1912 eDs->eArrV->Compress();
1913 eDs->Draw();
1914 }
1915 else
1916 {
1917 if ((eDs->eArrV)->FindObject(eVs))
1918 {
1919 eDs->eArrV->Remove(eVs);
1920 eDs->eArrV->Compress();
1921 eDs->eVertex = 0;
1922 eDs->Draw();
1923 }
1924 }
1925 delete eVs;
1926 eDs->Draw();
1927 }
1928}
virtual void Draw(Option_t *option="")
Definition: EdbDisplayBase.cxx:787
FEDRA Event Display.
Definition: EdbDisplay.h:22
TObjArray * eArrV
array of vertices to be drawn
Definition: EdbDisplay.h:44
void CancelModifiedVTX()
Definition: EdbDisplay.cxx:3221
EdbVertex * eVertex
current selected vertex
Definition: EdbDisplay.h:49
Bool_t eWait_Answer
set TRUE when answer received
Definition: EdbDisplay.h:56
EdbVertex * eWorking
working vertex
Definition: EdbDisplay.h:48
void DialogModifiedVTX()
Definition: EdbDisplay.cxx:4044
Definition: EdbVertex.h:69

◆ DumpVertex()

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

◆ GetName()

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

◆ GetObjectInfo()

char * EdbVertexG::GetObjectInfo ( int  px,
int  py 
) const
virtual
64{
65 static char coordinates[80];
66 if (eV->V())
67 sprintf(coordinates, "X = %.1f, Y = %.1f, Z = %.1f", eV->VX(), eV->VY(), eV->VZ());
68 else
69 sprintf(coordinates, "X = %.1f, Y = %.1f, Z = %.1f", eV->X(), eV->Y(), eV->Z());
70 return coordinates;
71}
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
46{
47 static char title[80];
48 if (eV->V())
49 sprintf(title, "Vertex ID %d, Prongs %d, Prob %f", eV->ID(), eV->N(), eV->V()->prob());
50 else
51 sprintf(title, "Vertex ID %d, Prongs %d, Prob %f", eV->ID(), eV->N(), 1.);
52 return title;
53}
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
40{
41 if (eV) eV->Inspect();
42}

◆ RemoveKink()

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

◆ SetAsWorking()

void EdbVertexG::SetAsWorking ( )
virtual
1697{
1698 char text[512];
1699 EdbTrackP *tr = 0;
1700 EdbDisplay *eDs = 0;
1701 EdbVertex *eVs = 0;
1702 eDs = eD;
1703 eVs = eV;
1704 if (eDs && eVs)
1705 {
1706 if (eDs->eVertex == eVs) return;
1707 if (eDs->eWait_Answer) return;
1708 if (eDs->eWorking)
1709 {
1710 eDs->DialogModifiedVTX();
1711 return;
1712 }
1713 if (eDs->eVertex)
1714 {
1715 eDs->CancelModifiedVTX();
1716 }
1717 if (eDs->eSegPM)
1718 {
1719 eDs->ClearSegmentEnv();
1720 }
1721 SetMarkerColor(kGreen);
1722 if (!(eDs->eArrV))
1723 {
1724 eDs->eArrV = new TObjArray(20);
1725 eDs->eArrV->Add((TObject *)eVs);
1726 if (!(eDs->eArrTr)) eDs->eArrTr = new TObjArray(20);
1727 for (int i=0; i<eVs->N(); i++)
1728 {
1729 tr = eVs->GetTrack(i);
1730 if(!(eDs->eArrTr->FindObject(tr))) eDs->eArrTr->Add(tr);
1731 }
1732 eDs->Draw();
1733 }
1734 else
1735 {
1736 if (!((eDs->eArrV)->FindObject(eVs)))
1737 {
1738 eDs->eArrV->Add(eVs);
1739 if (!(eDs->eArrTr)) eDs->eArrTr = new TObjArray(20);
1740 for (int i=0; i<eVs->N(); i++)
1741 {
1742 tr = eVs->GetTrack(i);
1743 if(!(eDs->eArrTr->FindObject(tr))) eDs->eArrTr->Add(tr);
1744 }
1745 eDs->eVertex = 0;
1746 eDs->Draw();
1747 }
1748 }
1749 eDs->eSegment = 0;
1750 eDs->eVertex = eVs;
1751 eDs->ePrevious = 0;
1752 eDs->CreateCanvasVTX();
1753 eVs->V()->rmsDistAngle();
1754 sprintf(text,"Orig %-4d %-4d %-8.1f %-8.1f %-8.1f %-6.1f %-7.1f %-7.5f",
1755 eVs->ID(), eVs->N(), eVs->VX(), eVs->VY(), eVs->VZ(), eVs->V()->dist(),
1756 eVs->V()->chi2()/eVs->V()->ndf(), eVs->V()->prob());
1757 eDs->DrawOldVTX(text);
1758 eDs->DrawVTXTracks("Original", eDs->eVertex);
1759 eDs->DrawEnv();
1760 if (eDs->eArrV) eDs->eIndVert = (eDs->eArrV)->IndexOf(eVs);
1761 else eDs->eIndVert = -1;
1762 (eDs->eCreatedTracks).Clear();
1763 eDs->Draw();
1764 }
1765}
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:993
virtual void DrawOldVTX(char *text)
Definition: EdbDisplayBase.cxx:927
virtual void DrawEnv()
Definition: EdbDisplayBase.cxx:1186
void DrawVTXTracks(char *type, EdbVertex *v=0)
Definition: EdbDisplay.cxx:4084
EdbVertex * ePrevious
saved previous vertex modifications
Definition: EdbDisplay.h:50
Int_t eIndVert
Index of selected vertex in ArrV.
Definition: EdbDisplay.h:57
TList eCreatedTracks
list of tracks, created during vertex operations
Definition: EdbDisplay.h:59
EdbSegP * eSegment
working segment (for segment neighborhood)
Definition: EdbDisplay.h:51
void ClearSegmentEnv()
Definition: EdbDisplay.cxx:4215
TPolyMarker3D * eSegPM
green mark for segment selected as working
Definition: EdbDisplay.h:55

◆ SetVertex()

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

◆ TestVertex()

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

Member Data Documentation

◆ eD

EdbDisplay* EdbVertexG::eD
private

◆ eV

EdbVertex* EdbVertexG::eV
private

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