ATLAS Offline Software
Public Types | Public Member Functions | Private Member Functions | Private Attributes | List of all members
MuonVolumeHandle Class Reference

#include <MuonVolumeHandle.h>

Inheritance diagram for MuonVolumeHandle:
Collaboration diagram for MuonVolumeHandle:

Public Types

enum  MuonChamberState { NONMUONCHAMBER, MUONCHAMBERCHILD, MUONCHAMBER, MUONCHAMBER_DIRTY }
 
typedef std::vector< VolumeHandle * > VolumeHandleList
 
typedef VolumeHandleList::iterator VolumeHandleListItr
 
typedef VolumeHandleList::const_iterator VolumeHandleListConstItr
 

Public Member Functions

 MuonVolumeHandle (VolumeHandleSharedData *shared, VolumeHandle *parent, const GeoPVConstLink &pv, int childNumber, const MuonChamberState &mcs, const SbMatrix &accumTrans, const MuonGM::MuonStation *station, const QList< const std::map< GeoPVConstLink, float > * > &t0s)
 
virtual ~MuonVolumeHandle ()
 
virtual const MuonGM::MuonStationstation () const
 
virtual QString getDescriptiveName () const
 
virtual QString muonChamberT0 (unsigned int i) const
 
bool isInMuonChamber () const
 
bool isMuonChamber () const
 
void setMuonChamberDirty (bool)
 
bool muonChamberDirty () const
 
MuonChamberState muonChamberState () const
 
void initialiseChildren ()
 
bool childrenAreInitialised () const
 
unsigned nChildren () const
 
SoMaterial * material ()
 
QString getName () const
 
int copyNumber () const
 
quint32 hashID () const
 
GeoPVConstLink geoPVConstLink () const
 
const GeoMaterial * geoMaterial () const
 
std::string getNameStdString () const
 
bool hasName (const std::string &) const
 
const SbMatrix & getGlobalTransformToVolume () const
 
SbMatrix getLocalTransformToVolume () const
 
bool isPositiveZ () const
 
VolumeHandleparent ()
 
VolumeHandletopLevelParent ()
 
VolumeHandleListItr childrenBegin ()
 
VolumeHandleListItr childrenEnd ()
 
VolumeHandlechild (int index) const
 
int childNumber () const
 
VP1GeoFlags::VOLSTATE state () const
 
void setState (const VP1GeoFlags::VOLSTATE &state)
 
void reset ()
 
bool isAttached () const
 
void contractDaughtersRecursively ()
 
bool isEther () const
 
void expandMothersRecursivelyToNonEther ()
 
bool isInitialisedAndHasNonStandardShape () const
 
SoSeparator * nodeSoSeparator () const
 
void ensureBuildNodeSep ()
 
void updateLabels ()
 
QByteArray getPersistifiableState () const
 
void applyPersistifiableState (QByteArray)
 
VP1GeoFlags::SubSystemFlag subsystem () const
 

Private Member Functions

bool haveParentsNotExpanded () const
 
void attachAllContractedChildren ()
 
void detachAllContractedChildren ()
 

Private Attributes

const MuonGM::MuonStationm_station
 
const QList< const std::map< GeoPVConstLink, float > * > & m_chamberT0s
 
Impm_d
 
const int m_childNumber
 
const unsigned m_nchildren
 
MuonChamberState m_muonChamberState
 
VolumeHandlem_parent
 
VolumeHandleList m_children
 
VP1GeoFlags::VOLSTATE m_state
 

Detailed Description

Definition at line 23 of file MuonVolumeHandle.h.

Member Typedef Documentation

◆ VolumeHandleList

typedef std::vector<VolumeHandle *> VolumeHandle::VolumeHandleList
inherited

Definition at line 64 of file VolumeHandle.h.

◆ VolumeHandleListConstItr

typedef VolumeHandleList::const_iterator VolumeHandle::VolumeHandleListConstItr
inherited

Definition at line 66 of file VolumeHandle.h.

◆ VolumeHandleListItr

typedef VolumeHandleList::iterator VolumeHandle::VolumeHandleListItr
inherited

Definition at line 65 of file VolumeHandle.h.

Member Enumeration Documentation

◆ MuonChamberState

Enumerator
NONMUONCHAMBER 
MUONCHAMBERCHILD 
MUONCHAMBER 
MUONCHAMBER_DIRTY 

Definition at line 24 of file VolumeHandle.h.

24  { NONMUONCHAMBER,//Default
25  MUONCHAMBERCHILD,//Top-level parent is muon chamber
26  MUONCHAMBER,//Muon chamber, adjusted to event data
27  MUONCHAMBER_DIRTY };//Muon chamber, not adjusted to event data

Constructor & Destructor Documentation

◆ MuonVolumeHandle()

MuonVolumeHandle::MuonVolumeHandle ( VolumeHandleSharedData shared,
VolumeHandle parent,
const GeoPVConstLink &  pv,
int  childNumber,
const MuonChamberState mcs,
const SbMatrix &  accumTrans,
const MuonGM::MuonStation station,
const QList< const std::map< GeoPVConstLink, float > * > &  t0s 
)
inline

Definition at line 25 of file MuonVolumeHandle.h.

28  : VolumeHandle(shared, parent, pv, childNumber, mcs, accumTrans), m_station(station), m_chamberT0s(t0s)
29  {}

◆ ~MuonVolumeHandle()

virtual MuonVolumeHandle::~MuonVolumeHandle ( )
inlinevirtual

Definition at line 31 of file MuonVolumeHandle.h.

31 {};

Member Function Documentation

◆ applyPersistifiableState()

void VolumeHandle::applyPersistifiableState ( QByteArray  ba)
inherited

Definition at line 556 of file VolumeHandle.cxx.

