9#include <alignment/reconstruction/AlignableSVDRecoHit.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>
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];
53 v = sop->getState()[4];
56 u = sop->getState()[3];
59 double width = geometry.getWidth(v);
60 double length = geometry.getLength();
71 globals.
add(GlobalLabel::construct<VXDAlignment>(
getSensorID(), 31), std::vector<double> {L2(u)*du_dw, L2(u)*dv_dw});
72 globals.
add(GlobalLabel::construct<VXDAlignment>(
getSensorID(), 32), std::vector<double> {L1(u)*L1(v)*du_dw, L1(u)*L1(v)*dv_dw});
73 globals.
add(GlobalLabel::construct<VXDAlignment>(
getSensorID(), 33), std::vector<double> {L2(v)*du_dw, L2(v)*dv_dw});
75 globals.
add(GlobalLabel::construct<VXDAlignment>(
getSensorID(), 41), std::vector<double> {L3(u)*du_dw, L3(u)*dv_dw});
76 globals.
add(GlobalLabel::construct<VXDAlignment>(
getSensorID(), 42), std::vector<double> {L2(u)*L1(v)*du_dw, L2(u)*L1(v)*dv_dw});
77 globals.
add(GlobalLabel::construct<VXDAlignment>(
getSensorID(), 43), std::vector<double> {L1(u)*L2(v)*du_dw, L1(u)*L2(v)*dv_dw});
78 globals.
add(GlobalLabel::construct<VXDAlignment>(
getSensorID(), 44), std::vector<double> {L3(v)*du_dw, L3(v)*dv_dw});
80 globals.
add(GlobalLabel::construct<VXDAlignment>(
getSensorID(), 51), std::vector<double> {L4(u)*du_dw, L4(u)*dv_dw});
81 globals.
add(GlobalLabel::construct<VXDAlignment>(
getSensorID(), 52), std::vector<double> {L3(u)*L1(v)*du_dw, L3(u)*L1(v)*dv_dw});
82 globals.
add(GlobalLabel::construct<VXDAlignment>(
getSensorID(), 53), std::vector<double> {L2(u)*L2(v)*du_dw, L2(u)*L2(v)*dv_dw});
83 globals.
add(GlobalLabel::construct<VXDAlignment>(
getSensorID(), 54), std::vector<double> {L1(u)*L3(v)*du_dw, L1(u)*L3(v)*dv_dw});
84 globals.
add(GlobalLabel::construct<VXDAlignment>(
getSensorID(), 55), std::vector<double> {L4(v)*du_dw, L4(v)*dv_dw});
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...
bool isU() const
Is the coordinate u or v?
float getPosition() const
Get coordinate.
VxdID getSensorID() const
Get the compact ID.
Specific implementation of SensorInfo for SVD Sensors which provides additional sensor specific infor...
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.