From a2c36791cb4880cd93abe8f01cec39ed1bb9af38 Mon Sep 17 00:00:00 2001 From: jbook Date: Mon, 7 May 2012 14:10:27 +0000 Subject: [PATCH] -add dir for jpsi macros -add user task of marcel --- .../macrosJPSI/AddTask_mfigueredo_JPsi.C | 77 +++++ .../dielectron/macrosJPSI/ConfigJpsi_mf_pp.C | 283 ++++++++++++++++++ 2 files changed, 360 insertions(+) create mode 100644 PWGDQ/dielectron/macrosJPSI/AddTask_mfigueredo_JPsi.C create mode 100644 PWGDQ/dielectron/macrosJPSI/ConfigJpsi_mf_pp.C diff --git a/PWGDQ/dielectron/macrosJPSI/AddTask_mfigueredo_JPsi.C b/PWGDQ/dielectron/macrosJPSI/AddTask_mfigueredo_JPsi.C new file mode 100644 index 00000000000..24d859f0713 --- /dev/null +++ b/PWGDQ/dielectron/macrosJPSI/AddTask_mfigueredo_JPsi.C @@ -0,0 +1,77 @@ +AliAnalysisTask *AddTask_mfigueredo_JPsi(Bool_t hasMC_aod = kFALSE){ + //get the current analysis manager + AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); + if (!mgr) { + ::Error("AddTask_mfigueredo_JPsi", "No analysis manager found."); + return NULL; + } + if (!mgr->GetInputEventHandler()) { + ::Error("AddTask_mfigueredo_JPsi", "This task requires an input event handler"); + return NULL; + } + + //Do we have an MC handler? + Bool_t hasMC=(mgr->GetMCtruthEventHandler()!=0x0); + + TString configFile("ConfigJpsi_mf_pp.C"); + if (hasMC) configFile="../PWGDQ/dielectron/macros/ConfigJpsi2eeEff.C"; + Bool_t isAOD=mgr->GetInputEventHandler()->IsA()==AliAODInputHandler::Class(); + + //create task and add it to the manager + AliAnalysisTaskMultiDielectron *task=new AliAnalysisTaskMultiDielectron("MultiDie"); + mgr->AddTask(task); + + //load dielectron configuration file + TString checkconfig="ConfigJpsi_mf_pp"; + if (!gROOT->GetListOfGlobalFunctions()->FindObject(checkconfig.Data())) + gROOT->LoadMacro(configFile.Data()); + + //add dielectron analysis with different cuts to the task + for (Int_t i=0; iSetHasMC(hasMC_aod); + if (jpsi) task->AddDielectron(jpsi); + } + + //Add event filter + AliDielectronEventCuts *eventCuts=new AliDielectronEventCuts("eventCuts","Vertex Track && |vtxZ|<10 && ncontrib>0"); + if(isAOD) eventCuts->SetVertexType(AliDielectronEventCuts::kVtxAny); + eventCuts->SetRequireVertex(); + eventCuts->SetMinVtxContributors(1); + eventCuts->SetVertexZ(-10.,10.); +// eventCuts->SetCentralityRange(0.,20.); + // add event filter +// task->SetEventFilter(eventCuts); + + // pileup rejection +// task->SetRejectPileup(); + task->SetTriggerMask(AliVEvent::kEMCEGA); + task->UsePhysicsSelection(); + //---------------------- + //create data containers + //---------------------- + + TString containerName = mgr->GetCommonFileName(); + containerName += ":PWGDQ_dielectron"; + + //create output container + + AliAnalysisDataContainer *cOutputHist1 = + mgr->CreateContainer("mfigueredo_QA", TList::Class(), AliAnalysisManager::kOutputContainer, + containerName.Data()); + + AliAnalysisDataContainer *cOutputHist2 = + mgr->CreateContainer("mfigueredo_CF", TList::Class(), AliAnalysisManager::kOutputContainer, + containerName.Data()); + + AliAnalysisDataContainer *cOutputHist3 = + mgr->CreateContainer("mfigueredo_EventStat", TH1D::Class(), AliAnalysisManager::kOutputContainer, + containerName.Data()); + + mgr->ConnectInput(task, 0, mgr->GetCommonInputContainer()); + mgr->ConnectOutput(task, 1, cOutputHist1); + mgr->ConnectOutput(task, 2, cOutputHist2); + mgr->ConnectOutput(task, 3, cOutputHist3); + + return task; +} diff --git a/PWGDQ/dielectron/macrosJPSI/ConfigJpsi_mf_pp.C b/PWGDQ/dielectron/macrosJPSI/ConfigJpsi_mf_pp.C new file mode 100644 index 00000000000..2586ac21254 --- /dev/null +++ b/PWGDQ/dielectron/macrosJPSI/ConfigJpsi_mf_pp.C @@ -0,0 +1,283 @@ +void SetupTrackCutsDieleData(AliDielectron *diele, Int_t cutDefinition, Bool_t isAOD); +void SetupPairCutsDieleData(AliDielectron *diele, Int_t cutDefinition, Bool_t isAOD); +void InitHistogramsDieleData(AliDielectron *diele, Int_t cutDefinition, Bool_t isAOD); +void InitCFDieleData(AliDielectron *diele, Int_t cutDefinition, Bool_t isAOD); + +AliESDtrackCuts *SetupESDtrackCutsDieleData(Int_t cutDefinition); + +TString namesDieleData=("basicQ+SPDAny+pt>1+PID;basicQ+EMCal+SPDAny+pt6_20;basicQ+EMCal+SPDAny+pt8_20;EMCal+SPDAny+pt6_20;EMCal+SPDAny+pt8_20;EMCal+SPDFirst+pt6_20;EMCal+SPDFirst+pt8_20;EMCal+SPDAny"); +TObjArray *arrNamesDieleData=namesDieleData.Tokenize("; "); + +const Int_t nDie=arrNamesDieleData->GetEntries(); + +AliDielectron* ConfigJpsi_mf_pp(Int_t cutDefinition, Bool_t isAOD=kFALSE) +{ + // + // Setup the instance of AliDielectron + // + + // create the actual framework object + TString name=Form("%02d",cutDefinition); + if (cutDefinitionGetEntriesFast()){ + name=arrNamesDieleData->At(cutDefinition)->GetName(); + } + AliDielectron *diele = new AliDielectron(Form("%s",name.Data()), + Form("Track cuts: %s",name.Data())); + + // cut setup + SetupEventCutsDieleFilter(diele, cutDefinition, isAOD); + SetupTrackCutsDieleData(diele, cutDefinition, isAOD); + SetupPairCutsDieleData(diele, cutDefinition, isAOD); + + // + // histogram setup + // only if an AliDielectronHistos object is attached to the + // dielelectron framework histograms will be filled + // + InitHistogramsDieleData(diele, cutDefinition, isAOD); + + // the last definition uses no cuts and only the QA histograms should be filled! + if (cutDefinition==nDie-1) InitCFDieleData(diele, cutDefinition, isAOD); + + AliDielectronTrackRotator *rot=new AliDielectronTrackRotator; + rot->SetConeAnglePhi(TMath::Pi()); + rot->SetIterations(10); + diele->SetTrackRotator(rot); + return diele; +} + +//______________________________________________________________________________________ +void SetupEventCutsDieleFilter(AliDielectron *diele, Int_t cutDefinition, Bool_t isAOD=kFALSE) +{ + // + // Setup the event cuts + // + AliDielectronVarCuts *vtxZ = new AliDielectronVarCuts("vtxZ","Vertex z cut"); + vtxZ->AddCut(AliDielectronVarManager::kZvPrim,-10.,10.); + + AliDielectronVarCuts *Centrality = new AliDielectronVarCuts("Centrality","Centrality Percentile"); + Centrality->AddCut(AliDielectronVarManager::kCentrality,0.,40.); + + diele->GetEventFilter().AddCuts(vtxZ); + if(cutDefinitionGetEventFilter().AddCuts(Centrality); + + +} + + +//______________________________________________________________________________________ +void SetupTrackCutsDieleData(AliDielectron *diele, Int_t cutDefinition, Bool_t isAOD) +{ + // + // Setup the track cuts + // + + //ESD quality cuts DielectronTrackCuts + if (!isAOD) { + diele->GetTrackFilter().AddCuts(SetupESDtrackCutsDieleData(cutDefinition)); + } else { + AliDielectronTrackCuts *trackCuts=new AliDielectronTrackCuts("trackCuts","trackCuts"); + if (cutDefinition==5||cutDefinition==6) + trackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kFirst); + else + trackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kAny); + trackCuts->SetRequireTPCRefit(kTRUE); + trackCuts->SetRequireITSRefit(kTRUE); + diele->GetTrackFilter().AddCuts(trackCuts); + } + + //Pt cut ---------------------------------------------------------- + AliDielectronVarCuts *pt = new AliDielectronVarCuts("ptCut","pt cut"); + pt->AddCut(AliDielectronVarManager::kPt,1.,1e30); + pt->AddCut(AliDielectronVarManager::kKinkIndex0,0.); + //AOD additions since there are no AliESDtrackCuts ----------------- + pt->AddCut(AliDielectronVarManager::kNclsTPC,60.,160.); + pt->AddCut(AliDielectronVarManager::kEta,-0.9,0.9); + if(cutDefinition>2&&cutDefinition!=nDie-1) pt->AddCut(AliDielectronVarManager::kTPCsignal,70.,120.); + if(cutDefinition==nDie-1) pt->AddCut(AliDielectronVarManager::kTPCsignal,50.,150.); + + diele->GetTrackFilter().AddCuts(pt); + + // PID cuts -------------------------------------------------------- + AliDielectronPID *pid = new AliDielectronPID("PID10","TPC nSigma |e|<3 + |Pi|>3 + |P|>3 + TOF nSigma |e|<3"); + pid->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-3.,3.); + pid->AddCut(AliDielectronPID::kTPC,AliPID::kPion,-3.,3.,0.,0.,kTRUE); + pid->AddCut(AliDielectronPID::kTPC,AliPID::kProton,-20.,3.,0.,0.,kTRUE); + if(cutDefinition==0) diele->GetTrackFilter().AddCuts(pid); + // PID cuts 2 ---- For EMCal purposes (all electron band) ---------------------------------------------------- + AliDielectronPID *pid2 = new AliDielectronPID("PIDforemcal","TPC nSigma |e|<3"); + pid2->AddCut(AliDielectronPID::kTPC,AliPID::kElectron,-3.,3.); + if(cutDefinition==1||cutDefinition==2) diele->GetTrackFilter().AddCuts(pid2); + +} + +//______________________________________________________________________________________ +void SetupPairCutsDieleData(AliDielectron *diele, Int_t cutDefinition, Bool_t isAOD) +{ + // + // Setup the pair cuts + // + //Invariant mass and rapidity selection + AliDielectronVarCuts *pairCut=new AliDielectronVarCuts("0AddCut(AliDielectronVarManager::kM,0.,5.); + pairCut->AddCut(AliDielectronVarManager::kY,-0.9,0.9); + if(cutDefinition==1&&cutDefinition==3&&cutDefinition==5) pairCut->AddCut(AliDielectronVarManager::kPt,6.,20.); + if(cutDefinition==2&&cutDefinition==4&&cutDefinition==6) pairCut->AddCut(AliDielectronVarManager::kPt,8.,20.); + if(cutDefinition==nDie-1) pairCut->AddCut(AliDielectronVarManager::kPt,2.,100.); + diele->GetPairFilter().AddCuts(pairCut); + + if(cutDefinition>1){ + AliDielectronVarCuts *mycut = new AliDielectronVarCuts("ptCutEMCAL","cut for EMCal"); + mycut->AddCut(AliDielectronVarManager::kEMCALnSigmaEle,-3.,3.); + mycut->AddCut(AliDielectronVarManager::kP,5.,1e30); + AliDielectronPairLegCuts *varpair=new AliDielectronPairLegCuts(); + varpair->GetLeg1Filter().AddCuts(mycut); + diele->GetPairFilter().AddCuts(varpair); + } + +} + +//______________________________________________________________________________________ +AliESDtrackCuts *SetupESDtrackCutsDieleData(Int_t cutDefinition) +{ + // + // Setup default AliESDtrackCuts + // + AliESDtrackCuts *esdTrackCuts = new AliESDtrackCuts; + + // basic track quality cuts (basicQ) + esdTrackCuts->SetMaxDCAToVertexZ(3.0); + esdTrackCuts->SetMaxDCAToVertexXY(1.0); + esdTrackCuts->SetEtaRange( -0.9 , 0.9 ); + esdTrackCuts->SetAcceptKinkDaughters(kFALSE); + esdTrackCuts->SetRequireITSRefit(kTRUE); + esdTrackCuts->SetRequireTPCRefit(kTRUE); + esdTrackCuts->SetPtRange(.8,1e30); + esdTrackCuts->SetMinNClustersTPC(70); + esdTrackCuts->SetMaxChi2PerClusterTPC(4); + + if (cutDefinition==5||cutDefinition==6) + esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kFirst); + else esdTrackCuts->SetClusterRequirementITS(AliESDtrackCuts::kSPD,AliESDtrackCuts::kAny); + + return esdTrackCuts; +} + + +//______________________________________________________________________________________ +void InitHistogramsDieleData(AliDielectron *diele, Int_t cutDefinition, Bool_t isAOD) +{ + // + // Initialise the histograms + // + + //Setup histogram Manager + AliDielectronHistos *histos=new AliDielectronHistos(diele->GetName(),diele->GetTitle()); + + //Initialise histogram classes + histos->SetReservedWords("Track;Pair"); + + //Track classes + //to fill also track info from 2nd event loop until 2 + for (Int_t i=0; i<2; ++i){ + histos->AddClass(Form("Track_%s",AliDielectron::TrackClassName(i))); + } + + //Pair classes + // to fill also mixed event histograms loop until 10 + for (Int_t i=0; i<3; ++i){ + histos->AddClass(Form("Pair_%s",AliDielectron::PairClassName(i))); + } + + //legs from pair + for (Int_t i=0; i<3; ++i){ + histos->AddClass(Form("Track_Legs_%s",AliDielectron::PairClassName(i))); + } + //track rotation + histos->AddClass(Form("Pair_%s",PairClassName(AliDielectron::kEv1PMRot))); + histos->AddClass(Form("Track_Legs_%s",PairClassName(AliDielectron::kEv1PMRot))); + + + //add histograms to event class +// if (cutDefinition==0) { + histos->AddClass("Event"); + histos->UserHistogram("Event","VtxZ","Vertex Z;Z[cm]",300,-15.,15.,AliDielectronVarManager::kZvPrim); + histos->UserHistogram("Event","Centrality","Centrality;Cent(%)",100,0.,100.,AliDielectronVarManager::kCentrality); +// } + + //add histograms to Track classes + histos->UserHistogram("Track","Pt","Pt;Pt [GeV];#tracks",400,0,20.,AliDielectronVarManager::kPt); + histos->UserHistogram("Track","TPCnCls","Number of Clusters TPC;TPC number clusteres;#tracks",160,-0.5,159.5,AliDielectronVarManager::kNclsTPC); + + histos->UserHistogram("Track","dXY","dXY;dXY [cm];#tracks",500,-1.,1.,AliDielectronVarManager::kImpactParXY); + histos->UserHistogram("Track","dZ","dZ;dZ [cm];#tracks",600,-3.,3.,AliDielectronVarManager::kImpactParZ); + histos->UserHistogram("Track","Eta_Phi","Eta Phi Map; Eta; Phi;#tracks", + 100,-1,1,144,0,6.285,AliDielectronVarManager::kEta,AliDielectronVarManager::kPhi); + + histos->UserHistogram("Track","dEdx_P","dEdx;P [GeV];TPC signal (arb units);#tracks", + 200,0.2,20.,100,0.,200.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCsignal,kTRUE); + + histos->UserHistogram("Track","dEdx_Phi","dEdx;P [GeV];TPC signal (arb units);#tracks", + 200,0.,2*TMath::Pi(),100,0.,200.,AliDielectronVarManager::kPhi,AliDielectronVarManager::kTPCsignal,kTRUE); + + histos->UserHistogram("Track","dEdx_nSigmaEMCal","dEdx;NsigmaEmcal;TPC signal (arb units);#tracks", + 200,-10.,10.,100,0.,200.,AliDielectronVarManager::kEMCALnSigmaEle,AliDielectronVarManager::kTPCsignal,kTRUE); + + histos->UserHistogram("Track","TPCnSigmaEle_P","TPC number of sigmas Electrons;P [GeV];TPC number of sigmas Electrons;#tracks", + 200,0.2,20.,100,-10.,10.,AliDielectronVarManager::kPIn,AliDielectronVarManager::kTPCnSigmaEle,kTRUE); + + //add histograms to Pair classes + histos->UserHistogram("Pair","InvMass","Inv.Mass;Inv. Mass [GeV];#pairs", + 251,-.01,5.01,AliDielectronVarManager::kM); + histos->UserHistogram("Pair","Rapidity","Rapidity;Rapidity;#pairs", + 100,-1.,1.,AliDielectronVarManager::kY); + histos->UserHistogram("Pair","OpeningAngle","Opening angle;angle", + 100,0.,3.15,AliDielectronVarManager::kOpeningAngle); + + diele->SetHistogramManager(histos); +} + + +void InitCFDieleData(AliDielectron *diele, Int_t cutDefinition, Bool_t isAOD) +{ + // + // Setupd the CF Manager if needed + // + + AliDielectronCF *cf=new AliDielectronCF(diele->GetName(),diele->GetTitle()); + + //pair variables + cf->AddVariable(AliDielectronVarManager::kPt,"2.0, 4.0, 6., 8.0, 10.0, 100.0"); + cf->AddVariable(AliDielectronVarManager::kY,"-5,-1,-0.9,-0.8,-0.7,-0.5,-0.3,0.3,0.5,0.7,0.8,0.9,1.0,5"); + cf->AddVariable(AliDielectronVarManager::kM,125,0.,125*.04); //40Mev Steps + cf->AddVariable(AliDielectronVarManager::kPairType,11,0,11); + cf->AddVariable(AliDielectronVarManager::kOpeningAngle,"0.,0.2,0.5,1.,2.,3.14"); + //leg variables + cf->AddVariable(AliDielectronVarManager::kPt,"0.0, 0.8, 1.0, 2.0, 3.0, 4.0, 5.0, 100.0",kTRUE); + cf->AddVariable(AliDielectronVarManager::kNclsTPC,"0, 70, 75, 80, 85, 90, 100, 120, 160",kTRUE); + cf->AddVariable(AliDielectronVarManager::kEta,"-5,-1,-0.9,-0.85,-0.8,-0.75,0.75,0.8,0.85,0.9,1.0,5",kTRUE); + cf->AddVariable(AliDielectronVarManager::kTPCnSigmaEle,"-2.5,-2,-1.5,-1,-0.5,4.",kTRUE); + cf->AddVariable(AliDielectronVarManager::kTPCnSigmaPio,"3.,3.5,4.,100",kTRUE); + cf->AddVariable(AliDielectronVarManager::kTPCnSigmaPro,"3.,3.5,4.,100",kTRUE); + cf->AddVariable(AliDielectronVarManager::kTPCsignal,"60.,65.,68.,70.,80.,90.,100.,120.,150.",kTRUE); + + //event variables + cf->AddVariable(AliDielectronVarManager::kNaccTrcklts,"0.0, 9.0, 17.0, 25.0, 36.0, 55.0, 500.0"); + cf->AddVariable(AliDielectronVarManager::kCentrality,"0.0,20.0,40.0,80.0"); + if (!isAOD){ + Bool_t hasMC=(AliAnalysisManager::GetAnalysisManager()->GetMCtruthEventHandler()!=0x0); + if (hasMC){ + cf->AddVariable(AliDielectronVarManager::kPdgCode,10000,-5000.5,4999.5,kTRUE); + cf->AddVariable(AliDielectronVarManager::kPdgCodeMother,10000,-5000.5,4999.5,kTRUE); + cf->AddVariable(AliDielectronVarManager::kPdgCodeGrandMother,10000,-5000.5,4999.5,kTRUE); + } + } + //only in this case write MC truth info + if (cutDefinition==0){ + cf->SetStepForMCtruth(); + } + + diele->SetCFManagerPair(cf); + +} + -- 2.43.0