ATLAS Offline Software
Loading...
Searching...
No Matches
PRDHandle_SpacePoint Class Reference

#include <PRDHandle_SpacePoint.h>

Inheritance diagram for PRDHandle_SpacePoint:
Collaboration diagram for PRDHandle_SpacePoint:

Classes

class  Imp

Public Member Functions

 PRDHandle_SpacePoint (PRDCollHandle_SpacePoints *, const Trk::SpacePoint *)
virtual ~PRDHandle_SpacePoint ()
void buildShapes (SoNode *&shape_simple, SoNode *&shape_detailed)
int regionIndex ()
Amg::Vector3D center () const
bool isSCT ()
bool isPixel ()
const Trk::SpacePointspacePoint () const
const Trk::PrepRawDatagetPRD () const
const Trk::PrepRawDatagetSecondPRD () const
bool isBarrel () const
bool isPositiveZ () const
void setVisible (bool)
bool visible () const
virtual bool highLight () const
virtual bool transformUsesSurfacePositionOnly () const
SoSeparator * sepSimple () const
SoSeparator * sepDetailed () const
PRDSysCommonDatacommon () const
Amg::Vector3D positionPRD () const
Amg::Vector3D positionSecondPRD () const
Amg::Transform3D getTransform_CLHEP () const
virtual SoTransform * createTransform () const
void update3DObjects ()
void updateMaterial ()
virtual QStringList clicked () const
virtual bool inMuonChamber () const
virtual GeoPVConstLink parentMuonChamberPV () const
PRDCollHandleBasecollHandle () const
virtual bool isSane () const
 Returns false if the PRD is not safe to draw.

Private Attributes

const Trk::SpacePointm_sp
Impm_d
PRDSysCommonDatam_common
bool m_visible

Detailed Description

Definition at line 33 of file PRDHandle_SpacePoint.h.

Constructor & Destructor Documentation

◆ PRDHandle_SpacePoint()

PRDHandle_SpacePoint::PRDHandle_SpacePoint ( PRDCollHandle_SpacePoints * ch,
const Trk::SpacePoint * sp )

Definition at line 32 of file PRDHandle_SpacePoint.cxx.

33 : PRDHandleBase(ch), m_sp(sp), m_d(new Imp)
34{
35}
static Double_t sp
PRDHandleBase(PRDCollHandleBase *)
const Trk::SpacePoint * m_sp

◆ ~PRDHandle_SpacePoint()

PRDHandle_SpacePoint::~PRDHandle_SpacePoint ( )
virtual

Definition at line 38 of file PRDHandle_SpacePoint.cxx.

39{
40 delete m_d;
41}

Member Function Documentation

◆ buildShapes()

void PRDHandle_SpacePoint::buildShapes ( SoNode *& shape_simple,
SoNode *& shape_detailed )
virtual

Implements PRDHandleBase.

Definition at line 54 of file PRDHandle_SpacePoint.cxx.

55{
56 if (getSecondPRD()) {
58 Amg::Vector3D p((prdtransform.inverse())*(m_sp->globalPosition()));
59 SoPointSet * points = new SoPointSet;
60 SoVertexProperty * vertices = new SoVertexProperty;
61 vertices->vertex.set1Value(0,p.x(),p.y(),p.z());
62 points->numPoints=1;
63 points->vertexProperty.setValue(vertices);
64 shape_simple = points;
65 } else {
66 shape_simple = common()->nodeManager()->getShapeNode_Point();
67 }
68 shape_detailed = shape_simple;
69}
Amg::Transform3D getTransform_CLHEP() const
PRDSysCommonData * common() const
const Trk::PrepRawData * getSecondPRD() const
HitsSoNodeManager * nodeManager() const
Eigen::Affine3d Transform3D
Eigen::Matrix< double, 3, 1 > Vector3D

◆ center()

Amg::Vector3D PRDHandle_SpacePoint::center ( ) const
inlinevirtual

Reimplemented from PRDHandleBase.

Definition at line 42 of file PRDHandle_SpacePoint.h.

42{ return m_sp->globalPosition(); }

◆ clicked()

QStringList PRDHandleBase::clicked ( ) const
virtualinherited

Reimplemented in PRDHandle_CSC, PRDHandle_CSC_Strip, PRDHandle_MDT, PRDHandle_MM, PRDHandle_RPC, and PRDHandle_TRT.

Definition at line 276 of file PRDHandleBase.cxx.

277{
278 const Trk::PrepRawData * prd = getPRD();
279 if (!prd)
280 return QStringList("Null PRD");
281 std::ostringstream os;
282 os << *(prd);
283 return QString(os.str().c_str()).split("\n");
284}
virtual const Trk::PrepRawData * getPRD() const =0

◆ collHandle()

PRDCollHandleBase * PRDHandleBase::collHandle ( ) const
inherited

Definition at line 228 of file PRDHandleBase.cxx.

229{
230 return m_d->colhandle;
231}

◆ common()

PRDSysCommonData * PRDHandleBase::common ( ) const
inlineinherited

Definition at line 53 of file PRDHandleBase.h.

53{ return m_common; }
PRDSysCommonData * m_common

◆ createTransform()

SoTransform * PRDHandleBase::createTransform ( ) const
virtualinherited

Reimplemented in PRDHandle_sTGC, and PRDHandle_TGC.

Definition at line 371 of file PRDHandleBase.cxx.

372{
373 //NB: Some code duplicated here and in the getTransform_CLHEP() method.
374 const Trk::PrepRawData * prd = getPRD();
375 if (!prd) {
376 std::cerr<<"PRDHandleBase::createTransform() No prd!"<<std::endl;
377 return new SoTransform;
378 }
379 const Trk::Surface& theSurface = prd->detectorElement()->surface(prd->identify());
380 SoTransform * theHitTransform = VP1LinAlgUtils::toSoTransform(theSurface.transform());
381
382 Amg::Vector3D theHitGPos;
384 // for tubes, should use position of center of tube (if drawing full tube)
385 theHitGPos= Amg::Vector3D (theSurface.center());
386 } else {
387 // for strips, clusters or short tubes, use position of hit.
388 theHitGPos = theSurface.localToGlobal(prd->localPosition());
389 }
390 if ((theHitGPos)[0]!=(theHitGPos)[0] || (theHitGPos)[1]!=(theHitGPos)[1] || (theHitGPos)[2]!=(theHitGPos)[2]){
391 std::cerr<<"PRDHandleBase::createTransform() NaN in globalposition"<<std::endl;
392 }
393 theHitTransform->translation.setValue((theHitGPos)[0], (theHitGPos)[1], (theHitGPos)[2]);
394 return theHitTransform;
395}
virtual bool transformUsesSurfacePositionOnly() const
virtual const TrkDetElementBase * detectorElement() const =0
return the detector element corresponding to this PRD The pointer will be zero if the det el is not d...
const Amg::Vector2D & localPosition() const
return the local position reference
Identifier identify() const
return the identifier
const Amg::Transform3D & transform() const
Returns HepGeom::Transform3D by reference.
const Amg::Vector3D & center() const
Returns the center position of the Surface.
virtual void localToGlobal(const Amg::Vector2D &locp, const Amg::Vector3D &mom, Amg::Vector3D &glob) const =0
Specified by each surface type: LocalToGlobal method without dynamic memory allocation.
virtual const Surface & surface() const =0
Return surface associated with this detector element.
static SoTransform * toSoTransform(const HepGeom::Transform3D &, SoTransform *t=0)

◆ getPRD()

const Trk::PrepRawData * PRDHandle_SpacePoint::getPRD ( ) const
inlinevirtual

Implements PRDHandleBase.

Definition at line 49 of file PRDHandle_SpacePoint.h.

49{ return m_sp->clusterList().first; }

◆ getSecondPRD()

const Trk::PrepRawData * PRDHandle_SpacePoint::getSecondPRD ( ) const
inlinevirtual

Reimplemented from PRDHandleBase.

Definition at line 50 of file PRDHandle_SpacePoint.h.

50{ return m_sp->clusterList().second; }

◆ getTransform_CLHEP()

Amg::Transform3D PRDHandleBase::getTransform_CLHEP ( ) const
inherited

Definition at line 322 of file PRDHandleBase.cxx.

323{
324 if (m_d->sepDetailed&&m_d->sepDetailed->getNumChildren()>0) {
325 //For efficiency/consistency we simply copy the transform from the
326 //inventor transformation (only loose slight precision in the
327 //double->float->double conversions):
328 SoTransform * transform = static_cast<SoTransform*>(m_d->sepDetailed->getChild(0));
329 float tx, ty, tz;
330 transform->translation.getValue().getValue(tx,ty,tz);
331 SbVec3f so_rotaxis;
332 float so_rotangle;
333 transform->rotation.getValue().getValue(so_rotaxis, so_rotangle);
334 float rx, ry, rz;
335 so_rotaxis.getValue(rx,ry,rz);
336 Amg::Vector3D axis(rx,ry,rz);
337// Amg::AngleAxis3D angleAxis = Amg::getRotation3DfromAngleAxis( so_rotangle, axis );
338// Amg::Rotation3D rot;
339// rot = angleAxis;
340 Amg::Rotation3D rot = Amg::getRotation3DfromAngleAxis( so_rotangle, axis );
341 return Amg::Translation3D(tx,ty,tz) * rot;
342 }
343 std::cout<<"VP1 PRDHandleBase Warning: getTransform_CLHEP called at inopportune moment!!"<<std::endl;
344
345 //NB: Some code duplicated here and in the createTransform() method.
346
347 const Trk::PrepRawData * prd = getPRD();
348 if (!prd) {
349 return Amg::Transform3D::Identity();
350 }
351 const Trk::Surface& theSurface = prd->detectorElement()->surface(prd->identify());
352 Amg::Vector3D theHitGPos;
354 // for tubes, should use position of center of tube (if drawing full tube)
355 theHitGPos= Amg::Vector3D(theSurface.center());
356 } else {
357 // for clusters or short tubes, use position of hit.
358 theHitGPos = theSurface.localToGlobal(prd->localPosition()); //theSurface 'new s' a Vector3D and returns pointer
359 }
360
361// CLHEP::Hep3Vector t(theSurface.transform().getTranslation());
362// return HepGeom::Transform3D( HepGeom::Translate3D(theHitGPos->x()-t.x(),theHitGPos->y()-t.y(),theHitGPos->z()-t.z()) * (theSurface.transform()) );
365 Amg::Translation3D transl = Amg::Translation3D(theHitGPos.x()-t.x(), theHitGPos.y()-t.y(), theHitGPos.z()-t.z());
366 Amg::Transform3D transf = transl * (theSurface.transform());
367 return transf;
368}
static Double_t rz
Amg::Vector3D getTranslationVectorFromTransform(const Amg::Transform3D &tr)
Get the Translation vector out of a Transformation.
Eigen::Quaternion< double > Rotation3D
Amg::Rotation3D getRotation3DfromAngleAxis(double angle, Amg::Vector3D &axis)
get a AngleAxis from an angle and an axis.
Amg::Vector3D transform(Amg::Vector3D &v, Amg::Transform3D &tr)
Transform a point from a Trasformation3D.
Eigen::Translation< double, 3 > Translation3D

◆ highLight()

virtual bool PRDHandleBase::highLight ( ) const
inlinevirtualinherited

Reimplemented in PRDHandle_MDT, and PRDHandle_TRT.

Definition at line 45 of file PRDHandleBase.h.

45{ return false; }//Return true to get hit highlighted (for e.g. a TRT hits with HT).

◆ inMuonChamber()

virtual bool PRDHandleBase::inMuonChamber ( ) const
inlinevirtualinherited

Reimplemented in PRDHandle_CSC, PRDHandle_CSC_Strip, PRDHandle_MDT, PRDHandle_MM, PRDHandle_RPC, PRDHandle_sTGC, and PRDHandle_TGC.

Definition at line 67 of file PRDHandleBase.h.

67{ return false; }

◆ isBarrel()

bool PRDHandle_SpacePoint::isBarrel ( ) const
inline

Definition at line 51 of file PRDHandle_SpacePoint.h.

52 { return static_cast<const InDetDD::SiDetectorElement*>(getPRD()->detectorElement())->isBarrel(); }
const Trk::PrepRawData * getPRD() const

◆ isPixel()

bool PRDHandle_SpacePoint::isPixel ( )
inline

Definition at line 46 of file PRDHandle_SpacePoint.h.

46{ return !getSecondPRD(); }

◆ isPositiveZ()

bool PRDHandle_SpacePoint::isPositiveZ ( ) const
inline

Definition at line 53 of file PRDHandle_SpacePoint.h.

53{ return m_sp->globalPosition().z() > 0.0; }

◆ isSane()

virtual bool PRDHandleBase::isSane ( ) const
inlinevirtualinherited

Returns false if the PRD is not safe to draw.

Reimplemented in PRDHandle_Pixel.

Definition at line 75 of file PRDHandleBase.h.

◆ isSCT()

bool PRDHandle_SpacePoint::isSCT ( )
inline

Definition at line 45 of file PRDHandle_SpacePoint.h.

45{ return getSecondPRD(); }

◆ parentMuonChamberPV()

virtual GeoPVConstLink PRDHandleBase::parentMuonChamberPV ( ) const
inlinevirtualinherited

Reimplemented in PRDHandle_CSC, PRDHandle_CSC_Strip, PRDHandle_MDT, PRDHandle_MM, PRDHandle_RPC, PRDHandle_sTGC, and PRDHandle_TGC.

Definition at line 68 of file PRDHandleBase.h.

68{ return GeoPVConstLink(); }

◆ positionPRD()

Amg::Vector3D PRDHandleBase::positionPRD ( ) const
inherited

Definition at line 303 of file PRDHandleBase.cxx.

304{
305 return Imp::positionPRD(getPRD());
306}
static Amg::Vector3D positionPRD(const Trk::PrepRawData *prd)

◆ positionSecondPRD()

Amg::Vector3D PRDHandleBase::positionSecondPRD ( ) const
inherited

Definition at line 309 of file PRDHandleBase.cxx.

310{
312}
virtual const Trk::PrepRawData * getSecondPRD() const

◆ regionIndex()

int PRDHandle_SpacePoint::regionIndex ( )
virtual

Reimplemented from PRDHandleBase.

Definition at line 44 of file PRDHandle_SpacePoint.cxx.

44 {
45 static const double l=isSCT() ? 100.0 : 200.0;//CLHEP::mm
47 return static_cast<int>(c.z()/l)
48 +1000*static_cast<int>(c.y()/l)
49 +1000000*static_cast<int>(c.x()/l);
50 //Fixme: Use identifiers instead for more intuitive regions.
51}
Amg::Vector3D center() const
l
Printing final latex table to .tex output file.

◆ sepDetailed()

SoSeparator * PRDHandleBase::sepDetailed ( ) const
inherited

Definition at line 60 of file PRDHandleBase.cxx.

61{
62 return m_d->sepDetailed;
63}

◆ sepSimple()

SoSeparator * PRDHandleBase::sepSimple ( ) const
inherited

Definition at line 54 of file PRDHandleBase.cxx.

55{
56 return m_d->sepSimple;
57}

◆ setVisible()

void PRDHandleBase::setVisible ( bool vis)
inherited

Definition at line 234 of file PRDHandleBase.cxx.

