CMS 3D CMS Logo

ForwardDetLayer.cc
Go to the documentation of this file.
7 
8 using namespace std;
9 
11 
12 //--- Extension of the interface
14 
15 bool ForwardDetLayer::contains(const Local3DPoint& p) const { return surface().bounds().inside(p); }
16 
17 void ForwardDetLayer::initialize() { setSurface(computeSurface()); }
18 
20  LogDebug("DetLayers") << "ForwaLayer::computeSurface callded";
21  vector<const GeomDet*> comps = basicComponents();
22 
23  vector<const GeomDet*>::const_iterator ifirst = comps.begin();
24  vector<const GeomDet*>::const_iterator ilast = comps.end();
25 
26  // Find extension in R
27  float theRmin = components().front()->position().perp();
28  float theRmax = theRmin;
29  float theZmin = components().back()->position().z();
30  float theZmax = theZmin;
31  for (vector<const GeomDet*>::const_iterator deti = ifirst; deti != ilast; deti++) {
32  vector<GlobalPoint> corners = BoundingBox().corners(dynamic_cast<const Plane&>((**deti).surface()));
33  for (vector<GlobalPoint>::const_iterator ic = corners.begin(); ic != corners.end(); ic++) {
34  float r = ic->perp();
35  LogDebug("DetLayers") << "corner.perp(): " << r;
36  float z = ic->z();
37  theRmin = min(theRmin, r);
38  theRmax = max(theRmax, r);
39  theZmin = min(theZmin, z);
40  theZmax = max(theZmax, z);
41  }
42 
43  // in addition to the corners we have to check the middle of the
44  // det +/- length/2
45  // , since the min (max) radius for typical fw dets is reached there
46 
47  float rdet = (**deti).position().perp();
48  float len = (**deti).surface().bounds().length();
49  float width = (**deti).surface().bounds().width();
50 
51  GlobalVector xAxis = (**deti).toGlobal(LocalVector(1, 0, 0));
52  GlobalVector yAxis = (**deti).toGlobal(LocalVector(0, 1, 0));
53  GlobalVector perpDir = GlobalVector((**deti).position() - GlobalPoint(0, 0, (**deti).position().z()));
54 
55  double xAxisCos = xAxis.unit().dot(perpDir.unit());
56  double yAxisCos = yAxis.unit().dot(perpDir.unit());
57 
58  LogDebug("DetLayers") << "in ForwardDetLayer::computeSurface(),xAxisCos,yAxisCos: " << xAxisCos << " , "
59  << yAxisCos;
60  LogDebug("DetLayers") << "det pos.perp,length,width: " << rdet << " , " << len << " , " << width;
61 
62  if (fabs(xAxisCos) > fabs(yAxisCos)) {
63  theRmin = min(theRmin, rdet - width / 2.F);
64  theRmax = max(theRmax, rdet + width / 2.F);
65  } else {
66  theRmin = min(theRmin, rdet - len / 2.F);
67  theRmax = max(theRmax, rdet + len / 2.F);
68  }
69  }
70 
71  LogDebug("DetLayers") << "creating SimpleDiskBounds with r range" << theRmin << " " << theRmax << " and z range "
72  << theZmin << " " << theZmax;
73 
74  // By default the forward layers are positioned around the z axis of the
75  // global frame, and the axes of their local frame coincide with
76  // those of the global grame (z along the disk axis)
77  float zPos = (theZmax + theZmin) / 2.;
78  PositionType pos(0., 0., zPos);
80 
81  return new BoundDisk(pos, rot, new SimpleDiskBounds(theRmin, theRmax, theZmin - zPos, theZmax - zPos));
82 }
83 
84 pair<bool, TrajectoryStateOnSurface> ForwardDetLayer::compatible(const TrajectoryStateOnSurface& ts,
85  const Propagator& prop,
86  const MeasurementEstimator&) const {
87  if
88  UNLIKELY(theDisk == nullptr)
89  edm::LogError("DetLayers") << "ERROR: BarrelDetLayer::compatible() is used before the layer surface is initialized";
90  // throw an exception? which one?
91 
92  TrajectoryStateOnSurface myState = prop.propagate(ts, specificSurface());
93  if
94  UNLIKELY(!myState.isValid()) return make_pair(false, myState);
95 
96  // check z; (are we sure?????)
97  // auto z = myState.localPosition().z();
98  // if ( z<bounds().minZ | z>bounds().maxZ) return make_pair( false, myState);
99 
100  // check r
101  auto r2 = myState.localPosition().perp2();
102  if ((r2 > rmin() * rmin()) & (r2 < rmax() * rmax()))
103  return make_pair(true, myState);
104 
105  // take into account the thickness of the layer
106  float deltaR = 0.5f * bounds().thickness() * myState.localDirection().perp() / std::abs(myState.localDirection().z());
107 
108  // and take into account the error on the predicted state
109  const float nSigma = 3.;
110  if (myState.hasError()) {
111  LocalError err = myState.localError().positionError();
112  // ignore correlation for the moment...
113  deltaR += nSigma * sqrt(err.xx() + err.yy());
114  }
115 
116  // check r again;
117  auto ri2 = std::max(rmin() - deltaR, 0.f);
118  ri2 *= ri2;
119  auto ro2 = rmax() + deltaR;
120  ro2 *= ro2;
121  return make_pair((r2 > ri2) & (r2 < ro2), myState);
122 }
Vector3DBase
Definition: Vector3DBase.h:8
Likely.h
MeasurementEstimator
Definition: MeasurementEstimator.h:19
TkRotation< float >
TrajectoryStateOnSurface.h
ApeEstimator_cff.width
width
Definition: ApeEstimator_cff.py:24
MessageLogger.h
LocalTrajectoryError::positionError
LocalError positionError() const
Definition: LocalTrajectoryError.h:81
f
double f[11][100]
Definition: MuScleFitUtils.cc:78
min
T min(T a, T b)
Definition: MathUtil.h:58
AlCaHLTBitMon_ParallelJobs.p
p
Definition: AlCaHLTBitMon_ParallelJobs.py:153
ForwardDetLayer::~ForwardDetLayer
~ForwardDetLayer() override
Definition: ForwardDetLayer.cc:10
pos
Definition: PixelAliasList.h:18
ForwardDetLayer::setSurface
void setSurface(BoundDisk *cp)
Definition: ForwardDetLayer.cc:13
GlobalVector
Global3DVector GlobalVector
Definition: GlobalVector.h:10
BoundingBox.h
BoundDisk
F
static uInt32 F(BLOWFISH_CTX *ctx, uInt32 x)
Definition: blowfish.cc:163
PV3DBase::z
T z() const
Definition: PV3DBase.h:61
SimpleDiskBounds
Definition: SimpleDiskBounds.h:11
Propagator
Definition: Propagator.h:44
UNLIKELY
#define UNLIKELY(x)
Definition: Likely.h:21
TrajectoryStateOnSurface
Definition: TrajectoryStateOnSurface.h:16
Vector3DBase::unit
Vector3DBase unit() const
Definition: Vector3DBase.h:54
BoundingBox
Definition: BoundingBox.h:12
TrajectoryStateOnSurface::localDirection
LocalVector localDirection() const
Definition: TrajectoryStateOnSurface.h:76
TrajectoryStateOnSurface::hasError
bool hasError() const
Definition: TrajectoryStateOnSurface.h:56
mathSSE::sqrt
T sqrt(T t)
Definition: SSEVec.h:19
GlobalPoint
Global3DPoint GlobalPoint
Definition: GlobalPoint.h:10
Point3DBase< float, LocalTag >
PbPb_ZMuSkimMuonDPG_cff.deltaR
deltaR
Definition: PbPb_ZMuSkimMuonDPG_cff.py:63
ForwardDetLayer::initialize
virtual void initialize()
Definition: ForwardDetLayer.cc:17
TrajectoryStateOnSurface::localPosition
LocalPoint localPosition() const
Definition: TrajectoryStateOnSurface.h:74
LogDebug
#define LogDebug(id)
Definition: MessageLogger.h:670
edm::LogError
Definition: MessageLogger.h:183
SiStripPI::max
Definition: SiStripPayloadInspectorHelper.h:169
runTheMatrix.err
err
Definition: runTheMatrix.py:288
LocalError
Definition: LocalError.h:12
diffTwoXMLs.r2
r2
Definition: diffTwoXMLs.py:73
LocalVector
Local3DVector LocalVector
Definition: LocalVector.h:12
Propagator::propagate
TrajectoryStateOnSurface propagate(STA const &state, SUR const &surface) const
Definition: Propagator.h:50
alignCSCRings.r
r
Definition: alignCSCRings.py:93
std
Definition: JetResolutionObject.h:76
ForwardDetLayer::computeSurface
virtual BoundDisk * computeSurface()
Definition: ForwardDetLayer.cc:19
HLT_2018_cff.xAxis
xAxis
Definition: HLT_2018_cff.py:44410
makeMuonMisalignmentScenario.components
string components
Definition: makeMuonMisalignmentScenario.py:58
ForwardDetLayer.h
makeMuonMisalignmentScenario.rot
rot
Definition: makeMuonMisalignmentScenario.py:322
BoundingBox::corners
static std::vector< GlobalPoint > corners(const Plane &)
Definition: BoundingBox.cc:20
ForwardDetLayer::contains
bool contains(const Local3DPoint &p) const
Definition: ForwardDetLayer.cc:15
funct::abs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
SimpleDiskBounds.h
CommonMethods.cp
def cp(fromDir, toDir, listOfFiles, overwrite=False, smallList=False)
Definition: CommonMethods.py:192
TrajectoryStateOnSurface::localError
const LocalTrajectoryError & localError() const
Definition: TrajectoryStateOnSurface.h:77
HLT_2018_cff.yAxis
yAxis
Definition: HLT_2018_cff.py:44412
ForwardDetLayer::compatible
std::pair< bool, TrajectoryStateOnSurface > compatible(const TrajectoryStateOnSurface &, const Propagator &, const MeasurementEstimator &) const override
Definition: ForwardDetLayer.cc:84
BoundDisk
Disk BoundDisk
Definition: BoundDisk.h:54
PV3DBase::perp
T perp() const
Definition: PV3DBase.h:69
HLTSiStripMonitoring_cff.nSigma
nSigma
Definition: HLTSiStripMonitoring_cff.py:151
TrajectoryStateOnSurface::isValid
bool isValid() const
Definition: TrajectoryStateOnSurface.h:54
PV3DBase::perp2
T perp2() const
Definition: PV3DBase.h:68