FEDRA emulsion software from the OPERA Collaboration
EdbSegG Class Reference

Segment. More...

#include <EdbDisplay.h>

Inheritance diagram for EdbSegG:
Collaboration diagram for EdbSegG:

Public Member Functions

virtual void AddAsTrackToVertex ()
 
virtual void AddToNewTrack ()
 
virtual void AddToNewTrackAndFit ()
 
virtual void DumpSegment ()
 
 EdbSegG ()
 
 EdbSegG (EdbDisplay *D)
 
 EdbSegG (EdbSegP &s)
 
 EdbSegG (Int_t nhits)
 
 EdbSegG (Int_t nhits, EdbDisplay *D)
 
virtual const char * GetName () const
 
virtual char * GetObjectInfo (int px, int py) const
 
virtual const char * GetTitle () const
 
virtual void InfoSegSeg ()
 
virtual void InfoSegVert ()
 
virtual void InspectSegment ()
 
virtual void RemoveFromTrack ()
 
virtual void SetAsWorking ()
 
void SetSeg (const EdbSegP *s)
 
virtual void SplitTrack ()
 
float X ()
 
float Y ()
 
float Z ()
 
virtual ~EdbSegG ()
 

Private Attributes

EdbDisplayeD
 
const EdbSegPeSeg
 

Detailed Description

Segment.

Constructor & Destructor Documentation

◆ EdbSegG() [1/5]

EdbSegG::EdbSegG ( )
inline
204{eSeg=0; eD=0;}
const EdbSegP * eSeg
Definition: EdbDisplay.h:200
EdbDisplay * eD
Definition: EdbDisplay.h:201

◆ EdbSegG() [2/5]

EdbSegG::EdbSegG ( EdbSegP s)
134 : TPolyLine3D(2)
135{
136 eSeg=0;
137 eD = 0;
138 float dz = TMath::Abs(s.DZ())/2.; if(dz<0.001) dz=10;
139 SetPoint(0,
140 s.X() - s.TX()*dz,
141 s.Y() - s.TY()*dz,
142 s.Z() - dz);
143 SetPoint(1,
144 s.X() + s.TX()*dz,
145 s.Y() + s.TY()*dz,
146 s.Z() + dz);
147
148 SetLineColor(kRed);
149 SetLineWidth(1);
150}
graph SetLineWidth(3)
graph SetPoint(0, 0.5, 0.272523)
Graph2 SetLineColor(ci)
brick dz
Definition: RecDispMC.C:107
s
Definition: check_shower.C:55

◆ EdbSegG() [3/5]

EdbSegG::EdbSegG ( EdbDisplay D)
inline
206{eSeg=0; eD=D;}

◆ EdbSegG() [4/5]

EdbSegG::EdbSegG ( Int_t  nhits)
inline
207:TPolyLine3D(nhits) {eSeg=0; eD=0;}

◆ EdbSegG() [5/5]

EdbSegG::EdbSegG ( Int_t  nhits,
EdbDisplay D 
)
inline
208:TPolyLine3D(nhits) {eSeg=0; eD=D;}

◆ ~EdbSegG()

virtual EdbSegG::~EdbSegG ( )
inlinevirtual
209{}

Member Function Documentation

◆ AddAsTrackToVertex()

