CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
MuonDT13ChamberResidual.cc
Go to the documentation of this file.
1 /*
2  * $Id: $
3  */
4 
6 
7 
9  DetId chamberId, const AlignableDetOrUnitPtr& chamberAlignable)
10  : MuonHitsChamberResidual(globalGeometry, navigator, chamberId, chamberAlignable)
11 {
13  double rphiAngle = atan2(m_globalGeometry->idToDet(m_chamberId)->position().y(), m_globalGeometry->idToDet(m_chamberId)->position().x()) + M_PI/2.;
14  align::GlobalVector rphiDirection(cos(rphiAngle), sin(rphiAngle), 0.);
15  m_sign = m_globalGeometry->idToDet(m_chamberId)->toLocal(rphiDirection).x() > 0. ? 1. : -1.;
16 }
17 
18 
20 {
21  DetId id = hit->geographicalId();
22 
23  align::LocalPoint hitChamberPos = m_chamberAlignable->surface().toLocal(m_globalGeometry->idToDet(id)->toGlobal(hit->localPosition()));
24  align::LocalPoint tsosChamberPos = m_chamberAlignable->surface().toLocal(m_globalGeometry->idToDet(id)->toGlobal(tsos->localPosition()));
25 
26  double residual = tsosChamberPos.x() - hitChamberPos.x(); // residual is hit minus hit
27  double weight = 1. / hit->localPositionError().xx(); // weight linear fit by hit-only local error
28  double layerPosition = tsosChamberPos.z(); // the layer's position in the chamber's coordinate system
29  double layerHitPos = hitChamberPos.z();
30 
31  m_numHits++;
32 
33  // "x" is the layerPosition, "y" is the residual (this is a linear fit to residual versus layerPosition)
35  m_residual_x += weight * layerPosition;
36  m_residual_y += weight * residual;
37  m_residual_xx += weight * layerPosition * layerPosition;
38  m_residual_xy += weight * layerPosition * residual;
39 
40  // "x" is the layerPosition, "y" is chamberx (this is a linear fit to chamberx versus layerPosition)
41  m_trackx_1 += weight;
42  m_trackx_x += weight * layerPosition;
43  m_trackx_y += weight * tsosChamberPos.x();
44  m_trackx_xx += weight * layerPosition * layerPosition;
45  m_trackx_xy += weight * layerPosition * tsosChamberPos.x();
46 
47  // "x" is the layerPosition, "y" is chambery (this is a linear fit to chambery versus layerPosition)
48  m_tracky_1 += weight;
49  m_tracky_x += weight * layerPosition;
50  m_tracky_y += weight * tsosChamberPos.y();
51  m_tracky_xx += weight * layerPosition * layerPosition;
52  m_tracky_xy += weight * layerPosition * tsosChamberPos.y();
53 
54  m_hitx_1 += weight;
55  m_hitx_x += weight * layerHitPos;
56  m_hitx_y += weight * hitChamberPos.x();
57  m_hitx_xx += weight * layerHitPos * layerHitPos;
58  m_hitx_xy += weight * layerHitPos * hitChamberPos.x();
59 
60  m_hity_1 += weight;
61  m_hity_x += weight * layerHitPos;
62  m_hity_y += weight * hitChamberPos.y();
63  m_hity_xx += weight * layerHitPos * layerPosition;
64  m_hity_xy += weight * layerHitPos * hitChamberPos.y();
65 
66  m_localIDs.push_back(id);
67  m_localResids.push_back(tsos->localPosition().x() - hit->localPosition().x());
68  m_individual_x.push_back(layerPosition);
69  m_individual_y.push_back(residual);
70  m_individual_weight.push_back(weight);
71 
72  if (m_numHits>1) segment_fit();
73 }
float xx() const
Definition: LocalError.h:24
MuonDT13ChamberResidual(edm::ESHandle< GlobalTrackingGeometry > globalGeometry, AlignableNavigator *navigator, DetId chamberId, const AlignableDetOrUnitPtr &chamberAlignable)
std::vector< double > m_individual_y
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
T y() const
Definition: PV3DBase.h:63
std::vector< double > m_individual_x
std::vector< DetId > m_localIDs
align::RotationType toLocal(const align::RotationType &) const
Return in local frame a rotation given in global frame.
std::vector< double > m_localResids
T z() const
Definition: PV3DBase.h:64
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
AlignableDetOrUnitPtr m_chamberAlignable
#define M_PI
const AlignableSurface & surface() const
Return the Surface (global position and orientation) of the object.
Definition: Alignable.h:131
Definition: DetId.h:18
virtual LocalError localPositionError() const =0
virtual void addResidual(const TrajectoryStateOnSurface *tsos, const TransientTrackingRecHit *hit)
edm::ESHandle< GlobalTrackingGeometry > m_globalGeometry
DetId geographicalId() const
T x() const
Definition: PV3DBase.h:62
virtual LocalPoint localPosition() const =0
std::vector< double > m_individual_weight
double residual() const