FEDRA emulsion software from the OPERA Collaboration
EdbTrackG Class Reference

#include <EdbDisplay.h>

Inheritance diagram for EdbTrackG:
Collaboration diagram for EdbTrackG:

Public Member Functions

virtual void AddToNewTrack ()
 
virtual void AddToNewTrackAndFit ()
 
virtual void AddTrackToVertex ()
 
virtual void DeleteTrack ()
 
virtual void DumpTrack ()
 
 EdbTrackG ()
 
 EdbTrackG (EdbDisplay *D)
 
 EdbTrackG (Int_t nhits, EdbDisplay *D)
 
virtual void EstimateMomentum ()
 
virtual void FixNewTrack ()
 
virtual const char * GetName () const
 
virtual char * GetObjectInfo (int px, int py) const
 
virtual const char * GetTitle () const
 
virtual void InfoTrackVert ()
 
virtual void InspectTrack ()
 
virtual void RemoveTrackFromVertex ()
 
virtual void SetAsWorkingVertex ()
 
void SetTrack (EdbTrackP *tr)
 
virtual void UndoNewTrack ()
 
virtual void UndoRemoveKink ()
 
virtual void UndoSplit ()
 
virtual ~EdbTrackG ()
 

Private Attributes

EdbDisplayeD
 
EdbTrackPeTr
 

Constructor & Destructor Documentation

◆ EdbTrackG() [1/3]

EdbTrackG::EdbTrackG ( )
inline
167 {eTr=0; eD=0;}
EdbDisplay * eD
Definition: EdbDisplay.h:164
EdbTrackP * eTr
Definition: EdbDisplay.h:163

◆ EdbTrackG() [2/3]

EdbTrackG::EdbTrackG ( EdbDisplay D)
inline
168 {eTr=0; eD=D;}

◆ EdbTrackG() [3/3]

EdbTrackG::EdbTrackG ( Int_t  nhits,
EdbDisplay D 
)
inline
169 :TPolyMarker3D(nhits) {eTr=0; eD=D;}

◆ ~EdbTrackG()

virtual EdbTrackG::~EdbTrackG ( )
inlinevirtual
170 {}

Member Function Documentation

◆ AddToNewTrack()

void EdbTrackG::AddToNewTrack ( )
virtual
2397 {
2398  if (eTr && eD)
2399  {
2400  if (eTr->VTAS() || eTr->VTAE())
2401  {
2402  printf("Track belong to a vertex - impossible destroy it!\n");
2403  fflush(stdout);
2404  return;
2405  }
2406  if (eD->eTrack)
2407  {
2408  if ((eD->eTrack)->NF())
2409  {
2410  delete eD->eTrack;
2411  eD->eTrack = 0;
2412  }
2413  }
2414  EdbSegP *seg = 0;
2415  if (!eD->eTrack) eD->eTrack = new EdbTrackP();
2416  for(int is=0; is<eTr->N(); is++) {
2417  seg = eTr->GetSegment(is);
2418  (eD->eTrack)->AddSegment((EdbSegP *)seg);
2419  }
2420  eTr->SetFlag(-10);
2421  eTr->SetSegmentsTrack(-2-(eTr->ID()+1));
2422  if(eD->eArrTr) if((eD->eArrTr)->FindObject(eTr))
2423  {
2424  eD->eArrTr->Remove(eTr);
2425  eD->eArrTr->Compress();
2426  if (!(eD->eArrSegP)) eD->eArrSegP = new TObjArray();
2427  for(int is=0; is<eTr->N(); is++) {
2428  seg = eTr->GetSegment(is);
2429  if(eD->eArrSegP) if(!((eD->eArrSegP)->FindObject(seg))) eD->eArrSegP->Add(seg);
2430  }
2431  }
2432  if(eD->eArrTrSave) if((eD->eArrTrSave)->FindObject(eTr))
2433  {
2434  eD->eArrTrSave->Remove(eTr);
2435  eD->eArrTrSave->Compress();
2436  if (!(eD->eArrSegPSave)) eD->eArrSegPSave = new TObjArray();
2437  for(int is=0; is<eTr->N(); is++) {
2438  seg = eTr->GetSegment(is);
2439  if(eD->eArrSegPSave) if(!((eD->eArrSegPSave)->FindObject(seg))) eD->eArrSegPSave->Add(seg);
2440  }
2441  }
2442  eD->Draw();
2443  }
2444 }
FILE * stdout
virtual void Draw(Option_t *option="")
Definition: EdbDisplayBase.cxx:786
TObjArray * eArrTrSave
Definition: EdbDisplay.h:45
TObjArray * eArrSegP
Definition: EdbDisplay.h:41
TObjArray * eArrTr
Definition: EdbDisplay.h:42
TObjArray * eArrSegPSave
Definition: EdbDisplay.h:44
EdbTrackP * eTrack
Definition: EdbDisplay.h:51
Definition: EdbSegP.h:18
Int_t ID() const
Definition: EdbSegP.h:144
void SetFlag(int flag)
Definition: EdbSegP.h:127
Definition: EdbPattern.h:118
Int_t N() const
Definition: EdbPattern.h:182
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

◆ AddToNewTrackAndFit()

void EdbTrackG::AddToNewTrackAndFit ( )
virtual
2447 {
2448  if (eTr && eD)
2449  {
2450  if (eTr->VTAS() || eTr->VTAE())
2451  {
2452  printf("Track belong to a vertex - impossible destroy it!\n");
2453  fflush(stdout);
2454  return;
2455  }
2456  EdbSegP *seg = 0;
2457  if (!eD->eTrack) eD->eTrack = new EdbTrackP();
2458  for(int is=0; is<eTr->N(); is++) {
2459  seg = eTr->GetSegment(is);
2460  (eD->eTrack)->AddSegment((EdbSegP *)seg);
2461  }
2462  eTr->SetFlag(-10);
2463  eTr->SetSegmentsTrack(-2-(eTr->ID()+1));
2464  if(eD->eArrTr) if((eD->eArrTr)->FindObject(eTr))
2465  {
2466  eD->eArrTr->Remove(eTr);
2467  eD->eArrTr->Compress();
2468  if (!(eD->eArrSegP)) eD->eArrSegP = new TObjArray();
2469  for(int is=0; is<eTr->N(); is++) {
2470  seg = eTr->GetSegment(is);
2471  if(eD->eArrSegP) if(!((eD->eArrSegP)->FindObject(seg))) eD->eArrSegP->Add(seg);
2472  }
2473  }
2474  if(eD->eArrTrSave) if((eD->eArrTrSave)->FindObject(eTr))
2475  {
2476  eD->eArrTrSave->Remove(eTr);
2477  eD->eArrTrSave->Compress();
2478  if (!(eD->eArrSegPSave)) eD->eArrSegPSave = new TObjArray();
2479  for(int is=0; is<eTr->N(); is++) {
2480  seg = eTr->GetSegment(is);
2481  if(eD->eArrSegPSave) if(!((eD->eArrSegPSave)->FindObject(seg))) eD->eArrSegPSave->Add(seg);
2482  }
2483  }
2484  eD->Draw();
2485  float mass = eTr->M();
2486  float momentum = eTr->P();
2487  if (eD->eP > 0.) momentum = eD->eP;
2488  if (eD->eM > 0.) mass = eD->eM;
2489  eD->eTrack->SetM(mass);
2490  eD->eTrack->SetP(momentum);
2491  float X0 = 0.;
2492  if (eD->eVerRec) if ((eD->eVerRec)->ePVR) X0 = (((eD->eVerRec)->ePVR)->GetScanCond())->RadX0();
2493  eD->eTrack->FitTrackKFS(true, X0, 0);
2494  if (!eD->eArrTr) eD->eArrTr = new TObjArray();
2495  (eD->eArrTr)->Add(eD->eTrack);
2496  if (eD->eArrTrSave) (eD->eArrTrSave)->Add(eD->eTrack);
2497  eD->Draw();
2498  }
2499 }
Double_t eM
Definition: EdbDisplay.h:63
EdbVertexRec * eVerRec
Definition: EdbDisplay.h:40
Double_t eP
Definition: EdbDisplay.h:62
Float_t P() const
Definition: EdbSegP.h:149
void SetP(float p)
Definition: EdbSegP.h:130
Float_t M() const
Definition: EdbPattern.h:160
int FitTrackKFS(bool zmax=false, float X0=5810., int design=0)
Definition: EdbPattern.cxx:765
void SetM(float m)
Definition: EdbPattern.h:159
float X0
Definition: emthickness.cpp:69
float mass
Definition: check_vertex.C:21
float momentum
Definition: check_vertex.C:20

