9#include <alignment/reconstruction/AlignableBKLMRecoHit.h>
11#include <alignment/GlobalDerivatives.h>
12#include <alignment/GlobalLabel.h>
13#include <alignment/Hierarchy.h>
14#include <framework/geometry/B2Vector3.h>
15#include <klm/bklm/geometry/GeometryPar.h>
16#include <klm/dataobjects/KLMElementNumbers.h>
17#include <klm/dataobjects/KLMHit2d.h>
18#include <klm/dbobjects/bklm/BKLMAlignment.h>
20#include <genfit/DetPlane.h>
26 genfit::PlanarMeasurement(HIT_DIMENSIONS)
28 int section = hit->getSection();
29 int sector = hit->getSector();
38 global[0] = hit->getPositionX();
39 global[1] = hit->getPositionY();
40 global[2] = hit->getPositionZ();
46 double localU = local[1];
47 double localV = local[2];
53 int nStrips = hit->getPhiStripMax() - hit->getPhiStripMin() + 1;
54 double dn = nStrips - 1.5;
55 double factor = std::pow((0.9 + 0.4 * dn * dn), 1.5) * 0.60;
56 errorU = errorU *
sqrt(factor);
58 nStrips = hit->getZStripMax() - hit->getZStripMin() + 1;
60 factor = std::pow((0.9 + 0.4 * dn * dn), 1.5) * 0.55;
61 errorV = errorV *
sqrt(factor);
65 rawHitCoords_(0) = localU;
66 rawHitCoords_(1) = localV;
68 rawHitCov_(0, 0) = errorU * errorU;
69 rawHitCov_(0, 1) = 0.;
70 rawHitCov_(1, 0) = 0.;
71 rawHitCov_(1, 1) = errorV * errorV;
77 CLHEP::Hep3Vector uAxis(0, 1, 0);
78 CLHEP::Hep3Vector vAxis(0, 0, 1);
83 B2Vector3D origin_mid(gOrigin_midway[0], gOrigin_midway[1], gOrigin_midway[2]);
86 B2Vector3D uGlobal(gUaxis[0], gUaxis[1], gUaxis[2]);
88 B2Vector3D vGlobal(gVaxis[0], gVaxis[1], gVaxis[2]);
90 genfit::SharedPlanePtr detPlane(
new genfit::DetPlane(origin_mid, uGlobal, vGlobal, 0));
101 TVectorD predFglo = state.get6DState();
102 TVectorD correctedLocal(2);
103 CLHEP::Hep3Vector localmom(predFglo[3], predFglo[4], predFglo[5]);
108 CLHEP::Hep3Vector global_shift_z(0, 0, predFglo[5]*
halfheight_sci /
sqrt(predFglo[3]*predFglo[3] + predFglo[4]*predFglo[4]));
110 double local_shift_u = localmom[1] / localmom[0] *
halfheight_sci;
111 correctedLocal[0] = local_corrected_z[1] + local_shift_u;
113 correctedLocal[1] = local_corrected_z[2];
115 correctedLocal[0] = rawHitCoords_[0];
116 correctedLocal[1] = rawHitCoords_[1];
120 return std::vector<genfit::MeasurementOnPlane*>(1,
new genfit::MeasurementOnPlane(correctedLocal, rawHitCov_, state.getPlane(),
121 state.getRep(), this->constructHMatrix(state.getRep())));
126 std::vector<int> labGlobal;
136 TMatrixD derGlobal(2, 6);
140 double uSlope = sop->getState()[1];
142 double vSlope = sop->getState()[2];
144 double uPos = sop->getState()[3];
146 double vPos = sop->getState()[4];
149 derGlobal(0, 0) = 1.0;
150 derGlobal(0, 1) = 0.0;
151 derGlobal(0, 2) = - uSlope;
152 derGlobal(0, 3) = vPos * uSlope;
153 derGlobal(0, 4) = -uPos * uSlope;
154 derGlobal(0, 5) = vPos;
156 derGlobal(1, 0) = 0.0;
157 derGlobal(1, 1) = 1.0;
158 derGlobal(1, 2) = - vSlope;
159 derGlobal(1, 3) = vPos * vSlope;
160 derGlobal(1, 4) = -uPos * vSlope;
161 derGlobal(1, 5) = -uPos;
virtual std::vector< genfit::MeasurementOnPlane * > constructMeasurementsOnPlane(const genfit::StateOnPlane &state) const override
Measurement construction.
CLHEP::Hep3Vector global
not streamed
const bklm::Module * m_Module
Module used to get geometry information.
const double halfheight_sci
not streamed
virtual std::pair< std::vector< int >, TMatrixD > globalDerivatives(const genfit::StateOnPlane *sop) override
Labels and derivatives of residuals (local measurement coordinates) w.r.t.
genfit::AbsMeasurement * clone() const override
Creating a deep copy of this hit.
AlignableBKLMRecoHit()
Constructor.
uint16_t m_KLMModule
KLM module number.
@ c_DeltaAlpha
Rotation in alpha.
@ c_DeltaBeta
Rotation in beta.
@ c_DeltaU
Shift in U (EKLM: local X).
@ c_DeltaGamma
Rotation in gamma (EKLM: rotation in local plane).
@ c_DeltaV
Shift in V (EKLM: local Y).
static const KLMElementNumbers & Instance()
Instantiation.
KLMModuleNumber moduleNumberBKLM(int section, int sector, int layer) const
Get module number for BKLM.
Class for easier manipulation with global derivatives (and their labels)
Provides BKLM geometry parameters for simulation, reconstruction etc (from Gearbox or DataBase)
const Module * findModule(int section, int sector, int layer) const
Get the pointer to the definition of a module.
static GeometryPar * instance(void)
Static method to get a reference to the singleton GeometryPar instance.
const CLHEP::Hep3Vector globalToLocal(const CLHEP::Hep3Vector &v, bool reco=false) const
Transform space-point within this module from global to local coordinates.
double getPhiStripWidth() const
Get phi-strip width.
const CLHEP::Hep3Vector getLocalReconstructionShift() const
Return the local-coordinate real-vs-ideal translation of this module's sensitive volume; nominally (0...
const CLHEP::Hep3Vector getGlobalOrigin() const
Return the position (in global coordinates) of this module's sensitive-volume origin.
const CLHEP::Hep3Vector localToGlobal(const CLHEP::Hep3Vector &v, bool reco=false) const
Transform space-point within this module from local to global coordinates.
const CLHEP::Hep3Vector RotateToLocal(const CLHEP::Hep3Vector &v) const
Rotate a vector from global to local system.
double getZStripWidth() const
Get z-strip width.
double sqrt(double a)
sqrt for double
Abstract base class for different kinds of events.