FEDRA emulsion software from the OPERA Collaboration
EdbEDATrackSet Class Reference

#include <EdbEDATrackSet.h>

Inheritance diagram for EdbEDATrackSet:
Collaboration diagram for EdbEDATrackSet:

Public Types

enum  { kEnd , kTop , kMiddle }
 

Public Member Functions

void AddComment (EdbTrackP *t, char *cmt)
 
void AddSegments (TObjArray *segments)
 
void AddTrack (EdbTrackP *t)
 
void AddTracks (TObjArray *arr)
 
void AddTracksBase (TObjArray *tracksbase)
 
void AddTracksPVR (EdbPVRec *pvr)
 
void Clear ()
 
void ClearComments ()
 
void ClearTracks (void)
 
void ClearTracksBase (void)
 
void DoSelection ()
 
void DoVertexing (EdbVertexRec *VR=NULL, int ntrkcut=3)
 
void Draw (int redraw=kFALSE)
 
void DrawSingleComment (EdbEDATrackComment *tcmt)
 
void DrawSingleSegment (EdbSegP *s, char *elname, TEveCompound *cmp=NULL, int extendup=1, int extenddown=1)
 
void DrawSingleTrack (EdbTrackP *t)
 
 EdbEDATrackSet (char *title, TObjArray *EdbTrackPArray=NULL)
 
int FindDownstreamPlate ()
 
EdbTrackPFindTrack (EdbSegP *s, double dx=10, double dt=0.02)
 
EdbTrackPFindTrack (EdbTrackP *t)
 
EdbTrackPFindTrackLast (EdbSegP *s, double dx=20, double dt=0.03)
 
int FindUpstreamPlate ()
 
EdbEDAAreaSetGetAreaSet ()
 
const char * GetComment (EdbTrackP *t)
 
EdbDataSetGetDataSet ()
 
bool GetDraw ()
 
bool GetDrawMT ()
 
bool GetDrawTrackAngle ()
 
bool GetDrawTrackID ()
 
int GetExtendMode ()
 
EdbIDGetID ()
 
int GetLayerColor (EdbSegP *s)
 
double GetLayerLength (EdbSegP *s)
 
int GetLayerWidth (EdbSegP *s)
 
EdbPVRecGetPVRec ()
 
EdbScanSetGetScanSet ()
 
int GetTextColor ()
 
int GetTextFont ()
 
int GetTextPosition ()
 
int GetTextSize ()
 
EdbTrackPGetTrack (EdbSegP *s)
 
EdbTrackPGetTrack (int i)
 
void GetTrackAttribute (int *track_color, int *track_width, double *track_length, int *layer_color, int *layer_width, double *layer_length, int *layer_color_MT)
 
EdbTrackPGetTrackBase (int i)
 
int GetTrackColor (EdbSegP *s)
 
double GetTrackLength (EdbSegP *s, int updown=1)
 
TObjArray * GetTracks ()
 
TObjArray * GetTracksBase ()
 
int GetTrackWidth (EdbSegP *s)
 
bool IsMember (EdbTrackP *t)
 
void MicroTrackSearch (EdbTrackP *t)
 
int MicroTrackSearch (EdbTrackP *t, EdbSegP *pred, int ipl)
 
int N ()
 
int NBase ()
 
int PrepareScanSetForMT ()
 
void Print ()
 
void ReadFile (char *filename=NULL, int datatype=100, TCut rcut="1")
 
EdbDataProcReadLinkedTracks (char *lnkdef="lnk.def", TCut cut="1")
 
EdbDataProcReadLinkedTracks (EdbDataProc *dproc)
 
EdbDataProcReadLinkedTracksFile (char *filename="linked_tracks.root", TCut cut="1")
 
void ReadListFile (char *filename=NULL, bool clear_previous=kTRUE)
 
void ReadMxxFile (char *filename)
 
void ReadPredictionScan (EdbID id, bool force_update_setroot=0)
 
void ReadPredictionScan (EdbScanSet *ss)
 
void ReadPredictionScan (int BRICK, int SBVERSION, int RUN_PRED, int UseMicrotrack=0)
 
void ReadTextTracks (char *filename=NULL)
 
void ReadTracksTree (char *scanset_filename, TCut cut="1")
 
void ReadTracksTree (EdbID ID, TCut cut="1")
 
void RemoveTrack (EdbTrackP *t)
 
void RemoveTrackBase (EdbTrackP *t)
 
void RemoveTracks (TObjArray *tracks)
 
void ResetTrackAttribute (void)
 
void RestorePrevious (void)
 
EdbTrackPSearchCorrespondTrack (EdbTrackP *t)
 
EdbTrackPSearchSegment (int ipl, int iseg)
 
EdbTrackPSearchTrack (int itrk)
 
void SetAreaSet (EdbEDAAreaSet *set)
 
void SetColorMode (int mode)
 
void SetDataSet (EdbDataSet *dset)
 
void SetDraw (bool b=kTRUE)
 
void SetDrawAreaSet (bool draw=kTRUE)
 
void SetDrawMT (bool b=kTRUE)
 
void SetDrawTrackAngle (bool draw)
 
void SetDrawTrackAngleG (bool draw)
 
void SetDrawTrackID (bool draw)
 
void SetDrawTrackIDG (bool draw)
 
void SetExtendMode (int mode=kExtendAuto)
 
void SetID (EdbID id)
 
void SetInterpolation (int interpolation=kTRUE)
 
void SetLayerLength (double length)
 
void SetPVRec (EdbPVRec *pvr)
 
void SetScanSet (EdbScanSet *ss)
 
void SetTextAttribute (int size=14, int color=kWhite, int fontfile=4)
 
void SetTextPosition (int pos)
 
void SetTrack (EdbTrackP *t)
 
void SetTrack (int itrack)
 
void SetTrackAttribute (int track_color=-1, int track_width=1, double track_length=-1, int layer_color=kYellow, int layer_width=2, double layer_length=150, int layer_color_MT=kCyan)
 
void SetTracks (TObjArray *tracks)
 
void SetTracksAll (void)
 
void SetTracksBase (TObjArray *tracksbase)
 
void SetTracksNseg (int nsegcut=3)
 
void SetTracksVertex (EdbVertex *v, bool clear_previous=kTRUE)
 
void SetTracksVertices (TObjArray *vertices, bool clear_previous=kTRUE)
 
void StorePrevious ()
 
char * WriteListFile (char *filename=NULL, bool append=kFALSE, bool open_editor=kFALSE)
 
- Public Member Functions inherited from EdbEDATrackSelection
void DoSelection (TObjArray *tracksbase, TObjArray *tracks)
 
 EdbEDATrackSelection ()
 
bool GetImpactSearch ()
 
int GetNsegCut ()
 
double GetPHCut ()
 
double GetPHDTRMS ()
 
EdbRunTrackingGetRunTracking ()
 
int GetSideOutPlate ()
 
int GetUpstreamPlate ()
 
int ImpactSearch (EdbTrackP *t)
 
int Neighborhood (EdbSegP *s, double *dmin=NULL)
 
void Reset ()
 
void SetAngle (double tx, double ty)
 
void SetAngularCut (bool b=kTRUE)
 
void SetClearPrevious (bool b=kTRUE)
 
void SetCondBTDefault (EdbScanCond &cond)
 
void SetCondMTDefault (EdbScanCond &cond)
 
void SetCondTrackingDefault ()
 
void SetDT (double dtx, double dty=-1)
 
void SetDX (double dx)
 
void SetImpactSearch (bool b=kTRUE, EdbVertex *v=NULL)
 
void SetNeighborSearch (bool b=kTRUE, TObjArray *selected=NULL, double dzup=-1, double dzdown=-1)
 
void SetNsegCut (int nseg)
 
void SetPHCut (double phcut=0.0)
 
void SetPHDTRMS (double slope)
 
void SetRunTracking (EdbRunTracking &rt)
 
void SetSideOut (bool b=kTRUE)
 
void SetSideOutPlate (int npl)
 
void SetUpstreamPlate (int ipl)
 
int SideOut (EdbTrackP *t)
 
virtual ~EdbEDATrackSelection ()
 

Private Attributes

EdbEDAAreaSeteAreaSet
 
int eColorMode
 
TObjArray * eComments
 
EdbDataSeteDataSet
 
bool eDraw
 control of drawing More...
 
bool eDrawMT
 control of drawing microtrack More...
 
bool eDrawTrackAngle
 control of Track Angle drawing. More...
 
bool eDrawTrackAngleG
 Global control of Track angle drawing by Main tab. More...
 
bool eDrawTrackID
 control of Track ID drawing More...
 
bool eDrawTrackIDG
 Global control of Track ID drawing by Main tab. More...
 
int eExtendMode
 
EdbID eID
 
int eInterpolation
 
int eLayerColor
 
int eLayerColorMT
 
double eLayerLength
 
int eLayerWidth
 
EdbPVRecePVR
 pointer for original EdbPVRec. tracks are copied to eTracksBase through AddTracksPVR(). More...
 
EdbScanSeteScanSet
 
int eTextColor
 
int eTextFont
 
int eTextPosition
 
int eTextSize
 
int eTrackColor
 
double eTrackLength
 
TObjArray * eTracks
 array of tracks to be drawn More...
 
TObjArray * eTracksBase
 array of tracks, base of track search More...
 
TObjArray * eTracksPrevious
 previous array of tracks More...
 
int eTrackWidth
 

Additional Inherited Members

- Public Attributes inherited from EdbEDATrackSelection
EdbRunTracking eRunTracking
 Run Tracking for microtrack search. More...
 
EdbVertexeVertex
 

Member Enumeration Documentation

◆ anonymous enum

anonymous enum
Enumerator
kEnd 
kTop 
kMiddle 
226{ kEnd, kTop, kMiddle};
@ kTop
Definition: EdbEDATrackSet.h:226
@ kMiddle
Definition: EdbEDATrackSet.h:226
@ kEnd
Definition: EdbEDATrackSet.h:226

Constructor & Destructor Documentation

◆ EdbEDATrackSet()

EdbEDATrackSet::EdbEDATrackSet ( char *  title,
TObjArray *  EdbTrackPArray = NULL 
)
inline
229 : eID(0,0,1,0), ePVR(NULL), eDataSet(NULL), eScanSet(NULL){
230 SetName(title);
231 eTracks = new TObjArray;
232 eTracksBase = new TObjArray;
233 eTracksPrevious = new TObjArray;
234 eComments = new TObjArray;
235 eDraw = kTRUE;
237
238 eAreaSet = new EdbEDAAreaSet();
239
242 SetDrawMT(kTRUE);
243 SetDrawTrackID(kTRUE);
244 SetDrawTrackAngle(kTRUE);
245 SetDrawTrackIDG(kFALSE);
246 SetDrawTrackAngleG(kFALSE);
248 SetInterpolation(kTRUE);
249
251
252 if(EdbTrackPArray) {
253 SetTracks(EdbTrackPArray);
254 SetTracksBase(EdbTrackPArray);
255 }
256 }
graph SetName("Graph")
Definition: EdbEDASets.h:55
void SetTrackAttribute(int track_color=-1, int track_width=1, double track_length=-1, int layer_color=kYellow, int layer_width=2, double layer_length=150, int layer_color_MT=kCyan)
Definition: EdbEDATrackSet.h:530
EdbPVRec * ePVR
pointer for original EdbPVRec. tracks are copied to eTracksBase through AddTracksPVR().
Definition: EdbEDATrackSet.h:212
int eTextPosition
Definition: EdbEDATrackSet.h:198
void SetDrawTrackIDG(bool draw)
Definition: EdbEDATrackSet.h:589
bool eDraw
control of drawing
Definition: EdbEDATrackSet.h:202
TObjArray * eTracks
array of tracks to be drawn
Definition: EdbEDATrackSet.h:216
void SetDrawTrackAngle(bool draw)
Definition: EdbEDATrackSet.h:588
void SetTextAttribute(int size=14, int color=kWhite, int fontfile=4)
Definition: EdbEDATrackSet.h:570
void SetDrawTrackAngleG(bool draw)
Definition: EdbEDATrackSet.h:590
void SetTracks(TObjArray *tracks)
Definition: EdbEDATrackSet.h:303
TObjArray * eTracksBase
array of tracks, base of track search
Definition: EdbEDATrackSet.h:217
EdbScanSet * eScanSet
Definition: EdbEDATrackSet.h:214
EdbID eID
Definition: EdbEDATrackSet.h:184
TObjArray * eComments
Definition: EdbEDATrackSet.h:220
void SetTracksBase(TObjArray *tracksbase)
Definition: EdbEDATrackSet.h:265
int eColorMode
Definition: EdbEDATrackSet.h:186
void SetExtendMode(int mode=kExtendAuto)
Definition: EdbEDATrackSet.h:526
EdbDataSet * eDataSet
Definition: EdbEDATrackSet.h:213
void SetInterpolation(int interpolation=kTRUE)
Definition: EdbEDATrackSet.h:528
TObjArray * eTracksPrevious
previous array of tracks
Definition: EdbEDATrackSet.h:218
void SetDrawTrackID(bool draw)
Definition: EdbEDATrackSet.h:587
EdbEDAAreaSet * eAreaSet
Definition: EdbEDATrackSet.h:222
void SetDrawMT(bool b=kTRUE)
Definition: EdbEDATrackSet.h:585
@ kCOLOR_BY_PH
Definition: EdbEDAUtil.h:82
@ kExtendAuto
Definition: EdbEDAUtil.h:90
#define NULL
Definition: nidaqmx.h:84

Member Function Documentation

◆ AddComment()