◆ AddTrackToVertex()

void EdbTrackG::AddTrackToVertex ( )
virtual
2838 {
2839  char text[512];
2840  int zpos = 1, zpos2 = 1;
2841  EdbVTA *vta = 0;
2842  EdbVertex *old = 0, *eVs = 0;
2843  EdbTrackP *eTr2 = 0;
2844  if (eTr && eD)
2845  {
2846  if (eD->eWait_Answer) return;
2847  if (!(eD->eVertex))
2848  {
2849 
2850  printf("No working vertex selected!\n");
2851  fflush(stdout);
2852  return;
2853  }
2854  if (GetMarkerColor() == kRed) zpos = 0;
2855  if ((old = eTr->VertexS()) && (zpos == 1))
2856  {
2857 
2858  printf("Track alredy connected to a vertex by this edge!\n");
2859  fflush(stdout);
2860  return;
2861  }
2862 // {
2863 // if (old != eD->eVertex && old != eD->ePrevious && old != eD->eWorking) return;
2864 // }
2865  if ((old = eTr->VertexE()) && (zpos == 0))
2866  {
2867 
2868  printf("Track alredy connected to a vertex by this edge!\n");
2869  fflush(stdout);
2870  return;
2871  }
2872 // {
2873 // if (old != eD->eVertex && old != eD->ePrevious && old != eD->eWorking) return;
2874 // }
2875  if (eD->eVerRec) if (eD->eVerRec->IsA() != EdbVertexRec::Class()) eD->eVerRec = 0;
2876  if (!eD->eVerRec) {printf("Error: EdbDisplay:AddTrackToVertex: EdbVertexRec not defined, use SetVerRec(...)\n"); fflush(stdout); return;}
2877  double ImpMaxSave = 0.;
2878  double ProbMinSave = 0.;
2879  if (eD->eVertex->N() == 1 && eD->eVertex->ID() < 0)
2880  {
2881  ImpMaxSave = (eD->eVerRec)->eImpMax;
2882  (eD->eVerRec)->eImpMax = eD->eTImpMax;
2883  ProbMinSave = (eD->eVerRec)->eProbMin;
2884  (eD->eVerRec)->eProbMin = eD->eTProbMin;
2885  eTr2 = (eD->eVertex)->GetTrack(0);
2886  zpos2 = (eD->eVertex)->Zpos(0);
2887  if((eVs = eD->eVerRec->ProbVertex2(eTr2, eTr, zpos2, zpos)))
2888  {
2889  if (eD->eArrV)
2890  {
2891  if (eD->eArrV->FindObject(eD->eVertex))
2892  {
2893  eD->eArrV->Remove(eD->eVertex);
2894  eD->eArrV->Add(eVs);
2895  }
2896  }
2897  delete eD->eVertex;
2898  eVs->SetID(-1);
2899  eD->eVertex = eVs;
2900  eD->CreateCanvasVTX();
2901  eVs->V()->rmsDistAngle();
2902  sprintf(text,"Creat %-4d %-4d %-8.1f %-8.1f %-8.1f %-6.1f %-7.1f %-7.5f",
2903  eVs->ID(), eVs->N(), eVs->VX(), eVs->VY(), eVs->VZ(), eVs->V()->dist(),
2904  eVs->V()->chi2()/eVs->V()->ndf(), eVs->V()->prob());
2905  eD->DrawOldVTX(text);
2906  eD->DrawVTXTracks("Created", eD->eVertex);
2907  eD->DrawEnv();
2908  eD->Draw();
2909  }
2910  else
2911  {
2912  printf("EdbTrackG::AddTrackToVertex: New vertex not created! May be Prob < ProbMin=%f. Change ProbMin with 'TrackParams' button!\n",eD->eTProbMin);
2913  }
2914  (eD->eVerRec)->eImpMax = ImpMaxSave;
2915  (eD->eVerRec)->eProbMin = ProbMinSave;
2916  return;
2917  }
2918  EdbVertex *ePreviousSaved = eD->ePrevious;
2919  if (eD->eWorking == 0)
2920  {
2921  eD->eWorking = new EdbVertex();
2922  int ntr = eD->eVertex->N();
2923  int i = 0, n = 0;
2924  for(i=0; i<ntr; i++)
2925  {
2926  if ((vta = (eD->eVerRec)->AddTrack(*(eD->eWorking), (eD->eVertex)->GetTrack(i), (eD->eVertex)->Zpos(i))))
2927  {
2928  (eD->eVertex)->GetTrack(i)->AddVTA(vta);
2929  n++;
2930  }
2931  }
2932  if (n < 2)
2933  {
2934  delete eD->eWorking;
2935  if (eD->ePrevious)
2936  {
2937  eD->eWorking = eD->ePrevious;
2938  (eD->eWorking)->ResetTracks();
2939  }
2940  else
2941  {
2942  eD->eWorking = 0;
2943  (eD->eVertex)->ResetTracks();
2944  }
2945  printf("Can't create working copy of the vertex!\n");
2946  fflush(stdout);
2947  return;
2948  }
2949 
2950  if (!((eD->eVerRec)->MakeV(*(eD->eWorking))))
2951  {
2952  delete eD->eWorking;
2953  if (eD->ePrevious)
2954  {
2955  eD->eWorking = eD->ePrevious;
2956  (eD->eWorking)->ResetTracks();
2957  }
2958  else
2959  {
2960  eD->eWorking = 0;
2961  (eD->eVertex)->ResetTracks();
2962  }
2963  printf("Can't create working copy of the vertex!\n");
2964  fflush(stdout);
2965  return;
2966  }
2967  }
2968  else
2969  {
2970 // if (ePrevious) delete ePrevious;
2971  eD->ePrevious = eD->eWorking;
2972  eD->eWorking = new EdbVertex();
2973  int ntr = eD->ePrevious->N();
2974  int i = 0, n = 0;
2975  for(i=0; i<ntr; i++)
2976  {
2977  if ((vta = (eD->eVerRec)->AddTrack(*(eD->eWorking),(eD->ePrevious)->GetTrack(i), (eD->ePrevious)->Zpos(i))))
2978  {
2979  ((eD->ePrevious)->GetTrack(i))->AddVTA(vta);
2980  n++;
2981  }
2982  }
2983  if (n < 2)
2984  {
2985  delete eD->eWorking;
2986  if (eD->ePrevious)
2987  {
2988  eD->eWorking = eD->ePrevious;
2989  (eD->eWorking)->ResetTracks();
2990  eD->ePrevious = ePreviousSaved;
2991  }
2992  else
2993  {
2994  eD->eWorking = 0;
2995  (eD->eVertex)->ResetTracks();
2996  }
2997  printf("Can't create working copy of the vertex!\n");
2998  fflush(stdout);
2999  return;
3000  }
3001 
3002  if (!((eD->eVerRec)->MakeV(*(eD->eWorking))))
3003  {
3004  delete eD->eWorking;
3005  if (eD->ePrevious)
3006  {
3007  eD->eWorking = eD->ePrevious;
3008  (eD->eWorking)->ResetTracks();
3009  eD->ePrevious = ePreviousSaved;
3010  }
3011  else
3012  {
3013  eD->eWorking = 0;
3014  (eD->eVertex)->ResetTracks();
3015  }
3016  printf("Can't create working copy of the vertex!\n");
3017  fflush(stdout);
3018  return;
3019  }
3020  }
3021  ImpMaxSave = (eD->eVerRec)->eImpMax;
3022  (eD->eVerRec)->eImpMax = eD->eTImpMax;
3023  ProbMinSave = (eD->eVerRec)->eProbMin;
3024  (eD->eVerRec)->eProbMin = eD->eTProbMin;
3025  if ((vta = (eD->eVerRec)->AddTrack(*(eD->eWorking), eTr, zpos)))
3026  {
3027  eTr->AddVTA(vta);
3028  EdbVertex *eW = eD->eWorking;
3029  eW->SetID(eD->eVertex->ID());
3030  eW->V()->rmsDistAngle();
3031  sprintf(text,"New %-4d %-4d %-8.1f %-8.1f %-8.1f %-6.1f %-7.1f %-7.5f",
3032  eW->ID(), eW->N(), eW->VX(), eW->VY(), eW->VZ(), eW->V()->dist(),
3033  eW->V()->chi2()/eW->V()->ndf(), eW->V()->prob());
3034  eD->DrawOldBut("Original");
3035  if (eD->ePrevious)
3036  {
3037  eD->DrawNewVTX(text);
3038  eD->DrawNewBut("Modified");
3039  eW = eD->ePrevious;
3040  eW->V()->rmsDistAngle();
3041  sprintf(text,"Pre %-4d %-4d %-8.1f %-8.1f %-8.1f %-6.1f %-7.1f %-7.5f",
3042  eW->ID(), eW->N(), eW->VX(), eW->VY(), eW->VZ(), eW->V()->dist(),
3043  eW->V()->chi2()/eW->V()->ndf(), eW->V()->prob());
3044  eD->DrawPreVTX(text);
3045  eD->DrawPreBut("Previous");
3046  }
3047  else
3048  {
3049  eD->DrawPreVTX(text);
3050  eD->DrawPreBut("Modified");
3051  if (eD->eVertex->ID() >= 0)
3052  {
3053  eD->DrawAcc();
3054  eD->DrawCan();
3055  eD->DrawUnd();
3056  }
3057  }
3058 // eD->DrawOldBut("Original");
3059  eD->DrawVTXTracks("Modified", eD->eWorking);
3060  if (eD->eArrV && (eD->eIndVert >= 0))
3061  {
3062 // eD->eArrV->RemoveAt(eD->eIndVert);
3063  eD->eArrV->AddAt(eD->eWorking, eD->eIndVert);
3064  }
3065  eD->Draw();
3066  if (ePreviousSaved) delete ePreviousSaved;
3067  ePreviousSaved = 0;
3068  (eD->eVerRec)->eImpMax = ImpMaxSave;
3069  (eD->eVerRec)->eProbMin = ProbMinSave;
3070  }
3071  else
3072  {
3073  printf("Track not added! May be Prob < ProbMin. Change ProbMin with 'TrackParams' button!\n");
3074  fflush(stdout);
3075  delete eD->eWorking;
3076  if (eD->ePrevious)
3077  {
3078  eD->eWorking = eD->ePrevious;
3079  (eD->eWorking)->ResetTracks();
3080  eD->ePrevious = ePreviousSaved;
3081  }
3082  else
3083  {
3084  eD->eWorking = 0;
3085  (eD->eVertex)->ResetTracks();
3086  }
3087  (eD->eVerRec)->eImpMax = ImpMaxSave;
3088  (eD->eVerRec)->eProbMin = ProbMinSave;
3089  return;
3090  }
3091  }
3092 }
TText * text
Definition: Canv_SYSTEMATICS_ALLCOMBINED__RMSEnergy__vs__Energy__ELECTRON.C:164
if(max<=10) return
virtual void CreateCanvasVTX()
Definition: EdbDisplayBase.cxx:992
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 DrawOldVTX(char *text)
Definition: EdbDisplayBase.cxx:926
virtual void DrawUnd()
Definition: EdbDisplayBase.cxx:1137
virtual void DrawPreBut(char *text)
Definition: EdbDisplayBase.cxx:1077
virtual void DrawCan()
Definition: EdbDisplayBase.cxx:1169
virtual void DrawEnv()
Definition: EdbDisplayBase.cxx:1185
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
Int_t eIndVert
Definition: EdbDisplay.h:56
EdbVertex * eVertex
Definition: EdbDisplay.h:48
Double_t eTImpMax
Definition: EdbDisplay.h:64
Bool_t eWait_Answer
Definition: EdbDisplay.h:55
EdbVertex * eWorking
Definition: EdbDisplay.h:47
void AddVTA(EdbVTA *vta)
Definition: EdbPattern.cxx:493
EdbVertex * VertexS()
Definition: EdbPattern.cxx:1284
EdbVertex * VertexE()
Definition: EdbPattern.cxx:1291
Definition: EdbVertex.h:25
EdbVertex * ProbVertex2(EdbTrackP *tr1, EdbTrackP *tr2, int zpos1, int zpos2)
Definition: EdbVertex.cxx:1324
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

