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 ()
 
EdbTrackP * FindTrack (EdbSegP *s, double dx=10, double dt=0.02)
 
EdbTrackP * FindTrack (EdbTrackP *t)
 
EdbTrackP * FindTrackLast (EdbSegP *s, double dx=20, double dt=0.03)
 
int FindUpstreamPlate ()
 
EdbEDAAreaSet * GetAreaSet ()
 
const char * GetComment (EdbTrackP *t)
 
EdbDataSet * GetDataSet ()
 
bool GetDraw ()
 
bool GetDrawMT ()
 
bool GetDrawTrackAngle ()
 
bool GetDrawTrackID ()
 
int GetExtendMode ()
 
EdbID & GetID ()
 
int GetLayerColor (EdbSegP *s)
 
double GetLayerLength (EdbSegP *s)
 
int GetLayerWidth (EdbSegP *s)
 
EdbPVRec * GetPVRec ()
 
EdbScanSet * GetScanSet ()
 
int GetTextColor ()
 
int GetTextFont ()
 
int GetTextPosition ()
 
int GetTextSize ()
 
EdbTrackP * GetTrack (EdbSegP *s)
 
EdbTrackP * GetTrack (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)
 
EdbTrackP * GetTrackBase (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")
 
EdbDataProc * ReadLinkedTracks (const char *lnkdef="lnk.def", TCut cut="1")
 
EdbDataProc * ReadLinkedTracks (EdbDataProc *dproc)
 
EdbDataProc * ReadLinkedTracksFile (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)
 
EdbTrackP * SearchCorrespondTrack (EdbTrackP *t)
 
EdbTrackP * SearchSegment (int ipl, int iseg)
 
EdbTrackP * SearchTrack (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 ()
 
EdbRunTracking & GetRunTracking ()
 
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

EdbEDAAreaSet * eAreaSet
 
int eColorMode
 
TObjArray * eComments
 
EdbDataSet * eDataSet
 
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
 
EdbPVRec * ePVR
 
EdbScanSet * eScanSet
 
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
 
EdbVertex * eVertex
 

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: