FEDRA emulsion software from the OPERA Collaboration
EdbTrackG Class Reference

Track. More...

#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
 

Detailed Description

Constructor & Destructor Documentation

◆ EdbTrackG() [1/3]

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

◆ EdbTrackG() [2/3]

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

◆ EdbTrackG() [3/3]

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

◆ ~EdbTrackG()

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

Member Function Documentation

◆ AddToNewTrack()

void EdbTrackG::AddToNewTrack ( )
virtual
2398{
2399 if (eTr && eD)
2400 {
2401 if (eTr->VTAS() || eTr->VTAE())
2402 {
2403 printf("Track belong to a vertex - impossible destroy it!\n");
2404 fflush(stdout);
2405 return;
2406 }
2407 if (eD->eTrack)
2408 {
2409 if ((eD->eTrack)->NF())
2410 {
2411 delete eD->eTrack;
2412 eD->eTrack = 0;
2413 }
2414 }
2415 EdbSegP *seg = 0;
2416 if (!eD->eTrack) eD->eTrack = new EdbTrackP();
2417 for(int is=0; is<eTr->N(); is++) {
2418 seg = eTr->GetSegment(is);
2419 (eD->eTrack)->AddSegment((EdbSegP *)seg);
2420 }
2421 eTr->SetFlag(-10);
2422 eTr->SetSegmentsTrack(-2-(eTr->ID()+1));
2423 if(eD->eArrTr) if((eD->eArrTr)->FindObject(eTr))
2424 {
2425 eD->eArrTr->Remove(eTr);
2426 eD->eArrTr->Compress();
2427 if (!(eD->eArrSegP)) eD->eArrSegP = new TObjArray();
2428 for(int is=0; is<eTr->N(); is++) {
2429 seg = eTr->GetSegment(is);
2430 if(eD->eArrSegP) if(!((eD->eArrSegP)->FindObject(seg))) eD->eArrSegP->Add(seg);
2431 }
2432 }
2433 if(eD->eArrTrSave) if((eD->eArrTrSave)->FindObject(eTr))
2434 {
2435 eD->eArrTrSave->Remove(eTr);
2436 eD->eArrTrSave->Compress();
2437 if (!(eD->eArrSegPSave)) eD->eArrSegPSave = new TObjArray();
2438 for(int is=0; is<eTr->N(); is++) {
2439 seg = eTr->GetSegment(is);
2440 if(eD->eArrSegPSave) if(!((eD->eArrSegPSave)->FindObject(seg))) eD->eArrSegPSave->Add(seg);
2441 }
2442 }
2443 eD->Draw();
2444 }
2445}
FILE * stdout
virtual void Draw(Option_t *option="")
Definition: EdbDisplayBase.cxx:787
TObjArray * eArrTrSave
saved array of tracks to be drawn
Definition: EdbDisplay.h:46
TObjArray * eArrSegP
array of segments to be drawn
Definition: EdbDisplay.h:42
TObjArray * eArrTr
array of tracks to be drawn
Definition: EdbDisplay.h:43
TObjArray * eArrSegPSave
saved array of segments to be drawn
Definition: EdbDisplay.h:45
EdbTrackP * eTrack
working intermediate track (track creation)
Definition: EdbDisplay.h:52
Definition: EdbSegP.h:21
Int_t ID() const
Definition: EdbSegP.h:147
void SetFlag(int flag)
Definition: EdbSegP.h:130
Definition: EdbPattern.h:113
Int_t N() const
Definition: EdbPattern.h:177
EdbSegP * GetSegment(int i) const
Definition: EdbPattern.h:195
EdbVTA * VTAS() const
Definition: EdbPattern.h:143
EdbVTA * VTAE() const
Definition: EdbPattern.h:144
int SetSegmentsTrack(int id)
Definition: EdbPattern.h:246

◆ AddToNewTrackAndFit()

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

◆ AddTrackToVertex()

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

◆ DeleteTrack()

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

◆ DumpTrack()

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

◆ EstimateMomentum()

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

◆ FixNewTrack()

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

◆ GetName()

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

◆ GetObjectInfo()

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

◆ GetTitle()

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

◆ InfoTrackVert()

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

◆ InspectTrack()

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

◆ RemoveTrackFromVertex()

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

◆ SetAsWorkingVertex()

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

◆ SetTrack()

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

◆ UndoNewTrack()

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

◆ UndoRemoveKink()

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

◆ UndoSplit()

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

Member Data Documentation

◆ eD

EdbDisplay* EdbTrackG::eD
private

◆ eTr

EdbTrackP* EdbTrackG::eTr
private

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