|
ATLAS Offline Software
|
Go to the documentation of this file.
17 #include <Inventor/nodes/SoSeparator.h>
18 #include <Inventor/nodes/SoTranslation.h>
19 #include <Inventor/nodes/SoNode.h>
20 #include <Inventor/nodes/SoTransform.h>
21 #include <Inventor/nodes/SoPointSet.h>
22 #include <Inventor/nodes/SoLineSet.h>
66 VP1Msg::message(
"HitToSoNode::getTGCAngle WARNING: could not get TGC idhelper!");
70 if ( !idhelper->
isStrip(
id))
return 0.0;
91 int stripNo = idhelper->
channel(
id);
100 + shift * Amg::Vector3D::UnitY();
102 return (lposTGC - lposTgcShifted).phi();
113 if ( useSurfacePositionOnly ) {
115 theHitTransform->translation.setValue(theSurface.
center()[0], theSurface.
center()[1], theSurface.
center()[2]);
123 return theHitTransform;
132 if (!idhelper||!detEl) {
133 return new SoTransform;
137 SoTransform * theHitTransform =0;
146 localRot.setIdentity();
158 localRot *= theSurface.
transform().rotation();
173 if (!useSurfacePositionOnly){
175 theHitTransform->translation.setValue((theHitGPos)[0], (theHitGPos)[1], (theHitGPos)[2]);
177 return theHitTransform;
185 VP1Msg::message(
"HitToSoNode::buildTubeShapes ERROR: Trk::CylinderBounds conversion failed");
197 double strawLength=2.0*halflength;
198 if (strawLength<160.0)
199 strawLength = 2*349.3150-strawLength;
201 SoPointSet * scatPointSet =
new SoPointSet;
202 SoVertexProperty * scatVtxProperty =
new SoVertexProperty;
203 scatVtxProperty->vertex.set1Value(0,0.0
f,0.0
f,strawLength);
204 scatPointSet->numPoints=1;
205 scatPointSet->vertexProperty.setValue(scatVtxProperty);
207 shape_detailed->addChild(scatPointSet);
208 shape_simple->addChild(scatPointSet);
216 shape_simple->addChild(simpleShape);
219 shape_detailed->addChild(simpleShape);
230 double stripLength =100.0, stripWidth = 10.0, stripThickness=1.0;
231 std::optional<Amg::Vector2D> localposROT=std::nullopt;
246 localposROT.emplace();
247 localposROT->setZero();
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]),
258 gpSep->addChild(localtransGP);
260 shape_detailed->addChild(gpSep);
264 SoTranslation * localtrans0 =
new SoTranslation;
265 localtrans0->translation.setValue(
static_cast<float>( (*localposStrip)[
Trk::locX]),
266 static_cast<float>( (*localposStrip)[
Trk::locY]),
270 shape_simple->addChild(localtrans0);
273 shape_detailed->addChild(localtrans0);
276 SoTranslation * localtrans1 =
new SoTranslation;
277 localtrans1->translation.setValue(
static_cast<float>( -(*localposStrip)[
Trk::locX]),
278 static_cast<float>( -(*localposStrip)[
Trk::locY]),
280 shape_simple->addChild(localtrans1);
281 shape_detailed->addChild(localtrans1);
283 delete localposStrip;
289 if (!idhelper)
return;
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;}
298 fillSiValues(
id, baseDetEl, striplength, stripWidth, stripThickness, localposStrip);
return;
301 VP1Msg::message(
"Warning: HitToSoNode::fillValues(...) unknown technology.");
309 if (!idhelper || !detEl){
315 int plane = idhelper->
gasGap(
id );
322 stripThickness = 3*0.8+0.1;
326 stripThickness = 3*0.8;
328 stripWidth=
std::max(10.0,stripWidth);
358 if (!idhelper || !detEl){
367 stripThickness = (measPhi==1) ? 0.9: 0.8;
394 if (!idhelper || !detEl){
405 stripThickness = (measPhi==1) ? 0.9: 0.8;
432 if (!idhelper || !detEl){
459 if (!idhelper || !detEl){
501 stripWidth = detEl->
phiPitch( *localposStrip );
502 stripThickness = detEl->
thickness()/10.0;
506 #endif // BUILDVP1LIGHT
bool is_pixel(Identifier id) const
double getTGCAngle(Identifier id) const
returns the phi angle of the passed phi strip identifier.
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...
bool is_rpc(Identifier id) const
static const MmIdHelper * mmIDHelper()
void buildTubeShapes(const Trk::RIO_OnTrack &rio, SoSeparator *&shape_simple, SoSeparator *&shape_detailed, bool blockGP, double length, bool doProjection)
double StripLength(bool measphi) const
returns the strip length for the phi or eta plane
void fillMMValues(Identifier &id, const Trk::TrkDetElementBase *baseDetEl, double &striplength, double &stripWidth, double &stripThickness, Amg::Vector2D *&localposStrip)
bool is_csc(Identifier id) const
int gasGap(const Identifier &id) const override
get the hashes
bool is_sct(Identifier id) const
Eigen::Matrix< double, 2, 1 > Vector2D
void fillTGCValues(Identifier &id, const Trk::TrkDetElementBase *baseDetEl, double &striplength, double &stripWidth, double &stripThickness, Amg::Vector2D *&localposStrip)
void messageVerbose(const QString &) const
virtual const Amg::Vector3D & globalPosition() const override=0
Interface method to get the global Position.
bool is_mm(Identifier id) const
bool measuresPhi(const Identifier &id) const override
double stripCenterLocX(int gasGap, int strip, double radialPos) const
Returns the local X of the strip center at a given local radial position.
double stripLength() const
Returns the length of each strip which is equal to the height of the chamber.
An RpcReadoutElement corresponds to a single RPC module; therefore typicaly a barrel muon station con...
static const sTgcIdHelper * stgcIDHelper()
static const AtlasDetectorID * atlasIDHelper()
void fillSTGCValues(Identifier &id, const Trk::TrkDetElementBase *baseDetEl, double &striplength, double &stripWidth, double &stripThickness, Amg::Vector2D *&localposStrip)
const Amg::Vector3D & center() const
Returns the center position of the Surface.
double etaPitch() const
Pitch (inline methods)
virtual const Trk::PlaneSurface & surface() const override
access to chamber surface (phi orientation), uses the first gas gap
Amg::RotationMatrix3D setPhi(Amg::RotationMatrix3D mat, double angle, int convention=0)
double stripLength(int chamberLayer, int measuresPhi, int stripNumber, double &epsilon) const
const double driftdischeight
Amg::Vector3D channelPos(const Identifier &id) const
Returns the position of the active channel (wireGang or strip)
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...
int channel(const Identifier &id) const override
const TgcReadoutElement * getTgcReadoutElement(const Identifier &id) const
access via extended identifier (requires unpacking)
Amg::Transform3D getTransformFromRotTransl(Amg::RotationMatrix3D rot, Amg::Vector3D transl_vec)
double get(ParamDefs par) const
Retrieve specified parameter (const version).
static const TgcIdHelper * tgcIDHelper()
double phiPitch() const
Pitch (inline methods)
std::string toString(const Translation3D &translation, int precision=4)
GeoPrimitvesToStringConverter.
double stripWidth(int gasGap, int strip) const
Returns the width of a given strip in the gasGap i.
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...
bool is_tgc(Identifier id) const
double angle(const GeoTrf::Vector2D &a, const GeoTrf::Vector2D &b)
double gangShortWidth(int gasGap, int gang) const
Returns the length of the most bottom wire in the gang.
An sTgcReadoutElement corresponds to a single STGC module; therefore typicaly a barrel muon station c...
Eigen::Affine3d Transform3D
A TgcReadoutElement corresponds to a single TGC chamber; therefore typically a TGC station contains s...
SoNode * getShapeNode_Strip(double length, double width=0, double depth=0)
HitsSoNodeManager nodeManager
virtual const Surface & surface() const =0
Return surface associated with this detector element.
double gangRadialLength(int gasGap, int gang) const
Returns the length of the wire gang along the radial direction [pitch x N_{wire}^{gang}].
void fillRPCValues(Identifier &id, const Trk::TrkDetElementBase *baseDetEl, double &striplength, double &stripWidth, double &stripThickness, Amg::Vector2D *&localposStrip)
static const RpcIdHelper * rpcIDHelper()
void buildStripShapes(const Trk::RIO_OnTrack &rio, SoSeparator *&shape_simple, SoSeparator *&shape_detailed, bool blockGP)
int isStrip(const Identifier &id) const
isStrip corresponds to measuresPhi
void fillSiValues(Identifier &id, const Trk::TrkDetElementBase *baseDetEl, double &striplength, double &stripWidth, double &stripThickness, Amg::Vector2D *&localposStrip)
void fillValues(Identifier &id, const Trk::TrkDetElementBase *baseDetEl, double &striplength, double &stripWidth, double &stripThickness, Amg::Vector2D *&localposStrip)
virtual const SurfaceBounds & bounds() const =0
Surface Bounds method.
Amg::Vector3D stripPos(const Identifier &id) const
bool is_indet(Identifier id) const
Eigen::Matrix< double, 3, 1 > Vector3D
const LocalParameters & localParameters() const
Interface method to get the LocalParameters.
SoTransform * createTGC_Transform(const Trk::RIO_OnTrack &rio, bool useSurfacePositionOnly) const
TGCs are rotated.
double StripWidth(bool measphi) const
returns the strip width for the phi or eta plane
Amg::Vector2D rawLocalPositionOfCell(const SiCellId &cellId) const
Returns position (center) of cell.
static const MuonGM::MuonDetectorManager * muonDetMgr()
bool is_muon(Identifier id) const
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...
static void message(const QString &, IVP1System *sys=0)
Eigen::Matrix< double, 3, 3 > RotationMatrix3D
SoTransform * createTransform(const Trk::RIO_OnTrack &rio, bool useSurfacePositionOnly) const
Identifier identify() const
return the identifier -extends MeasurementBase
SoNode * getShapeNode_Cross(double extent)
bool is_stgc(Identifier id) const
static const CscIdHelper * cscIDHelper()
Amg::Vector3D stripPos(const Identifier &id) const
takes into account internal alignment parameters, hence gives accurate answer
bool measuresPhi(const Identifier &id) const override
virtual const TrkDetElementBase * detectorElement() const =0
returns the detector element, assoicated with the PRD of this class
SoNode * getShapeNode_DriftTube(double halfLength, double radius)
const Amg::Transform3D & transform() const
Returns HepGeom::Transform3D by reference.
static SoTransform * toSoTransform(const HepGeom::Transform3D &, SoTransform *t=0)
HitToSoNode(IVP1System *sys=0)
This class provides an interface to generate or decode an identifier for the upper levels of the dete...
int chamberLayer(const Identifier &id) const
int getStationEta() const
double halflengthZ() const
This method returns the halflengthZ.
void fillCSCValues(Identifier &id, const Trk::TrkDetElementBase *baseDetEl, double &striplength, double &stripWidth, double &stripThickness, Amg::Vector2D *&localposStrip)
double cathodeReadoutPitch(int chLayer, int measuresPhi) const