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

#include <HitToSoNode.h>

Inheritance diagram for HitToSoNode:
Collaboration diagram for HitToSoNode:

Classes

class  Imp

Public Member Functions

 HitToSoNode (IVP1System *sys=0)
 ~HitToSoNode ()
SoTransform * createTransform (const Trk::RIO_OnTrack &rio, bool useSurfacePositionOnly) const
SoTransform * createTGC_Transform (const Trk::RIO_OnTrack &rio, bool useSurfacePositionOnly) const
 TGCs are rotated.
void buildStripShapes (const Trk::RIO_OnTrack &rio, SoSeparator *&shape_simple, SoSeparator *&shape_detailed, bool blockGP)
void buildTubeShapes (const Trk::RIO_OnTrack &rio, SoSeparator *&shape_simple, SoSeparator *&shape_detailed, bool blockGP, double length, bool doProjection)
double getTGCAngle (Identifier id) const
 returns the phi angle of the passed phi strip identifier.
void setSystemBasePointer (IVP1System *sys)
void message (const QString &) const
void message (const QStringList &, const QString &addtoend="") const
void message (const QString &addtostart, const QStringList &, const QString &addtoend="") const
void messageDebug (const QString &) const
void messageDebug (const QStringList &, const QString &addtoend="") const
void messageDebug (const QString &addtostart, const QStringList &, const QString &addtoend="") const
void messageVerbose (const QString &) const
void messageVerbose (const QStringList &, const QString &addtoend="") const
void messageVerbose (const QString &addtostart, const QStringList &, const QString &addtoend="") const
IVP1SystemsystemBase () const
const QString & helperClassName () const

Static Public Member Functions

static bool verbose ()
static void warnUndeletedInstances ()
static QString str (const QString &s)
static QString str (const char *c)
static QString str (const bool b)
static QString str (const QColor &)
static QString str (const SbColor &)
static QString str (const VP1Interval &)
static QString str (const SbVec2d &)
static QString str (const SbVec2f &)
static QString str (const SbVec2s &)
static QString str (const SbVec3d &)
static QString str (const SbVec3f &)
static QString str (const SbVec3s &)
static QString str (const SbVec4d &)
static QString str (const SbVec4f &)
static QString str (short int n)
static QString str (unsigned short int n)
static QString str (long n)
static QString str (ulong n)
static QString str (int n)
static QString str (uint n)
static QString str (qlonglong n)
static QString str (qulonglong n)
static QString str (const double &d)
static QString str (const float &f)
static QString str (const void *)
template<class T>
static QString str (const T *t)
template<class T>
static QString str (const QFlags< T > &f)
template<class T>
static QString str (const HepGeom::BasicVector3D< T > &t)
static QString str (const Amg::Vector3D &t)
template<class T>
static QString str (const QList< T > &t)

Protected Member Functions

void setHelperClassName (const QString &n)

Private Member Functions

 HitToSoNode (const HitToSoNode &)
HitToSoNodeoperator= (const HitToSoNode &)
void fillValues (Identifier &id, const Trk::TrkDetElementBase *baseDetEl, double &striplength, double &stripWidth, double &stripThickness, Amg::Vector2D *&localposStrip)
void fillRPCValues (Identifier &id, const Trk::TrkDetElementBase *baseDetEl, double &striplength, double &stripWidth, double &stripThickness, Amg::Vector2D *&localposStrip)
void fillTGCValues (Identifier &id, const Trk::TrkDetElementBase *baseDetEl, double &striplength, double &stripWidth, double &stripThickness, Amg::Vector2D *&localposStrip)
void fillCSCValues (Identifier &id, const Trk::TrkDetElementBase *baseDetEl, double &striplength, double &stripWidth, double &stripThickness, Amg::Vector2D *&localposStrip)
void fillSTGCValues (Identifier &id, const Trk::TrkDetElementBase *baseDetEl, double &striplength, double &stripWidth, double &stripThickness, Amg::Vector2D *&localposStrip)
void fillMMValues (Identifier &id, const Trk::TrkDetElementBase *baseDetEl, double &striplength, double &stripWidth, double &stripThickness, Amg::Vector2D *&localposStrip)
void fillSiValues (Identifier &id, const Trk::TrkDetElementBase *baseDetEl, double &striplength, double &stripWidth, double &stripThickness, Amg::Vector2D *&localposStrip)

Private Attributes

Impm_d
QString m_helpername
IVP1Systemm_system

Static Private Attributes

static const bool s_vp1verbose = VP1QtUtils::environmentVariableIsOn("VP1_VERBOSE_OUTPUT")

Detailed Description

Definition at line 33 of file HitToSoNode.h.

Constructor & Destructor Documentation

◆ HitToSoNode() [1/2]

HitToSoNode::HitToSoNode ( IVP1System * sys = 0)

Definition at line 49 of file HitToSodeNode.cxx.

50 : VP1HelperClassBase(sys,"HitToSoNode"), m_d(new Imp)
51{
52 m_d->theclass = this;
53}
VP1HelperClassBase(IVP1System *sys=0, QString helpername="")

◆ ~HitToSoNode()

HitToSoNode::~HitToSoNode ( )

Definition at line 56 of file HitToSodeNode.cxx.

57{
58 messageVerbose("destructor begin");
59 delete m_d;
60 messageVerbose("destructor end");
61}
void messageVerbose(const QString &) const

◆ HitToSoNode() [2/2]

HitToSoNode::HitToSoNode ( const HitToSoNode & )
private

Member Function Documentation

◆ buildStripShapes()

void HitToSoNode::buildStripShapes ( const Trk::RIO_OnTrack & rio,
SoSeparator *& shape_simple,
SoSeparator *& shape_detailed,
bool blockGP )

Definition at line 225 of file HitToSodeNode.cxx.