void EdbEDATrackSet::AddComment ( EdbTrackP t,
char *  cmt 
)
inline
475{ eComments->Add(new EdbEDATrackComment(t,cmt));}
Definition: EdbEDATrackSet.h:9
TTree * t
Definition: check_shower.C:4

◆ AddSegments()

void EdbEDATrackSet::AddSegments ( TObjArray *  segments)
inline
414 {
415 if(segments==NULL) return;
416 if(segments->GetEntries()==0) return;
417
418 for(int i=0;i<segments->GetEntries();i++){
419 EdbSegP *s = (EdbSegP *)segments->At(i);
420 EdbTrackP *t = new EdbTrackP(s);
421 t->SetCounters();
422 t->SetPlate(s->Plate());
423 AddTrack(t);
424 }
425 return;
426 }
void AddTrack(EdbTrackP *t)
Definition: EdbEDATrackSet.h:277
Definition: EdbSegP.h:21
Definition: EdbPattern.h:113
s
Definition: check_shower.C:55

◆ AddTrack()

void EdbEDATrackSet::AddTrack ( EdbTrackP t)
inline

Add a track to both eTracksBase and eTracks, if it is not yet registered.

277 {
279 if(eTracksBase->FindObject(t)==NULL) eTracksBase->Add(t);
280 if(eTracks->FindObject(t)==NULL) eTracks->Add(t);
281 }

◆ AddTracks()

void EdbEDATrackSet::AddTracks ( TObjArray *  arr)
inline

Add tracks to both eTracksBase and eTracks, if it is not yet registerd.
arr is a TObjArray of EdbTrackP.

282 {
285 if(NULL==arr) return; for(int i=0;i<arr->GetEntries();i++) AddTrack( (EdbTrackP *) arr->At(i));
286 }

◆ AddTracksBase()

void EdbEDATrackSet::AddTracksBase ( TObjArray *  tracksbase)
inline

Add tracks to eTracksBase. tracksbase should be an array of EdbTrackP

269 {
271 if(tracksbase==NULL) return;
272 for(int i=0;i<tracksbase->GetEntries();i++) eTracksBase->Add(tracksbase->At(i));
273 }

◆ AddTracksPVR()

void EdbEDATrackSet::AddTracksPVR ( EdbPVRec pvr)
inline

COPY tracks from EdbPVRec.
original PVRec is accessible through GetPVRec().

312 {
315 ePVR = pvr;
317 SetTracksAll();
319 }
void SetAreas(EdbPVRec *pvr)
void AddTracksBase(TObjArray *tracksbase)
Definition: EdbEDATrackSet.h:269
void SetTracksAll(void)
Definition: EdbEDATrackSet.h:341
TObjArray * eTracks
Definition: EdbPVRec.h:161

◆ Clear()

void EdbEDATrackSet::Clear ( )
inline

Clear Tracks and TracksBase.

336 {
339 }
void Clear()
Definition: EdbEDASets.h:137
void ClearTracks(void)
Definition: EdbEDATrackSet.h:327
void ClearTracksBase(void)
Definition: EdbEDATrackSet.h:331

◆ ClearComments()

void EdbEDATrackSet::ClearComments ( )
inline
476{eComments->Clear();}

◆ ClearTracks()

void EdbEDATrackSet::ClearTracks ( void  )
inline

Clear Tracks to be draw.

327 {
329 eTracks->Clear();
330 }

◆ ClearTracksBase()

void EdbEDATrackSet::ClearTracksBase ( void  )
inline

Clear eTracksBase.

331 {
333 eTracksBase->Clear();
334 }

◆ DoSelection()

void EdbEDATrackSet::DoSelection ( )
inline
void DoSelection(TObjArray *tracksbase, TObjArray *tracks)
Definition: EdbEDATrackSet.C:126

◆ DoVertexing()

void EdbEDATrackSet::DoVertexing ( EdbVertexRec VR = NULL,
int  ntrkcut = 3 
)

Do vertexing. if EdbVertexRec is given, use the parameter for reconstruction.

561 {
563 if(VR==NULL){
564 VR = new EdbVertexRec;
565 VR->eDZmax = 5000.; // maximum z-gap in the track-vertex group
566 VR->eProbMin = 0.001; // minimum acceptable probability for chi2-distance between tracks
567 VR->eImpMax = 5.; // maximal acceptable impact parameter [microns] (for preliminary check)
568 VR->eUseMom = false; // use or not track momentum for vertex calculations
569 VR->eUseSegPar = true; // use only the nearest measured segments for vertex fit (as Neuchatel)
570 VR->eQualityMode= 0; // vertex quality estimation method (0:=Prob/(sigVX^2+sigVY^2); 1:= inverse average track-vertex distanc
571 VR->eEdbTracks = GetTracks();
572 }
573 if(ePVR==NULL) ePVR = new EdbPVRec;
574
576
577 VR->eVTX = new TObjArray;
578
579 VR->SetPVRec(GetPVRec());
580 int nvtx=VR->FindVertex();
581 if(nvtx)VR->ProbVertexN();
582
583 gEDA->GetVertexSet()->Clear();
585 gEDA->GetVertexSet()->SetVerticesNtrk(ntrkcut);
586
587 ClearTracks();
589
590}
EdbEDA * gEDA
Definition: EdbEDA.C:3
TObjArray * GetTracks()
Definition: EdbEDATrackSet.h:310
EdbPVRec * GetPVRec()
Definition: EdbEDATrackSet.h:320
void SetTracksVertices(TObjArray *vertices, bool clear_previous=kTRUE)
Definition: EdbEDATrackSet.h:515
void AddVertices(TObjArray *vertices)
Definition: EdbEDASets.h:189
void SetVerticesNtrk(int ntrkcut=3)
Definition: EdbEDASets.h:196
TObjArray * GetVertices()
Definition: EdbEDASets.h:217
void Clear()
Definition: EdbEDASets.h:214
EdbEDAVertexSet * GetVertexSet()
Definition: EdbEDA.h:660
Definition: EdbPVRec.h:148
EdbScanCond const * GetScanCond()
Definition: EdbPVRec.h:172
void SetScanCond(EdbScanCond *scan)
Definition: EdbPVRec.h:171
Definition: EdbScanCond.h:10
Bool_t eUseMom
use or not track momentum for vertex calculations
Definition: EdbVertex.h:181
Int_t eQualityMode
vertex quality estimation method (0:=Prob/(sigVX^2+sigVY^2); 1:= inverse average track-vertex distanc...
Definition: EdbVertex.h:183
Bool_t eUseSegPar
use only the nearest measured segments for vertex fit (as Neuchatel)
Definition: EdbVertex.h:182
Float_t eImpMax
maximal acceptable impact parameter (preliminary check)
Definition: EdbVertex.h:179
Float_t eDZmax
maximum z-gap in the track-vertex group
Definition: EdbVertex.h:177
Float_t eProbMin
minimum acceptable probability for chi2-distance between tracks
Definition: EdbVertex.h:178
Definition: EdbVertex.h:194
Int_t ProbVertexN()
Definition: EdbVertex.cxx:1426
TObjArray * eVTX
array of vertex
Definition: EdbVertex.h:205
Int_t FindVertex()
Definition: EdbVertex.cxx:1065
TObjArray * eEdbTracks
Definition: EdbVertex.h:204
void SetPVRec(EdbPVRec *pvr)
Definition: EdbVertex.h:285

◆ Draw()

void EdbEDATrackSet::Draw ( int  redraw = kFALSE)
519 {
520 eAreaSet->Draw();
521
522 if(eDraw==kFALSE) {
523 printf("TrackSet %s Draw 0 / %4d tracks. Disabled\n", GetName(), NBase());
524 return;
525 }
526 for(int i=0;i<N();i++){
527 EdbTrackP *t = GetTrack(i);
529 }
530
531 for(int i=0;i<eComments->GetEntries();i++){
534 }
535
536
537 if(redraw) gEve->Redraw3D();
538 printf("TrackSet %s Draw %4d / %4d tracks\n", GetName(), N(), NBase());
539}
void Draw(int redraw=0)
Definition: EdbEDASets.C:107
int N()
Definition: EdbEDATrackSet.h:439
void DrawSingleTrack(EdbTrackP *t)
Definition: EdbEDATrackSet.C:351
int NBase()
Definition: EdbEDATrackSet.h:440
EdbTrackP * GetTrack(EdbSegP *s)
Definition: EdbEDATrackSet.h:428
void DrawSingleComment(EdbEDATrackComment *tcmt)
Definition: EdbEDATrackSet.C:481

◆ DrawSingleComment()

void EdbEDATrackSet::DrawSingleComment ( EdbEDATrackComment tcmt)
481 {
482
483 EdbTrackP *t = tcmt->GetTrack();
484
485 // if ID, Angle are draw. use same TEveText.
486 TEveCompound *cmp = EdbEDAUtil::GetTrackElement(t);
487 if(cmp==NULL) return; // if the corresponding track will not be drawn, skip to draw comment.
488
489 TEveText *tx = NULL;
490 for(TEveElement::List_i it=cmp->BeginChildren(); it!=cmp->EndChildren();it++){
491 if(strncmp("TEveText",(*it)->GetElementName(),8)==0) {
492 tx = (TEveText *) (*it);
493 tx->SetText(Form("%s %s", tx->GetText(), tcmt->GetComment()));
494 }
495 }
496
497 // if ID, Angle are not drawn.
498 if(tx==NULL) {
499 tx=new TEveText();
500 tx->SetText(tcmt->GetComment());
501 // draw text 1mm downstream of the last segment.
502 // ! to be selected by eTextPosition......
503 EdbSegP *s = t->GetSegmentLast();
504 tx->PtrMainTrans()->SetPos(
505 s->X()+s->TX()*1000,
506 s->Y()+s->TY()*1000,
507 (s->Z()+1000)*gEDA->GetScaleZ());
508
509 tx->SetFontMode(TGLFont::kBitmap);
510 tx->SetFontSize(eTextSize);
511 tx->SetFontFile(eTextFont);
512 tx->SetMainColor(eTextColor);
513 gEve->AddElement(tx);
514 }
515
516}
const char * GetComment()
Definition: EdbEDATrackSet.h:19
EdbTrackP * GetTrack()
Definition: EdbEDATrackSet.h:18
int eTextColor
Definition: EdbEDATrackSet.h:195
int eTextFont
Definition: EdbEDATrackSet.h:197
int eTextSize
Definition: EdbEDATrackSet.h:196
double GetScaleZ()
Definition: EdbEDA.h:732
TEveCompound * GetTrackElement(EdbTrackP *t)
Definition: EdbEDAUtil.C:69

◆ DrawSingleSegment()

void EdbEDATrackSet::DrawSingleSegment ( EdbSegP s,
char *  elname,
TEveCompound *  cmp = NULL,
int  extendup = 1,
int  extenddown = 1 
)

Draw Single Segment

290 {
292
293 if(s==NULL) return;
294
295 if(cmp==NULL) {
296 cmp = new TEveCompound;
297 gEve->AddElement(cmp);
298 }
299 cmp->OpenCompound();
300
301 // default extention line
302 TEveLine *l = new TEveLine;
303 l->SetName(elname);
304 l->SetLineWidth(GetTrackWidth(s));
305 l->SetUserData(s);
306
307 l->SetLineColor(GetTrackColor(s));
308 if(extendup){
309 //Auto calculation of track_line_length
310 double dz = -GetTrackLength(s,-1);
311 l->SetNextPoint(s->X()+dz*s->TX(),
312 s->Y()+dz*s->TY(),
313 (s->Z()+dz)*gEDA->GetScaleZ());
314
315 } else {
316 l->SetNextPoint(s->X(), s->Y(), s->Z()*gEDA->GetScaleZ());
317 }
318 if(extenddown){
319
320 double dz = GetTrackLength(s,1);
321
322 l->SetNextPoint(s->X()+dz*s->TX(),
323 s->Y()+dz*s->TY(),
324 (s->Z()+dz)*gEDA->GetScaleZ());
325 } else {
326 l->SetNextPoint(s->X(), s->Y(), s->Z()*gEDA->GetScaleZ());
327 }
328 cmp->AddElement(l);
329
330 // sensitive layer.
331 l = new TEveLine;
332 l->SetName(elname);
333 l->SetUserData(s);
334 l->SetLineWidth(GetLayerWidth(s));
335
336 l->SetLineColor(GetLayerColor(s));
337
338 double dz = GetLayerLength(s);
339 l->SetNextPoint( s->X()-dz*s->TX(),
340 s->Y()-dz*s->TY(),
341 (s->Z()-dz)*gEDA->GetScaleZ());
342 l->SetNextPoint( s->X()+dz*s->TX(),
343 s->Y()+dz*s->TY(),
344 (s->Z()+dz)*gEDA->GetScaleZ());
345
346 cmp->AddElement(l);
347
348 cmp->CloseCompound();
349}
brick dz
Definition: RecDispMC.C:107
double GetLayerLength(EdbSegP *s)
Definition: EdbEDATrackSet.h:567
int GetLayerWidth(EdbSegP *s)
Definition: EdbEDATrackSet.h:566
int GetTrackWidth(EdbSegP *s)
Definition: EdbEDATrackSet.h:562
int GetTrackColor(EdbSegP *s)
Definition: EdbEDATrackSet.C:247
int GetLayerColor(EdbSegP *s)
Definition: EdbEDATrackSet.h:565
double GetTrackLength(EdbSegP *s, int updown=1)
Definition: EdbEDATrackSet.C:202

◆ DrawSingleTrack()

void EdbEDATrackSet::DrawSingleTrack ( EdbTrackP t)
351 {
352 int i;
353
354 if(t==NULL) return;
355 TEveCompound *cmp = new TEveCompound;
356 gEve->AddElement(cmp);
357
358 cmp->SetName( Form("%3s trk %4d pl %2d -> %2d %8.1f %8.1f %8.1f %7.4f %7.4f %d",
359 GetName(), t->ID(), t->GetSegmentFirst()->Plate(), t->GetSegmentLast()->Plate(), t->X(),t->Y(),t->Z(),t->TX(),t->TY(), t->Flag()));
360 cmp->SetUserData(t);
361
362 int nseg = t->N();
363 EdbSegP *last_seg=NULL;
364 for(i=0;i<nseg;i++){
365 EdbSegP *s = t->GetSegment(i);
366
367 if(eDrawMT==kFALSE && s->Side()!=0) continue;
368
369 char elname[256];
370 // set name
371 if(gEDA->Japanese()) sprintf(elname,
372 "%3s %4d seg itrk %4d pl %2d(%2d) id %6d %3s ph %2d %8.1f %8.1f %8.1f %7.4f %7.4f chi2 %4.2f sflag %3d",
373 GetName(), s->ScanID().eMinor, t->ID(), s->Plate(), 58-s->Plate(), (int)s->ID(), s->Side()? s->Side()==1? "MT1" : "MT2" : "BT", (int)s->W(),
374 s->X(), s->Y(), s->Z(), s->TX(), s->TY(), s->Chi2(), s->Flag());
375 else sprintf(elname,
376 "%3s %4d seg itrk %4d pl %2d id %6d %3s ph %2d %8.1f %8.1f %8.1f %7.4f %7.4f chi2 %4.2f sflag %3d",
377 GetName(), s->ScanID().eMinor, t->ID(), s->Plate(), (int)s->ID(), s->Side()? s->Side()==1? "MT1" : "MT2" : "BT", (int)s->W(),
378 s->X(), s->Y(), s->Z(), s->TX(), s->TY(), s->Chi2(), s->Flag());
379 if(s->MCEvt()>=0) sprintf(elname,"%s MCEvt %d P %7.4f PdgID %6d",elname,s->MCEvt(),s->P(), s->Flag());
380
381 // set extend or not
382 int extendup=1, extenddown=1;
384 if(i==0) extendup=0;
385 if(i==nseg-1) extenddown=0;
386 if(t->N()==1) extenddown=1;
387 }
388 else if (eExtendMode == kExtendUpDown) extendup=extenddown=1;
389 else if (eExtendMode == kExtendDown) { extendup=0; extenddown=1;}
390 else if (eExtendMode == kExtendUp) { extendup=1; extenddown=0;}
391 else if (eExtendMode == kExtendNo) extendup=extenddown=0;
392
393 DrawSingleSegment(s, elname, cmp, extendup, extenddown);
394
395 // in case that there was holes, draw the interpolation line.
396 // from end point of extention(down) of last_seg to that of extention(up) of s.
397 if(eInterpolation&&last_seg!=NULL){
398 // hole = skip of plate number
399 if(abs(last_seg->PID()-s->PID())>1){
400 TEveLine *l = new TEveLine;
401 l->SetLineStyle(7);
402 l->SetName(elname);
403 l->SetUserData(last_seg);
404 l->SetLineWidth(1);
405 l->SetLineColor(kGray+1);
406
407 double dz = -GetTrackLength(s,-1); // to upstream
408
409 l->SetNextPoint(s->X()+dz*s->TX(),
410 s->Y()+dz*s->TY(),
411 (s->Z()+dz)*gEDA->GetScaleZ());
412
413 dz = GetTrackLength(last_seg,1); // to downstream
414
415 l->SetNextPoint(last_seg->X()+dz*last_seg->TX(),
416 last_seg->Y()+dz*last_seg->TY(),
417 (last_seg->Z()+dz)*gEDA->GetScaleZ());
418 cmp->OpenCompound();
419 cmp->AddElement(l);
420 cmp->CloseCompound();
421 }
422 }
423 last_seg=s;
424 }
425
427 char buf[256];
428 strcpy(buf,"");
429 if(eDrawTrackID&&eDrawTrackIDG) sprintf(buf,"%d",t->ID());
430 if(eDrawTrackAngle&&eDrawTrackAngleG) sprintf(buf,"%s (%.3lf,%.3lf)", buf, t->TX(), t->TY());
431 TEveText* tx = new TEveText;
432 tx->SetText(buf);
433 tx->SetMainColor(eTextColor);
434 tx->SetFontMode(TGLFont::kBitmap);
435 tx->SetFontFile(eTextFont);
436 tx->SetFontSize(eTextSize);
437
438 if(eTextPosition==kTop){
439 EdbSegP *s = t->GetSegmentFirst();
440 tx->PtrMainTrans()->SetPos( s->X(), s->Y(), s->Z()*gEDA->GetScaleZ());
441 }
442 else if(eTextPosition==kMiddle){
443 EdbSegP *s1 = t->GetSegmentFirst();
444 EdbSegP *sl = t->GetSegmentLast();
445 tx->PtrMainTrans()->SetPos( (s1->X()+sl->X())/2, (s1->Y()+sl->Y())/2, (s1->Z()+sl->Z())/2);
446 }
447 else {
448 EdbSegP *s = t->GetSegmentLast();
449 tx->PtrMainTrans()->SetPos( s->X()+s->TX()*650, s->Y()+s->TY()*650, (s->Z()+650)*gEDA->GetScaleZ());
450 }
451 cmp->OpenCompound();
452 cmp->AddElement(tx);
453 cmp->CloseCompound();
454 }
455}
bool eDrawTrackID
control of Track ID drawing
Definition: EdbEDATrackSet.h:204
void DrawSingleSegment(EdbSegP *s, char *elname, TEveCompound *cmp=NULL, int extendup=1, int extenddown=1)
Definition: EdbEDATrackSet.C:290
bool eDrawTrackAngle
control of Track Angle drawing.
Definition: EdbEDATrackSet.h:206
int eExtendMode
Definition: EdbEDATrackSet.h:209
bool eDrawTrackIDG
Global control of Track ID drawing by Main tab.
Definition: EdbEDATrackSet.h:205
bool eDrawMT
control of drawing microtrack
Definition: EdbEDATrackSet.h:203
int eInterpolation
Definition: EdbEDATrackSet.h:210
bool eDrawTrackAngleG
Global control of Track angle drawing by Main tab.
Definition: EdbEDATrackSet.h:207
bool Japanese()
Definition: EdbEDA.h:734
Float_t TX() const
tangens = deltaX/deltaZ
Definition: EdbSegP.h:175
Float_t X() const
Definition: EdbSegP.h:173
Float_t Z() const
Definition: EdbSegP.h:153
Float_t Y() const
Definition: EdbSegP.h:174
Int_t PID() const
Definition: EdbSegP.h:148
Float_t TY() const
tangens = deltaY/deltaZ
Definition: EdbSegP.h:176
strcpy(cmd,"cp Shower.root Shower2.root")
EdbSegP * s1
Definition: tlg2couples.C:29
@ kExtendUpDown
Definition: EdbEDAUtil.h:91
@ kExtendUp
Definition: EdbEDAUtil.h:93
@ kExtendDown
Definition: EdbEDAUtil.h:92
@ kExtendNo
Definition: EdbEDAUtil.h:94

