-AliAnalysisTaskSEDs *AddTaskDs(Bool_t readMC=kTRUE)
+AliAnalysisTaskSEDs *AddTaskDs(Bool_t readMC=kFALSE,
+ TString filename="DstoKKpiCuts.root")
{
- //
+ //
// Test macro for the AliAnalysisTaskSE for Ds candidates
+ //Invariant mass histogram and
+ // association with MC truth (using MC info in AOD)
+ // Origin: R. Bala, bala@to.infn.it
+ // Modified for Ds meson: G.M. Innocenti innocent@to.infn.it
+ // Get the pointer to the existing analysis manager via the static access method.
+ //==============================================================================
AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
if (!mgr) {
::Error("AddTaskDs", "No analysis manager to connect to.");
- return NULL;
}
-
- //ptbins
- const Int_t nptbins=4;
- Float_t ptbins[nptbins+1]={0.,2.,3.,5.,99999.};
-
- //setting cut values
- Int_t nvars=14;
- Float_t** ancutsval;
- ancutsval=new Float_t*[nvars];
- for(Int_t ic=0;ic<nvars;ic++){ancutsval[ic]=new Float_t[nptbins];}
- for(Int_t ipt=0;ipt<nptbins;ipt++){
- ancutsval[0][ipt]=0.2;
- ancutsval[1][ipt]=0.4;
- ancutsval[2][ipt]=0.4;
- ancutsval[3][ipt]=0.;
- ancutsval[4][ipt]=0.;
- ancutsval[5][ipt]=0.005;
- ancutsval[6][ipt]=0.038;
- ancutsval[7][ipt]=0.;
- ancutsval[8][ipt]=0.;
- ancutsval[9][ipt]=0.95;
- ancutsval[10][ipt]=0.;
- ancutsval[11][ipt]=0.1;
- ancutsval[12][ipt]=0.004;
- ancutsval[13][ipt]=0.035;
- }
- Float_t** prcutsval;
- prcutsval=new Float_t*[nvars];
- for(Int_t ic=0;ic<nvars;ic++){prcutsval[ic]=new Float_t[nptbins];}
- for(Int_t ipt=0;ipt<nptbins;ipt++){
- prcutsval[0][ipt]=0.2;
- prcutsval[1][ipt]=0.4;
- prcutsval[2][ipt]=0.4;
- prcutsval[3][ipt]=0.;
- prcutsval[4][ipt]=0.;
- prcutsval[5][ipt]=0.005;
- prcutsval[6][ipt]=0.06;
- prcutsval[7][ipt]=0.;
- prcutsval[8][ipt]=0.;
- prcutsval[9][ipt]=0.85;
- prcutsval[10][ipt]=0.;
- prcutsval[11][ipt]=0.1;
- prcutsval[12][ipt]=0.1;
- prcutsval[13][ipt]=0.1;
+ TFile* filecuts=new TFile(filename.Data());
+ if(!filecuts->IsOpen()){
+ cout<<"Error: Input file not found!"<<endl;
}
+
+
+ //Analysis Task
- //Analysis cuts
- AliRDHFCutsDstoKKpi *analysiscuts = new AliRDHFCutsDstoKKpi();
- analysiscuts->SetPtBins(nptbins+1,ptbins);
- analysiscuts->SetCuts(nvars,nptbins,ancutsval);
- AliRDHFCutsDstoKKpi *prodcuts = new AliRDHFCutsDstoKKpi();
- prodcuts->SetPtBins(nptbins+1,ptbins);
- prodcuts->SetCuts(nvars,nptbins,prcutsval);
+
+ AliRDHFCutsDstoKKpi* analysiscuts=new AliRDHFCutsDstoKKpi();
+ analysiscuts = (AliRDHFCutsDstoKKpi*)filecuts->Get("AnalysisCuts");
- // Analysis task
+ AliRDHFCutsDstoKKpi* prodcuts=new AliRDHFCutsDstoKKpi();
+ prodcuts = (AliRDHFCutsDstoKKpi*)filecuts->Get("ProdCuts");
+
+ //AliRDHFCutsDstoKKpi *prodcuts = (AliRDHFCutsDstoKKpi*)fileCuts->Get("ProdCuts");
+ //AliRDHFCutsDstoKKpi *analysiscuts = (AliRDHFCutsDstoKKpi*)fileCuts->Get("AnalysisCuts");
+
+
AliAnalysisTaskSEDs *dsTask = new AliAnalysisTaskSEDs("DsAnalysis",prodcuts,analysiscuts);
dsTask->SetReadMC(readMC);
- dsTask->SetDebugLevel(0);
+ //dsTask->SetDoLikeSign(kTRUE);
+ // dsTask->SetUseTPCpid(kTRUE);
+ //dsTask->SetUseTOFpid(kTRUE);
+ dsTask->SetDebugLevel(10);
+ //dsTask->SetMassLimits(0.2);
mgr->AddTask(dsTask);
-
- //
- // Create containers for input/output
+
+ // Create containers for input/output
+
AliAnalysisDataContainer *cinputDs = mgr->CreateContainer("cinputDs",TChain::Class(),
- AliAnalysisManager::kInputContainer);
-
- TString outputfile = AliAnalysisManager::GetCommonFileName();
- outputfile += ":PWG3_D2H_InvMassDs";
-
- AliAnalysisDataContainer *coutputDsCuts = mgr->CreateContainer("coutputDsCuts",TList::Class(),
- AliAnalysisManager::kOutputContainer,
- outputfile.Data());
-
-
+ AliAnalysisManager::kInputContainer);
+ TString outputfile = AliAnalysisManager::GetCommonFileName();
+ outputfile += ":PWG3_D2H_InvMassDs";
+
+ AliAnalysisDataContainer *coutputDsCuts = mgr->CreateContainer("coutputDsCuts",TList::Class(),
+ AliAnalysisManager::kOutputContainer,
+ outputfile.Data());
+
AliAnalysisDataContainer *coutputDs = mgr->CreateContainer("coutputDs",TList::Class(),
- AliAnalysisManager::kOutputContainer,
- outputfile.Data());
-
-
+ AliAnalysisManager::kOutputContainer,
+ outputfile.Data());
+ AliAnalysisDataContainer *coutputDsNorm = mgr->CreateContainer("coutputDsNorm",AliNormalizationCounter::Class(),
+ AliAnalysisManager::kOutputContainer,
+ outputfile.Data());
+
mgr->ConnectInput(dsTask,0,mgr->GetCommonInputContainer());
-
+
mgr->ConnectOutput(dsTask,1,coutputDs);
-
+
mgr->ConnectOutput(dsTask,2,coutputDsCuts);
+
+ mgr->ConnectOutput(dsTask,3,coutputDsNorm);
+
return dsTask;
}
--- /dev/null
+#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 makeInputAliAnalysisTaskSEDs(){
+
+ // 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]=0.;
+ ptbins[1]=2.;
+ ptbins[2]=3.;
+ ptbins[3]=5.;
+ ptbins[4]=99999.;
+ const Int_t nvars=14;
+
+ // Float_t cutsArrayDstoKKpi[14]={0.2,0.3,0.3,0.,0.,0.005,0.06,0.,0.,0.7,0.,1000.,0.1,0.1};
+
+ 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.2;
+ 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.7;
+ prodcutsval[10][ipt]=0.;
+ prodcutsval[11][ipt]=1000.0;
+ prodcutsval[12][ipt]=0.1;
+ prodcutsval[13][ipt]=0.1;
+ }
+
+
+ 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.2;
+ anacutsval[1][ipt]=0.4;
+ anacutsval[2][ipt]=0.4;
+ anacutsval[3][ipt]=0.;
+ anacutsval[4][ipt]=0.;
+ anacutsval[5][ipt]=0.005;
+ anacutsval[6][ipt]=0.038;
+ anacutsval[7][ipt]=0.;
+ anacutsval[8][ipt]=0.;
+ anacutsval[9][ipt]=0.95;
+ anacutsval[10][ipt]=0.;
+ anacutsval[11][ipt]=0.1;
+ anacutsval[12][ipt]=0.004;
+ anacutsval[13][ipt]=0.035;
+ }
+
+ AliRDHFCutsDstoKKpi *prodcuts = new AliRDHFCutsDstoKKpi();
+ prodcuts->SetName("ProdCuts");
+ prodcuts->SetPtBins(nptbins+1,ptbins);
+ prodcuts->SetCuts(nvars,nptbins,prodcutsval);
+
+
+ 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(kFALSE);
+ cout<<"This is the odject I'm going to save:"<<nptbins<<endl;
+
+ analysiscuts->PrintAll();
+ TFile* fout=new TFile("DstoKKpiCuts.root","recreate");
+ fout->cd();
+ prodcuts->Write();
+ analysiscuts->Write();
+ fout->Close();
+
+
+}
+
+
+void makeInputAliAnalysisTaskSESignificanceMaximization(){
+
+ AliRDHFCutsDstoKKpi* RDHFDstoKKpi=new AliRDHFCutsDstoKKpi();
+ RDHFDstoKKpi->SetName("loosercuts");
+ RDHFDstoKKpi->SetTitle("Cuts for significance maximization");
+
+ 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);
+
+ RDHFDstoKKpi->AddTrackCuts(esdTrackCuts);
+
+ const Int_t nvars=14;
+
+ const Int_t nptbins=4;
+ Float_t* ptbins;
+ ptbins=new Float_t[nptbins+1];
+ ptbins[0]=0.;
+ ptbins[1]=2.;
+ ptbins[2]=3.;
+ ptbins[3]=5.;
+ ptbins[4]=99999.;
+
+ 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.2;
+ prodcutsval[1][ipt]=0.4;
+ prodcutsval[2][ipt]=0.4;
+ prodcutsval[3][ipt]=0.;
+ prodcutsval[4][ipt]=0.;
+ prodcutsval[5][ipt]=0.005;
+ prodcutsval[6][ipt]=0.03;
+ prodcutsval[7][ipt]=0.1;
+ prodcutsval[8][ipt]=0.5;
+ prodcutsval[9][ipt]=0.9;
+ prodcutsval[10][ipt]=0.;
+ prodcutsval[11][ipt]=1000.0;
+ prodcutsval[12][ipt]=0.02;
+ prodcutsval[13][ipt]=0.1;
+ }
+
+ RDHFDstoKKpi->SetCuts(nvars,nptbins,prodcutsval);
+
+ Int_t nvarsforopt=RDHFDstoKKpi->GetNVarsForOpt();
+ const Int_t dim=3; //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];
+ //sigmavert
+ //costhetapoint
+ //inv. mass (Mphi-MKK)
+
+ //number of steps for each variable is 4 now
+ //set this!!
+
+ // tighterval[var][ptbin]
+ tighterval[0][0]=0.02;
+ tighterval[0][1]=0.02;
+ tighterval[0][2]=0.02;
+ tighterval[0][3]=0.02;
+
+ tighterval[1][0]=1.;
+ tighterval[1][1]=1.;
+ tighterval[1][2]=1.;
+ tighterval[1][3]=1.;
+
+ tighterval[2][0]=0.004;
+ tighterval[2][1]=0.004;
+ tighterval[2][2]=0.004;
+ tighterval[2][3]=0.004;
+
+
+ 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();
+
+}