CMS 3D CMS Logo

MuonDT13ChamberResidual.cc
Go to the documentation of this file.
1 /*
2  * $Id: $
3  */
4 
6 
9  DetId chamberId,
10  AlignableDetOrUnitPtr chamberAlignable)
11  : MuonHitsChamberResidual(globalGeometry, navigator, chamberId, chamberAlignable) {
13  double rphiAngle = atan2(m_globalGeometry->idToDet(m_chamberId)->position().y(),
15  M_PI / 2.;
16  align::GlobalVector rphiDirection(cos(rphiAngle), sin(rphiAngle), 0.);
17  m_sign = m_globalGeometry->idToDet(m_chamberId)->toLocal(rphiDirection).x() > 0. ? 1. : -1.;
18 }
19 
20 // void MuonDT13ChamberResidual::addResidual(const TrajectoryStateOnSurface *tsos, const TransientTrackingRecHit *hit)
21 
23  const TrajectoryStateOnSurface *tsos,
24  const TrackingRecHit *hit,
25  double chamber_width,
26  double chamber_length) {
27  bool m_debug = false;
28 
29  m_chamber_width = chamber_width;
30  m_chamber_length = chamber_length;
31 
32  DetId id = hit->geographicalId();
33 
34  align::LocalPoint hitChamberPos =
36  align::LocalPoint tsosChamberPos =
38 
39  if (m_debug) {
40  std::cout << " MuonDT13ChamberResidual hitChamberPos x: " << hitChamberPos.x()
41  << " tsosChamberPos x: " << tsosChamberPos.x() << std::endl;
42  std::cout << " hitChamberPos y: " << hitChamberPos.y()
43  << " tsosChamberPos y: " << tsosChamberPos.y() << std::endl;
44  std::cout << " hitChamberPos z: " << hitChamberPos.z()
45  << " tsosChamberPos z: " << tsosChamberPos.z() << std::endl;
46  }
47 
48  double residual = tsosChamberPos.x() - hitChamberPos.x(); // residual is hit minus hit
49  double weight = 1. / hit->localPositionError().xx(); // weight linear fit by hit-only local error
50  double layerPosition = tsosChamberPos.z(); // the layer's position in the chamber's coordinate system
51  double layerHitPos = hitChamberPos.z();
52 
53  m_numHits++;
54 
55  // "x" is the layerPosition, "y" is the residual (this is a linear fit to residual versus layerPosition)
57  m_residual_x += weight * layerPosition;
59  m_residual_xx += weight * layerPosition * layerPosition;
60  m_residual_xy += weight * layerPosition * residual;
61 
62  // "x" is the layerPosition, "y" is chamberx (this is a linear fit to chamberx versus layerPosition)
63  m_trackx_1 += weight;
64  m_trackx_x += weight * layerPosition;
65  m_trackx_y += weight * tsosChamberPos.x();
66  m_trackx_xx += weight * layerPosition * layerPosition;
67  m_trackx_xy += weight * layerPosition * tsosChamberPos.x();
68 
69  // "x" is the layerPosition, "y" is chambery (this is a linear fit to chambery versus layerPosition)
70  m_tracky_1 += weight;
71  m_tracky_x += weight * layerPosition;
72  m_tracky_y += weight * tsosChamberPos.y();
73  m_tracky_xx += weight * layerPosition * layerPosition;
74  m_tracky_xy += weight * layerPosition * tsosChamberPos.y();
75 
76  m_hitx_1 += weight;
77  m_hitx_x += weight * layerHitPos;
78  m_hitx_y += weight * hitChamberPos.x();
79  m_hitx_xx += weight * layerHitPos * layerHitPos;
80  m_hitx_xy += weight * layerHitPos * hitChamberPos.x();
81 
82  m_hity_1 += weight;
83  m_hity_x += weight * layerHitPos;
84  m_hity_y += weight * hitChamberPos.y();
85  m_hity_xx += weight * layerHitPos * layerPosition;
86  m_hity_xy += weight * layerHitPos * hitChamberPos.y();
87 
88  m_localIDs.push_back(id);
89  // m_localResids.push_back(tsos->localPosition().x() - hit->localPosition().x()); //FIXME looks like this line is not used anywhere, moreover it is wrong for segment-based reconstruction, I changed it to the follwoing line
90  m_localResids.push_back(residual);
91  m_individual_x.push_back(layerPosition);
92  m_individual_y.push_back(residual);
93  m_individual_weight.push_back(weight);
94 
95  if (m_numHits > 1)
96  segment_fit();
97 }
std::vector< double > m_individual_y
const AlignableSurface & surface() const
Return the Surface (global position and orientation) of the object.
Definition: Alignable.h:132
LocalPoint toLocal(const GlobalPoint &gp) const
Conversion to the R.F. of the GeomDet.
Definition: GeomDet.h:58
T z() const
Definition: PV3DBase.h:61
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
Definition: weight.py:1
MuonDT13ChamberResidual(edm::ESHandle< GlobalTrackingGeometry > globalGeometry, AlignableNavigator *navigator, DetId chamberId, AlignableDetOrUnitPtr chamberAlignable)
const GeomDet * idToDet(DetId) const override
T x() const
Definition: PV3DBase.h:59
T y() const
Definition: PV3DBase.h:60
std::vector< double > m_individual_x
std::vector< DetId > m_localIDs
std::vector< double > m_localResids
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
AlignableDetOrUnitPtr m_chamberAlignable
GlobalPoint toGlobal(const Local2DPoint &lp) const
Conversion to the global R.F. from the R.F. of the GeomDet.
Definition: GeomDet.h:49
#define M_PI
Definition: DetId.h:17
void addResidual(edm::ESHandle< Propagator > prop, const TrajectoryStateOnSurface *tsos, const TrackingRecHit *hit, double, double) override
const Surface::PositionType & position() const
The position (origin of the R.F.)
Definition: GeomDet.h:43
align::RotationType toLocal(const align::RotationType &) const
Return in local frame a rotation given in global frame.
edm::ESHandle< GlobalTrackingGeometry > m_globalGeometry
std::vector< double > m_individual_weight