LArSoft  v06_85_00
Liquid Argon Software toolkit - http://larsoft.org/
SpaceChargeStandard.h
Go to the documentation of this file.
1 // \file SpaceChargeStandard.h
3 //
4 // \brief header of class for storing/accessing space charge distortions
5 //
6 // \author mrmooney@bnl.gov
7 //
9 #ifndef SPACECHARGE_SPACECHARGESTANDARD_H
10 #define SPACECHARGE_SPACECHARGESTANDARD_H
11 
12 // LArSoft libraries
15 
16 // FHiCL libraries
17 #include "fhiclcpp/ParameterSet.h"
18 
19 // ROOT includes
20 #include "TGraph.h"
21 #include "TF1.h"
22 #include "TFile.h"
23 
24 // C/C++ standard libraries
25 #include <string>
26 #include <vector>
27 
28 
29 namespace spacecharge {
30 
32 
33  public:
34 
35  explicit SpaceChargeStandard(fhicl::ParameterSet const& pset);
37  virtual ~SpaceChargeStandard() = default;
38 
39  bool Configure(fhicl::ParameterSet const& pset);
40  bool Update(uint64_t ts=0);
41 
42  bool EnableSimSpatialSCE() const override;
43  bool EnableSimEfieldSCE() const override;
44  bool EnableCorrSCE() const override;
45  geo::Vector_t GetPosOffsets(geo::Point_t const& point) const override;
46  geo::Vector_t GetEfieldOffsets(geo::Point_t const& point) const override;
47 
48  private:
49  protected:
50 
51  std::vector<double> GetPosOffsetsParametric(double xVal, double yVal, double zVal) const;
52  double GetOnePosOffsetParametric(double xVal, double yVal, double zVal, std::string axis) const;
53  std::vector<double> GetEfieldOffsetsParametric(double xVal, double yVal, double zVal) const;
54  double GetOneEfieldOffsetParametric(double xVal, double yVal, double zVal, std::string axis) const;
55  double TransformX(double xVal) const;
56  double TransformY(double yVal) const;
57  double TransformZ(double zVal) const;
58  bool IsInsideBoundaries(double xVal, double yVal, double zVal) const;
59 
63 
64  std::string fRepresentationType;
65  std::string fInputFilename;
66 
67  TGraph **g1_x = new TGraph*[7];
68  TGraph **g2_x = new TGraph*[7];
69  TGraph **g3_x = new TGraph*[7];
70  TGraph **g4_x = new TGraph*[7];
71  TGraph **g5_x = new TGraph*[7];
72 
73  TGraph **g1_y = new TGraph*[7];
74  TGraph **g2_y = new TGraph*[7];
75  TGraph **g3_y = new TGraph*[7];
76  TGraph **g4_y = new TGraph*[7];
77  TGraph **g5_y = new TGraph*[7];
78  TGraph **g6_y = new TGraph*[7];
79 
80  TGraph **g1_z = new TGraph*[7];
81  TGraph **g2_z = new TGraph*[7];
82  TGraph **g3_z = new TGraph*[7];
83  TGraph **g4_z = new TGraph*[7];
84 
85  TF1 *f1_x = new TF1("f1_x","pol6");
86  TF1 *f2_x = new TF1("f2_x","pol6");
87  TF1 *f3_x = new TF1("f3_x","pol6");
88  TF1 *f4_x = new TF1("f4_x","pol6");
89  TF1 *f5_x = new TF1("f5_x","pol6");
90  TF1 *fFinal_x = new TF1("fFinal_x","pol4");
91 
92  TF1 *f1_y = new TF1("f1_y","pol5");
93  TF1 *f2_y = new TF1("f2_y","pol5");
94  TF1 *f3_y = new TF1("f3_y","pol5");
95  TF1 *f4_y = new TF1("f4_y","pol5");
96  TF1 *f5_y = new TF1("f5_y","pol5");
97  TF1 *f6_y = new TF1("f6_y","pol5");
98  TF1 *fFinal_y = new TF1("fFinal_y","pol5");
99 
100  TF1 *f1_z = new TF1("f1_z","pol4");
101  TF1 *f2_z = new TF1("f2_z","pol4");
102  TF1 *f3_z = new TF1("f3_z","pol4");
103  TF1 *f4_z = new TF1("f4_z","pol4");
104  TF1 *fFinal_z = new TF1("fFinal_z","pol3");
105 
106  TGraph **g1_Ex = new TGraph*[7];
107  TGraph **g2_Ex = new TGraph*[7];
108  TGraph **g3_Ex = new TGraph*[7];
109  TGraph **g4_Ex = new TGraph*[7];
110  TGraph **g5_Ex = new TGraph*[7];
111 
112  TGraph **g1_Ey = new TGraph*[7];
113  TGraph **g2_Ey = new TGraph*[7];
114  TGraph **g3_Ey = new TGraph*[7];
115  TGraph **g4_Ey = new TGraph*[7];
116  TGraph **g5_Ey = new TGraph*[7];
117  TGraph **g6_Ey = new TGraph*[7];
118 
119  TGraph **g1_Ez = new TGraph*[7];
120  TGraph **g2_Ez = new TGraph*[7];
121  TGraph **g3_Ez = new TGraph*[7];
122  TGraph **g4_Ez = new TGraph*[7];
123 
124  TF1 *f1_Ex = new TF1("f1_Ex","pol6");
125  TF1 *f2_Ex = new TF1("f2_Ex","pol6");
126  TF1 *f3_Ex = new TF1("f3_Ex","pol6");
127  TF1 *f4_Ex = new TF1("f4_Ex","pol6");
128  TF1 *f5_Ex = new TF1("f5_Ex","pol6");
129  TF1 *fFinal_Ex = new TF1("fFinal_Ex","pol4");
130 
131  TF1 *f1_Ey = new TF1("f1_Ey","pol5");
132  TF1 *f2_Ey = new TF1("f2_Ey","pol5");
133  TF1 *f3_Ey = new TF1("f3_Ey","pol5");
134  TF1 *f4_Ey = new TF1("f4_Ey","pol5");
135  TF1 *f5_Ey = new TF1("f5_Ey","pol5");
136  TF1 *f6_Ey = new TF1("f6_Ey","pol5");
137  TF1 *fFinal_Ey = new TF1("fFinal_Ey","pol5");
138 
139  TF1 *f1_Ez = new TF1("f1_Ez","pol4");
140  TF1 *f2_Ez = new TF1("f2_Ez","pol4");
141  TF1 *f3_Ez = new TF1("f3_Ez","pol4");
142  TF1 *f4_Ez = new TF1("f4_Ez","pol4");
143  TF1 *fFinal_Ez = new TF1("fFinal_Ez","pol3");
144 
145  }; // class SpaceChargeStandard
146 } //namespace spacecharge
147 #endif // SPACECHARGE_SPACECHARGESTANDARD_H
bool IsInsideBoundaries(double xVal, double yVal, double zVal) const
Check to see if point is inside boundaries of map - redefine this in experiment-specific implementati...
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double >, ROOT::Math::GlobalCoordinateSystemTag > Vector_t
Type for representation of momenta in 3D space.
Definition: geo_vectors.h:167
std::vector< double > GetEfieldOffsetsParametric(double xVal, double yVal, double zVal) const
Provides E field offsets using a parametric representation.
double GetOnePosOffsetParametric(double xVal, double yVal, double zVal, std::string axis) const
std::vector< double > GetPosOffsetsParametric(double xVal, double yVal, double zVal) const
Provides position offsets using a parametric representation.
double TransformY(double yVal) const
Transform Y to SCE Y coordinate - redefine this in experiment-specific implementation! ...
SpaceChargeStandard(fhicl::ParameterSet const &pset)
double TransformX(double xVal) const
Transform X to SCE X coordinate - redefine this in experiment-specific implementation! ...
geo::Vector_t GetEfieldOffsets(geo::Point_t const &point) const override
Definitions of geometry vector data types.
double TransformZ(double zVal) const
Transform Z to SCE Z coordinate - redefine this in experiment-specific implementation! ...
virtual ~SpaceChargeStandard()=default
geo::Vector_t GetPosOffsets(geo::Point_t const &point) const override
bool EnableCorrSCE() const override
Return boolean indicating whether or not to apply SCE corrections.
ROOT::Math::PositionVector3D< ROOT::Math::Cartesian3D< double >, ROOT::Math::GlobalCoordinateSystemTag > Point_t
Type for representation of position in physical 3D space.
Definition: geo_vectors.h:187
bool Configure(fhicl::ParameterSet const &pset)
double GetOneEfieldOffsetParametric(double xVal, double yVal, double zVal, std::string axis) const