◆ DeleteTrack()

void EdbTrackG::DeleteTrack ( )
virtual
2360 {
2361  if (eTr && eD)
2362  {
2363  if (eTr->VTAS() || eTr->VTAE())
2364  {
2365  printf("Track belong to a vertex - impossible delete it!\n");
2366  fflush(stdout);
2367  return;
2368  }
2369  eTr->SetFlag(-10);
2370  eTr->SetSegmentsTrack(-1);
2371  EdbSegP *seg = 0;
2372  if(eD->eArrTr) if((eD->eArrTr)->FindObject(eTr))
2373  {
2374  eD->eArrTr->Remove(eTr);
2375  eD->eArrTr->Compress();
2376  if (!(eD->eArrSegP)) eD->eArrSegP = new TObjArray();
2377  for(int is=0; is<eTr->N(); is++) {
2378  seg = eTr->GetSegment(is);
2379  if(eD->eArrSegP) if(!((eD->eArrSegP)->FindObject(seg))) eD->eArrSegP->Add(seg);
2380  }
2381  }
2382  if(eD->eArrTrSave) if((eD->eArrTrSave)->FindObject(eTr))
2383  {
2384  eD->eArrTrSave->Remove(eTr);
2385  eD->eArrTr->Compress();
2386  if (!(eD->eArrSegPSave)) eD->eArrSegPSave = new TObjArray();
2387  for(int is=0; is<eTr->N(); is++) {
2388  seg = eTr->GetSegment(is);
2389  if(eD->eArrSegPSave) if(!((eD->eArrSegPSave)->FindObject(seg))) eD->eArrSegPSave->Add(seg);
2390  }
2391  }
2392  eD->Draw();
2393  }
2394 }

