FEDRA emulsion software from the OPERA Collaboration
EdbEDASelection Class Reference

#include <EdbEDA.h>

Inheritance diagram for EdbEDASelection:
Collaboration diagram for EdbEDASelection:

Public Member Functions

void Added (TEveElement *el)
 
void Cleared ()
 
void ClearSelected ()
 
void ClearSelectedVertex ()
 
int Disable (int force=kFALSE)
 
 EdbEDASelection ()
 
int Enable (int force=kFALSE)
 
EdbSegPGetSelected (int i)
 
TObjArray * GetSelected (void)
 
TEveElement * GetSelectedElement ()
 
EdbSegPGetSelectedSegment (int i=-1)
 
EdbTrackPGetSelectedTrack (EdbSegP *s)
 
EdbTrackPGetSelectedTrack (int i=-1)
 
TObjArray * GetSelectedTracks (void)
 
EdbVertexGetSelectedVertex (void)
 
EdbTrackPGetTrack (TEveElement *e)
 
void InitSelection (TEveSelection *sel)
 
int NSelected ()
 
int NSelectedTracks ()
 
void Removed (TEveElement *el)
 
void SelectAll ()
 
TObjArray * SetSelected (TObjArray *selected=NULL)
 
void SetSelectedTracks (TObjArray *arr)
 
void SetSelectedVertex (EdbVertex *v)
 
void SetSelection (TObjArray *selected=NULL)
 
virtual ~EdbEDASelection ()
 

Private Attributes

int eDisable
 
TEveSelection * eSel
 
TObjArray * eSelected
 
TObjArray * eSelectedSegments
 
TObjArray * eSelectedTracks
 
EdbVertexeSelectedVertex
 
TObjArray * eSelectedVertices
 

Constructor & Destructor Documentation

◆ EdbEDASelection()

EdbEDASelection::EdbEDASelection ( )
inline
365  {
366  eSelectedVertices = new TObjArray;
367  eSelectedTracks = new TObjArray;
368  eSelectedSegments = new TObjArray;
369  eSelected = new TObjArray;
371  eSel = NULL;
372  eDisable = 0;
373  }
TObjArray * eSelectedVertices
Definition: EdbEDA.h:357
TEveSelection * eSel
Definition: EdbEDA.h:354
EdbVertex * eSelectedVertex
Definition: EdbEDA.h:356
TObjArray * eSelectedSegments
Definition: EdbEDA.h:359
TObjArray * eSelectedTracks
Definition: EdbEDA.h:358
TObjArray * eSelected
Definition: EdbEDA.h:360
int eDisable
Definition: EdbEDA.h:355
#define NULL
Definition: nidaqmx.h:84

◆ ~EdbEDASelection()

virtual EdbEDASelection::~EdbEDASelection ( )
inlinevirtual
375  {
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  }

Member Function Documentation

◆ Added()

