CMS 3D CMS Logo

SurveyInputCSCfromPins.cc
Go to the documentation of this file.
11 
14 
15 #include <iostream>
16 #include <fstream>
17 #include "TFile.h"
18 #include "TTree.h"
19 #include "TRandom3.h"
20 
21 #include "SurveyInputCSCfromPins.h"
22 
23 #define SQR(x) ((x) * (x))
24 
26  : m_pinPositions(cfg.getParameter<std::string>("pinPositions")),
27  m_rootFile(cfg.getParameter<std::string>("rootFile")),
28  m_verbose(cfg.getParameter<bool>("verbose")),
29  m_errorX(cfg.getParameter<double>("errorX")),
30  m_errorY(cfg.getParameter<double>("errorY")),
31  m_errorZ(cfg.getParameter<double>("errorZ")),
32  m_missingErrorTranslation(cfg.getParameter<double>("missingErrorTranslation")),
33  m_missingErrorAngle(cfg.getParameter<double>("missingErrorAngle")),
34  m_stationErrorX(cfg.getParameter<double>("stationErrorX")),
35  m_stationErrorY(cfg.getParameter<double>("stationErrorY")),
36  m_stationErrorZ(cfg.getParameter<double>("stationErrorZ")),
37  m_stationErrorPhiX(cfg.getParameter<double>("stationErrorPhiX")),
38  m_stationErrorPhiY(cfg.getParameter<double>("stationErrorPhiY")),
39  m_stationErrorPhiZ(cfg.getParameter<double>("stationErrorPhiZ")) {}
40 
43  double a,
44  double b,
45  double &T,
46  double &dx,
47  double &dy,
48  double &dz,
49  double &PhX,
50  double &PhZ) {
51  double cosPhX, sinPhX, cosPhZ, sinPhZ;
52 
53  LocalPoint LP1(LC1.x(), LC1.y() + a, LC1.z() + b);
54  LocalPoint LP2(LC2.x(), LC2.y() - a, LC2.z() + b);
55 
56  LocalPoint P((LP1.x() - LP2.x()) / (2. * a), (LP1.y() - LP2.y()) / (2. * a), (LP1.z() - LP2.z()) / (2. * a));
57  LocalPoint Pp((LP1.x() + LP2.x()) / (2.), (LP1.y() + LP2.y()) / (2.), (LP1.z() + LP2.z()) / (2.));
58 
59  T = P.mag();
60 
61  sinPhX = P.z() / T;
62  cosPhX = sqrt(1 - SQR(sinPhX));
63  cosPhZ = P.y() / (T * cosPhX);
64  sinPhZ = -P.x() / (T * cosPhZ);
65 
66  PhX = atan2(sinPhX, cosPhX);
67 
68  PhZ = atan2(sinPhZ, cosPhZ);
69 
70  dx = Pp.x() - sinPhZ * sinPhX * b;
71  dy = Pp.y() + cosPhZ * sinPhX * b;
72  dz = Pp.z() - cosPhX * b;
73 }
74 
76  double b,
77  bool missing1,
78  bool missing2,
79  double &dx_dx,
80  double &dy_dy,
81  double &dz_dz,
82  double &phix_phix,
83  double &phiz_phiz,
84  double &dy_phix) {
85  dx_dx = 0.;
86  dy_dy = 0.;
87  dz_dz = 0.;
88  phix_phix = 0.;
89  phiz_phiz = 0.;
90  dy_phix = 0.;
91 
92  const double trials = 10000.; // two significant digits
93 
94  for (int i = 0; i < trials; i++) {
95  LocalVector LC1, LC2;
96  if (missing1) {
97  LC1 = LocalVector(gRandom->Gaus(0., m_missingErrorTranslation),
98  gRandom->Gaus(0., m_missingErrorTranslation),
99  gRandom->Gaus(0., m_missingErrorTranslation));
100  } else {
101  LC1 = LocalVector(gRandom->Gaus(0., m_errorX), gRandom->Gaus(0., m_errorY), gRandom->Gaus(0., m_errorZ));
102  }
103 
104  if (missing2) {
105  LC2 = LocalVector(gRandom->Gaus(0., m_missingErrorTranslation),
106  gRandom->Gaus(0., m_missingErrorTranslation),
107  gRandom->Gaus(0., m_missingErrorTranslation));
108  } else {
109  LC2 = LocalVector(gRandom->Gaus(0., m_errorX), gRandom->Gaus(0., m_errorY), gRandom->Gaus(0., m_errorZ));
110  }
111 
112  double dx, dy, dz, PhX, PhZ, T;
113  orient(LC1, LC2, a, b, T, dx, dy, dz, PhX, PhZ);
114 
115  dx_dx += dx * dx;
116  dy_dy += dy * dy;
117  dz_dz += dz * dz;
118  phix_phix += PhX * PhX;
119  phiz_phiz += PhZ * PhZ;
120  dy_phix += dy * PhX; // the only non-zero off-diagonal element
121  }
122 
123  dx_dx /= trials;
124  dy_dy /= trials;
125  dz_dz /= trials;
126  phix_phix /= trials;
127  phiz_phiz /= trials;
128  dy_phix /= trials;
129 }
130 
132  if (theFirstEvent) {
133  edm::LogInfo("SurveyInputCSCfromPins") << "***************ENTERING INITIALIZATION******************"
134  << " \n";
135 
136  std::ifstream in;
137  in.open(m_pinPositions.c_str());
138 
139  Double_t x1, y1, z1, x2, y2, z2, a, b, tot = 0.0, maxErr = 0.0, h, s1, dx, dy, dz, PhX, PhZ, T;
140 
141  int ID1, ID2, ID3, ID4, ID5, i = 1, ii = 0;
142 
143  TFile *file1 = new TFile(m_rootFile.c_str(), "recreate");
144  TTree *tree1 = new TTree("tree1", "alignment pins");
145 
146  if (m_verbose) {
147  tree1->Branch("displacement_x_pin1_cm", &x1, "x1/D");
148  tree1->Branch("displacement_y_pin1_cm", &y1, "y1/D");
149  tree1->Branch("displacement_z_pin1_cm", &z1, "z1/D");
150  tree1->Branch("displacement_x_pin2_cm", &x2, "x2/D");
151  tree1->Branch("displacement_y_pin2_cm", &y2, "y2/D");
152  tree1->Branch("displacement_z_pin2_cm", &z2, "z2/D");
153  tree1->Branch("error_vector_length_cm", &h, "h/D");
154  tree1->Branch("stretch_diff_cm", &s1, "s1/D");
155  tree1->Branch("stretch_factor", &T, "T/D");
156  tree1->Branch("chamber_displacement_x_cm", &dx, "dx/D");
157  tree1->Branch("chamber_displacement_y_cm", &dy, "dy/D");
158  tree1->Branch("chamber_displacement_z_cm", &dz, "dz/D");
159  tree1->Branch("chamber_rotation_x_rad", &PhX, "PhX/D");
160  tree1->Branch("chamber_rotation_z_rad", &PhZ, "PhZ/D");
161  }
162 
163  edm::ESHandle<DTGeometry> dtGeometry;
164  edm::ESHandle<CSCGeometry> cscGeometry;
166  iSetup.get<MuonGeometryRecord>().get(dtGeometry);
167  iSetup.get<MuonGeometryRecord>().get(cscGeometry);
169 
170  AlignableMuon *theAlignableMuon = new AlignableMuon(&(*dtGeometry), &(*cscGeometry), &(*gemGeometry));
171  AlignableNavigator *theAlignableNavigator = new AlignableNavigator(theAlignableMuon);
172 
173  const auto &theEndcaps = theAlignableMuon->CSCEndcaps();
174 
175  for (const auto &aliiter : theEndcaps) {
176  addComponent(aliiter);
177  }
178 
179  while (in.good()) {
180  bool missing1 = false;
181  bool missing2 = false;
182 
183  in >> ID1 >> ID2 >> ID3 >> ID4 >> ID5 >> x1 >> y1 >> z1 >> x2 >> y2 >> z2 >> a >> b;
184 
185  if (fabs(x1 - 1000.) < 1e5 && fabs(y1 - 1000.) < 1e5 && fabs(z1 - 1000.) < 1e5) {
186  missing1 = true;
187  x1 = x2;
188  y1 = y2;
189  z1 = z2;
190  }
191 
192  if (fabs(x2 - 1000.) < 1e5 && fabs(y2 - 1000.) < 1e5 && fabs(z2 - 1000.) < 1e5) {
193  missing2 = true;
194  x2 = x1;
195  y2 = y1;
196  z2 = z1;
197  }
198 
199  x1 = x1 / 10.0;
200  y1 = y1 / 10.0;
201  z1 = z1 / 10.0;
202  x2 = x2 / 10.0;
203  y2 = y2 / 10.0;
204  z2 = z2 / 10.0;
205 
206  CSCDetId layerID(ID1, ID2, ID3, ID4, 1);
207 
208  // We cannot use chamber ID (when ID5=0), because AlignableNavigator gives the error (aliDet and aliDetUnit are undefined for chambers)
209 
210  Alignable *theAlignable1 = theAlignableNavigator->alignableFromDetId(layerID);
211  Alignable *chamberAli = theAlignable1->mother();
212 
213  LocalVector LC1 = chamberAli->surface().toLocal(GlobalVector(x1, y1, z1));
214  LocalVector LC2 = chamberAli->surface().toLocal(GlobalVector(x2, y2, z2));
215 
216  orient(LC1, LC2, a, b, T, dx, dy, dz, PhX, PhZ);
217 
218  GlobalPoint PG1 = chamberAli->surface().toGlobal(LocalPoint(LC1.x(), LC1.y() + a, LC1.z() + b));
219  chamberAli->surface().toGlobal(LocalPoint(LC2.x(), LC2.y() - a, LC2.z() + b));
220 
221  LocalVector lvector(dx, dy, dz);
222  GlobalVector gvector = (chamberAli->surface()).toGlobal(lvector);
223  chamberAli->move(gvector);
224 
225  chamberAli->rotateAroundLocalX(PhX);
226  chamberAli->rotateAroundLocalZ(PhZ);
227 
228  double dx_dx, dy_dy, dz_dz, phix_phix, phiz_phiz, dy_phix;
229  errors(a, b, missing1, missing2, dx_dx, dy_dy, dz_dz, phix_phix, phiz_phiz, dy_phix);
230  align::ErrorMatrix error = ROOT::Math::SMatrixIdentity();
231  error(0, 0) = dx_dx;
232  error(1, 1) = dy_dy;
233  error(2, 2) = dz_dz;
234  error(3, 3) = phix_phix;
235  error(4, 4) = m_missingErrorAngle;
236  error(5, 5) = phiz_phiz;
237  error(1, 3) = dy_phix;
238  error(3, 1) = dy_phix; // just in case
239 
240  chamberAli->setSurvey(new SurveyDet(chamberAli->surface(), error));
241 
242  if (m_verbose) {
243  edm::LogInfo("SurveyInputCSCfromPins") << " survey information = " << chamberAli->survey() << " \n";
244 
245  LocalPoint LP1n = chamberAli->surface().toLocal(PG1);
246 
247  LocalPoint hiP(LP1n.x(), LP1n.y() - a * T, LP1n.z() - b);
248 
249  h = hiP.mag();
250  s1 = LP1n.y() - a;
251 
252  if (h > maxErr) {
253  maxErr = h;
254 
255  ii = i;
256  }
257 
258  edm::LogInfo("SurveyInputCSCfromPins")
259  << " \n"
260  << "i " << i++ << " " << ID1 << " " << ID2 << " " << ID3 << " " << ID4 << " " << ID5 << " error " << h
261  << " \n"
262  << " x1 " << x1 << " y1 " << y1 << " z1 " << z1 << " x2 " << x2 << " y2 " << y2 << " z2 " << z2 << " \n"
263  << " error " << h << " S1 " << s1 << " \n"
264  << " dx " << dx << " dy " << dy << " dz " << dz << " PhX " << PhX << " PhZ " << PhZ << " \n";
265 
266  tot += h;
267 
268  tree1->Fill();
269  }
270  }
271 
272  in.close();
273 
274  if (m_verbose) {
275  file1->Write();
276  edm::LogInfo("SurveyInputCSCfromPins")
277  << " Total error " << tot << " Max Error " << maxErr << " N " << ii << " \n";
278  }
279 
280  file1->Close();
281 
282  for (const auto &aliiter : theEndcaps) {
283  fillAllRecords(aliiter);
284  }
285 
286  delete theAlignableMuon;
287  delete theAlignableNavigator;
288 
289  edm::LogInfo("SurveyInputCSCfromPins") << "*************END INITIALIZATION***************"
290  << " \n";
291 
292  theFirstEvent = false;
293  }
294 }
295 
297  if (ali->survey() == nullptr) {
298  AlignableCSCChamber *ali_AlignableCSCChamber = dynamic_cast<AlignableCSCChamber *>(ali);
299  AlignableCSCStation *ali_AlignableCSCStation = dynamic_cast<AlignableCSCStation *>(ali);
300 
301  if (ali_AlignableCSCChamber != nullptr) {
302  CSCDetId detid(ali->geomDetId());
303  if (abs(detid.station()) == 1 && (detid.ring() == 1 || detid.ring() == 4)) {
304  align::ErrorMatrix error = ROOT::Math::SMatrixIdentity();
308  error(3, 3) = m_missingErrorAngle;
309  error(4, 4) = m_missingErrorAngle;
310  error(5, 5) = m_missingErrorAngle;
311 
312  ali->setSurvey(new SurveyDet(ali->surface(), error));
313  } else {
314  double a = 100.;
315  double b = -9.4034;
316  if (abs(detid.station()) == 1 && detid.ring() == 2)
317  a = -90.260;
318  else if (abs(detid.station()) == 1 && detid.ring() == 3)
319  a = -85.205;
320  else if (abs(detid.station()) == 2 && detid.ring() == 1)
321  a = -97.855;
322  else if (abs(detid.station()) == 2 && detid.ring() == 2)
323  a = -164.555;
324  else if (abs(detid.station()) == 3 && detid.ring() == 1)
325  a = -87.870;
326  else if (abs(detid.station()) == 3 && detid.ring() == 2)
327  a = -164.555;
328  else if (abs(detid.station()) == 4 && detid.ring() == 1)
329  a = -77.890;
330 
331  double dx_dx, dy_dy, dz_dz, phix_phix, phiz_phiz, dy_phix;
332  errors(a, b, true, true, dx_dx, dy_dy, dz_dz, phix_phix, phiz_phiz, dy_phix);
333  align::ErrorMatrix error = ROOT::Math::SMatrixIdentity();
334  error(0, 0) = dx_dx;
335  error(1, 1) = dy_dy;
336  error(2, 2) = dz_dz;
337  error(3, 3) = phix_phix;
338  error(4, 4) = m_missingErrorAngle;
339  error(5, 5) = phiz_phiz;
340  error(1, 3) = dy_phix;
341  error(3, 1) = dy_phix; // just in case
342 
343  ali->setSurvey(new SurveyDet(ali->surface(), error));
344  }
345  }
346 
347  else if (ali_AlignableCSCStation != nullptr) {
348  align::ErrorMatrix error = ROOT::Math::SMatrixIdentity();
349  error(0, 0) = m_stationErrorX;
350  error(1, 1) = m_stationErrorY;
351  error(2, 2) = m_stationErrorZ;
352  error(3, 3) = m_stationErrorPhiX;
353  error(4, 4) = m_stationErrorPhiY;
354  error(5, 5) = m_stationErrorPhiZ;
355 
356  ali->setSurvey(new SurveyDet(ali->surface(), error));
357  }
358 
359  else {
360  align::ErrorMatrix error = ROOT::Math::SMatrixIdentity();
361  ali->setSurvey(new SurveyDet(ali->surface(), error * (1e-10)));
362  }
363  }
364 
365  for (const auto &iter : ali->components()) {
366  fillAllRecords(iter);
367  }
368 }
369 
370 // Plug in to framework
Vector3DBase
Definition: Vector3DBase.h:8
SurveyInputCSCfromPins::m_errorY
double m_errorY
Definition: SurveyInputCSCfromPins.h:50
electrons_cff.bool
bool
Definition: electrons_cff.py:366
mps_fire.i
i
Definition: mps_fire.py:428
SurveyInputCSCfromPins::m_errorZ
double m_errorZ
Definition: SurveyInputCSCfromPins.h:50
MessageLogger.h
AlignableCSCStation
Definition: AlignableCSCStation.h:28
SurveyInputBase::addComponent
static void addComponent(Alignable *)
Definition: SurveyInputBase.cc:13
SurveyInputBase::theFirstEvent
bool theFirstEvent
Definition: SurveyInputBase.h:35
ESHandle.h
SurveyInputCSCfromPins::orient
void orient(align::LocalVector LC1, align::LocalVector LC2, double a, double b, double &T, double &dx, double &dy, double &dz, double &PhX, double &PhZ)
Definition: SurveyInputCSCfromPins.cc:41
PV3DBase::x
T x() const
Definition: PV3DBase.h:59
SurveyInputCSCfromPins::errors
void errors(double a, double b, bool missing1, bool missing2, double &dx_dx, double &dy_dy, double &dz_dz, double &phix_phix, double &phiz_phiz, double &dy_phix)
Definition: SurveyInputCSCfromPins.cc:75
SurveyInputCSCfromPins::m_stationErrorX
double m_stationErrorX
Definition: SurveyInputCSCfromPins.h:52
testProducerWithPsetDescEmpty_cfi.x2
x2
Definition: testProducerWithPsetDescEmpty_cfi.py:28
h
FWCore Framework interface EventSetupRecordImplementation h
Helper function to determine trigger accepts.
Definition: L1TUtmAlgorithmRcd.h:4
SurveyInputCSCfromPins::m_errorX
double m_errorX
Definition: SurveyInputCSCfromPins.h:50
Alignable
Definition: Alignable.h:27
SurveyInputCSCfromPins::m_stationErrorY
double m_stationErrorY
Definition: SurveyInputCSCfromPins.h:52
TrackValidation_cff.e5
e5
Definition: TrackValidation_cff.py:644
SurveyInputCSCfromPins::m_pinPositions
std::string m_pinPositions
Definition: SurveyInputCSCfromPins.h:47
SurveyInputCSCfromPins::m_verbose
bool m_verbose
Definition: SurveyInputCSCfromPins.h:49
align::ErrorMatrix
math::Error< 6 >::type ErrorMatrix
Definition: Definitions.h:37
SurveyInputCSCfromPins::m_stationErrorPhiY
double m_stationErrorPhiY
Definition: SurveyInputCSCfromPins.h:52
edm::LogInfo
Log< level::Info, false > LogInfo
Definition: MessageLogger.h:125
align::LocalPoint
Point3DBase< Scalar, LocalTag > LocalPoint
Definition: Definitions.h:30
AlignableSurface::toLocal
align::RotationType toLocal(const align::RotationType &) const
Return in local frame a rotation given in global frame.
Definition: AlignableSurface.cc:35
GlobalVector
Global3DVector GlobalVector
Definition: GlobalVector.h:10
relativeConstraints.error
error
Definition: relativeConstraints.py:53
SurveyInputCSCfromPins::m_stationErrorZ
double m_stationErrorZ
Definition: SurveyInputCSCfromPins.h:52
AlignableCSCChamber
A muon CSC Chamber( an AlignableDet )
Definition: AlignableCSCChamber.h:24
testProducerWithPsetDescEmpty_cfi.z2
z2
Definition: testProducerWithPsetDescEmpty_cfi.py:41
PV3DBase::z
T z() const
Definition: PV3DBase.h:61
SurveyDet
Definition: SurveyDet.h:15
align::AlignableMuon
Definition: StructureType.h:90
MakerMacros.h
testProducerWithPsetDescEmpty_cfi.x1
x1
Definition: testProducerWithPsetDescEmpty_cfi.py:33
Alignable::setSurvey
void setSurvey(const SurveyDet *)
Set survey info.
Definition: Alignable.cc:266
testProducerWithPsetDescEmpty_cfi.y1
y1
Definition: testProducerWithPsetDescEmpty_cfi.py:29
edm::EventSetup::get
T get() const
Definition: EventSetup.h:87
DEFINE_FWK_MODULE
#define DEFINE_FWK_MODULE(type)
Definition: MakerMacros.h:16
SurveyInputCSCfromPins::fillAllRecords
void fillAllRecords(Alignable *ali)
Definition: SurveyInputCSCfromPins.cc:296
AlignableCSCChamber.h
SQR
#define SQR(x)
Definition: SurveyInputCSCfromPins.cc:23
mathSSE::sqrt
T sqrt(T t)
Definition: SSEVec.h:19
edm::ESHandle< DTGeometry >
SurveyInputCSCfromPins::m_stationErrorPhiZ
double m_stationErrorPhiZ
Definition: SurveyInputCSCfromPins.h:52
AlignableSurface::toGlobal
align::GlobalPoints toGlobal(const align::LocalPoints &) const
Return in global coord given a set of local points.
Definition: AlignableSurface.cc:15
h
Alignable::surface
const AlignableSurface & surface() const
Return the Surface (global position and orientation) of the object.
Definition: Alignable.h:132
Point3DBase< float, LocalTag >
AlignableNavigator.h
b
double b
Definition: hdecay.h:118
AlignableNavigator
Definition: AlignableNavigator.h:25
SurveyInputCSCfromPins::m_missingErrorAngle
double m_missingErrorAngle
Definition: SurveyInputCSCfromPins.h:51
AlCaHLTBitMon_QueryRunRegistry.string
string
Definition: AlCaHLTBitMon_QueryRunRegistry.py:256
SurveyInputCSCfromPins::analyze
void analyze(const edm::Event &, const edm::EventSetup &) override
Read ideal tracker geometry from DB.
Definition: SurveyInputCSCfromPins.cc:131
DTGeometry.h
testProducerWithPsetDescEmpty_cfi.y2
y2
Definition: testProducerWithPsetDescEmpty_cfi.py:30
edm::ParameterSet
Definition: ParameterSet.h:47
a
double a
Definition: hdecay.h:119
AlignableMuon.h
recoMuon::in
Definition: RecoMuonEnumerators.h:6
CSCDetId
Definition: CSCDetId.h:26
SurveyInputCSCfromPins.h
AlignableMuon
Constructor of the full muon geometry.
Definition: AlignableMuon.h:38
PV3DBase::y
T y() const
Definition: PV3DBase.h:60
Alignable::rotateAroundLocalZ
virtual void rotateAroundLocalZ(Scalar radians)
Rotation around local z-axis.
Definition: Alignable.cc:183
LocalVector
Local3DVector LocalVector
Definition: LocalVector.h:12
Alignable::geomDetId
const DetId & geomDetId() const
Definition: Alignable.h:177
IdealGeometryRecord.h
PVValHelper::dy
Definition: PVValidationHelpers.h:50
edm::EventSetup
Definition: EventSetup.h:58
SurveyInputCSCfromPins::m_rootFile
std::string m_rootFile
Definition: SurveyInputCSCfromPins.h:48
SurveyInputCSCfromPins
Definition: SurveyInputCSCfromPins.h:16
get
#define get
Alignable::rotateAroundLocalX
virtual void rotateAroundLocalX(Scalar radians)
Rotation around local x-axis.
Definition: Alignable.cc:155
Alignable::move
virtual void move(const GlobalVector &displacement)=0
Movement with respect to the global reference frame.
looper.cfg
cfg
Definition: looper.py:297
PV3DBase::mag
T mag() const
Definition: PV3DBase.h:64
SurveyInputCSCfromPins::SurveyInputCSCfromPins
SurveyInputCSCfromPins(const edm::ParameterSet &)
Definition: SurveyInputCSCfromPins.cc:25
AlignableMuon::CSCEndcaps
align::Alignables CSCEndcaps()
Definition: AlignableMuon.cc:439
std
Definition: JetResolutionObject.h:76
AlignableCSCStation.h
timingPdfMaker.file1
file1
Definition: timingPdfMaker.py:79
AlignableNavigator::alignableFromDetId
AlignableDetOrUnitPtr alignableFromDetId(const DetId &detid)
Returns AlignableDetOrUnitPtr corresponding to given DetId.
Definition: AlignableNavigator.cc:91
DetId.h
PVValHelper::dz
Definition: PVValidationHelpers.h:51
T
long double T
Definition: Basic3DVectorLD.h:48
EventSetup.h
SurveyInputCSCfromPins::m_missingErrorTranslation
double m_missingErrorTranslation
Definition: SurveyInputCSCfromPins.h:51
gemGeometry_cff.gemGeometry
gemGeometry
Definition: gemGeometry_cff.py:5
SurveyInputCSCfromPins::m_stationErrorPhiX
double m_stationErrorPhiX
Definition: SurveyInputCSCfromPins.h:52
funct::abs
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
SurveyDet.h
MuonGeometryRecord.h
P
std::pair< OmniClusterRef, TrackingParticleRef > P
Definition: BDHadronTrackMonitoringAnalyzer.cc:202
edm::Event
Definition: Event.h:73
Alignable::components
virtual const Alignables & components() const =0
Return vector of all direct components.
MuonGeometryRecord
Definition: MuonGeometryRecord.h:34
cuy.ii
ii
Definition: cuy.py:590
Alignable::survey
const SurveyDet * survey() const
Return survey info.
Definition: Alignable.h:216
PVValHelper::dx
Definition: PVValidationHelpers.h:49
MillePedeFileConverter_cfg.e
e
Definition: MillePedeFileConverter_cfg.py:37
Alignable::mother
Alignable * mother() const
Return pointer to container alignable (if any)
Definition: Alignable.h:91