////////////////////////////////////////////////////////////////////////// // USER Class for PID in the ITS // //The PID is based on the likelihood of all the four ITS' layers, // //without using the truncated mean for the dE/dx. The response // //functions for each layer are convoluted Landau-Gaussian functions. // // Origin: Elena Bruna bruna@to.infn.it,, Massimo Masera masera@to.infn.it// ////////////////////////////////////////////////////////////////////////// #include "AliITSPident.h" ClassImp(AliITSPident) //_______________________________________________________________________ AliITSPident::AliITSPident(){ // default constructor fMom=0; fdEdx=0; fInvPt=0; fPBayesp=0; fPBayesk=0; fPBayespi=0; fPPriorip=0; fPPriorik=0; fPPrioripi=0; fPPriorie=0; for (Int_t i=0;i<4;i++){ fCondFunProLay[i]=0; fCondFunKLay[i]=0; fCondFunPiLay[i]=0; } } //_______________________________________________________________________ AliITSPident::~AliITSPident(){ // destructor } //______________________________________________________________________ AliITSPident::AliITSPident(const AliITSPident &ob) :TObject(ob) { // Copy constructor // Copies are not allowed. The method is protected to avoid misuse. Error("AliITSPident","Copy constructor not allowed\n"); } //______________________________________________________________________ AliITSPident& AliITSPident::operator=(const AliITSPident& /* ob */){ // Assignment operator // Assignment is not allowed. The method is protected to avoid misuse. Error("= operator","Assignment operator not allowed\n"); return *this; } //_______________________________________________________________________ AliITSPident::AliITSPident(Double_t mom,Double_t invPt,Double_t dEdx,AliITSSteerPid *sp,Float_t *Qlay,Float_t priorip,Float_t priorik,Float_t prioripi,Float_t priorie){ //test fMom=mom; fInvPt=invPt; for(Int_t la=0;la<4;la++){//loop on layers Double_t parp[3];Double_t park[3];Double_t parpi[3]; sp->GetParFitLayer(la,fMom,parp,park,parpi); Double_t range[6]; range[0]=0.3*parp[1]; range[1]=2.*parp[1]; range[2]=0.3*park[1]; range[3]=2.*park[1]; range[4]=0.3*parpi[1]; range[5]=2.*parpi[1]; CookFunItsLay(la,0,parp,Qlay[la],fMom,range[0],range[1],"fPro"); CookFunItsLay(la,1,park,Qlay[la],fMom,range[2],range[3],"fKao"); CookFunItsLay(la,2,parpi,Qlay[la],fMom,range[4],range[5],"fPi"); } fPPriorip=priorip; fPPriorik=priorik; fPPrioripi=prioripi; fPPriorie=priorie; Float_t prior[4];Double_t condFun[4][3]; prior[0]=fPPriorip; prior[1]=fPPriorik; prior[2]=fPPrioripi; prior[3]=fPPriorie; for(Int_t la=0;la<4;la++){ condFun[la][0]= fCondFunProLay[la]; condFun[la][1]= fCondFunKLay[la]; condFun[la][2]= fCondFunPiLay[la]; } fPBayesp=CookCombinedBayes(condFun,prior,0); fPBayesk=CookCombinedBayes(condFun,prior,1); fPBayespi=CookCombinedBayes(condFun,prior,2); fdEdx=dEdx; } //_______________________________________________________________________ AliITSPident::AliITSPident(AliITStrackV2 *trackITS,AliITSSteerPid *sp,Float_t *Qlay,Float_t priorip,Float_t priorik,Float_t prioripi,Float_t priorie){ // Double_t xr; Double_t par[5]; trackITS->GetExternalParameters(xr,par); if (par[4]!=0) { Float_t lamb=TMath::ATan(par[3]); fMom=1/(TMath::Abs(par[4])*TMath::Cos(lamb)); } fInvPt=par[4]; for(Int_t la=0;la<4;la++){//loop on layers Double_t parp[3];Double_t park[3];Double_t parpi[3]; sp->GetParFitLayer(la,fMom,parp,park,parpi); Double_t range[8]; range[0]=0.3*parp[1]; range[1]=2.*parp[1]; range[2]=0.3*park[1]; range[3]=2.*park[1]; range[4]=0.3*parpi[1]; range[5]=2.*parpi[1]; CookFunItsLay(la,0,parp,Qlay[la],fMom,range[0],range[1],"fPro"); CookFunItsLay(la,1,park,Qlay[la],fMom,range[2],range[3],"fKao"); CookFunItsLay(la,2,parpi,Qlay[la],fMom,range[4],range[5],"fPi"); } fPPriorip=priorip; fPPriorik=priorik; fPPrioripi=prioripi; fPPriorie=priorie; Float_t prior[4];Double_t condFun[4][3]; prior[0]=fPPriorip; prior[1]=fPPriorik; prior[2]=fPPrioripi; prior[3]=fPPriorie; for(Int_t la=0;la<4;la++){ condFun[la][0]= fCondFunProLay[la]; condFun[la][1]= fCondFunKLay[la]; condFun[la][2]= fCondFunPiLay[la]; } fPBayesp=CookCombinedBayes(condFun,prior,0); fPBayesk=CookCombinedBayes(condFun,prior,1); fPBayespi=CookCombinedBayes(condFun,prior,2); fdEdx=trackITS->GetdEdx(); } //_______________________________________________________________________ void AliITSPident::PrintParameters() const{ //print parameters cout<<"___________________________\n"; cout<<"Track Local Momentum = "<<" "<