PandaRoot
BSEmcCrystalPositionPar.h
Go to the documentation of this file.
1 #ifndef BSEMCCRYSTALPOSITIONPAR_HH
2 #define BSEMCCRYSTALPOSITIONPAR_HH
3 #include <functional>
4 #include <map>
5 #include <memory>
6 #include <string>
7 #include <vector>
8 
9 #include "Rtypes.h"
10 #include "RtypesCore.h"
11 #include "TObjArray.h"
12 #include "TString.h"
13 #include "TVector3.h"
14 
15 #include "FairParGenericSet.h"
16 #include "FairParamList.h"
17 #include "FairRun.h"
18 
19 class FairParamList;
20 class TBuffer;
21 class TClass;
22 class TMemberInspector;
23 
33  TVector3 Center{0, 0, 0};
34  TVector3 FrontCenter{0, 0, 0};
35  TVector3 FrontFaceNormal{0, 0, 0};
36  TVector3 Axis{0, 0, 0};
37  BSEmcCrystalPositionData() = default;
38  BSEmcCrystalPositionData(const TVector3 &center, const TVector3 &fcenter, const TVector3 &frontfacenormal, const TVector3 &axis)
39  : Center(center), FrontCenter(fcenter), FrontFaceNormal(frontfacenormal), Axis(axis)
40  {
41  }
42  const TVector3 &GetCentre() const { return Center; }
43  const TVector3 &GetFrontCentre() const { return FrontCenter; }
44  const TVector3 &GetNormalToFrontFace() const { return FrontFaceNormal; }
45  const TVector3 &GetAxisVector() const { return Axis; }
46 };
47 
56 class BSEmcCrystalPositionPar : public FairParGenericSet {
57  public:
58  static std::string fgParameterName;
59  BSEmcCrystalPositionPar(const char *t_name = "BSEmcCrystalPositionPar", const char *t_title = "Center front face position of BSEmc crystals",
60  const char *t_context = "TestDefaultContext");
62 
63  void clear(void) /*override*/ {}
64  void putParams(FairParamList * /*unused*/) /*override*/;
65  Bool_t getParams(FairParamList * /*unused*/) /*override*/;
66 
67  void SetPositionDataForCrystal(Int_t t_id, const BSEmcCrystalPositionData &t_position);
68  const BSEmcCrystalPositionData &GetPositionData(Int_t t_detectorid) const;
69  TObjArray *GetPositions() const { return fPositions.get(); }
70 
71  void SetPositionMethod(const TString &t_positionMethod);
72  void SetPositionDepth(Double_t t_depth) { fCrystalPositionDepth = t_depth; }
73  void SetRescaleFactor(Double_t t_factor) { fRescaleFactor = t_factor; }
74  Double_t GetRescaleFactor() const { return fRescaleFactor; }
75  TVector3 GetPosition(Int_t t_detectorId) const;
76 
78  BSEmcCrystalPositionPar &operator=(const BSEmcCrystalPositionPar &t_posPar);
79 
80  void InitFromTextFile(const TString &t_filename);
81  void WriteToTextFile(const TString &t_filename) const;
82  void FillMap();
83  void UpdatePositionArray();
84 
85  Bool_t IsSet() { return fPositions->GetEntriesFast() != 0; }
86 
87  private:
88  std::unique_ptr<TObjArray> fPositions{nullptr};
89  std::map<Int_t, BSEmcCrystalPositionData> fPositionMap{};
90  Double_t fRescaleFactor{-1};
91  Double_t fCrystalPositionDepth{-1};
92  std::function<TVector3(const BSEmcCrystalPositionData &, Double_t)> fDigiPosMethod{};
93  Bool_t fDigiPosMethodIsSet{kFALSE};
94 
95  ClassDef(BSEmcCrystalPositionPar, 2)
96 };
97 
98 #endif /*BSEMCCRYSTALPOSITIONPAR_HH*/
TObjArray * GetPositions() const
const TVector3 & GetAxisVector() const
void SetPositionDepth(Double_t t_depth)
const TVector3 & GetFrontCentre() const
void SetRescaleFactor(Double_t t_factor)
static std::string fgParameterName
Struct containing crystal position data.
const TVector3 & GetNormalToFrontFace() const
Parameter for crystal positions.
axis
Definition: PndRadMapPlane.h:9
BSEmcCrystalPositionData(const TVector3 &center, const TVector3 &fcenter, const TVector3 &frontfacenormal, const TVector3 &axis)
const TVector3 & GetCentre() const
BSEmcCrystalPositionData()=default