1 /////////////////////////////////////////////////////////////////////////
2 //Steering Class for PID in the ITS //
3 //The PID is based on the likelihood of all the four ITS' layers, //
4 //without using the truncated mean for the dE/dx. The response //
5 //functions for each layer are convoluted Landau-Gaussian functions. //
6 // Origin: Elena Bruna bruna@to.infn.it, Massimo Masera masera@to.infn.it//
7 /////////////////////////////////////////////////////////////////////////
9 #include "AliITSSteerPid.h"
11 ClassImp(AliITSSteerPid)
13 //______________________________________________________________
14 AliITSSteerPid::AliITSSteerPid():
26 // default constructor
28 //______________________________________________________________
29 AliITSSteerPid::~AliITSSteerPid(){
35 //______________________________________________________________________
36 AliITSSteerPid::AliITSSteerPid(const AliITSSteerPid &ob) :TObject(ob),
37 fClonarr2(ob.fClonarr2),
39 fVect2lay1(ob.fVect2lay1),
40 fVect2lay2(ob.fVect2lay2),
41 fVect2lay3(ob.fVect2lay3),
42 fVect2lay4(ob.fVect2lay4),
43 fFitTree(ob.fFitTree),
45 fPCenter(ob.fPCenter),
50 //______________________________________________________________________
51 AliITSSteerPid& AliITSSteerPid::operator=(const AliITSSteerPid& ob){
52 // Assignment operator
53 this->~AliITSSteerPid();
54 new(this) AliITSSteerPid(ob);
58 //______________________________________________________________
59 void AliITSSteerPid::InitLayer(TString fileITS,TString fileFitPar){
60 // it opens the files useful for the PID
61 TFile *fClonarr2=new TFile (fileITS,"r");
62 fVect2=(TClonesArray*)fClonarr2->Get("vectfitits_0");//truncated mean
63 fVect2lay1=(TClonesArray*)fClonarr2->Get("vectfitits_1");//lay 1
64 fVect2lay2=(TClonesArray*)fClonarr2->Get("vectfitits_2");//lay 2
65 fVect2lay3=(TClonesArray*)fClonarr2->Get("vectfitits_3");//lay 3
66 fVect2lay4=(TClonesArray*)fClonarr2->Get("vectfitits_4");//lay 4
68 TFile *fFitPar=new TFile (fileFitPar);
69 fFitTree=(TTree*)fFitPar->Get("tree");
73 //______________________________________________________________
74 AliITSPidParItem* AliITSSteerPid::GetItemLayer(Int_t nolay,Float_t mom){
75 // it gives an AliITSPidParItem object for a given momentum and ITS layer
76 if(nolay==1) return Item(fVect2lay1,mom);
77 if(nolay==2) return Item(fVect2lay2,mom);
78 if(nolay==3) return Item(fVect2lay3,mom);
79 if(nolay==4) return Item(fVect2lay4,mom);
80 if(nolay!=1&&nolay!=2&&nolay!=3&&nolay!=4) {
81 fItem=new AliITSPidParItem();
88 //______________________________________________________________
89 void AliITSSteerPid::GetParFitLayer(Int_t nolay,Float_t mom,Double_t *parp,Double_t *park,Double_t *parpi){
90 //it gives the parameters of the convoluted functions (WL, MP, WG) for
91 //protons, kaons and pions for a given momentum and ITS layer
93 Double_t parfit0pro[3]={0,0,0};
94 Double_t parfit1pro[3]={0,0,0};
95 Double_t parfit3pro[3]={0,0,0};
96 Double_t parfit0kao[3]={0,0,0};
97 Double_t parfit1kao[3]={0,0,0};
98 Double_t parfit3kao[3]={0,0,0};
99 Double_t parfit0pi[3]={0,0,0};
100 Double_t parfit1pi[3]={0,0,0};
101 Double_t parfit3pi[3]={0,0,0};
103 fFitTree->SetBranchAddress("par0pro",parfit0pro);
104 fFitTree->SetBranchAddress("par1pro",parfit1pro);
105 fFitTree->SetBranchAddress("par3pro",parfit3pro);
107 fFitTree->SetBranchAddress("par0kao",parfit0kao);
108 fFitTree->SetBranchAddress("par1kao",parfit1kao);
109 fFitTree->SetBranchAddress("par3kao",parfit3kao);
111 fFitTree->SetBranchAddress("par0pi",parfit0pi);
112 fFitTree->SetBranchAddress("par1pi",parfit1pi);
113 fFitTree->SetBranchAddress("par3pi",parfit3pi);
114 fFitTree->GetEvent(nolay);
116 GetLangausProPars(mom,parfit0pro,parfit1pro,parfit3pro,parp);
117 GetLangausKaoPars(mom,parfit0kao,parfit1kao,parfit3kao,park);
118 GetLangausPiPars(mom,parfit0pi,parfit1pi,parfit3pi,parpi);
121 }//______________________________________________________________
122 void AliITSSteerPid::GetLangausProPars(Float_t mom,Double_t *parfit0,Double_t *parfit1,Double_t *parfit3,Double_t *par){
124 //It finds the parameters of the convoluted Landau-Gaussian response
125 //function for protons (Width Landau, Most Probable, Width Gaussian)
126 par[0]=parfit0[0]+parfit0[1]/mom;
127 par[1]=parfit1[0]/(mom*mom)+parfit1[1]/(mom*mom)*TMath::Log(mom*mom)+parfit1[2];
128 par[2]=parfit3[0]/(mom*mom)+parfit3[1]/(mom*mom)*TMath::Log(mom*mom)+parfit3[2];
130 //______________________________________________________________
131 void AliITSSteerPid::GetLangausKaoPars(Float_t mom,Double_t *parfit0,Double_t *parfit1,Double_t *parfit3,Double_t *par){
132 // It finds the parameters of the convoluted Landau-Gaussian response
133 //function for kaons (Width Landau, Most Probable, Width Gaussian)
135 par[0]=parfit0[0]+parfit0[1]/(mom*mom);
136 par[1]=parfit1[0]/(mom*mom)+parfit1[1]/(mom*mom)*TMath::Log(mom*mom)+parfit1[2];
137 par[2]=parfit3[0]/(mom*mom)+parfit3[1]/(mom*mom)*TMath::Log(mom*mom)+parfit3[2];
140 //______________________________________________________________
141 void AliITSSteerPid::GetLangausPiPars(Float_t mom,Double_t *parfit0,Double_t *parfit1,Double_t *parfit3,Double_t *par){
142 //It finds the parameters of the convoluted Landau-Gaussian response
143 //function for pions (Width Landau, Most Probable, Width Gaussian)
145 par[0]=parfit0[0]/(mom*mom)+parfit0[1]/(mom*mom)*TMath::Log(mom*mom)+parfit0[2];
146 par[1]=parfit1[0]/(mom)+parfit1[1]/(mom)*TMath::Log(mom*mom)+parfit1[2];
147 par[2]=parfit3[0]/(mom*mom)+parfit3[1]/(mom*mom)*TMath::Log(mom*mom)+parfit3[2];
152 //______________________________________________________________
153 AliITSPidParItem* AliITSSteerPid::Item(TClonesArray *Vect,Float_t mom){
155 //it gives an AliITSPidParItem object taken from the TClonesArray.
158 AliITSPidParItem* punt;
160 for (Int_t a=0;a<50;a++){
161 punt=(AliITSPidParItem*)Vect->At(a);
162 Float_t centerp=punt->GetMomentumCenter();
163 Float_t widthp=punt->GetWidthMom();
164 if (mom>(centerp-widthp/2) && mom<=(centerp+widthp/2)) mybin=a;
166 if (mybin!=-1) fItem=(AliITSPidParItem*)Vect->At(mybin);
170 for (Int_t ii=0;ii<52;ii++) fBuff[ii]=0;
171 fItem = new AliITSPidParItem(fPCenter,fPWidth,fBuff);