#ifndef ALITRDSIMTR_H
#define ALITRDSIMTR_H
#include <TObject.h>
#include <TMath.h>
class TH1D;
class AliModule;
class AliTRDsimTR : public TObject {
public:
AliTRDsimTR();
AliTRDsimTR(const AliTRDsimTR &s);
AliTRDsimTR(AliModule *mod, Int_t foil, Int_t gap);
virtual ~AliTRDsimTR();
AliTRDsimTR &operator=(const AliTRDsimTR &s);
virtual void Copy(TObject &s) const;
virtual void Init();
virtual Int_t CreatePhotons(Int_t pdg, Float_t p
, Int_t &nPhoton, Float_t *ePhoton);
virtual Int_t TrPhotons(Float_t p, Float_t mass
, Int_t &nPhoton, Float_t *ePhoton);
virtual Double_t Sigma(Double_t energykeV);
virtual Double_t Interpolate(Double_t energyMeV
, Double_t *en, const Double_t * const mu, Int_t n);
virtual Int_t Locate(Double_t *xv, Int_t n, Double_t xval
, Int_t &kl, Double_t &dx);
virtual Double_t Omega(Float_t rho, Float_t z, Float_t a) { return (28.8 * TMath::Sqrt(rho * z / a)); };
virtual Int_t SelectNFoils(Float_t p) const;
void SetFoilThick(Float_t t) { fFoilThick = t;
SetSigma(); };
void SetGapThick(Float_t t) { fGapThick = t;
SetSigma(); };
void SetFoilDens(Float_t d) { fFoilDens = d;
fFoilOmega = Omega(fFoilDens,fFoilZ,fFoilA);
SetSigma(); };
void SetFoilZ(Float_t z) { fFoilZ = z;
fFoilOmega = Omega(fFoilDens,fFoilZ,fFoilA); };
void SetFoilA(Float_t a) { fFoilA = a;
fFoilOmega = Omega(fFoilDens,fFoilZ,fFoilA); };
void SetGapDens(Float_t d) { fGapDens = d;
fGapOmega = Omega(fGapDens ,fGapZ ,fGapA );
SetSigma(); };
void SetGapZ(Float_t z) { fGapZ = z;
fGapOmega = Omega(fGapDens ,fGapZ ,fGapA ); };
void SetGapA(Float_t a) { fGapA = a;
fGapOmega = Omega(fGapDens ,fGapZ ,fGapA ); };
void SetTemp(Float_t t) { fTemp = t;
SetSigma(); };
void SetSigma();
virtual Double_t GetMuPo(Double_t energyMeV);
virtual Double_t GetMuCO(Double_t energyMeV);
virtual Double_t GetMuXe(Double_t energyMeV);
virtual Double_t GetMuAr(Double_t energyMeV);
virtual Double_t GetMuMy(Double_t energyMeV);
virtual Double_t GetMuN2(Double_t energyMeV);
virtual Double_t GetMuO2(Double_t energyMeV);
virtual Double_t GetMuHe(Double_t energyMeV);
virtual Double_t GetMuAi(Double_t energyMeV);
Float_t GetFoilThick() const { return fFoilThick; };
Float_t GetGapThick() const { return fGapThick; };
Float_t GetFoilDens() const { return fFoilDens; };
Float_t GetGapDens() const { return fGapDens; };
Double_t GetFoilOmega() const { return fFoilOmega; };
Double_t GetGapOmega() const { return fGapOmega; };
Float_t GetTemp() const { return fTemp / 273.16; };
TH1D *GetSpectrum() const { return fSpectrum; };
protected:
Int_t fNFoilsDim;
Int_t *fNFoils;
Double_t *fNFoilsUp;
Float_t fFoilThick;
Float_t fGapThick;
Float_t fFoilDens;
Float_t fGapDens;
Double_t fFoilOmega;
Double_t fGapOmega;
Float_t fFoilZ;
Float_t fGapZ;
Float_t fFoilA;
Float_t fGapA;
Float_t fTemp;
Int_t fSpNBins;
Float_t fSpRange;
Float_t fSpBinWidth;
Float_t fSpLower;
Float_t fSpUpper;
Double_t *fSigma;
TH1D *fSpectrum;
ClassDef(AliTRDsimTR,1)
};
#endif