◆ DumpTrack()

void EdbTrackG::DumpTrack ( )
virtual
74 {
75  if (eTr) eTr->Print();
76 }
void Print()
Definition: EdbPattern.cxx:1245

◆ EstimateMomentum()

void EdbTrackG::EstimateMomentum ( )
virtual
86 {
87  if (!eTr) return;
89  me.PMSang(*eTr);
90  me.DrawPlots();
91 }
Definition: EdbMomentumEstimator.h:20
float PMSang(EdbTrackP &tr)
Definition: EdbMomentumEstimator.cxx:255
void DrawPlots(TCanvas *c1=NULL)
Definition: EdbMomentumEstimator.cxx:724

◆ FixNewTrack()

void EdbTrackG::FixNewTrack ( )
virtual
2193 {
2194  if (eTr && eD)
2195  {
2196  if (eD->eTrack)
2197  {
2198  if (eTr == eD->eTrack)
2199  {
2200  TObjArray *etr = 0;
2201  if (eD->eVerRec) etr = (eD->eVerRec)->eEdbTracks;
2202  int trind = 0;
2203  if (etr) trind = etr->GetEntriesFast();
2204  (eD->eTrack)->SetID(trind);
2205  if (etr) etr->Add(eD->eTrack);
2206  (eD->eTrack)->SetSegmentsTrack();
2207  eD->eTrack = 0;
2208  eD->Draw();
2209  }
2210  }
2211  if (eD->eTrack1)
2212  {
2213  if (eTr == eD->eTrack1)
2214  {
2215  TObjArray *etr = 0;
2216  if (eD->eVerRec) etr = (eD->eVerRec)->eEdbTracks;
2217  int trind = 0;
2218  if (etr) trind = etr->GetEntriesFast();
2219  (eD->eTrack1)->SetID(trind);
2220  if (etr) etr->Add(eD->eTrack1);
2221  (eD->eTrack1)->SetSegmentsTrack();
2222  eD->eTrack1 = 0;
2223  eD->Draw();
2224  }
2225  }
2226 
2227  if (eD->eTrack2)
2228  {
2229  if (eTr == eD->eTrack2)
2230  {
2231  TObjArray *etr = 0;
2232  if (eD->eVerRec) etr = (eD->eVerRec)->eEdbTracks;
2233  int trind = 0;
2234  if (etr) trind = etr->GetEntriesFast();
2235  (eD->eTrack2)->SetID(trind);
2236  if (etr) etr->Add(eD->eTrack2);
2237  (eD->eTrack2)->SetSegmentsTrack();
2238  eD->eTrack2 = 0;
2239  eD->Draw();
2240  }
2241  }
2242  }
2243 }
EdbTrackP * eTrack1
Definition: EdbDisplay.h:52
EdbTrackP * eTrack2
Definition: EdbDisplay.h:53

◆ GetName()

const char * EdbTrackG::GetName ( ) const
virtual
104 {
105  static char name[] = "Track";
106  return name;
107 }
const char * name
Definition: merge_Energy_SytematicSources_Electron.C:24

◆ GetObjectInfo()

char * EdbTrackG::GetObjectInfo ( int  px,
int  py 
) const
virtual
111 {
112  static char coordinates[80];
113  float tx = 0., ty = 0., z = 0.;
114  int zpos = 1;
115  if (GetMarkerColor() == kRed) zpos = 0;
116  if( zpos == 0 )
117  {
118  tx = (eTr->TrackZmax())->TX();
119  ty = (eTr->TrackZmax())->TY();
120  z = (eTr->TrackZmax())->Z();
121  }
122  else
123  {
124  tx = (eTr->TrackZmin())->TX();
125  ty = (eTr->TrackZmin())->TY();
126  z = (eTr->TrackZmin())->Z();
127  }
128  sprintf(coordinates, "X = %.1f, Y = %.1f, Z = %.1f, TX = %.3f, TY = %.3f", eTr->X(), eTr->Y(), z, tx, ty);
129  return coordinates;
130 }
Float_t X() const
Definition: EdbSegP.h:170
Float_t Y() const
Definition: EdbSegP.h:171
EdbSegP * TrackZmin(bool usesegpar=false) const
Definition: EdbPattern.h:203
EdbSegP * TrackZmax(bool usesegpar=false) const
Definition: EdbPattern.h:204
struct @8 Z
Double_t TY
Definition: tlg2pattern.C:79
Double_t TX
Definition: tlg2pattern.C:79

◆ GetTitle()

const char * EdbTrackG::GetTitle ( ) const
virtual
95 {
96  static char title[80];
97  if (eTr) sprintf(title, "Track ID %d, Nseg %d, Prob %.4f, P %.3f", eTr->ID(), eTr->N(), eTr->Prob(), eTr->P());
98  else strcpy(title, "Track address not defined");
99  return title;
100 }
Float_t Prob() const
Definition: EdbSegP.h:153
strcpy(cmd,"cp Shower.root Shower2.root")

◆ InfoTrackVert()