557 {
558  QBuffer buffer(&ba);
559  buffer.open(QIODevice::ReadOnly);
560  QDataStream state(&buffer);
561  qint32 version;
562  state >> version;
563  if (version!=0)
564  return;//We ignore wrong versions silently here.
565  qint32 st;
566  state >> st;
568  if (st == 2)
569  newstate = VP1GeoFlags::ZAPPED;
570  else if (st == 1)
571  newstate = VP1GeoFlags::EXPANDED;
572 
573  Imp::VolState vs;
574  state >> vs;
575  buffer.close();
576 
577  if (newstate==VP1GeoFlags::EXPANDED) {
579  m_d->applyChildStates(vs,this);
580  }
581  setState(newstate);
582 }

◆ attachAllContractedChildren()

void VolumeHandle::attachAllContractedChildren ( )
privateinherited

Definition at line 422 of file VolumeHandle.cxx.

422  {
423 
424  if (!m_nchildren)
425  return;
426  if (!childrenAreInitialised())
428 
429  VolumeHandleListItr childItrE = m_children.end();
430  for (VolumeHandleListItr childItr = m_children.begin(); childItr!=childItrE; ++childItr) {
431  if ((*childItr)->state()==VP1GeoFlags::CONTRACTED)
432  (*childItr)->m_d->attach(*childItr);
433  else if ((*childItr)->state()==VP1GeoFlags::EXPANDED)
434  (*childItr)->attachAllContractedChildren();
435  }
436 }

◆ child()

VolumeHandle * VolumeHandle::child ( int  index) const
inlineinherited

Definition at line 150 of file VolumeHandle.h.

150 { return m_children.at(index); }

◆ childNumber()

int VolumeHandle::childNumber ( ) const
inlineinherited

Definition at line 151 of file VolumeHandle.h.

151 { return m_childNumber; }

◆ childrenAreInitialised()

bool VolumeHandle::childrenAreInitialised ( ) const
inlineinherited

Definition at line 146 of file VolumeHandle.h.

146 { return m_children.size()==m_nchildren; }

◆ childrenBegin()

VolumeHandle::VolumeHandleListItr VolumeHandle::childrenBegin ( )
inlineinherited

Definition at line 147 of file VolumeHandle.h.

147 { return m_children.begin(); }

◆ childrenEnd()

VolumeHandle::VolumeHandleListItr VolumeHandle::childrenEnd ( )
inlineinherited

Definition at line 148 of file VolumeHandle.h.

148 { return m_children.end(); }

◆ contractDaughtersRecursively()

void VolumeHandle::contractDaughtersRecursively ( )
inherited

Definition at line 403 of file VolumeHandle.cxx.

404 {
405  if (!childrenAreInitialised())
406  return;//Fine to abort since children starts in contracted state
407  //if initialised at a later time.
408  VolumeHandleListItr childItrE = m_children.end();
409  for (VolumeHandleListItr childItr = m_children.begin(); childItr!=childItrE; ++childItr) {
410  (*childItr)->setState(VP1GeoFlags::CONTRACTED);
411  (*childItr)->contractDaughtersRecursively();
412  }
413 }

◆ copyNumber()

int VolumeHandle::copyNumber ( ) const
inherited

Definition at line 455 of file VolumeHandle.cxx.

456 {
457  GeoPVConstLink parent_pV;
458  if (m_parent) {
459  parent_pV = m_parent->geoPVConstLink();
460  } else {
462  if (parent_pV==m_d->pV) {
463  //To follow historical behaviour, we always assume that
464  //tree-tops (in the GeoModel sense) have a copy number of 0.
465  return 0;
466  }
467  }
468  GeoVolumeCursor av(parent_pV);
469  int i(0);//We need to check the childNumber since volumes in a replica have same volume link
470  while (!av.atEnd()) {
471  if (m_childNumber==i&&m_d->pV==av.getVolume()) {
472  Query<int> Qint = av.getId();
473  return Qint.isValid() ? int(Qint) : -1;//-1 for "Invalid"
474  }
475  av.next();
476  ++i;
477  }
478  return -2;//error
479 }

◆ detachAllContractedChildren()

void VolumeHandle::detachAllContractedChildren ( )
privateinherited

Definition at line 439 of file VolumeHandle.cxx.

439  {
440  if (!m_nchildren)
441  return;
442  if (!childrenAreInitialised())
443  return;//Since children not initialised won't have been attached!
444 
445  VolumeHandleListItr childItrE = m_children.end();
446  for (VolumeHandleListItr childItr = m_children.begin(); childItr!=childItrE; ++childItr) {
447  if ((*childItr)->state()==VP1GeoFlags::CONTRACTED)
448  (*childItr)->m_d->detach();
449  else if ((*childItr)->state()==VP1GeoFlags::EXPANDED)
450  (*childItr)->detachAllContractedChildren();
451  }
452 }

◆ ensureBuildNodeSep()

void VolumeHandle::ensureBuildNodeSep ( )
inherited

Definition at line 238 of file VolumeHandle.cxx.

239 {
240  VP1Msg::messageDebug("VolumeHandle::ensureBuildNodeSep()");
241  if (m_d->nodesep && m_d->label_sep)
242  return;
243 
244  m_d->label_sep = new SoSeparator;
245  m_d->label_sep->ref();
246 
247  m_d->nodesep = new SoSeparator;//FIXME: rendercaching??
248  // m_d->nodesep->renderCaching.setValue(SoSeparator::ON);
249  // m_d->nodesep->boundingBoxCaching.setValue(SoSeparator::ON);
250  m_d->nodesep->ref();//Since we are keeping it around irrespective of whether it is attached or not.
251 
252  //Transform:
254 
255  //VP1Msg::messageDebug("calling toShapeNode()...");
256  SoNode * shape = m_d->commondata->toShapeNode(m_d->pV);//NB: Ignore contained transformation of GeoShapeShifts.
257  if (!shape) {
258  m_d->nodesep->removeAllChildren();
259  std::cout << "Geomsys/VolumeHandle Error: Null shape!!!"<<std::endl;
260  return;
261  }
262 
263  //What phi sector do we belong in?
264  int iphi = m_d->commondata->phiSectorManager()->getVolumeType(m_d->accumTrans, shape);
265 
266  if (iphi >= -1 ) {
267  //VP1Msg::messageDebug("Cylinders [iphi >= -1]...");
268  //Substitute shapes that are essentially cylinders with such. This
269  //can be done safely since this tube won't need
270  //phi-slicing and is done to gain render performance.
271  if ( m_d->pV->getLogVol()->getShape()->typeID()==GeoTube::getClassTypeID() )
272  {
273  //VP1Msg::messageDebug("GeoTube...");
274  const GeoTube * geotube = static_cast<const GeoTube*>(m_d->pV->getLogVol()->getShape());
275  if (geotube->getRMin()==0.0)
276  shape = m_d->commondata->getSoCylinderOrientedLikeGeoTube(geotube->getRMax(),geotube->getZHalfLength());
277  }
278  else if ( m_d->pV->getLogVol()->getShape()->typeID()==GeoTubs::getClassTypeID() )
279  {
280  //VP1Msg::messageDebug("GeoTubs...");
281  const GeoTubs * geotubs = static_cast<const GeoTubs*>(m_d->pV->getLogVol()->getShape());
282  if (geotubs->getRMin()==0.0 && geotubs->getDPhi() >= 2*M_PI-1.0e-6)
283  shape = m_d->commondata->getSoCylinderOrientedLikeGeoTube(geotubs->getRMax(),geotubs->getZHalfLength());
284  }
285  }
286 
287  //In the case of a GeoShapeShift we add its contained transformation here:
288  //Fixme: Remember to use this extra transformation for phisector cuts also!
289  if (m_d->pV->getLogVol()->getShape()->typeID()==GeoShapeShift::getClassTypeID())
290  m_d->nodesep->addChild(VP1LinAlgUtils::toSoTransform(Amg::EigenTransformToCLHEP(dynamic_cast<const GeoShapeShift*>(m_d->pV->getLogVol()->getShape())->getX())));
291 
292  //Add shape child(ren) and get the separator (helper) where we attach the nodesep when volume is visible:
293  if (iphi >= -1) {
294  m_d->nodesep->addChild(shape);
297  } else {
298  SoSwitch * sw = new SoSwitch;
299  sw->addChild(shape);
300  SoSeparator * sep_slicedvols = new SoSeparator;
301  sw->addChild(sep_slicedvols);
302  sw->whichChild = 0;
303  m_d->nodesep->addChild(sw);
305  //FIXME - what about labels?
306  }
307 
308  //Register shape to volume handle connection (for user interactions):
309  //NB: "shape" might be shared between several volumes, so we use the separator above for the actual link!
310  //(this must be done last as it also sets outline defaults)
312 
313  //VP1Msg::messageDebug("VolumeHandle::ensureBuildNodeSep() - DONE.");
314 }

◆ expandMothersRecursivelyToNonEther()

void VolumeHandle::expandMothersRecursivelyToNonEther ( )
inherited

Definition at line 518 of file VolumeHandle.cxx.

518  {
519  //std::cout<<"VolumeHandle::expandMothersRecursivelyToNonEther() for "<<this->getNameStdString() << " [" <<this<< "]" << " - n. children: " << nChildren() << std::endl;
520 
521  if (!nChildren()||!isEther()) {
522  //VP1Msg::messageDebug("====> no children or not 'Ether' material. Skipping & returning.");
523  return;
524  }
525 
528  VolumeHandleListItr childItrE = m_children.end();
529  for (VolumeHandleListItr childItr = m_children.begin(); childItr!=childItrE; ++childItr) {
530  //std::cout << "\t-->expanding child " << (*childItr)->getNameStdString() << " - " << (*childItr) << std::endl ;
531  (*childItr)->expandMothersRecursivelyToNonEther();
532  }
534  //std::cout<<"VolumeHandle::expandMothersRecursivelyToNonEther() for "<<this->getNameStdString() << " [" <<this<< "]" <<" DONE.\n\n"<<std::endl;
535 
536 }

◆ geoMaterial()

const GeoMaterial * VolumeHandle::geoMaterial ( ) const
inherited

Definition at line 507 of file VolumeHandle.cxx.

507  {
508  return geoPVConstLink()->getLogVol()->getMaterial();
509 }

◆ geoPVConstLink()

GeoPVConstLink VolumeHandle::geoPVConstLink ( ) const
inherited

Definition at line 163 of file VolumeHandle.cxx.

164 {
165  return m_d->pV;
166 }

◆ getDescriptiveName()

virtual QString MuonVolumeHandle::getDescriptiveName ( ) const
inlinevirtual

Reimplemented from VolumeHandle.

Definition at line 33 of file MuonVolumeHandle.h.

33  {
34  if (!m_station) return QString("Unknown");
35  QString name = QString(m_station->getStationName().c_str());
37 
38  return name;
39  }

◆ getGlobalTransformToVolume()

const SbMatrix & VolumeHandle::getGlobalTransformToVolume ( ) const
inherited

Definition at line 489 of file VolumeHandle.cxx.

489  {
490  return m_d->accumTrans;
491 }

◆ getLocalTransformToVolume()

SbMatrix VolumeHandle::getLocalTransformToVolume ( ) const
inherited

Definition at line 494 of file VolumeHandle.cxx.

494  {
495  if (!m_parent)
496  return m_d->accumTrans;
497  return m_parent->getGlobalTransformToVolume().inverse().multRight(m_d->accumTrans);
498 }

◆ getName()

QString VolumeHandle::getName ( ) const
inherited

Definition at line 169 of file VolumeHandle.cxx.

170 {
171  return m_d->pV->getLogVol()->getName().c_str();
172 }

◆ getNameStdString()

std::string VolumeHandle::getNameStdString ( ) const
inherited

Definition at line 175 of file VolumeHandle.cxx.

176 {
177  return m_d->pV->getLogVol()->getName();
178 }

◆ getPersistifiableState()

QByteArray VolumeHandle::getPersistifiableState ( ) const
inherited

Definition at line 539 of file VolumeHandle.cxx.

540 {
541  QByteArray ba;
542  QBuffer buffer(&ba);
543  buffer.open(QIODevice::WriteOnly);
544 
545  QDataStream out(&buffer);
546  out << (qint32)0;//version
548  out << Imp::getChildStates(this);
549 
550  buffer.close();
551  return ba;
552 
553 }

◆ hashID()

quint32 VolumeHandle::hashID ( ) const
inherited

Definition at line 482 of file VolumeHandle.cxx.

483 {
484  // return qHash( QPair<QString,quint32>(getName(),copyNumber()));//NOT UNIQUE!!
485  return qHash( QPair<QString,quint32>(getName(),childNumber()));
486 }

◆ hasName()

bool VolumeHandle::hasName ( const std::string &  n) const
inherited

Definition at line 181 of file VolumeHandle.cxx.

182 {
183  return m_d->pV->getLogVol()->getName() == n;
184 }

◆ haveParentsNotExpanded()

bool VolumeHandle::haveParentsNotExpanded ( ) const
privateinherited

Definition at line 416 of file VolumeHandle.cxx.

417 {
418  return m_parent ? ( m_parent->state()==VP1GeoFlags::EXPANDED ? m_parent->haveParentsNotExpanded() : true ) : false;
419 }

◆ initialiseChildren()

void VolumeHandle::initialiseChildren ( )
inherited

Definition at line 136 of file VolumeHandle.cxx.

137 {
139  return;
140 
141  assert(m_nchildren);
142 
143  //Loop over children:
144  m_children.reserve(m_nchildren);
145  unsigned ichild(0);
146  GeoVolumeCursor av(m_d->pV);
147  while (!av.atEnd()) {
148 
149  //Add transformation between parent and child to find the complete transformation of the child:
150  SbMatrix matr;
152  matr.multRight(m_d->accumTrans);
153  m_children.push_back(new VolumeHandle(m_d->commondata,this,av.getVolume(),ichild++,(isInMuonChamber()?MUONCHAMBERCHILD:NONMUONCHAMBER),matr));
154  //std::cout << "initialised: " << av.getName() << " - " << m_children.back()->getName().toStdString() << " - " << m_children.back() << std::endl;
155  av.next();
156  }
157 
158  assert(ichild==m_nchildren&&m_children.size()==m_nchildren);
159 
160 }

◆ isAttached()

bool VolumeHandle::isAttached ( ) const
inherited

Definition at line 501 of file VolumeHandle.cxx.

502 {
503  return m_d->isattached;
504 }

◆ isEther()

bool VolumeHandle::isEther ( ) const
inherited

Definition at line 512 of file VolumeHandle.cxx.

513 {
514  return !isMuonChamber() && QString(geoMaterial()->getName().c_str()).endsWith("Ether");
515 }

◆ isInitialisedAndHasNonStandardShape()

bool VolumeHandle::isInitialisedAndHasNonStandardShape ( ) const
inherited

Definition at line 656 of file VolumeHandle.cxx.

◆ isInMuonChamber()

bool VolumeHandle::isInMuonChamber ( ) const
inlineinherited

Definition at line 153 of file VolumeHandle.h.

◆ isMuonChamber()

bool VolumeHandle::isMuonChamber ( ) const
inlineinherited

Definition at line 154 of file VolumeHandle.h.

◆ isPositiveZ()

bool VolumeHandle::isPositiveZ ( ) const
inherited

Definition at line 663 of file VolumeHandle.cxx.

664 {
665  SbVec3f dir;
666  m_d->accumTrans.multDirMatrix(SbVec3f(0,0,1),dir);
667  float x,y,z;
668  dir.getValue(x,y,z);
669  return z>0;
670 }

◆ material()

SoMaterial * VolumeHandle::material ( )
inherited

Definition at line 187 of file VolumeHandle.cxx.

188 {
189  if (m_d->material)
190  return m_d->material;
191 
192  //First see if the "databases" of volumes/material know about this volume:
193 
194  SoMaterial * mat = m_d->commondata->volVisAttributes()->get(m_d->pV->getLogVol()->getName());
195  if (mat) {
196  m_d->material = mat;
197  m_d->material->ref();
198  return m_d->material;
199  }
200  mat = m_d->commondata->matVisAttributes()->get(m_d->pV->getLogVol()->getMaterial()->getName());
201  if (mat) {
202  m_d->material = mat;
203  m_d->material->ref();
204  return m_d->material;
205  }
206 
207  //Apparently not. We now have two ways of finding a material: We can
208  //take a system dependent fallback material, or we can take the
209  //material of the parent.
210 
212  if (mat) {
213  m_d->material = mat;
214  m_d->material->ref();
215  return m_d->material;
216  }
217 
218  if (m_parent) {
220  assert(m_d->material);
221  m_d->material->ref();
222  return m_d->material;
223  }
224 
225  m_d->material = m_d->commondata->matVisAttributes()->get("DEFAULT");
226  assert(m_d->material);
227  m_d->material->ref();
228  return m_d->material;
229 }

◆ muonChamberDirty()

bool VolumeHandle::muonChamberDirty ( ) const
inlineinherited

Definition at line 157 of file VolumeHandle.h.

◆ muonChamberState()

