ATLAS Offline Software
HitToSodeNode.cxx
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2021 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 
6 // Update: Riccardo Maria BIANCHI rbianchi@cern.ch Feb 2014 //
7 
8 #ifndef BUILDVP1LIGHT
9 
10 #include "VP1Utils/HitToSoNode.h"
13 #include "VP1Utils/VP1DetInfo.h"
14 #include "VP1Base/VP1Msg.h"
16 
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>
23 
24 #include "TrkSurfaces/Surface.h"
31 
33 
34 #include <sstream>
35 #include <cmath>
36 
37 
40 
42 public:
43  Imp() : theclass(0), driftdischeight(0.15) {}
45  const double driftdischeight;
47 };
48 
50  : VP1HelperClassBase(sys,"HitToSoNode"), m_d(new Imp)
51 {
52  m_d->theclass = this;
53 }
54 
55 //____________________________________________________________________
57 {
58  messageVerbose("destructor begin");
59  delete m_d;
60  messageVerbose("destructor end");
61 }
62 
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
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 }
105 
106 //____________________________________________________________________
107 SoTransform * HitToSoNode::createTransform(const Trk::RIO_OnTrack& rio, bool useSurfacePositionOnly) const
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 }
125 
126 SoTransform * HitToSoNode::createTGC_Transform(const Trk::RIO_OnTrack& rio, bool useSurfacePositionOnly) const {
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 }
179 
180 void HitToSoNode::buildTubeShapes(const Trk::RIO_OnTrack& rio, SoSeparator*&shape_simple, SoSeparator*&shape_detailed, bool , double length, bool doProjection)
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 }
224 
225 void HitToSoNode::buildStripShapes(const Trk::RIO_OnTrack& rio, SoSeparator*&shape_simple, SoSeparator*&shape_detailed, bool blockGP)
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 }
285 
286 void HitToSoNode::fillValues(Identifier& id, const Trk::TrkDetElementBase* baseDetEl, double& striplength, double& stripWidth, double& stripThickness, Amg::Vector2D*& localposStrip){
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 }
304 
305 void HitToSoNode::fillTGCValues(Identifier& id, const Trk::TrkDetElementBase* baseDetEl, double& striplength, double& stripWidth,double& stripThickness, Amg::Vector2D*& localposStrip){
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 }
353 
354 void HitToSoNode::fillRPCValues(Identifier& id, const Trk::TrkDetElementBase* baseDetEl, double& striplength, double& stripWidth, double& stripThickness, Amg::Vector2D*& localposStrip){
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 }
389 
390 void HitToSoNode::fillCSCValues(Identifier& id, const Trk::TrkDetElementBase* baseDetEl, double& striplength, double& stripWidth, double& stripThickness, Amg::Vector2D*& localposStrip){
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 }
427 
428 void HitToSoNode::fillSTGCValues(Identifier& id, const Trk::TrkDetElementBase* baseDetEl, double& striplength, double& stripWidth, double& stripThickness, Amg::Vector2D*& localposStrip){
429  const sTgcIdHelper * idhelper = VP1DetInfo::stgcIDHelper();
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 }
454 
455 void HitToSoNode::fillMMValues(Identifier& id, const Trk::TrkDetElementBase* baseDetEl, double& striplength, double& stripWidth, double& stripThickness, Amg::Vector2D*& localposStrip){
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 }
486 
487 void HitToSoNode::fillSiValues(Identifier& id, const Trk::TrkDetElementBase* baseDetEl, double& striplength, double& stripWidth, double& stripThickness, Amg::Vector2D*& localposStrip){
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 }
505 
506 #endif // BUILDVP1LIGHT
HitsSoNodeManager.h
AtlasDetectorID::is_pixel
bool is_pixel(Identifier id) const
Definition: AtlasDetectorID.h:760
HitToSoNode::getTGCAngle
double getTGCAngle(Identifier id) const
returns the phi angle of the passed phi strip identifier.
Definition: HitToSodeNode.cxx:63
Trk::PlaneSurface::globalToLocal
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...
Definition: PlaneSurface.cxx:213
AtlasDetectorID::is_rpc
bool is_rpc(Identifier id) const
Definition: AtlasDetectorID.h:875
dumpTgcDigiDeadChambers.gasGap
list gasGap
Definition: dumpTgcDigiDeadChambers.py:33
VP1DetInfo::mmIDHelper
static const MmIdHelper * mmIDHelper()
Definition: VP1DetInfo.cxx:162
HitToSoNode::buildTubeShapes
void buildTubeShapes(const Trk::RIO_OnTrack &rio, SoSeparator *&shape_simple, SoSeparator *&shape_detailed, bool blockGP, double length, bool doProjection)
Definition: HitToSodeNode.cxx:180
sTgcClusterOnTrack.h
SiliconTech::strip
@ strip
max
#define max(a, b)
Definition: cfImp.cxx:41
MuonGM::RpcReadoutElement::StripLength
double StripLength(bool measphi) const
returns the strip length for the phi or eta plane
HitToSoNode::fillMMValues
void fillMMValues(Identifier &id, const Trk::TrkDetElementBase *baseDetEl, double &striplength, double &stripWidth, double &stripThickness, Amg::Vector2D *&localposStrip)
Definition: HitToSodeNode.cxx:455
Trk::locX
@ locX
Definition: ParamDefs.h:37
AtlasDetectorID::is_csc
bool is_csc(Identifier id) const
Definition: AtlasDetectorID.h:891
Trk::locY
@ locY
local cartesian
Definition: ParamDefs.h:38
TgcIdHelper::gasGap
int gasGap(const Identifier &id) const override
get the hashes
Definition: TgcIdHelper.cxx:642
Surface.h
TgcIdHelper
Definition: TgcIdHelper.h:50
AtlasDetectorID::is_sct
bool is_sct(Identifier id) const
Definition: AtlasDetectorID.h:770
Amg::Vector2D
Eigen::Matrix< double, 2, 1 > Vector2D
Definition: GeoPrimitives.h:48
HitToSoNode::fillTGCValues
void fillTGCValues(Identifier &id, const Trk::TrkDetElementBase *baseDetEl, double &striplength, double &stripWidth, double &stripThickness, Amg::Vector2D *&localposStrip)
Definition: HitToSodeNode.cxx:305
VP1Msg.h
VP1HelperClassBase::messageVerbose
void messageVerbose(const QString &) const
Definition: VP1HelperClassBase.cxx:78
Trk::RIO_OnTrack::globalPosition
virtual const Amg::Vector3D & globalPosition() const override=0
Interface method to get the global Position.
CSV_InDetExporter.new
new
Definition: CSV_InDetExporter.py:145
AtlasDetectorID::is_mm
bool is_mm(Identifier id) const
Definition: AtlasDetectorID.h:913
RpcIdHelper::measuresPhi
bool measuresPhi(const Identifier &id) const override
Definition: RpcIdHelper.cxx:1067
MuonGM::TgcReadoutElement::stripCenterLocX
double stripCenterLocX(int gasGap, int strip, double radialPos) const
Returns the local X of the strip center at a given local radial position.
Definition: MuonDetDescr/MuonReadoutGeometry/src/TgcReadoutElement.cxx:123
MuonGM::TgcReadoutElement::stripLength
double stripLength() const
Returns the length of each strip which is equal to the height of the chamber.
MuonGM::RpcReadoutElement
An RpcReadoutElement corresponds to a single RPC module; therefore typicaly a barrel muon station con...
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/RpcReadoutElement.h:55
HitToSoNode::m_d
Imp * m_d
Definition: HitToSoNode.h:67
Trk::RIO_OnTrack
Definition: RIO_OnTrack.h:70
VP1DetInfo::stgcIDHelper
static const sTgcIdHelper * stgcIDHelper()
Definition: VP1DetInfo.cxx:161
Trk::TrkDetElementBase
Definition: TrkDetElementBase.h:52
VP1DetInfo::atlasIDHelper
static const AtlasDetectorID * atlasIDHelper()
Definition: VP1DetInfo.cxx:157
Trk::locR
@ locR
Definition: ParamDefs.h:44
MuonGM::CscReadoutElement
Definition: CscReadoutElement.h:56
HitToSoNode::fillSTGCValues
void fillSTGCValues(Identifier &id, const Trk::TrkDetElementBase *baseDetEl, double &striplength, double &stripWidth, double &stripThickness, Amg::Vector2D *&localposStrip)
Definition: HitToSodeNode.cxx:428
Trk::Surface::center
const Amg::Vector3D & center() const
Returns the center position of the Surface.
InDet::TRT_DriftCircleOnTrack
Definition: TRT_DriftCircleOnTrack.h:53
SoTransparency.h
InDetDD::SolidStateDetectorElementBase::etaPitch
double etaPitch() const
Pitch (inline methods)
MuonGM::MuonClusterReadoutElement::surface
virtual const Trk::PlaneSurface & surface() const override
access to chamber surface (phi orientation), uses the first gas gap
Definition: MuonClusterReadoutElement.h:123
RpcIdHelper
Definition: RpcIdHelper.h:51
mapkey::sys
@ sys
Definition: TElectronEfficiencyCorrectionTool.cxx:42
Amg::setPhi
Amg::RotationMatrix3D setPhi(Amg::RotationMatrix3D mat, double angle, int convention=0)
Definition: EulerAnglesHelpers.h:102
MuonGM::CscReadoutElement::stripLength
double stripLength(int chamberLayer, int measuresPhi, int stripNumber, double &epsilon) const
Definition: CscReadoutElement.cxx:292
MMClusterOnTrack.h
RpcIdHelper.h
HitToSoNode::Imp::theclass
HitToSoNode * theclass
Definition: HitToSodeNode.cxx:44
HitToSoNode::Imp::driftdischeight
const double driftdischeight
Definition: HitToSodeNode.cxx:45
MuonGM::TgcReadoutElement::channelPos
Amg::Vector3D channelPos(const Identifier &id) const
Returns the position of the active channel (wireGang or strip)
MuonGM::sTgcReadoutElement::stripPosition
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...
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h:321
TgcIdHelper::channel
int channel(const Identifier &id) const override
Definition: TgcIdHelper.cxx:649
MuonGM::MuonDetectorManager::getTgcReadoutElement
const TgcReadoutElement * getTgcReadoutElement(const Identifier &id) const
access via extended identifier (requires unpacking)
Definition: MuonDetDescr/MuonReadoutGeometry/src/MuonDetectorManager.cxx:247
VP1LinAlgUtils.h
VP1DetInfo.h
Amg::getTransformFromRotTransl
Amg::Transform3D getTransformFromRotTransl(Amg::RotationMatrix3D rot, Amg::Vector3D transl_vec)
Definition: GeoPrimitivesHelpers.h:172
Trk::LocalParameters::get
double get(ParamDefs par) const
Retrieve specified parameter (const version).
cm
const double cm
Definition: Simulation/ISF/ISF_FastCaloSim/ISF_FastCaloSimParametrization/tools/FCAL_ChannelMap.cxx:25
VP1DetInfo::tgcIDHelper
static const TgcIdHelper * tgcIDHelper()
Definition: VP1DetInfo.cxx:160
InDetDD::SiDetectorElement::phiPitch
double phiPitch() const
Pitch (inline methods)
RpcClusterOnTrack.h
IVP1System
Definition: IVP1System.h:36
Amg::toString
std::string toString(const Translation3D &translation, int precision=4)
GeoPrimitvesToStringConverter.
Definition: GeoPrimitivesToStringConverter.h:40
MuonGM::TgcReadoutElement::stripWidth
double stripWidth(int gasGap, int strip) const
Returns the width of a given strip in the gasGap i.
Definition: MuonDetDescr/MuonReadoutGeometry/src/TgcReadoutElement.cxx:146
EventPrimitivesToStringConverter.h
InDetDD::SolidStateDetectorElementBase::thickness
double thickness() const
MuonGM::CscReadoutElement::stripPosition
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...
Definition: CscReadoutElement.cxx:751
AtlasDetectorID::is_tgc
bool is_tgc(Identifier id) const
Definition: AtlasDetectorID.h:902
angle
double angle(const GeoTrf::Vector2D &a, const GeoTrf::Vector2D &b)
Definition: TRTDetectorFactory_Full.cxx:73
MuonGM::TgcReadoutElement::gangShortWidth
double gangShortWidth(int gasGap, int gang) const
Returns the length of the most bottom wire in the gang.
Definition: MuonDetDescr/MuonReadoutGeometry/src/TgcReadoutElement.cxx:79
Trk::CylinderBounds
Definition: CylinderBounds.h:46
HitToSoNode.h
MuonGM::sTgcReadoutElement
An sTgcReadoutElement corresponds to a single STGC module; therefore typicaly a barrel muon station c...
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/sTgcReadoutElement.h:30
Amg::Transform3D
Eigen::Affine3d Transform3D
Definition: GeoPrimitives.h:46
MuonGM::TgcReadoutElement
A TgcReadoutElement corresponds to a single TGC chamber; therefore typically a TGC station contains s...
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/TgcReadoutElement.h:42
HitsSoNodeManager::getShapeNode_Strip
SoNode * getShapeNode_Strip(double length, double width=0, double depth=0)
Definition: HitsSoNodeManager.cxx:269
HitToSoNode::Imp::nodeManager
HitsSoNodeManager nodeManager
Definition: HitToSodeNode.cxx:46
Trk::TrkDetElementBase::surface
virtual const Surface & surface() const =0
Return surface associated with this detector element.
MuonGM::TgcReadoutElement::gangRadialLength
double gangRadialLength(int gasGap, int gang) const
Returns the length of the wire gang along the radial direction [pitch x N_{wire}^{gang}].
Definition: MuonDetDescr/MuonReadoutGeometry/src/TgcReadoutElement.cxx:72
python.xAODType.dummy
dummy
Definition: xAODType.py:4
hist_file_dump.f
f
Definition: hist_file_dump.py:135
TRT_DriftCircleOnTrack.h
HitToSoNode::fillRPCValues
void fillRPCValues(Identifier &id, const Trk::TrkDetElementBase *baseDetEl, double &striplength, double &stripWidth, double &stripThickness, Amg::Vector2D *&localposStrip)
Definition: HitToSodeNode.cxx:354
VP1DetInfo::rpcIDHelper
static const RpcIdHelper * rpcIDHelper()
Definition: VP1DetInfo.cxx:159
HitToSoNode::Imp
Definition: HitToSodeNode.cxx:41
VP1HelperClassBase
Definition: VP1HelperClassBase.h:28
HitToSoNode::buildStripShapes
void buildStripShapes(const Trk::RIO_OnTrack &rio, SoSeparator *&shape_simple, SoSeparator *&shape_detailed, bool blockGP)
Definition: HitToSodeNode.cxx:225
TgcIdHelper::isStrip
int isStrip(const Identifier &id) const
isStrip corresponds to measuresPhi
Definition: TgcIdHelper.cxx:645
tolerance
Definition: suep_shower.h:17
HitToSoNode::Imp::Imp
Imp()
Definition: HitToSodeNode.cxx:43
HitToSoNode::fillSiValues
void fillSiValues(Identifier &id, const Trk::TrkDetElementBase *baseDetEl, double &striplength, double &stripWidth, double &stripThickness, Amg::Vector2D *&localposStrip)
Definition: HitToSodeNode.cxx:487
dumpTgcDigiThreshold.isStrip
list isStrip
Definition: dumpTgcDigiThreshold.py:33
HitToSoNode::fillValues
void fillValues(Identifier &id, const Trk::TrkDetElementBase *baseDetEl, double &striplength, double &stripWidth, double &stripThickness, Amg::Vector2D *&localposStrip)
Definition: HitToSodeNode.cxx:286
Trk::Surface::bounds
virtual const SurfaceBounds & bounds() const =0
Surface Bounds method.
RIO_OnTrack.h
HitToSoNode
Definition: HitToSoNode.h:33
MuonGM::RpcReadoutElement::stripPos
Amg::Vector3D stripPos(const Identifier &id) const
Definition: MuonDetDescr/MuonReadoutGeometry/src/RpcReadoutElement.cxx:177
AtlasDetectorID::is_indet
bool is_indet(Identifier id) const
Definition: AtlasDetectorID.h:683
InDetDD::SiDetectorElement
Definition: SiDetectorElement.h:109
sTgcIdHelper
Definition: sTgcIdHelper.h:55
Amg::Vector3D
Eigen::Matrix< double, 3, 1 > Vector3D
Definition: GeoPrimitives.h:47
ParticleGun_SamplingFraction.radius
radius
Definition: ParticleGun_SamplingFraction.py:96
SiDetectorElement.h
Trk::MeasurementBase::localParameters
const LocalParameters & localParameters() const
Interface method to get the LocalParameters.
Definition: MeasurementBase.h:132
HitToSoNode::createTGC_Transform
SoTransform * createTGC_Transform(const Trk::RIO_OnTrack &rio, bool useSurfacePositionOnly) const
TGCs are rotated.
Definition: HitToSodeNode.cxx:126
MuonGM::RpcReadoutElement::StripWidth
double StripWidth(bool measphi) const
returns the strip width for the phi or eta plane
InDetDD::SolidStateDetectorElementBase::rawLocalPositionOfCell
Amg::Vector2D rawLocalPositionOfCell(const SiCellId &cellId) const
Returns position (center) of cell.
Definition: SolidStateDetectorElementBase.cxx:230
VP1DetInfo::muonDetMgr
static const MuonGM::MuonDetectorManager * muonDetMgr()
Definition: VP1DetInfo.cxx:148
AtlasDetectorID::is_muon
bool is_muon(Identifier id) const
Definition: AtlasDetectorID.h:701
MmIdHelper
Definition: MmIdHelper.h:54
Trk::Surface::globalToLocal
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...
CscIdHelper
Definition: CscIdHelper.h:52
VP1Msg::message
static void message(const QString &, IVP1System *sys=0)
Definition: VP1Msg.cxx:30
Amg::RotationMatrix3D
Eigen::Matrix< double, 3, 3 > RotationMatrix3D
Definition: GeoPrimitives.h:49
HitToSoNode::createTransform
SoTransform * createTransform(const Trk::RIO_OnTrack &rio, bool useSurfacePositionOnly) const
Definition: HitToSodeNode.cxx:107
HitsSoNodeManager
Definition: HitsSoNodeManager.h:17
Trk::RIO_OnTrack::identify
Identifier identify() const
return the identifier -extends MeasurementBase
Definition: RIO_OnTrack.h:152
GeoPrimitivesToStringConverter.h
HitsSoNodeManager::getShapeNode_Cross
SoNode * getShapeNode_Cross(double extent)
Definition: HitsSoNodeManager.cxx:427
AtlasDetectorID::is_stgc
bool is_stgc(Identifier id) const
Definition: AtlasDetectorID.h:924
HitToSoNode::~HitToSoNode
~HitToSoNode()
Definition: HitToSodeNode.cxx:56
VP1DetInfo::cscIDHelper
static const CscIdHelper * cscIDHelper()
Definition: VP1DetInfo.cxx:158
MuonGM::CscReadoutElement::stripPos
Amg::Vector3D stripPos(const Identifier &id) const
takes into account internal alignment parameters, hence gives accurate answer
Definition: CscReadoutElement.cxx:227
CscIdHelper::measuresPhi
bool measuresPhi(const Identifier &id) const override
Definition: CscIdHelper.cxx:774
Trk::RIO_OnTrack::detectorElement
virtual const TrkDetElementBase * detectorElement() const =0
returns the detector element, assoicated with the PRD of this class
HitsSoNodeManager::getShapeNode_DriftTube
SoNode * getShapeNode_DriftTube(double halfLength, double radius)
Definition: HitsSoNodeManager.cxx:138
Trk::Surface
Definition: Tracking/TrkDetDescr/TrkSurfaces/TrkSurfaces/Surface.h:75
Trk::Surface::transform
const Amg::Transform3D & transform() const
Returns HepGeom::Transform3D by reference.
VP1LinAlgUtils::toSoTransform
static SoTransform * toSoTransform(const HepGeom::Transform3D &, SoTransform *t=0)
Definition: VP1LinAlgUtils.cxx:40
length
double length(const pvec &v)
Definition: FPGATrackSimLLPDoubletHoughTransformTool.cxx:26
HitToSoNode::HitToSoNode
HitToSoNode(IVP1System *sys=0)
Definition: HitToSodeNode.cxx:49
AtlasDetectorID
This class provides an interface to generate or decode an identifier for the upper levels of the dete...
Definition: AtlasDetectorID.h:57
CscIdHelper::chamberLayer
int chamberLayer(const Identifier &id) const
Definition: CscIdHelper.cxx:770
MuonGM::MuonReadoutElement::getStationEta
int getStationEta() const
Definition: MuonDetDescr/MuonReadoutGeometry/MuonReadoutGeometry/MuonReadoutElement.h:193
Trk::CylinderBounds::halflengthZ
double halflengthZ() const
This method returns the halflengthZ.
HitToSoNode::fillCSCValues
void fillCSCValues(Identifier &id, const Trk::TrkDetElementBase *baseDetEl, double &striplength, double &stripWidth, double &stripThickness, Amg::Vector2D *&localposStrip)
Definition: HitToSodeNode.cxx:390
Identifier
Definition: IdentifierFieldParser.cxx:14
MuonGM::CscReadoutElement::cathodeReadoutPitch
double cathodeReadoutPitch(int chLayer, int measuresPhi) const
Definition: CscReadoutElement.cxx:147