void EdbTrackG::InfoTrackVert ( )
virtual
3095 {
3096  if (!(eD->eVertex))
3097  {
3098 
3099  printf("No working vertex selected!\n");
3100  fflush(stdout);
3101  return;
3102  }
3103  int zpos = 1;
3104  if (GetMarkerColor() == kRed) zpos = 0;
3105  EdbVertex *v = eD->eVertex;
3106  if (eD->eWorking) v = eD->eWorking;
3107  char CanvasTRKName[140];
3108  strcpy(CanvasTRKName, "TRK-");
3109  strcat(CanvasTRKName, (eD->fCanvas)->GetName());
3110  if ((eD->fCanvasTRK = (TCanvas *)(gROOT->GetListOfCanvases()->FindObject(CanvasTRKName))))
3111  {
3112  (eD->fCanvasTRK)->SetTitle("Track - Vertex relation parameters");
3113  (eD->fCanvasTRK)->Clear();
3114  (eD->fCanvasTRK)->Modified();
3115  (eD->fCanvasTRK)->Update();
3116  }
3117  else
3118  {
3119  int xpos = (eD->fCanvas)->GetWindowTopX()+(eD->fCanvas)->GetWw();
3120  int ypos = (eD->fCanvas)->GetWindowTopY();
3121  eD->fCanvasTRK = new TCanvas(CanvasTRKName, "Track - Vertex relation parameters",
3122  -xpos, ypos, 640, 330);
3123 // (eD->fCanvasTRK)->ToggleEventStatus();
3124  }
3125  if (eD->fVTXTRKInfo)
3126  {
3127  (eD->fVTXTRKInfo)->Clear();
3128  }
3129  else
3130  {
3131  eD->fVTXTRKInfo = new TPaveText(0.05, 0.05, 0.95, 0.95);
3132  (eD->fVTXTRKInfo)->ResetBit(kCanDelete);
3133  }
3134  char line[128];
3135  EdbTrackP *tr = eTr;
3136  TText *t = 0;
3137 
3138  strcpy(line, " Track ID Nseg Mass P Chi2/ndf Prob");
3139  t = (eD->fVTXTRKInfo)->AddText(line);
3140  t->SetTextColor(kBlue);
3141  t->SetTextSize(0.03);
3142  t->SetTextAlign(12);
3143  t->SetTextFont(102);
3144 
3145  sprintf(line," %4d %4d %7.4f %7.2f %5.2f %7.4f",
3146  tr->ID(), tr->N(), tr->M(), tr->P(),
3147  tr->Chi2()/tr->N(), tr->Prob());
3148  t = (eD->fVTXTRKInfo)->AddText(line);
3149  t->SetTextColor(kBlack);
3150  t->SetTextSize(0.03);
3151  t->SetTextAlign(12);
3152  t->SetTextFont(102);
3153 
3154 // t = (eD->fVTXTRKInfo)->AddText("");
3155 // t->SetTextColor(kBlack);
3156 // t->SetTextSize(0.03);
3157 // t->SetTextAlign(12);
3158 // t->SetTextFont(102);
3159 
3160  strcpy(line, " Vertex ID Mult X Y Z Dist Chi2 Prob");
3161  t = (eD->fVTXTRKInfo)->AddText(line);
3162  t->SetTextColor(kBlue);
3163  t->SetTextSize(0.03);
3164  t->SetTextAlign(12);
3165  t->SetTextFont(102);
3166 
3167  sprintf(line," %-4d %-4d %-8.1f %-8.1f %-8.1f %-6.1f %-7.1f %-7.5f",
3168  v->ID(), v->N(), v->VX(), v->VY(), v->VZ(), v->V()->dist(),
3169  v->V()->chi2()/v->V()->ndf(), v->V()->prob());
3170  t = (eD->fVTXTRKInfo)->AddText(line);
3171  t->SetTextColor(kBlack);
3172  t->SetTextSize(0.03);
3173  t->SetTextAlign(12);
3174  t->SetTextFont(102);
3175 
3176 // t = (eD->fVTXTRKInfo)->AddText("");
3177 // t->SetTextColor(kBlack);
3178 // t->SetTextSize(0.03);
3179 // t->SetTextAlign(12);
3180 // t->SetTextFont(102);
3181 
3182  EdbSegP *seg = tr->TrackExtremity( zpos );//, eUseSegPar);
3183  float dx = v->VX() - seg->X();
3184  float dy = v->VY() - seg->Y();
3185  float dz = v->VZ() - seg->Z();
3186  float dist = TMath::Sqrt(dx*dx + dy*dy + dz*dz);
3187 
3188  float mass = tr->M();
3189  float momentum = tr->P();
3190  if (eD->eP > 0.) seg->SetP(eD->eP);
3191  if (eD->eM > 0.) tr->SetM(eD->eM);
3192 
3193  float X0 = 0.;
3194  if (eD->eVerRec) if ((eD->eVerRec)->ePVR) X0 = (((eD->eVerRec)->ePVR)->GetScanCond())->RadX0();
3195 
3196  float chi2 = v->Chi2Track(tr, zpos, X0);
3197  float impa = v->DistTrack(tr, zpos, X0);
3198 
3199  seg->SetP(momentum);
3200  tr->SetM(mass);
3201 
3202  sprintf(line, " Track - Vertex impact = %-6.1f, chi2 = %-7.1f, distance = %-8.1f", impa, chi2, dist);
3203  t = (eD->fVTXTRKInfo)->AddText(line);
3204  t->SetTextColor(kRed);
3205  t->SetTextSize(0.03);
3206  t->SetTextAlign(12);
3207  t->SetTextFont(102);
3208 
3209  t = (eD->fVTXTRKInfo)->AddText("");
3210  t->SetTextColor(kBlack);
3211  t->SetTextSize(0.03);
3212  t->SetTextAlign(12);
3213  t->SetTextFont(102);
3214 
3215  (eD->fVTXTRKInfo)->Draw();
3216  (eD->fCanvasTRK)->Modified();
3217  (eD->fCanvasTRK)->Update();
3218 }
Canv_RMSEnergy__vs__Energy Modified()
brick dz
Definition: RecDispMC.C:107
TTree * tr
Definition: Shower_E_FromShowerRoot.C:5
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
Float_t Z() const
Definition: EdbSegP.h:150
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
new TCanvas()
Float_t chi2
Definition: testBGReduction_By_ANN.C:14
ePVR
Definition: testBGReduction_By_ANN.C:3

◆ InspectTrack()

void EdbTrackG::InspectTrack ( )
virtual
80 {
81  if (eTr) eTr->Inspect();
82 }

◆ RemoveTrackFromVertex()