VolumeHandle::MuonChamberState VolumeHandle::muonChamberState ( ) const
inlineinherited

Definition at line 155 of file VolumeHandle.h.

155 { return m_muonChamberState; }

◆ muonChamberT0()

virtual QString MuonVolumeHandle::muonChamberT0 ( unsigned int  i) const
inlinevirtual

Reimplemented from VolumeHandle.

Definition at line 41 of file MuonVolumeHandle.h.

41  {
42  if (static_cast<int>(i)>=m_chamberT0s.size())
43  return "ERROR bad T0 source";
44  const std::map<GeoPVConstLink, float>* t0map = m_chamberT0s.at(i);
45  const QString no_info("?");
46  if (!t0map)
47  return no_info;
48  const std::map<GeoPVConstLink, float>::const_iterator it = t0map->find(geoPVConstLink());
49  return it==t0map->end() ? no_info : QString::number(it->second);
50  }

◆ nChildren()

unsigned VolumeHandle::nChildren ( ) const
inlineinherited

Definition at line 149 of file VolumeHandle.h.

149 { return m_nchildren; }

◆ nodeSoSeparator()

SoSeparator * VolumeHandle::nodeSoSeparator ( ) const
inherited

Definition at line 232 of file VolumeHandle.cxx.

233 {
234  return m_d->nodesep;
235 }

◆ parent()

VolumeHandle * VolumeHandle::parent ( )
inlineinherited

Definition at line 144 of file VolumeHandle.h.

144 { return m_parent; }

◆ reset()

void VolumeHandle::reset ( )
inlineinherited

Definition at line 158 of file VolumeHandle.h.

◆ setMuonChamberDirty()

void VolumeHandle::setMuonChamberDirty ( bool  b)
inlineinherited

Definition at line 156 of file VolumeHandle.h.

◆ setState()

void VolumeHandle::setState ( const VP1GeoFlags::VOLSTATE state)
inherited

Definition at line 350 of file VolumeHandle.cxx.

351 {
352  if (m_state==state)
353  return;
354 
355  //Mark muon chamber as dirty.
356  if (isInMuonChamber()) {
358  if (tp->m_muonChamberState == MUONCHAMBER)
359  tp->m_muonChamberState = MUONCHAMBER_DIRTY;
360  }
361 
362  //Update state flag and presence in GUI lists:
363  VP1GeoFlags::VOLSTATE oldstate = m_state;
364  m_state = state;
365  if (oldstate==VP1GeoFlags::ZAPPED)
367  else if (state==VP1GeoFlags::ZAPPED)
369 
370  //Only thing left is visibility updates (i.e. attachment to 3D scenegraph).
371 
372  if (haveParentsNotExpanded()) {
373  //No visibility updates necessary
374  assert(!m_d->isattached);
375  return;
376  }
377 
378  //We might need visibility updates. Which ones depend on the
379  //particular change of state:
380 
382  // VP1GeoFlags::EXPANDED/VP1GeoFlags::ZAPPED -> VP1GeoFlags::CONTRACTED: Show this and hide all children.
383  m_d->attach(this);
385  } else if (state==VP1GeoFlags::EXPANDED) {
386  // VP1GeoFlags::CONTRACTED -> VP1GeoFlags::EXPANDED: Hide this. Allow children to be shown.
387  // VP1GeoFlags::ZAPPED -> VP1GeoFlags::EXPANDED: Allow children to be shown.
388  if (oldstate==VP1GeoFlags::CONTRACTED)
389  m_d->detach();
391  } else {
392  assert(state==VP1GeoFlags::ZAPPED);
393  // VP1GeoFlags::CONTRACTED -> VP1GeoFlags::ZAPPED: Hide this.
394  // VP1GeoFlags::EXPANDED -> VP1GeoFlags::ZAPPED: Hide all children.
395  if (oldstate==VP1GeoFlags::CONTRACTED)
396  m_d->detach();
397  else
399  }
400 }

◆ state()

VP1GeoFlags::VOLSTATE VolumeHandle::state ( ) const
inlineinherited

Definition at line 152 of file VolumeHandle.h.

152 { return m_state; }

◆ station()

virtual const MuonGM::MuonStation* MuonVolumeHandle::station ( ) const
inlinevirtual

Definition at line 32 of file MuonVolumeHandle.h.

32 {return m_station;};

◆ subsystem()

VP1GeoFlags::SubSystemFlag VolumeHandle::subsystem ( ) const
inherited

Definition at line 585 of file VolumeHandle.cxx.

586 {
587  return m_d->commondata->subSystemFlag();
588 }

◆ topLevelParent()

VolumeHandle * VolumeHandle::topLevelParent ( )
inlineinherited

Definition at line 145 of file VolumeHandle.h.

145 { return m_parent ? m_parent->topLevelParent() : this; }

◆ updateLabels()

void VolumeHandle::updateLabels ( )
inherited

Definition at line 672 of file VolumeHandle.cxx.

