76#include <Inventor/nodes/SoLineSet.h>
77#include <Inventor/nodes/SoSeparator.h>
78#include <Inventor/nodes/SoVertexProperty.h>
79#include <Inventor/nodes/SoPointSet.h>
80#include <Inventor/nodes/SoCamera.h>
81#include <Inventor/nodes/SoCylinder.h>
82#include <Inventor/nodes/SoMaterial.h>
83#include <Inventor/nodes/SoRotationXYZ.h>
84#include <Inventor/nodes/SoTransform.h>
85#include <Inventor/nodes/SoTranslation.h>
86#include <Inventor/nodes/SoSphere.h>
96 unsigned indexOfPointOnTrack )
109 if (
m_tsos->trackParameters()) {
119 surf = &(
m_tsos->trackParameters()->associatedSurface());
176 return m_tsos->trackParameters()->position();
179 VP1Msg::message(
"AscObj_TSOS::approxCenter() WARNING: Failed to determine"
180 " position from either params or surface");
188 static const double l=30.0*CLHEP::cm;
189 return static_cast<int>(c.z()/l)
190 +1000*
static_cast<int>(c.y()/l)
191 +1000000*
static_cast<int>(c.x()/l);
197 return m_tsos->measurementOnTrack();
202 const double& maxTrans )
const
209 double min = std::numeric_limits<double>::max();
213 for (
size_t i = 0; i<points->size(); i++)
224 if (points->size()>1 ){
232 if (imin+1 < points->size() && imin >= 1)
236 smin = std::abs(tm - 0.5) < std::abs(tp - 0.5) ? sm :
sp;
237 }
else if (imin+1 >= points->size() && imin >= 1 )
248 VP1Msg::message(
"AscObj_TSOS::getZTranslationTube: <2 points returned by trackHandle!");
252 if (std::abs(smin) > maxTrans)
254 double sign = smin > 0 ? 1.0 : -1.0;
255 smin =
sign*maxTrans;
258 SoTranslation * trans =
new SoTranslation;
259 trans->translation.setValue(0,0,smin);
267 double paramValue = 0;
275 VP1Msg::message(
" No ROT or cROT in AscObj_TSOS::deviationFromMeasurement(const bool& absolute)!");
281 const bool isTRT = idhelper && idhelper->
is_indet(
id) && idhelper->
is_trt(
id);
282 const bool isMDT = idhelper && idhelper->
is_muon(
id) && idhelper->
is_mdt(
id);
283 if ( idhelper && ( isTRT||isMDT ) )
292 if (not atas)
return std::nan(
"");
294 paramValue = std::abs(localposMeas[
Trk::locR]);
299 sigma = sqrt( covmat(0,0) );
303 return absolute ? std::abs( rioValue - paramValue ) : std::abs( rioValue - paramValue )/sigma;
312 const bool isTRT = idhelper && idhelper->
is_indet(
id) && idhelper->
is_trt(
id);
313 const bool isMDT = idhelper && idhelper->
is_muon(
id) && idhelper->
is_mdt(
id);
314 if ( idhelper && ( isTRT||isMDT ) )
329 SoLineSet * line =
new SoLineSet();
330 SoVertexProperty * vertices =
new SoVertexProperty();
331 vertices->vertex.set1Value(0,point.x(),point.y(),point.z());
332 vertices->vertex.set1Value(1,pointMeas.x(),pointMeas.y(),pointMeas.z());
333 line->numVertices = 2;
334 line->vertexProperty = vertices;
340 if (not dcot)
return;
343 SoSeparator * sep =
new SoSeparator;
344 SoMaterial * mat =
new SoMaterial;
346 mat->diffuseColor.setValue(1,0,0);
348 mat->diffuseColor.setValue(0,1,0);
351 shape_detailed->addChild(sep);
356 if (not dcot)
return;
359 SoSeparator * sep =
new SoSeparator;
360 SoMaterial * mat =
new SoMaterial;
362 mat->diffuseColor.setValue(1,0,0);
364 mat->diffuseColor.setValue(0,1,0);
367 shape_detailed->addChild(sep);
373 shape_detailed->addChild(line);
379 SoSeparator*&shape_detailed,
380 bool showPars,
bool showParsErrors,
bool showSurfaces)
383 Q_ASSERT(trackParams);
393 double length = 5*CLHEP::cm;
399 SoLineSet * line =
new SoLineSet();
400 SoVertexProperty * vertices =
new SoVertexProperty();
401 vertices->vertex.set1Value(0,p1.x(),p1.y(),p1.z());
402 vertices->vertex.set1Value(1,p2.x(),p2.y(),p2.z());
403 line->numVertices.set1Value(0,2);
406 SoPointSet * points =
new SoPointSet;
407 SoVertexProperty * vertices2 =
new SoVertexProperty;
408 vertices2->vertex.set1Value(0,p1.x(),p1.y(),p1.z());
410 line->vertexProperty = vertices;
411 points->vertexProperty = vertices2;
417 SoSeparator * sep =
new SoSeparator;
420 sep->addChild(points);
421 shape_simple->addChild(sep);
422 shape_detailed->addChild(sep);
424 shape_simple->addChild(line);
425 shape_simple->addChild(points);
426 shape_detailed->addChild(line);
427 shape_detailed->addChild(points);
431 if ( showParsErrors ){
433 shape_detailed->addChild(theHitTransform);
435 if (trackParams->covariance())
442 if (per||atas||aap||aad){
445 addErrors(trackParams->
associatedSurface(), *trackParams->covariance(), localPos, p1, showSurfaces, shape_simple, shape_detailed,
false,
false);
455 const Amg::Vector2D& localPos,
const Amg::Vector3D& p1,
bool showSurfaces, SoSeparator* shape_simple, SoSeparator* shape_detailed,
bool force1D,
bool applyLocalTrans )
462 const bool settingsDRAWZERRCIRCLES = settingsDRAWCYLINDER;
465 SoSeparator * errSimple =
new SoSeparator;
466 SoSeparator * errDetailed =
new SoSeparator;
472 errSimple->addChild( mat );
473 errDetailed->addChild( mat );
491 if (applyLocalTrans) {
492 SoTranslation * theTransform =
new SoTranslation;
495 theTransform->translation.setValue(locPosTmp->x(),locPosTmp->y(),0.0);
497 errSimple->addChild(theTransform);
498 errDetailed->addChild(theTransform);
500 VP1Msg::message(
"AscObj_TSOS::addErrors - failed to get tmp position");
508 shape_simple->addChild( errSimple );
509 shape_detailed->addChild( errDetailed );
510 }
else if ( strSurf || perSurf) {
513 if (applyLocalTrans){
515 errSimple->addChild(theTransform);
516 errDetailed->addChild(theTransform);
518 VP1ErrorUtils::errorAtStraightLineSurface(errSimple, errDetailed, tmpCovMat, localPos, &theSurface, settingsSIGMASCALE, settingsDRAWZERRCIRCLES, settingsDRAWCYLINDER, npoints, force1D,
false);
520 shape_simple->addChild( errSimple );
521 shape_detailed->addChild( errDetailed );
522 }
else if ( cylSurf ) {
523 VP1Msg::message(
"WARNING: Visualisation of errors on Cylinder Surface not implemented");
524 }
else if ( disSurf ) {
525 VP1Msg::message(
"WARNING: Visualisation of errors on Disc Surface not implemented");
536 static int ignoreECModules=-1;
537 if (ignoreECModules==-1)
543 if (ignoreECModules) {
547 double angle_z_normal =
Amg::angle(
z, ps->normal());
548 double abscostheta = std::abs(cos(angle_z_normal));
549 if (abscostheta>0.707)
return;
557 SoNode * nodeToAddSimple = theSurfSepSimple;
558 SoNode * nodeToAdd = theSurfSep;
562 if (theSurfSep->getTypeId().isDerivedFrom(SoSeparator::getClassTypeId())) {
563 static_cast<SoSeparator*
>(theSurfSepSimple)->insertChild(mat,0);
564 static_cast<SoSeparator*
>(theSurfSep)->insertChild(mat,0);
566 SoSeparator * sepSimple =
new SoSeparator;
567 sepSimple->addChild(mat);
568 sepSimple->addChild(theSurfSepSimple);
569 nodeToAddSimple = sepSimple;
570 SoSeparator * sep =
new SoSeparator;
572 sep->addChild(theSurfSep);
577 shape_simple->addChild(nodeToAddSimple);
578 shape_detailed->addChild(nodeToAdd);
580 VP1Msg::message(
"AscObj_TSOS::addSurfaceToShapes WARNING: Got null shape.");
587 const double settingsForceOnTrack =
false;
590 SoSeparator * matSepSimple =
new SoSeparator;
591 SoSeparator * matSepDetailed =
new SoSeparator;
595 if (
m_tsos->trackParameters()) {
598 SoTranslation * theTransform =
new SoTranslation;
599 theTransform->translation.setValue(p1.x(),p1.y(),p1.z());
600 matSepSimple->addChild(theTransform);
601 matSepDetailed->addChild(theTransform);
605 VP1Msg::message(
"AscObj_TSOS::addMaterialEffectsToShapes WARNING: Has neither surface or parameter to get position!");
607 if (settingsForceOnTrack) {
608 VP1Msg::message(
"AscObj_TSOS::addMaterialEffectsToShapes WARNING: settingsForceOnTrack not implemented");
615 matSepSimple->addChild(theTransform);
616 matSepDetailed->addChild(theTransform);
624 matSepSimple->addChild(mat);
625 matSepDetailed->addChild(mat);
631 matSepSimple->addChild(point);
634 matSepDetailed->addChild(point);
640 const double radius(absDeltaE > 1*CLHEP::eV ? 5.0*exp(log(absDeltaE/CLHEP::MeV)/3.0) : 0);
643 if (scale * radius > 0.1) {
644 SoSphere * meotSphere =
new SoSphere;
645 meotSphere->radius.setValue( scale * radius );
646 matSepDetailed->addChild(meotSphere);
648 matSepDetailed->addChild(point);
654 shape_simple->addChild(matSepSimple);
655 shape_detailed->addChild(matSepDetailed);
660 SoSeparator*&shape_detailed,
687 shape_simple->addChild(mat);
688 shape_detailed->addChild(mat);
694 m_hitToSoNode.buildStripShapes(*rio,shape_simple,shape_detailed,blockDrawingOfGP);
701 theTransform->translation.getValue().getValue(
x,
y,zShift);
702 shape_simple->addChild(theTransform);
703 shape_detailed->addChild(theTransform);
707 SoTranslation * theTransform =
new SoTranslation;
708 theTransform->translation.setValue(0,0,-zShift);
709 shape_simple->addChild(theTransform);
710 shape_detailed->addChild(theTransform);
736 VP1Msg::message(
"WARNING: ROT has inconsistent dimensions between cov matrix and local parameters. Forcing to 1D.");
743 shape_simple, shape_detailed, force1D,
true);
750 SoSeparator*&shape_detailed)
760 shape_simple->addChild(mat);
761 shape_detailed->addChild(mat);
764 shape_simple->addChild(mat);
765 shape_detailed->addChild(mat);
768 if (
common()->controller()->drawMeasGlobalPositions()){
774 SoTranslation * theTransform =
new SoTranslation;
783 theTransform->translation.setValue( locPos.x(), locPos.y(), locPos.z());
794 SoSeparator * gpSep =
new SoSeparator;
796 gpSep->addChild(theTransform);
797 gpSep->addChild(
common()->nodeManager().getShapeNode_Cross(50));
798 shape_detailed->addChild(gpSep);
805 if (showcRioOnTrack){
808 SoSeparator * rotSepSimple =
new SoSeparator;
809 SoSeparator * rotSepDetailed =
new SoSeparator;
815 shape_detailed->addChild(rotSepDetailed);
816 shape_simple->addChild(rotSepSimple);
822 shape_detailed->addChild( transparent );
826 if (!rot) {
VP1Msg::message(
"WARNING: cROT has empty max prob ROT. Aborting.");
return;}
836 if ( (!tgcDetEl) && (!rpcDetEl)) {
VP1Msg::message(
"WARNING: most prob ROT from cROT has Unknown DE type. Aborting."); std::cout<<*rot<<std::endl;
return;}
849 for (
unsigned int n = 0; n < nrio; n++)
851 if (n==maxProb)
continue;
856 if (!rot) {
VP1Msg::message(
"WARNING: cROT has empty ROT. Skipping.");
continue;}
877 SoSeparator * rotSepSimple =
new SoSeparator;
878 SoSeparator * rotSepDetailed =
new SoSeparator;
892 SoTranslation * theTransform =
new SoTranslation;
893 theTransform->translation.setValue( locPos.x(), locPos.y(), locPos.z());
894 rotSepDetailed->addChild(theTransform);
895 rotSepSimple->addChild(theTransform);
904 shape_simple->addChild(rotSepSimple);
905 shape_detailed->addChild(rotSepDetailed);
916 SoSeparator*&shape_detailed)
919 shape_simple =
new SoSeparator;
921 shape_detailed =
new SoSeparator;
940 if (
m_tsos->trackParameters())
941 surf = &(
m_tsos->trackParameters()->associatedSurface());
942 if (!surf&&
m_tsos->measurementOnTrack())
943 surf = &(
m_tsos->measurementOnTrack()->associatedSurface());
944 if (!surf&&
m_tsos->materialEffectsOnTrack())
945 surf = &(
m_tsos->materialEffectsOnTrack()->associatedSurface());
953 if (!
surface()) {
VP1Msg::message(
"AscObj_TSOS::addTransformToSurface: WARNING: TSOS without Surface! Unable to get transform!");
return;}
965 SoTransform* theHitTransform=
nullptr;
984 theHitTransform=
m_hitToSoNode.createTGC_Transform(*rio,
true);
989 VP1Msg::message(
"AscObj_TSOS::addTransformToSurface: WARNING: Unknown type of ROT.");
997 if (!theHitTransform) {
998 VP1Msg::message(
"AscObj_TSOS::addTransformToSurface: WARNING: Unable to build transform");
1001 shape_simple->addChild(theHitTransform);
1002 shape_detailed->addChild(theHitTransform);
1007 SoSeparator*&shape_detailed)
1025 SoSeparator* param_simple=
new SoSeparator;
1026 SoSeparator* param_detailed=
new SoSeparator;
1027 if (showPars||showParsErrors)
1029 shape_simple->addChild(param_simple);
1030 shape_detailed->addChild(param_detailed);
1032 if (showMaterialEffects)
1044 SoSeparator* meas_simple=
new SoSeparator;
1045 SoSeparator* meas_detailed=
new SoSeparator;
1046 if (
rioOnTrack() && (showRioOnTrack||showMeasErrors))
1048 if (showCompetingRioOnTrack)
1050 shape_simple->addChild(meas_simple);
1051 shape_detailed->addChild(meas_detailed);
1071 l <<
"ERROR: This associated object handle has a NULL TSOS pointer!!";
1082 for (
int i = 0; i < (list.size()-1); ){
1083 l<< (list.at(i)+QString(
" = ")+list.at(i+1) );
1092 bool showDeviationsFromMeasurements =
true;
1093 if ( showDeviationsFromMeasurements
1104 if (
m_tsos->measurementOnTrack()){
1107 for (
int i = 0; i < (list.size()-1); ){
1108 l<< (list.at(i)+QString(
" = ")+list.at(i+1) );
1114 if (
m_tsos->fitQualityOnSurface())
1118 for (
int i = 0; i < (list.size()-1); ){
1119 l<< (list.at(i)+QString(
" = ")+list.at(i+1) );
1124 if (
m_tsos->materialEffectsOnTrack())
1128 for (
int i = 0; i < (list.size()-1); ){
1129 l<< (list.at(i)+QString(
" = ")+list.at(i+1) );
1134 if (
common()->controller()->printVerboseInfoOnSingleSelection()) {
1135 l <<
" ===== TrackStateOnSurface =====";
1136 std::ostringstream s2;
1138 l << QString(s2.str().c_str()).split(
'\n');
1141 l <<
" ===== Surface =====";
1142 std::ostringstream s;
1144 l << QString(s.str().c_str()).split(
'\n');
1151 if (trkObjBrowseritem){
1156 QTreeWidget* trkObjBrowser = trkObjBrowseritem->treeWidget();
1157 trkObjBrowser->setCurrentItem(me);
1158 trkObjBrowser->scrollToItem(me);
1171 if (trkObjBrowseritem){
1176 QFont itemFont = me->font(1);
1180 me->setFlags(Qt::ItemFlags());
1181 itemFont.setStrikeOut(
true);
1185 me->setFlags(Qt::ItemIsSelectable | Qt::ItemIsEnabled);
1186 itemFont.setStrikeOut(
false);
1223 if (
common()->controller()->orientAndZoomOnSingleSelection() )
1232 std::set<SoCamera*>::iterator it,itE = cameras.end();
1233 for (it=cameras.begin();it!=itE;++it) {
1250 if ( plaSurf || perSurf )
1255 SbVec3f lookat0 = SbVec3f(-u[0],-u[1],-u[2]);
1258 std::set<SoCamera*>::iterator it,itE = cameras.end();
1259 for (it=cameras.begin();it!=itE;++it) {
1268 }
else if ( strSurf )
1270 SbVec3f lookat0 = SbVec3f(0,0,1);
1274 rot.multVec(lookat0,lookat0);
1277 std::set<SoCamera*>::iterator it,itE = cameras.end();
1278 for (it=cameras.begin();it!=itE;++it) {
1279 SbRotation camrot = (*it)->orientation.getValue();
1280 SbVec3f cameraDir = SbVec3f(0,0,-1);
1281 camrot.multVec(cameraDir,cameraDir);
1283 lookat1 = cameraDir.dot(lookat0) > 0 ? lookat0 : -lookat0;
This class provides an interface to generate or decode an identifier for the upper levels of the dete...
#define AmgSymMatrix(dim)
void addDeviationFromMeasurementInfoToShapes(SoSeparator *&shape_simple, SoSeparator *&shape_detailed)
void buildShapes(SoSeparator *&shape_simple, SoSeparator *&shape_detailed)
void setDistToNextPar(const double &)
double deviationFromMeasurement(const bool &absolute=false)
void zoomView()
Depending on the controller settings, will attempt to zoom the view to this TSOS, for example in clic...
void addRIO_OnTrackInfoToShapes(SoSeparator *&shape_simple, SoSeparator *&shape_detailed, const Trk::RIO_OnTrack *rio, bool blockDrawingOfGP=false)
void addErrors(const Trk::Surface &theSurface, const AmgSymMatrix(5)&tmpCovMat, const Amg::Vector2D &localPos, const Amg::Vector3D &p1, bool showSurfaces, SoSeparator *shape_simple, SoSeparator *shape_detailed, bool force1D, bool applyLocalTrans)
QTreeWidgetItem * m_objBrowseTree
SoTranslation * getZTranslationTube(const Trk::Surface *, const double &maxTrans) const
HitToSoNode m_hitToSoNode
unsigned m_indexOfPointOnTrack
virtual void setVisible(bool)
const Trk::TrackStateOnSurface * m_tsos
TrackCommonFlags::TSOSPartsFlags m_parts
Amg::Vector3D approxCenter() const
const Trk::RIO_OnTrack * rioOnTrack() const
void addSurfaceToShapes(SoSeparator *&shape_simple, SoSeparator *&shape_detailed)
void addCompetingRIO_OnTrackInfoToShapes(SoSeparator *&shape_simple, SoSeparator *&shape_detailed)
const Trk::MeasurementBase * measurement() const
const Trk::Surface * surface() const
const Trk::CompetingRIOsOnTrack * competingRIOsOnTrack() const
bool isShortMeasurement()
Return true if TRT/MDT & shortened mode is on, false otherwise.
void addTransformToSurface(SoSeparator *&shape_simple, SoSeparator *&shape_detailed)
AscObj_TSOS(TrackHandleBase *, const Trk::TrackStateOnSurface *, unsigned indexOfPointOnTrack)
void addMaterialEffectsToShapes(SoSeparator *&shape_simple, SoSeparator *&shape_detailed)
void addTrackParamInfoToShapes(SoSeparator *&shape_simple, SoSeparator *&shape_detailed, bool showPars, bool showParsErrors, bool showSurfaces)
static void ensureInitSeps(SoSeparator *&shape_simple, SoSeparator *&shape_detailed)
SoSeparator * shapeSimple() const
AssociatedObjectHandleBase(TrackHandleBase *)
virtual void setVisible(bool)
TrackSysCommonData * common() const
TrackHandleBase * trackHandle() const
friend class TrackHandleBase
bool hasParameters() const
SoSeparator * shapeDetailed() const
This class provides an interface to generate or decode an identifier for the upper levels of the dete...
bool is_mdt(Identifier id) const
bool is_indet(Identifier id) const
bool is_muon(Identifier id) const
bool is_trt(Identifier id) const
value_type get_compact() const
Get the compact id.
Represents 'corrected' measurements from the TRT (for example, corrected for wire sag).
Trk::DriftCircleSide side() const
returns the side on which the drift radius is.
An RpcReadoutElement corresponds to a single RPC module; therefore typicaly a barrel muon station con...
A TgcReadoutElement corresponds to a single TGC chamber; therefore typically a TGC station contains s...
This class represents the corrected MDT measurements, where the corrections include the effects of wi...
Trk::DriftCircleSide side() const
Returns the side on which the drift radius is wrt to the track.
SoNode * translateSurface(const Trk::Surface &sf, const bool &simple=false) const
@ TSOS_SurfacesDetElem
bit 9
@ TSOS_MeasCompetingRioOnTrackOutlier
bit 7
@ TSOS_SurfacesCustom
bit 10
@ TSOS_MeasRioOnTrackOutlier
bit 6
@ TSOS_MeasRioOnTrackNotOutlier
bit 4
@ TSOS_TrackParsErrorsNotPerigee
bit 1
@ TSOS_MeasCompetingRioOnTrackNotOutlier
bit 5
@ TSOS_AnyMaterialEffects
@ TSOS_AnyMeasCompetingRioOnTrack
@ TSOS_MaterialEffects
bit 13
@ TSOS_TrackParsErrorsPerigee
bit 2
@ TSOS_MaterialEffectsWithNoDeltaE
bit 12
QTreeWidgetItem * browserTreeItem() const
std::vector< Amg::Vector3D > * hackGetPointsPropagated()
FIXME.
SoPointSet * singlePoint() const
VP1TrackSystem * system() const
TrackSystemController * controller() const
bool useShortTRTMeasurements() const
SoMaterial * customMatParameters() const
SoMaterial * customMatHoleParameters() const
int numberOfPointsOnCircles() const
SoMaterial * customMatMeasurementsOutliers() const
double nStdDevForParamErrors() const
SoMaterial * customMatParameterErrors() const
SoMaterial * customMatSurfaces() const
double materialEffectsOnTrackScale() const
SoMaterial * customMatMaterialEffects() const
bool useShortMDTMeasurements() const
bool parTubeErrorsDrawCylinders() const
SoMaterial * customMatMeasurements() const
static MeasurementType type(const Trk::PrepRawData *prd)
static QString name(const Trk::MeasurementBase &mb)
static QStringList fullInfo(const Trk::MeasurementBase &tp)
Returns list of key, value, key, value etc.
Base class for all CompetingRIOsOnTack implementations, extends the common MeasurementBase.
virtual unsigned int numberOfContainedROTs() const =0
Number of RIO_OnTracks to be contained by this CompetingRIOsOnTrack.
unsigned int indexOfMaxAssignProb() const
Index of the ROT with the highest assignment probability.
virtual const RIO_OnTrack & rioOnTrack(unsigned int) const =0
returns the RIO_OnTrack (also known as ROT) objects depending on the integer.
Class for a CylinderSurface in the ATLAS detector.
Class for a DiscSurface in the ATLAS detector.
double deltaE() const
returns the
class holding information about momentum reduction and an additional noise term due to significant en...
bool contains(ParamDefs par) const
The simple check for the clients whether the parameter is contained.
double get(ParamDefs par) const
Retrieve specified parameter (const version).
int dimension() const
Dimension of this localParameters() vector.
base class to integrate material effects on Trk::Track in a flexible way.
const Surface & associatedSurface() const
returns the surface to which these m.eff. are associated.
represents the full description of deflection and e-loss of a track in material.
const EnergyLoss * energyLoss() const
returns the energy loss object.
This class is the pure abstract base class for all fittable tracking measurements.
const LocalParameters & localParameters() const
Interface method to get the LocalParameters.
virtual const Surface & associatedSurface() const =0
Interface method to get the associated Surface.
virtual const Amg::Vector3D & globalPosition() const =0
Interface method to get the global Position.
const Amg::MatrixX & localCovariance() const
Interface method to get the localError.
const Amg::Vector3D & momentum() const
Access method for the momentum.
const Amg::Vector3D & position() const
Access method for the position.
virtual const Surface & associatedSurface() const override=0
Access to the Surface associated to the Parameters.
Amg::Vector2D localPosition() const
Access method for the local coordinates, local parameter definitions differ for each surface type.
Class describing the Line to which the Perigee refers to.
Class for a planaer rectangular or trapezoidal surface in the ATLAS detector.
Class to handle RIO On Tracks ROT) for InDet and Muons, it inherits from the common MeasurementBase.
virtual const TrkDetElementBase * detectorElement() const =0
returns the detector element, assoicated with the PRD of this class
virtual const Surface & associatedSurface() const override=0
returns the surface for the local to global transformation
Identifier identify() const
return the identifier -extends MeasurementBase
virtual const Amg::Vector3D & globalPosition() const override=0
Interface method to get the global Position.
Class for a StraightLineSurface in the ATLAS detector to describe dirft tube and straw like detectors...
Abstract Base Class for tracking surfaces.
virtual bool globalToLocal(const Amg::Vector3D &glob, const Amg::Vector3D &mom, Amg::Vector2D &loc) const =0
Specified by each surface type: GlobalToLocal method without dynamic memory allocation - boolean chec...
const TrkDetElementBase * associatedDetectorElement() const
return associated Detector Element
const Amg::Transform3D & transform() const
Returns HepGeom::Transform3D by reference.
Identifier associatedDetectorElementIdentifier() const
return Identifier of the associated Detector Element
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.
represents the track state (measurement, material, fit parameters and quality) at a surface.
@ Perigee
This represents a perigee, and so will contain a Perigee object only.
@ Outlier
This TSoS contains an outlier, that is, it contains a MeasurementBase/RIO_OnTrack which was not used ...
@ Hole
A hole on the track - this is defined in the following way.
static VP1CameraHelper * animatedZoomToSubTree(SoCamera *camera, SoGroup *sceneroot, SoNode *subtreeroot, double duration_in_secs=1.0, double clipVolPercent=100.0, double lastClipVolPercent=100.0, double slack=1.0, const SbVec3f &lookat=SbVec3f(999, 999, 999), const SbVec3f &upvec=SbVec3f(999, 999, 999), bool varySpeed=true, bool forceCircular=false)
static const AtlasDetectorID * atlasIDHelper()
static void errorAtPlaneSurface(SoSeparator *errSimple, SoSeparator *errDetailed, const AmgSymMatrix(5)&tmpCovMat, const Trk::Surface *theSurface, const Amg::Vector3D &p1, const double &nStdDev=3.0, int numNodes=12, const bool &moveToSurface=false, const bool &force1D=false, const bool &addTransform=true)
static void errorAtStraightLineSurface(SoSeparator *errSimple, SoSeparator *errDetailed, const AmgSymMatrix(5)&tmpcovmat, const Amg::Vector2D &localPos, const Trk::Surface *theSurface, const double &nStdDev=3.0, const bool &drawZErrCircles=false, const bool &drawCylinder=false, int numNodes=12, const bool &force1D=false, const bool &addTransform=true)
static SoTransform * toSoTransform(const HepGeom::Transform3D &, SoTransform *t=0)
static void distPointLineParam(const Amg::Vector3D &point, const Amg::Vector3D &point0, const Amg::Vector3D &point1, double &s)
static void distLineLineParam(const Amg::Vector3D &point0, const Amg::Vector3D &point1, const Amg::Vector3D &point2, const Amg::Vector3D &point3, double &s, double &t)
static double distPointLine2(const Amg::Vector3D &point, const Amg::Vector3D &point0, const Amg::Vector3D &point1, double &s)
static void messageVerbose(const QString &)
static void messageDebug(const QString &)
static void message(const QString &, IVP1System *sys=0)
static bool environmentVariableIsOn(const QString &name)
static QString str(const QString &s)
double angle(const Amg::Vector3D &v1, const Amg::Vector3D &v2)
calculates the opening angle between two vectors
Eigen::Matrix< double, 2, 1 > Vector2D
Eigen::Matrix< double, 3, 1 > Vector3D
ParametersT< TrackParametersDim, Charged, DiscSurface > AtaDisc
@ LEFT
the drift radius is negative (see Trk::AtaStraightLine)
@ NONE
it was not possible to determine the which side of the straw the track passed;
ParametersT< TrackParametersDim, Charged, PerigeeSurface > Perigee
ParametersT< TrackParametersDim, Charged, StraightLineSurface > AtaStraightLine
@ loc2
generic first and second local coordinate
ParametersBase< TrackParametersDim, Charged > TrackParameters
ParametersT< TrackParametersDim, Charged, PlaneSurface > AtaPlane