CMS 3D CMS Logo

List of all members | Public Member Functions | Private Member Functions | Private Attributes
SurveyInputCSCfromPins Class Reference

#include <SurveyInputCSCfromPins.h>

Inheritance diagram for SurveyInputCSCfromPins:
SurveyInputBase edm::one::EDAnalyzer<> edm::one::EDAnalyzerBase edm::EDConsumerBase

Public Member Functions

void analyze (const edm::Event &, const edm::EventSetup &) override
 Read ideal tracker geometry from DB. More...
 
 SurveyInputCSCfromPins (const edm::ParameterSet &)
 
- Public Member Functions inherited from SurveyInputBase
void beginJob () override
 Read data from input. More...
 
 ~SurveyInputBase () override
 
- Public Member Functions inherited from edm::one::EDAnalyzer<>
 EDAnalyzer ()=default
 
 EDAnalyzer (const EDAnalyzer &)=delete
 
SerialTaskQueueglobalLuminosityBlocksQueue () final
 
SerialTaskQueueglobalRunsQueue () final
 
const EDAnalyzeroperator= (const EDAnalyzer &)=delete
 
bool wantsGlobalLuminosityBlocks () const noexcept final
 
bool wantsGlobalRuns () const noexcept final
 
bool wantsInputProcessBlocks () const noexcept final
 
bool wantsProcessBlocks () const noexcept final
 
- Public Member Functions inherited from edm::one::EDAnalyzerBase
void callWhenNewProductsRegistered (std::function< void(BranchDescription const &)> const &func)
 
 EDAnalyzerBase ()
 
ModuleDescription const & moduleDescription () const
 
bool wantsStreamLuminosityBlocks () const noexcept
 
bool wantsStreamRuns () const noexcept
 
 ~EDAnalyzerBase () override
 
- Public Member Functions inherited from edm::EDConsumerBase
std::vector< ConsumesInfoconsumesInfo () const
 
void convertCurrentProcessAlias (std::string const &processName)
 Convert "@currentProcess" in InputTag process names to the actual current process name. More...
 
 EDConsumerBase ()
 
 EDConsumerBase (EDConsumerBase const &)=delete
 
 EDConsumerBase (EDConsumerBase &&)=default
 
ESResolverIndex const * esGetTokenIndices (edm::Transition iTrans) const
 
std::vector< ESResolverIndex > const & esGetTokenIndicesVector (edm::Transition iTrans) const
 
std::vector< ESRecordIndex > const & esGetTokenRecordIndicesVector (edm::Transition iTrans) const
 
ProductResolverIndexAndSkipBit indexFrom (EDGetToken, BranchType, TypeID const &) const
 
void itemsMayGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
void itemsToGet (BranchType, std::vector< ProductResolverIndexAndSkipBit > &) const
 
std::vector< ProductResolverIndexAndSkipBit > const & itemsToGetFrom (BranchType iType) const
 
void labelsForToken (EDGetToken iToken, Labels &oLabels) const
 
void modulesWhoseProductsAreConsumed (std::array< std::vector< ModuleDescription const *> *, NumBranchTypes > &modulesAll, std::vector< ModuleProcessName > &modulesInPreviousProcesses, ProductRegistry const &preg, std::map< std::string, ModuleDescription const *> const &labelsToDesc, std::string const &processName) const
 
EDConsumerBase const & operator= (EDConsumerBase const &)=delete
 
EDConsumerBaseoperator= (EDConsumerBase &&)=default
 
bool registeredToConsume (ProductResolverIndex, bool, BranchType) const
 
void selectInputProcessBlocks (ProductRegistry const &productRegistry, ProcessBlockHelperBase const &processBlockHelperBase)
 
ProductResolverIndexAndSkipBit uncheckedIndexFrom (EDGetToken) const
 
void updateLookup (BranchType iBranchType, ProductResolverIndexHelper const &, bool iPrefetchMayGet)
 
void updateLookup (eventsetup::ESRecordsToProductResolverIndices const &)
 
virtual ~EDConsumerBase () noexcept(false)
 

Private Member Functions

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)
 
void fillAllRecords (Alignable *ali)
 
