CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Types | Public Member Functions | Protected Member Functions | Private Member Functions | Private Attributes
FWOverlapTableManager Class Reference

#include <Fireworks/Core/interface/FWOverlapTableManager.h>

Inheritance diagram for FWOverlapTableManager:
FWGeometryTableManagerBase FWTableManagerBase

Public Types

enum  OverlapBits { kVisMarker = BIT(5), kOverlap = BIT(6), kOverlapChild = BIT(7) }
 
- Public Types inherited from FWGeometryTableManagerBase
enum  Bits {
  kExpanded = BIT(0), kVisNodeSelf = BIT(1), kVisNodeChld = BIT(2), kHighlighted = BIT(3),
  kSelected = BIT(4)
}
 
typedef Entries_v::iterator Entries_i
 
typedef std::vector< NodeInfoEntries_v
 

Public Member Functions

FWTableCellRendererBasecellRenderer (int iSortedRowNumber, int iCol) const
 
 FWOverlapTableManager (FWOverlapTableView *)
 
void getOverlapTitles (int, TString &) const
 
virtual std::vector< std::string > getTitles () const
 returns the title names for each column More...
 
void importOverlaps (std::string path, double precision)
 
virtual int numberOfColumns () const
 Number of columns in the table. More...
 
void printOverlaps (int) const
 
virtual void recalculateVisibility ()
 
virtual void recalculateVisibilityNodeRec (int)
 
void setDaughtersSelfVisibility (int i, bool v)
 
virtual ~FWOverlapTableManager ()
 
- Public Member Functions inherited from FWGeometryTableManagerBase
virtual void applyColorTranspToDaughters (int selectedIdx, bool recurse)
 
void applyTransparencyFromEditor ()
 
void cancelEditor (bool)
 
virtual bool cellDataIsSortable () const
 
virtual const char * cellName (const NodeInfo &) const
 
bool firstColumnClicked (int row, int xPos)
 
 FWGeometryTableManagerBase ()
 
 FWGeometryTableManagerBase (const FWGeometryTableManagerBase &)
 
int getLevelOffset () const
 
void getNodeMatrix (const NodeInfo &nodeInfo, TGeoHMatrix &mat) const
 
void getNodePath (int, std::string &) const
 
NodeInfogetSelected ()
 
virtual bool getVisibility (const NodeInfo &nodeInfo) const
 
virtual bool getVisibilityChld (const NodeInfo &nodeInfo) const
 
virtual void implSort (int, bool)
 Called by 'sort' method to actually handle the sorting of the rows. Arguments are the same as 'sort'. More...
 
bool isNodeRendered (int idx, int top_node_idx) const
 
void loadGeometry (TGeoNode *, TObjArray *)
 
bool nodeImported (int idx) const
 
virtual int numberOfRows () const
 Number of rows in the table. More...
 
const FWGeometryTableManagerBaseoperator= (const FWGeometryTableManagerBase &)
 
void redrawTable (bool setExpand=false)
 
Entries_vrefEntries ()
 
NodeInforefEntry (int i)
 
std::vector< int > rowToIndex ()
 
void setBackgroundToWhite (bool)
 
void setCellValueEditor (TGTextEntry *editor)
 
void setDaughtersSelfVisibility (bool)
 
void setLevelOffset (int x)
 
virtual void setVisibility (NodeInfo &, bool)
 
virtual void setVisibilityChld (NodeInfo &, bool)
 
void showEditor (int)
 
virtual const std::string title () const
 
virtual int unsortedRowNumber (int unsorted) const
 when passed the index to the sorted order of the rows it returns the original row number from the underlying data More...
 
virtual ~FWGeometryTableManagerBase ()
 
- Public Member Functions inherited from FWTableManagerBase
virtual void buttonPressedInRowHeader (Int_t row, Event_t *event, Int_t relX, Int_t relY)
 Called if mouse button pressed in Row Header, defaults is to do nothing. More...
 
virtual void buttonReleasedInRowHeader (Int_t row, Event_t *event, Int_t relX, Int_t relY)
 
virtual unsigned int cellHeight () const
 require all cells to be the same height More...
 
 ClassDef (FWTableManagerBase, 0)
 
void dataChanged ()
 Classes which inherit from FWTableManagerBase must call this when their underlying data changes. More...
 
 FWTableManagerBase ()
 
virtual bool hasLabelHeaders () const
 
virtual bool hasRowHeaders () const
 Returns 'true' if this table has row headers. Defaults return value is false. More...
 
virtual std::vector< unsigned int > maxWidthForColumns () const
 for each column in the table this returns the present maximum width for that column More...
 
virtual FWTableCellRendererBaserowHeader (int iSortedRowNumber) const
 Returns the renderer for the row header for the sorted row number iSortedRowNumber. More...
 
void sort (int iCol, bool iSortOrder)
 Call to have table sorted on values in column iCol with the sort order being descending if iSortOrder is 'true'. More...
 
int sortColumn (void)
 The current sort column. More...
 
bool sortOrder (void)
 The current sort order for the table. More...
 
void visualPropertiesChanged ()
 Classes which inherit from FWTableManagerBase must call this when how the data is shown (e.g. color) changes. More...
 
virtual ~FWTableManagerBase ()
 

Protected Member Functions

virtual bool nodeIsParent (const NodeInfo &) const
 

Private Member Functions

void addOverlapEntry (TGeoOverlap *, int, int, TGeoHMatrix *)
 
 FWOverlapTableManager (const FWOverlapTableManager &)
 
const FWOverlapTableManageroperator= (const FWOverlapTableManager &)
 

Private Attributes

FWOverlapTableViewm_browser
 
std::multimap< int, int > m_mapNodeOverlaps
 

Additional Inherited Members

- Static Public Member Functions inherited from FWGeometryTableManagerBase
static void getNNodesTotal (TGeoNode *geoNode, int &off)
 
- Public Attributes inherited from FWGeometryTableManagerBase
ColorBoxRenderer m_colorBoxRenderer
 
TGTextEntry * m_editor
 
int m_editTransparencyIdx
 
Entries_v m_entries
 
TGGC * m_highlightContext
 
int m_highlightIdx
 
int m_levelOffset
 
FWTextTreeCellRenderer m_renderer
 
std::vector< int > m_row_to_index
 

Detailed Description

Description: [one line class summary]

Usage: <usage>

Definition at line 33 of file FWOverlapTableManager.h.

Member Enumeration Documentation

Enumerator
kVisMarker 
kOverlap 
kOverlapChild 

Definition at line 36 of file FWOverlapTableManager.h.

Constructor & Destructor Documentation

FWOverlapTableManager::FWOverlapTableManager ( FWOverlapTableView v)

Definition at line 40 of file FWOverlapTableManager.cc.

40  :
42  m_browser(v)
43 {
44 }
FWOverlapTableView * m_browser
FWOverlapTableManager::~FWOverlapTableManager ( )
virtual

Definition at line 46 of file FWOverlapTableManager.cc.

47 {
48 }
FWOverlapTableManager::FWOverlapTableManager ( const FWOverlapTableManager )
private

Member Function Documentation

void FWOverlapTableManager::addOverlapEntry ( TGeoOverlap *  ,
int  ,
int  ,
TGeoHMatrix *   
)
private

Definition at line 211 of file FWOverlapTableManager.cc.

References FWGeometryTableManagerBase::getNNodesTotal(), FWGeometryTableViewBase::getTopNodeIdx(), i, j, kOverlap, kOverlapChild, FWGeometryTableManagerBase::kVisNodeChld, FWGeometryTableManagerBase::kVisNodeSelf, m_browser, FWGeometryTableManagerBase::m_entries, m_mapNodeOverlaps, FWOverlapTableView::m_markerIndices, FWOverlapTableView::m_markerVertices, and n.

Referenced by importOverlaps().

212 {
213 
214  // printf("add %s \n", ovl->GetTitle());
215  // get doughter indices of overlaps
216  /*
217  TPMERegexp re(" ", "o");
218  re.Split(TString(ovl->GetTitle()));
219  printf("add title %s \n", ovl->GetTitle());
220  */
221  int pcnt = parentIdx+1;
222  int dOff =0;
223  TGeoNode* mothern = m_entries[parentIdx].m_node;
224 
225  for (int i = 0; i < mothern->GetNdaughters(); ++i)
226  {
227  TGeoNode* n = mothern->GetDaughter(i);
228 
229  int cnt = pcnt + i+dOff;
230 
231  if (ovl->IsOverlap()) {
232  if (n->GetVolume() == ovl->GetFirstVolume() && (*(ovl->GetFirstMatrix()) == *(n->GetMatrix())))
233  {
234  // std::string x = re[0].Data();
235  //if (x.find(n->GetName()) == std::string::npos) printf("ERROT \n");
236 
237  m_entries[cnt].setBit(kOverlap);
238  m_entries[cnt].setBit(kVisNodeSelf);
239  m_mapNodeOverlaps.insert(std::pair<int, int>(cnt, ovlIdx));
240  int nno; n->GetOverlaps(nno);
241  nno |= BIT(1); n->SetOverlaps(0, nno);
242  }
243 
244  }
245 
246  if (n->GetVolume() == ovl->GetSecondVolume() && (*(ovl->GetSecondMatrix()) == *(n->GetMatrix())))
247  {
248  //printf("-----------------------------------------------\n");
249  // std::string x = re[2].Data();
250  // if (x.find(n->GetName()) == std::string::npos) printf("ERROT \n");
251 
252  m_entries[cnt].setBit(kOverlap);
253  m_entries[cnt].setBit(kVisNodeSelf);
254 
255  m_mapNodeOverlaps.insert(std::pair<int, int>(cnt, ovlIdx));
256  int nno; n->GetOverlaps(nno);
257  nno |= (ovl->IsOverlap() ? BIT(1) : BIT(2));
258  n->SetOverlaps(0, nno);
259 
260  }
261 
262 
264  }
265 
266  TPolyMarker3D* pm = ovl->GetPolyMarker();
267  for (int j=0; j<pm->GetN(); ++j )
268  {
269  double pl[3];
270  double pg[3];
271  pm->GetPoint(j, pl[0], pl[1], pl[2]);
272  motherm->LocalToMaster(pl, pg);
273  m_browser->m_markerIndices.push_back(ovl->IsExtrusion() ? -parentIdx : parentIdx);
274 
275  m_browser->m_markerVertices.push_back( pg[0]);
276  m_browser->m_markerVertices.push_back( pg[1]);
277  m_browser->m_markerVertices.push_back( pg[2]);
278  }
279 
280 
281  int aIdx = parentIdx;
282  int aLev = m_entries[aIdx].m_level;
283  int topNodeIdx = m_browser->getTopNodeIdx();
284 
285  while(aIdx > topNodeIdx)
286  {
287  aIdx--;
288  if (m_entries[aIdx].m_level < aLev)
289  {
290  m_entries[aIdx].setBit(kOverlapChild);
291  m_entries[aIdx].setBit(kVisNodeChld);
292  // printf("stamp %s \n", m_entries[aIdx].name());
293  aLev--;
294  }
295  }
296 }
int i
Definition: DBlmapReader.cc:9
std::multimap< int, int > m_mapNodeOverlaps
std::vector< float > m_markerVertices
std::vector< int > m_markerIndices
int j
Definition: DBlmapReader.cc:9
static void getNNodesTotal(TGeoNode *geoNode, int &off)
FWOverlapTableView * m_browser
FWTableCellRendererBase * FWOverlapTableManager::cellRenderer ( int  iSortedRowNumber,
int  iCol 
) const
virtual
Returns the particular renderer used to handle the requested cell.  Arguments:

iSortedRowNumber: the row number from the present sort (i.e. the cell number of the view) iCol: the column number of the cell. The returned value must be used immediately and not held onto since the same Renderer can be used for subsequent calls

Implements FWTableManagerBase.

Definition at line 395 of file FWOverlapTableManager.cc.

References data, FWGeometryTableViewManager::getGeoMangeur(), FWGeometryTableViewBase::getTopNodeIdx(), i, FWTextTreeCellRenderer::iconWidth(), FWGeometryTableManagerBase::kExpanded, FWGeometryTableManagerBase::kHighlighted, kOverlap, kOverlapChild, FWGeometryTableManagerBase::kSelected, kVisMarker, FWGeometryTableManagerBase::kVisNodeChld, FWGeometryTableManagerBase::kVisNodeSelf, testEve_cfg::level, FWOverlapTableView::listAllNodes(), m_browser, FWGeometryTableManagerBase::NodeInfo::m_color, FWGeometryTableManagerBase::m_colorBoxRenderer, FWGeometryTableManagerBase::m_editTransparencyIdx, FWGeometryTableManagerBase::m_entries, FWGeometryTableManagerBase::m_highlightContext, FWGeometryTableManagerBase::NodeInfo::m_level, FWGeometryTableManagerBase::m_levelOffset, m_mapNodeOverlaps, FWOverlapTableView::m_markerIndices, FWGeometryTableManagerBase::NodeInfo::m_node, FWGeometryTableManagerBase::m_renderer, FWGeometryTableManagerBase::m_row_to_index, FWGeometryTableManagerBase::NodeInfo::m_transparency, FWGeometryTableManagerBase::NodeInfo::name(), Vispa.Plugins.EdmBrowser.EdmDataAccessor::ne(), nodeIsParent(), FWTextTableCellRenderer::setData(), FWGeometryTableManagerBase::ColorBoxRenderer::setData(), FWTextTreeCellRenderer::setIndentation(), FWTextTreeCellRenderer::setIsOpen(), FWTextTreeCellRenderer::setIsParent(), FWTextTreeCellRenderer::showEditor(), FWGeometryTableManagerBase::NodeInfo::testBit(), and vdt::x.

396 {
397  if (m_row_to_index.empty()) return &m_renderer;
398 
399  int unsortedRow = m_row_to_index[iSortedRowNumber];
400 
401  if (unsortedRow < 0) printf("!!!!!!!!!!!!!!!! error %d %d \n",unsortedRow, iSortedRowNumber);
402 
403  // editor state
404  //
405  m_renderer.showEditor(unsortedRow == m_editTransparencyIdx && iCol == 2);
406 
407 
408  // selection state
409  //
410  const NodeInfo& data = m_entries[unsortedRow];
411 
412  bool isSelected = data.testBit(kHighlighted) || data.testBit(kSelected);
413  if (m_browser->listAllNodes()) isSelected = isSelected || data.testBit(kOverlap);
414 
415  if (data.testBit(kSelected))
416  {
417  m_highlightContext->SetBackground(0xc86464);
418  }
419  else if (data.testBit(kHighlighted) )
420  {
421  m_highlightContext->SetBackground(0x6464c8);
422  }
423  else if (m_browser->listAllNodes() && data.testBit(kOverlap) )
424  {
425  m_highlightContext->SetBackground(0xdddddd);
426  }
427 
428 
429  // set column content
430  //
431  if (iCol == 0)
432  {
433  if (unsortedRow == m_browser->getTopNodeIdx())
434  {
435  int no = 0, ne =0;
436  TEveGeoManagerHolder gmgr( FWGeometryTableViewManager::getGeoMangeur());
437  TIter next_ovl(gGeoManager->GetListOfOverlaps());
438  const TGeoOverlap* ovl;
439  while((ovl = (TGeoOverlap*)next_ovl()))
440  ovl->IsOverlap() ? no++ : ne++;
441 
442  m_renderer.setData(Form("%s Ovl[%d] Ext[%d]", data.m_node->GetName(), no, ne), isSelected);
443  }
444  else {
445  m_renderer.setData(data.name(), isSelected);
446  }
448 
450 
451  int level = data.m_level - m_levelOffset;
452  if (nodeIsParent(data))
453  m_renderer.setIndentation(20*level);
454  else
456  }
457  else
458  {
459  m_renderer.setIsParent(false);
461 
462  if (iCol == 5)
463  {
464  if (data.testBit(kOverlap) )
465  {
466  std::string x;
467  std::pair<std::multimap<int, int>::const_iterator, std::multimap<int, int>::const_iterator> ppp;
468  ppp = m_mapNodeOverlaps.equal_range(unsortedRow);
469 
470  TEveGeoManagerHolder gmgr( FWGeometryTableViewManager::getGeoMangeur());
471 
472  for (std::multimap<int, int>::const_iterator it2 = ppp.first;it2 != ppp.second;++it2) {
473  const TGeoOverlap* ovl = (const TGeoOverlap*) gGeoManager->GetListOfOverlaps()->At((*it2).second);
474  if (ovl)
475  x += Form("%s: %g ", ovl->IsOverlap() ? "Ovl" : "Extr", ovl->GetOverlap());
476  else
477  x += "err";
478 
479  }
480  m_renderer.setData(x, isSelected);
481  }
482  else
483  {
484  m_renderer.setData("", isSelected);
485  }
486  }
487  if (iCol == 1)
488  {
489  m_colorBoxRenderer.setData(data.m_color, isSelected);
490  return &m_colorBoxRenderer;
491  }
492  else if (iCol == 2 )
493  {
494  m_renderer.setData(Form("%d", 100 -data.m_transparency), isSelected);
495  }
496  else if (iCol == 3 )
497  {
498  m_renderer.setData(data.testBit(kVisNodeSelf) ? "On" : "-", isSelected );
499 
500  }
501  else if (iCol == 4 )
502  {
503  m_renderer.setData(data.testBit(kVisNodeChld) ? "On" : "-", isSelected);
504 
505  }
506  else if (iCol == 6)
507  {
508  bool motherV = false;
509  if (data.testBit(kOverlapChild))
510  {
511  for (std::vector<int>::iterator i = m_browser->m_markerIndices.begin(); i!= m_browser->m_markerIndices.end(); i++)
512  {
513  if (TMath::Abs(*i) == unsortedRow) {
514  motherV = true;
515  break;
516  }
517  }
518  }
519 
520  m_renderer.setData(motherV ? (data.testBit(kVisMarker) ? "On" : "-") : "", isSelected);
521  }
522  }
523  return &m_renderer;
524 }
int i
Definition: DBlmapReader.cc:9
std::multimap< int, int > m_mapNodeOverlaps
std::vector< int > m_markerIndices
bool listAllNodes() const
virtual void setIndentation(int indentation=0)
void setData(const std::string &, bool isSelected)
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:82
tuple level
Definition: testEve_cfg.py:34
x
Definition: VDTMath.h:216
virtual bool nodeIsParent(const NodeInfo &) const
FWOverlapTableView * m_browser
virtual void showEditor(bool value)
void FWOverlapTableManager::getOverlapTitles ( int  idx,
TString &  txt 
) const

Definition at line 353 of file FWOverlapTableManager.cc.

References FWGeometryTableViewManager::getGeoMangeur(), and m_mapNodeOverlaps.

354 {
355 
356  TEveGeoManagerHolder gmgr( FWGeometryTableViewManager::getGeoMangeur());
357  std::pair<std::multimap<int, int>::const_iterator, std::multimap<int, int>::const_iterator> ppp;
358  ppp = m_mapNodeOverlaps.equal_range(idx);
359  for (std::multimap<int, int>::const_iterator it2 = ppp.first;it2 != ppp.second;++it2) {
360  const TGeoOverlap* ovl = (const TGeoOverlap*) gGeoManager->GetListOfOverlaps()->At((*it2).second);
361  {
362  txt += "\n";
363 
364  if (ovl) {
365  txt += Form("%s: %g, ", ovl->IsOverlap() ? "Ovl" : "Extr", ovl->GetOverlap());
366  txt += ovl->GetTitle();
367  }
368  }
369  }
370 }
std::multimap< int, int > m_mapNodeOverlaps
std::vector< std::string > FWOverlapTableManager::getTitles ( ) const
virtual

returns the title names for each column

Reimplemented from FWGeometryTableManagerBase.

Definition at line 52 of file FWOverlapTableManager.cc.

References numberOfColumns().

53 {
54  std::vector<std::string> returnValue;
55  returnValue.reserve(numberOfColumns());
56 
57  returnValue.push_back("Name");
58  returnValue.push_back("Color");
59  returnValue.push_back("Opcty");
60  returnValue.push_back("RnrSelf");
61  returnValue.push_back("RnrChildren");
62  returnValue.push_back("Overlap");
63  returnValue.push_back("RnrMarker");
64  return returnValue;
65 }
virtual int numberOfColumns() const
Number of columns in the table.
void FWOverlapTableManager::importOverlaps ( std::string  path,
double  precision 
)

Definition at line 71 of file FWOverlapTableManager.cc.

References addOverlapEntry(), relativeConstraints::geom, FWGeometryTableViewManager::getGeoMangeur(), FWGeometryTableViewBase::getTopNodeIdx(), i, kOverlap, kOverlapChild, kVisMarker, FWGeometryTableManagerBase::kVisNodeChld, FWGeometryTableManagerBase::kVisNodeSelf, m_browser, FWGeometryTableManagerBase::NodeInfo::m_color, FWGeometryTableManagerBase::m_entries, FWGeometryTableManagerBase::NodeInfo::m_level, m_mapNodeOverlaps, FWOverlapTableView::m_markerIndices, FWOverlapTableView::m_markerVertices, FWGeometryTableManagerBase::NodeInfo::m_node, FWGeometryTableManagerBase::NodeInfo::m_parent, FWGeometryTableManagerBase::NodeInfo::m_transparency, python.Node::node, getGTfromDQMFile::obj, analyzePatCOC_cfg::overlaps, and FWGeometryTableManagerBase::NodeInfo::resetBit().

Referenced by FWOverlapTableView::recalculate().

72 {
73  m_entries.clear();
74  m_mapNodeOverlaps.clear();
75  m_browser->m_markerVertices.clear();
76  m_browser->m_markerIndices.clear();
77 
78  TEveGeoManagerHolder mangeur( FWGeometryTableViewManager::getGeoMangeur());
79  // gGeoManager->cd();
80  NodeInfo topNodeInfo;
81  topNodeInfo.m_node = gGeoManager->GetTopNode();
82  topNodeInfo.m_level = 0;
83  topNodeInfo.m_color = gGeoManager->GetTopNode()->GetVolume()->GetLineColor();
84  topNodeInfo.m_transparency = gGeoManager->GetTopNode()->GetVolume()->GetTransparency();
85  topNodeInfo.m_parent = -1;
86  topNodeInfo.resetBit(kVisNodeSelf);
87 
88  m_entries.resize(gGeoManager->GetNNodes());
89  m_entries[0] = topNodeInfo;
90 
91  m_entries.resize( gGeoManager->GetNNodes());
92 
93  TGeoVolume* topVol = topNodeInfo.m_node->GetVolume();
94  Int_t icheck = 0;
95  Int_t ncheck = 0;
96  TStopwatch *timer;
97  Int_t i;
98  bool checkingOverlaps = false;
99  TGeoManager *geom = topVol->GetGeoManager();
100  ncheck = topNodeInfo.m_node->CountDaughters(kFALSE);
101  timer = new TStopwatch();
102  geom->ClearOverlaps();
103  geom->SetCheckingOverlaps(kTRUE);
104 
105  int oldS = 0;
106  timer->Start();
107  geom->GetGeomPainter()->OpProgress(topVol->GetName(),icheck,ncheck,timer,kFALSE);
108 // topVol->CheckOverlaps(iPrecision);
109  icheck++;
110  TGeoIterator git(topVol);
111  Entries_i eit = m_entries.begin();
112  /*
113  if (gGeoManager->GetListOfOverlaps()->GetEntriesFast()) {
114  int newCnt = gGeoManager->GetListOfOverlaps()->GetEntriesFast();
115  for (int i=0; i<newCnt; ++i) {
116  addOverlapEntry((TGeoOverlap*)gGeoManager->GetListOfOverlaps()->At(i), new TGeoHMatrix(*geom->GetCurrentMatrix()), topNode, next);
117  }
118  oldS= newCnt;
119  }*/
120  eit++;
121  TGeoNode *node;
122  icheck = 1;
123 
124  int topNodeIdx = m_browser->getTopNodeIdx();
125 
126  while ((node=git())) {
127  if (!eit->testBit(kOverlap)) eit->resetBit(kVisNodeSelf);
128  eit->m_node = node;
129  eit->m_color = node->GetVolume()->GetLineColor();
130  eit->m_transparency = node->GetVolume()->GetTransparency();
131  eit->m_level = git.GetLevel();
132  eit->m_parent = icheck;
133 
134  if ((topNodeIdx )== icheck || !topNodeIdx ) {
135  // printf("start to check overlaps on topNodeIdx %s \n", eit->name());
136  checkingOverlaps=true;
137  }
138  else if (checkingOverlaps && ( eit->m_level <= m_entries[m_browser->getTopNodeIdx()].m_level))
139  {
140  checkingOverlaps=false;
141  }
142  // parent index
143  Entries_i pit = eit;
144  do
145  {
146  --pit;
147  --(eit->m_parent);
148  if (pit->m_level < eit->m_level)
149  break;
150  } while (pit != m_entries.begin());
151 
152  // overlap bits
153  if ( checkingOverlaps) {
154  if (!node->GetVolume()->IsSelected()) {
155  geom->GetGeomPainter()->OpProgress(node->GetVolume()->GetName(),icheck+1,ncheck,timer,kFALSE);
156  node->GetVolume()->SelectVolume(kFALSE);
157 
158  node->GetVolume()->CheckOverlaps(iPrecision);
159 
160  if (oldS != gGeoManager->GetListOfOverlaps()->GetEntriesFast()) {
161  // printf("mother %s overlaps \n", node->GetName());
162 
163  eit->setBit(kOverlapChild);
164  eit->setBit(kVisNodeChld);
165  eit->setBit(kVisMarker);
166 
167  TGeoHMatrix* motherm = new TGeoHMatrix(*geom->GetCurrentMatrix());
168  {
169  TGeoNode* ni = topNodeInfo.m_node;
170  for (Int_t i=1; i<=git.GetLevel(); i++) {
171  ni = ni->GetDaughter(git.GetIndex(i));
172  motherm->Multiply(ni->GetMatrix());
173  }
174  }
175 
176  int newCnt = gGeoManager->GetListOfOverlaps()->GetEntriesFast();
177 
178  for (int i=oldS; i<newCnt; ++i)
179  {
180  // printf("add %p %p \n", (void*)node->GetVolume(), (void*)m_entries[icheck].m_node->GetVolume());
181  addOverlapEntry((TGeoOverlap*)gGeoManager->GetListOfOverlaps()->At(i), i, icheck, motherm);
182  }
183 
184  oldS = newCnt;
185  }
186  }
187  }
188  eit++;
189  icheck ++;
190  }
191 
192  topVol->SelectVolume(kTRUE);
193  geom->SetCheckingOverlaps(kFALSE);
194  // geom->SortOverlaps();
195  TObjArray *overlaps = geom->GetListOfOverlaps();
196  Int_t novlps = overlaps->GetEntriesFast();
197  TNamed *obj;
198  for (i=0; i<novlps; i++) {
199  obj = (TNamed*)overlaps->At(i);
200  obj->SetName(Form("ov%05d",i));
201  }
202  geom->GetGeomPainter()->OpProgress("Check overlaps:",icheck,ncheck,timer,kTRUE);
203  Info("CheckOverlaps", "Number of illegal overlaps/extrusions : %d\n", novlps);
204  delete timer;
205 }
int i
Definition: DBlmapReader.cc:9
std::multimap< int, int > m_mapNodeOverlaps
std::vector< float > m_markerVertices
std::vector< int > m_markerIndices
tuple node
Definition: Node.py:50
void addOverlapEntry(TGeoOverlap *, int, int, TGeoHMatrix *)
FWOverlapTableView * m_browser
bool FWOverlapTableManager::nodeIsParent ( const NodeInfo data) const
protectedvirtual

Reimplemented from FWGeometryTableManagerBase.

Definition at line 336 of file FWOverlapTableManager.cc.

References kOverlapChild, FWOverlapTableView::listAllNodes(), m_browser, FWGeometryTableManagerBase::NodeInfo::m_node, and FWGeometryTableManagerBase::NodeInfo::testBit().

Referenced by cellRenderer().

337 {
338  return m_browser->listAllNodes() ? data.m_node->GetNdaughters() : data.testBit(kOverlapChild) ;
339 }
bool listAllNodes() const
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:82
FWOverlapTableView * m_browser
virtual int FWOverlapTableManager::numberOfColumns ( ) const
inlinevirtual

Number of columns in the table.

Implements FWTableManagerBase.

Definition at line 48 of file FWOverlapTableManager.h.

Referenced by getTitles().

48 {return 7;}
const FWOverlapTableManager& FWOverlapTableManager::operator= ( const FWOverlapTableManager )
private
void FWOverlapTableManager::printOverlaps ( int  idx) const

Definition at line 341 of file FWOverlapTableManager.cc.

References FWGeometryTableViewManager::getGeoMangeur(), and m_mapNodeOverlaps.

Referenced by FWOverlapTableView::chosenItem().

342 {
343 
344  TEveGeoManagerHolder gmgr( FWGeometryTableViewManager::getGeoMangeur());
345  std::pair<std::multimap<int, int>::const_iterator, std::multimap<int, int>::const_iterator> ppp;
346  ppp = m_mapNodeOverlaps.equal_range(idx);
347  for (std::multimap<int, int>::const_iterator it2 = ppp.first;it2 != ppp.second;++it2) {
348  const TGeoOverlap* ovl = (const TGeoOverlap*) gGeoManager->GetListOfOverlaps()->At((*it2).second);
349  if (ovl) ovl->Print();
350  }
351 }
std::multimap< int, int > m_mapNodeOverlaps
void FWOverlapTableManager::recalculateVisibility ( )
virtual
void FWOverlapTableManager::recalculateVisibilityNodeRec ( int  pIdx)
virtual

Definition at line 312 of file FWOverlapTableManager.cc.

References data, FWGeometryTableManagerBase::getNNodesTotal(), FWGeometryTableManagerBase::kExpanded, kOverlap, kOverlapChild, FWOverlapTableView::listAllNodes(), m_browser, FWGeometryTableManagerBase::m_entries, FWGeometryTableManagerBase::m_row_to_index, n, FWGeometryTableManagerBase::NodeInfo::testBit(), and FWGeometryTableManagerBase::NodeInfo::testBitAny().

Referenced by recalculateVisibility().

313 {
314  TGeoNode* parentNode = m_entries[pIdx].m_node;
315  int nD = parentNode->GetNdaughters();
316  int dOff=0;
317  for (int n = 0; n != nD; ++n)
318  {
319  int idx = pIdx + 1 + n + dOff;
320  NodeInfo& data = m_entries[idx];
321 
322 
323  if (m_browser->listAllNodes() || data.testBitAny(kOverlap | kOverlapChild))
324  m_row_to_index.push_back(idx);
325 
326  if ((m_browser->listAllNodes() || data.testBit(kOverlapChild)) && data.testBit(kExpanded) )
328 
329  FWGeometryTableManagerBase::getNNodesTotal(parentNode->GetDaughter(n), dOff);
330  }
331 }
bool listAllNodes() const
virtual void recalculateVisibilityNodeRec(int)
static void getNNodesTotal(TGeoNode *geoNode, int &off)
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:82
FWOverlapTableView * m_browser
void FWOverlapTableManager::setDaughtersSelfVisibility ( int  i,
bool  v 
)
virtual

Reimplemented from FWGeometryTableManagerBase.

Definition at line 530 of file FWOverlapTableManager.cc.

References data, FWGeometryTableManagerBase::getNNodesTotal(), FWGeometryTableManagerBase::kVisNodeChld, FWGeometryTableManagerBase::kVisNodeSelf, FWGeometryTableManagerBase::m_entries, n, and FWGeometryTableManagerBase::NodeInfo::setBitVal().

531 {
532  int dOff = 0;
533  TGeoNode* parentNode = m_entries[selectedIdx].m_node;
534  int nD = parentNode->GetNdaughters();
535  for (int n = 0; n != nD; ++n)
536  {
537  int idx = selectedIdx + 1 + n + dOff;
538  NodeInfo& data = m_entries[idx];
539 
542 
543 
544  FWGeometryTableManagerBase::getNNodesTotal(parentNode->GetDaughter(n), dOff);
545  }
546 }
static void getNNodesTotal(TGeoNode *geoNode, int &off)
char data[epos_bytes_allocation]
Definition: EPOS_Wrapper.h:82
mathSSE::Vec4< T > v

Member Data Documentation

FWOverlapTableView* FWOverlapTableManager::m_browser
private
std::multimap<int, int> FWOverlapTableManager::m_mapNodeOverlaps
private