◆ FindDownstreamPlate()

int EdbEDATrackSet::FindDownstreamPlate ( )
inline
454 {
455 int ipldw = -1000;
456 for(int i=0;i<NBase(); i++) {
457 int ipl= GetTrackBase(i)->GetSegmentLast()->Plate();
458 if(ipl>ipldw) ipldw=ipl;
459 }
460 return ipldw;
461 }
EdbTrackP * GetTrackBase(int i)
Definition: EdbEDATrackSet.h:442
Int_t Plate() const
Definition: EdbSegP.h:159
EdbSegP * GetSegmentLast() const
Definition: EdbPattern.h:190

◆ FindTrack() [1/2]

EdbTrackP * EdbEDATrackSet::FindTrack ( EdbSegP s,
double  dx = 10,
double  dt = 0.02 
)
inline
369 {
370 EdbSegP *ss = new EdbSegP;
371 for(int i=0;i<NBase();i++){
373 if(t==NULL) continue;
374 *ss = *(t->GetSegmentFirst());
375 ss->PropagateTo(s->Z());
376 if( fabs(s->X()-ss->X()) < dx){
377 if( fabs(s->Y()-ss->Y()) < dx){
378 if( fabs(s->TX()-ss->TX()) < dt) {
379 if( fabs(s->TY()-ss->TY()) < dt) {
380 return t;
381 }}}}
382
383 }
384 delete ss;
385 return NULL;
386 }
Expr< UnaryOp< Fabs< T >, Expr< A, T, D >, T >, T, D > fabs(const Expr< A, T, D > &rhs)
Definition: UnaryOperators.hh:96
ss
Definition: energy.C:62

◆ FindTrack() [2/2]

EdbTrackP * EdbEDATrackSet::FindTrack ( EdbTrackP t)
inline
388 {
389 if(eTracks==NULL) return NULL;
390 if(eTracks->FindObject(t)) return t;
391 return NULL;
392 }

◆ FindTrackLast()

EdbTrackP * EdbEDATrackSet::FindTrackLast ( EdbSegP s,
double  dx = 20,
double  dt = 0.03 
)
inline
394 {
395
396 EdbSegP ss;
397 for(int i=0;i<eTracksBase->GetEntries();i++){
398 EdbTrackP *tt = (EdbTrackP *) eTracksBase->At(i);
399 for(int j=0;j<tt->N();j++){
400 ss.Copy(*tt->GetSegment(j));
401 ss.PropagateTo(s->Z());
402 if(fabs(s->TX()-ss.TX())<dt){
403 if(fabs(s->TX()-ss.TX())<dt){
404 if( fabs(s->X()-ss.X())<dx ){
405 if( fabs(s->Y()-ss.Y())<dx ){
406 return tt;
407 }}
408 }}
409 }
410 }
411 return NULL;
412 }
Int_t N() const
Definition: EdbPattern.h:177
EdbSegP * GetSegment(int i) const
Definition: EdbPattern.h:195

◆ FindUpstreamPlate()

int EdbEDATrackSet::FindUpstreamPlate ( )
inline
445 {
446 if(NBase()==0) return 0;
447 int iplup = 1000;
448 for(int i=0;i<NBase(); i++) {
449 int ipl= GetTrackBase(i)->GetSegmentFirst()->Plate();
450 if(ipl<iplup) iplup=ipl;
451 }
452 return iplup;
453 }
EdbSegP * GetSegmentFirst() const
Definition: EdbPattern.h:189

◆ GetAreaSet()

EdbEDAAreaSet * EdbEDATrackSet::GetAreaSet ( )
inline
602{ return eAreaSet;}

◆ GetComment()

const char * EdbEDATrackSet::GetComment ( EdbTrackP t)
inline
477 {
478 for(int i=0;i<eComments->GetEntries();i++){
480 if(cmt->GetTrack()==t) {
481 return cmt->GetComment();
482 }
483 }
484 return "";
485 }

◆ GetDataSet()

EdbDataSet * EdbEDATrackSet::GetDataSet ( )
inline
473{ return eDataSet;}

◆ GetDraw()

bool EdbEDATrackSet::GetDraw ( )
inline
584{ return eDraw;}

◆ GetDrawMT()

bool EdbEDATrackSet::GetDrawMT ( )
inline
586{ return eDrawMT;}

◆ GetDrawTrackAngle()

bool EdbEDATrackSet::GetDrawTrackAngle ( )
inline
592{ return eDrawTrackAngle;}

◆ GetDrawTrackID()

bool EdbEDATrackSet::GetDrawTrackID ( )
inline
591{ return eDrawTrackID;}

◆ GetExtendMode()

int EdbEDATrackSet::GetExtendMode ( )
inline
527{ return eExtendMode;}

◆ GetID()

EdbID & EdbEDATrackSet::GetID ( )
inline
464{return eID;}

◆ GetLayerColor()

int EdbEDATrackSet::GetLayerColor ( EdbSegP s)
inline
565{ return s->Side()==0?eLayerColor:eLayerColorMT;}
int eLayerColorMT
Definition: EdbEDATrackSet.h:200
int eLayerColor
Definition: EdbEDATrackSet.h:191

◆ GetLayerLength()

double EdbEDATrackSet::GetLayerLength ( EdbSegP s)
inline
567{ return eLayerLength;};
double eLayerLength
Definition: EdbEDATrackSet.h:193

◆ GetLayerWidth()

int EdbEDATrackSet::GetLayerWidth ( EdbSegP s)
inline
566{ return eLayerWidth;}//eLayerWidth>=0 ? eLayerWidth : (int)s->W()/10+1;}
int eLayerWidth
Definition: EdbEDATrackSet.h:192

◆ GetPVRec()

EdbPVRec * EdbEDATrackSet::GetPVRec ( )
inline
320{ return ePVR;}

◆ GetScanSet()

EdbScanSet * EdbEDATrackSet::GetScanSet ( )
inline
471{ return eScanSet;}

◆ GetTextColor()

int EdbEDATrackSet::GetTextColor ( )
inline
576{ return eTextColor;}

◆ GetTextFont()

int EdbEDATrackSet::GetTextFont ( )
inline
578{ return eTextFont;}

◆ GetTextPosition()

int EdbEDATrackSet::GetTextPosition ( )
inline
581{ return eTextPosition;}