void EdbEDASelection::Added ( TEveElement *  el)
1634  {
1635  // function which define the actions by mouse.
1636  // if the action is not by the mouse, return.
1637  if(eDisable) return;
1638 
1639  printf("%s\n",el ? el->GetElementName() : "");
1640  gEve->SetStatusLine(el->GetElementName());
1641  if(el->GetUserData() ==NULL) return;
1642 
1643  // if a vertex was selected, the corresponding tracks will be selected.
1644  if(IsVertex(el)) {
1645  Disable();
1646 
1647  EdbVertex *v = (EdbVertex *) el->GetUserData();
1648  // to avoid double selection of the tracks
1649  eSel->RemoveElements();
1650  // add vertex to the selection, avoiding the loop in Added().
1651  eSel->AddElement(el);
1652 
1653  // add track into the selection.
1654  for(int i=0;i<v->N();i++){
1655  EdbTrackP *t = v->GetTrack(i);
1656  TEveElement * eltrack = GetTrackElement(t);
1657  if(NULL!=eltrack) {
1658  eSel->AddElement(eltrack);
1659  printf(" %s\n", eltrack->GetElementName());
1660  }
1661  }
1662  Enable();
1663 
1664  // change the color of the vertex point.
1665  if( eSelectedVertex!= v) {
1666  TEvePointSet *ps = GetVertexElement(eSelectedVertex);
1667  if(ps!=NULL) ps->SetMarkerColor(kOrange);
1668  eSelectedVertex=v;
1669  ps = (TEvePointSet *) el;
1670  ps->SetMarkerColor(kRed);
1671  gEve->Redraw3D();
1672  }
1673 
1674  // write feedback file
1675  gEDA->WriteFeedbackFile2008(v,"tmp.old.feedback");
1676  }
1677 
1678  // revise TObjArray * selected, *selected_tracks
1679  SetSelected();
1680 
1681  // revice extention
1682  gEDA->GetExtentionSet()->Draw(kFALSE);
1683  gEve->Redraw3D();
1684 }
EdbEDA * gEDA
Definition: EdbEDA.C:3
TTree * t
Definition: check_shower.C:4
void Draw(int redraw=0, int fix=0)
Definition: EdbEDASets.C:225
void WriteFeedbackFile2008(EdbVertex *v=NULL, const char *filename=NULL)
Definition: EdbEDA.C:690
int Enable(int force=kFALSE)
Definition: EdbEDA.h:448
int Disable(int force=kFALSE)
Definition: EdbEDA.h:447
TObjArray * SetSelected(TObjArray *selected=NULL)
Definition: EdbEDA.C:1540
EdbEDAExtentionSet * GetExtentionSet()
Definition: EdbEDA.h:699
Definition: EdbPattern.h:118
Definition: EdbVertex.h:68
EdbTrackP * GetTrack(int i)
Definition: EdbVertex.h:141
Int_t N() const
Definition: EdbVertex.h:121
TEvePointSet * GetVertexElement(EdbVertex *v)
Definition: EdbEDAUtil.C:56
int IsVertex(TObject *o)
Definition: EdbEDAUtil.C:4
TEveCompound * GetTrackElement(EdbTrackP *t)
Definition: EdbEDAUtil.C:69

◆ Cleared()

void EdbEDASelection::Cleared ( )
1691  {
1692  SetSelected();
1693  if(eDisable) return;
1694  printf("Cleared\n");
1695 }

◆ ClearSelected()

void EdbEDASelection::ClearSelected ( )
inline
397  {
398  eSelected->Clear();
399  eSelectedTracks->Clear();
400  }

◆ ClearSelectedVertex()

void EdbEDASelection::ClearSelectedVertex ( )
inline

◆ Disable()

int EdbEDASelection::Disable ( int  force = kFALSE)
inline
447 { return force ? eDisable = 1 : eDisable++;}

◆ Enable()

int EdbEDASelection::Enable ( int  force = kFALSE)
inline
448 { return force ? eDisable = 0 : eDisable--;}

◆ GetSelected() [1/2]

EdbSegP* EdbEDASelection::GetSelected ( int  i)
inline
406 {return (EdbSegP *)eSelected->At(i);}
Definition: EdbSegP.h:18

◆ GetSelected() [2/2]

TObjArray* EdbEDASelection::GetSelected ( void  )
inline
405 {return eSelected;}

◆ GetSelectedElement()

TEveElement* EdbEDASelection::GetSelectedElement ( )
inline
416 { TEveElement::List_i it= gEve->GetSelection()->EndChildren(); return *(--it);}

◆ GetSelectedSegment()

EdbSegP* EdbEDASelection::GetSelectedSegment ( int  i = -1)
inline
434 {if(i==-1) i=NSelected()-1; return (EdbSegP *) eSelected->At(i);}
int NSelected()
Definition: EdbEDA.h:420

◆ GetSelectedTrack() [1/2]