672  {
673  int labels = m_d->commondata->controller()->labels();
674  QList<int> offsets = m_d->commondata->controller()->labelPosOffset();
675 
677 
678  if ( m_d->labels != labels || m_d->labelsPosOffsets != offsets){
679  m_d->labels = labels;
680  m_d->labelsPosOffsets = offsets;
681  m_d->label_sep->removeAllChildren ();
682 
683  SoText2 *labelText = new SoText2;
684  labelText->ref();
685  QStringList text;
686  if (labels&0x1){
687  QString name = getDescriptiveName();
688  text << name;
689  }
690 
691  // only one label selected - must be better way to do this!
692  bool singleLabel = (labels&0x2 && !(labels&0x4) && !(labels&0x8))
693  || (labels&0x4 && !(labels&0x2) && !(labels&0x8))
694  || (labels&0x8 && !(labels&0x2) && !(labels&0x4));
695  if (isInMuonChamber() && labels&0xE){
696  for (unsigned int i=0; i<3 ;++i){
697  // Check to see which label we use.
698  unsigned int mask=1<<(i+1);
699  if (!(labels&mask)) continue; // bits 1,2,3 are used for labels
700 
701  QString output;
702  if ( singleLabel ) {
703  output+="t0=";
704  } else {
705  if (i==0) output+="Moore t0=";
706  if (i==1) output+="Mboy t0=";
707  if (i==2) output+="<unknown>=";
708  }
709  output += muonChamberT0(i);
710  text << output;
711  }
712  }
713 
714  unsigned int row=0;
715  for(const QString& str : text){
716  QByteArray array = str.toLatin1();
717  labelText->string.set1Value(row++,array.data());
718  }
719 
720  SoTransform *labelTranslate = VP1LinAlgUtils::toSoTransform(m_d->accumTrans);
721  assert(labelTranslate!=0);
722  float offScale=10.0;
723  float labx,laby,labz;
724  labelTranslate->translation.getValue().getValue(labx,laby,labz);
725 // std::cout <<getNameStdString()<<" offsets (x,y,z)=("<<offsets[0]<<","<<offsets[1]<<","<<offsets[2]<<")"<<std::endl;
726 
727  labelTranslate->translation.setValue(labx+(offsets[0]*offScale),laby+(offsets[1]*offScale),labz+(offsets[2]*offScale));
728 
729  m_d->label_sep->addChild(labelTranslate);
730  m_d->label_sep->addChild(labelText);
731  }
732 
734 }

Member Data Documentation

◆ m_chamberT0s

const QList<const std::map<GeoPVConstLink, float>*>& MuonVolumeHandle::m_chamberT0s
private

Definition at line 54 of file MuonVolumeHandle.h.

◆ m_childNumber

const int VolumeHandle::m_childNumber
privateinherited

Definition at line 127 of file VolumeHandle.h.

◆ m_children

VolumeHandleList VolumeHandle::m_children
privateinherited

Definition at line 132 of file VolumeHandle.h.

◆ m_d

Imp* VolumeHandle::m_d
privateinherited

Definition at line 124 of file VolumeHandle.h.

◆ m_muonChamberState

MuonChamberState VolumeHandle::m_muonChamberState
privateinherited

Definition at line 129 of file VolumeHandle.h.

◆ m_nchildren

const unsigned VolumeHandle::m_nchildren
privateinherited

Definition at line 128 of file VolumeHandle.h.

◆ m_parent

VolumeHandle* VolumeHandle::m_parent
privateinherited

Definition at line 131 of file VolumeHandle.h.

◆ m_state

VP1GeoFlags::VOLSTATE VolumeHandle::m_state
privateinherited

Definition at line 133 of file VolumeHandle.h.

◆ m_station

const MuonGM::MuonStation* MuonVolumeHandle::m_station
private

Definition at line 53 of file MuonVolumeHandle.h.


