]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGHF/vertexingHF/macros/makeTFile4CutsDstoKKpi.C
Speedup Ds task (Gian Michele)
[u/mrichter/AliRoot.git] / PWGHF / vertexingHF / macros / makeTFile4CutsDstoKKpi.C
index ebbce69e01db36f38298d52bdd197db996e41c2d..12df58bbb30244ca87bf1f5517e3a79a4546e0ad 100644 (file)
-#include <Riostream.h>\r
-#include <TFile.h>\r
-//#include <AliRDHFCutsDstoKKpi.h>\r
-#include <TClonesArray.h>\r
-#include <TParameter.h>\r
-\r
-//macro to make a .root file which contains an AliRDHFCutsDstoKKpi with loose set of cuts (for significance maximization) and TParameter with the tighest value of these cuts\r
-//Needed for AliAnalysisTaskSEDs, AliCFTaskVertexingHF3Prong, AliAnalysisTaskSESignificance\r
-\r
-//Use:\r
-//Set hard coded commented with //set this!!\r
-\r
-//.L makeTFile4CutsDstoKKpi.C\r
-// makeInputAliAnalysisTaskSEDs()\r
-// makeInputAliAnalysisTaskSESignificanceMaximization()\r
-\r
-//similar macros for the other D mesons\r
-\r
-//Author: Chiara Bianchin, cbianchi@pd.infn.it\r
-//        Giacomo Ortona, ortona@to.infn.it\r
-//        Renu Bala [Dplus Analysis and CF]\r
-\r
-//Modified for Ds meson: G.M. Innocenti, innocent@to.infn.it\r
-\r
-void makeInputAliAnalysisTaskSEDsPP(){\r
-\r
- //  gSystem->SetIncludePath("-I. -I$ROOTSYS/include -I$ALICE_ROOT -I$ALICE_ROOT/include -I$ALICE_ROOT/ITS -I$ALICE_ROOT/TPC -I$ALICE_ROOT/CONTAINERS -I$ALICE_ROOT/STEER -I$ALICE_ROOT/TRD -I$ALICE_ROOT/macros -I$ALICE_ROOT/ANALYSIS -I$ALICE_ROOT/PWG3 -I$ALICE_ROOT/PWG3/vertexingHF -I$ALICE_ROOT/PWG3/vertexingH/macros -g"); \r
-\r
-    \r
-    AliESDtrackCuts* esdTrackCuts=new AliESDtrackCuts();\r
-    esdTrackCuts->SetRequireSigmaToVertex(kFALSE);\r
-    //default\r
-    esdTrackCuts->SetRequireTPCRefit(kTRUE);\r
-    esdTrackCuts->SetRequireITSRefit(kTRUE);\r
-    //esdTrackCuts->SetMinNClustersITS(4); // default is 5\r
-    esdTrackCuts->SetMinNClustersTPC(70);\r
-    esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,\r
-                                          AliESDtrackCuts::kAny); \r
-    // default is kBoth, otherwise kAny\r
-    esdTrackCuts->SetMinDCAToVertexXY(0.);\r
-    esdTrackCuts->SetPtRange(0.3,1.e10);\r
-    \r
-    \r
-    const Int_t nptbins=4;\r
-    Float_t* ptbins;\r
-    ptbins=new Float_t[nptbins+1];\r
-    ptbins[0]=2.;\r
-    ptbins[1]=4.;\r
-    ptbins[2]=6.;\r
-    ptbins[3]=8.;\r
-    ptbins[4]=12.;\r
-    \r
-    \r
-    const Int_t nvars=16;\r
-    \r
-    Float_t** prodcutsval;\r
-    prodcutsval=new Float_t*[nvars];\r
-    for(Int_t ic=0;ic<nvars;ic++){prodcutsval[ic]=new Float_t[nptbins];}  \r
-    for(Int_t ipt=0;ipt<nptbins;ipt++){\r
-      prodcutsval[0][ipt]=0.35;\r
-      prodcutsval[1][ipt]=0.3;\r
-      prodcutsval[2][ipt]=0.3;\r
-      prodcutsval[3][ipt]=0.;\r
-      prodcutsval[4][ipt]=0.;\r
-      prodcutsval[5][ipt]=0.005;\r
-      prodcutsval[6][ipt]=0.06;\r
-      prodcutsval[7][ipt]=0.0;\r
-      prodcutsval[8][ipt]=0.;\r
-      prodcutsval[9][ipt]=0.7;\r
-      prodcutsval[10][ipt]=0.;\r
-      prodcutsval[11][ipt]=1000.0;\r
-      prodcutsval[12][ipt]=0.1;\r
-      prodcutsval[13][ipt]=0.1;\r
-      prodcutsval[14][ipt]=0.;\r
-      prodcutsval[15][ipt]=1.;\r
-      \r
-    }\r
-    \r
-    \r
-    Float_t** anacutsval;\r
-    anacutsval=new Float_t*[nvars];\r
-  \r
-    for(Int_t ic=0;ic<nvars;ic++){anacutsval[ic]=new Float_t[nptbins];}  \r
-    for(Int_t ipt=0;ipt<nptbins;ipt++){\r
-      \r
-      anacutsval[0][ipt]=0.35;\r
-      anacutsval[1][ipt]=0.3;\r
-      anacutsval[2][ipt]=0.3;\r
-      anacutsval[3][ipt]=0.;\r
-      anacutsval[4][ipt]=0.;\r
-      anacutsval[5][ipt]=0.005;\r
-      anacutsval[6][ipt]=0.06;\r
-      anacutsval[7][ipt]=0.0;\r
-      anacutsval[8][ipt]=0.;\r
-      anacutsval[9][ipt]=0.9;\r
-      anacutsval[10][ipt]=0.;\r
-      anacutsval[11][ipt]=1000.0;\r
-      anacutsval[12][ipt]=0.015;\r
-      anacutsval[13][ipt]=0.1;\r
-      anacutsval[14][ipt]=0.;\r
-      anacutsval[15][ipt]=1.;\r
-      \r
-   \r
-    }\r
-    \r
-    \r
-        \r
-    /*    \r
-   \r
-    Cut list                                                rejection condition\r
-    0           "inv. mass [GeV]",                          invmassDS-massDspdg>fCutsRD\r
-    1                  "pTK [GeV/c]",                              pTK<fCutsRd\r
-    2                  "pTPi [GeV/c]",                             pTPi<fCutsRd\r
-    3                  "d0K [cm]",                                 d0K<fCutsRd\r
-    4                  "d0Pi [cm]",                                d0Pi<fCutsRd\r
-    5                  "dist12 [cm]",                              dist12<fCutsRd\r
-    6                  "sigmavert [cm]",                           sigmavert>fCutsRd\r
-    7                  "decLen [cm]",                              decLen<fCutsRD\r
-    8                  "ptMax [GeV/c]",                            ptMax<fCutsRD\r
-    9                  "cosThetaPoint",                            CosThetaPoint<fCutsRD\r
-    10                 "Sum d0^2 (cm^2)",                          sumd0<fCutsRD\r
-    11                 "dca [cm]",                                 dca(i)>fCutsRD\r
-    12                 "inv. mass (Mphi-MKK) [GeV]",               invmass-pdg>fCutsRD\r
-    13                 "inv. mass (MKo*-MKpi) [GeV]"};             invmass-pdg>fCutsRD\r
-    14                 "Abs(CosineKpiPhiRFrame)^3",\r
-       15              "CosPiDsLabFrame"};\r
-    */\r
\r
-    AliRDHFCutsDstoKKpi *prodcuts = new AliRDHFCutsDstoKKpi();\r
-    prodcuts->SetName("ProdCuts");\r
-    prodcuts->SetPtBins(nptbins+1,ptbins);\r
-    prodcuts->SetCuts(nvars,nptbins,prodcutsval);\r
-    \r
-    \r
-    AliRDHFCutsDstoKKpi* analysiscuts=new AliRDHFCutsDstoKKpi();\r
-    analysiscuts->SetName("AnalysisCuts");\r
-    analysiscuts->SetTitle("Cuts for Ds Analysis and CF");\r
-    analysiscuts->SetPtBins(nptbins+1,ptbins);\r
-    analysiscuts->SetCuts(nvars,nptbins,anacutsval);\r
-    analysiscuts->AddTrackCuts(esdTrackCuts);\r
-    analysiscuts->SetUsePID(kTRUE);\r
-    analysiscuts->SetPidOption(1);\r
-    analysiscuts->SetOptPileup(kTRUE);\r
-    analysiscuts->SetRemoveDaughtersFromPrim(kTRUE);\r
-    cout<<"This is the odject I'm going to save:"<<nptbins<<endl;\r
-    \r
-    analysiscuts->PrintAll();\r
-    TFile* fout=new TFile("DstoKKpiCuts.root","recreate");   \r
-    fout->cd();\r
-    prodcuts->Write();\r
-    analysiscuts->Write();\r
-    fout->Close();\r
-    \r
-    \r
-}\r
-\r
-\r
-void makeInputAliAnalysisTaskSEDsPbPb(){\r
-\r
- //  gSystem->SetIncludePath("-I. -I$ROOTSYS/include -I$ALICE_ROOT -I$ALICE_ROOT/include -I$ALICE_ROOT/ITS -I$ALICE_ROOT/TPC -I$ALICE_ROOT/CONTAINERS -I$ALICE_ROOT/STEER -I$ALICE_ROOT/TRD -I$ALICE_ROOT/macros -I$ALICE_ROOT/ANALYSIS -I$ALICE_ROOT/PWG3 -I$ALICE_ROOT/PWG3/vertexingHF -I$ALICE_ROOT/PWG3/vertexingH/macros -g"); \r
-\r
-    \r
-    AliESDtrackCuts* esdTrackCuts=new AliESDtrackCuts();\r
-    esdTrackCuts->SetRequireSigmaToVertex(kFALSE);\r
-    //default\r
-    esdTrackCuts->SetRequireTPCRefit(kTRUE);\r
-    esdTrackCuts->SetRequireITSRefit(kTRUE);\r
-    //esdTrackCuts->SetMinNClustersITS(4); // default is 5\r
-    esdTrackCuts->SetMinNClustersTPC(70);\r
-    esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,\r
-                                          AliESDtrackCuts::kAny); \r
-    // default is kBoth, otherwise kAny\r
-    esdTrackCuts->SetMinDCAToVertexXY(0.);\r
-    esdTrackCuts->SetPtRange(0.7,1.e10);\r
-    \r
-    \r
-    const Int_t nptbins=4;\r
-    Float_t* ptbins;\r
-    ptbins=new Float_t[nptbins+1];\r
-    ptbins[0]=2.;\r
-    ptbins[1]=4.;\r
-    ptbins[2]=6.;\r
-    ptbins[3]=8.;\r
-    ptbins[4]=12.;\r
-    \r
-    \r
-    const Int_t nvars=16;\r
-    \r
-    Float_t** prodcutsval;\r
-    prodcutsval=new Float_t*[nvars];\r
-    for(Int_t ic=0;ic<nvars;ic++){prodcutsval[ic]=new Float_t[nptbins];}  \r
-    for(Int_t ipt=0;ipt<nptbins;ipt++){\r
-      prodcutsval[0][ipt]=0.35;\r
-      prodcutsval[1][ipt]=0.3;\r
-      prodcutsval[2][ipt]=0.3;\r
-      prodcutsval[3][ipt]=0.;\r
-      prodcutsval[4][ipt]=0.;\r
-      prodcutsval[5][ipt]=0.005;\r
-      prodcutsval[6][ipt]=0.06;\r
-      prodcutsval[7][ipt]=0.0;\r
-      prodcutsval[8][ipt]=0.;\r
-      prodcutsval[9][ipt]=0.90;\r
-      prodcutsval[10][ipt]=0.;\r
-      prodcutsval[11][ipt]=1000.0;\r
-      prodcutsval[12][ipt]=0.1;\r
-      prodcutsval[13][ipt]=0.1;\r
-      prodcutsval[14][ipt]=0.;\r
-      prodcutsval[15][ipt]=1.;\r
-      \r
-    }\r
-    \r
-    \r
-    Float_t** anacutsval;\r
-    anacutsval=new Float_t*[nvars];\r
-  \r
-    for(Int_t ic=0;ic<nvars;ic++){anacutsval[ic]=new Float_t[nptbins];}  \r
-    for(Int_t ipt=0;ipt<nptbins;ipt++){\r
-      \r
-      anacutsval[0][ipt]=0.35;\r
-      anacutsval[1][ipt]=0.3;\r
-      anacutsval[2][ipt]=0.3;\r
-      anacutsval[3][ipt]=0.;\r
-      anacutsval[4][ipt]=0.;\r
-      anacutsval[5][ipt]=0.005;\r
-      anacutsval[6][ipt]=0.06;\r
-      anacutsval[7][ipt]=0.0;\r
-      anacutsval[8][ipt]=0.;\r
-      anacutsval[9][ipt]=0.90;\r
-      anacutsval[10][ipt]=0.;\r
-      anacutsval[11][ipt]=1000.0;\r
-      anacutsval[12][ipt]=0.015;\r
-      anacutsval[13][ipt]=0.1;\r
-      anacutsval[14][ipt]=0.;\r
-      anacutsval[15][ipt]=1.;\r
-      \r
-   \r
-    }\r
-    \r
-    \r
-        \r
-    /*    \r
-   \r
-    Cut list                                                rejection condition\r
-    0           "inv. mass [GeV]",                          invmassDS-massDspdg>fCutsRD\r
-    1                  "pTK [GeV/c]",                              pTK<fCutsRd\r
-    2                  "pTPi [GeV/c]",                             pTPi<fCutsRd\r
-    3                  "d0K [cm]",                                 d0K<fCutsRd\r
-    4                  "d0Pi [cm]",                                d0Pi<fCutsRd\r
-    5                  "dist12 [cm]",                              dist12<fCutsRd\r
-    6                  "sigmavert [cm]",                           sigmavert>fCutsRd\r
-    7                  "decLen [cm]",                              decLen<fCutsRD\r
-    8                  "ptMax [GeV/c]",                            ptMax<fCutsRD\r
-    9                  "cosThetaPoint",                            CosThetaPoint<fCutsRD\r
-    10                 "Sum d0^2 (cm^2)",                          sumd0<fCutsRD\r
-    11                 "dca [cm]",                                 dca(i)>fCutsRD\r
-    12                 "inv. mass (Mphi-MKK) [GeV]",               invmass-pdg>fCutsRD\r
-    13                 "inv. mass (MKo*-MKpi) [GeV]"};             invmass-pdg>fCutsRD\r
-    14                 "Abs(CosineKpiPhiRFrame)^3",\r
-       15              "CosPiDsLabFrame"};\r
-    */\r
\r
-    AliRDHFCutsDstoKKpi *prodcuts = new AliRDHFCutsDstoKKpi();\r
-    prodcuts->SetName("ProdCuts");\r
-    prodcuts->SetPtBins(nptbins+1,ptbins);\r
-    prodcuts->SetCuts(nvars,nptbins,prodcutsval);\r
-    \r
-    AliRDHFCutsDstoKKpi* analysiscuts=new AliRDHFCutsDstoKKpi();\r
-    analysiscuts->SetName("AnalysisCuts");\r
-    analysiscuts->SetTitle("Cuts for Ds Analysis and CF");\r
-    analysiscuts->SetPtBins(nptbins+1,ptbins);\r
-    analysiscuts->SetCuts(nvars,nptbins,anacutsval);\r
-    analysiscuts->AddTrackCuts(esdTrackCuts);\r
-    \r
-    TString cent="";\r
-    Float_t mincen=20.;\r
-    Float_t maxcen=40.;\r
-    \r
-    analysiscuts->SetUsePID(kTRUE);\r
-    analysiscuts->SetPidOption(1);\r
-    //analysiscuts->SetUseImpParProdCorrCut(kFALSE);\r
-    analysiscuts->SetOptPileup(kFALSE);\r
-    //analysiscuts->SetUseAOD049(kTRUE);\r
-    analysiscuts->SetMinCentrality(mincen);\r
-    analysiscuts->SetMaxCentrality(maxcen);\r
-    cent=Form("%.0f%.0f",mincen,maxcen);\r
-    analysiscuts->SetUseCentrality(AliRDHFCuts::kCentV0M); //kCentOff,kCentV0M,kCentTRK,kCentTKL,kCentCL1,kCentInvalid              \r
-    analysiscuts->SetMinPtCandidate(3.);\r
-    analysiscuts->SetMaxPtCandidate(1000.);\r
-    analysiscuts->SetRemoveDaughtersFromPrim(kFALSE);\r
-    \r
-    cout<<"This is the odject I'm going to save:"<<nptbins<<endl;\r
-      \r
-    analysiscuts->PrintAll();\r
-    TFile* fout=new TFile("DstoKKpiCuts.root","recreate");   \r
-    fout->cd();\r
-    prodcuts->Write();\r
-    analysiscuts->Write();\r
-    fout->Close();\r
-    \r
-    \r
-}\r
-\r
-\r
-void makeInputAliAnalysisTaskSESignificanceMaximization(){\r
-  \r
-  AliESDtrackCuts* esdTrackCuts=new AliESDtrackCuts();\r
-  esdTrackCuts->SetRequireSigmaToVertex(kFALSE);\r
-  //default\r
-  esdTrackCuts->SetRequireTPCRefit(kTRUE);\r
-  esdTrackCuts->SetRequireITSRefit(kTRUE);\r
-  //esdTrackCuts->SetMinNClustersITS(4); // default is 5\r
-  esdTrackCuts->SetMinNClustersTPC(70);\r
-  esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,\r
-                                          AliESDtrackCuts::kAny); \r
-  // default is kBoth, otherwise kAny\r
-  esdTrackCuts->SetMinDCAToVertexXY(0.);\r
-  esdTrackCuts->SetPtRange(0.3,1.e10);\r
-  \r
-  \r
-  \r
-  AliRDHFCutsDstoKKpi* RDHFDstoKKpi=new AliRDHFCutsDstoKKpi();\r
-  RDHFDstoKKpi->SetName("loosercuts");\r
-  RDHFDstoKKpi->SetTitle("Cuts for significance maximization");\r
-  RDHFDstoKKpi->AddTrackCuts(esdTrackCuts);\r
-  RDHFDstoKKpi->SetUsePID(kTRUE);\r
-  RDHFDstoKKpi->SetPidOption(1);\r
-  RDHFDstoKKpi->SetOptPileup(kTRUE);\r
-  RDHFDstoKKpi->SetRemoveDaughtersFromPrim(kTRUE);\r
-\r
-  const Int_t nvars=16;\r
-\r
-  const Int_t nptbins=4;\r
-  Float_t* ptbins;\r
-  ptbins=new Float_t[nptbins+1];\r
-  ptbins[0]=2.;\r
-  ptbins[1]=4.;\r
-  ptbins[2]=6.;\r
-  ptbins[3]=8.;\r
-  ptbins[4]=12.;\r
-  \r
-  RDHFDstoKKpi->SetPtBins(nptbins+1,ptbins);\r
-    \r
-  //setting my cut values\r
-   \r
-  Float_t** prodcutsval;\r
-  prodcutsval=new Float_t*[nvars];\r
-  for(Int_t ic=0;ic<nvars;ic++){prodcutsval[ic]=new Float_t[nptbins];}  \r
-  for(Int_t ipt=0;ipt<nptbins;ipt++){\r
-    \r
-      prodcutsval[0][ipt]=0.35;\r
-      prodcutsval[1][ipt]=0.3;\r
-      prodcutsval[2][ipt]=0.3;\r
-      prodcutsval[3][ipt]=0.;\r
-      prodcutsval[4][ipt]=0.;\r
-      prodcutsval[5][ipt]=0.005;\r
-      prodcutsval[6][ipt]=0.06;\r
-      prodcutsval[7][ipt]=0.0;\r
-      prodcutsval[8][ipt]=0.;\r
-      prodcutsval[9][ipt]=0.9;\r
-      prodcutsval[10][ipt]=0.;\r
-      prodcutsval[11][ipt]=1000.0;\r
-      prodcutsval[12][ipt]=0.015;\r
-      prodcutsval[13][ipt]=0.1;\r
-      prodcutsval[14][ipt]=0.;\r
-      prodcutsval[15][ipt]=1.;\r
-  \r
-  }\r
-\r
-  RDHFDstoKKpi->SetCuts(nvars,nptbins,prodcutsval);\r
-\r
-  Int_t nvarsforopt=RDHFDstoKKpi->GetNVarsForOpt();\r
-  //Int_t nvarsforopt=2;\r
-  const Int_t dim=4; //set this!!\r
-  Bool_t *boolforopt;\r
-  boolforopt=new Bool_t[nvars];\r
-  if(dim>nvarsforopt){\r
-    cout<<"Number of variables for optimization has probably changed, check and edit accordingly"<<endl;\r
-    return;\r
-  } else {\r
-    if(dim==nvarsforopt){\r
-      boolforopt=RDHFDstoKKpi->GetVarsForOpt();\r
-    }else{\r
-      TString *names;\r
-      names=new TString[nvars];\r
-      TString answer="";\r
-      Int_t checktrue=0;\r
-      names=RDHFDstoKKpi->GetVarNames();\r
-      for(Int_t i=0;i<nvars;i++){\r
-       cout<<names[i]<<" for opt? (y/n)"<<endl;\r
-       cin>>answer;\r
-       if(answer=="y") {\r
-         boolforopt[i]=kTRUE;\r
-         checktrue++;\r
-       }\r
-       else boolforopt[i]=kFALSE;\r
-      }\r
-      if (checktrue!=dim) {\r
-       cout<<"Error! You set "<<checktrue<<" kTRUE instead of "<<dim<<endl;\r
-       return;\r
-      }\r
-      RDHFDstoKKpi->SetVarsForOpt(dim,boolforopt);\r
-    }\r
-  }\r
-\r
-\r
-  Float_t tighterval[dim][nptbins];\r
\r
-  //number of steps for each variable is 4 now\r
-  //set this!!\r
-  \r
-  /*    \r
-   Cut list                                                rejection condition\r
-\r
-   0           "inv. mass [GeV]",                          invmassDS-massDspdg>fCutsRD\r
-   1                   "pTK [GeV/c]",                              pTK<fCutsRd\r
-   2                   "pTPi [GeV/c]",                             pTPi<fCutsRd\r
-   3                   "d0K [cm]",                                 d0K<fCutsRd\r
-   4                   "d0Pi [cm]",                                d0Pi<fCutsRd\r
-   5                   "dist12 [cm]",                              dist12<fCutsRd\r
-   6                   "sigmavert [cm]",                           sigmavert>fCutsRd\r
-   7                   "decLen [cm]",                              decLen<fCutsRD\r
-   8                   "ptMax [GeV/c]",                            ptMax<fCutsRD\r
-   9                   "cosThetaPoint",                            CosThetaPoint<fCutsRD\r
-   10                  "Sum d0^2 (cm^2)",                          sumd0<fCutsRD\r
-   11                  "dca [cm]",                                 dca(i)>fCutsRD\r
-   12                  "inv. mass (Mphi-MKK) [GeV]",               invmass-pdg>fCutsRD\r
-   13                  "inv. mass (MKo*-MKpi) [GeV]"};             invmass-pdg>fCutsRD\r
-   14                  "Abs(CosineKpiPhiRFrame)^3",\r
-   15                  "CosPiDsLabFrame"}\r
-   */  \r
-  \r
-  //sigmavert [cm]\r
-  \r
-   \r
-  tighterval[0][0]=0.0;\r
-  tighterval[0][1]=0.0;\r
-  tighterval[0][2]=0.0;\r
-  tighterval[0][3]=0.0;\r
\r
-  //decay length\r
-  \r
-  tighterval[1][0]=0.05;\r
-  tighterval[1][1]=0.05;\r
-  tighterval[1][2]=0.05;\r
-  tighterval[1][3]=0.05;\r
\r
-  //costhetapoint\r
-  \r
-  tighterval[2][0]=1.;\r
-  tighterval[2][1]=1.;\r
-  tighterval[2][2]=1.;\r
-  tighterval[2][3]=1.;\r
-  \r
-  \r
-  //inv mass phi meson\r
-  \r
-  tighterval[3][0]=0.;\r
-  tighterval[3][1]=0.;\r
-  tighterval[3][2]=0.;\r
-  tighterval[3][3]=0.;\r
-\r
-  TString name=""; \r
-  Int_t arrdim=dim*nptbins;\r
-  TClonesArray max("TParameter<float>",arrdim);\r
-  for (Int_t ipt=0;ipt<nptbins;ipt++){\r
-    for(Int_t ival=0;ival<dim;ival++){\r
-      name=Form("par%dptbin%d",ival,ipt);\r
-      new(max[ipt*dim+ival])TParameter<float>(name.Data(),tighterval[ival][ipt]);\r
-    }\r
-  }\r
-\r
-  TFile* fout=new TFile("cuts4SignifMaximDs.root","recreate");   //set this!! \r
-  fout->cd();\r
-  RDHFDstoKKpi->Write();\r
-  max.Write();\r
-  fout->Close();\r
-\r
-}\r
+#include <Riostream.h>
+#include <TFile.h>
+//#include <AliRDHFCutsDstoKKpi.h>
+#include <TClonesArray.h>
+#include <TParameter.h>
+
+//macro to make a .root file which contains an AliRDHFCutsDstoKKpi with loose set of cuts (for significance maximization) and TParameter with the tighest value of these cuts
+//Needed for AliAnalysisTaskSEDs, AliCFTaskVertexingHF3Prong, AliAnalysisTaskSESignificance
+
+//Use:
+//Set hard coded commented with //set this!!
+
+//.L makeTFile4CutsDstoKKpi.C
+// makeInputAliAnalysisTaskSEDs()
+// makeInputAliAnalysisTaskSESignificanceMaximization()
+
+//similar macros for the other D mesons
+
+//Author: Chiara Bianchin, cbianchi@pd.infn.it
+//        Giacomo Ortona, ortona@to.infn.it
+//        Renu Bala [Dplus Analysis and CF]
+
+//Modified for Ds meson: G.M. Innocenti, innocent@to.infn.it
+
+void makeInputAliAnalysisTaskSEDsPP(){
+
+ //  gSystem->SetIncludePath("-I. -I$ROOTSYS/include -I$ALICE_ROOT -I$ALICE_ROOT/include -I$ALICE_ROOT/ITS -I$ALICE_ROOT/TPC -I$ALICE_ROOT/CONTAINERS -I$ALICE_ROOT/STEER -I$ALICE_ROOT/TRD -I$ALICE_ROOT/macros -I$ALICE_ROOT/ANALYSIS -I$ALICE_ROOT/PWG3 -I$ALICE_ROOT/PWG3/vertexingHF -I$ALICE_ROOT/PWG3/vertexingH/macros -g"); 
+
+    
+    AliESDtrackCuts* esdTrackCuts=new AliESDtrackCuts();
+    esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
+    //default
+    esdTrackCuts->SetRequireTPCRefit(kTRUE);
+    esdTrackCuts->SetRequireITSRefit(kTRUE);
+    //esdTrackCuts->SetMinNClustersITS(4); // default is 5
+    esdTrackCuts->SetMinNClustersTPC(70);
+    esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,
+                                          AliESDtrackCuts::kAny); 
+    // default is kBoth, otherwise kAny
+    esdTrackCuts->SetMinDCAToVertexXY(0.);
+    esdTrackCuts->SetPtRange(0.3,1.e10);
+    
+    
+    const Int_t nptbins=4;
+    Float_t* ptbins;
+    ptbins=new Float_t[nptbins+1];
+    ptbins[0]=2.;
+    ptbins[1]=4.;
+    ptbins[2]=6.;
+    ptbins[3]=8.;
+    ptbins[4]=12.;
+    
+    
+    const Int_t nvars=16;
+    
+    Float_t** anacutsval;
+    anacutsval=new Float_t*[nvars];
+  
+    for(Int_t ic=0;ic<nvars;ic++){anacutsval[ic]=new Float_t[nptbins];}  
+    for(Int_t ipt=0;ipt<nptbins;ipt++){
+      
+      anacutsval[0][ipt]=0.35;
+      anacutsval[1][ipt]=0.3;
+      anacutsval[2][ipt]=0.3;
+      anacutsval[3][ipt]=0.;
+      anacutsval[4][ipt]=0.;
+      anacutsval[5][ipt]=0.005;
+      anacutsval[6][ipt]=0.06;
+      anacutsval[7][ipt]=0.0;
+      anacutsval[8][ipt]=0.;
+      anacutsval[9][ipt]=0.9;
+      anacutsval[10][ipt]=0.;
+      anacutsval[11][ipt]=1000.0;
+      anacutsval[12][ipt]=0.015;
+      anacutsval[13][ipt]=0.1;
+      anacutsval[14][ipt]=0.;
+      anacutsval[15][ipt]=1.;
+      
+   
+    }
+    
+    
+        
+    /*    
+   
+    Cut list                                                rejection condition
+    0           "inv. mass [GeV]",                          invmassDS-massDspdg>fCutsRD
+    1                  "pTK [GeV/c]",                              pTK<fCutsRd
+    2                  "pTPi [GeV/c]",                             pTPi<fCutsRd
+    3                  "d0K [cm]",                                 d0K<fCutsRd
+    4                  "d0Pi [cm]",                                d0Pi<fCutsRd
+    5                  "dist12 [cm]",                              dist12<fCutsRd
+    6                  "sigmavert [cm]",                           sigmavert>fCutsRd
+    7                  "decLen [cm]",                              decLen<fCutsRD
+    8                  "ptMax [GeV/c]",                            ptMax<fCutsRD
+    9                  "cosThetaPoint",                            CosThetaPoint<fCutsRD
+    10                 "Sum d0^2 (cm^2)",                          sumd0<fCutsRD
+    11                 "dca [cm]",                                 dca(i)>fCutsRD
+    12                 "inv. mass (Mphi-MKK) [GeV]",               invmass-pdg>fCutsRD
+    13                 "inv. mass (MKo*-MKpi) [GeV]"};             invmass-pdg>fCutsRD
+    14                 "Abs(CosineKpiPhiRFrame)^3",
+       15              "CosPiDsLabFrame"};
+    */
+    
+    AliRDHFCutsDstoKKpi* analysiscuts=new AliRDHFCutsDstoKKpi();
+    analysiscuts->SetName("AnalysisCuts");
+    analysiscuts->SetTitle("Cuts for Ds Analysis and CF");
+    analysiscuts->SetPtBins(nptbins+1,ptbins);
+    analysiscuts->SetCuts(nvars,nptbins,anacutsval);
+    analysiscuts->AddTrackCuts(esdTrackCuts);
+    analysiscuts->SetUsePID(kTRUE);
+    analysiscuts->SetPidOption(1);
+    analysiscuts->SetOptPileup(kTRUE);
+    analysiscuts->SetRemoveDaughtersFromPrim(kTRUE);
+    cout<<"This is the odject I'm going to save:"<<nptbins<<endl;
+    
+    analysiscuts->PrintAll();
+    TFile* fout=new TFile("DstoKKpiCuts.root","recreate");   
+    fout->cd();
+    analysiscuts->Write();
+    fout->Close();
+    
+    
+}
+
+
+void makeInputAliAnalysisTaskSEDsPbPb(){
+
+ //  gSystem->SetIncludePath("-I. -I$ROOTSYS/include -I$ALICE_ROOT -I$ALICE_ROOT/include -I$ALICE_ROOT/ITS -I$ALICE_ROOT/TPC -I$ALICE_ROOT/CONTAINERS -I$ALICE_ROOT/STEER -I$ALICE_ROOT/TRD -I$ALICE_ROOT/macros -I$ALICE_ROOT/ANALYSIS -I$ALICE_ROOT/PWG3 -I$ALICE_ROOT/PWG3/vertexingHF -I$ALICE_ROOT/PWG3/vertexingH/macros -g"); 
+
+    
+    AliESDtrackCuts* esdTrackCuts=new AliESDtrackCuts();
+    esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
+    //default
+    esdTrackCuts->SetRequireTPCRefit(kTRUE);
+    esdTrackCuts->SetRequireITSRefit(kTRUE);
+    //esdTrackCuts->SetMinNClustersITS(4); // default is 5
+    esdTrackCuts->SetMinNClustersTPC(70);
+    esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,
+                                          AliESDtrackCuts::kAny); 
+    // default is kBoth, otherwise kAny
+    esdTrackCuts->SetMinDCAToVertexXY(0.);
+    esdTrackCuts->SetPtRange(0.7,1.e10);
+    
+    
+    const Int_t nptbins=4;
+    Float_t* ptbins;
+    ptbins=new Float_t[nptbins+1];
+    ptbins[0]=2.;
+    ptbins[1]=4.;
+    ptbins[2]=6.;
+    ptbins[3]=8.;
+    ptbins[4]=12.;
+    
+    
+    const Int_t nvars=16;
+    
+    Float_t** anacutsval;
+    anacutsval=new Float_t*[nvars];
+  
+    for(Int_t ic=0;ic<nvars;ic++){anacutsval[ic]=new Float_t[nptbins];}  
+    for(Int_t ipt=0;ipt<nptbins;ipt++){
+      
+      anacutsval[0][ipt]=0.35;
+      anacutsval[1][ipt]=0.3;
+      anacutsval[2][ipt]=0.3;
+      anacutsval[3][ipt]=0.;
+      anacutsval[4][ipt]=0.;
+      anacutsval[5][ipt]=0.005;
+      anacutsval[6][ipt]=0.06;
+      anacutsval[7][ipt]=0.0;
+      anacutsval[8][ipt]=0.;
+      anacutsval[9][ipt]=0.7;
+      anacutsval[10][ipt]=0.;
+      anacutsval[11][ipt]=1000.0;
+      anacutsval[12][ipt]=0.1;
+      anacutsval[13][ipt]=0.1;
+      anacutsval[14][ipt]=0.;
+      anacutsval[15][ipt]=1.;
+      
+   
+    }
+    
+    
+        
+    /*    
+   
+    Cut list                                                rejection condition
+    0           "inv. mass [GeV]",                          invmassDS-massDspdg>fCutsRD
+    1                  "pTK [GeV/c]",                              pTK<fCutsRd
+    2                  "pTPi [GeV/c]",                             pTPi<fCutsRd
+    3                  "d0K [cm]",                                 d0K<fCutsRd
+    4                  "d0Pi [cm]",                                d0Pi<fCutsRd
+    5                  "dist12 [cm]",                              dist12<fCutsRd
+    6                  "sigmavert [cm]",                           sigmavert>fCutsRd
+    7                  "decLen [cm]",                              decLen<fCutsRD
+    8                  "ptMax [GeV/c]",                            ptMax<fCutsRD
+    9                  "cosThetaPoint",                            CosThetaPoint<fCutsRD
+    10                 "Sum d0^2 (cm^2)",                          sumd0<fCutsRD
+    11                 "dca [cm]",                                 dca(i)>fCutsRD
+    12                 "inv. mass (Mphi-MKK) [GeV]",               invmass-pdg>fCutsRD
+    13                 "inv. mass (MKo*-MKpi) [GeV]"};             invmass-pdg>fCutsRD
+    14                 "Abs(CosineKpiPhiRFrame)^3",
+       15              "CosPiDsLabFrame"};
+    */
+    
+    AliRDHFCutsDstoKKpi* analysiscuts=new AliRDHFCutsDstoKKpi();
+    analysiscuts->SetName("AnalysisCuts");
+    analysiscuts->SetTitle("Cuts for Ds Analysis and CF");
+    analysiscuts->SetPtBins(nptbins+1,ptbins);
+    analysiscuts->SetCuts(nvars,nptbins,anacutsval);
+    analysiscuts->AddTrackCuts(esdTrackCuts);
+    
+    TString cent="";
+    Float_t mincen=20.;
+    Float_t maxcen=40.;
+    
+    analysiscuts->SetUsePID(kTRUE);
+    analysiscuts->SetPidOption(0);
+    //analysiscuts->SetUseImpParProdCorrCut(kFALSE);
+    analysiscuts->SetOptPileup(kFALSE);
+    //analysiscuts->SetUseAOD049(kTRUE);
+    analysiscuts->SetMinCentrality(mincen);
+    analysiscuts->SetMaxCentrality(maxcen);
+    cent=Form("%.0f%.0f",mincen,maxcen);
+    analysiscuts->SetUseCentrality(AliRDHFCuts::kCentV0M); //kCentOff,kCentV0M,kCentTRK,kCentTKL,kCentCL1,kCentInvalid              
+    analysiscuts->SetMinPtCandidate(3.);
+    analysiscuts->SetMaxPtCandidate(1000.);
+    analysiscuts->SetRemoveDaughtersFromPrim(kFALSE);
+    
+    cout<<"This is the odject I'm going to save:"<<nptbins<<endl;
+      
+    analysiscuts->PrintAll();
+    TFile* fout=new TFile("DstoKKpiCuts.root","recreate");   
+    fout->cd();
+    analysiscuts->Write();
+    fout->Close();
+    
+    
+}
+
+
+void makeInputAliAnalysisTaskSESignificanceMaximization(){
+  
+  AliESDtrackCuts* esdTrackCuts=new AliESDtrackCuts();
+  esdTrackCuts->SetRequireSigmaToVertex(kFALSE);
+  //default
+  esdTrackCuts->SetRequireTPCRefit(kTRUE);
+  esdTrackCuts->SetRequireITSRefit(kTRUE);
+  //esdTrackCuts->SetMinNClustersITS(4); // default is 5
+  esdTrackCuts->SetMinNClustersTPC(70);
+  esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,
+                                          AliESDtrackCuts::kAny); 
+  // default is kBoth, otherwise kAny
+  esdTrackCuts->SetMinDCAToVertexXY(0.);
+  esdTrackCuts->SetPtRange(0.3,1.e10);
+  
+  
+  
+  AliRDHFCutsDstoKKpi* RDHFDstoKKpi=new AliRDHFCutsDstoKKpi();
+  RDHFDstoKKpi->SetName("loosercuts");
+  RDHFDstoKKpi->SetTitle("Cuts for significance maximization");
+  RDHFDstoKKpi->AddTrackCuts(esdTrackCuts);
+  RDHFDstoKKpi->SetUsePID(kTRUE);
+  RDHFDstoKKpi->SetPidOption(1);
+  RDHFDstoKKpi->SetOptPileup(kTRUE);
+  RDHFDstoKKpi->SetRemoveDaughtersFromPrim(kTRUE);
+
+  const Int_t nvars=16;
+
+  const Int_t nptbins=4;
+  Float_t* ptbins;
+  ptbins=new Float_t[nptbins+1];
+  ptbins[0]=2.;
+  ptbins[1]=4.;
+  ptbins[2]=6.;
+  ptbins[3]=8.;
+  ptbins[4]=12.;
+  
+  RDHFDstoKKpi->SetPtBins(nptbins+1,ptbins);
+    
+  //setting my cut values
+   
+  Float_t** prodcutsval;
+  prodcutsval=new Float_t*[nvars];
+  for(Int_t ic=0;ic<nvars;ic++){prodcutsval[ic]=new Float_t[nptbins];}  
+  for(Int_t ipt=0;ipt<nptbins;ipt++){
+    
+      prodcutsval[0][ipt]=0.35;
+      prodcutsval[1][ipt]=0.3;
+      prodcutsval[2][ipt]=0.3;
+      prodcutsval[3][ipt]=0.;
+      prodcutsval[4][ipt]=0.;
+      prodcutsval[5][ipt]=0.005;
+      prodcutsval[6][ipt]=0.06;
+      prodcutsval[7][ipt]=0.0;
+      prodcutsval[8][ipt]=0.;
+      prodcutsval[9][ipt]=0.9;
+      prodcutsval[10][ipt]=0.;
+      prodcutsval[11][ipt]=1000.0;
+      prodcutsval[12][ipt]=0.015;
+      prodcutsval[13][ipt]=0.1;
+      prodcutsval[14][ipt]=0.;
+      prodcutsval[15][ipt]=1.;
+  
+  }
+
+  RDHFDstoKKpi->SetCuts(nvars,nptbins,prodcutsval);
+
+  Int_t nvarsforopt=RDHFDstoKKpi->GetNVarsForOpt();
+  //Int_t nvarsforopt=2;
+  const Int_t dim=4; //set this!!
+  Bool_t *boolforopt;
+  boolforopt=new Bool_t[nvars];
+  if(dim>nvarsforopt){
+    cout<<"Number of variables for optimization has probably changed, check and edit accordingly"<<endl;
+    return;
+  } else {
+    if(dim==nvarsforopt){
+      boolforopt=RDHFDstoKKpi->GetVarsForOpt();
+    }else{
+      TString *names;
+      names=new TString[nvars];
+      TString answer="";
+      Int_t checktrue=0;
+      names=RDHFDstoKKpi->GetVarNames();
+      for(Int_t i=0;i<nvars;i++){
+       cout<<names[i]<<" for opt? (y/n)"<<endl;
+       cin>>answer;
+       if(answer=="y") {
+         boolforopt[i]=kTRUE;
+         checktrue++;
+       }
+       else boolforopt[i]=kFALSE;
+      }
+      if (checktrue!=dim) {
+       cout<<"Error! You set "<<checktrue<<" kTRUE instead of "<<dim<<endl;
+       return;
+      }
+      RDHFDstoKKpi->SetVarsForOpt(dim,boolforopt);
+    }
+  }
+
+
+  Float_t tighterval[dim][nptbins];
+  //number of steps for each variable is 4 now
+  //set this!!
+  
+  /*    
+   Cut list                                                rejection condition
+
+   0           "inv. mass [GeV]",                          invmassDS-massDspdg>fCutsRD
+   1                   "pTK [GeV/c]",                              pTK<fCutsRd
+   2                   "pTPi [GeV/c]",                             pTPi<fCutsRd
+   3                   "d0K [cm]",                                 d0K<fCutsRd
+   4                   "d0Pi [cm]",                                d0Pi<fCutsRd
+   5                   "dist12 [cm]",                              dist12<fCutsRd
+   6                   "sigmavert [cm]",                           sigmavert>fCutsRd
+   7                   "decLen [cm]",                              decLen<fCutsRD
+   8                   "ptMax [GeV/c]",                            ptMax<fCutsRD
+   9                   "cosThetaPoint",                            CosThetaPoint<fCutsRD
+   10                  "Sum d0^2 (cm^2)",                          sumd0<fCutsRD
+   11                  "dca [cm]",                                 dca(i)>fCutsRD
+   12                  "inv. mass (Mphi-MKK) [GeV]",               invmass-pdg>fCutsRD
+   13                  "inv. mass (MKo*-MKpi) [GeV]"};             invmass-pdg>fCutsRD
+   14                  "Abs(CosineKpiPhiRFrame)^3",
+   15                  "CosPiDsLabFrame"}
+   */  
+  
+  //sigmavert [cm]
+  
+   
+  tighterval[0][0]=0.0;
+  tighterval[0][1]=0.0;
+  tighterval[0][2]=0.0;
+  tighterval[0][3]=0.0;
+  //decay length
+  
+  tighterval[1][0]=0.05;
+  tighterval[1][1]=0.05;
+  tighterval[1][2]=0.05;
+  tighterval[1][3]=0.05;
+  //costhetapoint
+  
+  tighterval[2][0]=1.;
+  tighterval[2][1]=1.;
+  tighterval[2][2]=1.;
+  tighterval[2][3]=1.;
+  
+  
+  //inv mass phi meson
+  
+  tighterval[3][0]=0.;
+  tighterval[3][1]=0.;
+  tighterval[3][2]=0.;
+  tighterval[3][3]=0.;
+
+  TString name=""; 
+  Int_t arrdim=dim*nptbins;
+  TClonesArray max("TParameter<float>",arrdim);
+  for (Int_t ipt=0;ipt<nptbins;ipt++){
+    for(Int_t ival=0;ival<dim;ival++){
+      name=Form("par%dptbin%d",ival,ipt);
+      new(max[ipt*dim+ival])TParameter<float>(name.Data(),tighterval[ival][ipt]);
+    }
+  }
+
+  TFile* fout=new TFile("cuts4SignifMaximDs.root","recreate");   //set this!! 
+  fout->cd();
+  RDHFDstoKKpi->Write();
+  max.Write();
+  fout->Close();
+
+}