void orient (align::LocalVector LC1, align::LocalVector LC2, double a, double b, double &T, double &dx, double &dy, double &dz, double &PhX, double &PhZ)
 

Private Attributes

const edm::ESGetToken< CSCGeometry, MuonGeometryRecordCSCGeoToken_
 
const edm::ESGetToken< DTGeometry, MuonGeometryRecordDTGeoToken_
 
const edm::ESGetToken< GEMGeometry, MuonGeometryRecordGEMGeoToken_
 
double m_errorX
 
double m_errorY
 
double m_errorZ
 
double m_missingErrorAngle
 
double m_missingErrorTranslation
 
std::string m_pinPositions
 
std::string m_rootFile
 
double m_stationErrorPhiX
 
double m_stationErrorPhiY
 
double m_stationErrorPhiZ
 
double m_stationErrorX
 
double m_stationErrorY
 
double m_stationErrorZ
 
bool m_verbose
 

Additional Inherited Members

- Public Types inherited from edm::one::EDAnalyzerBase
typedef EDAnalyzerBase ModuleType
 
- Public Types inherited from edm::EDConsumerBase
typedef ProductLabels Labels
 
- Static Public Member Functions inherited from SurveyInputBase
static void addComponent (Alignable *)
 
static Alignabledetector ()
 Get alignable detector as read from input. More...
 
- Static Public Member Functions inherited from edm::one::EDAnalyzerBase
static const std::string & baseType ()
 
static void fillDescriptions (ConfigurationDescriptions &descriptions)
 
static void prevalidate (ConfigurationDescriptions &descriptions)
 
- Protected Member Functions inherited from edm::EDConsumerBase
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > consumes (edm::InputTag const &tag)
 
template<BranchType B = InEvent>
EDConsumerBaseAdaptor< Bconsumes (edm::InputTag tag) noexcept
 