void EdbSegG::AddAsTrackToVertex ( )
virtual
917{
918 char text[512];
919 EdbVTA *vta = 0;
920// if (eD) if (!(eD->eVerRec)) eD->eVerRec = ((EdbVertexRec *)(gROOT->GetListOfSpecials()->FindObject("EdbVertexRec")));
921 if (eD->eVerRec) if (eD->eVerRec->IsA() != EdbVertexRec::Class()) eD->eVerRec = 0;
922 if (!eD->eVerRec) {printf("Error: EdbDisplay:AddAsTrackToVertex: EdbVertexRec not defined, use SetVerRec(...)\n"); fflush(stdout); return;}
923 if (eSeg && eD)
924 {
925 if (eD->eWait_Answer) return;
926 if (!(eD->eVertex))
927 {
928
929 printf("No working vertex selected!\n");
930 fflush(stdout);
931 return;
932 }
933 if (eSeg->Track() >= 0)
934 {
935
936 printf("Segment already belong to a track!\n");
937 fflush(stdout);
938 return;
939 }
940 EdbVertex *ePreviousSaved = eD->ePrevious;
941 if (eD->eWorking == 0)
942 {
943 eD->eWorking = new EdbVertex();
944 int ntr = eD->eVertex->N();
945 int i = 0, n = 0;
946 for(i=0; i<ntr; i++)
947 {
948 if ((vta = (eD->eVerRec)->AddTrack(*(eD->eWorking), (eD->eVertex)->GetTrack(i), (eD->eVertex)->Zpos(i))))
949 {
950 (eD->eVertex)->GetTrack(i)->AddVTA(vta);
951 n++;
952 }
953 }
954 if (n < 2)
955 {
956 delete eD->eWorking;
957 if (eD->ePrevious)
958 {
960 (eD->eWorking)->ResetTracks();
961 }
962 else
963 {
964 eD->eWorking = 0;
965 (eD->eVertex)->ResetTracks();
966 }
967 printf("Can't create working copy of the vertex!\n");
968 fflush(stdout);
969 return;
970 }
971
972 if (!((eD->eVerRec)->MakeV(*(eD->eWorking))))
973 {
974 delete eD->eWorking;
975 if (eD->ePrevious)
976 {
978 (eD->eWorking)->ResetTracks();
979 }
980 else
981 {
982 eD->eWorking = 0;
983 (eD->eVertex)->ResetTracks();
984 }
985 printf("Can't create working copy of the vertex!\n");
986 fflush(stdout);
987 return;
988 }
989 }
990 else
991 {
992// if (ePrevious) delete ePrevious;
994 eD->eWorking = new EdbVertex();
995 int ntr = eD->ePrevious->N();
996 int i = 0, n = 0;
997 for(i=0; i<ntr; i++)
998 {
999 if ((vta = (eD->eVerRec)->AddTrack(*(eD->eWorking),(eD->ePrevious)->GetTrack(i), (eD->ePrevious)->Zpos(i))))
1000 {
1001 ((eD->ePrevious)->GetTrack(i))->AddVTA(vta);
1002 n++;
1003 }
1004 }
1005 if (n < 2)
1006 {
1007 delete eD->eWorking;
1008 if (eD->ePrevious)
1009 {
1010 eD->eWorking = eD->ePrevious;
1011 (eD->eWorking)->ResetTracks();
1012 eD->ePrevious = ePreviousSaved;
1013 }
1014 else
1015 {
1016 eD->eWorking = 0;
1017 (eD->eVertex)->ResetTracks();
1018 }
1019 printf("Can't create working copy of the vertex!\n");
1020 fflush(stdout);
1021 return;
1022 }
1023
1024 if (!((eD->eVerRec)->MakeV(*(eD->eWorking))))
1025 {
1026 delete eD->eWorking;
1027 if (eD->ePrevious)
1028 {
1029 eD->eWorking = eD->ePrevious;
1030 (eD->eWorking)->ResetTracks();
1031 eD->ePrevious = ePreviousSaved;
1032 }
1033 else
1034 {
1035 eD->eWorking = 0;
1036 (eD->eVertex)->ResetTracks();
1037 }
1038 printf("Can't create working copy of the vertex!\n");
1039 fflush(stdout);
1040 return;
1041 }
1042 }
1043 float mass = 0.139; //pion
1044 float momentum = 0.1; // 100 MeV
1045 if (eD->eP > 0.) momentum = eD->eP;
1046 if (eD->eM > 0.) mass = eD->eM;
1047 EdbTrackP *Tr = new EdbTrackP((EdbSegP *)eSeg, mass);
1048 Tr->SetP(momentum);
1049 Tr->FitTrackKFS();
1050 float ImpMaxSave = (eD->eVerRec)->eImpMax;
1051 (eD->eVerRec)->eImpMax = eD->eTImpMax;
1052 float ProbMinSave = (eD->eVerRec)->eProbMin;
1053 (eD->eVerRec)->eProbMin = eD->eTProbMin;
1054// printf(" seg id %d x %f y %f z %f\n", eSeg->ID(), eSeg->X(), eSeg->Y(), eSeg->Z());
1055 if ((vta = (eD->eVerRec)->AddTrack(*(eD->eWorking), Tr, 1)))
1056 {
1057 if ( Tr->Z() >= (eD->eWorking)->VZ() ) vta->SetZpos(1);
1058 else vta->SetZpos(0);
1059// printf(" tr id %d x %f y %f z %f\n", Tr->ID(), Tr->X(), Tr->Y(), Tr->Z());
1060 Tr->AddVTA(vta);
1061// (eD->eWorking)->ResetTracks();
1062 (eD->eArrTr)->Add(Tr);
1063 EdbVertex *eW = eD->eWorking;
1064 eW->SetID(eD->eVertex->ID());
1065 eW->V()->rmsDistAngle();
1066 sprintf(text,"New %-4d %-4d %-8.1f %-8.1f %-8.1f %-6.1f %-7.1f %-7.5f",
1067 eW->ID(), eW->N(), eW->VX(), eW->VY(), eW->VZ(), eW->V()->dist(),
1068 eW->V()->chi2()/eW->V()->ndf(), eW->V()->prob());
1069 eD->DrawOldBut("Original");
1070 if (eD->ePrevious)
1071 {
1072 eD->DrawNewVTX(text);
1073 eD->DrawNewBut("Modified");
1074 eW = eD->ePrevious;
1075 eW->V()->rmsDistAngle();
1076 sprintf(text,"Pre %-4d %-4d %-8.1f %-8.1f %-8.1f %-6.1f %-7.1f %-7.5f",
1077 eW->ID(), eW->N(), eW->VX(), eW->VY(), eW->VZ(), eW->V()->dist(),
1078 eW->V()->chi2()/eW->V()->ndf(), eW->V()->prob());
1079 eD->DrawPreVTX(text);
1080 eD->DrawPreBut("Previous");
1081 }
1082 else
1083 {
1084 eD->DrawPreVTX(text);
1085 eD->DrawPreBut("Modified");
1086 if (eD->eVertex->ID() >= 0)
1087 {
1088 eD->DrawAcc();
1089 eD->DrawCan();
1090 eD->DrawUnd();
1091 }
1092 }
1093// eD->DrawOldBut("Original");
1094 eD->DrawVTXTracks("Modified", eD->eWorking);
1095 if (eD->eIndVert >= 0)
1096 {
1097// eD->eArrV->RemoveAt(eD->eIndVert);
1098 eD->eArrV->AddAt(eD->eWorking, eD->eIndVert);
1099 }
1100 (eD->eCreatedTracks).Add(Tr);
1101 eD->Draw();
1102 if (ePreviousSaved) delete ePreviousSaved;
1103 ePreviousSaved = 0;
1104 (eD->eVerRec)->eImpMax = ImpMaxSave;
1105 (eD->eVerRec)->eProbMin = ProbMinSave;
1106 }
1107 else
1108 {
1109 printf("Track not added! May be Prob < ProbMin=%f. Change ProbMin with 'TrackParams' button!\n", eD->eTProbMin);
1110 fflush(stdout);
1111 delete Tr;
1112 delete eD->eWorking;
1113 if (eD->ePrevious)
1114 {
1115 eD->eWorking = eD->ePrevious;
1116 (eD->eWorking)->ResetTracks();
1117 eD->ePrevious = ePreviousSaved;
1118 }
1119 else
1120 {
1121 eD->eWorking = 0;
1122 (eD->eVertex)->ResetTracks();
1123 }
1124 (eD->eVerRec)->eImpMax = ImpMaxSave;
1125 (eD->eVerRec)->eProbMin = ProbMinSave;
1126 return;
1127 }
1128 }
1129}
TText * text
Definition: Canv_SYSTEMATICS_ALLCOMBINED__RMSEnergy__vs__Energy__ELECTRON.C:164
FILE * stdout
virtual void Draw(Option_t *option="")
Definition: EdbDisplayBase.cxx:787
virtual void DrawOldBut(char *text)
Definition: EdbDisplayBase.cxx:1048
virtual void DrawNewVTX(char *text)
Definition: EdbDisplayBase.cxx:971
virtual void DrawNewBut(char *text)
Definition: EdbDisplayBase.cxx:1108
virtual void DrawPreVTX(char *text)
Definition: EdbDisplayBase.cxx:949
virtual void DrawAcc()
Definition: EdbDisplayBase.cxx:1154
virtual void DrawUnd()
Definition: EdbDisplayBase.cxx:1138
virtual void DrawPreBut(char *text)
Definition: EdbDisplayBase.cxx:1078
virtual void DrawCan()
Definition: EdbDisplayBase.cxx:1170
Double_t eM
track mass (creation from segment, propagation)
Definition: EdbDisplay.h:64
TObjArray * eArrV
array of vertices to be drawn
Definition: EdbDisplay.h:44
void DrawVTXTracks(char *type, EdbVertex *v=0)
Definition: EdbDisplay.cxx:4084
Double_t eTProbMin
Minimal probability for interactive add track.
Definition: EdbDisplay.h:66
EdbVertex * ePrevious
saved previous vertex modifications
Definition: EdbDisplay.h:50
EdbVertexRec * eVerRec
Definition: EdbDisplay.h:41
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
TObjArray * eArrTr
array of tracks to be drawn
Definition: EdbDisplay.h:43
EdbVertex * eVertex
current selected vertex
Definition: EdbDisplay.h:49
Double_t eTImpMax
Maximal impact for interactive add track.
Definition: EdbDisplay.h:65
Bool_t eWait_Answer
set TRUE when answer received
Definition: EdbDisplay.h:56
Double_t eP
track momentum (creation from segment, propagation)
Definition: EdbDisplay.h:63
EdbVertex * eWorking
working vertex
Definition: EdbDisplay.h:48
Definition: EdbSegP.h:21
Int_t Track() const
Definition: EdbSegP.h:150
Float_t Z() const
Definition: EdbSegP.h:153
void SetP(float p)
Definition: EdbSegP.h:133
Definition: EdbPattern.h:113
void AddVTA(EdbVTA *vta)
Definition: EdbPattern.cxx:450
int FitTrackKFS(bool zmax=false, float X0=5810., int design=0)
Definition: EdbPattern.cxx:722
Definition: EdbVertex.h:26
void SetZpos(int zpos)
Definition: EdbVertex.h:55
Definition: EdbVertex.h:69
Int_t ID() const
Definition: EdbVertex.h:126
Float_t VX() const
Definition: EdbVertex.h:133
void SetID(int ID=0)
Definition: EdbVertex.h:156
VERTEX::Vertex * V() const
Definition: EdbVertex.h:154
Int_t N() const
Definition: EdbVertex.h:121
Float_t VY() const
Definition: EdbVertex.h:134
Float_t VZ() const
Definition: EdbVertex.h:135
unsigned short int ndf() const
degrees of freedom of vertex fit
Definition: VtVertex.C:238
float chi2() const
$\chi^2$ of vertex fit
Definition: VtVertex.C:236
double rmsDistAngle() const
calc rms dist and rms angle
Definition: VtVertex.C:1073
double dist() const
available after call to rmsDistAngle()
float prob() const
upper tail $\chi^2$ probability
Definition: VtVertex.C:237
if(max<=10) return
float mass
Definition: check_vertex.C:21
float momentum
Definition: check_vertex.C:20

◆ AddToNewTrack()

void EdbSegG::AddToNewTrack ( )
virtual
1132{
1133 if (eSeg && eD)
1134 {
1135 if (eSeg->Track() >= 0)
1136 {
1137 printf("This segment alredy belong to a track!\n");
1138 fflush(stdout);
1139 return;
1140 }
1141 if (eD->eTrack)
1142 {
1143 if ((eD->eTrack)->NF())
1144 {
1145 delete eD->eTrack;
1146 eD->eTrack = 0;
1147 }
1148 }
1149 if (!eD->eTrack) eD->eTrack = new EdbTrackP();
1150 (eD->eTrack)->AddSegment((EdbSegP *)eSeg);
1151 }
1152}
EdbTrackP * eTrack
working intermediate track (track creation)
Definition: EdbDisplay.h:52

◆ AddToNewTrackAndFit()

void EdbSegG::AddToNewTrackAndFit ( )
virtual
1155{
1156 if (eSeg && eD)
1157 {
1158 if (eSeg->Track() >= 0)
1159 {
1160 printf("This segment already belong to a track!\n");
1161 fflush(stdout);
1162 return;
1163 }
1164 if (!eD->eTrack) eD->eTrack = new EdbTrackP();
1165 (eD->eTrack)->AddSegment((EdbSegP *)eSeg);
1166 float mass = 0.139; //pion
1167 float momentum = 1.; // 1000 MeV
1168 if (eD->eP > 0.) momentum = eD->eP;
1169 if (eD->eM > 0.) mass = eD->eM;
1170 eD->eTrack->SetM(mass);
1172 float X0 = 0.;
1173 if (eD->eVerRec) if ((eD->eVerRec)->ePVR) X0 = (((eD->eVerRec)->ePVR)->GetScanCond())->RadX0();
1174 (eD->eTrack)->FitTrackKFS(true, X0, 0);
1175 if (!eD->eArrTr) eD->eArrTr = new TObjArray();
1176 (eD->eArrTr)->Add(eD->eTrack);
1177 if (eD->eArrTrSave) (eD->eArrTrSave)->Add(eD->eTrack);
1178 //if (eD->eArrSegP) (eD->eArrSegP)->Remove((TObject *)eSeg);
1179 //if (eD->eArrSegPSave) (eD->eArrSegPSave)->Remove((TObject *)eSeg);
1180 eD->Draw();
1181 }
1182}
brick X0
Definition: RecDispMC.C:112
TObjArray * eArrTrSave
saved array of tracks to be drawn
Definition: EdbDisplay.h:46
void SetM(float m)
Definition: EdbPattern.h:154

