FEDRA emulsion software from the OPERA Collaboration
EdbEDA.h
Go to the documentation of this file.
1 
2 #ifndef __EDA_H__
3 #define __EDA_H__
4 
6 // //
7 // EdbEDA //
8 // //
9 // Mother of EDA (Event Display and Analyser) //
10 // //
11 // it consists of 5 EdbTrackSet (TS,SB,SF,BT,MN) and 1 EdbVertexSet. //
12 // //
13 // It inherits following. //
14 // EdbEDACamera : View, Pictures and Animation //
15 // EdbEDAIO : I/O of feedback file, filtered text, cs_info.txt, Basetracks. //
16 // EdbEDABrickData : Manage Brick info and store EdbDataProc. PID <-> IPL conversion. //
17 // EdbEDASelection : Manage Selected segments and tracks. //
19 
20 
21 #include "EdbEDAUtil.h"
22 #include "EdbEDATrackSet.h"
23 #include "EdbEDASets.h"
24 #include "EdbEDAMainTab.h"
25 #include "EdbEDATabs.h"
26 #include "EdbEDAPlotTab.h"
27 #include "EdbEDADecaySearch.h"
28 #include "EdbEDAShowerTab.h"
29 
30 //-------------------------------------------------------------------
31 
32 using namespace EdbEDAUtil;
33 
34 class EdbEDAObject : public TObject {
35  private:
36  int eDraw;
37  void *eRef;
38  public:
39  EdbEDAObject():eDraw(kTRUE),eRef(NULL){}
41  virtual void Draw(Option_t *option=""){ printf("override this");}
42  virtual void SetColorMode(int mode){ printf("override this.\n");}
43  void SetReference(void *ref) { eRef=ref;}
44  void *GetReference(){ return eRef;}
45  bool GetDraw(){ return eDraw;}
46  void SetDraw(bool b=kTRUE){ eDraw=b;}
47  ClassDef(EdbEDAObject,0) // test
48 };
49 
50 class EdbEDAText : public EdbEDAObject{
51  private:
52  float eX, eY, eZ;
54  int eTextSize;
55  int eTextFont;
56  TString eText;
57  void *eRef;
58 
59  public:
60  EdbEDAText(float x, float y, float z, TString str, int color=kWhite) :
61  eX(x), eY(y), eZ(z), eText(str){SetAttribute(14,color);}
63 
64  void SetAttribute(int size=14, int color=kWhite, int fontfile=4){
65  eTextSize = size;
66  eTextColor = color;
67  eTextFont = fontfile;
68  }
69  void SetColorMode(int mode){
70  if(mode==kBLACKWHITE) SetAttribute(eTextSize, kBlack, eTextFont);
71  else SetAttribute(eTextSize, kWhite, eTextFont);
72  }
73  int GetTextColor() { return eTextColor;}
74  int GetTextSize () { return eTextSize;}
75  int GetTextFont () { return eTextFont;}
76  void SetXYZ(float x, float y, float z){ eX=x; eY=y; eZ=z;}
77  void SetText(TString str){ eText=str;}
78  void AddText(TString str){ eText+=str;}
79  int N(){return eText.Length();}
80  void Draw(Option_t *option="");
81 
82  ClassDef(EdbEDAText, 0) // a comment class
83 
84 };
85 
86 class EdbEDALine : public EdbEDAObject{
87  private:
88  float X1,Y1,Z1, X2,Y2,Z2;
89  int col, wid;
90  TString text;
91 
92  public:
93  EdbEDALine( float x1, float y1, float z1, float x2, float y2, float z2, int color, int width, const char *comment = "") : X1(x1), Y1(y1), Z1(z1), X2(x2), Y2(y2), Z2(z2), col(color), wid(width), text(comment){}
94  EdbEDALine( int color, int width, const char *comment = "") : col(color), wid(width), text(comment){}
96 
97  void SetPoint1(float x1, float y1, float z1){ X1=x1; Y1=y1; Z1=z1;}
98  void SetPoint2(float x2, float y2, float z2){ X2=x2; Y2=y2; Z2=z2;}
99 
100  void Draw(Option_t *option="");
101  ClassDef(EdbEDALine, 0) // Line as EdbEDAObject
102 };
103 
104 //-------------------------------------------------------------------
105 #include<TGLOverlay.h>
106 class EdbEDAOverlay : public TGLOverlayElement{
107 
108  private:
109  bool eDraw;
110  int eXa,eYa, eLength;
111  int eXb,eYb;
113  public:
114  EdbEDAOverlay();
116  void Render(TGLRnrCtx& ctx);
117  void RenderBar(TGLRnrCtx& ctx);
118  void RenderAxes(TGLRnrCtx& ctx);
119  void SetDraw(bool b) {eDraw=b;}
120  void SetXY(int pixel_x=50, int pixel_y=30);
121  void SetLength(int pixel_length=120);
122  ClassDef(EdbEDAOverlay, 0) // a class for draw overlays, i.e. scale bars.
123 };
124 
125 
127 
128  private:
129  TTimer * eTimer;
130 
132  float eTheta;
135 
136  public:
137  TGLViewer * eViewer;
138 
139  enum {X,Y,Z,B};
140 
141  EdbEDACamera():eTimer(NULL),eAnimationMode(0), eTheta(3.14/2), eAnimationAmplitude(0.002), eViewer(NULL){}
142 // ~EdbEDACamera(){if(NULL==eTimer) {eTimer->Stop(); delete eTimer;}}
143  virtual ~EdbEDACamera(){}
144  //TGLViewer * GetGLViewer(){ return eViewer;}
145  void SetCamera(int projection = Y);
146  void Animation();
147  void SetAnimationMode();
148  void StartAnimation();
149  void StopAnimation();
150  void SaveAnimation(const char *filename = NULL, int n=100, int interval=10);
151  void SavePictures();
152  void Snapshot(const char *filename=NULL);
153  TGLViewer * GetGLViewer();
154  EdbEDAOverlay *SetOverlay() {eOverlay=new EdbEDAOverlay; eViewer->AddOverlayElement(eOverlay); return eOverlay;}
155  EdbEDAOverlay *GetOverlay() {return eOverlay;}
156 
157 
158  ClassDef(EdbEDACamera,0) // part of EdbEDA. Manage camera control and pictures.
159 };
160 
161 
162 class EdbEDAIO{
163  public:
167  kOtherLabs
168  };
169 
170  TCut eCutCP;
171 
172  EdbEDAIO():eOutputFileMode(kBern), eCutCP("eN1==1&&eN2==1&&eCHI2P<s.eW*0.12-1"){}
173  virtual ~EdbEDAIO(){}
174  EdbPattern * ReadCouples(int ipl, EdbPattern *pat=NULL);
175  EdbPattern * ReadCouplesPID(int pid, EdbPattern *pat=NULL);
176  EdbPattern * GetPatternIPL(int pid);
177  void WriteFeedbackFile(const char *filename = NULL);
178  void WriteFeedbackFile2008(EdbVertex *v = NULL, const char *filename = NULL);
179  void ReadFeedbackFile(const char *filename = NULL);
180  EdbVertex * ReadFeedbackFile2008(const char *filename = NULL);
181  int IdMuon(const char *filename = "../cs_info.txt");
182  void OpenTextEditor(const char *filename);
183  void WriteFilteredText(const char *filename = NULL);
184  EdbPVRec * ReadFilteredText(const char *filename = NULL);
185 
186  //void PrintTrackFeedback(EdbTrackP *t=NULL, EdbVertex *v1=NULL, EdbVertex *v2=NULL, EdbSegP *s1=NULL, FILE *io=stdout, bool print_segs=kTRUE);
187 
188 
189  ClassDef(EdbEDAIO,0) // part of EdbEDA. Manage I/O.
190 };
191 
193  // Data management
194 
195  private:
196  double eBeamTX, eBeamTY;
197  public:
198 
202 
207 
209 
210  int eFirstPlate; // first plate of brick, 1
211  int eLastPlate; // last plate of brick, 57
212 
213  EdbEDABrickData() : eBeamTX(0), eBeamTY(0.058), eDataSet(0), eScanSet(0), ePVR(0), eDataType(-1), eFirstPlate(1), eLastPlate(57){
214  }
215  virtual ~EdbEDABrickData(){}
216  void SetIDSF(EdbID id) { eIDSF=id;}
217  void SetIDSB(EdbID id) { eIDSB=id;}
218  void SetID(EdbID id) { eID=id;}
219  EdbID GetID() { return eID;}
220 
221  void SetScanSet(EdbScanSet *ss) { eScanSet = ss;}
222  EdbScanSet *GetScanSet() { return eScanSet;}
223 
224  void SetPVR(EdbPVRec *pvr){ ePVR=pvr;}
225  EdbPVRec *GetPVR(){if(ePVR==NULL) printf("EdbEDA::GetPVR() is only to obtain global Z coordinate.\n"); return ePVR;}
226 
227  void SetBrick(int ibrick){
228  eID.eBrick = ibrick;
229  eIDSF.eBrick = ibrick;
230  eIDSF.eBrick = ibrick;
231  }
232  int GetBrick() { return eID.eBrick;}
233 
234  int GetDataType(){ return eDataType;}
235  void SetDataType(int datatype){ eDataType=datatype;}
236 
237  int GetPlateUp() {return GetIPL(0);} // upstream of data volume
238  int GetPlateDown(){return GetIPL(eDataSet->N()-1);} // downstream of data volume
239 
240  int GetFirstPlate(){ return eFirstPlate;} // first plate of brick
241  int GetLastPlate(){ return eLastPlate;} // last plate of brick
242 
243 
244  EdbDataSet * GetDataSet(){ return eDataSet;}
245 
246  int GetNPL(){
247  if (eScanSet) return eScanSet->eB.Npl();
248  else if (eDataSet) return eDataSet->N();
249  else return 0;
250  }
251 
252  int GetIPL(int PID){
253  if(eScanSet) { // using ScanSet for calibration.
254  EdbPlateP *pl = eScanSet->eB.GetPlate(PID);
255  return pl->ID();
256  }
257  else if( eDataSet ){
258  if(PID>=eDataSet->N()) return PID;
259  EdbDataPiece *piece = eDataSet->GetPiece(PID);
260  if(NULL==piece) return PID;
261  return piece->Plate();
262  }
263 
264  return PID;
265  }
266 
267  int GetIPLZ(float z){
268  // return ipl just downstream of given z.
269  for(int ipl=GetFirstPlate(); ipl<=GetLastPlate(); ipl++){
270  float zz= GetZ(ipl)+0.1; // 0.1 is for the case that given z is exactly at the plate.
271  if(zz>=z) return ipl;
272  }
273  return GetLastPlate();
274  }
275 
276  int GetPID(int ipl){
277  if(eScanSet) { // return the ordinal number in eB.
278  EdbBrickP *b = &eScanSet->eB;
279  for(int i=0;i<b->Npl();i++){
280  EdbPlateP *pl = b->GetPlate(i);
281  if(pl->ID()==ipl) return i;
282  }
283  return ipl; // if not correspondence found.
284  }
285  else if( eDataSet ){
286  // Get PID from iPlate.
287  // if iPlate is out of volume scan, return -1;
288  for(int i=0;i<eDataSet->N();i++){
289  EdbDataPiece *piece = eDataSet->GetPiece(i);
290  if(NULL==piece) continue;
291  if(ipl==piece->Plate()){
292  return i;
293  }
294  }
295  // printf("error at GetPID(%d)\n", ipl);
296  }
297  return ipl;
298  }
299 
300  double GetZ(int ipl){
301  // Get Z value for give plate number.
302  if(eScanSet) {
303  EdbPlateP *pl = eScanSet->GetPlate(ipl);
304  if(pl!=NULL) return pl->Z();
305  return (ipl-57)*1300.0;
306  }
307  else if ( eDataSet ){
308  for(int i=0;i<eDataSet->N();i++){
309  if( GetIPL(i) == ipl ) return GetZPID(i);
310  }
311  }
312  else if( ePVR ){
313  for(int i=0;i<ePVR->Npatterns();i++){
314  EdbPattern *pat = ePVR->GetPattern(i);
315  if(pat->Plate()==ipl) return pat->Z();
316  }
317  }
318  return (ipl-57)*1300.0;
319  }
320 
321  double GetZPID(int pid){
322  // Get Z from PID
323  // if pid is out of range, set pid within the range.
324 
325  if(eScanSet) {
326  EdbBrickP& b = eScanSet->Brick();
327  EdbPlateP *pl = b.GetPlate(pid);
328  return pl->Z();
329  }
330  else if (eDataSet){
331 
332  if(pid<0) pid=0;
333  if(pid>eDataSet->N()-1) pid=eDataSet->N()-1;
334  EdbDataPiece *piece = eDataSet->GetPiece(pid);
335  EdbLayer* l = piece->GetLayer(0);
336  return l->Z();
337  }
338 
339  return GetZ(pid);
340  }
341 
342  void SetBeamAngle(double tx, double ty) { eBeamTX=tx; eBeamTY=ty;}
343  double GetBeamTX() { return eBeamTX;}
344  double GetBeamTY() { return eBeamTY;}
345 
346  EdbAffine2D * GetAffine(int ipl);
347 
348  ClassDef(EdbEDABrickData, 0) // part of EdbEDA. Brick Data Management for EDA
349 };
350 
351 
353  private:
354  TEveSelection *eSel;
355  int eDisable;
356  EdbVertex *eSelectedVertex; // current(last) selected vertex
357  TObjArray *eSelectedVertices; // selected vertices
358  TObjArray *eSelectedTracks; // selected tracks
359  TObjArray *eSelectedSegments; // selected segments
360  TObjArray *eSelected;
361 
362 
363  public:
364 
366  eSelectedVertices = new TObjArray;
367  eSelectedTracks = new TObjArray;
368  eSelectedSegments = new TObjArray;
369  eSelected = new TObjArray;
370  eSelectedVertex = NULL;
371  eSel = NULL;
372  eDisable = 0;
373  }
374 
375  virtual ~EdbEDASelection(){
376  if(eSel!=NULL){
377  eSel->Disconnect("SelectionAdded(TEveElement*)", this, "Added(TEveElement*)");
378  eSel->Disconnect("SelectionRemoved(TEveElement*)", this, "Removed(TEveElement*)");
379  eSel->Disconnect("SelectionCleared()", this, "Cleared()");
380  }
381  }
382 
383  // init Selection, connect to the TEveManager::eSelection = gSel
384  void InitSelection(TEveSelection* sel){
385  if(eSel!=NULL){
386  eSel->Disconnect("SelectionAdded(TEveElement*)", this, "Added(TEveElement*)");
387  eSel->Disconnect("SelectionRemoved(TEveElement*)", this, "Removed(TEveElement*)");
388  eSel->Disconnect("SelectionCleared()", this, "Cleared()");
389  }
390 
391  eSel = sel; // supposed to be sel = gEDA->GetSelection()
392  eSel->Connect("SelectionAdded(TEveElement*)", "EdbEDASelection", this, "Added(TEveElement*)");
393  eSel->Connect("SelectionRemoved(TEveElement*)", "EdbEDASelection", this, "Removed(TEveElement*)");
394  eSel->Connect("SelectionCleared()", "EdbEDASelection", this, "Cleared()");
395  }
396 
398  eSelected->Clear();
399  eSelectedTracks->Clear();
400  }
401 
402  EdbTrackP * GetTrack( TEveElement *e);
403 
404  TObjArray * SetSelected(TObjArray *selected = NULL);
405  TObjArray * GetSelected(void) {return eSelected;}
406  EdbSegP * GetSelected(int i) {return (EdbSegP *)eSelected->At(i);}
407 
408  void SetSelectedTracks(TObjArray *arr) {
409  if(arr) {
410  *eSelectedTracks = *arr;
411  *eSelected = *arr;
412  }
413  }
414 
415 
416  TEveElement * GetSelectedElement () { TEveElement::List_i it= gEve->GetSelection()->EndChildren(); return *(--it);}
417  TObjArray * GetSelectedTracks(void) { return eSelectedTracks; }
418 
419  int NSelectedTracks() { return eSelectedTracks->GetEntriesFast();}
420  int NSelected() { return eSelected-> GetEntriesFast();}
422  if(NSelectedTracks()==0) return NULL;
423  if(i==-1) i=NSelectedTracks()-1;
424  return (EdbTrackP *) eSelectedTracks->At(i);
425  }
427  for( int i=0; i<NSelectedTracks(); i++){
428  EdbTrackP *t = GetSelectedTrack(i);
429  for(int j=0; j<t->N(); j++) if(s==t->GetSegment(j)) return t;
430  }
431  return NULL;
432  }
433 
434  EdbSegP * GetSelectedSegment(int i=-1){if(i==-1) i=NSelected()-1; return (EdbSegP *) eSelected->At(i);}
435 
436  void SelectAll();
437  void SetSelection ( TObjArray * selected = NULL);
438 
439  EdbVertex *GetSelectedVertex(void) { return eSelectedVertex;}
440  void SetSelectedVertex(EdbVertex *v) { eSelectedVertex = v; }
441  void ClearSelectedVertex() {eSelectedVertex = NULL;}
442 
443  void Added(TEveElement* el);
444  void Removed(TEveElement* el);
445  void Cleared();
446 
447  int Disable(int force = kFALSE) { return force ? eDisable = 1 : eDisable++;}
448  int Enable (int force = kFALSE) { return force ? eDisable = 0 : eDisable--;}
449 
450  ClassDef(EdbEDASelection,0) // part of EdbEDA. Manage Selection.
451 };
452 
453 /* // Set PID as PlateNumber.
454  EdbDataSet *dset = dproc.GetDataSet();
455 
456  printf("hoge %d %d\n", __LINE__, dset);
457  for(int j=0;j<ali.Ntracks();j++){
458  EdbTrackP *t = ali.GetTrack(j);
459 
460  for(int k=0;k<t->N();k++){
461  EdbSegP *s = t->GetSegment(k);
462  int pid = s->PID();
463 
464  EdbDataPiece *piece = dset->GetPiece(pid);
465  int ipl = piece->Plate();
466  s->SetPID(ipl);
467  }
468  t->SetPID(t->GetSegmentFirst()->PID());
469  }
470  printf("hoge %d\n", __LINE__);
471 */
472 
473 //-------------------------------------------------------------------
474 class EdbEDA :
475  public EdbEDACamera,
476  public EdbEDAIO,
477  public EdbEDABrickData,
478  public EdbEDASelection,
479  public TNamed {
480 
481  private:
482 
483  TObjArray *eDrawObjects;
484  TObjArray *eTrackSets;
485 
489  TEveEventManager *eEvent;
490 
498 
499  double eScaleZ;
500  bool eJapanese;
501 
502  public:
503 
504  EdbEDA(const char *filename = NULL, int datatype = 100, TCut rcut = "1", bool auto_run=kTRUE) :
505  TNamed("EDA","Event Display and Analyser"){
506  // Constructor for EDA
507  // filename : filename for "LinkDef" or "*.set.root(ScanSet)" or "*.root(linked_track.root format)"
508  // datatype : only for "LinkDef". Data type for EdbDataProc::InitVolume(). put -1 for no InitVolume
509  // if datatype= 100 or 1000. linked tracks will be registred to "TS".
510  // rcut : Track selection when read.
511  // auto_run : Run automatically.
512  OpenFile(filename, datatype, rcut);
513  if(auto_run) Run();
514  }
515 
516  EdbEDA(EdbID IDCalib, const char *ProcDirClient=NULL) {
517  Init();
518  if(ProcDirClient!=NULL) eScanProc->eProcDirClient=ProcDirClient;
519  eID=IDCalib;
520  eScanSet = eScanProc->ReadScanSet(eID);
521  }
522 
523  EdbEDA(EdbScanSet *ss, const char *ProcDirClient=NULL) : TNamed("EDA","Event Display and Analyser"){
524  Init();
525  if(ProcDirClient!=NULL) eScanProc->eProcDirClient=ProcDirClient;
526  eScanSet = ss;
527  eID = *((EdbID *)ss->eIDS.At(0));
528  eID.ePlate = 0;
529  }
530 
531  EdbEDA(EdbDataProc *dproc) : TNamed("EDA","Event Display and Analyser") {
532  Init();
533  eDataSet = dproc->GetDataSet();
534  GetTrackSet("TS")->AddTracksPVR(dproc->PVR());
535  GetTrackSet("TS")->SetNsegCut(3);
536  GetTrackSet("TS")->DoSelection();
537  }
538 
539  void OpenFile(const char *filename = NULL, int datatype = 100, TCut rcut = "1");
540 
541  EdbEDA(EdbPVRec *pvr, bool autorun=1){
542  Init();
543  ePVR = pvr;
544 
545  if(pvr->Ntracks()==0){
546  printf("*******************************************\n");
547  printf(" Worning: No tracks in EdbPVRec object! \n");
548  printf("*******************************************\n");
549  printf("EDA is made to show \"Tracks\". if you want to show segments in PVR, make tracks from the segments. or you may try EdbEDAUtil::FillTracksFromPatterns(EdbPVRec *)\n");
550  }
551 
552  // if plate number is not set. set plate number as PID.
553  int flag_plset=0;
554  if(ePVR->eTracks==NULL) ePVR->eTracks = new TObjArray;
555  for(int i=0;i<ePVR->Ntracks();i++){
556  EdbTrackP *t = ePVR->GetTrack(i);
557  EdbSegP *s = t->GetSegmentLast();
558  if(s->Plate()!=0) flag_plset++; // if plate number is set.
559  }
560 
561  if(flag_plset==0){ // in case plate number is not set, set PID as plate number
562  for(int i=0;i<ePVR->Npatterns();i++){
563  EdbPattern *p = ePVR->GetPattern(i);
564  if(p==NULL) continue;
565  p->SetSegmentsPlate(p->ID());
566  }
567  }
568 
569  GetTrackSet("TS")->AddTracksPVR(pvr);
570  GetVertexSet()->AddVertices(pvr->eVTX);
571  if(autorun) Run();
572  }
573 
574  EdbDataProc * PVRec2DataProc(EdbPVRec *pvr);
575 
576  void Init(void);
577  void Run();
578  EdbScanProc *ScanProc() { return eScanProc;}
579 
580  EdbEDATrackSet *AddTrackSet(const char *name) { EdbEDATrackSet *set = new EdbEDATrackSet(name); eTrackSets->Add(set); return set;}
581 
582  void AddDrawObject(EdbEDAObject *o) { eDrawObjects->Add(o);}
583  void RemoveDrawObject(TObject *o){ eDrawObjects->Remove(o); eDrawObjects->Sort();}
584  void ClearDrawObjects(){ eDrawObjects->Clear();}
585  int NDrawObjects(){ return eDrawObjects->GetEntriesFast();}
586  EdbEDAObject *GetDrawObject(int i){ return (EdbEDAObject*) eDrawObjects->At(i);}
587 
588  TObjArray * GetCurrentTracks(void){
589  TEveEventManager *ev = gEve->GetCurrentEvent();
590  TObjArray *tracks = new TObjArray;
591  for(TEveElement::List_i it = ev->BeginChildren(); it!=ev->EndChildren(); it++){
592  TEveElement *e = *it;
593  if(IsTrack(e)) tracks->Add((EdbTrackP *)e->GetUserData());
594  }
595  return tracks;
596  }
597 
599  for(int i=0;i<NTrackSets();i++){
600  EdbTrackP *t = GetTrackSet(i)->GetTrack(s);
601  if(t) return t;
602  }
603  return NULL;
604  }
605 
606  TEveElement * GetEveElement(TObject *t){
607  // return TEveElement of the track, vertex. if element is not in the Event, return NULL.
608  TEveEventManager *ev = gEve->GetCurrentEvent();
609  for(TEveElement::List_i it = ev->BeginChildren(); it!=ev->EndChildren(); it++){
610  TEveElement *e = *it;
611  if( t == e->GetUserData() ) return e;
612  }
613  return NULL;
614  }
615 
616  int NTrackSets() { return eTrackSets->GetEntriesFast();}
617  EdbEDATrackSet * GetTrackSet(int i){ return (EdbEDATrackSet *) eTrackSets->At(i);}
618  EdbEDATrackSet * GetTrackSet(const char *name){ return (EdbEDATrackSet *) eTrackSets->FindObject(name);}
620  for(int i=0;i<NTrackSets();i++)
621  if ( GetTrackSet(i)->IsMember(t) )
622  return (EdbEDATrackSet *) eTrackSets->At(i);
623  return NULL;
624  }
626  for(int i=0;i<NTrackSets();i++) {
627  EdbID& ID2 = GetTrackSet(i)->GetID();
628  if(ID.eMajor==ID2.eMajor&&ID.eMinor==ID2.eMinor) return GetTrackSet(i);
629  }
630  return NULL;
631  }
632 
635  eTrackSets->Add(set);
636  return set;
637  }
638  TObjArray * GetTrackSets(){ return eTrackSets;}
639 
640  void RemoveTrackBase(EdbTrackP *t) {for(int i=0;i<NTrackSets();i++) GetTrackSet(i)->RemoveTrackBase(t);}
641  void RemoveTrack (EdbTrackP *t) {for(int i=0;i<NTrackSets();i++) GetTrackSet(i)->RemoveTrack(t);}
642 
643  void RemoveSelected(){
644  // remove selected tracks or vertices.
645  // to remove vertex, select vertex but not select tracks.
646  int nselected = NSelected();
647  for(int i=0;i<NTrackSets();i++) GetTrackSet(i)->RemoveTracks(GetSelectedTracks());
648  if(nselected==0) eVertexSet->RemoveVertex(GetSelectedVertex());
649  }
650 
652  for(int i=0;i<NTrackSets();i++) {
653  GetTrackSet(i)->ClearTracks();
654  GetTrackSet(i)->SetTracks(GetSelectedTracks());
655  }
656  eVertexSet->ClearVertices();
657  eVertexSet->SetVertex(GetSelectedVertex());
658  }
659 
660  EdbEDAVertexSet * GetVertexSet() { return eVertexSet;}
661  void AddVertex(EdbVertex *v) { eVertexSet->AddVertex(v);}
662  TObjArray *GetVertices() {return eVertexSet->GetVertices();}
663  void ClearVertices() { eVertexSet->ClearVertices();}
664  void DrawVertices(int redraw = 0) { eVertexSet->Draw(redraw);}
665 
666  void SetBrick(int ibrick) {
667  // Set brick ID. it sets also for all TrackSets.
669  for(int i=0;i<NTrackSets();i++) GetTrackSet(i)->GetID().eBrick=ibrick;
670  if(gEve) gEve->GetMainWindow()->SetWindowName(
671  Form("OPERA Event Display and Analyser. Brick %d", EdbEDABrickData::GetBrick()));
672  }
673 
674  void SetDrawTrackID(bool draw) { for(int i=0;i<NTrackSets();i++) GetTrackSet(i)->SetDrawTrackIDG(draw);}
675  void SetDrawTrackAngle(bool draw) { for(int i=0;i<NTrackSets();i++) GetTrackSet(i)->SetDrawTrackAngleG(draw);}
676  void SetDrawAreaSet(bool draw) { for(int i=0;i<NTrackSets();i++) GetTrackSet(i)->GetAreaSet()->SetDrawG(draw);}
677 
678  void Draw(int redraw = kFALSE);
679 
680  void Redraw() { if(gEve)Draw(kTRUE);}
681  void UpdateScene() { if(gEve) gEve->GetDefaultGLViewer()->UpdateScene();}
682 
683  void Reset(){
684  for(int i=0;i<NTrackSets();i++) GetTrackSet(i)->Clear();
685  ClearDrawObjects();
686  ClearVertices();
687  }
688 
689  void StorePrevious() {
690  for(int i=0;i<NTrackSets();i++) GetTrackSet(i)->StorePrevious();
691  GetVertexSet()->StorePrevious();
692  }
693 
695  for(int i=0;i<NTrackSets();i++) GetTrackSet(i)->RestorePrevious();
696  GetVertexSet()->RestorePrevious();
697  }
698 
700 
701  void SetColorMode(int mode){
702  // Set color mode,
703  // enum EdbEDAUtil::EDACOLOR{
704  // kCOLOR_BY_PLATE,
705  // kCOLOR_BY_PH,
706  // kCOLOR_BY_ID,
707  // kCOLOR_BY_PARTICLE, // to be done
708  // kBLACKWHITE
709  // };
710 
711  printf("color mode %d\n", mode);
712  if(mode==kBLACKWHITE) eViewer->SetClearColor(kWhite);
713  else eViewer->SetClearColor(kBlack);
714  for(int i=0;i<NTrackSets();i++) GetTrackSet(i) ->SetColorMode(mode);
715  GetVertexSet()->SetColorMode(mode);
716  for(int i=0;i<NDrawObjects();i++) GetDrawObject(i)->SetColorMode(mode);
717  Redraw();
718  }
719  void SetLayerLength(double layer_length) {
720  // Set LayerLength for all TrackSet.
721  for(int i=0;i<NTrackSets();i++){ GetTrackSet(i)->SetLayerLength(layer_length);}
722  }
723 
724  EdbEDAMainTab *GetMainTab() {return eMainTab;}
725  EdbEDATrackSetTab *GetTrackSetTab() {return eTrackSetTab;}
726  EdbEDAPlotTab *GetPlotTab() {return ePlotTab;}
727  EdbEDAVertexTab *GetVertexTab() {return eVertexTab;}
728  EdbEDAOperationTab *GetOperationTab() {return eOperationTab;}
729  EdbEDADecaySearchTab *GetDSTab() {return eDSTab;}
730  EdbTrackP * CheckScanback(EdbTrackP *t) {return GetTrackSet("SB")->FindTrackLast(t->GetSegmentLast());}
731 
732  double GetScaleZ() { return eScaleZ;}
733  void SetScaleZ(double scale) { eScaleZ=scale;}
734  bool Japanese(){return eJapanese;}
735  void SetJapanese(bool b=kTRUE) {eJapanese = b;}
736 
737  ClassDef(EdbEDA,0); // Base of Display
738 };
739 
740 R__EXTERN EdbEDA* gEDA;
741 
742 
743 #endif // __EDA_H__
Canv_RMSEnergy__vs__Energy SetSelected(Canv_RMSEnergy__vs__Energy)
TText * text
Definition: Canv_SYSTEMATICS_ALLCOMBINED__RMSEnergy__vs__Energy__ELECTRON.C:164
R__EXTERN EdbEDA * gEDA
Definition: EdbEDA.h:740
double eX
Definition: EdbPhys.cxx:177
TTree * t
Definition: check_shower.C:4
t Draw("sizeb>>NbBT", cut2)
EdbDataProc * dproc
Definition: check_vertex.C:13
Definition: EdbAffine.h:17
Definition: EdbBrick.h:37
EdbPlateP * GetPlate(int i)
Definition: EdbBrick.h:52
int Npl() const
Definition: EdbBrick.h:50
Definition: EdbDataSet.h:25
EdbLayer * GetLayer(int id)
Definition: EdbDataSet.h:86
int Plate() const
Definition: EdbDataSet.h:65
Definition: EdbDataSet.h:180
EdbDataSet * GetDataSet()
Definition: EdbDataSet.h:196
EdbPVRec * PVR() const
Definition: EdbDataSet.h:197
Definition: EdbDataSet.h:143
EdbDataPiece * GetPiece(int id)
Definition: EdbDataSet.h:162
int N() const
Definition: EdbDataSet.h:161
Definition: EdbEDA.h:192
void SetIDSB(EdbID id)
Definition: EdbEDA.h:217
int eFirstPlate
Definition: EdbEDA.h:210
double eBeamTX
Definition: EdbEDA.h:196
int GetFirstPlate()
Definition: EdbEDA.h:240
int GetPlateDown()
Definition: EdbEDA.h:238
virtual ~EdbEDABrickData()
Definition: EdbEDA.h:215
void SetID(EdbID id)
Definition: EdbEDA.h:218
EdbID eIDSB
Definition: EdbEDA.h:200
EdbScanSet * eScanSet
Definition: EdbEDA.h:205
int GetPlateUp()
Definition: EdbEDA.h:237
EdbID eIDSF
Definition: EdbEDA.h:199
EdbPVRec * GetPVR()
Definition: EdbEDA.h:225
EdbID eID
Definition: EdbEDA.h:201
EdbDataSet * GetDataSet()
Definition: EdbEDA.h:244
double GetBeamTX()
Definition: EdbEDA.h:343
double GetZ(int ipl)
Definition: EdbEDA.h:300
int GetIPL(int PID)
Definition: EdbEDA.h:252
int eDataType
Definition: EdbEDA.h:208
EdbScanSet * GetScanSet()
Definition: EdbEDA.h:222
int GetBrick()
Definition: EdbEDA.h:232
double GetZPID(int pid)
Definition: EdbEDA.h:321
void SetIDSF(EdbID id)
Definition: EdbEDA.h:216
int GetDataType()
Definition: EdbEDA.h:234
void SetDataType(int datatype)
Definition: EdbEDA.h:235
double GetBeamTY()
Definition: EdbEDA.h:344
int eLastPlate
Definition: EdbEDA.h:211
void SetScanSet(EdbScanSet *ss)
Definition: EdbEDA.h:221
void SetBeamAngle(double tx, double ty)
Definition: EdbEDA.h:342
EdbDataSet * eDataSet
Definition: EdbEDA.h:203
EdbEDABrickData()
Definition: EdbEDA.h:213
void SetPVR(EdbPVRec *pvr)
Definition: EdbEDA.h:224
EdbPVRec * ePVR
Definition: EdbEDA.h:206
int GetNPL()
Definition: EdbEDA.h:246
void SetBrick(int ibrick)
Definition: EdbEDA.h:227
EdbScanProc * eScanProc
Definition: EdbEDA.h:204
int GetPID(int ipl)
Definition: EdbEDA.h:276
int GetIPLZ(float z)
Definition: EdbEDA.h:267
EdbID GetID()
Definition: EdbEDA.h:219
int GetLastPlate()
Definition: EdbEDA.h:241
Definition: EdbEDA.h:126
float eAnimationAmplitude
Definition: EdbEDA.h:133
EdbEDAOverlay * SetOverlay()
Definition: EdbEDA.h:154
float eTheta
Definition: EdbEDA.h:132
TTimer * eTimer
Definition: EdbEDA.h:129
EdbEDACamera()
Definition: EdbEDA.h:141
EdbEDAOverlay * GetOverlay()
Definition: EdbEDA.h:155
virtual ~EdbEDACamera()
Definition: EdbEDA.h:143
int eAnimationMode
Definition: EdbEDA.h:131
TGLViewer * GetGLViewer()
EdbEDAOverlay * eOverlay
Definition: EdbEDA.h:134
TGLViewer * eViewer
Definition: EdbEDA.h:137
Definition: EdbEDADecaySearch.h:426
Definition: EdbEDASets.h:230
Definition: EdbEDA.h:162
virtual ~EdbEDAIO()
Definition: EdbEDA.h:173
int eOutputFileMode
Definition: EdbEDA.h:164
EdbEDAIO()
Definition: EdbEDA.h:172
OutputFileMode
Definition: EdbEDA.h:165
@ kBern
Definition: EdbEDA.h:166
TCut eCutCP
Definition: EdbEDA.h:170
Definition: EdbEDA.h:86
~EdbEDALine()
Definition: EdbEDA.h:95
float X1
Definition: EdbEDA.h:88
int col
Definition: EdbEDA.h:89
TString text
Definition: EdbEDA.h:90
EdbEDALine(int color, int width, const char *comment="")
Definition: EdbEDA.h:94
void SetPoint1(float x1, float y1, float z1)
Definition: EdbEDA.h:97
void SetPoint2(float x2, float y2, float z2)
Definition: EdbEDA.h:98
EdbEDALine(float x1, float y1, float z1, float x2, float y2, float z2, int color, int width, const char *comment="")
Definition: EdbEDA.h:93
Definition: EdbEDAMainTab.h:9
Definition: EdbEDA.h:34
void * GetReference()
Definition: EdbEDA.h:44
virtual void SetColorMode(int mode)
Definition: EdbEDA.h:42
virtual void Draw(Option_t *option="")
Definition: EdbEDA.h:41
void SetDraw(bool b=kTRUE)
Definition: EdbEDA.h:46
void SetReference(void *ref)
Definition: EdbEDA.h:43
~EdbEDAObject()
Definition: EdbEDA.h:40
void * eRef
Definition: EdbEDA.h:37
bool GetDraw()
Definition: EdbEDA.h:45
EdbEDAObject()
Definition: EdbEDA.h:39
int eDraw
Definition: EdbEDA.h:36
Definition: EdbEDATabs.h:159
Definition: EdbEDA.h:106
int eLength
Definition: EdbEDA.h:110
void SetDraw(bool b)
Definition: EdbEDA.h:119
int eBarDirection
Definition: EdbEDA.h:112
bool eDraw
Definition: EdbEDA.h:109
int eXb
Definition: EdbEDA.h:111
~EdbEDAOverlay()
Definition: EdbEDA.h:115
Definition: EdbEDAPlotTab.h:14
Definition: EdbEDA.h:352
TObjArray * eSelectedVertices
Definition: EdbEDA.h:357
int Enable(int force=kFALSE)
Definition: EdbEDA.h:448
void ClearSelected()
Definition: EdbEDA.h:397
EdbTrackP * GetSelectedTrack(EdbSegP *s)
Definition: EdbEDA.h:426
TEveSelection * eSel
Definition: EdbEDA.h:354
EdbTrackP * GetSelectedTrack(int i=-1)
Definition: EdbEDA.h:421
int Disable(int force=kFALSE)
Definition: EdbEDA.h:447
EdbSegP * GetSelected(int i)
Definition: EdbEDA.h:406
TObjArray * GetSelected(void)
Definition: EdbEDA.h:405
EdbVertex * eSelectedVertex
Definition: EdbEDA.h:356
virtual ~EdbEDASelection()
Definition: EdbEDA.h:375
void SetSelectedVertex(EdbVertex *v)
Definition: EdbEDA.h:440
TEveElement * GetSelectedElement()
Definition: EdbEDA.h:416
TObjArray * GetSelectedTracks(void)
Definition: EdbEDA.h:417
EdbVertex * GetSelectedVertex(void)
Definition: EdbEDA.h:439
int NSelected()
Definition: EdbEDA.h:420
TObjArray * eSelectedSegments
Definition: EdbEDA.h:359
void InitSelection(TEveSelection *sel)
Definition: EdbEDA.h:384
void SetSelectedTracks(TObjArray *arr)
Definition: EdbEDA.h:408
EdbSegP * GetSelectedSegment(int i=-1)
Definition: EdbEDA.h:434
TObjArray * eSelectedTracks
Definition: EdbEDA.h:358
void ClearSelectedVertex()
Definition: EdbEDA.h:441
EdbEDASelection()
Definition: EdbEDA.h:365
TObjArray * eSelected
Definition: EdbEDA.h:360
int eDisable
Definition: EdbEDA.h:355
int NSelectedTracks()
Definition: EdbEDA.h:419
Definition: EdbEDA.h:50
int eTextSize
Definition: EdbEDA.h:54
int GetTextColor()
Definition: EdbEDA.h:73
void SetXYZ(float x, float y, float z)
Definition: EdbEDA.h:76
EdbEDAText(float x, float y, float z, TString str, int color=kWhite)
Definition: EdbEDA.h:60
int eTextColor
Definition: EdbEDA.h:53
float eX
Definition: EdbEDA.h:52
void SetAttribute(int size=14, int color=kWhite, int fontfile=4)
Definition: EdbEDA.h:64
void SetColorMode(int mode)
Definition: EdbEDA.h:69
int N()
Definition: EdbEDA.h:79
int eTextFont
Definition: EdbEDA.h:55
void AddText(TString str)
Definition: EdbEDA.h:78
~EdbEDAText()
Definition: EdbEDA.h:62
TString eText
Definition: EdbEDA.h:56
int GetTextSize()
Definition: EdbEDA.h:74
int GetTextFont()
Definition: EdbEDA.h:75
void * eRef
Definition: EdbEDA.h:57
void SetText(TString str)
Definition: EdbEDA.h:77
Definition: EdbEDATrackSet.h:608
Definition: EdbEDATrackSet.h:178
Definition: EdbEDASets.h:143
void AddVertex(EdbVertex *v)
Definition: EdbEDASets.h:183
void RemoveVertex(EdbVertex *v)
Definition: EdbEDASets.h:208
void Draw(int redraw=0)
Definition: EdbEDASets.C:195
TObjArray * GetVertices()
Definition: EdbEDASets.h:217
void ClearVertices()
Definition: EdbEDASets.h:213
void SetVertex(EdbVertex *v)
Definition: EdbEDASets.h:191
Definition: EdbEDATabs.h:32
Definition: EdbEDA.h:479
double eScaleZ
Definition: EdbEDA.h:499
EdbEDA(EdbPVRec *pvr, bool autorun=1)
Definition: EdbEDA.h:541
EdbEDAExtentionSet * eExt
Definition: EdbEDA.h:488
void RemoveSelected()
Definition: EdbEDA.h:643
EdbEDAVertexTab * GetVertexTab()
Definition: EdbEDA.h:727
TObjArray * GetVertices()
Definition: EdbEDA.h:662
void DrawVertices(int redraw=0)
Definition: EdbEDA.h:664
void AddVertex(EdbVertex *v)
Definition: EdbEDA.h:661
EdbEDASelection * eSel
Definition: EdbEDA.h:496
EdbEDAOperationTab * GetOperationTab()
Definition: EdbEDA.h:728
EdbEDAPlotTab * GetPlotTab()
Definition: EdbEDA.h:726
void RestorePrevious()
Definition: EdbEDA.h:694
double GetScaleZ()
Definition: EdbEDA.h:732
void ClearVertices()
Definition: EdbEDA.h:663
void SetScaleZ(double scale)
Definition: EdbEDA.h:733
void UpdateScene()
Definition: EdbEDA.h:681
EdbTrackP * GetTrack(EdbSegP *s)
Definition: EdbEDA.h:598
ClassDef(EdbEDA, 0)
TObjArray * eTrackSets
Definition: EdbEDA.h:484
int NTrackSets()
Definition: EdbEDA.h:616
void SetLayerLength(double layer_length)
Definition: EdbEDA.h:719
EdbScanProc * ScanProc()
Definition: EdbEDA.h:578
EdbEDAVertexSet * eVertexSet
Definition: EdbEDA.h:487
void SetColorMode(int mode)
Definition: EdbEDA.h:701
EdbEDATrackSet * GetTrackSet(const char *name)
Definition: EdbEDA.h:618
EdbEDAObject * GetDrawObject(int i)
Definition: EdbEDA.h:586
void Redraw()
Definition: EdbEDA.h:680
EdbEDA(const char *filename=NULL, int datatype=100, TCut rcut="1", bool auto_run=kTRUE)
Definition: EdbEDA.h:504
void SetDrawTrackID(bool draw)
Definition: EdbEDA.h:674
TObjArray * GetTrackSets()
Definition: EdbEDA.h:638
void AddDrawObject(EdbEDAObject *o)
Definition: EdbEDA.h:582
EdbEDATrackSet * eSetTracks
Definition: EdbEDA.h:486
void SetDrawTrackAngle(bool draw)
Definition: EdbEDA.h:675
EdbEDA(EdbID IDCalib, const char *ProcDirClient=NULL)
Definition: EdbEDA.h:516
int NDrawObjects()
Definition: EdbEDA.h:585
EdbEDAMainTab * GetMainTab()
Definition: EdbEDA.h:724
EdbEDATrackSetTab * eTrackSetTab
Definition: EdbEDA.h:492
EdbEDATrackSet * CreateTrackSet(const char *name)
Definition: EdbEDA.h:633
void SetOnlySelected()
Definition: EdbEDA.h:651
EdbEDAMainTab * eMainTab
Definition: EdbEDA.h:491
EdbEDADecaySearchTab * eDSTab
Definition: EdbEDA.h:497
TObjArray * eDrawObjects
Definition: EdbEDA.h:483
void SetDrawAreaSet(bool draw)
Definition: EdbEDA.h:676
EdbEDATrackSet * AddTrackSet(const char *name)
Definition: EdbEDA.h:580
void RemoveTrack(EdbTrackP *t)
Definition: EdbEDA.h:641
bool eJapanese
Definition: EdbEDA.h:500
void ClearDrawObjects()
Definition: EdbEDA.h:584
EdbEDAOperationTab * eOperationTab
Definition: EdbEDA.h:495
void SetBrick(int ibrick)
Definition: EdbEDA.h:666
EdbEDATrackSetTab * GetTrackSetTab()
Definition: EdbEDA.h:725
EdbEDAExtentionSet * GetExtentionSet()
Definition: EdbEDA.h:699
EdbEDA(EdbScanSet *ss, const char *ProcDirClient=NULL)
Definition: EdbEDA.h:523
void StorePrevious()
Definition: EdbEDA.h:689
EdbTrackP * CheckScanback(EdbTrackP *t)
Definition: EdbEDA.h:730
EdbEDADecaySearchTab * GetDSTab()
Definition: EdbEDA.h:729
EdbEDATrackSet * GetTrackSet(EdbID &ID)
Definition: EdbEDA.h:625
TObjArray * GetCurrentTracks(void)
Definition: EdbEDA.h:588
EdbEDAVertexTab * eVertexTab
Definition: EdbEDA.h:494
EdbEDATrackSet * GetTrackSet(int i)
Definition: EdbEDA.h:617
void RemoveTrackBase(EdbTrackP *t)
Definition: EdbEDA.h:640
void Reset()
Definition: EdbEDA.h:683
bool Japanese()
Definition: EdbEDA.h:734
TEveElement * GetEveElement(TObject *t)
Definition: EdbEDA.h:606
void RemoveDrawObject(TObject *o)
Definition: EdbEDA.h:583
EdbEDAPlotTab * ePlotTab
Definition: EdbEDA.h:493
EdbEDA(EdbDataProc *dproc)
Definition: EdbEDA.h:531
EdbEDAVertexSet * GetVertexSet()
Definition: EdbEDA.h:660
void SetJapanese(bool b=kTRUE)
Definition: EdbEDA.h:735
EdbEDATrackSet * GetTrackSet(EdbTrackP *t)
Definition: EdbEDA.h:619
TEveEventManager * eEvent
Definition: EdbEDA.h:489
Definition: EdbID.h:7
Int_t eBrick
Definition: EdbID.h:10
Int_t eMinor
Definition: EdbID.h:13
Int_t eMajor
Definition: EdbID.h:12
Definition: EdbLayer.h:40
int ID() const
Definition: EdbLayer.h:74
float Z() const
Definition: EdbLayer.h:78
Definition: EdbPVRec.h:148
TObjArray * eVTX
Definition: EdbPVRec.h:162
Int_t Ntracks() const
Definition: EdbPVRec.h:203
Definition: EdbPattern.h:280
Int_t Plate() const
Definition: EdbPattern.h:340
Definition: EdbBrick.h:13
Definition: EdbScanProc.h:12
Definition: EdbScanSet.h:11
EdbPlateP * GetPlate(Int_t p)
Definition: EdbScanSet.h:57
EdbBrickP eB
Definition: EdbScanSet.h:13
const EdbBrickP & Brick() const
Definition: EdbScanSet.h:50
Definition: EdbSegP.h:18
Int_t Plate() const
Definition: EdbSegP.h:156
Float_t Z() const
Definition: EdbPattern.h:87
Definition: EdbPattern.h:118
Definition: EdbVertex.h:68
struct @8 Z
struct @6 B
string filename
Definition: emthickness.cpp:34
float width
Definition: emthickness.cpp:71
EdbScanSet * set
Definition: emtraceback.cpp:14
ss
Definition: energy.C:62
AcqOdyssey * o
Definition: hwinit.C:2
int pid[1000]
Definition: m2track.cpp:13
TTree * tracks
Definition: check_tr.C:19
const char * name
Definition: merge_Energy_SytematicSources_Electron.C:24
Definition: EdbEDAUtil.h:78
@ kBLACKWHITE
Definition: EdbEDAUtil.h:86
int IsTrack(TObject *o)
Definition: EdbEDAUtil.C:17
Double_t X
Definition: tlg2pattern.C:77
Double_t Y
Definition: tlg2pattern.C:77
UInt_t id
Definition: tlg2pattern.C:118
#define NULL
Definition: nidaqmx.h:84
void Run(bool AbsCoord=false, float X0, float Y0, float DDX, float DDY, const char *File, bool Images=false)
Definition: run.C:208
Definition: Flexmotn.h:102
p
Definition: testBGReduction_AllMethods.C:8
ePVR
Definition: testBGReduction_By_ANN.C:3
Float_t X2
Definition: testChi2Ordering.C:24
EdbSegP * s
Definition: tlg2pattern.C:32