EDGetToken consumes (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken consumes (TypeToGet const &id, edm::InputTag const &tag)
 
ConsumesCollector consumesCollector ()
 Use a ConsumesCollector to gather consumes information from helper functions. More...
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes ()
 
template<typename ESProduct , typename ESRecord , Transition Tr = Transition::Event>
auto esConsumes (ESInputTag const &tag)
 
template<Transition Tr = Transition::Event>
constexpr auto esConsumes ()
 
template<Transition Tr = Transition::Event>
auto esConsumes (ESInputTag tag)
 
template<Transition Tr = Transition::Event>
ESGetTokenGeneric esConsumes (eventsetup::EventSetupRecordKey const &iRecord, eventsetup::DataKey const &iKey)
 Used with EventSetupRecord::doGet. More...
 
template<typename ProductType , BranchType B = InEvent>
EDGetTokenT< ProductType > mayConsume (edm::InputTag const &tag)
 
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
template<BranchType B>
EDGetToken mayConsume (const TypeToGet &id, edm::InputTag const &tag)
 
void resetItemsToGetFrom (BranchType iType)
 
- Protected Attributes inherited from SurveyInputBase
bool theFirstEvent
 

Detailed Description

Class to read ideal tracker from DB.

$Date: Fri Jun 29 09:20:52 CEST 2007

Revision
1.2
Author
Dmitry Yakorev

Definition at line 18 of file SurveyInputCSCfromPins.h.

Constructor & Destructor Documentation

◆ SurveyInputCSCfromPins()

SurveyInputCSCfromPins::SurveyInputCSCfromPins ( const edm::ParameterSet cfg)

Definition at line 22 of file SurveyInputCSCfromPins.cc.

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")) {}
const edm::ESGetToken< DTGeometry, MuonGeometryRecord > DTGeoToken_
const edm::ESGetToken< CSCGeometry, MuonGeometryRecord > CSCGeoToken_
const edm::ESGetToken< GEMGeometry, MuonGeometryRecord > GEMGeoToken_

Member Function Documentation

◆ analyze()

void SurveyInputCSCfromPins::analyze ( const edm::Event ,
const edm::EventSetup iSetup 
)
overridevirtual

Read ideal tracker geometry from DB.

Implements SurveyInputBase.

Definition at line 131 of file SurveyInputCSCfromPins.cc.

References a, SurveyInputBase::addComponent(), AlignableNavigator::alignableFromDetId(), align::AlignableMuon, b, AlignableMuon::CSCEndcaps(), CSCGeoToken_, DTGeoToken_, PVValHelper::dx, PVValHelper::dy, PVValHelper::dz, TrackValidation_cff::e5, relativeConstraints::error, errors(), timingPdfMaker::file1, fillAllRecords(), gemGeometry_cff::gemGeometry, GEMGeoToken_, edm::EventSetup::getData(), h, mps_fire::i, cuy::ii, recoMuon::in, m_missingErrorAngle, m_pinPositions, m_rootFile, m_verbose, Alignable::mother(), Alignable::move(), orient(), Alignable::rotateAroundLocalX(), Alignable::rotateAroundLocalZ(), Alignable::setSurvey(), Alignable::surface(), Alignable::survey(), SurveyInputBase::theFirstEvent, AlignableSurface::toGlobal(), AlignableSurface::toLocal(), compareTotals::tot, isotrackApplyRegressor::tree1, PV3DBase< T, PVType, FrameType >::x(), testProducerWithPsetDescEmpty_cfi::x1, testProducerWithPsetDescEmpty_cfi::x2, PV3DBase< T, PVType, FrameType >::y(), testProducerWithPsetDescEmpty_cfi::y1, testProducerWithPsetDescEmpty_cfi::y2, PV3DBase< T, PVType, FrameType >::z(), ppsModifySingularModes_cfi::z1, and ppsModifySingularModes_cfi::z2.

131  {
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  const DTGeometry *dtGeometry = &iSetup.getData(DTGeoToken_);
164  const CSCGeometry *cscGeometry = &iSetup.getData(CSCGeoToken_);
165  const GEMGeometry *gemGeometry = &iSetup.getData(GEMGeoToken_);
166 
167  AlignableMuon *theAlignableMuon = new AlignableMuon(dtGeometry, cscGeometry, gemGeometry);
168  AlignableNavigator *theAlignableNavigator = new AlignableNavigator(theAlignableMuon);
169 
170  const auto &theEndcaps = theAlignableMuon->CSCEndcaps();
171 
172  for (const auto &aliiter : theEndcaps) {
173  addComponent(aliiter);
174  }
175 
176  while (in.good()) {
177  bool missing1 = false;
178  bool missing2 = false;
179 
180  in >> ID1 >> ID2 >> ID3 >> ID4 >> ID5 >> x1 >> y1 >> z1 >> x2 >> y2 >> z2 >> a >> b;
181 
182  if (fabs(x1 - 1000.) < 1e5 && fabs(y1 - 1000.) < 1e5 && fabs(z1 - 1000.) < 1e5) {
183  missing1 = true;
184  x1 = x2;
185  y1 = y2;
186  z1 = z2;
187  }
188 
189  if (fabs(x2 - 1000.) < 1e5 && fabs(y2 - 1000.) < 1e5 && fabs(z2 - 1000.) < 1e5) {
190  missing2 = true;
191  x2 = x1;
192  y2 = y1;
193  z2 = z1;
194  }
195 
196  x1 = x1 / 10.0;
197  y1 = y1 / 10.0;
198  z1 = z1 / 10.0;
199  x2 = x2 / 10.0;
200  y2 = y2 / 10.0;
201  z2 = z2 / 10.0;
202 
203  CSCDetId layerID(ID1, ID2, ID3, ID4, 1);
204 
205  // We cannot use chamber ID (when ID5=0), because AlignableNavigator gives the error (aliDet and aliDetUnit are undefined for chambers)
206 
207  Alignable *theAlignable1 = theAlignableNavigator->alignableFromDetId(layerID);
208  Alignable *chamberAli = theAlignable1->mother();
209 
210  LocalVector LC1 = chamberAli->surface().toLocal(GlobalVector(x1, y1, z1));
211  LocalVector LC2 = chamberAli->surface().toLocal(GlobalVector(x2, y2, z2));
212 
213  orient(LC1, LC2, a, b, T, dx, dy, dz, PhX, PhZ);
214 
215  GlobalPoint PG1 = chamberAli->surface().toGlobal(LocalPoint(LC1.x(), LC1.y() + a, LC1.z() + b));
216  chamberAli->surface().toGlobal(LocalPoint(LC2.x(), LC2.y() - a, LC2.z() + b));
217 
218  LocalVector lvector(dx, dy, dz);
219  GlobalVector gvector = (chamberAli->surface()).toGlobal(lvector);
220  chamberAli->move(gvector);
221 
222  chamberAli->rotateAroundLocalX(PhX);
223  chamberAli->rotateAroundLocalZ(PhZ);
224 
225  double dx_dx, dy_dy, dz_dz, phix_phix, phiz_phiz, dy_phix;
226  errors(a, b, missing1, missing2, dx_dx, dy_dy, dz_dz, phix_phix, phiz_phiz, dy_phix);
227  align::ErrorMatrix error = ROOT::Math::SMatrixIdentity();
228  error(0, 0) = dx_dx;
229  error(1, 1) = dy_dy;
230  error(2, 2) = dz_dz;
231  error(3, 3) = phix_phix;
232  error(4, 4) = m_missingErrorAngle;
233  error(5, 5) = phiz_phiz;
234  error(1, 3) = dy_phix;
235  error(3, 1) = dy_phix; // just in case
236 
237  chamberAli->setSurvey(new SurveyDet(chamberAli->surface(), error));
238 
239  if (m_verbose) {
240  edm::LogInfo("SurveyInputCSCfromPins") << " survey information = " << chamberAli->survey() << " \n";
241 
242  LocalPoint LP1n = chamberAli->surface().toLocal(PG1);
243 
244  LocalPoint hiP(LP1n.x(), LP1n.y() - a * T, LP1n.z() - b);
245 
246  h = hiP.mag();
247  s1 = LP1n.y() - a;
248 
249  if (h > maxErr) {
250  maxErr = h;
251 
252  ii = i;
253  }
254 
255  edm::LogInfo("SurveyInputCSCfromPins")
256  << " \n"
257  << "i " << i++ << " " << ID1 << " " << ID2 << " " << ID3 << " " << ID4 << " " << ID5 << " error " << h
258  << " \n"
259  << " x1 " << x1 << " y1 " << y1 << " z1 " << z1 << " x2 " << x2 << " y2 " << y2 << " z2 " << z2 << " \n"
260  << " error " << h << " S1 " << s1 << " \n"
261  << " dx " << dx << " dy " << dy << " dz " << dz << " PhX " << PhX << " PhZ " << PhZ << " \n";
262 
263  tot += h;
264 
265  tree1->Fill();
266  }
267  }
268 
269  in.close();
270 
271  if (m_verbose) {
272  file1->Write();
273  edm::LogInfo("SurveyInputCSCfromPins")
274  << " Total error " << tot << " Max Error " << maxErr << " N " << ii << " \n";
275  }
276 
277  file1->Close();
278 
279  for (const auto &aliiter : theEndcaps) {
280  fillAllRecords(aliiter);
281  }
282 
283  delete theAlignableMuon;
284  delete theAlignableNavigator;
285 
286  edm::LogInfo("SurveyInputCSCfromPins") << "*************END INITIALIZATION***************"
287  << " \n";
288 
289  theFirstEvent = false;
290  }
291 }
align::GlobalPoints toGlobal(const align::LocalPoints &) const
Return in global coord given a set of local points.
const edm::ESGetToken< DTGeometry, MuonGeometryRecord > DTGeoToken_
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)
Alignable * mother() const
Return pointer to container alignable (if any)
Definition: Alignable.h:91
Point3DBase< Scalar, LocalTag > LocalPoint
Definition: Definitions.h:30
T const & getData(const ESGetToken< T, R > &iToken) const noexcept(false)
Definition: EventSetup.h:119
const AlignableSurface & surface() const
Return the Surface (global position and orientation) of the object.
Definition: Alignable.h:132
virtual void rotateAroundLocalZ(Scalar radians)
Rotation around local z-axis.
Definition: Alignable.cc:183
T z() const
Definition: PV3DBase.h:61
virtual void move(const GlobalVector &displacement)=0
Movement with respect to the global reference frame.
static void addComponent(Alignable *)
T x() const
Definition: PV3DBase.h:59
T y() const
Definition: PV3DBase.h:60
align::Alignables CSCEndcaps()
void fillAllRecords(Alignable *ali)
const SurveyDet * survey() const
Return survey info.
Definition: Alignable.h:216
const edm::ESGetToken< CSCGeometry, MuonGeometryRecord > CSCGeoToken_
ii
Definition: cuy.py:589
Log< level::Info, false > LogInfo
void setSurvey(const SurveyDet *)
Set survey info.
Definition: Alignable.cc:266
double b
Definition: hdecay.h:120
const edm::ESGetToken< GEMGeometry, MuonGeometryRecord > GEMGeoToken_
align::RotationType toLocal(const align::RotationType &) const
Return in local frame a rotation given in global frame.
double a
Definition: hdecay.h:121
virtual void rotateAroundLocalX(Scalar radians)
Rotation around local x-axis.
Definition: Alignable.cc:155
math::Error< 6 >::type ErrorMatrix
Definition: Definitions.h:37
The Signals That Services Can Subscribe To This is based on ActivityRegistry h
Helper function to determine trigger accepts.
Definition: Activities.doc:4
long double T
Constructor of the full muon geometry.
Definition: AlignableMuon.h:38
void orient(align::LocalVector LC1, align::LocalVector LC2, double a, double b, double &T, double &dx, double &dy, double &dz, double &PhX, double &PhZ)
AlignableDetOrUnitPtr alignableFromDetId(const DetId &detid)
Returns AlignableDetOrUnitPtr corresponding to given DetId.
Global3DVector GlobalVector
Definition: GlobalVector.h:10