◆ DumpSegment()

void EdbSegG::DumpSegment ( )
virtual
153{
154 if (eSeg) eSeg->Print();
155}
void Print(Option_t *opt="") const
Definition: EdbSegP.cxx:379

◆ GetName()

const char * EdbSegG::GetName ( ) const
virtual
174{
175 static char name[] = "Segment";
176 return name;
177}
const char * name
Definition: merge_Energy_SytematicSources_Electron.C:24

◆ GetObjectInfo()

char * EdbSegG::GetObjectInfo ( int  px,
int  py 
) const
virtual
181{
182 static char coordinates[80];
183 if (eSeg) sprintf(coordinates, "X = %.1f, Y = %.1f, Z = %.1f, TX = %.3f, TY = %.3f PH = %d",
184 eSeg->X(), eSeg->Y(), eSeg->Z(), eSeg->TX(), eSeg->TY(), (int)eSeg->W() );
185 else strcpy(coordinates, "Segment address not defined");
186 return coordinates;
187}
Float_t TX() const
tangens = deltaX/deltaZ
Definition: EdbSegP.h:175
Float_t X() const
Definition: EdbSegP.h:173
Float_t Y() const
Definition: EdbSegP.h:174
Float_t W() const
Definition: EdbSegP.h:151
Float_t TY() const
tangens = deltaY/deltaZ
Definition: EdbSegP.h:176
strcpy(cmd,"cp Shower.root Shower2.root")

◆ GetTitle()

const char * EdbSegG::GetTitle ( ) const
virtual
165{
166 static char title[80];
167 if (eSeg) sprintf(title, "Segment ID %d, PID %d, Track %d", eSeg->ID(), eSeg->PID(), eSeg->Track());
168 else strcpy(title, "Segment address not defined");
169 return title;
170}
Int_t ID() const
Definition: EdbSegP.h:147
Int_t PID() const
Definition: EdbSegP.h:148

◆ InfoSegSeg()