EdbTrackP* EdbEDASelection::GetSelectedTrack ( EdbSegP s)
inline
426  {
427  for( int i=0; i<NSelectedTracks(); i++){
429  for(int j=0; j<t->N(); j++) if(s==t->GetSegment(j)) return t;
430  }
431  return NULL;
432  }
EdbTrackP * GetSelectedTrack(int i=-1)
Definition: EdbEDA.h:421
int NSelectedTracks()
Definition: EdbEDA.h:419
EdbSegP * s
Definition: tlg2pattern.C:32

◆ GetSelectedTrack() [2/2]

EdbTrackP* EdbEDASelection::GetSelectedTrack ( int  i = -1)
inline
421  {
422  if(NSelectedTracks()==0) return NULL;
423  if(i==-1) i=NSelectedTracks()-1;
424  return (EdbTrackP *) eSelectedTracks->At(i);
425  }

◆ GetSelectedTracks()

TObjArray* EdbEDASelection::GetSelectedTracks ( void  )
inline
417 { return eSelectedTracks; }

◆ GetSelectedVertex()

EdbVertex* EdbEDASelection::GetSelectedVertex ( void  )
inline
439 { return eSelectedVertex;}

◆ GetTrack()

EdbTrackP * EdbEDASelection::GetTrack ( TEveElement *  e)
1530  {
1531  if(IsTrack(e)) return (EdbTrackP*) e->GetUserData();
1532  if(IsSegment(e)){
1533  TEveElement *parent = *(e->BeginParents());
1534  if(IsTrack(parent)) return (EdbTrackP*) parent->GetUserData();
1535  }
1536  return NULL;
1537 }
int IsTrack(TObject *o)
Definition: EdbEDAUtil.C:17
int IsSegment(TObject *o)
Definition: EdbEDAUtil.C:29

◆ InitSelection()

void EdbEDASelection::InitSelection ( TEveSelection *  sel)
inline
384  {
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  }

◆ NSelected()

int EdbEDASelection::NSelected ( )
inline
420 { return eSelected-> GetEntriesFast();}

◆ NSelectedTracks()

int EdbEDASelection::NSelectedTracks ( )
inline
419 { return eSelectedTracks->GetEntriesFast();}

◆ Removed()

void EdbEDASelection::Removed ( TEveElement *  el)
1686  {
1687  printf("Cancel %s\n", el ? el->GetElementName() : "");
1688  SetSelected();
1689 }

◆ SelectAll()

void EdbEDASelection::SelectAll ( )
1569  {
1570  TEveSelection *sel = gEve->GetSelection();
1571  sel->RemoveElements();
1572  TEveEventManager *ev = gEve->GetCurrentEvent();
1573  TEveElement::List_i it = ev->BeginChildren();
1574  for(int i=0;i<ev->NumChildren();i++, it++){
1575  TEveElement *e = *it;
1576  if (!IsTrack(e)) continue;
1577  TEveElement::List_i itseg = e->BeginChildren();
1578  for(int j=0;j<e->NumChildren();j++, itseg++){
1579  TEveElement *s = *itseg;
1580  if(e->FindChild(e->GetElementName())) continue;
1581  sel->AddElement(s);
1582  }
1583  }
1584 }

◆ SetSelected()