◆ errors()

void SurveyInputCSCfromPins::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 
)
private

Definition at line 75 of file SurveyInputCSCfromPins.cc.

References a, b, PVValHelper::dx, PVValHelper::dy, PVValHelper::dz, mps_fire::i, m_errorX, m_errorY, m_errorZ, m_missingErrorTranslation, and orient().

Referenced by analyze(), and fillAllRecords().

84  {
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 }
Local3DVector LocalVector
Definition: LocalVector.h:12
double b
Definition: hdecay.h:120
double a
Definition: hdecay.h:121
long double T
void orient(align::LocalVector LC1, align::LocalVector LC2, double a, double b, double &T, double &dx, double &dy, double &dz, double &PhX, double &PhZ)

◆ fillAllRecords()

void SurveyInputCSCfromPins::fillAllRecords ( Alignable ali)
private

Definition at line 293 of file SurveyInputCSCfromPins.cc.

References a, funct::abs(), b, Alignable::components(), ALCARECOPPSCalTrackBasedSel_cff::detid, MillePedeFileConverter_cfg::e, relativeConstraints::error, errors(), Alignable::geomDetId(), m_missingErrorAngle, m_missingErrorTranslation, m_stationErrorPhiX, m_stationErrorPhiY, m_stationErrorPhiZ, m_stationErrorX, m_stationErrorY, m_stationErrorZ, Alignable::setSurvey(), Alignable::surface(), and Alignable::survey().