void EdbSegG::InfoSegSeg ( )
virtual
1549{
1550 if (!(eD->eSegment))
1551 {
1552
1553 printf("No working segment selected!\n");
1554 fflush(stdout);
1555 return;
1556 }
1557 EdbSegP *s = eD->eSegment;
1558 char CanvasTRKName[140];
1559 strcpy(CanvasTRKName, "SEG-");
1560 strcat(CanvasTRKName, (eD->fCanvas)->GetName());
1561 if ((eD->fCanvasTRK = (TCanvas *)(gROOT->GetListOfCanvases()->FindObject(CanvasTRKName))))
1562 {
1563 (eD->fCanvasTRK)->SetTitle("Segment - Segment relation parameters");
1564 (eD->fCanvasTRK)->Clear();
1565 (eD->fCanvasTRK)->Modified();
1566 (eD->fCanvasTRK)->Update();
1567 }
1568 else
1569 {
1570 int xpos = (eD->fCanvas)->GetWindowTopX()+(eD->fCanvas)->GetWw();
1571 int ypos = (eD->fCanvas)->GetWindowTopY();
1572 eD->fCanvasTRK = new TCanvas(CanvasTRKName, "Segment - Segment relation parameters",
1573 -xpos, ypos, 640, 330);
1574 (eD->fCanvasTRK)->ToggleEventStatus();
1575 }
1576 if (eD->fVTXTRKInfo)
1577 {
1578 (eD->fVTXTRKInfo)->Clear();
1579 }
1580 else
1581 {
1582 eD->fVTXTRKInfo = new TPaveText(0.05, 0.05, 0.95, 0.95);
1583 (eD->fVTXTRKInfo)->ResetBit(kCanDelete);
1584 }
1585 char line[128];
1586 TText *t = 0;
1587
1588 strcpy(line, " Segment ID X Y Z TX TY");
1589 t = (eD->fVTXTRKInfo)->AddText(line);
1590 t->SetTextColor(kBlue);
1591 t->SetTextSize(0.03);
1592 t->SetTextAlign(12);
1593 t->SetTextFont(102);
1594
1595 sprintf(line," %-4d %-8.1f %-8.1f %-8.1f %-7.4f %-7.4f",
1596 s->ID(), s->X(), s->Y(), s->Z(),
1597 s->TX(), s->TY());
1598 t = (eD->fVTXTRKInfo)->AddText(line);
1599 t->SetTextColor(kBlack);
1600 t->SetTextSize(0.03);
1601 t->SetTextAlign(12);
1602 t->SetTextFont(102);
1603
1604// t = (eD->fVTXTRKInfo)->AddText("");
1605// t->SetTextColor(kBlack);
1606// t->SetTextSize(0.03);
1607// t->SetTextAlign(12);
1608// t->SetTextFont(102);
1609
1610 strcpy(line, " Segment ID X Y Z TX TY");
1611 t = (eD->fVTXTRKInfo)->AddText(line);
1612 t->SetTextColor(kBlue);
1613 t->SetTextSize(0.03);
1614 t->SetTextAlign(12);
1615 t->SetTextFont(102);
1616
1617 sprintf(line," %-4d %-8.1f %-8.1f %-8.1f %-7.4f %-7.4f",
1618 eSeg->ID(), eSeg->X(), eSeg->Y(), eSeg->Z(),
1619 eSeg->TX(), eSeg->TY());
1620 t = (eD->fVTXTRKInfo)->AddText(line);
1621 t->SetTextColor(kBlack);
1622 t->SetTextSize(0.03);
1623 t->SetTextAlign(12);
1624 t->SetTextFont(102);
1625
1626
1627// t = (eD->fVTXTRKInfo)->AddText("");
1628// t->SetTextColor(kBlack);
1629// t->SetTextSize(0.03);
1630// t->SetTextAlign(12);
1631// t->SetTextFont(102);
1632
1633 float dx = eSeg->X() - s->X();
1634 float dy = eSeg->Y() - s->Y();
1635 float dz = eSeg->Z() - s->Z();
1636 float dist = TMath::Sqrt(dx*dx + dy*dy + dz*dz);
1637
1638 float mass = 0.139; //pion
1639 float momentum = .1; // 100 MeV
1640 if (eD->eP > 0.) momentum = eD->eP;
1641 if (eD->eM > 0.) mass = eD->eM;
1642 EdbTrackP *tr1 = new EdbTrackP((EdbSegP *)s, mass);
1643 tr1->SetP(momentum);
1644 tr1->FitTrackKFS();
1645 EdbTrackP *tr2 = new EdbTrackP((EdbSegP *)eSeg, mass);
1646 tr2->SetP(momentum);
1647 tr2->FitTrackKFS();
1648 EdbSegP *seg1 = (EdbSegP *)(tr1->TrackZmax());
1649 seg1->SetP(momentum);
1650 EdbSegP *seg2 = (EdbSegP *)(tr2->TrackZmax());
1651 seg2->SetP(momentum);
1652 if (eD->eVerRec)
1653 {
1654 float chi2 = (eD->eVerRec)->TdistanceChi2(*seg1, *seg2, mass);
1655 float impa = (eD->eVerRec)->Tdistance(*s, *eSeg);
1656 sprintf(line, " Segment - Segment impact = %-6.1f, chi2 = %-7.1f, distance = %-8.1f", impa, chi2, dist);
1657 }
1658 else
1659 {
1660 sprintf(line, " Impossible to calculate impact and chi2 - No eVerRec defined!");
1661 printf("Error: EdbDisplay:AddAsTrackToVertex: EdbVertexRec not defined, use SetVerRec(...)\n");
1662 fflush(stdout);
1663 }
1664 delete tr1;
1665 delete tr2;
1666 t = (eD->fVTXTRKInfo)->AddText(line);
1667 t->SetTextColor(kRed);
1668 t->SetTextSize(0.03);
1669 t->SetTextAlign(12);
1670 t->SetTextFont(102);
1671
1672 t = (eD->fVTXTRKInfo)->AddText("");
1673 t->SetTextColor(kBlack);
1674 t->SetTextSize(0.03);
1675 t->SetTextAlign(12);
1676 t->SetTextFont(102);
1677
1678 (eD->fVTXTRKInfo)->Draw();
1679 (eD->fCanvasTRK)->Modified();
1680 (eD->fCanvasTRK)->Update();
1681}
Canv_RMSEnergy__vs__Energy Modified()
double Tdistance(const Track &t1, const Track &t2)
Definition: SDistance.hh:115
TCanvas * fCanvas
Pointer to the display canvas.
Definition: EdbDisplayBase.h:124
TCanvas * fCanvasTRK
Pointer to the vertex canvas.
Definition: EdbDisplayBase.h:126
TPaveText * fVTXTRKInfo
Vertex - tracks information.
Definition: EdbDisplayBase.h:123
EdbSegP * eSegment
working segment (for segment neighborhood)
Definition: EdbDisplay.h:51
EdbSegP * TrackZmax(bool usesegpar=false) const
Definition: EdbPattern.h:199
TTree * t
Definition: check_shower.C:4
NbBT SetTitle("Number of BT per shower")
t Draw("sizeb>>NbBT", cut2)
new TCanvas()
Float_t chi2
Definition: testBGReduction_By_ANN.C:14

◆ InfoSegVert()