◆ GetTextSize()

int EdbEDATrackSet::GetTextSize ( )
inline
577{ return eTextSize;}

◆ GetTrack() [1/2]

EdbTrackP * EdbEDATrackSet::GetTrack ( EdbSegP s)
inline
428 {
429 if(IsTrack(s)) return (EdbTrackP*) s;
430 if(IsSegment(s)){
431 for(int i=0;i<eTracksBase->GetEntries();i++){
432 EdbTrackP *t = (EdbTrackP *) eTracksBase->At(i);
433 for(int j=0;j<t->N();j++) if(s==t->GetSegment(j)) return t;
434 }
435 }
436 return NULL;
437 }
int IsTrack(TObject *o)
Definition: EdbEDAUtil.C:17
int IsSegment(TObject *o)
Definition: EdbEDAUtil.C:29

◆ GetTrack() [2/2]

EdbTrackP * EdbEDATrackSet::GetTrack ( int  i)
inline
441{ return (EdbTrackP *) eTracks->At(i);}

◆ GetTrackAttribute()

void EdbEDATrackSet::GetTrackAttribute ( int *  track_color,
int *  track_width,
double *  track_length,
int *  layer_color,
int *  layer_width,
double *  layer_length,
int *  layer_color_MT 
)
inline
547 {
548 *track_color = eTrackColor ;
549 *track_width = eTrackWidth ;
550 *track_length = eTrackLength;
551 *layer_color = eLayerColor ;
552 *layer_width = eLayerWidth ;
553 *layer_length = eLayerLength;
554 *layer_color_MT = eLayerColorMT;
555 }
int eTrackWidth
Definition: EdbEDATrackSet.h:188
double eTrackLength
Definition: EdbEDATrackSet.h:189
int eTrackColor
Definition: EdbEDATrackSet.h:187

◆ GetTrackBase()

EdbTrackP * EdbEDATrackSet::GetTrackBase ( int  i)
inline
442{ return (EdbTrackP *) eTracksBase->At(i);}

◆ GetTrackColor()

int EdbEDATrackSet::GetTrackColor ( EdbSegP s)

return Track color. if eTrackColor==-1, calculate according to eColorMode

247 {
249
250 if(eTrackColor!=-1) return eTrackColor;
251
252 if(eColorMode==kCOLOR_BY_PLATE) { int ipl=s->Plate(); if(ipl==0) ipl=s->PID();return ((ipl+5)%13)*4+52; }
253 if(eColorMode==kCOLOR_BY_PH) { int ph = (int)s->W(); if(ph>32) ph=32; return ((ph-8)%25)*2+50;}
254// if(eColorMode==kCOLOR_BY_PH) { int ph = (int)s->W(); if(ph>16) ph=16; return (ph-4)*4+51;}
255 if(eColorMode==kBLACKWHITE) { return kBlack; };
256 if(eColorMode==kCOLOR_BY_PARTICLE) { return s->Flag();}
258 int col = s->Track()%10+1;
259 if (col==5) col = kOrange;
260 if (col==10) col = kGreen+3;
261 return col;
262 }
264 int col = s->MCTrack()%10+1;
265 if (col==5) col = kOrange;
266 if (col==10) col = kGreen+3;
267 if (col==1) col = kOrange+3;
268 if (col<0) col = kWhite; //background
269 return col;
270 }
271
272 return (s->Plate()%13)*4+52;
273}
@ kCOLOR_BY_MCID
Definition: EdbEDAUtil.h:84
@ kBLACKWHITE
Definition: EdbEDAUtil.h:86
@ kCOLOR_BY_ID
Definition: EdbEDAUtil.h:83
@ kCOLOR_BY_PARTICLE
Definition: EdbEDAUtil.h:85
@ kCOLOR_BY_PLATE
Definition: EdbEDAUtil.h:81

◆ GetTrackLength()

double EdbEDATrackSet::GetTrackLength ( EdbSegP s,
int  updown = 1 
)

Calculate Track extrapolation length.
updon : up = -1, down = 1

202 {
205 if( eTrackLength>0 ) return eTrackLength;
206
207 // ScanSet case
208 if(eScanSet!=NULL&&eDataSet==NULL){
209 EdbPlateP *pl0 = eScanSet->GetPlate(s->Plate());
210 EdbPlateP *pl1 = eScanSet->GetPlate(s->Plate()+updown);
211 if(pl1==NULL) {
212 // in case some plates are missing.
213 for(int i=1;i<eScanSet->eB.Npl();i++){
214 int dpl=i*updown;
215 pl1 = eScanSet->GetPlate(s->Plate()+dpl);
216 if(pl1!=NULL) break;
217 }
218 if(pl1==NULL) pl1=pl0;
219 }
220 return fabs( pl0->Z() - pl1->Z() )*0.5;
221 }
222
223 // PVRec case
224 // check if the next plate exist (only the case ePVR has patterns)
225 // currently SB,SF doesn't have patterns, to be done.
226 if(ePVR){
227 if(ePVR->Npatterns()!=0){
228 for(int i=0;i<ePVR->Npatterns();i++){
229 EdbPattern *pat0 = ePVR->GetPattern(i);
230 if( pat0==NULL) continue;
231 if( pat0->GetSegment(0)==NULL ) continue;
232 if( pat0->GetSegment(0)->Plate() == s->Plate()) {
233 int pidnext = i+updown;
234 if(pidnext<0||pidnext>ePVR->Npatterns()) return 650;
235 EdbPattern *pat1 = ePVR->GetPattern(pidnext);
236 if(pat1==NULL) return 650;
237 else return fabs( pat1->Z()-pat0->Z() )*0.5;
238 }
239 }
240 }
241 }
242
243 return fabs( gEDA->GetZ(s->Plate()) - gEDA->GetZ(s->Plate()+updown) )*0.5;
244}
int Npl() const
Definition: EdbBrick.h:51
double GetZ(int ipl)
Definition: EdbEDA.h:300
float Z() const
Definition: EdbLayer.h:77
Definition: EdbPattern.h:273
Int_t Npatterns() const
Definition: EdbPattern.h:366
EdbPattern * GetPattern(int id) const
Definition: EdbPattern.cxx:1721
Definition: EdbBrick.h:14
EdbPlateP * GetPlate(Int_t p)
Definition: EdbScanSet.h:56
EdbBrickP eB
all layers of the brick defined here
Definition: EdbScanSet.h:13
Float_t Z() const
Definition: EdbPattern.h:84
EdbSegP * GetSegment(int i) const
Definition: EdbPattern.h:66

◆ GetTracks()

TObjArray * EdbEDATrackSet::GetTracks ( )
inline
310{ return eTracks;}

◆ GetTracksBase()

TObjArray * EdbEDATrackSet::GetTracksBase ( )
inline
275{ return eTracksBase;}

◆ GetTrackWidth()

int EdbEDATrackSet::GetTrackWidth ( EdbSegP s)
inline
562{ return eTrackWidth;}

◆ IsMember()

bool EdbEDATrackSet::IsMember ( EdbTrackP t)
inline
443{return (eTracksBase->FindObject(t) != NULL) ? kTRUE : kFALSE;}

◆ MicroTrackSearch() [1/2]

void EdbEDATrackSet::MicroTrackSearch ( EdbTrackP t)
1212 {
1213 // void SetCondTrackingDefault(){
1214 // eRunTracking.eDeltaRview = 400.;
1215 // eRunTracking.eDeltaTheta = 0.2;
1216 // eRunTracking.eDeltaR = 20.;
1217 //
1218 // eRunTracking.ePreliminaryPulsMinMT = 7;
1219 // eRunTracking.ePreliminaryChi2MaxMT = 3.0;
1220 //
1221 // eRunTracking.ePulsMinMT = 9;
1222 // eRunTracking.ePulsMinDegradMT = 1.5;
1223 // eRunTracking.eChi2MaxMT = 1.6;
1224 //
1225 // eRunTracking.ePulsMinBT = 18;
1226 // eRunTracking.ePulsMinDegradBT = 1.5;
1227 // eRunTracking.eChi2MaxBT = 1.8;
1228 //
1229 // eRunTracking.eDegradPos = 5.;
1230 // eRunTracking.eDegradSlope = 0.003;
1231 //
1232 // SetCondMTDefault( eRunTracking.eCondMT);
1233 // SetCondBTDefault( eRunTracking.eCondBT);
1234 // }
1235 //
1236 // void SetCondMTDefault(EdbScanCond &cond){
1237 // cond.SetSigma0( 1., 1., 0.010, 0.010 ); // sigma0 "x, y, tx, ty" at zero angle
1238 // cond.SetDegrad( 5. ); // sigma(tx) = sigma0*(1+degrad*tx)
1239 // cond.SetBins(0, 0, 0, 0); //??? // bins in [sigma] for checks
1240 // cond.SetPulsRamp0( 5., 5. ); // in range (Pmin:Pmax) Signal/All is nearly linear
1241 // cond.SetPulsRamp04( 5., 5. );
1242 // cond.SetChi2Max( 6.5 );
1243 // cond.SetChi2PMax( 6.5 );
1244 // cond.SetRadX0( 5810. );
1245 // cond.SetName("OPERA_microtrack");
1246 // }
1247 //
1248 // void SetCondBTDefault(EdbScanCond &cond){
1249 // cond.SetSigma0( 10., 10., 0.007, 0.007 ); // sigma0 "x, y, tx, ty" at zero angle
1250 // cond.SetDegrad( 2. ); // sigma(tx) = sigma0*(1+degrad*tx)
1251 // cond.SetBins(0, 0, 0, 0); // bins in [sigma] for checks
1252 // cond.SetPulsRamp0( 5., 5. ); // in range (Pmin:Pmax) Signal/All is nearly linear
1253 // cond.SetPulsRamp04( 5., 5. );
1254 // cond.SetChi2Max( 6.5 );
1255 // cond.SetChi2PMax( 6.5 );
1256 // cond.SetRadX0( 5810. );
1257 // cond.SetName("OPERA_basetrack");
1258 // }
1259 //
1260
1261 int ret=PrepareScanSetForMT();
1262 if(ret==-1) {
1263 printf("ScanSet error. stop.\n");
1264 return ;
1265 }
1266
1267 // Upstream segment search
1268 for(;;){
1269 EdbSegP *s = t->GetSegmentFirst();
1270 int ret = MicroTrackSearch(t,s,s->Plate()-1);
1271 if(ret==-1) {
1272 ret = MicroTrackSearch(t,s,s->Plate()-2);
1273 }
1274 if (ret==-1) break;
1275 }
1276
1277 // Fill holes
1278 for(int i=0;i<t->N()-1;i++){
1279 EdbSegP *s1 = t->GetSegment(i);
1280 EdbSegP *s2 = t->GetSegment(i+1);
1281
1282 for(int j=1;j<=2&&i+j<t->N();j++){
1283 int ipl=s1->Plate()+j;
1284 if( ipl!=s2->Plate() ) {
1285 // search MT from upstream
1286 int ret=MicroTrackSearch(t, s1, ipl);
1287 if(ret!=-1) break;
1288 // search MT from downstream
1289 ret=MicroTrackSearch(t, s2, ipl);
1290 if(ret!=-1) break;
1291 }
1292 else{
1293 break;
1294 }
1295 }
1296 }
1297
1298 // Downstream segment search
1299 for(;;){
1300 EdbSegP *s = t->GetSegmentLast();
1301 int ret = MicroTrackSearch(t,s,s->Plate()+1);
1302 if(ret==-1) break;
1303 }
1304}
int MicroTrackSearch(EdbTrackP *t, EdbSegP *pred, int ipl)
Definition: EdbEDATrackSet.C:1355
int PrepareScanSetForMT()
Definition: EdbEDATrackSet.C:1307
return
Definition: energy.C:49
EdbSegP * s2
Definition: tlg2couples.C:30

◆ MicroTrackSearch() [2/2]

int EdbEDATrackSet::MicroTrackSearch ( EdbTrackP t,
EdbSegP pred,
int  ipl 
)

Micro-track search.
Original from Napoli, modified by Frederic, impremented by Aki.
Use EdbScanProc
return -1 = not found, 0 = Basetrack found, 1 or 2 = Microtrack found.