226{
227 // assuming starting with position being that of centre of surface i.e. always working in local coord system
228
229
230 double stripLength =100.0, stripWidth = 10.0, stripThickness=1.0;
231 std::optional<Amg::Vector2D> localposROT=std::nullopt;
232 Amg::Vector2D* localposStrip=0;
233 Identifier id=rio.identify();
234 fillValues(id, rio.detectorElement(), stripLength, stripWidth, stripThickness, localposStrip);
235
236 //std::cout<<"Got back: "<<stripLength<<","<<stripWidth<<","<<stripThickness<<std::endl;
237 //std::cout<<"LocalposStrip="<<*localposStrip<<std::endl;
238
239 // if (static_cast<PRDCollHandle_TGC*>(collHandle())->project())
240 // striplength += 300.0;//Fixme: Rough extension for now
241 double tolerance = 3.;
242 localposROT = rio.detectorElement()->surface( rio.identify() ).globalToLocal(rio.globalPosition(), tolerance);
243
244 if( !localposROT )
245 {
246 localposROT.emplace();
247 localposROT->setZero();
248 VP1Msg::message("Warning: Local hit position was NULL");
249 }
250
251 if (!blockGP){
252 SoSeparator * gpSep = new SoSeparator;
253 SoTranslation * localtransGP = new SoTranslation;
254 localtransGP->translation.setValue(static_cast<float>( (*localposROT)[Trk::locX]),
255 static_cast<float>( (*localposROT)[Trk::locY]),
256 0.0f);
257
258 gpSep->addChild(localtransGP);
259 gpSep->addChild(m_d->nodeManager.getShapeNode_Cross(10));
260 shape_detailed->addChild(gpSep);
261 }
262
263
264 SoTranslation * localtrans0 = new SoTranslation;
265 localtrans0->translation.setValue(static_cast<float>( (*localposStrip)[Trk::locX]),
266 static_cast<float>( (*localposStrip)[Trk::locY]),
267 0.0f);
268
269
270 shape_simple->addChild(localtrans0);
271 shape_simple->addChild( m_d->nodeManager.getShapeNode_Strip(stripLength));
272
273 shape_detailed->addChild(localtrans0);
274 shape_detailed->addChild(m_d->nodeManager.getShapeNode_Strip(stripLength,stripWidth,stripThickness));
275 // Transform back to centre of Surface
276 SoTranslation * localtrans1 = new SoTranslation;
277 localtrans1->translation.setValue(static_cast<float>( -(*localposStrip)[Trk::locX]),
278 static_cast<float>( -(*localposStrip)[Trk::locY]),
279 0.0f);
280 shape_simple->addChild(localtrans1);
281 shape_detailed->addChild(localtrans1);
282
283 delete localposStrip;
284}
void fillValues(Identifier &id, const Trk::TrkDetElementBase *baseDetEl, double &striplength, double &stripWidth, double &stripThickness, Amg::Vector2D *&localposStrip)
virtual const TrkDetElementBase * detectorElement() const =0
returns the detector element, assoicated with the PRD of this class
Identifier identify() const
return the identifier -extends MeasurementBase
virtual const Amg::Vector3D & globalPosition() const override=0
Interface method to get the global Position.
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...
virtual const Surface & surface() const =0
Return surface associated with this detector element.
static void message(const QString &, IVP1System *sys=0)
Definition VP1Msg.cxx:30
Eigen::Matrix< double, 2, 1 > Vector2D
@ locY
local cartesian
Definition ParamDefs.h:38
@ locX
Definition ParamDefs.h:37
constexpr double tolerance

◆ buildTubeShapes()

void HitToSoNode::buildTubeShapes ( const Trk::RIO_OnTrack & rio,
SoSeparator *& shape_simple,
SoSeparator *& shape_detailed,
bool blockGP,
double length,
bool doProjection )
Parameters
blockGPblockGP

Definition at line 180 of file HitToSodeNode.cxx.

181{
182 const Trk::CylinderBounds* ccbo = dynamic_cast<const Trk::CylinderBounds*>(&(rio.detectorElement()->surface(rio.identify()).bounds()));
183 assert(ccbo!=0);
184 if (!ccbo) {
185 VP1Msg::message("HitToSoNode::buildTubeShapes ERROR: Trk::CylinderBounds conversion failed");
186 return;
187 }
188
189 double radius = std::abs(rio.localParameters().get(Trk::locR));
190 if (radius<0.15)
191 radius = 0.0;//radius is so small it is better to collapse to line
192
193 double halflength(ccbo->halflengthZ());
194
195 if (doProjection && dynamic_cast<const InDet::TRT_DriftCircleOnTrack*>(&rio)){
196
197 double strawLength=2.0*halflength;
198 if (strawLength<160.0)
199 strawLength = 2*349.3150-strawLength;//Yeah, we hardcode a lot here... but dimensions of TRT barrel straws are not likely to change.
200
201 SoPointSet * scatPointSet = new SoPointSet;
202 SoVertexProperty * scatVtxProperty = new SoVertexProperty;
203 scatVtxProperty->vertex.set1Value(0,0.0f,0.0f,strawLength);
204 scatPointSet->numPoints=1;
205 scatPointSet->vertexProperty.setValue(scatVtxProperty);
206
207 shape_detailed->addChild(scatPointSet);
208 shape_simple->addChild(scatPointSet);
209
210 } else {
211 if (length!=0.0) {
212 halflength = length/2.0;
213 // FIXME! translate to z position here instead of in AscObj_TSOS, for symmetry with buildStripShapes
214 }
215 SoNode * simpleShape = m_d->nodeManager.getShapeNode_DriftTube( halflength, 0.0 );
216 shape_simple->addChild(simpleShape);
217 //Detailed shape uses tube (unless negligible radius):
218 if (radius==0.0)
219 shape_detailed->addChild(simpleShape);
220 else
221 shape_detailed->addChild(m_d->nodeManager.getShapeNode_DriftTube( halflength, radius ));
222 }
223}
double length(const pvec &v)
double halflengthZ() const
This method returns the halflengthZ.
double get(ParamDefs par) const
Retrieve specified parameter (const version).
const LocalParameters & localParameters() const
Interface method to get the LocalParameters.
virtual const SurfaceBounds & bounds() const =0
Return the boundaries of the element.
@ locR
Definition ParamDefs.h:44

◆ createTGC_Transform()

SoTransform * HitToSoNode::createTGC_Transform ( const Trk::RIO_OnTrack & rio,
bool useSurfacePositionOnly ) const

TGCs are rotated.

Definition at line 126 of file HitToSodeNode.cxx.

126 {
127 // std::cout<<"createTGC_Transform for:\n"<<rio<<std::endl;
128
129 const TgcIdHelper * idhelper = VP1DetInfo::tgcIDHelper();
130 const MuonGM::TgcReadoutElement* detEl = dynamic_cast<const MuonGM::TgcReadoutElement*>(rio.detectorElement());
131
132 if (!idhelper||!detEl) {
133 return new SoTransform;
134 }
135
136 const Trk::Surface& theSurface = rio.detectorElement()->surface(rio.identify());
137 SoTransform * theHitTransform =0;
138 if (idhelper->isStrip( rio.identify() )){
139 // std::cout<<"Strip"<<std::endl;
140
141 // for phi strips, use sinstereo to get correct orientation
142
143 double angle = getTGCAngle(rio.identify());
144
145 Amg::RotationMatrix3D localRot;
146 localRot.setIdentity();
147
148 if (0 < detEl->getStationEta()) {
149// localRot.setPhi (angle);
150 Amg::setPhi(localRot, angle);
151 } else {
152// localRot.setPhi (-angle);
153 Amg::setPhi(localRot, -angle);
154 }
155 // std::cout<<"Local ROT = "<<localRot<<std::endl;
156
157 Amg::toString(localRot);
158 localRot *= theSurface.transform().rotation();
159
160 // std::cout<<"translation = "<<Amg::toString(theSurface.transform().translation())<<std::endl;
161
162// HepGeom::Transform3D trans (localRot, theSurface.transform().translation());
163 Amg::Transform3D trans = Amg::getTransformFromRotTransl(localRot, theSurface.transform().translation() );
164
165 // std::cout<<"transform = "<<Amg::toString(trans)<<std::endl;
166
167 theHitTransform = VP1LinAlgUtils::toSoTransform(trans);
168 } else {
169 // eta strips just use surface orientiation
170 theHitTransform = VP1LinAlgUtils::toSoTransform(theSurface.transform());
171 }
172
173 if (!useSurfacePositionOnly){
174 const Amg::Vector3D& theHitGPos= rio.globalPosition();
175 theHitTransform->translation.setValue((theHitGPos)[0], (theHitGPos)[1], (theHitGPos)[2]);
176 }
177 return theHitTransform;
178}
double angle(const GeoTrf::Vector2D &a, const GeoTrf::Vector2D &b)
double getTGCAngle(Identifier id) const
returns the phi angle of the passed phi strip identifier.
int isStrip(const Identifier &id) const
isStrip corresponds to measuresPhi
const Amg::Transform3D & transform() const
Returns HepGeom::Transform3D by reference.
static const TgcIdHelper * tgcIDHelper()
static SoTransform * toSoTransform(const HepGeom::Transform3D &, SoTransform *t=0)
std::string toString(const Translation3D &translation, int precision=4)
GeoPrimitvesToStringConverter.
Eigen::Matrix< double, 3, 3 > RotationMatrix3D
Amg::RotationMatrix3D setPhi(Amg::RotationMatrix3D mat, double angle, int convention=0)
Amg::Transform3D getTransformFromRotTransl(Amg::RotationMatrix3D rot, Amg::Vector3D transl_vec)
Eigen::Affine3d Transform3D
Eigen::Matrix< double, 3, 1 > Vector3D

◆ createTransform()

SoTransform * HitToSoNode::createTransform ( const Trk::RIO_OnTrack & rio,
bool useSurfacePositionOnly ) const

Definition at line 107 of file HitToSodeNode.cxx.

108{
109 const Trk::Surface& theSurface = rio.detectorElement()->surface(rio.identify());
110 SoTransform * theHitTransform = VP1LinAlgUtils::toSoTransform(theSurface.transform());
111
112 // const Amg::Vector3D* theHitGPos;
113 if ( useSurfacePositionOnly ) {
114 // if (verbose) VP1Msg::message("useSurfacePositionOnly");
115 theHitTransform->translation.setValue(theSurface.center()[0], theSurface.center()[1], theSurface.center()[2]);
116
117 } else {
118
119 // for strips, clusters or short tubes, use position of hit.
120 // FIXME - for DCs, shouldn't this be the d0=0 position, i.e. on the wire?
121 theHitTransform->translation.setValue(rio.globalPosition()[0], rio.globalPosition()[1], rio.globalPosition()[2]);
122 }
123 return theHitTransform;
124}
const Amg::Vector3D & center() const
Returns the center position of the Surface.

◆ fillCSCValues()

void HitToSoNode::fillCSCValues ( Identifier & id,
const Trk::TrkDetElementBase * baseDetEl,
double & striplength,
double & stripWidth,
double & stripThickness,
Amg::Vector2D *& localposStrip )
private

Definition at line 390 of file HitToSodeNode.cxx.

390 {
391 const CscIdHelper * idhelper = VP1DetInfo::cscIDHelper();
392 const MuonGM::CscReadoutElement* detEl =
393 dynamic_cast<const MuonGM::CscReadoutElement*>(baseDetEl);
394 if (!idhelper || !detEl){
395 VP1Msg::message("Could not get either CSC IdHelper or det element");
396 localposStrip = new Amg::Vector2D;
397 return;
398 }
399
400 int measPhi = idhelper->measuresPhi( id );
401 int chamberLayer = idhelper->chamberLayer( id );
402
403 striplength = detEl->stripLength(id);
404 stripWidth = detEl->cathodeReadoutPitch(chamberLayer,measPhi);
405 stripThickness = (measPhi==1) ? 0.9: 0.8;//strip thickness - different from phi/eta to avoid hatching issues
406
407 // Translation from objects local position to the strip position
408 Amg::Vector2D localPos_a;
409 Amg::Vector3D dummy; // this is not actually used
410 Amg::Vector3D globalPos_a = detEl->stripPos( id );
411 bool ok = detEl->surface( id ).globalToLocal(globalPos_a, dummy, localPos_a);
412 if (ok) {
413 localposStrip = new Amg::Vector2D(localPos_a);
414 }
415 else{
416 VP1Msg::message("fillCSCValues - Could not get localposStrip!!");
417 }
418
419
420
421 if( !localposStrip )
422 {
423 localposStrip = new Amg::Vector2D;
424 VP1Msg::message("Warning: Local strip position is NULL");
425 }
426}
int chamberLayer(const Identifier &id) const
bool measuresPhi(const Identifier &id) const override
double stripLength(int chamberLayer, int measuresPhi, int stripNumber, double &epsilon) const
double cathodeReadoutPitch(int chLayer, int measuresPhi) const
Amg::Vector3D stripPos(const Identifier &id) const
takes into account internal alignment parameters, hence gives accurate answer
virtual const Trk::PlaneSurface & surface() const override
access to chamber surface (phi orientation), uses the first gas gap
virtual bool globalToLocal(const Amg::Vector3D &glob, const Amg::Vector3D &mom, Amg::Vector2D &loc) const override final
Specified for PlaneSurface: GlobalToLocal method without dynamic memory allocation - boolean checks i...
static const CscIdHelper * cscIDHelper()