TObjArray * EdbEDASelection::SetSelected ( TObjArray *  selected = NULL)
1540  {
1541  // fill eSelected by the current selected tracks.
1542 
1543  if(selected){ // fill by given object array.
1544  *eSelected = *selected;
1545  return eSelected;
1546  }
1547  ClearSelected();
1548 
1549  if(gEve->GetCurrentEvent()==NULL) return NULL; // if current event is not set, return.
1550 
1551  TEveSelection *sel = gEve->GetSelection();
1552 
1553  for(TEveElement::List_i it=sel->BeginChildren();it!=sel->EndChildren();it++){
1554  TEveElement *e = *it;
1555  if( IsSegment (e) || IsTrack(e) ){
1556  TObject *o = (TObject *)e->GetUserData();
1557  if(NULL==eSelected->FindObject(o)) eSelected->Add(o); // no double entry
1558  EdbTrackP *t = GetTrack(e);
1559  if(t!=NULL&&NULL==eSelectedTracks->FindObject(t)) eSelectedTracks->Add(t);
1560  }
1561  if( IsVertex (e)){
1562  // selection of vertex is managed in Added().
1563  }
1564  }
1565  return eSelected;
1566 }
void ClearSelected()
Definition: EdbEDA.h:397
EdbTrackP * GetTrack(TEveElement *e)
Definition: EdbEDA.C:1530
AcqOdyssey * o
Definition: hwinit.C:2

◆ SetSelectedTracks()

void EdbEDASelection::SetSelectedTracks ( TObjArray *  arr)
inline
408  {
409  if(arr) {
410  *eSelectedTracks = *arr;
411  *eSelected = *arr;
412  }
413  }

◆ SetSelectedVertex()

void EdbEDASelection::SetSelectedVertex ( EdbVertex v)
inline
440 { eSelectedVertex = v; }

◆ SetSelection()

void EdbEDASelection::SetSelection ( TObjArray *  selected = NULL)
1586  {
1587  if(selected) *eSelected = *selected;
1588  //if(GetTrackSet("TS")->N()==0) return;
1589 
1590  Disable();
1591 
1592  // TEveSelection clear
1593  TEveSelection *sel = gEve->GetSelection();
1594  sel->Clear();
1595 
1596  // loop for all elements in the current event.
1597  TEveEventManager *eEvent = gEve->GetCurrentEvent();
1598  if(eEvent==NULL) return;
1599  int nselected = eSelected->GetEntriesFast();
1600 
1601  for(TEveElement::List_i it = eEvent->BeginChildren(); it!=eEvent->EndChildren(); it++){
1602  TEveElement *e = *it;
1603 
1604  // only track or segment will be target to be selected.
1605  if(IsTrack(e)){
1606  // if this track is in the list of eSelected, add to TEveSelection
1607  for(int i=0; i<nselected;i++){
1608  if( eSelected->At(i) == e->GetUserData() ) sel->AddElement(e);
1609  }
1610 
1611  // loop over segments.
1612  if(e->NumChildren()==0) continue;
1613  for(TEveElement::List_i itj = e->BeginChildren(); itj!=e->EndChildren(); itj++){
1614  // if this track is in the list of eSelected, add to TEveSelection
1615  TEveElement *ee = *itj;
1616  for(int i=0;i<nselected;i++){
1617  if( eSelected->At(i) == ee->GetUserData() ) sel->AddElement(ee);
1618  }
1619  }
1620  }
1621  // coloring of selected vertex is done in EdbEDAVertexSet::DrawSingleVertex()
1622  /*
1623  if(IsVertex(e)){
1624  if(eVertex==(EdbVertex *) e->GetUserData()){
1625  TEvePointSet *ps = (TEvePointSet *) el;
1626  ps->SetMarkerColor(kRed);
1627  }
1628  }
1629  */
1630  }
1631  Enable();
1632 }
ee
Definition: energy.C:8

Member Data Documentation

◆ eDisable

int EdbEDASelection::eDisable
private

◆ eSel

TEveSelection* EdbEDASelection::eSel
private

◆ eSelected

TObjArray* EdbEDASelection::eSelected
private

◆ eSelectedSegments

TObjArray* EdbEDASelection::eSelectedSegments
private

◆ eSelectedTracks

TObjArray* EdbEDASelection::eSelectedTracks
private

◆ eSelectedVertex

EdbVertex* EdbEDASelection::eSelectedVertex
private

◆ eSelectedVertices

TObjArray* EdbEDASelection::eSelectedVertices
private

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