1355 {
1361 printf("## Micro-track search ##\n");
1362
1363
1364 // Check if there is already a segment on the given ipl.
1365 int seg_already_exist=0;
1366 for(int i=0;i<t->N();i++) if( t->GetSegment(i)->Plate()==ipl) seg_already_exist++;
1367 if(seg_already_exist){
1368 printf(" A segment is already reconstructed in the track. No search is done.\n\n");
1369 return -1;
1370 }
1371
1372 // Check if the give plate is out of brick
1373 if(ipl<gEDA->GetFirstPlate() || ipl>gEDA->GetLastPlate() ){
1374 printf("searching plate %d is out of brick. stop.\n", ipl);
1375 return -1;
1376 }
1377
1378 int ret = PrepareScanSetForMT();
1379 if(ret==-1) {
1380 printf("ScanSet error. stop.\n");
1381 return -1;
1382 }
1384
1385 // get ScanSet of Total scan.
1386 // normally it's not filled even if TS are read via ReadTracksTree(id)
1387 EdbScanSet *sc = GetScanSet();
1388
1389 // Check if the plate is scanned or not.
1390 int flag_scanned=0;
1391 for(int i=0;i<sc->eIDS.GetEntries();i++){
1392 EdbID *id = sc->GetID(i);
1393 if(ipl==id->ePlate) flag_scanned++;
1394 }
1395 if(flag_scanned==0) {
1396 //ErrorMessage(Form("Plate %d is not scanned.\n", ipl));
1397 printf("Plate %d is not scanned.\n", ipl);
1398 return -1;
1399 }
1400 // Tracking setting --> Moved in constructor
1401 //eRunTracking.ePredictionScan = false;
1402 //SetCondTrackingDefault();
1403
1404 printf(" Segment pl=%d target_pl=%d\n",app->Plate(), ipl);
1405
1406 // Affine parameters.
1407 // use main data-set affine to unify affine transformation.
1408 //EdbPlateP *pl0 = sc->GetPlate(app->Plate());
1409 //EdbPlateP *pl1 = sc->GetPlate(ipl);
1410
1411 //EdbAffine2D *aff_vid0 = pl0->GetAffineXY();
1412 //EdbAffine2D *aff_vid1 = pl1->GetAffineXY();
1413
1414 if(gEDA->GetAffine(app->Plate())==NULL||gEDA->GetAffine(ipl)==NULL) {
1415 printf("No affine parameters found. stop.\n");
1416 return -1;
1417 }
1418
1419 EdbAffine2D aff_vid0 = *gEDA->GetAffine(app->Plate());
1420 EdbAffine2D aff_vid1 = *gEDA->GetAffine(ipl);
1421
1422
1423 aff_vid1.Print();
1424 aff_vid0.Print();
1425
1426 aff_vid0.Invert(); // invert affine
1427 aff_vid1.Invert();
1428
1429 double z = gEDA->GetZ(ipl); // z at target plate
1430
1431 EdbSegP app_tr(*app); // copy of original track
1432 app_tr.Transform(&aff_vid0); // from global to local
1433
1434 EdbSegP spred(*app); // prediction from original track
1435 spred.SetPlate(ipl);
1436 spred.PropagateTo(z); // propagate to target Z
1437
1438 spred.Transform(&aff_vid1); // from global to local
1439
1440// printf(" Track id = %d\n", t->ID());
1441// printf(" Original (global) -> Plate = %d, X = %2.2f, Y = %2.2f, TX = %2.4f, TY = %2.4f\n",
1442// app->Plate(), app->X(), app->Y(), app->TX(), app->TY());
1443// printf(" Original (local) -> Plate = %d, X = %2.2f, Y = %2.2f, TX = %2.4f, TY = %2.4f\n",
1444// app_tr.Plate(), app_tr.X(), app_tr.Y(), app_tr.TX(), app_tr.TY());
1445// printf(" Prediction (local) -> Plate = %d, X = %2.2f, Y = %2.2f, TX = %2.4f, TY = %2.4f\n",
1446// spred.Plate(), spred.X(), spred.Y(), spred.TX(), spred.TY());
1447
1448 EdbID& id = GetID();
1449 EdbSegP fndbt,fnds1,fnds2,snewpred;
1450 int idp[4]={id.eBrick, ipl, id.eMajor, id.eMinor};
1452
1453 int status = eRunTracking.FindPrediction(spred, fndbt, fnds1, fnds2, snewpred );
1454 if (status==-1) {
1455 printf(" *** MICROTRACK SEARCH ***\n");
1456 printf(" ***** NOTHING FOUND *****\n");
1457 if(gEve) gEve->SetStatusLine(Form("Nothing found on pl%02d. prediction from pl%02d",
1458 ipl, app->Plate()));
1459 }
1460 else {
1461 printf(" \n");
1462 printf(" Status = %d, Candidate found\n", status);
1463 printf(" Prediction (local) -> Plate = %2d, X = %8.1f, Y = %8.1f, TX = %7.4f, TY = %7.4f\n",
1464 spred.Plate(), spred.X(), spred.Y(), spred.TX(), spred.TY());
1465 printf(" Found (local) -> Plate = %2d, X = %8.1f, Y = %8.1f, TX = %7.4f, TY = %7.4f\n",
1466 ipl, snewpred.X(), snewpred.Y(), snewpred.TX(), snewpred.TY());
1467 printf(" Residual %8.1f, %8.1f, %7.4f, %7.4f\n",
1468 spred.X()-snewpred.X(), spred.Y()-snewpred.Y(), spred.TX()-snewpred.TX(), spred.TY()-snewpred.TY());
1469
1470// printf(" \n");
1471 aff_vid1.Invert(); //from local to global
1472 snewpred.Transform(&aff_vid1);
1473 printf(" Found (global) -> Plate = %2d, X = %8.1f, Y = %8.1f, TX = %7.4f, TY = %7.4f\n\n",
1474 ipl, snewpred.X(), snewpred.Y(), snewpred.TX(), snewpred.TY());
1475 }
1476
1477
1478 if(status==0){
1479 EdbSegP *snewpred0 = new EdbSegP(snewpred);
1480
1481 snewpred0->SetPID(gEDA->GetPID(ipl));
1482 snewpred0->SetZ(z);
1483 snewpred0->SetErrors(1.,1.,10.,0.002,0.002);
1484 snewpred0->SetDZ(-214);
1485
1486 t->AddSegment(snewpred0);
1487 t->SetCounters();
1488 t->FitTrackKFS();
1489
1490 printf("## BASETRACK found ##\n");
1491 printf(" MT Top : X = %8.1f, Y = %8.1f, TX = %7.4f, TY = %7.4f, W = %2.0f, Chi2 = %5.2f,\n",
1492 fnds1.X(),fnds1.Y(),fnds1.TX(),fnds1.TY(),fnds1.W(),fnds1.Chi2());
1493 printf(" MT Bot : X = %8.1f, Y = %8.1f, TX = %7.4f, TY = %7.4f, W = %2.0f, Chi2 = %5.2f,\n",
1494 fnds2.X(),fnds2.Y(),fnds2.TX(),fnds2.TY(),fnds2.W(),fnds2.Chi2());
1495
1496 if(gEve) gEve->SetStatusLine(Form("Basetrack found on pl %d. (W,Chi2)= Top(%d,%.2f) Bot(%d,%.2f)",
1497 ipl, (int)fnds1.W(), fnds1.Chi2(), (int)fnds2.W(), fnds2.Chi2()));
1498 }
1499
1500 if(status==1){
1501 EdbSegP *snewpred1 = new EdbSegP(snewpred);
1502
1503 snewpred1->SetPID(gEDA->GetPID(ipl));
1504 snewpred1->SetErrors(1.,1.,10.,0.002,0.002);
1505 snewpred1->SetZ(z);
1506 snewpred1->SetDZ(-107);
1507 snewpred1->SetAid(snewpred1->Aid(0), snewpred1->Aid(1), status);
1508 t->AddSegment(snewpred1);
1509 t->SetCounters();
1510 t->FitTrackKFS();
1511
1512 printf("## MICROTRACK Top found ##\n");
1513 printf(" MT Top : X = %8.1f, Y = %8.1f, TX = %7.4f, TY = %7.4f, W = %2.0f, Chi2 = %5.2f,\n",fnds1.X(),fnds1.Y(),fnds1.TX(),fnds1.TY(),fnds1.W(),fnds1.Chi2());
1514 if(gEve) gEve->SetStatusLine(Form("Microtrack Top found on pl %d. (W,Chi2)=(%d,%.2f)",
1515 ipl,(int)fnds1.W(), fnds1.Chi2()));
1516 }
1517
1518 if(status==2){
1519 EdbSegP *snewpred2 = new EdbSegP(snewpred);
1520
1521 snewpred2->SetPID(gEDA->GetPID(ipl));
1522 snewpred2->SetErrors(1.,1.,10.,0.002,0.002);
1523 snewpred2->SetZ(z);
1524 snewpred2->SetDZ(-107);
1525 snewpred2->SetAid(snewpred2->Aid(0), snewpred2->Aid(1), status);
1526
1527 t->AddSegment(snewpred2);
1528 t->SetCounters();
1529 t->FitTrackKFS();
1530 printf("## MICROTRACK Bottom found ## \n");
1531 printf(" MT Bot : X = %8.1f, Y = %8.1f, TX = %7.4f, TY = %7.4f, W = %2.0f, Chi2 = %5.2f\n",fnds2.X(),fnds2.Y(),fnds2.TX(),fnds2.TY(),fnds2.W(),fnds2.Chi2());
1532 if(gEve) gEve->SetStatusLine(Form("Microtrack Bottom found on pl %d. (W,Chi2)=(%d,%.2f)", ipl, (int)fnds2.W(), fnds2.Chi2()));
1533 }
1534
1535 printf("\nMicrotrack search end.\n\n");
1536
1537 return status;
1538}
Definition: EdbAffine.h:17
void Invert()
Definition: EdbAffine.cxx:103
void Print(Option_t *opt="") const
Definition: EdbAffine.cxx:52
int GetPID(int ipl)
Definition: EdbEDA.h:276
EdbAffine2D * GetAffine(int ipl)
Definition: EdbEDA.C:197
int GetLastPlate()
Definition: EdbEDA.h:241
EdbRunTracking eRunTracking
Run Tracking for microtrack search.
Definition: EdbEDATrackSet.h:62
EdbID & GetID()
Definition: EdbEDATrackSet.h:464
EdbScanSet * GetScanSet()
Definition: EdbEDATrackSet.h:471
EdbScanProc * ScanProc()
Definition: EdbEDA.h:578
Definition: EdbID.h:7
int FindPrediction(EdbSegP &spred, EdbSegP &fndbt, EdbSegP &fnds1, EdbSegP &fnds2, EdbSegP &snewpred)
Definition: EdbRunTracking.cxx:326
scanned data processing
Definition: EdbScanProc.h:12
bool InitRunAccess(EdbRunAccess &ra, int id[4], bool do_update=false)
Definition: EdbScanProc.cxx:2317
Definition: EdbScanSet.h:11
EdbID * GetID(Int_t i)
Definition: EdbScanSet.h:46
TList eIDS
list of the identifiers to be processed
Definition: EdbScanSet.h:16
void SetPID(int pid)
Definition: EdbSegP.h:129
void SetErrors()
Definition: EdbSegP.h:90
Float_t Chi2() const
Definition: EdbSegP.h:157
void SetZ(float z)
Definition: EdbSegP.h:125
void SetDZ(float dz)
Definition: EdbSegP.h:126
Float_t W() const
Definition: EdbSegP.h:151
Int_t Aid(int i) const
Definition: EdbSegP.h:169
void SetAid(int a, int v, int side=0)
Definition: EdbSegP.h:138
virtual void Transform(const EdbAffine2D *a)
EdbScanProc * sproc
Definition: comptonmap.cpp:29
UInt_t id
Definition: tlg2couples.C:117

◆ N()

int EdbEDATrackSet::N ( )
inline
439{ return eTracks->GetEntries();}

◆ NBase()

int EdbEDATrackSet::NBase ( )
inline
440{ return eTracksBase->GetEntries();}

◆ PrepareScanSetForMT()

int EdbEDATrackSet::PrepareScanSetForMT ( )

Scan id check

1307 {
1308
1310 EdbID& id = GetID();
1311 if(id.eMinor==0){
1312 id.eBrick = gEDA->GetBrick();
1313 InputID("Please input EdbID for TS.",id);
1314 SetID(id);
1315 }
1316
1317 // get ScanSet of Total scan.
1318 // normally it's not filled even if TS are read via ReadTracksTree(id)
1319 EdbScanSet *sc = GetScanSet();
1320
1321 if(sc==NULL){
1322 // if sc is NULL, read and assemble ScanSet. and set for TrackSet.
1323 // this will be executed only 1st time.
1325 sc = new EdbScanSet();
1326 sc->MakeNominalSet(id);
1327 sproc->MakeScannedIDList(id, *sc, 65, -5,"cp.root");
1328 sc->eB.SetID(id.eBrick);
1329 int nid = sc->eIDS.GetEntries();
1330 if(nid==0) {
1331 ErrorMessage(Form("Error : Not cp files! stop. ScanID=%d.%d.%d.%d", id.eBrick, id.ePlate, id.eMajor, id.eMinor));
1332 return -1;
1333 }
1334
1335 gEDA->ScanProc()->WriteScanSet(id, *sc);
1336 if(gEDA->GetScanSet()) {
1338 sc = gEDA->ScanProc()->ReadScanSet(id);
1339 }else {
1340 gEDA->ScanProc()->AssembleScanSet(*sc);
1341 }
1342
1343 if(sc->eB.Npl()!=0) SetScanSet(sc); // set Scanset in TrackSet
1344 }
1345 if(sc->eB.Npl()==0){
1346 // if there is not plate, stop.
1347 ErrorMessage("No plate in ScanSet :");
1348 id.Print();
1349 return -1;
1350 }
1351
1352 return 0;
1353}
EdbScanSet * GetScanSet()
Definition: EdbEDA.h:222
int GetBrick()
Definition: EdbEDA.h:232
EdbID GetID()
Definition: EdbEDA.h:219
void SetID(EdbID id)
Definition: EdbEDATrackSet.h:463
void SetScanSet(EdbScanSet *ss)
Definition: EdbEDATrackSet.h:470
void SetID(int id)
Definition: EdbLayer.h:94
void UpdateSetWithAff(EdbID idset, EdbAffine2D aff)
Definition: EdbScanProc.cxx:2730
int WriteScanSet(EdbID id, EdbScanSet &ss)
Definition: EdbScanProc.cxx:1428
void MakeScannedIDList(EdbID id0, EdbScanSet &sc, int pl_from, int pl_to, const char *suffix)
Definition: EdbScanProc.cxx:646
int AssembleScanSet(EdbScanSet &ss)
Definition: EdbScanProc.cxx:135
EdbScanSet * ReadScanSet(EdbID id)
Definition: EdbScanProc.cxx:1482
void MakeNominalSet(EdbID id, int from_plate=57, int to_plate=1, float z0=0, float dz=-1300, float shr=1, float dzbase=210., float dzem=45.)
Definition: EdbScanSet.cxx:74
void ErrorMessage(char *title, char *message)
Definition: EdbEDAUtil.C:479
int InputID(char *message, EdbID &id)
Definition: EdbEDAUtil.C:872