235{
236 if (vis==m_visible)
237 return;
238 //std::cout<<"Changing visible status from "<<m_visible<<" to "<<vis<<" for: "<<*getPRD()<<std::endl;
239 m_visible=vis;
240 if (vis) {
241 m_d->colhandle->incrementNShownHandles();
242 if (inMuonChamber())
244 if (!m_d->sepSimple||!m_d->sepDetailed)
245 m_d->rebuild3DObjects(this);//The call to rebuild also fixes attached state.
246 else
247 m_d->attach3DObjects(this);
248 } else {
249 m_d->colhandle->decrementNShownHandles();
250 if (inMuonChamber())
252 m_d->detach3DObjects();
253 }
254}
virtual bool inMuonChamber() const
virtual GeoPVConstLink parentMuonChamberPV() const
TouchedMuonChamberHelper * touchedMuonChamberHelper() const
void decrementNumberOfObjectsForPV(const GeoPVConstLink &chamberPV)
void incrementNumberOfObjectsForPV(const GeoPVConstLink &chamberPV)

◆ spacePoint()

const Trk::SpacePoint * PRDHandle_SpacePoint::spacePoint ( ) const
inline

Definition at line 48 of file PRDHandle_SpacePoint.h.

48{ return m_sp; }

◆ transformUsesSurfacePositionOnly()

virtual bool PRDHandleBase::transformUsesSurfacePositionOnly ( ) const
inlinevirtualinherited

Reimplemented in PRDHandle_MDT, and PRDHandle_TRT.

Definition at line 47 of file PRDHandleBase.h.

47{ return false; }//Override and return true if should use just the surface position.

◆ update3DObjects()

void PRDHandleBase::update3DObjects ( )
inherited

Definition at line 257 of file PRDHandleBase.cxx.

257 {
258 //Fixme: If selected we really need to redo selection updates!!!
259 if (m_visible) {
260 m_d->rebuild3DObjects(this);
261 } else {
262 //Simply clear the present 3D objects. They will only be recreated if/when the prd becomes visible again.
263 if (m_d->sepDetailed) {
264 m_d->sepDetailed->unref();
265 m_d->sepDetailed = 0;
266 }
267 if (m_d->sepSimple) {
268 m_d->sepSimple->unref();
269 m_d->sepSimple = 0;
270 }
271 }
272
273}

◆ updateMaterial()

void PRDHandleBase::updateMaterial ( )
inherited

Definition at line 160 of file PRDHandleBase.cxx.

161{
162 //We need to change the current material. This means we need to
163 //clear the cache. Only if we are visible do we need to do a
164 //detach->clear material->attach cycle to trigger attachment under new material.
165
166 if (!m_d->currentmaterial)
167 return;//We have no material cached and is thus not attached either.
168 if (m_visible) {
169 //See if the material changed. If it did, detach, update the material, attach again.
170 SoMaterial * newmat = m_d->determineMaterial(this);
171 newmat->ref();
172 if (newmat!=m_d->currentmaterial) {
173 m_d->detach3DObjects();
174 m_d->currentmaterial->unref();
175 m_d->currentmaterial = newmat;
176 m_d->attach3DObjects(this);
177 } else {
178 newmat->unref();
179 }
180 } else {
181 //Just clear material.
182 m_d->currentmaterial->unref();
183 m_d->currentmaterial = 0;
184 }
185}

◆ visible()

bool PRDHandleBase::visible ( ) const
inlineinherited

Definition at line 42 of file PRDHandleBase.h.

42{ return m_visible; }

Member Data Documentation

◆ m_common

PRDSysCommonData* PRDHandleBase::m_common
privateinherited

Definition at line 84 of file PRDHandleBase.h.

◆ m_d

Imp* PRDHandle_SpacePoint::m_d
private

Definition at line 63 of file PRDHandle_SpacePoint.h.

◆ m_sp

const Trk::SpacePoint* PRDHandle_SpacePoint::m_sp
private

Definition at line 61 of file PRDHandle_SpacePoint.h.

◆ m_visible

bool PRDHandleBase::m_visible
privateinherited

Definition at line 86 of file PRDHandleBase.h.


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