Referenced by analyze().

293  {
294  if (ali->survey() == nullptr) {
295  AlignableCSCChamber *ali_AlignableCSCChamber = dynamic_cast<AlignableCSCChamber *>(ali);
296  AlignableCSCStation *ali_AlignableCSCStation = dynamic_cast<AlignableCSCStation *>(ali);
297 
298  if (ali_AlignableCSCChamber != nullptr) {
299  CSCDetId detid(ali->geomDetId());
300  if (abs(detid.station()) == 1 && (detid.ring() == 1 || detid.ring() == 4)) {
301  align::ErrorMatrix error = ROOT::Math::SMatrixIdentity();
305  error(3, 3) = m_missingErrorAngle;
306  error(4, 4) = m_missingErrorAngle;
307  error(5, 5) = m_missingErrorAngle;
308 
309  ali->setSurvey(new SurveyDet(ali->surface(), error));
310  } else {
311  double a = 100.;
312  double b = -9.4034;
313  if (abs(detid.station()) == 1 && detid.ring() == 2)
314  a = -90.260;
315  else if (abs(detid.station()) == 1 && detid.ring() == 3)
316  a = -85.205;
317  else if (abs(detid.station()) == 2 && detid.ring() == 1)
318  a = -97.855;
319  else if (abs(detid.station()) == 2 && detid.ring() == 2)
320  a = -164.555;
321  else if (abs(detid.station()) == 3 && detid.ring() == 1)
322  a = -87.870;
323  else if (abs(detid.station()) == 3 && detid.ring() == 2)
324  a = -164.555;
325  else if (abs(detid.station()) == 4 && detid.ring() == 1)
326  a = -77.890;
327 
328  double dx_dx, dy_dy, dz_dz, phix_phix, phiz_phiz, dy_phix;
329  errors(a, b, true, true, dx_dx, dy_dy, dz_dz, phix_phix, phiz_phiz, dy_phix);
330  align::ErrorMatrix error = ROOT::Math::SMatrixIdentity();
331  error(0, 0) = dx_dx;
332  error(1, 1) = dy_dy;
333  error(2, 2) = dz_dz;
334  error(3, 3) = phix_phix;
335  error(4, 4) = m_missingErrorAngle;
336  error(5, 5) = phiz_phiz;
337  error(1, 3) = dy_phix;
338  error(3, 1) = dy_phix; // just in case
339 
340  ali->setSurvey(new SurveyDet(ali->surface(), error));
341  }
342  }
343 
344  else if (ali_AlignableCSCStation != nullptr) {
345  align::ErrorMatrix error = ROOT::Math::SMatrixIdentity();
346  error(0, 0) = m_stationErrorX;
347  error(1, 1) = m_stationErrorY;
348  error(2, 2) = m_stationErrorZ;
349  error(3, 3) = m_stationErrorPhiX;
350  error(4, 4) = m_stationErrorPhiY;
351  error(5, 5) = m_stationErrorPhiZ;
352 
353  ali->setSurvey(new SurveyDet(ali->surface(), error));
354  }
355 
356  else {
357  align::ErrorMatrix error = ROOT::Math::SMatrixIdentity();
358  ali->setSurvey(new SurveyDet(ali->surface(), error * (1e-10)));
359  }
360  }
361 
362  for (const auto &iter : ali->components()) {
363  fillAllRecords(iter);
364  }
365 }
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)
const AlignableSurface & surface() const
Return the Surface (global position and orientation) of the object.
Definition: Alignable.h:132
void fillAllRecords(Alignable *ali)
const SurveyDet * survey() const
Return survey info.
Definition: Alignable.h:216
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
virtual const Alignables & components() const =0
Return vector of all direct components.
const DetId & geomDetId() const
Definition: Alignable.h:177
void setSurvey(const SurveyDet *)
Set survey info.
Definition: Alignable.cc:266
double b
Definition: hdecay.h:120
double a
Definition: hdecay.h:121
math::Error< 6 >::type ErrorMatrix
Definition: Definitions.h:37
A muon CSC Chamber( an AlignableDet )