void EdbSegG::InfoSegVert ( )
virtual
1426{
1427 if (!(eD->eVertex))
1428 {
1429
1430 printf("No working vertex selected!\n");
1431 fflush(stdout);
1432 return;
1433 }
1434 int zpos = 1;
1435 EdbVertex *v = eD->eVertex;
1436 if (eD->eWorking) v = eD->eWorking;
1437 char CanvasTRKName[140];
1438 strcpy(CanvasTRKName, "TRK-");
1439 strcat(CanvasTRKName, (eD->fCanvas)->GetName());
1440 if ((eD->fCanvasTRK = (TCanvas *)(gROOT->GetListOfCanvases()->FindObject(CanvasTRKName))))
1441 {
1442 (eD->fCanvasTRK)->SetTitle("Segment - Vertex relation parameters");
1443 (eD->fCanvasTRK)->Clear();
1444 (eD->fCanvasTRK)->Modified();
1445 (eD->fCanvasTRK)->Update();
1446 }
1447 else
1448 {
1449 int xpos = (eD->fCanvas)->GetWindowTopX()+(eD->fCanvas)->GetWw();
1450 int ypos = (eD->fCanvas)->GetWindowTopY();
1451 eD->fCanvasTRK = new TCanvas(CanvasTRKName, "Segment - Vertex relation parameters",
1452 -xpos, ypos, 640, 330);
1453 (eD->fCanvasTRK)->ToggleEventStatus();
1454 }
1455 if (eD->fVTXTRKInfo)
1456 {
1457 (eD->fVTXTRKInfo)->Clear();
1458 }
1459 else
1460 {
1461 eD->fVTXTRKInfo = new TPaveText(0.05, 0.05, 0.95, 0.95);
1462 (eD->fVTXTRKInfo)->ResetBit(kCanDelete);
1463 }
1464 char line[128];
1465 EdbSegP *s = (EdbSegP *)eSeg;
1466 TText *t = 0;
1467
1468 strcpy(line, " Segment ID X Y Z TX TY PH");
1469 t = (eD->fVTXTRKInfo)->AddText(line);
1470 t->SetTextColor(kBlue);
1471 t->SetTextSize(0.03);
1472 t->SetTextAlign(12);
1473 t->SetTextFont(102);
1474
1475 sprintf(line," %-4d %-8.1f %-8.1f %-8.1f %-7.4f %-7.4f %-4d",
1476 s->ID(), s->X(), s->Y(), s->Z(), s->TX(), s->TY(), (int)s->W() );
1477 t = (eD->fVTXTRKInfo)->AddText(line);
1478 t->SetTextColor(kBlack);
1479 t->SetTextSize(0.03);
1480 t->SetTextAlign(12);
1481 t->SetTextFont(102);
1482
1483// t = (eD->fVTXTRKInfo)->AddText("");
1484// t->SetTextColor(kBlack);
1485// t->SetTextSize(0.03);
1486// t->SetTextAlign(12);
1487// t->SetTextFont(102);
1488
1489 strcpy(line, " Vertex ID Mult X Y Z Dist Chi2 Prob");
1490 t = (eD->fVTXTRKInfo)->AddText(line);
1491 t->SetTextColor(kBlue);
1492 t->SetTextSize(0.03);
1493 t->SetTextAlign(12);
1494 t->SetTextFont(102);
1495
1496 sprintf(line," %-4d %-4d %-8.1f %-8.1f %-8.1f %-6.1f %-7.1f %-7.5f",
1497 v->ID(), v->N(), v->VX(), v->VY(), v->VZ(), v->V()->dist(),
1498 v->V()->chi2()/v->V()->ndf(), v->V()->prob());
1499 t = (eD->fVTXTRKInfo)->AddText(line);
1500 t->SetTextColor(kBlack);
1501 t->SetTextSize(0.03);
1502 t->SetTextAlign(12);
1503 t->SetTextFont(102);
1504
1505// t = (eD->fVTXTRKInfo)->AddText("");
1506// t->SetTextColor(kBlack);
1507// t->SetTextSize(0.03);
1508// t->SetTextAlign(12);
1509// t->SetTextFont(102);
1510
1511 float dx = v->VX() - s->X();
1512 float dy = v->VY() - s->Y();
1513 float dz = v->VZ() - s->Z();
1514 float dist = TMath::Sqrt(dx*dx + dy*dy + dz*dz);
1515
1516 float mass = 0.139; //pion
1517 float momentum = 0.1; // 100 MeV
1518 if (eD->eP > 0.) momentum = eD->eP;
1519 if (eD->eM > 0.) mass = eD->eM;
1520 EdbTrackP *tr = new EdbTrackP((EdbSegP *)eSeg, mass);
1521 tr->SetP(momentum);
1522 tr->FitTrackKFS();
1523
1524 float X0 = 0.;
1525 if (eD->eVerRec) if ((eD->eVerRec)->ePVR) X0 = (((eD->eVerRec)->ePVR)->GetScanCond())->RadX0();
1526 float chi2 = v->Chi2Track(tr, zpos, X0);
1527 float impa = v->DistTrack(tr, zpos, X0);
1528 delete tr;
1529 sprintf(line, " Segment - Vertex impact = %-6.1f, chi2 = %-7.1f, distance = %-8.1f", impa, chi2, dist);
1530 t = (eD->fVTXTRKInfo)->AddText(line);
1531 t->SetTextColor(kRed);
1532 t->SetTextSize(0.03);
1533 t->SetTextAlign(12);
1534 t->SetTextFont(102);
1535
1536 t = (eD->fVTXTRKInfo)->AddText("");
1537 t->SetTextColor(kBlack);
1538 t->SetTextSize(0.03);
1539 t->SetTextAlign(12);
1540 t->SetTextFont(102);
1541
1542 (eD->fVTXTRKInfo)->Draw();
1543 (eD->fCanvasTRK)->Modified();
1544 (eD->fCanvasTRK)->Update();
1545}
TTree * tr
Definition: Shower_E_FromShowerRoot.C:5
Float_t Chi2Track(EdbTrackP *tr, int zpos, float X0=0.)
Definition: EdbVertex.cxx:635
Float_t DistTrack(EdbTrackP *tr, int zpos, float X0=0.)
Definition: EdbVertex.cxx:662
ePVR
Definition: testBGReduction_By_ANN.C:3

◆ InspectSegment()

void EdbSegG::InspectSegment ( )
virtual
159{
160 if (eSeg) eSeg->Inspect();
161}

◆ RemoveFromTrack()

