KaliVeda
Toolkit for HIC analysis
KVMaterialStack.h
1 #ifndef __KVMATERIALSTACK_H
2 #define __KVMATERIALSTACK_H
3 
4 #include "KVBase.h"
5 #include "KVDetector.h"
6 
17 class KVMaterialStack : public KVBase {
18 private:
22  const KVDetector* fDetector = nullptr;
23  std::vector<KVMaterial> fAbsorbers;
24  std::vector<double> fLayThick;
28 
32 
33 public:
34  KVMaterialStack() = default;
35  KVMaterialStack(const KVDetector*, double = 0.0);
36 
37  void SetIncidenceAngle(double psi)
38  {
39  fIncAngle = psi;
41  }
42 
46 
48  {
49  return GetELossFunction(Z, A).GetMaximum();
50  }
52  {
55 
56  return GetELossFunction(Z, A).GetMaximumX();
57  }
58 
60  {
61  return 1.01 * GetMaxELossFunction(Z, A).GetX(Emax); // increase returned angle by 1% just to be sure
62  }
64  Double_t GetIncidentEnergy(Int_t Z, Int_t A, Double_t delta_e, enum KVMaterial::SolType type = KVMaterial::SolType::kEmax);
65  Double_t GetERes(Int_t Z, Int_t A, Double_t Einc);
66 
67  ClassDef(KVMaterialStack, 1) //A stack of materials in which successive energy losses of charged particles can be calculated
68 };
69 
70 #endif
int Int_t
double Double_t
#define ClassDef(name, id)
Base class for KaliVeda framework.
Definition: KVBase.h:139
A stack of materials in which successive energy losses of charged particles can be calculated ,...
Double_t GetIncidentEnergyFromERes(Int_t Z, Int_t A, Double_t Eres)
std::vector< KVMaterial > fAbsorbers
TF1 & GetEResFunction(Int_t Z, Int_t A)
Double_t GetEIncOfMaxDeltaE(Int_t Z, Int_t A)
Double_t GetERes(Int_t Z, Int_t A, Double_t Einc)
Double_t EResDet(Double_t *x, Double_t *par)
Double_t fIncAngleCosine
TF1 & GetELossFunction(Int_t Z, Int_t A)
TF1 & GetMaxELossFunction(Int_t Z, Int_t A)
Double_t GetMinimumIncidentAngleForDEMax(Int_t Z, Int_t A, Double_t Emax)
Double_t ELossActive(Double_t *x, Double_t *par)
Double_t GetIncidentEnergy(Int_t Z, Int_t A, Double_t delta_e, enum KVMaterial::SolType type=KVMaterial::SolType::kEmax)
std::vector< double > fLayThick
KVMaterialStack()=default
Double_t MaxELossActive(Double_t *x, Double_t *par)
void SetIncidenceAngle(double psi)
const KVDetector * fDetector
Double_t GetMaxDeltaE(Int_t Z, Int_t A)
Int_t fActiveLayer
layer thicknesses in cm
virtual Double_t GetX(Double_t y, Double_t xmin=0, Double_t xmax=0, Double_t epsilon=1.E-10, Int_t maxiter=100, Bool_t logx=false) const
virtual Double_t GetMaximum(Double_t xmin=0, Double_t xmax=0, Double_t epsilon=1.E-10, Int_t maxiter=100, Bool_t logx=false) const
virtual Double_t GetMaximumX(Double_t xmin=0, Double_t xmax=0, Double_t epsilon=1.E-10, Int_t maxiter=100, Bool_t logx=false) const
constexpr Double_t DegToRad()
Double_t Cos(Double_t)