SpaceChargeStandard.h
Go to the documentation of this file.
1 ////////////////////////////////////////////////////////////////////////
2 // \file SpaceChargeStandard.h
3 //
4 // \brief header of class for storing/accessing space charge distortions
5 //
6 // \author mrmooney@bnl.gov
7 //
8 ////////////////////////////////////////////////////////////////////////
9 #ifndef SPACECHARGE_SPACECHARGESTANDARD_H
10 #define SPACECHARGE_SPACECHARGESTANDARD_H
11 
12 // LArSoft libraries
15 
16 // FHiCL libraries
17 namespace fhicl { class ParameterSet; }
18 
19 // ROOT includes
20 #include "TF1.h"
21 class TGraph;
22 
23 // C/C++ standard libraries
24 #include <stdint.h>
25 #include <string>
26 #include <vector>
27 
28 namespace spacecharge {
29 
31 
32  public:
33 
34  explicit SpaceChargeStandard(fhicl::ParameterSet const& pset);
36  virtual ~SpaceChargeStandard() = default;
37 
38  bool Configure(fhicl::ParameterSet const& pset);
39  bool Update(uint64_t ts=0);
40 
41  bool EnableSimSpatialSCE() const override;
42  bool EnableSimEfieldSCE() const override;
43  bool EnableCorrSCE() const override;
44  bool EnableCalSpatialSCE() const override;
45  bool EnableCalEfieldSCE() const override;
46 
47  geo::Vector_t GetPosOffsets(geo::Point_t const& point) const override;
48  geo::Vector_t GetEfieldOffsets(geo::Point_t const& point) const override;
49  geo::Vector_t GetCalPosOffsets(geo::Point_t const& point, int const& TPCid) const override;
50  geo::Vector_t GetCalEfieldOffsets(geo::Point_t const& point, int const& TPCid) const override;
51 
52  private:
53  protected:
54 
55  std::vector<double> GetPosOffsetsParametric(double xVal, double yVal, double zVal) const;
56  double GetOnePosOffsetParametric(double xVal, double yVal, double zVal, std::string axis) const;
57  std::vector<double> GetEfieldOffsetsParametric(double xVal, double yVal, double zVal) const;
58  double GetOneEfieldOffsetParametric(double xVal, double yVal, double zVal, std::string axis) const;
59  double TransformX(double xVal) const;
60  double TransformY(double yVal) const;
61  double TransformZ(double zVal) const;
62  bool IsInsideBoundaries(double xVal, double yVal, double zVal) const;
63 
69 
72 
73  TGraph **g1_x = new TGraph*[7];
74  TGraph **g2_x = new TGraph*[7];
75  TGraph **g3_x = new TGraph*[7];
76  TGraph **g4_x = new TGraph*[7];
77  TGraph **g5_x = new TGraph*[7];
78 
79  TGraph **g1_y = new TGraph*[7];
80  TGraph **g2_y = new TGraph*[7];
81  TGraph **g3_y = new TGraph*[7];
82  TGraph **g4_y = new TGraph*[7];
83  TGraph **g5_y = new TGraph*[7];
84  TGraph **g6_y = new TGraph*[7];
85 
86  TGraph **g1_z = new TGraph*[7];
87  TGraph **g2_z = new TGraph*[7];
88  TGraph **g3_z = new TGraph*[7];
89  TGraph **g4_z = new TGraph*[7];
90 
91  TF1 *f1_x = new TF1("f1_x","pol6");
92  TF1 *f2_x = new TF1("f2_x","pol6");
93  TF1 *f3_x = new TF1("f3_x","pol6");
94  TF1 *f4_x = new TF1("f4_x","pol6");
95  TF1 *f5_x = new TF1("f5_x","pol6");
96  TF1 *fFinal_x = new TF1("fFinal_x","pol4");
97 
98  TF1 *f1_y = new TF1("f1_y","pol5");
99  TF1 *f2_y = new TF1("f2_y","pol5");
100  TF1 *f3_y = new TF1("f3_y","pol5");
101  TF1 *f4_y = new TF1("f4_y","pol5");
102  TF1 *f5_y = new TF1("f5_y","pol5");
103  TF1 *f6_y = new TF1("f6_y","pol5");
104  TF1 *fFinal_y = new TF1("fFinal_y","pol5");
105 
106  TF1 *f1_z = new TF1("f1_z","pol4");
107  TF1 *f2_z = new TF1("f2_z","pol4");
108  TF1 *f3_z = new TF1("f3_z","pol4");
109  TF1 *f4_z = new TF1("f4_z","pol4");
110  TF1 *fFinal_z = new TF1("fFinal_z","pol3");
111 
112  TGraph **g1_Ex = new TGraph*[7];
113  TGraph **g2_Ex = new TGraph*[7];
114  TGraph **g3_Ex = new TGraph*[7];
115  TGraph **g4_Ex = new TGraph*[7];
116  TGraph **g5_Ex = new TGraph*[7];
117 
118  TGraph **g1_Ey = new TGraph*[7];
119  TGraph **g2_Ey = new TGraph*[7];
120  TGraph **g3_Ey = new TGraph*[7];
121  TGraph **g4_Ey = new TGraph*[7];
122  TGraph **g5_Ey = new TGraph*[7];
123  TGraph **g6_Ey = new TGraph*[7];
124 
125  TGraph **g1_Ez = new TGraph*[7];
126  TGraph **g2_Ez = new TGraph*[7];
127  TGraph **g3_Ez = new TGraph*[7];
128  TGraph **g4_Ez = new TGraph*[7];
129 
130  TF1 *f1_Ex = new TF1("f1_Ex","pol6");
131  TF1 *f2_Ex = new TF1("f2_Ex","pol6");
132  TF1 *f3_Ex = new TF1("f3_Ex","pol6");
133  TF1 *f4_Ex = new TF1("f4_Ex","pol6");
134  TF1 *f5_Ex = new TF1("f5_Ex","pol6");
135  TF1 *fFinal_Ex = new TF1("fFinal_Ex","pol4");
136 
137  TF1 *f1_Ey = new TF1("f1_Ey","pol5");
138  TF1 *f2_Ey = new TF1("f2_Ey","pol5");
139  TF1 *f3_Ey = new TF1("f3_Ey","pol5");
140  TF1 *f4_Ey = new TF1("f4_Ey","pol5");
141  TF1 *f5_Ey = new TF1("f5_Ey","pol5");
142  TF1 *f6_Ey = new TF1("f6_Ey","pol5");
143  TF1 *fFinal_Ey = new TF1("fFinal_Ey","pol5");
144 
145  TF1 *f1_Ez = new TF1("f1_Ez","pol4");
146  TF1 *f2_Ez = new TF1("f2_Ez","pol4");
147  TF1 *f3_Ez = new TF1("f3_Ez","pol4");
148  TF1 *f4_Ez = new TF1("f4_Ez","pol4");
149  TF1 *fFinal_Ez = new TF1("fFinal_Ez","pol3");
150 
151  }; // class SpaceChargeStandard
152 } //namespace spacecharge
153 #endif // SPACECHARGE_SPACECHARGESTANDARD_H
std::string string
Definition: nybbler.cc:12
ROOT::Math::DisplacementVector3D< ROOT::Math::Cartesian3D< double >, ROOT::Math::GlobalCoordinateSystemTag > Vector_t
Type for representation of momenta in 3D space.
Definition: geo_vectors.h:164
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:184
void Configure(string mesg)
Definition: gEvServ.cxx:196
Definitions of geometry vector data types.
bool Update(detinfo::DetectorClocksData const &clockData, detinfo::DetectorPropertiesData const &detProp, const TCSlice &slc, PFPStruct &pfp, bool prt)
Definition: PFPUtils.cxx:1056