void EdbSegG::RemoveFromTrack ( )
virtual
1185{
1186 if (eSeg && eD)
1187 {
1188 int ind = 0;
1189 if ((ind = eSeg->Track()) < 0)
1190 {
1191 printf("This segment not included in a track!\n");
1192 fflush(stdout);
1193 return;
1194 }
1195 if (eD->eVerRec) if (eD->eVerRec->IsA() != EdbVertexRec::Class()) eD->eVerRec = 0;
1196 if (!eD->eVerRec) {printf("Error: EdbDisplay:RemoveFromTrack: EdbVertexRec not defined, use SetVerRec(...)\n"); fflush(stdout); return;}
1197 TObjArray *etr = 0;
1198 if (eD->eVerRec) etr = (eD->eVerRec)->eEdbTracks;
1199 if (!etr)
1200 {
1201 printf("No information about tracks array!\n");
1202 fflush(stdout);
1203 return;
1204 }
1205 int trind = etr->GetEntries();
1206 if (ind >= trind)
1207 {
1208 printf("Wrong track index in segment!\n");
1209 fflush(stdout);
1210 return;
1211 }
1212 EdbTrackP *tr = (EdbTrackP *)(etr->At(ind));
1213 if (!tr)
1214 {
1215 printf("Wrong track address in array!\n");
1216 fflush(stdout);
1217 return;
1218 }
1219 if (tr->N() < 2)
1220 {
1221 printf("Only one segment in track - delete track insted!\n");
1222 fflush(stdout);
1223 return;
1224 }
1225 if (tr->VTAS() || tr->VTAE())
1226 {
1227 printf("Track belong to a vertex - impossible operate with it!\n");
1228 fflush(stdout);
1229 return;
1230 }
1231 tr->RemoveSegment((EdbSegP *)eSeg);
1232 float X0 = 0.;
1233 if (eD->eVerRec) if ((eD->eVerRec)->ePVR) X0 = (((eD->eVerRec)->ePVR)->GetScanCond())->RadX0();
1234 tr->FitTrackKFS(true, X0, 0);
1235 if (!(eD->eArrSegP)) eD->eArrSegP = new TObjArray();
1236 if(!((eD->eArrSegP)->FindObject(eSeg))) (eD->eArrSegP)->Add((EdbSegP *)eSeg);
1237 if (eD->eArrTrSave)
1238 {
1239 if (!(eD->eArrSegPSave)) eD->eArrSegPSave = new TObjArray();
1240 if(!((eD->eArrSegPSave)->FindObject(eSeg))) eD->eArrSegPSave->Add((EdbSegP *)eSeg);
1241 }
1242 eD->Draw();
1243 }
1244}
TObjArray * eArrSegP
array of segments to be drawn
Definition: EdbDisplay.h:42
TObjArray * eArrSegPSave
saved array of segments to be drawn
Definition: EdbDisplay.h:45

◆ SetAsWorking()

void EdbSegG::SetAsWorking ( )
virtual
1362{
1363 EdbDisplay *eDs = 0;
1364 EdbSegP *eSegs = 0;
1365 eDs = eD;
1366 eSegs = (EdbSegP *)eSeg;
1367 if (eDs && eSegs)
1368 {
1369 if (eDs->eSegment == eSegs) return;
1370 if (eDs->eWait_Answer) return;
1371 if (eDs->eVertex)
1372 {
1373 if (eDs->eWorking)
1374 {
1375 eDs->DialogModifiedVTX();
1376 return;
1377 }
1378 else
1379 {
1380 eDs->CancelModifiedVTX();
1381 }
1382 }
1383 if (eDs->eSegPM)
1384 {
1385 if (eDs->fPad->GetListOfPrimitives()->FindObject(eDs->eSegPM))
1386 {
1387 eDs->fPad->GetListOfPrimitives()->Remove(eDs->eSegPM);
1388 }
1389 delete eDs->eSegPM;
1390 eDs->eSegPM = 0;
1391 }
1392 if (!(eDs->eArrSegP))
1393 {
1394 eDs->eArrSegP = new TObjArray(20);
1395 eDs->eArrSegP->Add((TObject *)eSegs);
1396 eDs->Draw();
1397 }
1398 else
1399 {
1400
1401 if (!(eDs->eArrSegP->FindObject(eSegs)))
1402 {
1403 eDs->eArrSegP->Add((TObject *)eSegs);
1404 eDs->Draw();
1405 }
1406 }
1407 eDs->eSegment = (EdbSegP *)eSegs;
1408 eDs->DrawEnv();
1409 eDs->eSegPM = new TPolyMarker3D(1);
1410 eDs->eSegPM->SetMarkerStyle(kFullCircle);
1411 if(eSegs) {
1412 float dz = TMath::Abs(eSegs->DZ()/2.);
1413 eDs->eSegPM->SetPoint(0,
1414 eSegs->X() + eSegs->TX()*dz,
1415 eSegs->Y() + eSegs->TY()*dz,
1416 eSegs->Z() + dz);
1417 eDs->eSegPM->SetMarkerColor(kGreen);
1418 eDs->eSegPM->SetMarkerSize(1.2);
1419 eDs->eSegPM->AppendPad();
1420 eDs->eSegPM->Draw();
1421 }
1422 }
1423}
TPad * fPad
Pointer to the event display main pad.
Definition: EdbDisplayBase.h:127
virtual void DrawEnv()
Definition: EdbDisplayBase.cxx:1186
FEDRA Event Display.
Definition: EdbDisplay.h:22
void CancelModifiedVTX()
Definition: EdbDisplay.cxx:3221
TPolyMarker3D * eSegPM
green mark for segment selected as working
Definition: EdbDisplay.h:55
void DialogModifiedVTX()
Definition: EdbDisplay.cxx:4044

◆ SetSeg()