void EdbTrackG::RemoveTrackFromVertex ( )
virtual
2502 {
2503  char text[512];
2504  if (eTr && eD)
2505  {
2506  if (eD->eVerRec) if (eD->eVerRec->IsA() != EdbVertexRec::Class()) eD->eVerRec = 0;
2507  if (!eD->eVerRec) {printf("Error: EdbDisplay:RemoveTrackFromVertex: EdbVertexRec not defined, use SetVerRec(...)\n"); fflush(stdout); return;}
2508  if (eD->eWait_Answer) return;
2509  if (!(eD->eVertex))
2510  {
2511 
2512  printf("No working vertex selected!\n");
2513  fflush(stdout);
2514  return;
2515  }
2516  EdbVTA *vta = 0;
2517  EdbVertex *ePreviousSaved = eD->ePrevious;
2518  int n = 0;
2519  int ntr = 0;
2520  if (eD->eWorking == 0)
2521  {
2522  ntr = eD->eVertex->N();
2523  if (ntr < 3)
2524  {
2525 
2526  printf("Working vertex has 2 prongs only!\n");
2527  fflush(stdout);
2528  return;
2529  }
2530  eD->eWorking = new EdbVertex();
2531  int i = 0;
2532  for(i=0; i<ntr; i++)
2533  {
2534  if (eD->eVertex->GetTrack(i) == eTr)
2535  {
2536  eTr->ClearVTA(eD->eVertex->GetVTa(i));
2537  continue;
2538  }
2539  if ((vta = (eD->eVerRec)->AddTrack( *(eD->eWorking), (eD->eVertex)->GetTrack(i), (eD->eVertex)->Zpos(i))))
2540  {
2541  ((eD->eVertex)->GetTrack(i))->AddVTA(vta);
2542  n++;
2543  }
2544  }
2545  }
2546  else
2547  {
2548  ntr = eD->eWorking->N();
2549  if (ntr < 3)
2550  {
2551 
2552  printf("Working vertex has 2 prongs only!\n");
2553  fflush(stdout);
2554  return;
2555  }
2556  eD->ePrevious = eD->eWorking;
2557  eD->eWorking = new EdbVertex();
2558  int i = 0;
2559  for(i=0; i<ntr; i++)
2560  {
2561  if (eD->ePrevious->GetTrack(i) == eTr)
2562  {
2563  eTr->ClearVTA(eD->ePrevious->GetVTa(i));
2564  continue;
2565  }
2566  if ((vta = (eD->eVerRec)->AddTrack(*(eD->eWorking),(eD->ePrevious)->GetTrack(i), (eD->ePrevious)->Zpos(i))))
2567  {
2568  ((eD->ePrevious)->GetTrack(i))->AddVTA(vta);
2569  n++;
2570  }
2571  }
2572  }
2573  if ((n < 2)||(n == ntr))
2574  {
2575  delete eD->eWorking;
2576  if (eD->ePrevious)
2577  {
2578  eD->eWorking = eD->ePrevious;
2579  (eD->eWorking)->ResetTracks();
2580  eD->ePrevious = ePreviousSaved;
2581  }
2582  else
2583  {
2584  eD->eWorking = 0;
2585  (eD->eVertex)->ResetTracks();
2586  }
2587  printf("Can't create working copy of the vertex!\n");
2588  fflush(stdout);
2589  return;
2590  }
2591 
2592  if ((eD->eVerRec)->MakeV(*(eD->eWorking)))
2593  {
2594  EdbVertex *eW = eD->eWorking;
2595  eW->ResetTracks();
2596  eW->SetID(eD->eVertex->ID());
2597  eW->V()->rmsDistAngle();
2598  sprintf(text,"New %-4d %-4d %-8.1f %-8.1f %-8.1f %-6.1f %-7.1f %-7.5f",
2599  eW->ID(), eW->N(), eW->VX(), eW->VY(), eW->VZ(), eW->V()->dist(),
2600  eW->V()->chi2()/eW->V()->ndf(), eW->V()->prob());
2601  eD->DrawOldBut("Original");
2602  if (eD->ePrevious)
2603  {
2604  eD->DrawNewVTX(text);
2605  eD->DrawNewBut("Modified");
2606  eW = eD->ePrevious;
2607  sprintf(text,"Pre %-4d %-4d %-8.1f %-8.1f %-8.1f %-6.1f %-7.1f %-7.5f",
2608  eW->ID(), eW->N(), eW->VX(), eW->VY(), eW->VZ(), eW->V()->dist(),
2609  eW->V()->chi2()/eW->V()->ndf(), eW->V()->prob());
2610  eD->DrawPreVTX(text);
2611  eD->DrawPreBut("Previous");
2612  }
2613  else
2614  {
2615  eD->DrawPreVTX(text);
2616  eD->DrawPreBut("Modified");
2617  if (eD->eVertex->ID() >= 0)
2618  {
2619  eD->DrawAcc();
2620  eD->DrawCan();
2621  eD->DrawUnd();
2622  }
2623  }
2624 // eD->DrawOldBut("Original");
2625  eD->DrawVTXTracks("Modified", eD->eWorking);
2626  if (eD->eArrV && (eD->eIndVert >= 0))
2627  {
2628 // eD->eArrV->RemoveAt(eD->eIndVert);
2629  eD->eArrV->AddAt(eD->eWorking, eD->eIndVert);
2630  }
2631 // if ((eD->eCreatedTracks).FindObject(eTr))
2632 // {
2633 // (eD->eCreatedTracks).Remove(eTr);
2634 // if ( eD->eArrTr)
2635 // if ((eD->eArrTr)->FindObject(eTr)) (eD->eArrTr)->Remove(eTr);
2636 // if ( eD->eArrTrSave)
2637 // if ((eD->eArrTrSave)->FindObject(eTr)) (eD->eArrTrSave)->Remove(eTr);
2638 // delete eTr;
2639 // }
2640  eD->Draw();
2641  if (ePreviousSaved) delete ePreviousSaved;
2642  ePreviousSaved = 0;
2643  }
2644  else
2645  {
2646  delete eD->eWorking;
2647  if (eD->ePrevious)
2648  {
2649  eD->eWorking = eD->ePrevious;
2650  (eD->eWorking)->ResetTracks();
2651  eD->ePrevious = ePreviousSaved;
2652  }
2653  else
2654  {
2655  eD->eWorking = 0;
2656  (eD->eVertex)->ResetTracks();
2657  }
2658  printf("Can't create working copy of the vertex!\n");
2659  fflush(stdout);
2660  }
2661  }
2662 }
void ClearVTA()
Definition: EdbPattern.cxx:502
EdbTrackP * GetTrack(int i)
Definition: EdbVertex.h:141
EdbVTA * GetVTa(int i)
Definition: EdbVertex.h:139
void ResetTracks()
Definition: EdbVertex.cxx:209

◆ SetAsWorkingVertex()