◆ orient()

void SurveyInputCSCfromPins::orient ( align::LocalVector  LC1,
align::LocalVector  LC2,
double  a,
double  b,
double &  T,
double &  dx,
double &  dy,
double &  dz,
double &  PhX,
double &  PhZ 
)
private

Definition at line 41 of file SurveyInputCSCfromPins.cc.

References a, Matriplex::atan2(), b, PVValHelper::dx, PVValHelper::dy, PVValHelper::dz, PV3DBase< T, PVType, FrameType >::mag(), SQR, mathSSE::sqrt(), PV3DBase< T, PVType, FrameType >::x(), PV3DBase< T, PVType, FrameType >::y(), and PV3DBase< T, PVType, FrameType >::z().

Referenced by analyze(), and errors().

50  {
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 }
T z() const
Definition: PV3DBase.h:61
T x() const
Definition: PV3DBase.h:59
T y() const
Definition: PV3DBase.h:60
T sqrt(T t)
Definition: SSEVec.h:23
T mag() const
Definition: PV3DBase.h:64
double b
Definition: hdecay.h:120
std::pair< OmniClusterRef, TrackingParticleRef > P
double a
Definition: hdecay.h:121
long double T
#define SQR(x)
MPlex< T, D1, D2, N > atan2(const MPlex< T, D1, D2, N > &y, const MPlex< T, D1, D2, N > &x)
Definition: Matriplex.h:648