◆ Print()

void EdbEDATrackSet::Print ( )
inline
258 {
259 printf("EdbEDATrackSet : %s\n", GetName());
260 printf("TracksBase : %5d tracks\n", NBase());
261 printf("Tracks to Draw : %5d tracks\n", N());
262
263 }

◆ ReadFile()

void EdbEDATrackSet::ReadFile ( char *  filename = NULL,
int  datatype = 100,
TCut  rcut = "1" 
)

filename : filename for "LinkDef" or "*.set.root(ScanSet)" or "*.root(linked_track.root format)"
datatype : only for "LinkDef". Data type for EdbDataProc::InitVolume(). put -1 for no InitVolume
if datatype= 100 or 1000. linked tracks will be registred to "TS".
rcut : Track selection when read.

if filename is not given. open file browser.

592 {
597
599
600 if(filename==NULL) {
601 TGFileInfo *fi=new TGFileInfo;
602 fi->fIniDir = StrDup(".");
603 const char *filetypes[] = { "LinkDef", "*.def","Linkeda Tracks", "*.root","ScanSet", "*.set.root", "Mxx file","*.all",0,0};
604 fi->fFileTypes=filetypes;
605 new TGFileDialog(gClient->GetRoot(), 0, kFDOpen, fi);
606 filename = fi->fFilename;
607 }
608
609 if(filename==NULL){
610 printf("Cancel EdbEDATrackSet::ReadFile\n");
611 return;
612 }
613
614 // check the existence of the file.
615 if(gSystem->AccessPathName(filename, kReadPermission)!=0) {
616 printf("Error : %s is not found\n", filename);
617 return;
618 }
619
620 // select an action for the file.
621 TString s(filename);
622 s.ToLower();
623 if(s.EndsWith(".set.root")){
624 // Scan set file
625 printf("Read Scan Set : %s\n", s.Data());
626 TFile *f = TFile::Open(filename);
627 eScanSet = (EdbScanSet *)f->Get("set");
628 eID = *((EdbID *)eScanSet->eIDS.At(0));
629 eID.ePlate = 0;
630
631 TString s2;
632 gEDA->ScanProc()->MakeFileName(s2, eID, "trk.root", kFALSE);
633 int IsExist = gSystem->AccessPathName(s2.Data(), kReadPermission);
634 if( IsExist==kFALSE) {
635 // linked tracks case
636 ReadTracksTree(eID,rcut);
637 }
638 else {
639 // prediction scan
641 }
642 }
643 else if(s.EndsWith(".def")){
644 // Link def file
645 printf("Read LinkDef : %s\n", s.Data());
648 if(datatype>=0) {
649 dproc->InitVolume(datatype);
651 }
652 }
653 else if(s.EndsWith(".root")){
654 // Linked tracks file
655 printf("Read Linked_track : %s\n", s.Data());
657 }
658 else if(s.EndsWith(".all")){
659 // Mxx file (Nagoya style ascii)
661 }
662
663 if(NBase()!=0) SetDraw();
664}
FILE * f
Definition: RecDispMC.C:150
const char filename[256]
Definition: RecDispNU.C:83
emulsion data processing
Definition: EdbDataSet.h:181
EdbDataSet * GetDataSet()
Definition: EdbDataSet.h:197
int InitVolume(int datatype=0, const char *rcut="1")
Definition: EdbDataSet.cxx:2066
EdbDataProc * ReadLinkedTracks(char *lnkdef="lnk.def", TCut cut="1")
Definition: EdbEDATrackSet.C:717
void ReadPredictionScan(int BRICK, int SBVERSION, int RUN_PRED, int UseMicrotrack=0)
Definition: EdbEDATrackSet.C:777
void ReadMxxFile(char *filename)
Definition: EdbEDATrackSet.C:1046
void ReadTracksTree(char *scanset_filename, TCut cut="1")
Definition: EdbEDATrackSet.C:666
void SetDraw(bool b=kTRUE)
Definition: EdbEDATrackSet.h:583
EdbDataProc * ReadLinkedTracksFile(char *filename="linked_tracks.root", TCut cut="1")
Definition: EdbEDATrackSet.C:689
Int_t ePlate
Definition: EdbID.h:11
void MakeFileName(TString &s, int id[4], const char *suffix, bool inplate=true)
Definition: EdbScanProc.cxx:1819
EdbDataProc * dproc
Definition: check_vertex.C:13

◆ ReadLinkedTracks() [1/2]

EdbDataProc * EdbEDATrackSet::ReadLinkedTracks ( char *  lnkdef = "lnk.def",
TCut  cut = "1" 
)
717 {
718 EdbDataProc *dproc = new EdbDataProc(lnkdef);
719 dproc->InitVolume(100, cut);
721
722 return dproc;
723}
TCut cut
Definition: check_shower.C:6

◆ ReadLinkedTracks() [2/2]

EdbDataProc * EdbEDATrackSet::ReadLinkedTracks ( EdbDataProc dproc)

read tracks from linked_tracks.root for old structure.
plate number will be filled from link-list file.

725 {
728
729 printf("EdbEDATrackSet::ReadLinkedTracks(EdbDataProc *)\n");
730
732 EdbPVRec *pvr = dproc->PVR();
733
734 // set plate number to segment.
735 for(int j=0;j<pvr->Ntracks();j++){
736 EdbTrackP *t = pvr->GetTrack(j);
737
738 for(int k=0;k<t->N();k++){
739 EdbSegP *s = t->GetSegment(k);
740 int pid = s->PID();
741
742 int ipl = eDataSet->GetPiece(pid)->Plate();
743 s->SetPlate(ipl);
744 }
745 t->SetPlate(t->GetSegmentFirst()->Plate());
746 }
747
748 AddTracksPVR(pvr);
749
750 EdbID id =pvr->GetTrack(0)->GetSegment(0)->ScanID();
751
752 SetID( EdbID(id.eBrick, 0, id.eMajor, id.eMinor));
753
754 return dproc;
755}
int Plate() const
Definition: EdbDataSet.h:66
EdbPVRec * PVR() const
Definition: EdbDataSet.h:198
EdbDataPiece * GetPiece(int id)
Definition: EdbDataSet.h:163
void AddTracksPVR(EdbPVRec *pvr)
Definition: EdbEDATrackSet.h:312
Int_t Ntracks() const
Definition: EdbPVRec.h:203
EdbTrackP * GetTrack(int i) const
Definition: EdbPVRec.h:241
EdbID ScanID() const
Definition: EdbSegP.h:160
int pid[1000]
Definition: m2track.cpp:13

◆ ReadLinkedTracksFile()

EdbDataProc * EdbEDATrackSet::ReadLinkedTracksFile ( char *  filename = "linked_tracks.root",
TCut  cut = "1" 
)

Read linked_tracks.root format file.

689 {
691
692 // read file
694 ePVR = new EdbPVRec;
696
697 // if plate number is not set. set plate number as PID.
698 int flag_plset=0;
699 for(int i=0;i<ePVR->Ntracks();i++){
700 EdbTrackP *t = ePVR->GetTrack(i);
701 EdbSegP *s = t->GetSegmentLast();
702 if(s->Plate()!=0) flag_plset++; // if plate number is set.
703 }
704
705 if(flag_plset==0){ // in case plate number is not set, set PID as plate number
706 for(int i=0;i<ePVR->Npatterns();i++){
708 if(p==NULL) continue;
709 p->SetSegmentsPlate(p->ID());
710 }
711 }
713
714 return dproc;
715}
static int ReadTracksTree(EdbPVRec &ali, const char *fname="linked_tracks.root", const char *rcut="t.eFlag>-1&&nseg>2&&t.eProb>.01")
Definition: EdbDataSet.cxx:2922
p
Definition: testBGReduction_AllMethods.C:8

◆ ReadListFile()

void EdbEDATrackSet::ReadListFile ( char *  filename = NULL,
bool  clear_previous = kTRUE 
)

Read list file. Search tracks in this track set. see also EdbEDAMainTab::ReadListFile(), which try to search in BT files.

1052 {
1057
1058 if(filename==NULL){
1059 TGFileInfo *fi = new TGFileInfo;
1060 fi->fIniDir = StrDup(".");
1061 const char *filetypes[] = { "List file", "*.lst", "All files","*",0,0};
1062 fi->fFileTypes = filetypes;
1063 new TGFileDialog(gClient->GetRoot(), gEve->GetMainWindow(), kFDOpen, fi);
1064 filename=fi->fFilename;
1065 }
1066
1067 printf("Read List file : %s -> TrackSet : %s\n", filename, GetName());
1068 FILE *fp=NULL;
1069 if(filename!=NULL) fp = fopen(filename,"rt");
1070
1071 if(fp==NULL){
1072 printf("List file is not available.\n");
1073 return;
1074 }
1075
1076 if(clear_previous) {
1077 ClearTracks();
1078 ClearComments();
1079 }
1080 char buf[256];
1081 int ipl, iseg;
1082 char comment[256];
1083 // read list, setting TObjArray *selected.
1084 for(int i=0;NULL!=fgets(buf,sizeof(buf),fp);i++){
1085 if(feof(fp)||ferror(fp)) break;
1086 sscanf(buf,"%d %d %s", &ipl, &iseg, comment);
1087
1088 EdbTrackP *t=NULL;
1089 for(int j=0;j<NBase();j++){
1090 EdbTrackP *tt = GetTrackBase(j);
1091 if(NULL==tt) continue;
1092 for(int k=0;k<tt->N();k++){
1093 EdbSegP *s = tt->GetSegment(k);
1094 if(s->ID()==iseg){
1095 if(s->Plate()==ipl){
1096 SetTrack(tt); // add tt for drawing
1097 t=tt;
1098 break;
1099 }}
1100 }
1101 }
1102
1103 if(t==NULL) {
1104 // no track found in TS
1105 // search in BT
1106
1107 EdbPattern *pat = gEDA->GetPatternIPL(ipl);
1108 for(int j=0; j<pat->N(); j++){
1109 EdbSegP *s = pat->GetSegment(j);
1110 if(s->ID()==iseg){
1111 t = new EdbTrackP(s);
1112 t->SetCounters();
1113 t->SetPlate(s->Plate());
1114 AddTrack(t);
1115 }
1116 }
1117
1118 }
1119
1120 if(t==NULL) continue;
1121 unsigned int l;
1122 for(l=0;l<strlen(buf);l++){
1123 if(buf[l]=='\"') break;
1124 }
1125 if(l<strlen(buf) ){
1126 strcpy(comment, buf+l+1);
1127 for(l=0;l<strlen(comment);l++){
1128 if(comment[l]=='\"') comment[l]='\0';
1129 }
1130 if(strlen(comment)!=0) {
1131 AddComment(t,comment);
1132 }
1133 }
1134
1135 }
1136}
EdbPattern * GetPatternIPL(int pid)
Definition: EdbEDA.C:262
void AddComment(EdbTrackP *t, char *cmt)
Definition: EdbEDATrackSet.h:475
void ClearComments()
Definition: EdbEDATrackSet.h:476
void SetTrack(EdbTrackP *t)
Definition: EdbEDATrackSet.h:288
Int_t N() const
Definition: EdbPattern.h:86

◆ ReadMxxFile()

void EdbEDATrackSet::ReadMxxFile ( char *  filename)
1046 {
1048 AddTracksPVR(pvr);
1049}
EdbPVRec * ReadMxxPVR(char *filename=NULL)
Definition: EdbEDAUtil.C:1051

◆ ReadPredictionScan() [1/3]

void EdbEDATrackSet::ReadPredictionScan ( EdbID  id,
bool  force_update_setroot = 0 
)

Read Prediction scan
if there is "set.root" already exist, ask whether overwrite or not.
if force_update_setroot == kTRUE, overwrite without asking.

