#include "AliITSUMatLUT.h" #include "AliLog.h" #include "AliTrackerBase.h" #include #include #include #include //___________________________________________________________ AliITSUMatLUT::AliITSUMatLUT() :fRMin(0) ,fRMax(0) ,fDRInv(-1) ,fDR(0) ,fNBins(0) { // def c-tor for (int i=kNParTypes;i--;) fData[i]=0; } //___________________________________________________________ AliITSUMatLUT::~AliITSUMatLUT() { // d-tor for (int i=kNParTypes;i--;) delete fData[i]; } //___________________________________________________________ AliITSUMatLUT::AliITSUMatLUT(Double_t rmin,Double_t rmax,Int_t nbin) :fRMin(rmin) ,fRMax(rmax) ,fDRInv(0) ,fDR(0) ,fNBins(nbin) { // if (rmin<0 || rmax-rmin<1e-4 || nbin<1) AliFatal(Form("Illegal parameters Rmin:%f Rmax:%f Nbins:%d",rmin,rmax,nbin)); fDRInv = fNBins/(fRMax-fRMin); fDR = (fRMax-fRMin)/fNBins; for (int i=kNParTypes;i--;) { fData[i] = new Double_t[fNBins]; memset(fData[i],0,fNBins*sizeof(Double_t)); } // } //___________________________________________________________ AliITSUMatLUT::AliITSUMatLUT(const AliITSUMatLUT& src) :TObject(src) ,fRMin(src.fRMin) ,fRMax(src.fRMax) ,fDRInv(src.fDRInv) ,fDR(src.fDR) ,fNBins(src.fNBins) { // for (int i=kNParTypes;i--;) { if (src.fData[i]) { fData[i] = new Double_t[fNBins]; memcpy(fData[i],src.fData[i],fNBins*sizeof(Double_t)); } } // } //___________________________________________________________ AliITSUMatLUT & AliITSUMatLUT::operator=(const AliITSUMatLUT& src) { // copy if (this == &src) return *this; this->~AliITSUMatLUT(); new(this) AliITSUMatLUT(src); return *this; // } //___________________________________________________________ void AliITSUMatLUT::FillData(Int_t ntest, Double_t zmin,Double_t zmax) { // filla material data double start[3],stop[3],parStep[7]; if (fNBins<1) AliFatal("Limits are not set"); if (ntest<1 || zmin>zmax) AliFatal(Form("Wrong parameters Ntest:%d Zmin:%f Zmax:%f",ntest,zmin,zmax)); double dr = (fRMax-fRMin)/fNBins; AliInfo(Form("Building material table for %.3fRndm()*TMath::Pi()*2; double cs = TMath::Cos(phi); double sn = TMath::Sin(phi); double angz = 2*(gRandom->Rndm()-0.5)*kAngEps; stop[0] = r*cs; stop[1] = r*sn; stop[2] = zmin + gRandom->Rndm()*(zmax-zmin); Bool_t fail = kFALSE; for (int ir=0;ir999) {fail = kTRUE; printf("fail\n"); break;} // parInt[kParX2X0] += parStep[1]; parInt[kParRhoL] += parStep[0]*parStep[4]; // for (int ip=kNParTypes;ip--;) tmpAcc[ir*kNParTypes+ip] = parInt[ip]; } if (fail) {itst++; continue;} // propagation failed for (int ir=0;irSetBinContent(i+1, val); } return h; } //___________________________________________________________ Double_t AliITSUMatLUT::GetMatBudget(const Double_t *pnt0, const Double_t *pnt1, Double_t *ret) const { // query the mat.budget between 2 points double r0 = TMath::Sqrt(pnt0[0]*pnt0[0] + pnt0[1]*pnt0[1]); double r1 = TMath::Sqrt(pnt1[0]*pnt1[0] + pnt1[1]*pnt1[1]); if (r1=fNBins) binF = fNBins-1; int bin = int(binF); double frac = 1.-(binF-bin); for (int i=kNParTypes;i--;) { double prev = bin ? fData[i][bin-1] : 0; params[i] = fData[i][bin] - frac*(fData[i][bin]-prev); } // }