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, const 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, const char *elname, TEveCompound *cmp=NULL, int extendup=1, int extenddown=1)
 
void DrawSingleTrack (EdbTrackP *t)
 
 EdbEDATrackSet (const 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 (const char *filename=NULL, int datatype=100, TCut rcut="1")
 
EdbDataProcReadLinkedTracks (const char *lnkdef="lnk.def", TCut cut="1")
 
EdbDataProcReadLinkedTracks (EdbDataProc *dproc)
 
EdbDataProcReadLinkedTracksFile (const char *filename="linked_tracks.root", TCut cut="1")
 
void ReadListFile (const char *filename=NULL, bool clear_previous=kTRUE)
 
void ReadMxxFile (const 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 (const char *filename=NULL)
 
void ReadTracksTree (const 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 ()
 
const char * WriteListFile (const 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
 
bool eDrawMT
 
bool eDrawTrackAngle
 
bool eDrawTrackAngleG
 
bool eDrawTrackID
 
bool eDrawTrackIDG
 
int eExtendMode
 
EdbID eID
 
int eInterpolation
 
int eLayerColor
 
int eLayerColorMT
 
double eLayerLength
 
int eLayerWidth
 
EdbPVRecePVR
 
EdbScanSeteScanSet
 
int eTextColor
 
int eTextFont
 
int eTextPosition
 
int eTextSize
 
int eTrackColor
 
double eTrackLength
 
TObjArray * eTracks
 
TObjArray * eTracksBase
 
TObjArray * eTracksPrevious
 
int eTrackWidth
 

Additional Inherited Members

- Public Attributes inherited from EdbEDATrackSelection
EdbRunTracking eRunTracking
 
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 ( const 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
Definition: EdbEDATrackSet.h:212
int eTextPosition
Definition: EdbEDATrackSet.h:198
void SetDrawTrackIDG(bool draw)
Definition: EdbEDATrackSet.h:589
bool eDraw
Definition: EdbEDATrackSet.h:202
TObjArray * eTracks
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
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
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,
const char *  cmt 
)
inline
475 { eComments->Add(new EdbEDATrackComment(t,cmt));}
TTree * t
Definition: check_shower.C:4
Definition: EdbEDATrackSet.h:9

◆ AddSegments()

void EdbEDATrackSet::AddSegments ( TObjArray *  segments)
inline
414  {
415  if(segments==NULL) return;
416  if(segments->GetEntriesFast()==0) return;
417 
418  for(int i=0;i<segments->GetEntriesFast();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:18
Int_t Plate() const
Definition: EdbSegP.h:156
Definition: EdbPattern.h:118
EdbSegP * s
Definition: tlg2pattern.C:32

◆ AddTrack()

void EdbEDATrackSet::AddTrack ( EdbTrackP t)
inline
277  {
278  // Add a track to both eTracksBase and eTracks, if it is not yet registered.
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
282  {
283  // Add tracks to both eTracksBase and eTracks, if it is not yet registerd.
284  // arr is a TObjArray of EdbTrackP.
285  if(NULL==arr) return; for(int i=0;i<arr->GetEntriesFast();i++) AddTrack( (EdbTrackP *) arr->At(i));
286  }

◆ AddTracksBase()

void EdbEDATrackSet::AddTracksBase ( TObjArray *  tracksbase)
inline
269  {
270  // Add tracks to eTracksBase. tracksbase should be an array of EdbTrackP
271  if(tracksbase==NULL) return;
272  for(int i=0;i<tracksbase->GetEntriesFast();i++) eTracksBase->Add(tracksbase->At(i));
273  }

◆ AddTracksPVR()

void EdbEDATrackSet::AddTracksPVR ( EdbPVRec pvr)
inline
312  {
313  // COPY tracks from EdbPVRec.
314  // original PVRec is accessible through GetPVRec().
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
336  {
337  // Clear Tracks and TracksBase.
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
327  {
328  // Clear Tracks to be draw.
329  eTracks->Clear();
330  }

◆ ClearTracksBase()

void EdbEDATrackSet::ClearTracksBase ( void  )
inline
331  {
332  // Clear eTracksBase.
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 
)
561  {
562  // Do vertexing. if EdbVertexRec is given, use the parameter for reconstruction.
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
EdbPVRec * GetPVRec()
Definition: EdbEDATrackSet.h:320
void SetTracksVertices(TObjArray *vertices, bool clear_previous=kTRUE)
Definition: EdbEDATrackSet.h:515
TObjArray * GetTracks()
Definition: EdbEDATrackSet.h:310
void AddVertices(TObjArray *vertices)
Definition: EdbEDASets.h:189
void SetVerticesNtrk(int ntrkcut=3)
Definition: EdbEDASets.h:196
void Clear()
Definition: EdbEDASets.h:214
TObjArray * GetVertices()
Definition: EdbEDASets.h:217
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
Definition: EdbVertex.h:181
Int_t eQualityMode
Definition: EdbVertex.h:183
Bool_t eUseSegPar
Definition: EdbVertex.h:182
Float_t eImpMax
Definition: EdbVertex.h:179
Float_t eDZmax
Definition: EdbVertex.h:177
Float_t eProbMin
Definition: EdbVertex.h:178
Definition: EdbVertex.h:194
Int_t ProbVertexN()
Definition: EdbVertex.cxx:1448
TObjArray * eVTX
Definition: EdbVertex.h:205
Int_t FindVertex()
Definition: EdbVertex.cxx:1087
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->GetEntriesFast();i++){
533  DrawSingleComment(cmt);
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
Float_t TX() const
Definition: EdbSegP.h:172
Float_t X() const
Definition: EdbSegP.h:170
Float_t Z() const
Definition: EdbSegP.h:150
Float_t Y() const
Definition: EdbSegP.h:171
Float_t TY() const
Definition: EdbSegP.h:173
TEveCompound * GetTrackElement(EdbTrackP *t)
Definition: EdbEDAUtil.C:69

◆ DrawSingleSegment()

void EdbEDATrackSet::DrawSingleSegment ( EdbSegP s,
const char *  elname,
TEveCompound *  cmp = NULL,
int  extendup = 1,
int  extenddown = 1 
)
290  {
291  // Draw Single Segment
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
Definition: EdbEDATrackSet.h:204
bool eDrawTrackAngle
Definition: EdbEDATrackSet.h:206
void DrawSingleSegment(EdbSegP *s, const char *elname, TEveCompound *cmp=NULL, int extendup=1, int extenddown=1)
Definition: EdbEDATrackSet.C:290
int eExtendMode
Definition: EdbEDATrackSet.h:209
bool eDrawTrackIDG
Definition: EdbEDATrackSet.h:205
bool eDrawMT
Definition: EdbEDATrackSet.h:203
int eInterpolation
Definition: EdbEDATrackSet.h:210
bool eDrawTrackAngleG
Definition: EdbEDATrackSet.h:207
bool Japanese()
Definition: EdbEDA.h:734
Int_t eMinor
Definition: EdbID.h:13
Int_t ID() const
Definition: EdbSegP.h:144
Float_t Chi2() const
Definition: EdbSegP.h:154
Float_t P() const
Definition: EdbSegP.h:149
Int_t Side() const
Definition: EdbSegP.h:167
Float_t W() const
Definition: EdbSegP.h:148
Int_t PID() const
Definition: EdbSegP.h:145
EdbID ScanID() const
Definition: EdbSegP.h:157
Int_t MCEvt() const
Definition: EdbSegP.h:142
Int_t Flag() const
Definition: EdbSegP.h:146
strcpy(cmd,"cp Shower.root Shower2.root")
@ kExtendUpDown
Definition: EdbEDAUtil.h:91
@ kExtendUp
Definition: EdbEDAUtil.h:93
@ kExtendDown
Definition: EdbEDAUtil.h:92
@ kExtendNo
Definition: EdbEDAUtil.h:94
EdbSegP * s1
Definition: tlg2pattern.C:30

◆ 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
EdbSegP * GetSegmentLast() const
Definition: EdbPattern.h:195

◆ 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++){
372  EdbTrackP *t = GetTrackBase(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->GetEntriesFast();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->TY()-ss.TY())<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:182
EdbSegP * GetSegment(int i) const
Definition: EdbPattern.h:200

◆ 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:194

◆ GetAreaSet()

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

◆ GetComment()

const char* EdbEDATrackSet::GetComment ( EdbTrackP t)
inline
477  {
478  for(int i=0;i<eComments->GetEntriesFast();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->GetEntriesFast();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)
247  {
248  // return Track color. if eTrackColor==-1, calculate according to eColorMode
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();}
257  if(eColorMode==kCOLOR_BY_ID) {
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 }
Int_t Track() const
Definition: EdbSegP.h:147
Int_t MCTrack() const
Definition: EdbSegP.h:143
@ 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 
)
202  {
203  // Calculate Track extrapolation length.
204  // updon : up = -1, down = 1
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:50
double GetZ(int ipl)
Definition: EdbEDA.h:300
float Z() const
Definition: EdbLayer.h:78
Definition: EdbPattern.h:280
Int_t Npatterns() const
Definition: EdbPattern.h:380
EdbPattern * GetPattern(int id) const
Definition: EdbPattern.cxx:1887
Definition: EdbBrick.h:13
EdbPlateP * GetPlate(Int_t p)
Definition: EdbScanSet.h:57
EdbBrickP eB
Definition: EdbScanSet.h:13
Float_t Z() const
Definition: EdbPattern.h:87
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: tlg2pattern.C:31

◆ MicroTrackSearch() [2/2]

int EdbEDATrackSet::MicroTrackSearch ( EdbTrackP t,
EdbSegP pred,
int  ipl 
)
1355  {
1356  // Micro-track search.
1357  // Original from Napoli, modified by Frederic, impremented by Aki.
1358  //
1359  // Use EdbScanProc
1360  // return -1 = not found, 0 = Basetrack found, 1 or 2 = Microtrack found.
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.GetSize();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
Definition: EdbEDATrackSet.h:62
EdbScanSet * GetScanSet()
Definition: EdbEDATrackSet.h:471
EdbID & GetID()
Definition: EdbEDATrackSet.h:464
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:325
Definition: EdbScanProc.h:12
bool InitRunAccess(EdbRunAccess &ra, int id[4], bool do_update=false)
Definition: EdbScanProc.cxx:2383
Definition: EdbScanSet.h:11
TList eIDS
Definition: EdbScanSet.h:17
EdbID * GetID(Int_t i)
Definition: EdbScanSet.h:47
void SetPID(int pid)
Definition: EdbSegP.h:126
void SetErrors()
Definition: EdbSegP.h:89
void SetZ(float z)
Definition: EdbSegP.h:122
void SetDZ(float dz)
Definition: EdbSegP.h:123
Int_t Aid(int i) const
Definition: EdbSegP.h:166
void SetAid(int a, int v, int side=0)
Definition: EdbSegP.h:135
virtual void Transform(const EdbAffine2D *a)
EdbScanProc * sproc
Definition: comptonmap.cpp:29
UInt_t id
Definition: tlg2pattern.C:118

◆ N()

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

◆ NBase()

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

◆ PrepareScanSetForMT()

int EdbEDATrackSet::PrepareScanSetForMT ( )
1307  {
1308 
1309 // Scan id check
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.GetSize();
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()) {
1337  gEDA->ScanProc()->UpdateSetWithAff(id, gEDA->GetID());
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:95
void UpdateSetWithAff(EdbID idset, EdbAffine2D aff)
Definition: EdbScanProc.cxx:2796
int WriteScanSet(EdbID id, EdbScanSet &ss)
Definition: EdbScanProc.cxx:1467
void MakeScannedIDList(EdbID id0, EdbScanSet &sc, int pl_from, int pl_to, const char *suffix)
Definition: EdbScanProc.cxx:686
int AssembleScanSet(EdbScanSet &ss)
Definition: EdbScanProc.cxx:134
EdbScanSet * ReadScanSet(EdbID id)
Definition: EdbScanProc.cxx:1521
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
int InputID(const char *message, EdbID &id)
Definition: EdbEDAUtil.C:872
void ErrorMessage(const char *title, const char *message)
Definition: EdbEDAUtil.C:479

◆ 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 ( const char *  filename = NULL,
int  datatype = 100,
TCut  rcut = "1" 
)
592  {
593  // filename : filename for "LinkDef" or "*.set.root(ScanSet)" or "*.root(linked_track.root format)"
594  // datatype : only for "LinkDef". Data type for EdbDataProc::InitVolume(). put -1 for no InitVolume
595  // if datatype= 100 or 1000. linked tracks will be registred to "TS".
596  // rcut : Track selection when read.
597 
598  // if filename is not given. open file browser.
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
EdbDataProc * dproc
Definition: check_vertex.C:13
Definition: EdbDataSet.h:180
EdbDataSet * GetDataSet()
Definition: EdbDataSet.h:196
int InitVolume(int datatype=0, const char *rcut="1")
Definition: EdbDataSet.cxx:2071
EdbDataProc * ReadLinkedTracks(const char *lnkdef="lnk.def", TCut cut="1")
Definition: EdbEDATrackSet.C:717
void ReadTracksTree(const char *scanset_filename, TCut cut="1")
Definition: EdbEDATrackSet.C:666
void ReadPredictionScan(int BRICK, int SBVERSION, int RUN_PRED, int UseMicrotrack=0)
Definition: EdbEDATrackSet.C:777
EdbDataProc * ReadLinkedTracksFile(const char *filename="linked_tracks.root", TCut cut="1")
Definition: EdbEDATrackSet.C:689
void ReadMxxFile(const char *filename)
Definition: EdbEDATrackSet.C:1046
void SetDraw(bool b=kTRUE)
Definition: EdbEDATrackSet.h:583
Int_t ePlate
Definition: EdbID.h:11
void MakeFileName(TString &s, int id[4], const char *suffix, bool inplate=true)
Definition: EdbScanProc.cxx:1885
string filename
Definition: emthickness.cpp:34

◆ ReadLinkedTracks() [1/2]

EdbDataProc * EdbEDATrackSet::ReadLinkedTracks ( const 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)
725  {
726  // read tracks from linked_tracks.root for old structure.
727  // plate number will be filled from link-list file.
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:65
EdbPVRec * PVR() const
Definition: EdbDataSet.h:197
EdbDataPiece * GetPiece(int id)
Definition: EdbDataSet.h:162
void AddTracksPVR(EdbPVRec *pvr)
Definition: EdbEDATrackSet.h:312
EdbTrackP * GetTrack(int i) const
Definition: EdbPVRec.h:241
Int_t Ntracks() const
Definition: EdbPVRec.h:203
void SetPlate(int plateid)
Definition: EdbSegP.h:139
int pid[1000]
Definition: m2track.cpp:13

◆ ReadLinkedTracksFile()

EdbDataProc * EdbEDATrackSet::ReadLinkedTracksFile ( const char *  filename = "linked_tracks.root",
TCut  cut = "1" 
)
689  {
690  // Read linked_tracks.root format file.
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++){
707  EdbPattern *p = ePVR->GetPattern(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:2937
p
Definition: testBGReduction_AllMethods.C:8

◆ ReadListFile()

void EdbEDATrackSet::ReadListFile ( const char *  filename = NULL,
bool  clear_previous = kTRUE 
)
1052  {
1053  // Read list file.
1054  // Search tracks in this track set.
1055  // see also EdbEDAMainTab::ReadListFile(), which try to search
1056  // in BT files.
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, const 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:89

◆ ReadMxxFile()

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

◆ ReadPredictionScan() [1/3]

void EdbEDATrackSet::ReadPredictionScan ( EdbID  id,
bool  force_update_setroot = 0 
)
806  {
807  // Read Prediction scan
808  // if there is "set.root" already exist, ask whether overwrite or not.
809  // if force_update_setroot == kTRUE, overwrite without asking.
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.GetSize()==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(const char *filename=NULL, int datatype=100, TCut rcut="1")
Definition: EdbEDATrackSet.C:592
Int_t eBrick
Definition: EdbID.h:10
Int_t eMajor
Definition: EdbID.h:12
bool AskYesNo(const 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 
911  AddTracksPVR(ali);
912  SetDraw();
913 }
EdbPVRec * ali
Definition: align.C:1
EdbDataSet * GetDataSet()
Definition: EdbEDA.h:244
EdbAffine2D * GetAffineXY()
Definition: EdbLayer.h:120
int ReadFoundTracks(EdbScanSet &ss, EdbPVRec &ali, int flag=-1)
Definition: EdbScanProc.cxx:220

◆ ReadPredictionScan() [3/3]

void EdbEDATrackSet::ReadPredictionScan ( int  BRICK,
int  SBVERSION,
int  RUN_PRED,
int  UseMicrotrack = 0 
)
777  {
778  // this is an inferface function from old style usage.
779  // reccoment ReadPredictionScan( EdbID ) for non-Bern people.
780  // this force to update scanset file = "bxx.set.root".
781 
782  // if Brick number is not set, show message.
783  // give command line input.
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 ( const char *  filename = NULL)
918  {
919  // Read Text file data
920  // the format should be : itrk ipl ph x y ax ay flag_trans
921  // flag_trans control Transformation. Affine=plate->global
922  // flag_trans==1 (Affine)
923  // flag_trans==2 (Affine)+(Bottom->Middle of base). For manualcheck data
924  // flag_trans==3 (Affine)+(Top->Middle of base). For manualcheck data
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);
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
TMatrixD & COV() const
Definition: EdbSegP.h:120
void PropagateTo(float z)
Definition: EdbSegP.cxx:292
void SetTrack(int trid)
Definition: EdbSegP.h:128
void SetW(float w)
Definition: EdbSegP.h:129
void Set(int id, float x, float y, float tx, float ty, float w, int flag)
Definition: EdbSegP.h:86
fclose(pFile)

◆ ReadTracksTree() [1/2]

void EdbEDATrackSet::ReadTracksTree ( const 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  {
682  eScanSet = sproc->ReadScanSet(ID);
683  ePVR = new EdbPVRec();
684  sproc->ReadTracksTree(ID, *ePVR, cut);
686  eID=ID;
687 }
int ReadTracksTree(EdbID id, EdbPVRec &ali, TCut cut="1")
Definition: EdbScanProc.cxx:644

◆ 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->GetEntriesFast(); i++) RemoveTrack((EdbTrackP *) tracks->At(i));}
TTree * tracks
Definition: check_tr.C:19

◆ ResetTrackAttribute()

void EdbEDATrackSet::ResetTrackAttribute ( void  )
inline
558 { SetTrackAttribute(); }

◆ RestorePrevious()

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

◆ SearchCorrespondTrack()

EdbTrackP * EdbEDATrackSet::SearchCorrespondTrack ( EdbTrackP t)
541  {
542  // check if the track corresponds to the scanback track. return scanback id, if not return -1.
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->GetEntriesFast(); 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->GetEntriesFast(); 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  }
284  if(eColorMode==kBLACKWHITE&&mode!=kBLACKWHITE){
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
288  {
289  // Set a track to be drawn.
290  // the track is requiered to be already registered in eTracksBase.
291  // if you want to simply draw the track, use AddTrack().
292  if(eTracksBase->FindObject(t)&&eTracks->FindObject(t)==NULL) eTracks->Add(t);
293  }

◆ SetTrack() [2/2]

void EdbEDATrackSet::SetTrack ( int  itrack)
inline
295  {
296  // Set Tracks to draw with the given track id.
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
303  {
304  // Set tracks to be draw.
305  // the tracks are requiered to be already resistered in eTracksBase.
306  // if you want to simply draw the tracks, use AddTracks().
307  if(NULL==tracks) return; for(int i=0; i<tracks->GetEntriesFast(); i++) SetTrack((EdbTrackP *)tracks->At(i));
308  }

◆ SetTracksAll()

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

◆ SetTracksBase()

void EdbEDATrackSet::SetTracksBase ( TObjArray *  tracksbase)
inline
265  {
266  // Copy tracks to eTracksBase. tracksbase should be an array of EdbTrackP
267  *eTracksBase = *tracksbase;
268  }

◆ SetTracksNseg()

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

◆ SetTracksVertex()

void EdbEDATrackSet::SetTracksVertex ( EdbVertex v,
bool  clear_previous = kTRUE 
)
inline
505  {
506  // Set eTracks as the tracks which belongs to the vertex.
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  }
EdbTrackP * GetTrack(int i)
Definition: EdbVertex.h:141
Int_t N() const
Definition: EdbVertex.h:121

◆ SetTracksVertices()

void EdbEDATrackSet::SetTracksVertices ( TObjArray *  vertices,
bool  clear_previous = kTRUE 
)
inline
515  {
516  // Set eTracks as the tracks which belongs to the vertices.
517  printf("Set Tracks for %d Vertices\n", vertices->GetEntriesFast());
518  if(clear_previous) ClearTracks();
519  for(int i=0;i<vertices->GetEntriesFast();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:68

◆ StorePrevious()

void EdbEDATrackSet::StorePrevious ( )
inline
356 { *eTracksPrevious = *eTracks;}

◆ WriteListFile()

const char * EdbEDATrackSet::WriteListFile ( const char *  filename = NULL,
bool  append = kFALSE,
bool  open_editor = kFALSE 
)
1138  {
1139  // Write List file.
1140  // ouput plate_number and segment_id. (track ID could change everytime after reconstruction, but segment ID doesn't change.)
1141  // the result of MT search will be ignored.
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(const 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

◆ eDrawMT

bool EdbEDATrackSet::eDrawMT
private

◆ eDrawTrackAngle

bool EdbEDATrackSet::eDrawTrackAngle
private

◆ eDrawTrackAngleG

bool EdbEDATrackSet::eDrawTrackAngleG
private

◆ eDrawTrackID

bool EdbEDATrackSet::eDrawTrackID
private

◆ eDrawTrackIDG

bool EdbEDATrackSet::eDrawTrackIDG
private

◆ 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

◆ 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

◆ eTracksBase

TObjArray* EdbEDATrackSet::eTracksBase
private

◆ eTracksPrevious

TObjArray* EdbEDATrackSet::eTracksPrevious
private

◆ eTrackWidth

int EdbEDATrackSet::eTrackWidth
private

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