CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
CSCAlignmentCorrections.cc
Go to the documentation of this file.
3 
6 
8  edm::Service<TFileService> tFileService;
9 
10  for (unsigned int i = 0; i < m_coefficient.size(); i++) {
11  std::string modifiedName = m_fitterName;
12  if (modifiedName[0] == 'M' && modifiedName[1] == 'E') {
13  if (modifiedName[2] == '-') modifiedName[2] = 'm';
14  else if (modifiedName[2] == '+') modifiedName[2] = 'p';
15  if (modifiedName[4] == '/') modifiedName[4] = '_';
16  if (modifiedName[6] == '/') modifiedName[6] = '_';
17  }
18  else if (modifiedName[0] == 'Y' && modifiedName[1] == 'E') {
19  if (modifiedName[2] == '-') modifiedName[2] = 'm';
20  else if (modifiedName[2] == '+') modifiedName[2] = 'p';
21  }
22 
23  std::stringstream histname, histtitle;
24  histname << modifiedName << "_mode_" << i;
25  histtitle << m_error[i];
26 
27  TH1F *hist = tFileService->make<TH1F>(histname.str().c_str(), histtitle.str().c_str(), m_coefficient[i].size(), 0.5, m_coefficient[i].size() + 0.5);
28 
29  bool showed_full_name = false;
30  for (unsigned int j = 0; j < m_coefficient[i].size(); j++) {
31  hist->SetBinContent(j+1, m_coefficient[i][j]);
32 
33  if (m_modeid[i][j] == -1 || !showed_full_name) {
34  hist->GetXaxis()->SetBinLabel(j+1, m_modename[i][j].c_str());
35  }
36  else {
37  std::stringstream shortname;
38  shortname << m_modename[i][j][7] << m_modename[i][j][8];
39  hist->GetXaxis()->SetBinLabel(j+1, shortname.str().c_str());
40  }
41  if (m_modeid[i][j] != -1) showed_full_name = true;
42  }
43 
44  th1f_modes.push_back(hist);
45  }
46 }
47 
49  report << "cscReports.append(CSCFitterReport(\"" << m_fitterName << "\", " << m_oldchi2 << ", " << m_newchi2 << "))" << std::endl;
50 
51  for (unsigned int i = 0; i < m_name.size(); i++) {
52  report << "cscReports[-1].addChamberCorrection(\"" << m_name[i] << "\", " << m_id[i].rawId() << ", " << m_value[i] << ")" << std::endl;
53  }
54 
55  for (unsigned int i = 0; i < m_coefficient.size(); i++) {
56  report << "cscReports[-1].addErrorMode(" << m_error[i] << ")" << std::endl;
57 
58  for (unsigned int j = 0; j < m_coefficient[i].size(); j++) {
59  report << "cscReports[-1].addErrorModeTerm(\"" << m_modename[i][j] << "\", " << m_modeid[i][j] << ", " << m_coefficient[i][j] << ")" << std::endl;
60  }
61  }
62 
63  for (unsigned int i = 0; i < m_i.size(); i++) {
64  report << "cscReports[-1].addCSCConstraintResidual(\"" << m_i[i] << "\", \"" << m_j[i] << "\", " << m_before[i] << ", " << m_uncert[i] << ", " << m_residual[i] << ", " << m_pull[i] << ")" << std::endl;
65  }
66 
67  report << std::endl;
68 }
69 
70 void CSCAlignmentCorrections::applyAlignment(AlignableNavigator *alignableNavigator, AlignmentParameterStore *alignmentParameterStore, int mode, bool combineME11) {
71  for (unsigned int i = 0; i < m_name.size(); i++) {
72  // CSC sign conventions
73  bool backward = ((m_id[i].endcap() == 1 && m_id[i].station() >= 3) || (m_id[i].endcap() == 2 && m_id[i].station() < 3));
74 
75  // get the alignable (or two alignables if in ME1/1)
76  const DetId id(m_id[i]);
77  Alignable *alignable = alignableNavigator->alignableFromDetId(id).alignable();
78  Alignable *also = NULL;
79  if (combineME11 && m_id[i].station() == 1 && m_id[i].ring() == 1) {
80  CSCDetId alsoid(m_id[i].endcap(), 1, 4, m_id[i].chamber(), 0);
81  const DetId alsoid2(alsoid);
82  also = alignableNavigator->alignableFromDetId(alsoid2).alignable();
83  }
84 
85  AlgebraicVector params(6);
86  AlgebraicSymMatrix cov(6);
87 
89  params[4] = m_value[i];
90  cov[4][4] = 1e-6;
91  }
92  else if (mode == CSCPairResidualsConstraint::kModePhiPos) {
93  align::GlobalPoint center = alignable->surface().toGlobal(align::LocalPoint(0., 0., 0.));
94  double radius = sqrt(center.x()*center.x() + center.y()*center.y());
95 
96  double phi_correction = m_value[i];
97  params[0] = -radius * sin(phi_correction) * (backward ? -1. : 1.);
98  params[1] = radius * (cos(phi_correction) - 1.);
99  params[5] = phi_correction * (backward ? -1. : 1.);
100 
101  cov[0][0] = 1e-6;
102  cov[1][1] = 1e-6;
103  cov[5][5] = 1e-6;
104  }
105  else if (mode == CSCPairResidualsConstraint::kModePhiz) {
106  params[5] = m_value[i] * (backward ? -1. : 1.);
107  cov[5][5] = 1e-6;
108  }
109  else assert(false);
110 
111  AlignmentParameters *parnew = alignable->alignmentParameters()->cloneFromSelected(params, cov);
112  alignable->setAlignmentParameters(parnew);
113  alignmentParameterStore->applyParameters(alignable);
114  alignable->alignmentParameters()->setValid(true);
115  if (also != NULL) {
116  AlignmentParameters *parnew2 = also->alignmentParameters()->cloneFromSelected(params, cov);
117  also->setAlignmentParameters(parnew2);
118  alignmentParameterStore->applyParameters(also);
119  also->alignmentParameters()->setValid(true);
120  }
121  }
122 }
int i
Definition: DBlmapReader.cc:9
std::vector< std::vector< std::string > > m_modename
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
assert(m_qm.get())
T y() const
Definition: PV3DBase.h:63
#define NULL
Definition: scimark2.h:8
T * make(const Args &...args) const
make new ROOT object
Definition: TFileService.h:64
void applyParameters(void)
Obsolete: Use AlignableNavigator::alignableDetFromDetId and alignableFromAlignableDet.
void report(std::ofstream &report)
std::vector< std::string > m_i
AlignmentParameters * alignmentParameters() const
Get the AlignmentParameters.
Definition: Alignable.h:57
tuple report
Definition: zeeHLT_cff.py:9
void applyAlignment(AlignableNavigator *alignableNavigator, AlignmentParameterStore *alignmentParameterStore, int mode, bool combineME11)
void setAlignmentParameters(AlignmentParameters *dap)
Set the AlignmentParameters.
Definition: Alignable.cc:110
void setValid(bool v)
Set validity flag.
T sqrt(T t)
Definition: SSEVec.h:48
std::vector< TH1F * > th1f_modes
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
std::vector< double > m_before
int j
Definition: DBlmapReader.cc:9
std::vector< std::vector< double > > m_coefficient
std::vector< std::vector< long > > m_modeid
const AlignableSurface & surface() const
Return the Surface (global position and orientation) of the object.
Definition: Alignable.h:131
tuple combineME11
Definition: align_cfg.py:32
Definition: DetId.h:18
CLHEP::HepVector AlgebraicVector
std::vector< double > m_residual
std::vector< double > m_uncert
std::vector< double > m_pull
std::vector< double > m_value
align::GlobalPoints toGlobal(const align::LocalPoints &) const
Return in global coord given a set of local points.
CLHEP::HepSymMatrix AlgebraicSymMatrix
std::vector< std::string > m_j
std::vector< CSCDetId > m_id
std::vector< double > m_error
virtual AlignmentParameters * cloneFromSelected(const AlgebraicVector &par, const AlgebraicSymMatrix &cov) const =0
T x() const
Definition: PV3DBase.h:62
std::vector< std::string > m_name
AlignableDetOrUnitPtr alignableFromDetId(const DetId &detid)
Returns AlignableDetOrUnitPtr corresponding to given DetId.