9 #include <alignment/reconstruction/AlignableSVDRecoHit2D.h>
11 #include <alignment/dbobjects/VXDAlignment.h>
12 #include <alignment/GlobalDerivatives.h>
13 #include <alignment/Hierarchy.h>
14 #include <alignment/Manager.h>
15 #include <framework/geometry/BFieldManager.h>
16 #include <svd/geometry/SensorInfo.h>
17 #include <vxd/geometry/GeoCache.h>
21 using namespace alignment;
23 bool AlignableSVDRecoHit2D::s_enableLorentzGlobalDerivatives =
false;
25 std::pair<std::vector<int>, TMatrixD> AlignableSVDRecoHit2D::globalDerivatives(
const genfit::StateOnPlane* sop)
27 auto alignment = GlobalCalibrationManager::getInstance().getAlignmentHierarchy().getGlobalDerivatives<
VXDAlignment>(getPlaneId(),
30 auto globals = GlobalDerivatives(alignment);
32 if (s_enableLorentzGlobalDerivatives) {
33 auto lorentz = GlobalCalibrationManager::getInstance().getLorentzShiftHierarchy().getGlobalDerivatives<
VXDAlignment>(getPlaneId(),
34 sop, BFieldManager::getInstance().getField(ROOT::Math::XYZVector(sop->getPos())));
41 auto L1 = [](
double x) {
return x;};
42 auto L2 = [](
double x) {
return (3 * x * x - 1) / 2;};
43 auto L3 = [](
double x) {
return (5 * x * x * x - 3 * x) / 2;};
44 auto L4 = [](
double x) {
return (35 * x * x * x * x - 30 * x * x + 3) / 8;};
46 double du_dw = sop->getState()[1];
47 double dv_dw = sop->getState()[2];
50 double width = geometry.getWidth(v);
51 double length = geometry.getLength();
61 globals.
add(GlobalLabel::construct<VXDAlignment>(getSensorID(), 31), std::vector<double> {L2(u)*du_dw, L2(u)*dv_dw});
62 globals.
add(GlobalLabel::construct<VXDAlignment>(getSensorID(), 32), std::vector<double> {L1(u)*L1(v)*du_dw, L1(u)*L1(v)*dv_dw});
63 globals.
add(GlobalLabel::construct<VXDAlignment>(getSensorID(), 33), std::vector<double> {L2(v)*du_dw, L2(v)*dv_dw});
65 globals.
add(GlobalLabel::construct<VXDAlignment>(getSensorID(), 41), std::vector<double> {L3(u)*du_dw, L3(u)*dv_dw});
66 globals.
add(GlobalLabel::construct<VXDAlignment>(getSensorID(), 42), std::vector<double> {L2(u)*L1(v)*du_dw, L2(u)*L1(v)*dv_dw});
67 globals.
add(GlobalLabel::construct<VXDAlignment>(getSensorID(), 43), std::vector<double> {L1(u)*L2(v)*du_dw, L1(u)*L2(v)*dv_dw});
68 globals.
add(GlobalLabel::construct<VXDAlignment>(getSensorID(), 44), std::vector<double> {L3(v)*du_dw, L3(v)*dv_dw});
70 globals.
add(GlobalLabel::construct<VXDAlignment>(getSensorID(), 51), std::vector<double> {L4(u)*du_dw, L4(u)*dv_dw});
71 globals.
add(GlobalLabel::construct<VXDAlignment>(getSensorID(), 52), std::vector<double> {L3(u)*L1(v)*du_dw, L3(u)*L1(v)*dv_dw});
72 globals.
add(GlobalLabel::construct<VXDAlignment>(getSensorID(), 53), std::vector<double> {L2(u)*L2(v)*du_dw, L2(u)*L2(v)*dv_dw});
73 globals.
add(GlobalLabel::construct<VXDAlignment>(getSensorID(), 54), std::vector<double> {L1(u)*L3(v)*du_dw, L1(u)*L3(v)*dv_dw});
74 globals.
add(GlobalLabel::construct<VXDAlignment>(getSensorID(), 55), std::vector<double> {L4(v)*du_dw, L4(v)*dv_dw});
virtual double add(baseType id, baseType param, double value, bool subtractInsteadOfAdd=false)
Add correction to already stored (or to 0. if not set yet) constant value (optionaly with minus sign)
Specific implementation of SensorInfo for SVD Sensors which provides additional sensor specific infor...
VXD alignment (and maybe some calibration) parameters.
A state with arbitrary dimension defined in a DetPlane.
Abstract base class for different kinds of events.