◆ fillMMValues()

void HitToSoNode::fillMMValues ( Identifier & id,
const Trk::TrkDetElementBase * baseDetEl,
double & striplength,
double & stripWidth,
double & stripThickness,
Amg::Vector2D *& localposStrip )
private

Definition at line 455 of file HitToSodeNode.cxx.

455 {
456 const MmIdHelper * idhelper = VP1DetInfo::mmIDHelper();
457 const MuonGM::CscReadoutElement* detEl =
458 dynamic_cast<const MuonGM::CscReadoutElement*>(baseDetEl);
459 if (!idhelper || !detEl){
460 VP1Msg::message("Could not get either CSC IdHelper or det element");
461 localposStrip = new Amg::Vector2D;
462 return;
463 }
464 //
465
466 // FIXME - get dimensions!
467
468 striplength=100; //FIXME!
469 stripWidth=10;
470 stripThickness=1;
471 // int measPhi = idhelper->measuresPhi( id );
472 // int chamberLayer = idhelper->chamberLayer( id );
473 //
474 // striplength = detEl->stripLength(id);
475 // stripWidth = detEl->cathodeReadoutPitch(chamberLayer,measPhi);
476 // stripThickness = (measPhi==1) ? 0.9: 0.8;//strip thickness - different from phi/eta to avoid hatching issues
477 //
478 // // Translation from objects local position to the strip position
479 localposStrip = new Amg::Vector2D;
480
481 if( !(detEl->stripPosition(id,*localposStrip)) )
482 {
483 VP1Msg::message("Warning: Local strip position is NULL");
484 }
485}
virtual bool stripPosition(const Identifier &id, Amg::Vector2D &pos) const override final
strip position If the strip number is outside the range of valid strips, the function will return fal...
static const MmIdHelper * mmIDHelper()

◆ fillRPCValues()

void HitToSoNode::fillRPCValues ( Identifier & id,
const Trk::TrkDetElementBase * baseDetEl,
double & striplength,
double & stripWidth,
double & stripThickness,
Amg::Vector2D *& localposStrip )
private

Definition at line 354 of file HitToSodeNode.cxx.

354 {
355 const RpcIdHelper * idhelper = VP1DetInfo::rpcIDHelper();
356 const MuonGM::RpcReadoutElement* detEl =
357 dynamic_cast<const MuonGM::RpcReadoutElement*>(baseDetEl);
358 if (!idhelper || !detEl){
359 VP1Msg::message("Could not get either RPC IdHelper or det element");
360 localposStrip = new Amg::Vector2D;
361 return;
362 }
363
364 int measPhi = idhelper->measuresPhi( id );
365 striplength = detEl->StripLength(measPhi);
366 stripWidth = detEl->StripWidth(measPhi),//strip width
367 stripThickness = (measPhi==1) ? 0.9: 0.8;//strip thickness - different from phi/eta to avoid hatching issues
368
369 // Translation from objects local position to the strip position
370 Amg::Vector2D localPos_a;
371 Amg::Vector3D dummy; // this is not actually used
372 Amg::Vector3D globalPos_a = detEl->stripPos( id );
373 bool ok = detEl->surface( id ).globalToLocal(globalPos_a, dummy, localPos_a);
374 if (ok) {
375 localposStrip = new Amg::Vector2D(localPos_a);
376 }
377 else{
378 VP1Msg::message("fillRPCValues - Could not get localposStrip!!");
379 }
380
381 //std::cout<<"HitToSoNode::fillRPCValues channelPos = "<<detEl->stripPos( id )<<std::endl;
382
383 if( !localposStrip )
384 {
385 localposStrip = new Amg::Vector2D;
386 VP1Msg::message("Warning: Local strip position is NULL");
387 }
388}
double StripLength(bool measphi) const
returns the strip length for the phi or eta plane
double StripWidth(bool measphi) const
returns the strip width for the phi or eta plane
bool measuresPhi(const Identifier &id) const override
static const RpcIdHelper * rpcIDHelper()

◆ fillSiValues()

void HitToSoNode::fillSiValues ( Identifier & id,
const Trk::TrkDetElementBase * baseDetEl,
double & striplength,
double & stripWidth,
double & stripThickness,
Amg::Vector2D *& localposStrip )
private

Definition at line 487 of file HitToSodeNode.cxx.

487 {
488 const InDetDD::SiDetectorElement* detEl =
489 dynamic_cast<const InDetDD::SiDetectorElement*>(baseDetEl);
490 if ( !detEl){
491 VP1Msg::message("Could not get Si det element");
492 localposStrip = new Amg::Vector2D;
493 return;
494 }
495
496 localposStrip = new Amg::Vector2D(detEl->rawLocalPositionOfCell( id ));
497 // (*localPosStrip)[Trk::distPhi] += (idhelper->is_pixel(id) ? m_pixelLorentzAngleTool : m_sctLorentzAngleTool)->getLorentzShift(detEl->identifyHash());
498 // SiLorentzAngleTool cannot be used here because HitToSoNode is not a tool nor algorithm
499
500 striplength = detEl->etaPitch() ;
501 stripWidth = detEl->phiPitch( *localposStrip );
502 stripThickness = detEl->thickness()/10.0;
503
504}
double phiPitch() const
Pitch (inline methods)
Amg::Vector2D rawLocalPositionOfCell(const SiCellId &cellId) const
Returns position (center) of cell.
double etaPitch() const
Pitch (inline methods)

◆ fillSTGCValues()

void HitToSoNode::fillSTGCValues ( Identifier & id,
const Trk::TrkDetElementBase * baseDetEl,
double & striplength,
double & stripWidth,
double & stripThickness,
Amg::Vector2D *& localposStrip )
private

Definition at line 428 of file HitToSodeNode.cxx.