void EdbSegG::SetSeg ( const EdbSegP s)
inline
211{eSeg=s;}

◆ SplitTrack()

void EdbSegG::SplitTrack ( )
virtual
1248{
1249 if (eSeg && eD)
1250 {
1251 int ind = 0;
1252 if ((ind = eSeg->Track()) < 0)
1253 {
1254 printf("This segment not included in a track!\n");
1255 fflush(stdout);
1256 return;
1257 }
1258 if (eD->eVerRec) if (eD->eVerRec->IsA() != EdbVertexRec::Class()) eD->eVerRec = 0;
1259 if (!eD->eVerRec) {printf("Error: EdbDisplay:SplitTrack: EdbVertexRec not defined, use SetVerRec(...)\n"); fflush(stdout); return;}
1260 TObjArray *etr = 0;
1261 if (eD->eVerRec) etr = (eD->eVerRec)->eEdbTracks;
1262 if (!etr)
1263 {
1264 printf("No information about tracks array!\n");
1265 fflush(stdout);
1266 return;
1267 }
1268 int trind = etr->GetEntries();
1269 if (ind >= trind)
1270 {
1271 printf("Wrong track index in segment!\n");
1272 fflush(stdout);
1273 return;
1274 }
1275 EdbTrackP *tr = (EdbTrackP *)(etr->At(ind));
1276 if (!tr)
1277 {
1278 printf("Wrong track address in array!\n");
1279 fflush(stdout);
1280 return;
1281 }
1282 if (tr->N() < 2)
1283 {
1284 printf("Only one segment in track - delete track insted!\n");
1285 fflush(stdout);
1286 return;
1287 }
1288 if (tr->VTAS() || tr->VTAE())
1289 {
1290 printf("Track belong to a vertex - impossible operate with it!\n");
1291 fflush(stdout);
1292 return;
1293 }
1294 if (eD->eTrack1)
1295 {
1296 printf("Intermediate track already exist - fix it!\n");
1297 fflush(stdout);
1298 return;
1299 }
1300 if (eD->eTrack2)
1301 {
1302 printf("Intermediate track already exist - fix it!\n");
1303 fflush(stdout);
1304 return;
1305 }
1306 EdbSegP *seg = 0;
1307 eD->eTrack1 = new EdbTrackP();
1308 eD->eTrack2 = new EdbTrackP();
1309 for(int is=0; is<tr->N(); is++) {
1310 seg = tr->GetSegment(is);
1311 if (seg->Z() <= eSeg->Z()) (eD->eTrack1)->AddSegment((EdbSegP *)seg);
1312 else (eD->eTrack2)->AddSegment((EdbSegP *)seg);
1313 }
1314 tr->SetFlag(-10);
1315 tr->SetSegmentsTrack(-2-(tr->ID()+1));
1316 if(eD->eArrTr) if((eD->eArrTr)->FindObject(tr))
1317 {
1318 eD->eArrTr->Remove(tr);
1319 eD->eArrTr->Compress();
1320 if (!(eD->eArrSegP)) eD->eArrSegP = new TObjArray();
1321 for(int is=0; is<tr->N(); is++) {
1322 seg = tr->GetSegment(is);
1323 if(eD->eArrSegP) if(!((eD->eArrSegP)->FindObject(seg))) eD->eArrSegP->Add(seg);
1324 }
1325 }
1326 if(eD->eArrTrSave) if((eD->eArrTrSave)->FindObject(tr))
1327 {
1328 eD->eArrTrSave->Remove(tr);
1329 eD->eArrTrSave->Compress();
1330 if (!(eD->eArrSegPSave)) eD->eArrSegPSave = new TObjArray();
1331 for(int is=0; is<tr->N(); is++) {
1332 seg = tr->GetSegment(is);
1333 if(eD->eArrSegPSave) if(!((eD->eArrSegPSave)->FindObject(seg))) eD->eArrSegPSave->Add(seg);
1334 }
1335 }
1336 eD->Draw();
1337 float mass = tr->M();
1338 float momentum = tr->P();
1339 if (eD->eP > 0.) momentum = eD->eP;
1340 if (eD->eM > 0.) mass = eD->eM;
1341
1342 eD->eTrack1->SetM(mass);
1344 float X0 = 0.;
1345 if (eD->eVerRec) if ((eD->eVerRec)->ePVR) X0 = (((eD->eVerRec)->ePVR)->GetScanCond())->RadX0();
1346 eD->eTrack1->FitTrackKFS(true, X0, 0);
1347 if (!eD->eArrTr) eD->eArrTr = new TObjArray();
1348 (eD->eArrTr)->Add(eD->eTrack1);
1349 if (eD->eArrTrSave) (eD->eArrTrSave)->Add(eD->eTrack1);
1350
1351 eD->eTrack2->SetM(mass);
1353 eD->eTrack2->FitTrackKFS(true, X0, 0);
1354 (eD->eArrTr)->Add(eD->eTrack2);
1355 if (eD->eArrTrSave) (eD->eArrTrSave)->Add(eD->eTrack2);
1356
1357 eD->Draw();
1358 }
1359}
EdbTrackP * eTrack1
working intermediate track (track splitting)
Definition: EdbDisplay.h:53
EdbTrackP * eTrack2
working intermediate track (track splitting)
Definition: EdbDisplay.h:54

◆ X()

float EdbSegG::X ( )
inline
212{ return GetP()[0]; }

◆ Y()

float EdbSegG::Y ( )
inline
213{ return GetP()[1]; }

◆ Z()

float EdbSegG::Z ( )
inline
214{ return GetP()[2]; }

Member Data Documentation

◆ eD

EdbDisplay* EdbSegG::eD
private

◆ eSeg

const EdbSegP* EdbSegG::eSeg
private

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