Member Data Documentation

◆ CSCGeoToken_

const edm::ESGetToken<CSCGeometry, MuonGeometryRecord> SurveyInputCSCfromPins::CSCGeoToken_
private

Definition at line 50 of file SurveyInputCSCfromPins.h.

Referenced by analyze().

◆ DTGeoToken_

const edm::ESGetToken<DTGeometry, MuonGeometryRecord> SurveyInputCSCfromPins::DTGeoToken_
private

Definition at line 49 of file SurveyInputCSCfromPins.h.

Referenced by analyze().

◆ GEMGeoToken_

const edm::ESGetToken<GEMGeometry, MuonGeometryRecord> SurveyInputCSCfromPins::GEMGeoToken_
private

Definition at line 51 of file SurveyInputCSCfromPins.h.

Referenced by analyze().

◆ m_errorX

double SurveyInputCSCfromPins::m_errorX
private

Definition at line 56 of file SurveyInputCSCfromPins.h.

Referenced by errors().

◆ m_errorY

double SurveyInputCSCfromPins::m_errorY
private

Definition at line 56 of file SurveyInputCSCfromPins.h.

Referenced by errors().

◆ m_errorZ

double SurveyInputCSCfromPins::m_errorZ
private

Definition at line 56 of file SurveyInputCSCfromPins.h.

Referenced by errors().

◆ m_missingErrorAngle

double SurveyInputCSCfromPins::m_missingErrorAngle
private

Definition at line 57 of file SurveyInputCSCfromPins.h.

Referenced by analyze(), and fillAllRecords().

◆ m_missingErrorTranslation

double SurveyInputCSCfromPins::m_missingErrorTranslation
private

Definition at line 57 of file SurveyInputCSCfromPins.h.

Referenced by errors(), and fillAllRecords().

◆ m_pinPositions

std::string SurveyInputCSCfromPins::m_pinPositions
private

Definition at line 53 of file SurveyInputCSCfromPins.h.

Referenced by analyze().

◆ m_rootFile

std::string SurveyInputCSCfromPins::m_rootFile
private

Definition at line 54 of file SurveyInputCSCfromPins.h.

Referenced by analyze().

◆ m_stationErrorPhiX

double SurveyInputCSCfromPins::m_stationErrorPhiX
private

Definition at line 58 of file SurveyInputCSCfromPins.h.

Referenced by fillAllRecords().

◆ m_stationErrorPhiY

double SurveyInputCSCfromPins::m_stationErrorPhiY
private

Definition at line 58 of file SurveyInputCSCfromPins.h.

Referenced by fillAllRecords().

◆ m_stationErrorPhiZ

double SurveyInputCSCfromPins::m_stationErrorPhiZ
private

Definition at line 58 of file SurveyInputCSCfromPins.h.

Referenced by fillAllRecords().

◆ m_stationErrorX

double SurveyInputCSCfromPins::m_stationErrorX
private

Definition at line 58 of file SurveyInputCSCfromPins.h.

Referenced by fillAllRecords().

◆ m_stationErrorY

double SurveyInputCSCfromPins::m_stationErrorY
private

Definition at line 58 of file SurveyInputCSCfromPins.h.

Referenced by fillAllRecords().

◆ m_stationErrorZ

double SurveyInputCSCfromPins::m_stationErrorZ
private

Definition at line 58 of file SurveyInputCSCfromPins.h.

Referenced by fillAllRecords().

◆ m_verbose

bool SurveyInputCSCfromPins::m_verbose
private

Definition at line 55 of file SurveyInputCSCfromPins.h.

Referenced by analyze().