CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
MuonChamberResidual.h
Go to the documentation of this file.
1 #ifndef Alignment_MuonAlignmentAlgorithms_MuonChamberResidual_H
2 #define Alignment_MuonAlignmentAlgorithms_MuonChamberResidual_H
3 
23 
25 public:
27  : m_globalGeometry(globalGeometry)
28  , m_navigator(navigator)
29  , m_chamberId(chamberId)
30  , m_chamberAlignable(chamberAlignable)
31  , m_numHits(0)
32  , m_residual_1(0.)
33  , m_residual_x(0.)
34  , m_residual_y(0.)
35  , m_residual_xx(0.)
36  , m_residual_xy(0.)
37  , m_trackx_1(0.)
38  , m_trackx_x(0.)
39  , m_trackx_y(0.)
40  , m_trackx_xx(0.)
41  , m_trackx_xy(0.)
42  , m_tracky_1(0.)
43  , m_tracky_x(0.)
44  , m_tracky_y(0.)
45  , m_tracky_xx(0.)
46  , m_tracky_xy(0.)
47  {};
48 
49  virtual ~MuonChamberResidual() {};
50 
51  enum {
55  };
56 
57  virtual void addResidual(const TrajectoryStateOnSurface *tsos, const TransientTrackingRecHit *hit) = 0;
58  virtual double signConvention(const unsigned int rawId=0) const = 0;
59 
60  DetId chamberId() const { return m_chamberId; };
62  virtual int type() const = 0;
63 
64  int numHits() const { return m_numHits; };
65 
66  double residual() const {
67  assert(m_numHits > 1);
69  return (m_residual_xx*m_residual_y - m_residual_x*m_residual_xy) / delta;
70  };
71 
72  double residual_error() const {
73  assert(m_numHits > 1);
75  return sqrt(m_residual_xx / delta);
76  };
77 
78  double resslope() const {
79  assert(m_numHits > 1);
81  return (m_residual_1*m_residual_xy - m_residual_x*m_residual_y) / delta;
82  };
83 
84  double resslope_error() const {
85  assert(m_numHits > 1);
87  return sqrt(m_residual_1 / delta);
88  };
89 
90  double chi2() const {
91  double output = 0.;
92  double a = residual();
93  double b = resslope();
94 
95  std::vector<double>::const_iterator x = m_individual_x.begin();
96  std::vector<double>::const_iterator y = m_individual_y.begin();
97  std::vector<double>::const_iterator w = m_individual_weight.begin();
98  for (; x != m_individual_x.end(); ++x, ++y, ++w) {
99  output += pow((*y) - a - b*(*x), 2) * (*w);
100  }
101  return output;
102  };
103 
104  int ndof() const {
105  return m_individual_x.size() - 2;
106  };
107 
108  double trackdxdz() const {
109  assert(m_numHits > 0);
111  return (m_trackx_1*m_trackx_xy - m_trackx_x*m_trackx_y) / delta;
112  };
113 
114  double trackdydz() const {
115  assert(m_numHits > 0);
117  return (m_tracky_1*m_tracky_xy - m_tracky_x*m_tracky_y) / delta;
118  };
119 
120  double trackx() const {
121  assert(m_numHits > 0);
123  return (m_trackx_xx*m_trackx_y - m_trackx_x*m_trackx_xy) / delta;
124  };
125 
126  double tracky() const {
127  assert(m_numHits > 0);
129  return (m_tracky_xx*m_tracky_y - m_tracky_x*m_tracky_xy) / delta;
130  };
131 
133  return chamberAlignable()->surface().toGlobal(LocalPoint(trackx(), tracky(), 0.));
134  };
135 
136  double hitresid(int i) const {
137  assert(0 <= i && i < int(m_localIDs.size()));
138  return m_localResids[i];
139  }
140 
141  double global_residual() const {
142  return residual() * signConvention();
143  };
144 
145  double global_resslope() const {
146  return resslope() * signConvention();
147  };
148 
149  double global_hitresid(int i) const {
150  return hitresid(i) * signConvention(m_localIDs[i].rawId());
151  };
152 
153  int hitlayer(int i) const { // only difference between DTs and CSCs is the DetId subclass
154  assert(0 <= i && i < int(m_localIDs.size()));
156  DTLayerId layerId(m_localIDs[i].rawId());
157  return 4*(layerId.superlayer() - 1) + layerId.layer();
158  }
159  else if (m_chamberId.subdetId() == MuonSubdetId::CSC) {
160  CSCDetId layerId(m_localIDs[i].rawId());
161  return layerId.layer();
162  }
163  else assert(false);
164  };
165 
166  double hitposition(int i) const {
167  assert(0 <= i && i < int(m_localIDs.size()));
169  GlobalPoint pos = m_globalGeometry->idToDet(m_localIDs[i])->position();
170  return sqrt(pow(pos.x(), 2) + pow(pos.y(), 2)); // R for DTs
171  }
172  else if (m_chamberId.subdetId() == MuonSubdetId::CSC) {
173  return m_globalGeometry->idToDet(m_localIDs[i])->position().z(); // Z for CSCs
174  }
175  else assert(false);
176  };
177 
178  DetId localid(int i) const {
179  return m_localIDs[i];
180  };
181 
182 protected:
187 
189  double m_residual_1;
190  double m_residual_x;
191  double m_residual_y;
194  double m_trackx_1;
195  double m_trackx_x;
196  double m_trackx_y;
197  double m_trackx_xx;
198  double m_trackx_xy;
199  double m_tracky_1;
200  double m_tracky_x;
201  double m_tracky_y;
202  double m_tracky_xx;
203  double m_tracky_xy;
204  std::vector<DetId> m_localIDs;
205  std::vector<double> m_localResids;
206  std::vector<double> m_individual_x;
207  std::vector<double> m_individual_y;
208  std::vector<double> m_individual_weight;
209 };
210 
211 #endif // Alignment_MuonAlignmentAlgorithms_MuonChamberResidual_H
dbl * delta
Definition: mlp_gen.cc:36
int i
Definition: DBlmapReader.cc:9
std::vector< double > m_individual_y
double resslope_error() const
virtual int type() const =0
MuonChamberResidual(edm::ESHandle< GlobalTrackingGeometry > globalGeometry, AlignableNavigator *navigator, DetId chamberId, AlignableDetOrUnitPtr chamberAlignable)
double global_hitresid(int i) const
T y() const
Definition: PV3DBase.h:57
int layer() const
Return the layer number.
Definition: DTLayerId.h:55
int layer() const
Definition: CSCDetId.h:63
double global_residual() const
DetId localid(int i) const
GlobalPoint global_trackpos()
double resslope() const
double trackdxdz() const
std::vector< double > m_individual_x
static const int CSC
Definition: MuonSubdetId.h:15
std::vector< DetId > m_localIDs
std::vector< double > m_localResids
AlignableNavigator * m_navigator
T sqrt(T t)
Definition: SSEVec.h:28
AlignableDetOrUnitPtr chamberAlignable() const
AlignableDetOrUnitPtr m_chamberAlignable
int subdetId() const
get the contents of the subdetector field (not cast into any detector&#39;s numbering enum) ...
Definition: DetId.h:39
const AlignableSurface & surface() const
Return the Surface (global position and orientation) of the object.
Definition: Alignable.h:126
int superlayer() const
Return the superlayer number (deprecated method name)
Definition: DetId.h:20
double hitresid(int i) const
double trackdydz() const
double b
Definition: hdecay.h:120
int hitlayer(int i) const
virtual double signConvention(const unsigned int rawId=0) const =0
double a
Definition: hdecay.h:121
edm::ESHandle< GlobalTrackingGeometry > m_globalGeometry
align::GlobalPoints toGlobal(const align::LocalPoints &) const
Return in global coord given a set of local points.
double hitposition(int i) const
Local3DPoint LocalPoint
Definition: LocalPoint.h:11
virtual void addResidual(const TrajectoryStateOnSurface *tsos, const TransientTrackingRecHit *hit)=0
double global_resslope() const
static const int DT
Definition: MuonSubdetId.h:14
DetId chamberId() const
T x() const
Definition: PV3DBase.h:56
std::vector< double > m_individual_weight
double residual() const
Power< A, B >::type pow(const A &a, const B &b)
Definition: Power.h:40
double residual_error() const