FEDRA emulsion software from the OPERA Collaboration
EdbSegG Class Reference

#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
 

Constructor & Destructor Documentation

◆ EdbSegG() [1/5]

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

◆ EdbSegG() [2/5]

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

◆ EdbSegG() [3/5]

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

◆ EdbSegG() [4/5]

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

◆ EdbSegG() [5/5]

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

◆ ~EdbSegG()

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

Member Function Documentation

◆ AddAsTrackToVertex()

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

◆ AddToNewTrack()

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

◆ AddToNewTrackAndFit()

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

◆ DumpSegment()

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

◆ GetName()

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

◆ GetObjectInfo()

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

◆ GetTitle()

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

◆ InfoSegSeg()

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

◆ InfoSegVert()

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

◆ InspectSegment()

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

◆ RemoveFromTrack()

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

◆ SetAsWorking()

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

◆ SetSeg()

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

◆ SplitTrack()

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

◆ X()

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

◆ Y()

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

◆ Z()

float EdbSegG::Z ( )
inline
213 { 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: