18 #include <boost/bind.hpp>
21 #include <google/profiler.h>
30 #include "TGeoManager.h"
31 #include "TGeoVolume.h"
32 #include "TGeoMatrix.h"
33 #include "TGeoShape.h"
36 static const char*
redTxt =
"\033[01;31m";
38 static const char*
cyanTxt =
"\033[22;36m";
54 gval.fMask = kGCForeground | kGCBackground | kGCStipple | kGCFillStyle | kGCGraphicsExposures;
55 gval.fStipple = gClient->GetResourcePool()->GetCheckeredBitmap();
56 gval.fGraphicsExposures = kFALSE;
57 gval.fBackground = gVirtualX->GetPixel(kGray);
58 m_colorContext = gClient->GetResourcePool()->GetGCPool()->GetGC(&gval,kTRUE);
64 gClient->GetResourcePool()->GetGCPool()->FreeGC(m_colorContext->GetGC());
69 m_color = gVirtualX->GetPixel(c);
81 m_colorContext->SetFillStyle(kFillSolid);
82 m_colorContext->SetForeground(m_color);
83 gVirtualX->FillRectangle(iID, m_colorContext->GetGC(), iX, iY, iWidth, iHeight);
87 m_colorContext->SetFillStyle(kFillOpaqueStippled);
88 gVirtualX->FillRectangle(iID, m_colorContext->GetGC(), iX, iY, iWidth, iHeight);
148 std::vector<std::string> returnValue;
152 returnValue.push_back(
"Volume Name");
154 returnValue.push_back(
"Node Name");
156 returnValue.push_back(
"Color");
157 returnValue.push_back(
"RnrSelf");
158 returnValue.push_back(
"RnrChildren");
159 returnValue.push_back(
"Material");
160 returnValue.push_back(
"Position");
161 returnValue.push_back(
"Diagonal");
194 if (iRow < 0)
return;
214 m_renderer.
setData(std::string(
"FWGeometryTableManager::cellRenderer() Error!"),
false);
224 TGeoNode& gn = *data.
m_node;
232 gc->SetForeground(gVirtualX->GetPixel(kRed));
234 gc->SetForeground(gVirtualX->GetPixel(kBlack));
242 renderer->
setData(Form(
"%s [%d]", gn.GetVolume()->GetName(), nD), isSelected);
244 renderer->
setData(Form(
"%s [%d]", gn.GetName(), nD ), isSelected);
250 if (data.
m_node->GetNdaughters())
270 renderer->
setData( gn.IsVisible() ?
"on" :
"off", isSelected);
275 renderer->
setData( gn.IsVisDaughters() ?
"on" :
"off", isSelected);
280 renderer->
setData( gn.GetVolume()->GetMaterial()->GetName(), isSelected);
285 const Double_t*
p = gn.GetMatrix()->GetTranslation();
286 renderer->
setData(Form(
"[%.3f, %.3f, %.3f]", p[0], p[1], p[2]), isSelected);
291 TGeoBBox* gs =
static_cast<TGeoBBox*
>( gn.GetVolume()->GetShape());
292 renderer->
setData( Form(
"%f", TMath::Sqrt(gs->GetDX()*gs->GetDX() + gs->GetDY()*gs->GetDY() +gs->GetDZ()*gs->GetDZ() )), isSelected);
307 std::advance(it, idx);
366 for (
int i =0, nD = v->GetNdaughters();
i != nD; ++
i) {
442 if (
i->second.m_matches)
463 if (debug) printf(
"getNNodesTotal %s %s (c:%d)\033[22;0m \n",
cyanTxt, geoNode->GetName(),
level);
466 std::vector<int> vi; vi.reserve(nD);
468 for (
int n = 0;
n != nD; ++
n)
470 TGeoVolume* vTmp = geoNode->GetDaughter(
n)->GetVolume();
476 for (std::vector<int>::iterator u = vi.begin(); u != vi.end(); ++u )
478 TGeoVolume* neighbourVolume = geoNode->GetDaughter(*u)->GetVolume();
479 if (neighbourVolume == vTmp)
486 if (toAdd) vi.push_back(
n);
494 for (
int i = 0;
i < nV; ++
i )
498 if (debug) printf(
"%d \n", off);
507 assert( parent_idx < nEntries);
511 TGeoNode* parentGeoNode = parent.
m_node;
512 int parentLevel = parent.
m_level;
513 if (debug) printf(
"%s START level[%d] > %s[%d] \033[0m\n" ,
greenTxt, parentLevel+1, parentGeoNode->GetName(), parent_idx);
523 for (
int n = 0;
n != nD; ++
n)
525 vTmp = parentGeoNode->GetDaughter(
n)->GetVolume();
533 for (std::vector<int>::iterator u = vi.begin(); u != vi.end(); ++u )
535 TGeoVolume* neighbourVolume = parentGeoNode->GetDaughter(*u)->GetVolume();
536 if (neighbourVolume == vTmp)
543 if (toAdd) vi.push_back(
n);
552 std::advance(it, parent_idx+1);
555 if (debug) printf(
" accpted %d of %d entries size %d \n", nV, nD, (
int)
m_entries.size());
558 for (
int n = 0;
n != nV; ++
n)
560 int childIdx = vi[
n];
562 nodeInfo.
m_node = parentGeoNode->GetDaughter(childIdx);
565 if (debug) printf(
" add %s\n", nodeInfo.
name());
574 for (
int n = 0;
n != nV; ++
n)
577 if (parentGeoNode->GetNdaughters() > 0)
588 if (debug) printf(
"\ncheck shhift for level evel %d import %s ", parent.
m_level +1,parentGeoNode->GetName() );
590 for (
int i = (parent_idx + nV + 1);
i < nEntries; ++
i)
599 if (debug) printf(
" \033[0m\n");
619 for (
int d = 0; d < pn->GetNdaughters(); ++d )
621 if (
m_entries[
i].m_node == pn->GetDaughter(d))
627 if (!ok) printf(
"%s!!!!!! node %s has false parent %s \n",
redTxt,
m_entries[
i].
name(), pn->GetName());
636 for (std::vector<TGeoVolume*>::iterator
i = pstack.begin();
i!= pstack.end(); ++
i)
646 pstack.push_back(vol);
649 for (
int i = 0;
i!=nD; ++
i)
668 i->second.m_childMatches =
false;
671 std::vector<TGeoVolume*> pstack;
static const char * cyanTxt
virtual UInt_t height() const
returns the minimum height of the cell to which the renderer is representing
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 und...
virtual ~ColorBoxRenderer()
virtual std::vector< std::string > getTitles() const
returns the title names for each column
void updateStatusBar(const char *status)
sigc::signal< void, int, int > indexSelected_
FWStringParameter m_filter
virtual FWTableCellRendererBase * cellRenderer(int iSortedRowNumber, int iCol) const
int getNdaughtersLimited(TGeoNode *) const
static const char * greenTxt
void getNNodesTotal(TGeoNode *geoNode, int level, int &off, bool debug) const
FWGeometryTableManager(FWGeometryBrowser *)
FWTextTreeCellRenderer m_renderer
void setIsOpen(bool value)
void dataChanged()
Classes which inherit from FWTableManagerBase must call this when their underlying data changes...
TGeoManager * m_geoManager
sigc::signal< void, T > changed_
virtual bool rowIsSelected(int row) const
std::vector< int > rowToIndex()
const char * name() const
ColorBoxRenderer m_colorBoxRenderer
std::vector< int > m_row_to_index
virtual const std::string title() const
FWLongParameter m_maxDaughters
virtual void draw(Drawable_t iID, int iX, int iY, unsigned int iWidth, unsigned int iHeight)
void importChildren(int parent_idx, bool recurse)
void setIsParent(bool value)
const TGGC * graphicsContext() const
static const char * redTxt
void loadGeometry(TGeoManager *geoManager)
virtual void setIndentation(int indentation=0)
virtual ~FWGeometryTableManager()
int selectedColumn() const
void setSelection(int row, int column, int mask)
void setData(const std::string &, bool isSelected)
void setData(Color_t c, bool)
Entries_v::iterator Entries_i
void checkChildMatches(TGeoVolume *v, std::vector< TGeoVolume * > &)
void checkUniqueVolume(TGeoVolume *v)
virtual int numberOfColumns() const
Number of columns in the table.
void recalculateVisibility()
void visualPropertiesChanged()
Classes which inherit from FWTableManagerBase must call this when how the data is shown (e...
Volumes_t::iterator Volumes_i
FWGeometryBrowser * m_browser
FWLongParameter m_autoExpand
void firstColumnClicked(int row)
virtual int numberOfRows() const
Number of rows in the table.
void changeSelection(int iRow, int iColumn)