806 {
810
811 if(id.eMinor==0) {
812 printf("ReadPredictionScan: strange id.eMinor %d, stop\n", id.eMinor);
813 ErrorMessage(Form("ReadPredictionScan: strange id.eMinor %d, stop\n", id.eMinor));
814 return;
815 }
816
817 eID=id;
818 TString s;
819 gEDA->ScanProc()->MakeFileName(s, eID, "set.root", kFALSE);
820 int update_setroot=1;
821 if(force_update_setroot) update_setroot=1;
822 else if(gSystem->AccessPathName(s.Data(), kReadPermission)==0){
823 // if set.root already exist, ask whether update or not.
824 update_setroot = AskYesNo(Form("%s is already exist. do you want to update?", s.Data()));
825 }
826
827 if(update_setroot==1){
828 EdbScanSet *ss = new EdbScanSet();
829 ss->MakeNominalSet(id,60);
830 gEDA->ScanProc()->MakeScannedIDList(id, *ss, 60, 0,"found.root");
831 ss->eB.SetID(id.eBrick);
832 if(ss->eIDS.GetEntries()==0){
833 printf("ID %d.%d.%d.%d is not scanned\n", id.eBrick, id.ePlate, id.eMajor, id.eMinor);
834 return;
835 }
836 /*
837 EdbAffine2D *aff = ss->eB.GetPlate(ss->eB.Npl()-1)->GetAffineXY();
838 if(aff->A11()==1.0){
839 printf("ReadPredictionScan : no affine parameters found as ScanBack. try to read as ScanForth\n");
840 delete ss;
841 ss = new EdbScanSet();
842 ss->MakeNominalSet(id);
843 gEDA->ScanProc()->MakeScannedIDList(id, *ss, 0, 60,"found.root");
844 ss->eB.SetID(id.eBrick);
845 gEDA->ScanProc()->AssembleScanSet(*ss);
846 }
847 */
848
849 // Z shift
850 int ipl = ss->eB.GetPlate(0)->ID();
851 float zl = ss->eB.GetPlate(0)->Z();
852 float zg = gEDA->GetZ(ipl);
853 ss->ShiftBrickZ(-zl);
854 ss->ShiftBrickZ(zg);
855
856 gEDA->ScanProc()->WriteScanSet(id, *ss);
857
858 if(gEDA->GetScanSet()) {
859 EdbID idmain = gEDA->GetID();
860 printf("Update geometry of %d.%d.%d.%d with %d.%d.%d.%d\n",
861 id.eBrick, id.ePlate, id.eMajor, id.eMinor,
862 idmain.eBrick, idmain.ePlate, idmain.eMajor, idmain.eMinor);
863 gEDA->ScanProc()->UpdateSetWithAff(id, idmain);
864 ss = gEDA->ScanProc()->ReadScanSet(id);
865 }else {
867 }
868 }
869 //ReadPredictionScan(ss);
870
871 ReadFile(const_cast<char*>(s.Data()),0,"1");
872
873}
float zl[dim]
Definition: RecDispMC_Profiles.C:61
void ReadFile(char *filename=NULL, int datatype=100, TCut rcut="1")
Definition: EdbEDATrackSet.C:592
Int_t eBrick
Definition: EdbID.h:10
Int_t eMinor
Definition: EdbID.h:13
Int_t eMajor
Definition: EdbID.h:12
bool AskYesNo(char *message)
Definition: EdbEDAUtil.C:484

◆ ReadPredictionScan() [2/3]

void EdbEDATrackSet::ReadPredictionScan ( EdbScanSet ss)
875 {
876 EdbPVRec *ali = new EdbPVRec;
877 gEDA->ScanProc()->ReadFoundTracks(*ss, *ali,-11);
878
879 eScanSet = ss;
880 eID = *((EdbID *)eScanSet->eIDS.At(0));
881 eID.ePlate = 0;
882
883
884 // to be compatible also main set by EdbDataSet
885 // this is temporary solution.
886 if(gEDA->GetDataSet()){
887 for(int i=0;i<ali->Ntracks();i++){
888 EdbTrackP *t = ali->GetTrack(i);
889 for(int j=0;j<t->N();j++){
890 if(t->N()==0) break;
891 EdbSegP *s = t->GetSegment(j);
892
893 // set Z from global calibration
894 double z = gEDA->GetZ(s->Plate());
895 s->SetZ(z);
896 // reset affine on this ScanSet.
897 EdbPlateP *pl =eScanSet->GetPlate(s->Plate());
898 if(pl==NULL) continue;
899 EdbAffine2D aff = *(pl->GetAffineXY());
900 aff.Invert();
901 s->Transform(&aff); // --> plate coordinate
902
903 // apply affine of Main ScanSet (or DataSet).
904 EdbAffine2D *affg = gEDA->GetAffine(s->Plate());
905 if(NULL==affg) continue; // if no affine params are found in the main calibration, just leave it.
906 s->Transform(affg); // --> global coordinate
907 }
908 }
909 }
910
912 SetDraw();
913}
EdbDataSet * GetDataSet()
Definition: EdbEDA.h:244
EdbAffine2D * GetAffineXY()
Definition: EdbLayer.h:119
int ReadFoundTracks(EdbScanSet &ss, EdbPVRec &ali, int flag=-1)
Definition: EdbScanProc.cxx:221
EdbPVRec * ali
Definition: test_oracle.C:9

◆ ReadPredictionScan() [3/3]

void EdbEDATrackSet::ReadPredictionScan ( int  BRICK,
int  SBVERSION,
int  RUN_PRED,
int  UseMicrotrack = 0 
)

this is an inferface function from old style usage.
reccoment ReadPredictionScan( EdbID ) for non-Bern people.
this force to update scanset file = "bxx.set.root".

if Brick number is not set, show message.
give command line input.

777 {
781
784 if(BRICK==0){
785 new TGMsgBox(gClient->GetRoot(), 0,
786 "EDA", "Follow your shell window");
787 system("pwd");
788 printf("Read Scanback ---------------- \n");
789 printf(" Enter Brick number : ");
790 scanf("%d", &BRICK);
791 printf(" Enter Run number : ");
792 scanf("%d", &RUN_PRED);
793 }
794
795 printf("Read Scanback ibrick = %d run = %d ver = %d\n", BRICK, RUN_PRED, SBVERSION);
796
797 eID=EdbID(BRICK, 0, SBVERSION, RUN_PRED);
798
799 ReadPredictionScan(eID, kTRUE);
800 SetDrawMT(UseMicrotrack);
801
802 SetDraw();
803}
Definition: RecDispMC.C:95

◆ ReadTextTracks()

void EdbEDATrackSet::ReadTextTracks ( char *  filename = NULL)

Read Text file data
the format should be : itrk ipl ph x y ax ay flag_trans
flag_trans control Transformation. Affine=plate->global
flag_trans==1 (Affine)
flag_trans==2 (Affine)+(Bottom->Middle of base). For manualcheck data
flag_trans==3 (Affine)+(Top->Middle of base). For manualcheck data

918 {
925 int i,j;
926 char buf[512];
927
928 FILE *fp;
929
930 if(filename==NULL){
931 TGFileInfo *fi = new TGFileInfo;
932 fi->fIniDir = StrDup(".");
933 new TGFileDialog(gClient->GetRoot(), gEve->GetMainWindow(), kFDOpen, fi);
934 filename=fi->fFilename;
935 }
936
937 printf(" the format should be : itrk ipl ph x y ax ay flag_trans runid\n");
938 printf(" the Z value by ipl will be used\n");
939 printf(" if(flag_affine==1) affine transform will be applied from plate->global\n");
940 if(filename==NULL) {
941 printf("Read tracks. no filename. end.\n");
942 return;
943 }
944 printf("Read tracks from Text : %s -> TrackSet:%s\n", filename, GetName());
945 if(filename!=NULL) fp = fopen(filename,"rt");
946
947 if(fp==NULL){
948 printf("text track is not available.\n");
949 return;
950 }
951
952 eID=gEDA->GetID();
953
954 ePVR = new EdbPVRec;
955
956 EdbScanCond cond;
957 for(;fgets(buf,sizeof(buf),fp)!=NULL;){
958 if(feof(fp)||ferror(fp)) break;
959 int itrk;
960 double x,y,z,ax,ay;
961 int ipl,ph,flag_affine=1;
962 int runid;
963 printf("%s",buf);
964 int n = sscanf(buf,"%d %d %d %lf %lf %lf %lf %d %d", &itrk, &ipl, &ph, &x, &y, &ax, &ay, &flag_affine,&runid);
965 if(n<9) runid=-99;
966 eID.eMajor=runid%100;
967 eID.eMinor=runid-runid%100;
968
969 if(n==0) n=-1;
970 int pid = gEDA->GetPID(ipl);
971
972 // if the PID is out of volume scan, skip the segment.
973 if(pid==-1) continue;
974 z=gEDA->GetZ(ipl);
975
976 EdbSegP *s = new EdbSegP;
977 s->Set(itrk,x,y,ax,ay,0,0);
978 s->SetZ(z);
979 s->SetPID(pid);
980 s->SetW(ph);
981 s->SetTrack(itrk);
982 s->SetPlate(ipl);
983 s->SetAid(eID.eMajor, eID.eMinor);
984
985 // fill COV for vertexing
986 s->SetErrors();
987 cond.FillErrorsCov(s->TX(), s->TY(), s->COV());
988
989 // add segment to track
990 EdbTrackP *t = NULL;
991
992 // search track in sbtrk
993 for(j=0;j<N();j++){
994 EdbTrackP *tt = GetTrack(j);
995 if(s->ID()==tt->ID()) t = tt;
996 }
997
998 // if not track corresponding.
999 if( t==NULL){
1000 t = new EdbTrackP;
1001 t->SetID(s->ID());
1002 t->SetFlag(runid);
1003 AddTrack(t);
1004 }
1005
1006 if(flag_affine==1){
1007 EdbAffine2D *traff = gEDA->GetAffine(ipl);
1008 if(NULL!=traff){
1009 s->Transform(traff);
1010 }
1011 }
1012 if(flag_affine==2){
1013 // in case of manualcheck data at bottom
1014 EdbAffine2D *traff = gEDA->GetAffine(ipl);
1015 if(NULL!=traff){
1016 s->Transform(traff);
1017 s->SetZ(z-102.5);
1018 s->PropagateTo(z);
1019 }
1020 }
1021 if(flag_affine==3){
1022 // in case of manualcheck data at top
1023 EdbAffine2D *traff = gEDA->GetAffine(ipl);
1024 if(NULL!=traff){
1025 s->Transform(traff);
1026 s->SetZ(z+102.5);
1027 s->PropagateTo(z);
1028 }
1029 }
1030
1031 // add segment into track.
1032 t->AddSegment(s);
1033 }
1034 fclose(fp);
1035
1036 for(i=0;i<N();i++){
1037 EdbTrackP* t = GetTrack(i);
1038 EdbSegP* s = t->GetSegmentFirst();
1039 t->Set(s->ID(),s->X(),s->Y(),s->TX(),s->TY(),s->W(),t->Flag());
1040 t->SetZ(s->Z());
1041 t->SetCounters();
1042 }
1043 printf("%d tracks available from text file\n", N());
1044}
void FillErrorsCov(float tx, float ty, TMatrixD &cov)
Definition: EdbScanCond.cxx:161
Int_t ID() const
Definition: EdbSegP.h:147
fclose(pFile)

◆ ReadTracksTree() [1/2]

void EdbEDATrackSet::ReadTracksTree ( char *  scanset_filename,
TCut  cut = "1" 
)
666 {
667 TFile *f = TFile::Open(scanset_filename);
668 if(f==NULL) return;
669 eScanSet = (EdbScanSet *)f->Get("set");
670 if(eScanSet==0) {
671 fprintf(stderr,"Error at ReadTracksTree : cannot find ScanSet in %s\n",scanset_filename);
672 return;
673 }
674 EdbID id = *((EdbID *) (eScanSet->eIDS.At(0)));
675 id.ePlate=0;
676 ReadTracksTree(id, cut);
677 f->Close();
678}
FILE * stderr

◆ ReadTracksTree() [2/2]

void EdbEDATrackSet::ReadTracksTree ( EdbID  ID,
TCut  cut = "1" 
)
680 {
683 ePVR = new EdbPVRec();
686 eID=ID;
687}
int ReadTracksTree(EdbID id, EdbPVRec &ali, TCut cut="1")
Definition: EdbScanProc.cxx:604

◆ RemoveTrack()

void EdbEDATrackSet::RemoveTrack ( EdbTrackP t)
inline
324{ if(eTracks->FindObject(t)) {eTracks->Remove(t); eTracks->Sort();}}

◆ RemoveTrackBase()

void EdbEDATrackSet::RemoveTrackBase ( EdbTrackP t)
inline
323{ if(eTracksBase->FindObject(t)) {eTracksBase->Remove(t); eTracksBase->Sort();} RemoveTrack(t);}
void RemoveTrack(EdbTrackP *t)
Definition: EdbEDATrackSet.h:324

◆ RemoveTracks()

void EdbEDATrackSet::RemoveTracks ( TObjArray *  tracks)
inline
325{ for(int i=0; i<tracks->GetEntries(); i++) RemoveTrack((EdbTrackP *) tracks->At(i));}
TTree * tracks
Definition: check_tr.C:19

◆ ResetTrackAttribute()

void EdbEDATrackSet::ResetTrackAttribute ( void  )
inline

◆ RestorePrevious()

void EdbEDATrackSet::RestorePrevious ( void  )
inline
351 {
352 TObjArray arr = *eTracks;
354 *eTracksPrevious = arr;
355 }

◆ SearchCorrespondTrack()

EdbTrackP * EdbEDATrackSet::SearchCorrespondTrack ( EdbTrackP t)

check if the track corresponds to the scanback track. return scanback id, if not return -1.

541 {
543 if(t==NULL||eTracks==NULL) return NULL;
544 EdbSegP *s = t->GetSegmentLast();
545 for(int i=0;i<N();i++){
546 EdbSegP *ss = new EdbSegP(*((EdbSegP *)GetTrack(i)));
547 ss->PropagateTo(s->Z());
548 if(fabs(s->TX()-ss->TX())<0.03){
549 if(fabs(s->TX()-ss->TX())<0.03){
550 if( fabs(s->X()-ss->X())<100 ){
551 if( fabs(s->Y()-ss->Y())<100 ){
552 printf(" Track: %d corresponds to scanback %d\n", t->ID(), ss->ID());
553 return GetTrack(i);
554 }}
555 }}
556 delete ss;
557 }
558 return NULL;
559}

◆ SearchSegment()

EdbTrackP * EdbEDATrackSet::SearchSegment ( int  ipl,
int  iseg 
)
1198 {
1199 for(int i=0;i<eTracksBase->GetEntries(); i++) {
1200 EdbTrackP *t = (EdbTrackP *) eTracksBase->At(i);
1201 for(int j=0;j<t->N();j++){
1202 EdbSegP *s = t->GetSegment(j);
1203 if(s->Plate()!=ipl) continue;
1204 if(s->ID()!=iseg) continue;
1205 return t;
1206 }
1207 }
1208 return NULL;
1209}

