File indexing completed on 2024-04-06 12:22:31
0001 #ifndef MFGrid_h
0002 #define MFGrid_h
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012 #include "DataFormats/GeometrySurface/interface/GloballyPositioned.h"
0013 #include "MagneticField/Interpolation/interface/MagProviderInterpol.h"
0014
0015 struct Dimensions {
0016 int w;
0017 int h;
0018 int d;
0019 };
0020
0021 struct Indexes {
0022 int i;
0023 int j;
0024 int k;
0025 };
0026
0027 class MFGrid : public MagProviderInterpol {
0028 public:
0029 typedef GloballyPositioned<float>::GlobalPoint GlobalPoint;
0030 typedef GloballyPositioned<float>::GlobalVector GlobalVector;
0031 typedef GloballyPositioned<float>::LocalPoint LocalPoint;
0032 typedef GloballyPositioned<float>::LocalVector LocalVector;
0033
0034 explicit MFGrid(const GloballyPositioned<float>& vol) : frame_(vol) {}
0035
0036 ~MFGrid() override {}
0037
0038
0039 LocalVector valueInTesla(const LocalPoint& p) const override = 0;
0040
0041 virtual void dump() const {}
0042
0043
0044 virtual void toGridFrame(const LocalPoint& p, double& a, double& b, double& c) const = 0;
0045
0046
0047 virtual LocalPoint fromGridFrame(double a, double b, double c) const = 0;
0048
0049 virtual Dimensions dimensions() const = 0;
0050
0051
0052 virtual LocalPoint nodePosition(int i, int j, int k) const = 0;
0053
0054
0055 virtual LocalVector nodeValue(int i, int j, int k) const = 0;
0056
0057 virtual Indexes index(const LocalPoint& p) const { return Indexes(); }
0058
0059
0060 const GloballyPositioned<float>& frame() const { return frame_; }
0061
0062 private:
0063 GloballyPositioned<float> frame_;
0064 };
0065
0066 #endif