CMS 3D CMS Logo

WriteESAlignments.cc
Go to the documentation of this file.
2 
7 
9 
11 
13 
15 
17  : geometryToken_{cc.esConsumes<CaloGeometry, CaloGeometryRecord>(edm::ESInputTag{})},
19 
20 void WEA::writeAlignments(const edm::EventSetup& eventSetup,
21  const WEA::DVec& alphaVec,
22  const WEA::DVec& betaVec,
23  const WEA::DVec& gammaVec,
24  const WEA::DVec& xtranslVec,
25  const WEA::DVec& ytranslVec,
26  const WEA::DVec& ztranslVec) {
27  assert(alphaVec.size() == k_nA);
28  assert(betaVec.size() == k_nA);
29  assert(gammaVec.size() == k_nA);
30  assert(xtranslVec.size() == k_nA);
31  assert(ytranslVec.size() == k_nA);
32  assert(ztranslVec.size() == k_nA);
33 
34  AliPtr aliPtr(new Alignments); // writeOne will take ownership!
35  AliVec& vali(aliPtr->m_align);
36 
37  convert(eventSetup, alphaVec, betaVec, gammaVec, xtranslVec, ytranslVec, ztranslVec, vali);
38 
39  write(aliPtr);
40 }
41 
42 void WEA::write(WEA::AliPtr aliPtr) {
43  std::cout << "Uploading ES alignments to the database" << std::endl;
44 
46 
47  if (!poolDbService.isAvailable())
48  throw cms::Exception("NotAvailable") << "PoolDBOutputService not available";
49 
50  poolDbService->writeOne<Alignments>(&(*aliPtr), poolDbService->currentTime(), "ESAlignmentRcd");
51 }
52 
54  const WEA::DVec& a,
55  const WEA::DVec& b,
56  const WEA::DVec& g,
57  const WEA::DVec& x,
58  const WEA::DVec& y,
59  const WEA::DVec& z,
60  WEA::AliVec& va) {
61  const auto& pG = eS.getData(geometryToken_);
62 
63  const CaloSubdetectorGeometry* geom(pG.getSubdetectorGeometry(DetId::Ecal, EcalPreshower));
64 
65  const auto& pA = eS.getData(alignmentToken_);
66  const AliVec& vaPrev(pA.m_align);
67 
68  va.reserve(k_nA);
69  for (unsigned int i(0); i != k_nA; ++i) {
70  // ordering of i is: left, right, left, right,...
71  // starting at ES- rear, then ES- front,
72  // then ES+ front, then ES+ rear
73 
75 
76  double zPlanePrev(geom->getGeometry(id)->getPosition().z());
77  const double zAlignPrev(vaPrev[i].translation().z());
78  const Trl q_I(0, 0, zPlanePrev - zAlignPrev);
79  const Trl& s_p(vaPrev[i].translation());
80  const Trl t_n(x[i], y[i], z[i]);
81  const Rot G_p(vaPrev[i].rotation());
82  const double gamma(g[i]);
83  const double alpha(a[i]);
84  const double beta(b[i]);
85 
86  const Rot L_n( // New rotation in local frame!
87  Rot(Rot(Rot().rotateZ(-gamma)).rotateX(-alpha)).rotateY(-beta));
88 
89  const Rot InvL_n(L_n.inverse());
90 
91  const Rot G_n(InvL_n * G_p);
92 
93  const Trl s_n(t_n + s_p + q_I - InvL_n * q_I);
94 
95  std::cout << "For i = " << i << ", q_I=" << q_I << std::endl;
96  std::cout << "For i = " << i << ", s_p=" << s_p << std::endl;
97  std::cout << "For i = " << i << ", alpha = " << 1000. * alpha << " mr" << std::endl;
98  std::cout << "For i = " << i << ", beta = " << 1000. * beta << " mr" << std::endl;
99  std::cout << "For i = " << i << ", gamma = " << 1000. * gamma << " mr" << std::endl;
100  std::cout << " For i = " << i << ", L_n = " << L_n << " Euler angles=" << InvL_n.eulerAngles() << "\n"
101  << std::endl;
102  std::cout << "For i = " << i << ", t_n=" << t_n << std::endl;
103  std::cout << "For i = " << i << ", G_p=" << G_p << " Euler angles=" << G_p.eulerAngles() << "\n" << std::endl;
104  std::cout << " For i = " << i << ", InvL_n = " << InvL_n << " Euler angles=" << InvL_n.eulerAngles() << "\n"
105  << std::endl;
106  std::cout << " For i =" << i << ", G_n = " << G_n << " Euler angles=" << G_n.eulerAngles() << "\n" << std::endl;
107  std::cout << " For i =" << i << ", s_n = " << s_n << std::endl;
108  std::cout << "++++++++++++++++++++++++++\n\n" << std::endl;
109 
110  va.emplace_back(AlignTransform(s_n, G_n, id));
111  }
112 }
AlignTransform::Rotation Rot
AlignTransform::Translation Trl
std::vector< AlignTransform > AliVec
void write(AliPtr aliPtr)
WriteESAlignments WEA
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e g
Definition: Activities.doc:4
bool getData(T &iHolder) const
Definition: EventSetup.h:113
WriteESAlignments(edm::ConsumesCollector &&cc)
static DetId detIdFromLocalAlignmentIndex(unsigned int iLoc)
bool isAvailable() const
Definition: Service.h:40
void writeOne(T *payload, Time_t time, const std::string &recordName, bool withlogging=false)
static unsigned int numberOfAlignments()
edm::ESGetToken< CaloGeometry, CaloGeometryRecord > geometryToken_
double b
Definition: hdecay.h:118
static const unsigned int k_nA
double a
Definition: hdecay.h:119
alpha
zGenParticlesMatch = cms.InputTag(""),
std::vector< double > DVec
void convert(const edm::EventSetup &eS, const DVec &a, const DVec &b, const DVec &g, const DVec &x, const DVec &y, const DVec &z, AliVec &va)
void writeAlignments(const edm::EventSetup &eventSetup, const DVec &alphaVec, const DVec &betaVec, const DVec &gammaVec, const DVec &xtranslVec, const DVec &ytranslVec, const DVec &ztranslVec)
edm::ESGetToken< Alignments, ESAlignmentRcd > alignmentToken_