#include #include #include #include #include #include //Use: //Set hard coded commentet with //set this!! // root[] .L makeInput...C++ // root[] makeInputAliAnalysisTaskSE...() //similar macros for the other D mesons //Author: Rosa Romita, r.romita@gsi.de //macro to make a .root file which contains an AliRDHFCutsLctopKpi for AliAnalysisTaskSELambdac task void makeInputAliAnalysisTaskSELctopKpi(){ AliRDHFCutsLctopKpi* RDHFLctopKpiProd=new AliRDHFCutsLctopKpi(); RDHFLctopKpiProd->SetName("LctopKpiProdCuts"); RDHFLctopKpiProd->SetTitle("Production cuts for Lc analysis"); AliRDHFCutsLctopKpi* RDHFLctopKpiAn=new AliRDHFCutsLctopKpi(); RDHFLctopKpiAn->SetName("LctopKpiAnalysisCuts"); RDHFLctopKpiAn->SetTitle("Analysis cuts for Lc analysis"); 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); RDHFLctopKpiProd->AddTrackCuts(esdTrackCuts); RDHFLctopKpiAn->AddTrackCuts(esdTrackCuts); const Int_t nvars=13; 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]=4.; ptbins[4]=12.; Float_t** prodcutsval; prodcutsval=new Float_t*[nvars]; for(Int_t iv=0;ivSetPtBins(nptbins+1,ptbins); RDHFLctopKpiProd->SetCuts(nvars,nptbins,prodcutsval); Float_t** anacutsval; anacutsval=new Float_t*[nvars]; for(Int_t ic=0;icSetPtBins(nptbins+1,ptbins); RDHFLctopKpiAn->SetCuts(nvars,nptbins,anacutsval); // RDHFLc->SetRecoKF(); //set this if you want to recompute the secondary vertex with the KF package //pid settings //1. kaon: default one AliAODPidHF* pidObjK=new AliAODPidHF(); Double_t sigmasK[5]={3.,1.,1.,3.,2.}; pidObjK->SetSigma(sigmasK); pidObjK->SetAsym(kTRUE); pidObjK->SetMatch(1); pidObjK->SetTPC(kTRUE); pidObjK->SetTOF(kTRUE); pidObjK->SetITS(kTRUE); Double_t plimK[2]={0.5,0.8}; pidObjK->SetPLimit(plimK,2); pidObjK->SetTOFdecide(kTRUE); RDHFLctopKpiProd->SetPidHF(pidObjK); RDHFLctopKpiAn->SetPidHF(pidObjK); //2. pion AliAODPidHF* pidObjpi=new AliAODPidHF(); pidObjpi->SetTPC(kTRUE); Double_t sigmaspi[5]={3.,0.,0.,0.,0.}; pidObjpi->SetSigma(sigmaspi); // pidObjpi->SetTOFdecide(kTRUE); RDHFLctopKpiProd->SetPidpion(pidObjpi); RDHFLctopKpiAn->SetPidpion(pidObjpi); // 3. proton AliAODPidHF* pidObjp=new AliAODPidHF(); Double_t sigmasp[5]={3.,1.,1.,3.,2.}; pidObjp->SetSigma(sigmasp); pidObjp->SetAsym(kTRUE); pidObjp->SetMatch(1); pidObjp->SetTPC(kTRUE); pidObjp->SetTOF(kTRUE); pidObjp->SetITS(kTRUE); Double_t plimp[2]={1.,2.}; pidObjp->SetPLimit(plimp,2); pidObjp->SetTOFdecide(kTRUE); RDHFLctopKpiProd->SetPidprot(pidObjp); RDHFLctopKpiAn->SetPidprot(pidObjp); Bool_t pidflag=kTRUE; RDHFLctopKpiAn->SetUsePID(pidflag); RDHFLctopKpiProd->SetUsePID(pidflag); if(pidflag) cout<<"PID is used"<PrintAll(); RDHFLctopKpiAn->PrintAll(); TFile* fout=new TFile("cuts4LctopKpi.root","RECREATE"); fout->cd(); RDHFLctopKpiProd->Write(); RDHFLctopKpiAn->Write(); fout->Close(); delete fout; delete pidObjp; delete pidObjpi; delete pidObjK; delete RDHFLctopKpiProd; delete RDHFLctopKpiAn; } //macro to make a .root file (for significance maximization) which contains an AliRDHFCutsLctopKpi with loose set of cuts and TParameter with the tighest value of these cuts void makeInputAliAnalysisTaskSESignificanceMaximization(){ AliRDHFCutsLctopKpi* RDHFLctopKpi=new AliRDHFCutsLctopKpi(); RDHFLctopKpi->SetName("loosercuts"); RDHFLctopKpi->SetTitle("Cuts for significance maximization"); AliESDtrackCuts* esdTrackCuts=new AliESDtrackCuts(); esdTrackCuts->SetRequireSigmaToVertex(kFALSE); //default esdTrackCuts->SetRequireTPCRefit(kTRUE); esdTrackCuts->SetMinNClustersTPC(70); esdTrackCuts->SetRequireITSRefit(kTRUE); esdTrackCuts->SetMinNClustersITS(4); esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kAny); esdTrackCuts->SetMinDCAToVertexXY(0.); esdTrackCuts->SetEtaRange(-0.8,0.8); esdTrackCuts->SetPtRange(0.3,1.e10); RDHFLctopKpi->AddTrackCuts(esdTrackCuts); const Int_t nvars=13; const Int_t nptbins=4; //change this when adding pt bins! Float_t ptbins[nptbins+1]; ptbins[0]=0.; ptbins[1]=2.; ptbins[2]=3.; ptbins[3]=4.; ptbins[4]=12.; RDHFLctopKpi->SetPtBins(nptbins+1,ptbins); Float_t** rdcutsvalmine; rdcutsvalmine=new Float_t*[nvars]; for(Int_t iv=0;ivSetCuts(nvars,nptbins,cutsMatrixTransposeStand); Int_t nvarsforopt=RDHFLctopKpi->GetNVarsForOpt(); 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"<GetVarsForOpt(); }else{ TString *names; names=new TString[nvars]; TString answer=""; Int_t checktrue=0; names=RDHFLctopKpi->GetVarNames(); for(Int_t i=0;i>answer; if(answer=="y") { boolforopt[i]=kTRUE; checktrue++; } else boolforopt[i]=kFALSE; } if (checktrue!=dim) { cout<<"Error! You set "<SetVarsForOpt(dim,boolforopt); } } Float_t tighterval[dim][nptbins]; // 5 dist12 (cm) <--- // 7 dist prim-sec (cm) <--- // 9 cosThetaPoint <--- // 10 Sum d0^2 (cm^2) <--- // 11 dca cut (cm) // {0.18,0.4,0.5,0.,0.,0.01 <--- ,0.06,0.005 <--- ,0.7,0. <--- ,0. <--- ,0.05 } //number of steps for each variable is set in the AddTask arguments (default=8) //set this!! for(Int_t ipt=0;ipt"<",arrdim); for(Int_t ival=0;ival(name.Data(),tighterval[ival][jpt]); } } Bool_t flagPID=kFALSE; RDHFLctopKpi->SetUsePID(flagPID); RDHFLctopKpi->PrintAll(); printf("Use PID? %s\n",flagPID ? "yes" : "no"); //pid settings //1. kaon: default one AliAODPidHF* pidObjK=new AliAODPidHF(); Double_t sigmasK[5]={3.,1.,1.,3.,2.}; pidObjK->SetSigma(sigmasK); pidObjK->SetAsym(kTRUE); pidObjK->SetMatch(1); pidObjK->SetTPC(kTRUE); pidObjK->SetTOF(kTRUE); pidObjK->SetITS(kTRUE); Double_t plimK[2]={0.5,0.8}; pidObjK->SetPLimit(plimK,2); pidObjK->SetTOFdecide(kTRUE); RDHFLctopKpi->SetPidHF(pidObjK); //2. pion AliAODPidHF* pidObjpi=new AliAODPidHF(); pidObjpi->SetTPC(kTRUE); Double_t sigmaspi[5]={3.,0.,0.,0.,0.}; pidObjpi->SetSigma(sigmaspi); pidObjpi->SetTOFdecide(kTRUE); RDHFLctopKpi->SetPidpion(pidObjpi); // 3. proton AliAODPidHF* pidObjp=new AliAODPidHF(); Double_t sigmasp[5]={3.,1.,1.,3.,2.}; pidObjp->SetSigma(sigmasp); pidObjp->SetAsym(kTRUE); pidObjp->SetMatch(1); pidObjp->SetTPC(kTRUE); pidObjp->SetTOF(kTRUE); pidObjp->SetITS(kTRUE); Double_t plimp[2]={1.,2.}; pidObjp->SetPLimit(plimp,2); pidObjp->SetTOFdecide(kTRUE); RDHFLctopKpi->SetPidprot(pidObjp); //activate pileup rejection (for pp) //RDHFLctopKpi->SetOptPileup(AliRDHFCuts::kRejectPileupEvent); //Do not recalculate the vertex RDHFLctopKpi->SetRemoveDaughtersFromPrim(kFALSE); //activate for pp TString cent=""; //centrality selection (Pb-Pb) Float_t minc=20,maxc=80; RDHFLctopKpi->SetMinCentrality(minc); RDHFLctopKpi->SetMaxCentrality(maxc); cent=Form("%.0f%.0f",minc,maxc); // RDHFLctopKpi->SetUseCentrality(AliRDHFCuts::kCentV0M); //kCentOff,kCentV0M,kCentTRK,kCentTKL,kCentCL1,kCentInvalid RDHFLctopKpi->SetUseCentrality(AliRDHFCuts::kCentOff); //kCentOff,kCentV0M,kCentTRK,kCentTKL,kCentCL1,kCentInvalid //temporary // RDHFLctopKpi->SetFixRefs(); TFile* fout=new TFile(Form("cuts4SignifMaxim%s%s%sRecVtx%sPileupRej.root", RDHFLctopKpi->GetUseCentrality()==0 ? "pp" : "PbPb",cent.Data(),RDHFLctopKpi->GetIsPrimaryWithoutDaughters() ? "" : "No",RDHFLctopKpi->GetOptPileUp() ? "" : "No"),"recreate"); //set this!! fout->cd(); RDHFLctopKpi->Write(); max.Write(); fout->Close(); }