The documentation for this class was generated from the following file:
VolumeHandleSharedData::fallBackTopLevelMaterial
SoMaterial * fallBackTopLevelMaterial() const
Definition: VolumeHandleSharedData.cxx:105
query_example.row
row
Definition: query_example.py:24
plotBeamSpotCompare.x1
x1
Definition: plotBeamSpotCompare.py:216
VolumeHandle::Imp::detach
void detach()
Definition: VolumeHandle.cxx:337
VolumeHandle::muonChamberT0
virtual QString muonChamberT0(unsigned int=0) const
Definition: VolumeHandle.h:168
VolumeHandle::isInMuonChamber
bool isInMuonChamber() const
Definition: VolumeHandle.h:153
VolumeHandle::Imp::material
SoMaterial * material
Definition: VolumeHandle.cxx:61
CaloCellPos2Ntuple.int
int
Definition: CaloCellPos2Ntuple.py:24
VP1GeoFlags::EXPANDED
@ EXPANDED
Definition: VP1GeoFlags.h:88
PhiSectorManager::getSepHelperForNode
VP1ExtraSepLayerHelper * getSepHelperForNode(VP1GeoFlags::SubSystemFlag flag, int iphi)
Definition: PhiSectorManager.cxx:92
index
Definition: index.py:1
VolumeHandle::Imp::hasNonStandardShapeChildren
static bool hasNonStandardShapeChildren(const SoGroup *g)
Definition: VolumeHandle.cxx:637
VolumeHandle::setState
void setState(const VP1GeoFlags::VOLSTATE &state)
Definition: VolumeHandle.cxx:350
TRTCalib_cfilter.t0s
list t0s
Definition: TRTCalib_cfilter.py:110
mat
GeoMaterial * mat
Definition: LArDetectorConstructionTBEC.cxx:55
VolumeHandle::material
SoMaterial * material()
Definition: VolumeHandle.cxx:187
VolumeHandle::geoMaterial
const GeoMaterial * geoMaterial() const
Definition: VolumeHandle.cxx:507
VolumeHandle::attachAllContractedChildren
void attachAllContractedChildren()
Definition: VolumeHandle.cxx:422
plotBeamSpotCompare.x2
x2
Definition: plotBeamSpotCompare.py:218
VolumeHandle::topLevelParent
VolumeHandle * topLevelParent()
Definition: VolumeHandle.h:145
VolumeHandle::Imp::attach
void attach(VolumeHandle *vh)
Definition: VolumeHandle.cxx:317
skel.it
it
Definition: skel.GENtoEVGEN.py:396
VolumeHandle::MUONCHAMBER_DIRTY
@ MUONCHAMBER_DIRTY
Definition: VolumeHandle.h:27
python.AthDsoLogger.out
out
Definition: AthDsoLogger.py:71
M_PI
#define M_PI
Definition: ActiveFraction.h:11
VolumeHandle::geoPVConstLink
GeoPVConstLink geoPVConstLink() const
Definition: VolumeHandle.cxx:163
ParticleTest.tp
tp
Definition: ParticleTest.py:25
VolumeHandleSharedData::volVisAttributes
VolVisAttributes * volVisAttributes() const
Definition: VolumeHandleSharedData.cxx:99
VolumeHandle::Imp::isattached
bool isattached
Definition: VolumeHandle.cxx:66
VolumeHandle::m_parent
VolumeHandle * m_parent
Definition: VolumeHandle.h:131
VolumeHandle::m_children
VolumeHandleList m_children
Definition: VolumeHandle.h:132
VolumeHandle::m_d
Imp * m_d
Definition: VolumeHandle.h:124
VolumeHandle::isMuonChamber
bool isMuonChamber() const
Definition: VolumeHandle.h:154
VolumeHandle::parent
VolumeHandle * parent()
Definition: VolumeHandle.h:144
MuonGM::MuonStation::getStationName
const std::string & getStationName() const
like BMS5, T1F1, CSL1
Definition: MuonStation.h:165
x
#define x
VolumeHandle::childrenAreInitialised
bool childrenAreInitialised() const
Definition: VolumeHandle.h:146
python.utils.AtlRunQueryLookup.mask
string mask
Definition: AtlRunQueryLookup.py:460
MuonVolumeHandle::m_station
const MuonGM::MuonStation * m_station
Definition: MuonVolumeHandle.h:53
MuonVolumeHandle::station
virtual const MuonGM::MuonStation * station() const
Definition: MuonVolumeHandle.h:32
PhiSectorManager::getVolumeType
int getVolumeType(const SbMatrix &transform, SoNode *shape) const
Definition: PhiSectorManager.cxx:215
PhiSectorManager::registerVolumeAroundZAxis
VP1ExtraSepLayerHelper * registerVolumeAroundZAxis(VP1GeoFlags::SubSystemFlag flag, SoSwitch *sw, const SbMatrix &tranformation)
Definition: PhiSectorManager.cxx:144
VP1HEPVisUtils::initAllCustomClasses
static void initAllCustomClasses()
Definition: VP1HEPVisUtils.cxx:317
VolumeHandleSharedData::phiSectorManager
PhiSectorManager * phiSectorManager() const
Definition: VolumeHandleSharedData.cxx:117
VolumeHandle::detachAllContractedChildren
void detachAllContractedChildren()
Definition: VolumeHandle.cxx:439
VolumeHandle::Imp::getChildStates
static VolState getChildStates(const VolumeHandle *theclass)
Definition: VolumeHandle.cxx:591
MuonGM::MuonStation::getPhiIndex
int getPhiIndex() const
a la AMDB
Definition: MuonStation.h:162
beamspotnt.labels
list labels
Definition: bin/beamspotnt.py:1447
createCoolChannelIdFile.buffer
buffer
Definition: createCoolChannelIdFile.py:12
VolumeHandle::Imp::applyChildStates
static void applyChildStates(const VolState &, VolumeHandle *theclass)
Definition: VolumeHandle.cxx:608
VolumeHandleSharedData::registerNodeSepForVolumeHandle
void registerNodeSepForVolumeHandle(SoSeparator *, VolumeHandle *)
Definition: VolumeHandleSharedData.cxx:129
lumiFormat.i
int i
Definition: lumiFormat.py:85
z
#define z
VolumeHandle::Imp::labels
int labels
Definition: VolumeHandle.cxx:63
beamspotman.n
n
Definition: beamspotman.py:731
VolumeHandle::Imp::commondata
VolumeHandleSharedData * commondata
Definition: VolumeHandle.cxx:53
VolumeHandle::m_state
VP1GeoFlags::VOLSTATE m_state
Definition: VolumeHandle.h:133
VolumeHandle::m_muonChamberState
MuonChamberState m_muonChamberState
Definition: VolumeHandle.h:129
VP1ExtraSepLayerHelper::largeChangesEnd
void largeChangesEnd()
Definition: VP1ExtraSepLayerHelper.cxx:156
VolumeHandle::Imp::nodesep
SoSeparator * nodesep
Definition: VolumeHandle.cxx:60
VolumeHandle::VolumeHandle
VolumeHandle(VolumeHandleSharedData *, VolumeHandle *parent, const GeoPVConstLink &, int childNumber, const MuonChamberState &mcs=NONMUONCHAMBER, const SbMatrix &accumTrans=SbMatrix())
Definition: VolumeHandle.cxx:97
VP1ExtraSepLayerHelper::largeChangesBegin
void largeChangesBegin()
Definition: VP1ExtraSepLayerHelper.cxx:135
VP1GeoFlags::VOLSTATE
VOLSTATE
Definition: VP1GeoFlags.h:87
VolumeHandle::Imp::label_sep
SoSeparator * label_sep
Definition: VolumeHandle.cxx:62
VolumeHandle::initialiseChildren
void initialiseChildren()
Definition: VolumeHandle.cxx:136
VolumeHandleSharedData::geoPVConstLinkOfTreeTopsMother
GeoPVConstLink geoPVConstLinkOfTreeTopsMother() const
Definition: VolumeHandleSharedData.cxx:213
VolumeHandle::nChildren
unsigned nChildren() const
Definition: VolumeHandle.h:149
VolumeHandle::Imp::pV
GeoPVConstLink pV
Definition: VolumeHandle.cxx:54
VolumeHandle::isEther
bool isEther() const
Definition: VolumeHandle.cxx:512
VolumeHandle
Definition: VolumeHandle.h:21
beamspotman.dir
string dir
Definition: beamspotman.py:623
lumiFormat.array
array
Definition: lumiFormat.py:91
merge.output
output
Definition: merge.py:17
VolumeHandle::haveParentsNotExpanded
bool haveParentsNotExpanded() const
Definition: VolumeHandle.cxx:416
python.selection.number
number
Definition: selection.py:20
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:228
plotBeamSpotMon.b
b
Definition: plotBeamSpotMon.py:77
VP1LinAlgUtils::transformToMatrix
static void transformToMatrix(SoTransform *xf, SbMatrix &result)
Definition: VP1LinAlgUtils.cxx:101
VolumeHandle::childNumber
int childNumber() const
Definition: VolumeHandle.h:151
VolumeHandle::Imp::attachsepHelper
VP1ExtraSepLayerHelper * attachsepHelper
Definition: VolumeHandle.cxx:57
MuonVolumeHandle::m_chamberT0s
const QList< const std::map< GeoPVConstLink, float > * > & m_chamberT0s
Definition: MuonVolumeHandle.h:54
VolumeHandle::getName
QString getName() const
Definition: VolumeHandle.cxx:169
VolumeHandleSharedData::subSystemFlag
VP1GeoFlags::SubSystemFlag subSystemFlag() const
Definition: VolumeHandleSharedData.cxx:111
VolumeHandleSharedData::removeZappedVolumesFromGui
void removeZappedVolumesFromGui(VolumeHandle *)
Definition: VolumeHandleSharedData.cxx:225
PhiSectorManager::getLabelSepHelperForNode
VP1ExtraSepLayerHelper * getLabelSepHelperForNode(VP1GeoFlags::SubSystemFlag flag, int iphi)
Addition to handle label separators, in exactly the same way as getSepHelperForNode(....
Definition: PhiSectorManager.cxx:118
VP1GeoFlags::ZAPPED
@ ZAPPED
Definition: VP1GeoFlags.h:89
get_generator_info.version
version
Definition: get_generator_info.py:33
VP1Msg::messageDebug
static void messageDebug(const QString &)
Definition: VP1Msg.cxx:39
y
#define y
MuonGM::MuonStation::getEtaIndex
int getEtaIndex() const
a la AMDB
Definition: MuonStation.h:163
VolumeHandleSharedData::addZappedVolumeToGui
void addZappedVolumeToGui(VolumeHandle *)
Definition: VolumeHandleSharedData.cxx:219
Amg::EigenTransformToCLHEP
HepGeom::Transform3D EigenTransformToCLHEP(const Amg::Transform3D &eigenTransf)
Converts an Eigen-based Amg::Transform3D into a CLHEP-based HepGeom::Transform3D.
Definition: CLHEPtoEigenConverter.h:120
python.changerun.pv
pv
Definition: changerun.py:81
VolumeHandle::MUONCHAMBERCHILD
@ MUONCHAMBERCHILD
Definition: VolumeHandle.h:25
VolumeHandle::VolumeHandleListItr
VolumeHandleList::iterator VolumeHandleListItr
Definition: VolumeHandle.h:65
VolumeHandle::state
VP1GeoFlags::VOLSTATE state() const
Definition: VolumeHandle.h:152
VolumeHandle::Imp::accumTrans
const SbMatrix accumTrans
Definition: VolumeHandle.cxx:55
VolumeHandle::Imp::attachlabelSepHelper
VP1ExtraSepLayerHelper * attachlabelSepHelper
Definition: VolumeHandle.cxx:58
VolumeHandle::m_childNumber
const int m_childNumber
Definition: VolumeHandle.h:127
makeTransCanvas.text
text
Definition: makeTransCanvas.py:11
GeoSysController::labels
int labels() const
Definition: GeoSysController.cxx:520
VolumeHandle::Imp::labelsPosOffsets
QList< int > labelsPosOffsets
Definition: VolumeHandle.cxx:64
str
Definition: BTagTrackIpAccessor.cxx:11
VolumeHandleSharedData::controller
GeoSysController * controller() const
Definition: VolumeHandleSharedData.cxx:123
VolumeHandle::MUONCHAMBER
@ MUONCHAMBER
Definition: VolumeHandle.h:26
VolumeHandleSharedData::toShapeNode
SoNode * toShapeNode(const GeoPVConstLink &pV)
Definition: VolumeHandleSharedData.cxx:163
VolumeHandle::NONMUONCHAMBER
@ NONMUONCHAMBER
Definition: VolumeHandle.h:24
GeoSysController::labelPosOffset
QList< int > labelPosOffset()
Offset in x,y,z.
Definition: GeoSysController.cxx:531
VisAttributes::get
SoMaterial * get(const std::string &name) const
Definition: VisAttributes.cxx:113
VolumeHandleSharedData::getSoCylinderOrientedLikeGeoTube
SoNode * getSoCylinderOrientedLikeGeoTube(const double &radius, const double &halfLength)
Definition: VolumeHandleSharedData.cxx:191
VP1LinAlgUtils::toSoTransform
static SoTransform * toSoTransform(const HepGeom::Transform3D &, SoTransform *t=0)
Definition: VP1LinAlgUtils.cxx:40
VolumeHandle::m_nchildren
const unsigned m_nchildren
Definition: VolumeHandle.h:128
VolumeHandle::getGlobalTransformToVolume
const SbMatrix & getGlobalTransformToVolume() const
Definition: VolumeHandle.cxx:489
VolumeHandle::getDescriptiveName
virtual QString getDescriptiveName() const
Definition: VolumeHandle.h:162
VolumeHandleSharedData::matVisAttributes
MatVisAttributes * matVisAttributes() const
Definition: VolumeHandleSharedData.cxx:93
VP1GeoFlags::CONTRACTED
@ CONTRACTED
Definition: VP1GeoFlags.h:87
VolumeHandle::contractDaughtersRecursively
void contractDaughtersRecursively()
Definition: VolumeHandle.cxx:403