]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG3/vertexingHF/macros/AddTaskSignificance.C
Updates to run with deltas (L. Cunqueiro)
[u/mrichter/AliRoot.git] / PWG3 / vertexingHF / macros / AddTaskSignificance.C
1 AliAnalysisTaskSESignificance *AddTaskSignificance(TString filename="cuts4SignifMaximDplus.root",Int_t decCh=0,Bool_t readMC=kFALSE,Int_t flagOPartAntiPart=0,Int_t nofsteps=8,AliAnalysisTaskSESignificance::FeedDownEnum fromcb=AliAnalysisTaskSESignificance::kBoth)
2 {
3   //
4   // Test macro for the AliAnalysisTaskSE for D meson candidates
5   // Invariant mass histogram and
6   // association with MC truth (using MC info in AOD)
7   //  R. Bala, bala@to.infn.it
8   // C. Bianchin, cbianchi@pd.infn.it
9   // Get the pointer to the existing analysis manager via the static access method.
10   //============================================================================
11   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
12   if (!mgr) {
13     ::Error("AddTaskSignificance", "No analysis manager to connect to.");
14     return NULL;
15   }
16
17   TFile* filecuts=new TFile(filename.Data());
18   if(!filecuts->IsOpen()){
19     cout<<"Input file not found: exit"<<endl;
20     return;
21   }
22   
23   AliRDHFCuts *analysiscuts=0x0;
24   TString suffix="";
25   TString suffix2="";
26   if(flagOPartAntiPart==1) suffix2="P"; //P=particle, A=antiparticle
27   if(flagOPartAntiPart==-1) suffix2="A";
28   if(fromcb==AliAnalysisTaskSESignificance::kCharmOnly) suffix2+="prompt";
29   if(fromcb==AliAnalysisTaskSESignificance::kBeautyOnly) suffix2+="feeddown";
30
31   TString cutsobjname="loosercuts";
32   //Analysis cuts
33   switch (decCh){
34   case 0:
35     analysiscuts = (AliRDHFCutsDplustoKpipi*)filecuts->Get(cutsobjname);
36     suffix=Form("Dplus%s",suffix2.Data());
37     break;
38   case 1:
39     analysiscuts = (AliRDHFCutsD0toKpi*)filecuts->Get(cutsobjname);
40     suffix=Form("D0%s",suffix2.Data());
41     break;
42   case 2:
43     analysiscuts = (AliRDHFCutsDstartoKpipi*)filecuts->Get(cutsobjname);
44     suffix=Form("Dstar%s",suffix2.Data());
45     break;
46   case 3:
47     analysiscuts = (AliRDHFCutsDstoKKpi*)filecuts->Get(cutsobjname);
48     suffix=Form("Ds%s",suffix2.Data());
49     break;
50   case 4:
51     analysiscuts = (AliRDHFCutsD0toKpipipi*)filecuts->Get(cutsobjname);
52     suffix=Form("D04%s",suffix2.Data());
53     break;
54   case 5:
55     analysiscuts = (AliRDHFCutsLctopKpi*)filecuts->Get(cutsobjname);
56     suffix=Form("Lc%s",suffix2.Data());
57     break;
58   }
59   //ptbins
60
61   if(!analysiscuts){
62     cout<<"Specific AliRDHFCuts not found"<<endl;
63     return;
64   }
65
66   TString centr=Form("%.0f%.0f",analysiscuts->GetMinCentrality(),analysiscuts->GetMaxCentrality());
67   suffix+=centr;
68
69   const Int_t nptbins=analysiscuts->GetNPtBins();
70   Float_t* ptbins=analysiscuts->GetPtBinLimits();
71
72   // Analysis task    
73   const Int_t npars=analysiscuts->GetNVarsForOpt();//numbers of var for opt
74   Bool_t* varsforopt=analysiscuts->GetVarsForOpt();
75   cout<<"pt bins= "<<nptbins<<"  varsforopt= "<<npars<<"  nvars= "<<analysiscuts->GetNVars()<<endl;
76   Int_t* nofcells=new Int_t[npars];//={4,4,4,4};
77   Float_t** looses;
78   looses=new Float_t*[npars];
79   Float_t** tights;
80   tights=new Float_t*[npars];
81   TString axisTitle[npars];
82   TString parname="";
83
84   for (Int_t ivop=0;ivop<npars;ivop++){
85     looses[ivop]=new Float_t[nptbins];
86     tights[ivop]=new Float_t[nptbins];
87     nofcells[ivop]=nofsteps;
88   }
89
90   Int_t count=0;
91   
92   for (Int_t ip=0;ip<nptbins;ip++){
93     for(Int_t iv=0;iv<analysiscuts->GetNVars();iv++){
94       if(varsforopt[iv]){
95         looses[count][ip]=analysiscuts->GetCutValue(iv,ip);
96         axisTitle[count]=(analysiscuts->GetVarNames())[iv];
97         parname=Form("par%dptbin%d",count,ip);
98         TParameter<float>* par=(TParameter<float>*)filecuts->Get(parname.Data());
99         tights[count][ip]=par->GetVal();
100         count++;
101       }
102     }
103     count=0;
104   }
105   
106   //creation TList of AliMultiDimVector
107   TList *listMDV=new TList();
108   listMDV->SetOwner();
109   listMDV->SetName("listMDV");
110
111   for (Int_t ip=0;ip<nptbins;ip++){
112     Float_t *loosescut=new Float_t[npars];
113     Float_t *tightscut=new Float_t[npars];
114     for(Int_t i=0;i<npars;i++){
115       loosescut[i]=looses[i][ip];
116       tightscut[i]=tights[i][ip];
117     }
118     Float_t ptbincut[2]={ptbins[ip],ptbins[ip+1]};
119     TString mdvname=Form("multiDimVectorPtBin%d",ip);
120     AliMultiDimVector *mv=new AliMultiDimVector(mdvname.Data(),"MultiDimVector",1,ptbincut,npars,nofcells,loosescut,tightscut,axisTitle);
121     listMDV->Add(mv);
122   }
123   
124   AliAnalysisTaskSESignificance *sigTask = new AliAnalysisTaskSESignificance("SignificanceAnalysis",listMDV,analysiscuts,decCh,AliRDHFCuts::kAll);//AliRDHFCuts::kCandidate
125   sigTask->SetReadMC(readMC);
126   sigTask->SetBFeedDown(fromcb);
127   sigTask->SetDebugLevel(0);
128   sigTask->SetFillWithPartAntiPartBoth(flagOPartAntiPart);
129   sigTask->SetUseSelBit(kTRUE);
130   mgr->AddTask(sigTask);
131
132   TString contname=Form("cinputSig%s",suffix.Data());
133   // Create containers for input/output
134   AliAnalysisDataContainer *cinputSig = mgr->CreateContainer(contname.Data(),TChain::Class(),AliAnalysisManager::kInputContainer);
135   TString outputfile = AliAnalysisManager::GetCommonFileName();
136   TString outputhistos = outputfile += ":PWG3_D2H_Significance"; 
137   contname=Form("coutputSig%s",suffix.Data());
138   AliAnalysisDataContainer *coutputSig = mgr->CreateContainer(contname.Data(),TList::Class(),AliAnalysisManager::kOutputContainer,outputfile.Data());
139   contname=Form("coutputmv%s",suffix.Data());
140   AliAnalysisDataContainer *coutputmv = mgr->CreateContainer(contname.Data(),TList::Class(),AliAnalysisManager::kOutputContainer,outputfile.Data());
141   contname=Form("cloosecuts%s",suffix.Data());
142   AliAnalysisDataContainer *coutputcuts = mgr->CreateContainer(contname.Data(),AliRDHFCuts::Class(),AliAnalysisManager::kOutputContainer,outputfile.Data());
143
144
145   mgr->ConnectInput(sigTask,0,mgr->GetCommonInputContainer());
146   
147   mgr->ConnectOutput(sigTask,1,coutputSig);
148   
149   mgr->ConnectOutput(sigTask,2,coutputmv);
150
151   mgr->ConnectOutput(sigTask,3,coutputcuts);
152  
153   return sigTask;
154 }
155