428 {
429 const sTgcIdHelper * idhelper = VP1DetInfo::stgcIDHelper();
430 MuonGM::sTgcReadoutElement* detEl =
431 const_cast<MuonGM::sTgcReadoutElement*>(dynamic_cast<const MuonGM::sTgcReadoutElement*>(baseDetEl));
432 if (!idhelper || !detEl){
433 VP1Msg::message("Could not get either STGC IdHelper or det element");
434 localposStrip = new Amg::Vector2D;
435 return;
436 }
437
438 striplength=100; //FIXME!
439 stripWidth=2.7;
440 stripThickness=1;
441 // int measPhi = idhelper->measuresPhi( id );
442 // int chamberLayer = idhelper->chamberLayer( id );
443 //
444 // striplength = detEl->stripLength(id);
445 // stripWidth = detEl->cathodeReadoutPitch(chamberLayer,measPhi);
446 // stripThickness = (measPhi==1) ? 0.9: 0.8;//strip thickness - different from phi/eta to avoid hatching issues
447
448 localposStrip = new Amg::Vector2D;
449 if( !(detEl->stripPosition(id,*localposStrip)) )
450 {
451 VP1Msg::message("Warning: Local strip position is NULL");
452 }
453}
virtual bool stripPosition(const Identifier &id, Amg::Vector2D &pos) const override final
strip position - should be renamed to channel position If the strip number is outside the range of va...
static const sTgcIdHelper * stgcIDHelper()

◆ fillTGCValues()

void HitToSoNode::fillTGCValues ( Identifier & id,
const Trk::TrkDetElementBase * baseDetEl,
double & striplength,
double & stripWidth,
double & stripThickness,
Amg::Vector2D *& localposStrip )
private

Definition at line 305 of file HitToSodeNode.cxx.

