ROOT logo
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, TString usercomment = "username", TString cutsobjname="loosecuts")
{
  //
  // Test macro for the AliAnalysisTaskSE for D meson candidates
  // Invariant mass histogram and
  // association with MC truth (using MC info in AOD)
  //  R. Bala, bala@to.infn.it
  // C. Bianchin, cbianchi@pd.infn.it
  // Get the pointer to the existing analysis manager via the static access method.
  //============================================================================
  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
  if (!mgr) {
    ::Error("AddTaskSignificance", "No analysis manager to connect to.");
    return NULL;
  }

  TFile* filecuts=TFile::Open(filename.Data());
  if(!filecuts ||(filecuts&& !filecuts->IsOpen())){
    cout<<"Input file not found: exit"<<endl;
    return;
  }
  
  AliRDHFCuts *analysiscuts=0x0;
  TString suffix="";
  TString suffix2="";
  if(flagOPartAntiPart==1) suffix2="P"; //P=particle, A=antiparticle
  if(flagOPartAntiPart==-1) suffix2="A";
  if(fromcb==AliAnalysisTaskSESignificance::kCharmOnly) suffix2+="prompt";
  if(fromcb==AliAnalysisTaskSESignificance::kBeautyOnly) suffix2+="feeddown";


  //Analysis cuts
  switch (decCh){
  case 0:
    analysiscuts = (AliRDHFCutsDplustoKpipi*)filecuts->Get(cutsobjname);
    suffix=Form("Dplus%s",suffix2.Data());
    break;
  case 1:
    analysiscuts = (AliRDHFCutsD0toKpi*)filecuts->Get(cutsobjname);
    suffix=Form("D0%s",suffix2.Data());
    break;
  case 2:
    analysiscuts = (AliRDHFCutsDStartoKpipi*)filecuts->Get(cutsobjname);
    suffix=Form("Dstar%s",suffix2.Data());
    break;
  case 3:
    analysiscuts = (AliRDHFCutsDstoKKpi*)filecuts->Get(cutsobjname);
    suffix=Form("Ds%s",suffix2.Data());
    break;
  case 4:
    analysiscuts = (AliRDHFCutsD0toKpipipi*)filecuts->Get(cutsobjname);
    suffix=Form("D04%s",suffix2.Data());
    break;
  case 5:
    analysiscuts = (AliRDHFCutsLctopKpi*)filecuts->Get(cutsobjname);
    suffix=Form("Lc%s",suffix2.Data());
    break;
  }
  //ptbins

  if(!analysiscuts){
    cout<<"Specific AliRDHFCuts not found"<<endl;
    return;
  }

  TString centr=Form("%.0f%.0f",analysiscuts->GetMinCentrality(),analysiscuts->GetMaxCentrality());
  suffix+=centr;

  const Int_t nptbins=analysiscuts->GetNPtBins();
  Float_t* ptbins=analysiscuts->GetPtBinLimits();

  // Analysis task    
  const Int_t npars=analysiscuts->GetNVarsForOpt();//numbers of var for opt
  Bool_t* varsforopt=analysiscuts->GetVarsForOpt();
  cout<<"pt bins= "<<nptbins<<"  varsforopt= "<<npars<<"  nvars= "<<analysiscuts->GetNVars()<<endl;
  Int_t* nofcells=new Int_t[npars];//={4,4,4,4};
  Float_t** looses;
  looses=new Float_t*[npars];
  Float_t** tights;
  tights=new Float_t*[npars];
  TString axisTitle[npars];
  TString parname="";

  for (Int_t ivop=0;ivop<npars;ivop++){
    looses[ivop]=new Float_t[nptbins];
    tights[ivop]=new Float_t[nptbins];
    nofcells[ivop]=nofsteps;
  }

  Int_t count=0;
  
  for (Int_t ip=0;ip<nptbins;ip++){
    for(Int_t iv=0;iv<analysiscuts->GetNVars();iv++){
      if(varsforopt[iv]){
	looses[count][ip]=analysiscuts->GetCutValue(iv,ip);
	axisTitle[count]=(analysiscuts->GetVarNames())[iv];
	parname=Form("par%dptbin%d",count,ip);
	TParameter<float>* par=(TParameter<float>*)filecuts->Get(parname.Data());
	tights[count][ip]=par->GetVal();
	count++;
      }
    }
    count=0;
  }
  
  //creation TList of AliMultiDimVector
  TList *listMDV=new TList();
  listMDV->SetOwner();
  listMDV->SetName("listMDV");

  for (Int_t ip=0;ip<nptbins;ip++){
    Float_t *loosescut=new Float_t[npars];
    Float_t *tightscut=new Float_t[npars];
    for(Int_t i=0;i<npars;i++){
      loosescut[i]=looses[i][ip];
      tightscut[i]=tights[i][ip];
    }
    Float_t ptbincut[2]={ptbins[ip],ptbins[ip+1]};
    TString mdvname=Form("multiDimVectorPtBin%d",ip);
    AliMultiDimVector *mv=new AliMultiDimVector(mdvname.Data(),"MultiDimVector",1,ptbincut,npars,nofcells,loosescut,tightscut,axisTitle);
    listMDV->Add(mv);
  }
  
  AliAnalysisTaskSESignificance *sigTask = new AliAnalysisTaskSESignificance("SignificanceAnalysis",listMDV,analysiscuts,decCh,AliRDHFCuts::kAll);//AliRDHFCuts::kCandidate
  sigTask->SetReadMC(readMC);
  sigTask->SetBFeedDown(fromcb);
  sigTask->SetDebugLevel(0);
  sigTask->SetFillWithPartAntiPartBoth(flagOPartAntiPart);
  sigTask->SetUseSelBit(kTRUE);
  mgr->AddTask(sigTask);

  TString contname=Form("cinputSig%s",suffix.Data());
  // Create containers for input/output
  AliAnalysisDataContainer *cinputSig = mgr->CreateContainer(contname.Data(),TChain::Class(),AliAnalysisManager::kInputContainer);
  TString outputfile = AliAnalysisManager::GetCommonFileName();
  usercomment = "_" + usercomment;
  TString outputhistos = outputfile += ":PWG3_D2H_Significance"; 
  outputhistos += usercomment;

  contname=Form("coutputSig%s",suffix.Data());
  contname += usercomment;
  AliAnalysisDataContainer *coutputSig = mgr->CreateContainer(contname.Data(),TList::Class(),AliAnalysisManager::kOutputContainer,outputfile.Data());
  contname=Form("coutputmv%s",suffix.Data());
  contname += usercomment;
  AliAnalysisDataContainer *coutputmv = mgr->CreateContainer(contname.Data(),TList::Class(),AliAnalysisManager::kOutputContainer,outputfile.Data());
  contname=Form("cloosecuts%s",suffix.Data());
  contname += usercomment;
  AliAnalysisDataContainer *coutputcuts = mgr->CreateContainer(contname.Data(),AliRDHFCuts::Class(),AliAnalysisManager::kOutputContainer,outputfile.Data());


  mgr->ConnectInput(sigTask,0,mgr->GetCommonInputContainer());
  
  mgr->ConnectOutput(sigTask,1,coutputSig);
  
  mgr->ConnectOutput(sigTask,2,coutputmv);

  mgr->ConnectOutput(sigTask,3,coutputcuts);
 
  return sigTask;
}


 AddTaskSignificance.C:1
 AddTaskSignificance.C:2
 AddTaskSignificance.C:3
 AddTaskSignificance.C:4
 AddTaskSignificance.C:5
 AddTaskSignificance.C:6
 AddTaskSignificance.C:7
 AddTaskSignificance.C:8
 AddTaskSignificance.C:9
 AddTaskSignificance.C:10
 AddTaskSignificance.C:11
 AddTaskSignificance.C:12
 AddTaskSignificance.C:13
 AddTaskSignificance.C:14
 AddTaskSignificance.C:15
 AddTaskSignificance.C:16
 AddTaskSignificance.C:17
 AddTaskSignificance.C:18
 AddTaskSignificance.C:19
 AddTaskSignificance.C:20
 AddTaskSignificance.C:21
 AddTaskSignificance.C:22
 AddTaskSignificance.C:23
 AddTaskSignificance.C:24
 AddTaskSignificance.C:25
 AddTaskSignificance.C:26
 AddTaskSignificance.C:27
 AddTaskSignificance.C:28
 AddTaskSignificance.C:29
 AddTaskSignificance.C:30
 AddTaskSignificance.C:31
 AddTaskSignificance.C:32
 AddTaskSignificance.C:33
 AddTaskSignificance.C:34
 AddTaskSignificance.C:35
 AddTaskSignificance.C:36
 AddTaskSignificance.C:37
 AddTaskSignificance.C:38
 AddTaskSignificance.C:39
 AddTaskSignificance.C:40
 AddTaskSignificance.C:41
 AddTaskSignificance.C:42
 AddTaskSignificance.C:43
 AddTaskSignificance.C:44
 AddTaskSignificance.C:45
 AddTaskSignificance.C:46
 AddTaskSignificance.C:47
 AddTaskSignificance.C:48
 AddTaskSignificance.C:49
 AddTaskSignificance.C:50
 AddTaskSignificance.C:51
 AddTaskSignificance.C:52
 AddTaskSignificance.C:53
 AddTaskSignificance.C:54
 AddTaskSignificance.C:55
 AddTaskSignificance.C:56
 AddTaskSignificance.C:57
 AddTaskSignificance.C:58
 AddTaskSignificance.C:59
 AddTaskSignificance.C:60
 AddTaskSignificance.C:61
 AddTaskSignificance.C:62
 AddTaskSignificance.C:63
 AddTaskSignificance.C:64
 AddTaskSignificance.C:65
 AddTaskSignificance.C:66
 AddTaskSignificance.C:67
 AddTaskSignificance.C:68
 AddTaskSignificance.C:69
 AddTaskSignificance.C:70
 AddTaskSignificance.C:71
 AddTaskSignificance.C:72
 AddTaskSignificance.C:73
 AddTaskSignificance.C:74
 AddTaskSignificance.C:75
 AddTaskSignificance.C:76
 AddTaskSignificance.C:77
 AddTaskSignificance.C:78
 AddTaskSignificance.C:79
 AddTaskSignificance.C:80
 AddTaskSignificance.C:81
 AddTaskSignificance.C:82
 AddTaskSignificance.C:83
 AddTaskSignificance.C:84
 AddTaskSignificance.C:85
 AddTaskSignificance.C:86
 AddTaskSignificance.C:87
 AddTaskSignificance.C:88
 AddTaskSignificance.C:89
 AddTaskSignificance.C:90
 AddTaskSignificance.C:91
 AddTaskSignificance.C:92
 AddTaskSignificance.C:93
 AddTaskSignificance.C:94
 AddTaskSignificance.C:95
 AddTaskSignificance.C:96
 AddTaskSignificance.C:97
 AddTaskSignificance.C:98
 AddTaskSignificance.C:99
 AddTaskSignificance.C:100
 AddTaskSignificance.C:101
 AddTaskSignificance.C:102
 AddTaskSignificance.C:103
 AddTaskSignificance.C:104
 AddTaskSignificance.C:105
 AddTaskSignificance.C:106
 AddTaskSignificance.C:107
 AddTaskSignificance.C:108
 AddTaskSignificance.C:109
 AddTaskSignificance.C:110
 AddTaskSignificance.C:111
 AddTaskSignificance.C:112
 AddTaskSignificance.C:113
 AddTaskSignificance.C:114
 AddTaskSignificance.C:115
 AddTaskSignificance.C:116
 AddTaskSignificance.C:117
 AddTaskSignificance.C:118
 AddTaskSignificance.C:119
 AddTaskSignificance.C:120
 AddTaskSignificance.C:121
 AddTaskSignificance.C:122
 AddTaskSignificance.C:123
 AddTaskSignificance.C:124
 AddTaskSignificance.C:125
 AddTaskSignificance.C:126
 AddTaskSignificance.C:127
 AddTaskSignificance.C:128
 AddTaskSignificance.C:129
 AddTaskSignificance.C:130
 AddTaskSignificance.C:131
 AddTaskSignificance.C:132
 AddTaskSignificance.C:133
 AddTaskSignificance.C:134
 AddTaskSignificance.C:135
 AddTaskSignificance.C:136
 AddTaskSignificance.C:137
 AddTaskSignificance.C:138
 AddTaskSignificance.C:139
 AddTaskSignificance.C:140
 AddTaskSignificance.C:141
 AddTaskSignificance.C:142
 AddTaskSignificance.C:143
 AddTaskSignificance.C:144
 AddTaskSignificance.C:145
 AddTaskSignificance.C:146
 AddTaskSignificance.C:147
 AddTaskSignificance.C:148
 AddTaskSignificance.C:149
 AddTaskSignificance.C:150
 AddTaskSignificance.C:151
 AddTaskSignificance.C:152
 AddTaskSignificance.C:153
 AddTaskSignificance.C:154
 AddTaskSignificance.C:155
 AddTaskSignificance.C:156
 AddTaskSignificance.C:157
 AddTaskSignificance.C:158
 AddTaskSignificance.C:159
 AddTaskSignificance.C:160
 AddTaskSignificance.C:161
 AddTaskSignificance.C:162
 AddTaskSignificance.C:163