void EdbTrackG::SetAsWorkingVertex ( )
virtual
1767 {
1768  printf("1\n");
1769  EdbTrackP *tr = 0;
1770  EdbDisplay *eDs = 0;
1771  EdbVTA *vta = 0;
1772  EdbVertex *eVs = 0, *old = 0;
1773  int zpos = 1;
1774  eDs = eD;
1775  if (eDs && eTr)
1776  {
1777  if (eDs->eWait_Answer) return;
1778  if (eDs->eWorking)
1779  {
1780  eDs->DialogModifiedVTX();
1781  return;
1782  }
1783  if (eDs->eVertex)
1784  {
1785  if (eDs->eVertex->ID()<0 && eDs->eVertex->N() >= 2)
1786  {
1787  eDs->DialogModifiedVTX();
1788  return;
1789  }
1790  }
1791  if (eDs->eVertex)
1792  {
1793  eDs->CancelModifiedVTX();
1794  }
1795  if (eDs->eSegPM)
1796  {
1797  eDs->ClearSegmentEnv();
1798  }
1799  if (GetMarkerColor() == kRed) zpos = 0;
1800  if ((old = eTr->VertexS()) && (zpos == 1))
1801  {
1802 
1803  printf("Track alredy connected to a vertex by this edge!\n");
1804  fflush(stdout);
1805  return;
1806  }
1807  if ((old = eTr->VertexE()) && (zpos == 0))
1808  {
1809 
1810  printf("Track alredy connected to a vertex by this edge!\n");
1811  fflush(stdout);
1812  return;
1813  }
1814  eVs = new EdbVertex();
1815  if ((vta = (eD->eVerRec)->AddTrack(*eVs, eTr, zpos)))
1816  {
1817  eTr->AddVTA(vta);
1818  }
1819  else
1820  {
1821  delete eVs;
1822  printf("Can't connect track to a vertex!\n");
1823  fflush(stdout);
1824  return;
1825  }
1826  double dz = 0.;
1827  EdbSegP *seg = 0;
1828  if( zpos == 0 )
1829  {
1830  seg = eTr->TrackZmax();
1831  dz = TMath::Abs(seg->DZ());
1832  }
1833  else
1834  {
1835  seg = eTr->TrackZmin();
1836  }
1837  if(!seg)
1838  {
1839  eVs->SetXYZ(eTr->X(), eTr->Y(), eTr->Z());
1840  }
1841  else
1842  {
1843  eVs->SetXYZ(seg->X()+seg->TX()*dz, seg->Y()+seg->TY()*dz, seg->Z()+dz);
1844  }
1845  printf("2\n");
1846  eVs->SetID(-1);
1847  SetMarkerColor(kGreen);
1848  eDs->eSegment = 0;
1849  eDs->eVertex = eVs;
1850  eDs->eWorking = 0;
1851  eDs->ePrevious = 0;
1852  eDs->eIndVert = -1;
1853  (eDs->eCreatedTracks).Clear();
1854  if (!(eDs->eArrV))
1855  {
1856  eDs->eArrV = new TObjArray(20);
1857  eDs->eArrV->Add((TObject *)eVs);
1858  if (!(eDs->eArrTr)) eDs->eArrTr = new TObjArray(20);
1859  for (int i=0; i<eVs->N(); i++)
1860  {
1861  tr = eVs->GetTrack(i);
1862  if(!(eDs->eArrTr->FindObject(tr))) eDs->eArrTr->Add(tr);
1863  }
1864  eDs->Draw();
1865  }
1866  else
1867  {
1868  if (!((eDs->eArrV)->FindObject(eVs)))
1869  {
1870  eDs->eArrV->Add(eVs);
1871  if (!(eDs->eArrTr)) eDs->eArrTr = new TObjArray(20);
1872  for (int i=0; i<eVs->N(); i++)
1873  {
1874  tr = eVs->GetTrack(i);
1875  if(!(eDs->eArrTr->FindObject(tr))) eDs->eArrTr->Add(tr);
1876  }
1877  eDs->Draw();
1878  }
1879  }
1880  //eD->DrawEnv();
1881  eD->DrawAcc();
1882  eD->DrawCan();
1883  eD->DrawUnd();
1884  eD->Draw();
1885  printf("3\n");
1886  }
1887 }
entry SetMarkerColor(1)
Definition: EdbDisplay.h:21
void CancelModifiedVTX()
Definition: EdbDisplay.cxx:3220
TList eCreatedTracks
Definition: EdbDisplay.h:58
EdbSegP * eSegment
Definition: EdbDisplay.h:50
void ClearSegmentEnv()
Definition: EdbDisplay.cxx:4214
TPolyMarker3D * eSegPM
Definition: EdbDisplay.h:54
void DialogModifiedVTX()
Definition: EdbDisplay.cxx:4043
Float_t DZ() const
Definition: EdbSegP.h:151
Float_t TX() const
Definition: EdbSegP.h:172
Float_t TY() const
Definition: EdbSegP.h:173
void SetXYZ(float x, float y, float z)
Definition: EdbVertex.h:157

◆ SetTrack()

void EdbTrackG::SetTrack ( EdbTrackP tr)
inline
172 {eTr=tr;}

◆ UndoNewTrack()

void EdbTrackG::UndoNewTrack ( )
virtual
2043 {
2044  if (eD->eTrack && eD->eTrack == eTr)
2045  {
2046  if (eD->eVerRec) if (eD->eVerRec->IsA() != EdbVertexRec::Class()) eD->eVerRec = 0;
2047  if (!eD->eVerRec) {printf("Error: EdbDisplay:UndoNewTrack: EdbVertexRec not defined, use SetVerRec(...)\n"); fflush(stdout); return;}
2048  TObjArray *etr = 0;
2049  if (eD->eVerRec) etr = eD->eVerRec->eEdbTracks;
2050 
2051  for(int is=0; is<eD->eTrack->N(); is++) {
2052  EdbSegP *seg = eD->eTrack->GetSegment(is);
2053  if (seg->Track() == -2) seg->SetTrack(-1);
2054  else if (seg->Track() < -2)
2055  {
2056  int ind = -(seg->Track()+2) - 1;
2057  if (!etr)
2058  {
2059  printf("No information about tracks array!\n");
2060  fflush(stdout);
2061  return;
2062  }
2063  int trind = etr->GetEntriesFast();
2064  if (ind >= trind)
2065  {
2066  printf("Wrong track index in segment!\n");
2067  fflush(stdout);
2068  return;
2069  }
2070  EdbTrackP *tr = (EdbTrackP *)(etr->At(ind));
2071  if (!tr)
2072  {
2073  printf("Wrong track address in array!\n");
2074  fflush(stdout);
2075  return;
2076  }
2077  tr->SetFlag(0);
2078  tr->SetSegmentsTrack();
2079  if(eD->eArrTr) if(!((eD->eArrTr)->FindObject(tr)))
2080  {
2081  eD->eArrTr->Add(tr);
2082  }
2083  if(eD->eArrTrSave) if(!((eD->eArrTrSave)->FindObject(tr)))
2084  {
2085  eD->eArrTrSave->Add(tr);
2086  }
2087  }
2088  }
2089  if(eD->eArrTr) if((eD->eArrTr)->FindObject(eTr))
2090  {
2091  eD->eArrTr->Remove(eTr);
2092  eD->eArrTr->Compress();
2093  }
2094  if(eD->eArrTrSave) if((eD->eArrTrSave)->FindObject(eTr))
2095  {
2096  eD->eArrTrSave->Remove(eTr);
2097  eD->eArrTr->Compress();
2098  }
2099  eD->Draw();
2100  delete eD->eTrack;
2101  eD->eTrack = 0;
2102  }
2103  else
2104  {
2105  printf("No intermediate track or this one fixed already!\n");
2106  fflush(stdout);
2107  return;
2108  }
2109 }
Int_t Track() const
Definition: EdbSegP.h:147
void SetTrack(int trid)
Definition: EdbSegP.h:128
TObjArray * eEdbTracks
Definition: EdbVertex.h:204

◆ UndoRemoveKink()

