0cf35e63cc4295e666006ae3e8db1e0b2cec51d2
[u/mrichter/AliRoot.git] / PWG3 / vertexingHF / macros / makeTFile4CutsD0toKpi.C
1 #include <Riostream.h>
2 #include <TFile.h>
3 #include <AliRDHFCutsD0toKpi.h>
4 #include <TClonesArray.h>
5 #include <TParameter.h>
6
7 //macro to make a .root file which contains an AliRDHFCutsD0toKpi with loose set of cuts (for significance maximization) and TParameter with the tighest value of these cuts
8 //Needed for AliAnalysisTaskSESignificance
9
10 //Use:
11 //Set hard coded commentet with //set this!!
12 //.x makeTFile4CutsD0toKpi.C++
13
14 //similar macros for the other D mesons
15
16 //Author: Chiara Bianchin, cbianchi@pd.infn.it
17
18 void makeTFile4CutsD0toKpi(){
19
20   AliRDHFCutsD0toKpi* RDHFD0toKpi=new AliRDHFCutsD0toKpi();
21   RDHFD0toKpi->SetName("loosercuts");
22   RDHFD0toKpi->SetTitle("Cuts for significance maximization");
23
24   AliESDtrackCuts* esdTrackCuts=new AliESDtrackCuts();
25   esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
26   //default
27   esdTrackCuts->SetRequireTPCRefit(kTRUE);
28   esdTrackCuts->SetRequireITSRefit(kTRUE);
29   esdTrackCuts->SetMinNClustersITS(4);
30   
31   esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kAny);
32   esdTrackCuts->SetMinDCAToVertexXY(0.);
33   esdTrackCuts->SetEtaRange(-0.9,0.9);
34   esdTrackCuts->SetPtRange(0.1,1.e10);
35   
36   RDHFD0toKpi->AddTrackCuts(esdTrackCuts);
37
38   const Int_t nvars=9;
39
40   const Int_t nptbins=5;
41   Float_t ptbins[nptbins+1];
42   ptbins[0]=0.;
43   ptbins[1]=1.;
44   ptbins[2]=2.;
45   ptbins[3]=3.;
46   ptbins[4]=5.;
47   ptbins[5]=10.;
48   
49   RDHFD0toKpi->SetPtBins(nptbins+1,ptbins);
50   
51
52   Float_t** rdcutsvalmine;
53   rdcutsvalmine=new Float_t*[nvars];
54   for(Int_t iv=0;iv<nvars;iv++){
55     rdcutsvalmine[iv]=new Float_t[nptbins];
56   }
57
58   //setting my cut values
59     //cuts order
60     //       printf("    |M-MD0| [GeV]    < %f\n",fD0toKpiCuts[0]);
61     //     printf("    dca    [cm]  < %f\n",fD0toKpiCuts[1]);
62     //     printf("    cosThetaStar     < %f\n",fD0toKpiCuts[2]);
63     //     printf("    pTK     [GeV/c]    > %f\n",fD0toKpiCuts[3]);
64     //     printf("    pTpi    [GeV/c]    > %f\n",fD0toKpiCuts[4]);
65     //     printf("    |d0K|  [cm]  < %f\n",fD0toKpiCuts[5]);
66     //     printf("    |d0pi| [cm]  < %f\n",fD0toKpiCuts[6]);
67     //     printf("    d0d0  [cm^2] < %f\n",fD0toKpiCuts[7]);
68     //     printf("    cosThetaPoint    > %f\n",fD0toKpiCuts[8]);
69
70   /*
71   //setting PPR cut values
72   rdcutsvalPPR[0][0]=0.7;
73   rdcutsvalPPR[1][0]=0.04;
74   rdcutsvalPPR[2][0]=0.8;
75   rdcutsvalPPR[3][0]=0.5;
76   rdcutsvalPPR[4][0]=0.5;
77   rdcutsvalPPR[5][0]=0.05;
78   rdcutsvalPPR[6][0]=0.05;
79   rdcutsvalPPR[7][0]=-0.0002;
80   rdcutsvalPPR[8][0]=0.5;
81
82   rdcutsvalPPR[0][1]=rdcutsvalPPR[0][2]=0.7;
83   rdcutsvalPPR[1][1]=rdcutsvalPPR[1][2]=0.02;
84   rdcutsvalPPR[2][1]=rdcutsvalPPR[2][2]=0.8;
85   rdcutsvalPPR[3][1]=rdcutsvalPPR[3][2]=0.7;
86   rdcutsvalPPR[4][1]=rdcutsvalPPR[4][2]=0.7;
87   rdcutsvalPPR[5][1]=rdcutsvalPPR[5][2]=0.05;
88   rdcutsvalPPR[6][1]=rdcutsvalPPR[6][2]=0.05;
89   rdcutsvalPPR[7][1]=rdcutsvalPPR[7][2]=-0.0002;
90   rdcutsvalPPR[8][1]=rdcutsvalPPR[8][2]=0.6;
91
92   rdcutsvalPPR[0][3]=0.7;
93   rdcutsvalPPR[1][3]=0.02;
94   rdcutsvalPPR[2][3]=0.8;
95   rdcutsvalPPR[3][3]=0.7;
96   rdcutsvalPPR[4][3]=0.7;
97   rdcutsvalPPR[5][3]=0.05;
98   rdcutsvalPPR[6][3]=0.05;
99   rdcutsvalPPR[7][3]=-0.0001;
100   rdcutsvalPPR[8][3]=0.8;
101
102   rdcutsvalPPR[0][4]=0.7;
103   rdcutsvalPPR[1][4]=0.02;
104   rdcutsvalPPR[2][4]=0.8;
105   rdcutsvalPPR[3][4]=0.7;
106   rdcutsvalPPR[4][4]=0.7;
107   rdcutsvalPPR[5][4]=0.05;
108   rdcutsvalPPR[6][4]=0.05;
109   rdcutsvalPPR[7][4]=-0.00005;
110   rdcutsvalPPR[8][4]=0.8;
111   */
112   //setting my cut values
113
114   rdcutsvalmine[0][0]=0.065;
115   rdcutsvalmine[1][0]=0.04;
116   rdcutsvalmine[2][0]=0.8;
117   rdcutsvalmine[3][0]=0.7;
118   rdcutsvalmine[4][0]=0.7;
119   rdcutsvalmine[5][0]=1000.*1E-4;
120   rdcutsvalmine[6][0]=1000.*1E-4;
121   rdcutsvalmine[7][0]=-0.0004;
122   rdcutsvalmine[8][0]=0.71;
123
124   rdcutsvalmine[0][1]=0.065;
125   rdcutsvalmine[1][1]=0.04;
126   rdcutsvalmine[2][1]=0.8;
127   rdcutsvalmine[3][1]=0.7;
128   rdcutsvalmine[4][1]=0.7;
129   rdcutsvalmine[5][1]=1.;
130   rdcutsvalmine[6][1]=1.;
131   rdcutsvalmine[7][1]=-0.0003;
132   rdcutsvalmine[8][1]=0.79;
133
134   rdcutsvalmine[0][2]=0.65;
135   rdcutsvalmine[1][2]=200.*1E-4;
136   rdcutsvalmine[2][2]=0.8;
137   rdcutsvalmine[3][2]=0.7;
138   rdcutsvalmine[4][2]=0.7;
139   rdcutsvalmine[5][2]=1000.*1E-4;
140   rdcutsvalmine[6][2]=1000.*1E-4;
141   rdcutsvalmine[7][2]=-0.0001;
142   rdcutsvalmine[8][2]=0.83;
143
144   rdcutsvalmine[0][3]=0.65;
145   rdcutsvalmine[1][3]=200.*1E-4;
146   rdcutsvalmine[2][3]=0.8;
147   rdcutsvalmine[3][3]=0.7;
148   rdcutsvalmine[4][3]=0.7;
149   rdcutsvalmine[5][3]=1000.*1E-4;
150   rdcutsvalmine[6][3]=1000.*1E-4;
151   rdcutsvalmine[7][3]=-0.00005;
152   rdcutsvalmine[8][3]=0.78;
153
154   rdcutsvalmine[0][4]=0.65;
155   rdcutsvalmine[1][4]=200.*1E-4;
156   rdcutsvalmine[2][4]=0.8;
157   rdcutsvalmine[3][4]=0.7;
158   rdcutsvalmine[4][4]=0.7;
159   rdcutsvalmine[5][4]=1000.*1E-4;
160   rdcutsvalmine[6][4]=1000.*1E-4;
161   rdcutsvalmine[7][4]=-0.00001;
162   rdcutsvalmine[8][4]=0.79;
163
164
165   RDHFD0toKpi->SetCuts(nvars,nptbins,rdcutsvalmine);
166
167   Int_t nvarsforopt=RDHFD0toKpi->GetNVarsForOpt();
168   Int_t dim=2; //set this!!
169   Bool_t *boolforopt;
170   boolforopt=new Bool_t[nvars];
171   if(dim>nvarsforopt){
172     cout<<"Number of variables for optimization has probably changed, check and edit accordingly"<<endl;
173     return;
174   } else {
175     if(dim==nvarsforopt){
176       boolforopt=RDHFD0toKpi->GetVarsForOpt();
177     }else{
178       TString *names;
179       names=new TString[nvars];
180       TString answer="";
181       Int_t checktrue=0;
182       names=RDHFD0toKpi->GetVarNames();
183       for(Int_t i=0;i<nvars;i++){
184         cout<<names[i]<<" for opt? (y/n)"<<endl;
185         cin>>answer;
186         if(answer=="y") {
187           boolforopt[i]=kTRUE;
188           checktrue++;
189         }
190         else boolforopt[i]=kFALSE;
191       }
192       if (checktrue!=dim) {
193         cout<<"Error! You set "<<checktrue<<" kTRUE instead of "<<dim<<endl;
194         return;
195       }
196       RDHFD0toKpi->SetVarsForOpt(dim,boolforopt);
197     }
198   }
199
200
201   Float_t tighterval[dim][nptbins];
202   //dca
203   //costhetastar
204   //d0d0 <-this 
205   //costhetapoint <-this 
206
207   
208   //number of steps for each variable is 4 now
209   //set this!!
210   // tighterval[0][0]=0.01;
211   // tighterval[1][0]=0.8;
212   tighterval[0][0]=-0.0007;
213   tighterval[1][0]=0.99;
214
215   // tighterval[0][1]=0.01;
216   // tighterval[1][1]=0.8;
217   tighterval[0][1]=-0.0006;
218   tighterval[1][1]=0.99;
219  
220  // tighterval[0][2]=0.01;
221   // tighterval[1][2]=0.8;
222   tighterval[0][2]=-0.0004;
223   tighterval[1][2]=0.99;
224  
225   // tighterval[0][3]=0.01;
226   // tighterval[1][3]=0.8;
227   tighterval[0][3]=-0.00035;
228   tighterval[1][3]=0.98;
229
230   // tighterval[0][4]=0.01;
231   // tighterval[1][4]=0.8;
232   tighterval[0][4]=-0.0003;
233   tighterval[1][4]=0.99;
234
235
236   TString name=""; 
237   Int_t arrdim=dim*nptbins;
238   cout<<"Will save "<<arrdim<<" TParameter<float>"<<endl;
239   TClonesArray max("TParameter<float>",arrdim);
240   for(Int_t i=0;i<dim;i++){
241     for(Int_t j=0;j<nptbins;j++){
242       name=Form("par%dptbin%d",i,j);
243       cout<<"Setting "<<name.Data()<<" to "<<tighterval[i][j]<<endl;
244       new(max[i*nptbins+j])TParameter<float>(name.Data(),tighterval[i][j]);
245     }
246   }
247  
248   TFile* fout=new TFile("cuts4SignifMaxim.root","recreate");   //set this!! 
249   fout->cd();
250   RDHFD0toKpi->Write();
251   max.Write();
252   fout->Close();
253  
254 }