9#include <alignment/reconstruction/AlignablePXDRecoHit.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 <pxd/geometry/SensorInfo.h>
17#include <vxd/geometry/GeoCache.h>
21using namespace alignment;
27 auto alignment = GlobalCalibrationManager::getInstance().getAlignmentHierarchy().getGlobalDerivatives<
VXDAlignment>(getPlaneId(),
30 auto globals = GlobalDerivatives(alignment);
33 auto lorentz = GlobalCalibrationManager::getInstance().getLorentzShiftHierarchy().getGlobalDerivatives<
VXDAlignment>(getPlaneId(),
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});
76 return GlobalDerivatives(globals);
static bool s_enableLorentzGlobalDerivatives
Static enabling(true) or disabling(false) addition of global derivatives for Lorentz shift.
virtual std::pair< std::vector< int >, TMatrixD > globalDerivatives(const genfit::StateOnPlane *sop) override
Labels and derivatives of residuals (local measurement coordinates) w.r.t.
static BFieldManager & getInstance()
Return the instance of the magnetic field manager.
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 (optionally with minus sign...
float getV() const
Get v coordinate.
VxdID getSensorID() const
Get the compact ID.
float getU() const
Get u coordinate.
Specific implementation of SensorInfo for PXD Sensors which provides additional pixel specific inform...
VXD alignment (and maybe some calibration) parameters.
const SensorInfoBase & getSensorInfo(Belle2::VxdID id) const
Return a referecne to the SensorInfo of a given SensorID.
static GeoCache & getInstance()
Return a reference to the singleton instance.
static void getField(const double *pos, double *field)
return the magnetic field at a given position.
Abstract base class for different kinds of events.