◆ SearchTrack()

EdbTrackP * EdbEDATrackSet::SearchTrack ( int  itrk)
inline
365{ for(int i=0;i<eTracksBase->GetEntries(); i++) {if(itrk==((EdbTrackP *) eTracksBase->At(i))->ID()) return (EdbTrackP *) eTracksBase->At(i);} return NULL;}

◆ SetAreaSet()

void EdbEDATrackSet::SetAreaSet ( EdbEDAAreaSet set)
inline
601{ eAreaSet=set;}
EdbScanSet * set
Definition: emtraceback.cpp:14

◆ SetColorMode()

void EdbEDATrackSet::SetColorMode ( int  mode)
276 {
277
278 if(mode==kBLACKWHITE){
279 eTrackColor = kBlack;
280 eLayerColor = kBlack;
281 eLayerColorMT = kBlack;
282 //eLayerWidth = -1;
283 }
286 }
287 eColorMode = mode;
288}
void ResetTrackAttribute(void)
Definition: EdbEDATrackSet.h:558

◆ SetDataSet()

void EdbEDATrackSet::SetDataSet ( EdbDataSet dset)
inline
472{ eDataSet = dset;}
EdbDataProc * dset
Definition: RecDispEX.C:9

◆ SetDraw()

void EdbEDATrackSet::SetDraw ( bool  b = kTRUE)
inline
583{ eDraw = b;} // Setting Draw or not.

◆ SetDrawAreaSet()

void EdbEDATrackSet::SetDrawAreaSet ( bool  draw = kTRUE)
inline
603{ eAreaSet->SetDraw(draw);}
void SetDraw(bool draw)
Definition: EdbEDASets.h:106

◆ SetDrawMT()

void EdbEDATrackSet::SetDrawMT ( bool  b = kTRUE)
inline
585{ eDrawMT = b;} // Setting Draw or not.

◆ SetDrawTrackAngle()

void EdbEDATrackSet::SetDrawTrackAngle ( bool  draw)
inline
588{ eDrawTrackAngle = draw;}

◆ SetDrawTrackAngleG()

void EdbEDATrackSet::SetDrawTrackAngleG ( bool  draw)
inline
590{ eDrawTrackAngleG = draw;}

◆ SetDrawTrackID()

void EdbEDATrackSet::SetDrawTrackID ( bool  draw)
inline
587{ eDrawTrackID = draw;}

◆ SetDrawTrackIDG()

void EdbEDATrackSet::SetDrawTrackIDG ( bool  draw)
inline
589{ eDrawTrackIDG = draw;}

◆ SetExtendMode()

void EdbEDATrackSet::SetExtendMode ( int  mode = kExtendAuto)
inline
526{ eExtendMode=mode;}

◆ SetID()

void EdbEDATrackSet::SetID ( EdbID  id)
inline
463{ eID=id;}

◆ SetInterpolation()

void EdbEDATrackSet::SetInterpolation ( int  interpolation = kTRUE)
inline
528{ eInterpolation = interpolation;} // kTRUE: fill hole with dashed line.

◆ SetLayerLength()

void EdbEDATrackSet::SetLayerLength ( double  length)
inline
556{ eLayerLength=length;}

◆ SetPVRec()

void EdbEDATrackSet::SetPVRec ( EdbPVRec pvr)
inline
321{ ePVR=pvr;}

◆ SetScanSet()

void EdbEDATrackSet::SetScanSet ( EdbScanSet ss)
inline
470{ eScanSet = ss;}

◆ SetTextAttribute()

void EdbEDATrackSet::SetTextAttribute ( int  size = 14,
int  color = kWhite,
int  fontfile = 4 
)
inline
570 {
571 eTextSize = size;
572 eTextColor = color;
573 eTextFont = fontfile;
574 }

◆ SetTextPosition()

void EdbEDATrackSet::SetTextPosition ( int  pos)
inline
580{ eTextPosition = pos;}

◆ SetTrack() [1/2]

void EdbEDATrackSet::SetTrack ( EdbTrackP t)
inline

Set a track to be drawn.
the track is requiered to be already registered in eTracksBase.
if you want to simply draw the track, use AddTrack().

288 {
292 if(eTracksBase->FindObject(t)&&eTracks->FindObject(t)==NULL) eTracks->Add(t);
293 }

◆ SetTrack() [2/2]

void EdbEDATrackSet::SetTrack ( int  itrack)
inline

Set Tracks to draw with the given track id.

295 {
297 for(int i=0; i<N(); i++) {
298 EdbTrackP *t = GetTrack(i);
299 if(t->ID()==itrack) SetTrack(t);
300 }
301 }

◆ SetTrackAttribute()

void EdbEDATrackSet::SetTrackAttribute ( int  track_color = -1,
int  track_width = 1,
double  track_length = -1,
int  layer_color = kYellow,
int  layer_width = 2,
double  layer_length = 150,
int  layer_color_MT = kCyan 
)
inline
537 {
538 // set track attribute. -1 means automatic setting.
539 eTrackColor = track_color;
540 eTrackWidth = track_width;
541 eTrackLength = track_length;
542 eLayerColor = layer_color;
543 eLayerWidth = layer_width>track_width? layer_width: track_width+1;
544 eLayerLength = layer_length;
545 }

◆ SetTracks()

void EdbEDATrackSet::SetTracks ( TObjArray *  tracks)
inline

Set tracks to be draw.
the tracks are requiered to be already resistered in eTracksBase.

303 {
306 // if you want to simply draw the tracks, use AddTracks().
307 if(NULL==tracks) return; for(int i=0; i<tracks->GetEntries(); i++) SetTrack((EdbTrackP *)tracks->At(i));
308 }

◆ SetTracksAll()

void EdbEDATrackSet::SetTracksAll ( void  )
inline
341{ *eTracks = *eTracksBase;}

◆ SetTracksBase()

void EdbEDATrackSet::SetTracksBase ( TObjArray *  tracksbase)
inline

Copy tracks to eTracksBase. tracksbase should be an array of EdbTrackP

265 {
267 *eTracksBase = *tracksbase;
268 }

◆ SetTracksNseg()

void EdbEDATrackSet::SetTracksNseg ( int  nsegcut = 3)
inline
342 {
343 eTracks->Clear();
344 for(int i=0; i<NBase(); i++) {
346 if(t->N()<nsegcut) continue;
347 SetTrack(t);
348 }
349 }

◆ SetTracksVertex()

void EdbEDATrackSet::SetTracksVertex ( EdbVertex v,
bool  clear_previous = kTRUE 
)
inline

Set eTracks as the tracks which belongs to the vertex.

505 {
507 if(clear_previous) ClearTracks();
508 for(int j=0 ; j < v->N() ; j++){
509 EdbTrackP *t = v->GetTrack(j);
510 if(t==NULL) continue;
511 SetTrack(t);
512 }
513 }
Int_t N() const
Definition: EdbVertex.h:121
EdbTrackP * GetTrack(int i)
Definition: EdbVertex.h:141

◆ SetTracksVertices()

void EdbEDATrackSet::SetTracksVertices ( TObjArray *  vertices,
bool  clear_previous = kTRUE 
)
inline

Set eTracks as the tracks which belongs to the vertices.

515 {
517 printf("Set Tracks for %d Vertices\n", vertices->GetEntries());
518 if(clear_previous) ClearTracks();
519 for(int i=0;i<vertices->GetEntries();i++){
520 EdbVertex *v = (EdbVertex *) vertices->At(i);
521 if(v==NULL) continue;
522 SetTracksVertex(v, kFALSE);
523 }
524 }
void SetTracksVertex(EdbVertex *v, bool clear_previous=kTRUE)
Definition: EdbEDATrackSet.h:505
Definition: EdbVertex.h:69

◆ StorePrevious()

void EdbEDATrackSet::StorePrevious ( )
inline

◆ WriteListFile()

char * EdbEDATrackSet::WriteListFile ( char *  filename = NULL,
bool  append = kFALSE,
bool  open_editor = kFALSE 
)

Write List file. ouput plate_number and segment_id. (track ID could change everytime after reconstruction, but segment ID doesn't change.) the result of MT search will be ignored.

1138 {
1142 if(filename==NULL){
1143 TGFileInfo *fi = new TGFileInfo;
1144 fi->fIniDir = StrDup(".");
1145 const char *filetypes[] = { "List file", "*.lst", "All files","*",0,0};
1146 fi->fFileTypes = filetypes;
1147 new TGFileDialog(gClient->GetRoot(), gEve->GetMainWindow(), kFDSave, fi);
1148 filename=fi->fFilename;
1149 }
1150
1151 if(NULL==filename) return NULL;
1152 printf("Write List file : %s (%6s) <- TrackSet:%s\n", filename, append?"append":"create", GetName());
1153 FILE *fp;
1154 if(append) fp = fopen(filename,"at");
1155 else fp = fopen(filename,"wt");
1156
1157 if(fp==NULL){
1158 printf("Couldn't open the file.\n");
1159 return filename;
1160 }
1161
1162 int k=0;
1163 for(int j=0;j<N();j++){
1164 EdbTrackP *t=GetTrack(j);
1165 if(NULL==t) continue;
1166
1167 EdbSegP *s = 0;
1168
1169 if(ePVR){
1170 // select a segment which from original reconstruction, in order to keep information after microtrack search.
1171 // if the segment is registered in ePVR, it's from original reconstruction.
1172 // if not, it's found by MT search or any.
1173 for(int i=0, flag=0;i<t->N();i++){
1174 s = t->GetSegment(i);
1175 for(int ipat=0;ipat<ePVR->Npatterns();ipat++){
1176 EdbPattern *pat = ePVR->GetPattern(ipat);
1177 TClonesArray *arr = pat->GetSegments();
1178 if( arr->FindObject(s) ) {flag=1;break;}
1179 }
1180 if(flag) break;
1181 }
1182 } else s=t->GetSegmentFirst();
1183
1184 fprintf(fp,"%2d %7d %10s itrk %5d %7.4lf %7.4lf\n", s->Plate(), s->ID(), Form("\"%s\"",GetComment(t)), t->ID(), t->TX(), t->TY());
1185 k++;
1186 }
1187
1188
1189 fclose(fp);
1190 printf("Write Selected : %d tracks\n", k);
1191
1192 // Open text editer
1193 if(open_editor) gEDA->OpenTextEditor(filename);
1194 return filename;
1195}
void OpenTextEditor(char *filename)
Definition: EdbEDA.C:1094
const char * GetComment(EdbTrackP *t)
Definition: EdbEDATrackSet.h:477
TClonesArray * GetSegments() const
Definition: EdbPattern.h:69

Member Data Documentation

◆ eAreaSet

EdbEDAAreaSet* EdbEDATrackSet::eAreaSet
private

◆ eColorMode

int EdbEDATrackSet::eColorMode
private

◆ eComments

TObjArray* EdbEDATrackSet::eComments
private

◆ eDataSet

EdbDataSet* EdbEDATrackSet::eDataSet
private

◆ eDraw

bool EdbEDATrackSet::eDraw
private

control of drawing

◆ eDrawMT

bool EdbEDATrackSet::eDrawMT
private

control of drawing microtrack

◆ eDrawTrackAngle

bool EdbEDATrackSet::eDrawTrackAngle
private

control of Track Angle drawing.

◆ eDrawTrackAngleG

bool EdbEDATrackSet::eDrawTrackAngleG
private

Global control of Track angle drawing by Main tab.

◆ eDrawTrackID

bool EdbEDATrackSet::eDrawTrackID
private

control of Track ID drawing

◆ eDrawTrackIDG

bool EdbEDATrackSet::eDrawTrackIDG
private

Global control of Track ID drawing by Main tab.

◆ eExtendMode

int EdbEDATrackSet::eExtendMode
private

◆ eID

EdbID EdbEDATrackSet::eID
private

◆ eInterpolation

int EdbEDATrackSet::eInterpolation
private

◆ eLayerColor

int EdbEDATrackSet::eLayerColor
private

◆ eLayerColorMT

int EdbEDATrackSet::eLayerColorMT
private

◆ eLayerLength

double EdbEDATrackSet::eLayerLength
private

◆ eLayerWidth

int EdbEDATrackSet::eLayerWidth
private

◆ ePVR

EdbPVRec* EdbEDATrackSet::ePVR
private

pointer for original EdbPVRec. tracks are copied to eTracksBase through AddTracksPVR().

◆ eScanSet

EdbScanSet* EdbEDATrackSet::eScanSet
private

◆ eTextColor

int EdbEDATrackSet::eTextColor
private

◆ eTextFont

int EdbEDATrackSet::eTextFont
private

◆ eTextPosition

int EdbEDATrackSet::eTextPosition
private

◆ eTextSize

int EdbEDATrackSet::eTextSize
private

◆ eTrackColor

int EdbEDATrackSet::eTrackColor
private

◆ eTrackLength

double EdbEDATrackSet::eTrackLength
private

◆ eTracks

TObjArray* EdbEDATrackSet::eTracks
private

array of tracks to be drawn

◆ eTracksBase

TObjArray* EdbEDATrackSet::eTracksBase
private

array of tracks, base of track search

◆ eTracksPrevious

TObjArray* EdbEDATrackSet::eTracksPrevious
private

previous array of tracks

◆ eTrackWidth

int EdbEDATrackSet::eTrackWidth
private

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