Heavy ion Analysis Libriares
Loading...
Searching...
No Matches
FemtoYlmSolver.h
1/*
2 * FemtoYlmSolver.h
3 *
4 * Created on: 24 sie 2022
5 * Author: Daniel Wielanek
6 * E-mail: daniel.wielanek@gmail.com
7 * Warsaw University of Technology, Faculty of Physics
8 */
9#ifndef HAL_ANALYSIS_FEMTO_BASE_SHMATH_FEMTOYLMSOLVER_H_
10#define HAL_ANALYSIS_FEMTO_BASE_SHMATH_FEMTOYLMSOLVER_H_
11
12#include <TObject.h>
13
14#include <complex>
15
16#include "FemtoSHSlice.h"
17#include "FemtoYlmIndexes.h"
18#include "FemtoYlmMath.h"
19
20class TH1;
21namespace Hal {
22 class FemtoSHCF;
23 class FemtoYlmSolver : public TObject {
24 Int_t fMaxJM = {0};
25 Int_t fMaxJM2_4 = {0};
26 Int_t fFactorialsSize = {0};
27 Int_t fMaxL = {0};
28 Bool_t fDebug = {kFALSE};
29 Bool_t fSumw = {kFALSE};
30 Int_t fDebugBin = {-1};
31 Double_t fNumEnt = {0};
32 Double_t fDenEnt = {0};
33 Double_t fNormFactor = {0};
34 Double_t fNormPurity = {0};
35 Double_t fNormRadius = {0};
36 Double_t fNormBohr = {0};
37 FemtoSHSlice fSlice;
38 FemtoSHCF* fCF = {nullptr};
39
40 std::vector<Double_t> fFactorials;
41 FemtoYlmIndexes fLmVals;
42 FemtoYlmMath fLmMath;
43 void GetMtilde(std::complex<double>* aMat, double* aMTilde);
44 void InvertYlmIndependentMatrix(double* inmat, double* outmat) const;
45 void UnPackYlmMatrixIndependentOnly(double* inmat, double* outmat, int insize) const;
46 void GetIndependentLM(int ibin, int& el, int& em, int& im) const;
47 void DoMath(Bool_t recalc);
48 void MakeFakeCovMatrix();
52 void FixCF();
53 void UpdateCF(Int_t bin);
54 int PackYlmMatrixIndependentOnly(double* inmat, double* outmat) const;
55 int PackYlmVectorIndependentOnly(double* invec, double* outvec) const;
56 inline void GetElEmForIndex(int aIndex, double& aEl, double& aEm) const {
57 aEl = fLmVals.GetEls(aIndex);
58 aEm = fLmVals.GetEms(aIndex);
59 }
60 inline void GetElEmForIndex(int aIndex, int& aEl, int& aEm) const {
61 aEl = fLmVals.GetElsi(aIndex);
62 aEm = fLmVals.GetEmsi(aIndex);
63 }
64 inline Int_t GetMaxJM() const { return fMaxJM; }
65
66
67 public:
69 FemtoYlmSolver(Int_t maxL, FemtoSHCF* cf, Bool_t sumw = kFALSE);
70 void SetNormalizationArea(Double_t min, Double_t max);
71 void Solve(Bool_t recalc);
72 void SetDebugBin(Int_t dbg) { fDebugBin = dbg; }
73 virtual ~FemtoYlmSolver();
74 FemtoYlmSolver(const FemtoYlmSolver& other) = default;
75 FemtoYlmSolver& operator=(const FemtoYlmSolver& other) = delete;
76 ClassDef(FemtoYlmSolver, 1)
77 }; // namespace Hal
78
79} /* namespace Hal */
80
81#endif /* HAL_ANALYSIS_FEMTO_BASE_SHMATH_FEMTOYLMSOLVER_H_ */
Int_t GetEmsi(Int_t i) const
Double_t GetEms(Int_t i) const
Double_t GetEls(Int_t i) const
Int_t GetElsi(Int_t i) const