305 {
306 const TgcIdHelper * idhelper = VP1DetInfo::tgcIDHelper();
307 const MuonGM::TgcReadoutElement* detEl =
308 dynamic_cast<const MuonGM::TgcReadoutElement*>(baseDetEl);
309 if (!idhelper || !detEl){
310 VP1Msg::message("Could not get either TGC IdHelper or det element");
311 localposStrip = new Amg::Vector2D;
312 return;
313 }
314
315 int plane = idhelper->gasGap( id );
316 int strip = idhelper->channel( id );
317 int isStrip = idhelper->isStrip( id );
318
319 if (isStrip){
320 striplength = detEl->stripLength();
321 stripWidth = detEl->stripWidth(plane, strip);
322 stripThickness = 3*0.8+0.1;
323 } else {
324 striplength = detEl->gangShortWidth(plane, strip);
325 stripWidth = detEl->gangRadialLength(plane, strip);
326 stripThickness = 3*0.8;
327 }
328 stripWidth=std::max(10.0,stripWidth);
329 // Translation from objects local position to the strip position
330 // get local position on wire plane, here we have to use a tolarance as the wire plane is located 2.5 CLHEP::mm
331 // from the strip plane
332
333 Amg::Vector2D localPos_a;
334 Amg::Vector3D dummy; // this is not actually used
335 Amg::Vector3D globalPos_a = detEl->channelPos( id );
336 bool ok = detEl->surface( id ).globalToLocal(globalPos_a, dummy, localPos_a);
337 if (ok) {
338 localposStrip = new Amg::Vector2D(localPos_a);
339 }
340 else{
341 VP1Msg::message("fillTGCValues - Could not get localposStrip!!");
342 }
343
344
345 // std::cout<<"HitToSoNode::fillTGCValues channelPos = "<<detEl->channelPos( id )<<std::endl;
346 if( !localposStrip )
347 {
348 localposStrip = new Amg::Vector2D;
349 VP1Msg::message("Warning: Local strip position was NULL");
350 }
351 return;
352}
Amg::Vector3D channelPos(const Identifier &id) const
Returns the position of the active channel (wireGang or strip)
double stripLength() const
Returns the length of each strip which is equal to the height of the chamber.
double gangShortWidth(int gasGap, int gang) const
Returns the length of the most bottom wire in the gang.
double stripWidth(int gasGap, int strip) const
Returns the width of a given strip in the gasGap i.
double gangRadialLength(int gasGap, int gang) const
Returns the length of the wire gang along the radial direction [pitch x N_{wire}^{gang}...
int channel(const Identifier &id) const override
int gasGap(const Identifier &id) const override
get the hashes

◆ fillValues()

void HitToSoNode::fillValues ( Identifier & id,
const Trk::TrkDetElementBase * baseDetEl,
double & striplength,
double & stripWidth,
double & stripThickness,
Amg::Vector2D *& localposStrip )
private

Definition at line 286 of file HitToSodeNode.cxx.

286 {
287
288 const AtlasDetectorID * idhelper = VP1DetInfo::atlasIDHelper();
289 if (!idhelper) return;
290 if (idhelper->is_muon(id)){
291 if (idhelper->is_rpc(id)) { fillRPCValues(id, baseDetEl, striplength, stripWidth, stripThickness, localposStrip); return;}
292 if (idhelper->is_tgc(id)) { fillTGCValues(id, baseDetEl, striplength, stripWidth, stripThickness, localposStrip); return;}
293 if (idhelper->is_csc(id)) { fillCSCValues(id, baseDetEl, striplength, stripWidth, stripThickness, localposStrip); return;}
294 if (idhelper->is_stgc(id)) { fillSTGCValues(id, baseDetEl, striplength, stripWidth, stripThickness, localposStrip); return;}
295 if (idhelper->is_mm(id)) { fillMMValues(id, baseDetEl, striplength, stripWidth, stripThickness, localposStrip); return;}
296 } else {
297 if (idhelper->is_indet(id) && (idhelper->is_pixel(id)||idhelper->is_sct(id))) {
298 fillSiValues(id, baseDetEl, striplength, stripWidth, stripThickness, localposStrip); return;
299 }
300 }
301 VP1Msg::message("Warning: HitToSoNode::fillValues(...) unknown technology.");
302 return;
303}
bool is_indet(Identifier id) const
bool is_stgc(Identifier id) const
bool is_rpc(Identifier id) const
bool is_sct(Identifier id) const
bool is_tgc(Identifier id) const
bool is_pixel(Identifier id) const
bool is_muon(Identifier id) const
bool is_csc(Identifier id) const
bool is_mm(Identifier id) const
void fillRPCValues(Identifier &id, const Trk::TrkDetElementBase *baseDetEl, double &striplength, double &stripWidth, double &stripThickness, Amg::Vector2D *&localposStrip)
void fillTGCValues(Identifier &id, const Trk::TrkDetElementBase *baseDetEl, double &striplength, double &stripWidth, double &stripThickness, Amg::Vector2D *&localposStrip)
void fillCSCValues(Identifier &id, const Trk::TrkDetElementBase *baseDetEl, double &striplength, double &stripWidth, double &stripThickness, Amg::Vector2D *&localposStrip)
void fillSTGCValues(Identifier &id, const Trk::TrkDetElementBase *baseDetEl, double &striplength, double &stripWidth, double &stripThickness, Amg::Vector2D *&localposStrip)
void fillMMValues(Identifier &id, const Trk::TrkDetElementBase *baseDetEl, double &striplength, double &stripWidth, double &stripThickness, Amg::Vector2D *&localposStrip)
void fillSiValues(Identifier &id, const Trk::TrkDetElementBase *baseDetEl, double &striplength, double &stripWidth, double &stripThickness, Amg::Vector2D *&localposStrip)
static const AtlasDetectorID * atlasIDHelper()

◆ getTGCAngle()

double HitToSoNode::getTGCAngle ( Identifier id) const

returns the phi angle of the passed phi strip identifier.

calculate two points along the tgc phi strip in the local tgc reference frame

Definition at line 63 of file HitToSodeNode.cxx.

63 {
64 const TgcIdHelper * idhelper = VP1DetInfo::tgcIDHelper();
65 if (!idhelper) {
66 VP1Msg::message("HitToSoNode::getTGCAngle WARNING: could not get TGC idhelper!");
67 return 0.0;
68 }
69
70 if ( !idhelper->isStrip(id)) return 0.0; // Not phi strip
71 const MuonGM::TgcReadoutElement* detEl = VP1DetInfo::muonDetMgr ()->getTgcReadoutElement(id);
72
73 // int stationeta=idHelper->stationEta(id);
74 // int stripNo = idHelper->channel(id);
75 // int gasGap = idHelper->gasGap(id);
76 //
77 // const MuonGM::TgcReadoutElement *ele= VP1DetInfo::muonDetMgr ()->getTgcReadoutElement(id);
78 //
79 // double stripLength = ele->stripLength(gasGap,stripNo);
80 // double stripWidth=std::abs(ele->stripMaxX(gasGap, stripNo, (*lp)[Trk::locZ])-ele->stripMinX(gasGap, stripNo, (*lp)[Trk::locZ]));
81 //
82 // double localX1=ele->stripCtrX(gasGap, stripNo, stripLength/2.);
83 // double localX2=ele->stripCtrX(gasGap, stripNo, -stripLength/2.);
84 // if (stationeta>0) {
85 // localX1=-localX1;
86 // localX2=-localX2;
87 // }
88 //
89 // return atan2(localX2-localX1,stripLength);
90
91 int stripNo = idhelper->channel(id);
92 int gasGap = idhelper->gasGap(id);
93
94
96
97 Amg::Vector3D lposTGC = detEl->stripCenterLocX(gasGap, stripNo, 0.) * Amg::Vector3D::UnitX();
98 const double shift = detEl->getStationEta() > 0 ? 1.*Gaudi::Units::cm : - 1.*Gaudi::Units::cm;
99 Amg::Vector3D lposTgcShifted = detEl->stripCenterLocX(gasGap, stripNo, shift) * Amg::Vector3D::UnitX()
100 + shift * Amg::Vector3D::UnitY();
101
102 return (lposTGC - lposTgcShifted).phi();
103
104}
const TgcReadoutElement * getTgcReadoutElement(const Identifier &id) const
access via extended identifier (requires unpacking)
double stripCenterLocX(int gasGap, int strip, double radialPos) const
Returns the local X of the strip center at a given local radial position.
static const MuonGM::MuonDetectorManager * muonDetMgr()

◆ helperClassName()

const QString & VP1HelperClassBase::helperClassName ( ) const
inlineinherited

Definition at line 51 of file VP1HelperClassBase.h.

51{ return m_helpername; }

◆ message() [1/3]

void VP1HelperClassBase::message ( const QString & str) const
inherited

Definition at line 49 of file VP1HelperClassBase.cxx.

50{
51 if (m_helpername.isEmpty()) {
52 if (m_system)
53 m_system->message(str);
54 else
55 std::cout<<VP1Msg::prefix_msg()<<" [nameless helper class]: "<<str.toStdString()<<std::endl;
56 } else {
57 if (m_system)
58 m_system->message("["+m_helpername+"] " + str);
59 else
60 std::cout<<VP1Msg::prefix_msg()<<" ["<<m_helpername.toStdString()<<"]: "<<str.toStdString()<<std::endl;
61 }
62}
static const char * prefix_msg()
Definition VP1Msg.h:56
static QString str(const QString &s)
Definition VP1String.h:49

◆ message() [2/3]

void VP1HelperClassBase::message ( const QString & addtostart,
const QStringList & l,
const QString & addtoend = "" ) const
inherited

Definition at line 131 of file VP1HelperClassBase.cxx.

132{
133 if (addtostart.isEmpty()) {
134 message(l,addtoend);
135 return;
136 }
137 if (addtoend.isEmpty()) {
138 for (const QString& s : l)
139 message(addtostart+s);
140 } else {
141 for (const QString& s : l)
142 message(addtostart+s+addtoend);
143 }
144}
void message(const QString &) const

◆ message() [3/3]

void VP1HelperClassBase::message ( const QStringList & l,
const QString & addtoend = "" ) const
inherited

Definition at line 91 of file VP1HelperClassBase.cxx.

92{
93 if (addtoend.isEmpty()) {
94 for (const QString& s : l)
95 message(s);
96 } else {
97 for (const QString& s : l)
98 message(s+addtoend);
99 }
100}

◆ messageDebug() [1/3]

void VP1HelperClassBase::messageDebug ( const QString & str) const
inherited

Definition at line 65 of file VP1HelperClassBase.cxx.

66{
67 if (!VP1Msg::debug())
68 return;
69 std::string sysstring(m_system ? " in "+m_system->name().toStdString() : std::string(""));
70 if (m_helpername.isEmpty()) {
71 std::cout<<VP1Msg::prefix_debug()<<" [helper"<<sysstring<<"]: "<<str.toStdString()<<std::endl;
72 } else {
73 std::cout<<VP1Msg::prefix_debug()<<" ["<<m_helpername.toStdString()<<sysstring<<"]: "<<str.toStdString()<<std::endl;
74 }
75}
static bool debug()
Definition VP1Msg.h:32
static const char * prefix_debug()
Definition VP1Msg.h:57

◆ messageDebug() [2/3]

void VP1HelperClassBase::messageDebug ( const QString & addtostart,
const QStringList & l,
const QString & addtoend = "" ) const
inherited

Definition at line 147 of file VP1HelperClassBase.cxx.

148{
149 if (!VP1Msg::debug())
150 return;
151 if (addtostart.isEmpty()) {
152 messageDebug(l,addtoend);
153 return;
154 }
155 if (addtoend.isEmpty()) {
156 for (const QString& s : l)
157 messageDebug(addtostart+s);
158 } else {
159 for (const QString& s : l)
160 messageDebug(addtostart+s+addtoend);
161 }
162}
void messageDebug(const QString &) const

◆ messageDebug() [3/3]

void VP1HelperClassBase::messageDebug ( const QStringList & l,
const QString & addtoend = "" ) const
inherited

Definition at line 103 of file VP1HelperClassBase.cxx.

104{
105 if (!VP1Msg::debug())
106 return;
107 if (addtoend.isEmpty()) {
108 for (const QString& s : l)
109 messageDebug(s);
110 } else {
111 for (const QString& s : l)
112 messageDebug(s+addtoend);
113 }
114}

◆ messageVerbose() [1/3]

void VP1HelperClassBase::messageVerbose ( const QString & str) const
inherited

Definition at line 78 of file VP1HelperClassBase.cxx.

79{
80 if (!VP1Msg::verbose())
81 return;
82 std::string sysstring(m_system ? " in "+m_system->name().toStdString() : std::string(""));
83 if (m_helpername.isEmpty()) {
84 std::cout<<VP1Msg::prefix_verbose()<<" [helper"<<sysstring<<"]: "<<str.toStdString()<<std::endl;
85 } else {
86 std::cout<<VP1Msg::prefix_verbose()<<" ["<<m_helpername.toStdString()<<sysstring<<"]: "<<str.toStdString()<<std::endl;
87 }
88}
static bool verbose()
Definition VP1Msg.h:31
static const char * prefix_verbose()
Definition VP1Msg.h:59

◆ messageVerbose() [2/3]

void VP1HelperClassBase::messageVerbose ( const QString & addtostart,
const QStringList & l,
const QString & addtoend = "" ) const
inherited

Definition at line 165 of file VP1HelperClassBase.cxx.

166{
167 if (!VP1Msg::verbose())
168 return;
169 if (addtostart.isEmpty()) {
170 messageVerbose(l,addtoend);
171 return;
172 }
173 if (addtoend.isEmpty()) {
174 for (const QString& s : l)
175 messageVerbose(addtostart+s);
176 } else {
177 for (const QString& s : l)
178 messageVerbose(addtostart+s+addtoend);
179 }
180}

◆ messageVerbose() [3/3]

void VP1HelperClassBase::messageVerbose ( const QStringList & l,
const QString & addtoend = "" ) const
inherited

Definition at line 117 of file VP1HelperClassBase.cxx.

118{
119 if (!VP1Msg::verbose())
120 return;
121 if (addtoend.isEmpty()) {
122 for (const QString& s : l)
124 } else {
125 for (const QString& s : l)
126 messageVerbose(s+addtoend);
127 }
128}

◆ operator=()

HitToSoNode & HitToSoNode::operator= ( const HitToSoNode & )
private

◆ setHelperClassName()

void VP1HelperClassBase::setHelperClassName ( const QString & n)
inlineprotectedinherited

Definition at line 59 of file VP1HelperClassBase.h.

◆ setSystemBasePointer()

void VP1HelperClassBase::setSystemBasePointer ( IVP1System * sys)
inherited

Definition at line 197 of file VP1HelperClassBase.cxx.

198{
199 m_system = sys;
200 if (VP1Msg::verbose()){
201 vp1helperclassbase_instanceMap[this] = (m_system?m_system->name():QString(""));
202 }
203}
static std::map< VP1HelperClassBase *, QString > vp1helperclassbase_instanceMap

◆ str() [1/30]

QString VP1String::str ( const Amg::Vector3D & t)
inlinestaticinherited

Definition at line 98 of file VP1String.h.

98{ return "("+str(t.x())+", "+str(t.y())+", "+str(t.z())+")"; }

◆ str() [2/30]

QString VP1String::str ( const bool b)
inlinestaticinherited

Definition at line 53 of file VP1String.h.

53{ return b?"True":"False"; }

◆ str() [3/30]

QString VP1String::str ( const char * c)
inlinestaticinherited

Definition at line 50 of file VP1String.h.

50{ return c; }

◆ str() [4/30]

QString VP1String::str ( const double & d)
inlinestaticinherited

Definition at line 81 of file VP1String.h.

81{ return QString::number(d); }

◆ str() [5/30]

QString VP1String::str ( const float & f)
inlinestaticinherited

Definition at line 82 of file VP1String.h.

82{ return QString::number(f); }

◆ str() [6/30]

template<class T>
QString VP1String::str ( const HepGeom::BasicVector3D< T > & t)
inlinestaticinherited

Definition at line 95 of file VP1String.h.

95{ return "("+str(t.x())+", "+str(t.y())+", "+str(t.z())+")"; }

◆ str() [7/30]

QString VP1String::str ( const QColor & c)
staticinherited

Definition at line 30 of file VP1String.cxx.

31{
32 return c.isValid() ? c.name() : "Invalid";
33}

◆ str() [8/30]

template<class T>
QString VP1String::str ( const QFlags< T > & f)
inlinestaticinherited

Definition at line 91 of file VP1String.h.

91{ return "0x"+QString::number(f, 16).toUpper().rightJustified(8,'0'); }

◆ str() [9/30]

template<class T>
QString VP1String::str ( const QList< T > & t)
inlinestaticinherited

Definition at line 102 of file VP1String.h.

102{ return "QList of size"+QString::number(t.size()); }

◆ str() [10/30]

QString VP1String::str ( const QString & s)
inlinestaticinherited

Definition at line 49 of file VP1String.h.

49{ return s; }

◆ str() [11/30]

QString VP1String::str ( const SbColor & c)
staticinherited

Definition at line 36 of file VP1String.cxx.

37{
39}
static QColor sbcol2qcol(const SbColor &)

◆ str() [12/30]

QString VP1String::str ( const SbVec2d & v)
staticinherited

Definition at line 61 of file VP1String.cxx.

61{ double x,y; v.getValue(x,y); return "("+str(x)+", "+str(y)+")"; }
#define y
#define x

◆ str() [13/30]

QString VP1String::str ( const SbVec2f & v)
staticinherited

Definition at line 62 of file VP1String.cxx.

62{ float x,y; v.getValue(x,y); return "("+str(x)+", "+str(y)+")"; }

◆ str() [14/30]

QString VP1String::str ( const SbVec2s & v)
staticinherited

Definition at line 63 of file VP1String.cxx.

63{ short x,y; v.getValue(x,y); return "("+str(x)+", "+str(y)+")"; }

◆ str() [15/30]

QString VP1String::str ( const SbVec3d & v)
staticinherited

Definition at line 64 of file VP1String.cxx.

64{ double x,y,z; v.getValue(x,y,z); return "("+str(x)+", "+str(y)+", "+str(z)+")"; }
#define z

◆ str() [16/30]

QString VP1String::str ( const SbVec3f & v)
staticinherited

Definition at line 65 of file VP1String.cxx.

65{ float x,y,z; v.getValue(x,y,z); return "("+str(x)+", "+str(y)+", "+str(z)+")"; }

◆ str() [17/30]

QString VP1String::str ( const SbVec3s & v)
staticinherited

Definition at line 66 of file VP1String.cxx.

66{ short x,y,z; v.getValue(x,y,z); return "("+str(x)+", "+str(y)+", "+str(z)+")"; }

◆ str() [18/30]

QString VP1String::str ( const SbVec4d & v)
staticinherited

Definition at line 67 of file VP1String.cxx.

67{ double x,y,z,t; v.getValue(x,y,z,t); return "("+str(x)+", "+str(y)+", "+str(z)+", "+str(t)+")"; }

◆ str() [19/30]

QString VP1String::str ( const SbVec4f & v)
staticinherited

Definition at line 68 of file VP1String.cxx.

68{ float x,y,z,t; v.getValue(x,y,z,t); return "("+str(x)+", "+str(y)+", "+str(z)+", "+str(t)+")"; }

◆ str() [20/30]

template<class T>
QString VP1String::str ( const T * t)
inlinestaticinherited

Definition at line 87 of file VP1String.h.

87{ return str(static_cast<const void* >(t)); }

◆ str() [21/30]

QString VP1String::str ( const void * p)
staticinherited

Definition at line 48 of file VP1String.cxx.

49{
50 if (p) {
51 std::ostringstream s;
52 s << p;
53 // Explicitly naming QString here avoids a cppcheck warning.
54 return QString (s.str().c_str());
55 } else {
56 return "NULL";
57 }
58}

◆ str() [22/30]

QString VP1String::str ( const VP1Interval & i)
staticinherited

Definition at line 42 of file VP1String.cxx.

43{
44 return i.toString();
45}

◆ str() [23/30]

QString VP1String::str ( int n)
inlinestaticinherited

Definition at line 77 of file VP1String.h.

77{ return QString::number(n); }

◆ str() [24/30]

QString VP1String::str ( long n)
inlinestaticinherited

Definition at line 75 of file VP1String.h.

75{ return QString::number(n); }

◆ str() [25/30]

QString VP1String::str ( qlonglong n)
inlinestaticinherited

Definition at line 79 of file VP1String.h.

79{ return QString::number(n); }

◆ str() [26/30]

QString VP1String::str ( qulonglong n)
inlinestaticinherited

Definition at line 80 of file VP1String.h.

80{ return QString::number(n); }

◆ str() [27/30]

QString VP1String::str ( short int n)
inlinestaticinherited

Definition at line 73 of file VP1String.h.

73{ return QString::number(n); }

◆ str() [28/30]

QString VP1String::str ( uint n)
inlinestaticinherited

Definition at line 78 of file VP1String.h.

78{ return QString::number(n); }

◆ str() [29/30]

QString VP1String::str ( ulong n)
inlinestaticinherited

Definition at line 76 of file VP1String.h.

76{ return QString::number(n); }

◆ str() [30/30]

QString VP1String::str ( unsigned short int n)
inlinestaticinherited

Definition at line 74 of file VP1String.h.

74{ return QString::number(n); }

◆ systemBase()

IVP1System * VP1HelperClassBase::systemBase ( ) const
inlineinherited

Definition at line 50 of file VP1HelperClassBase.h.

50{ return m_system; }

◆ verbose()

bool VP1HelperClassBase::verbose ( )
inlinestaticinherited

Definition at line 32 of file VP1HelperClassBase.h.

32{ return s_vp1verbose; } // Returns true if env var VP1_VERBOSE_OUTPUT=1
static const bool s_vp1verbose

◆ warnUndeletedInstances()

void VP1HelperClassBase::warnUndeletedInstances ( )
staticinherited

Definition at line 183 of file VP1HelperClassBase.cxx.

184{
186 return;
187 std::cout << "WARNING: Detected "<<vp1helperclassbase_instanceMap.size()<<" undeleted helper class instances:"<<std::endl;
188
189 std::map<VP1HelperClassBase*,QString>::iterator it,itE(vp1helperclassbase_instanceMap.end());
190 for (it = vp1helperclassbase_instanceMap.begin();it!=itE;++it) {
191 std::cout << " ==> "<<it->first<<": "<<it->first->m_helpername.toStdString()
192 << (it->second.isEmpty()?QString(""):" (in system "+it->second+")").toStdString()<<std::endl;
193 }
194}

Member Data Documentation

◆ m_d

Imp* HitToSoNode::m_d
private

Definition at line 68 of file HitToSoNode.h.

◆ m_helpername

QString VP1HelperClassBase::m_helpername
privateinherited

Definition at line 67 of file VP1HelperClassBase.h.

◆ m_system

IVP1System* VP1HelperClassBase::m_system
privateinherited

Definition at line 68 of file VP1HelperClassBase.h.

◆ s_vp1verbose

const bool VP1HelperClassBase::s_vp1verbose = VP1QtUtils::environmentVariableIsOn("VP1_VERBOSE_OUTPUT")
staticprivateinherited

Definition at line 69 of file VP1HelperClassBase.h.


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