void EdbTrackG::UndoRemoveKink ( )
virtual
2246 {
2247  if (eD && eTr)
2248  {
2249  if (!(eD->eTrack))
2250  {
2251  printf("No joined track or this one fixed already!\n");
2252  fflush(stdout);
2253  return;
2254  }
2255  if (eD->eVerRec) if (eD->eVerRec->IsA() != EdbVertexRec::Class()) eD->eVerRec = 0;
2256  if (!eD->eVerRec) {printf("Error: EdbDisplay:UndoRemoveKink: EdbVertexRec not defined, use SetVerRec(...)\n"); fflush(stdout); return;}
2257  TObjArray *etr = 0;
2258  if (eD->eVerRec) etr = eD->eVerRec->eEdbTracks;
2259 
2260  for(int is=0; is<eD->eTrack->N(); is++) {
2261  EdbSegP *seg = eD->eTrack->GetSegment(is);
2262  if (seg->Track() == -2) seg->SetTrack(-1);
2263  else if (seg->Track() < -2)
2264  {
2265  int ind = -(seg->Track()+2) - 1;
2266  if (!etr)
2267  {
2268  printf("No information about tracks array!\n");
2269  fflush(stdout);
2270  return;
2271  }
2272  int trind = etr->GetEntriesFast();
2273  if (ind >= trind)
2274  {
2275  printf("Wrong track index in segment!\n");
2276  fflush(stdout);
2277  return;
2278  }
2279  EdbTrackP *tr = (EdbTrackP *)(etr->At(ind));
2280  if (!tr)
2281  {
2282  printf("Wrong track address in array!\n");
2283  fflush(stdout);
2284  return;
2285  }
2286  tr->SetFlag(0);
2287  tr->SetSegmentsTrack();
2288  if(eD->eArrTr) if(!((eD->eArrTr)->FindObject(tr)))
2289  {
2290  eD->eArrTr->Add(tr);
2291  }
2292  if(eD->eArrTrSave) if(!((eD->eArrTrSave)->FindObject(tr)))
2293  {
2294  eD->eArrTrSave->Add(tr);
2295  }
2296  EdbVertex *v = 0;
2297  if (tr->VTAS())
2298  {
2299  v = tr->VertexS();
2300  if (v)
2301  {
2302  if (v->Flag() == -11)
2303  {
2304  v->SetFlag(0);
2305  if(eD->eArrV) if(!((eD->eArrV)->FindObject(v)))
2306  {
2307  eD->eArrV->Add(v);
2308  }
2309  if(eD->eArrVSave) if(!((eD->eArrVSave)->FindObject(v)))
2310  {
2311  eD->eArrVSave->Add(v);
2312  }
2313  }
2314  }
2315  }
2316  if (tr->VTAE())
2317  {
2318  v = tr->VertexE();
2319  if (v)
2320  {
2321  if (v->Flag() == -11)
2322  {
2323  v->SetFlag(0);
2324  if(eD->eArrV) if(!((eD->eArrV)->FindObject(v)))
2325  {
2326  eD->eArrV->Add(v);
2327  }
2328  if(eD->eArrVSave) if(!((eD->eArrVSave)->FindObject(v)))
2329  {
2330  eD->eArrVSave->Add(v);
2331  }
2332  }
2333  }
2334  }
2335  }
2336  }
2337  if(eD->eArrTr) if((eD->eArrTr)->FindObject(eD->eTrack))
2338  {
2339  eD->eArrTr->Remove(eD->eTrack);
2340  eD->eArrTr->Compress();
2341  }
2342  if(eD->eArrTrSave) if((eD->eArrTrSave)->FindObject(eD->eTrack))
2343  {
2344  eD->eArrTrSave->Remove(eD->eTrack);
2345  eD->eArrTr->Compress();
2346  }
2347  eD->Draw();
2348  delete eD->eTrack;
2349  eD->eTrack = 0;
2350  }
2351  else
2352  {
2353  printf("No parts of splitted track or these ones fixed already!\n");
2354  fflush(stdout);
2355  return;
2356  }
2357 }
TObjArray * eArrVSave
Definition: EdbDisplay.h:46
void SetFlag(int flag=0)
Definition: EdbVertex.h:158
Int_t Flag() const
Definition: EdbVertex.h:124

◆ UndoSplit()

void EdbTrackG::UndoSplit ( )
virtual
2112 {
2113  if (eD->eTrack1 && eD->eTrack2 && ((eD->eTrack1 == eTr) || (eD->eTrack2 == eTr)))
2114  {
2115  if (eD->eVerRec) if (eD->eVerRec->IsA() != EdbVertexRec::Class()) eD->eVerRec = 0;
2116  if (!eD->eVerRec) {printf("Error: EdbDisplay:UndoSplit: EdbVertexRec not defined, use SetVerRec(...)\n"); fflush(stdout); return;}
2117  TObjArray *etr = 0;
2118  if (eD->eVerRec) etr = eD->eVerRec->eEdbTracks;
2119 
2120  for(int is=0; is<eD->eTrack1->N(); is++) {
2121  EdbSegP *seg = eD->eTrack1->GetSegment(is);
2122  if (seg->Track() == -2) seg->SetTrack(-1);
2123  else if (seg->Track() < -2)
2124  {
2125  int ind = -(seg->Track()+2) - 1;
2126  if (!etr)
2127  {
2128  printf("No information about tracks array!\n");
2129  fflush(stdout);
2130  return;
2131  }
2132  int trind = etr->GetEntriesFast();
2133  if (ind >= trind)
2134  {
2135  printf("Wrong track index in segment!\n");
2136  fflush(stdout);
2137  return;
2138  }
2139  EdbTrackP *tr = (EdbTrackP *)(etr->At(ind));
2140  if (!tr)
2141  {
2142  printf("Wrong track address in array!\n");
2143  fflush(stdout);
2144  return;
2145  }
2146  tr->SetFlag(0);
2147  tr->SetSegmentsTrack();
2148  if(eD->eArrTr) if(!((eD->eArrTr)->FindObject(tr)))
2149  {
2150  eD->eArrTr->Add(tr);
2151  }
2152  if(eD->eArrTrSave) if(!((eD->eArrTrSave)->FindObject(tr)))
2153  {
2154  eD->eArrTrSave->Add(tr);
2155  }
2156  }
2157  }
2158  if(eD->eArrTr) if((eD->eArrTr)->FindObject(eD->eTrack1))
2159  {
2160  eD->eArrTr->Remove(eD->eTrack1);
2161  eD->eArrTr->Compress();
2162  }
2163  if(eD->eArrTrSave) if((eD->eArrTrSave)->FindObject(eD->eTrack1))
2164  {
2165  eD->eArrTrSave->Remove(eD->eTrack1);
2166  eD->eArrTr->Compress();
2167  }
2168  if(eD->eArrTr) if((eD->eArrTr)->FindObject(eD->eTrack2))
2169  {
2170  eD->eArrTr->Remove(eD->eTrack2);
2171  eD->eArrTr->Compress();
2172  }
2173  if(eD->eArrTrSave) if((eD->eArrTrSave)->FindObject(eD->eTrack2))
2174  {
2175  eD->eArrTrSave->Remove(eD->eTrack2);
2176  eD->eArrTr->Compress();
2177  }
2178  eD->Draw();
2179  delete eD->eTrack1;
2180  eD->eTrack1 = 0;
2181  delete eD->eTrack2;
2182  eD->eTrack2 = 0;
2183  }
2184  else
2185  {
2186  printf("No parts of splitted track or these ones fixed already!\n");
2187  fflush(stdout);
2188  return;
2189  }
2190 }

Member Data Documentation

◆ eD

EdbDisplay* EdbTrackG::eD
private

◆ eTr

EdbTrackP* EdbTrackG::eTr
private

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