From: Francesca Bellini Date: Thu, 2 Jan 2014 08:30:48 +0000 (+0100) Subject: Adding new config macros for systematic studies for K* analysis (Subhash) X-Git-Url: http://git.uio.no/git/?a=commitdiff_plain;h=ab1beea45d652b0027ce678c099da5a6fbd8536b;hp=1cd88f633017a979f6c3912fa529ef1606a05d74;p=u%2Fmrichter%2FAliRoot.git Adding new config macros for systematic studies for K* analysis (Subhash) --- diff --git a/PWGLF/RESONANCES/macros/mini/AddAnalysisTaskTPCKStarSyst.C b/PWGLF/RESONANCES/macros/mini/AddAnalysisTaskTPCKStarSyst.C new file mode 100644 index 00000000000..cfef4d90175 --- /dev/null +++ b/PWGLF/RESONANCES/macros/mini/AddAnalysisTaskTPCKStarSyst.C @@ -0,0 +1,176 @@ +/*************************************************************************** + fbellini@cern.ch - last modified on 06/08/2012 +// +// General macro to configure the RSN analysis task. +// It calls all configs desired by the user, by means +// of the boolean switches defined in the first lines. +// --- +// Inputs: +// 1) flag to know if running on MC or data +// 2) path where all configs are stored +// --- +// Returns: +// kTRUE --> initialization successful +// kFALSE --> initialization failed (some config gave errors) +// +****************************************************************************/ + +AliRsnMiniAnalysisTask * AddAnalysisTaskTPCKStarSyst +( + Bool_t isMC, + Bool_t isPP, + Int_t aodFilterBit = 5, + AliRsnCutSetDaughterParticle::ERsnDaughterCutSet cutPiCandidate = AliRsnCutSetDaughterParticle::kFastTPCpidNsigma, + AliRsnCutSetDaughterParticle::ERsnDaughterCutSet cutKaCandidate = AliRsnCutSetDaughterParticle::kFastTPCpidNsigma, + Float_t nsigmaPi = 2.0, + Float_t nsigmaKa = 2.0, + Bool_t enableSyst = kFALSE, + Char_t DCAxyFormula[100] = "0.0182+0.035/pt^1.01", + Double_t dcazmax = 2, + Double_t minNcls = 70, + Double_t maxX2cls = 4.0, + Double_t minCrossedRows = 70.0, + Double_t maxClsCrossedRows = 0.8, + Bool_t enableMonitor = kTRUE, + Bool_t IsMcTrueOnly = kFALSE, + UInt_t triggerMask = AliVEvent::kMB, + //Bool_t is2011PbPb = kFALSE, + Int_t nmix = 0, + Float_t maxDiffVzMix = 1.0, + Float_t maxDiffMultMix = 10.0, + Float_t maxDiffAngleMixDeg = 20.0, + Int_t aodN = 0, + TString outNameSuffix = "" +) +{ + // + // -- INITIALIZATION ---------------------------------------------------------------------------- + // retrieve analysis manager + // + + AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); + if (!mgr) { + ::Error("AddAnalysisTaskTPCKStarSyst", "No analysis manager to connect to."); + return NULL; + } + + // create the task and configure + TString taskName = Form("TPCKStar%s%s_%i%i_%s", (isPP? "pp" : "PbPb"), (isMC ? "MC" : "Data"), (Int_t)cutPiCandidate,(Int_t)cutKaCandidate, outNameSuffix.Data() ); + AliRsnMiniAnalysisTask *task = new AliRsnMiniAnalysisTask(taskName.Data(), isMC); + if (!isMC && !isPP){ + Printf(Form("========== SETTING USE CENTRALITY PATCH AOD049 : %s", (aodN==49)? "yes" : "no")); + task->SetUseCentralityPatch(aodN==49); + } + + //if(is2011PbPb) + //task->SelectCollisionCandidates(AliVEvent::kMB | AliVEvent::kCentral | AliVEvent::kSemiCentral); + //else + task->SelectCollisionCandidates(triggerMask); + + + if (isPP) + task->UseMultiplicity("QUALITY"); + else + task->UseCentrality("V0M"); + // set event mixing options + task->UseContinuousMix(); + //task->UseBinnedMix(); + task->SetNMix(nmix); + task->SetMaxDiffVz(maxDiffVzMix); + task->SetMaxDiffMult(maxDiffMultMix); + if (!isPP) task->SetMaxDiffAngle(maxDiffAngleMixDeg*TMath::DegToRad()); //set angle diff in rad + ::Info("AddAnalysisTaskTPCKStarSyst", Form("Event mixing configuration: \n events to mix = %i \n max diff. vtxZ = cm %5.3f \n max diff multi = %5.3f \n max diff EP angle = %5.3f deg", nmix, maxDiffVzMix, maxDiffMultMix, (isPP ? 0.0 : maxDiffAngleMixDeg))); + + mgr->AddTask(task); + + // + // -- EVENT CUTS (same for all configs) --------------------------------------------------------- + // + // cut on primary vertex: + // - 2nd argument --> |Vz| range + // - 3rd argument --> minimum required number of contributors + // - 4th argument --> tells if TPC stand-alone vertexes must be accepted + AliRsnCutPrimaryVertex *cutVertex = new AliRsnCutPrimaryVertex("cutVertex", 10.0, 0, kFALSE); + if (isPP) cutVertex->SetCheckPileUp(kTRUE); // set the check for pileup + + // define and fill cut set for event cut + AliRsnCutSet *eventCuts = new AliRsnCutSet("eventCuts", AliRsnTarget::kEvent); + eventCuts->AddCut(cutVertex); + eventCuts->SetCutScheme(cutVertex->GetName()); + // set cuts in task + task->SetEventCuts(eventCuts); + + // + // -- EVENT-ONLY COMPUTATIONS ------------------------------------------------------------------- + // + //vertex + Int_t vtxID = task->CreateValue(AliRsnMiniValue::kVz, kFALSE); + AliRsnMiniOutput *outVtx = task->CreateOutput("eventVtx", "HIST", "EVENT"); + outVtx->AddAxis(vtxID, 400, -20.0, 20.0); + + //multiplicity or centrality + Int_t multID = task->CreateValue(AliRsnMiniValue::kMult, kFALSE); + AliRsnMiniOutput *outMult = task->CreateOutput("eventMult", "HIST", "EVENT"); + if (isPP) + outMult->AddAxis(multID, 400, 0.0, 400.0); + else + outMult->AddAxis(multID, 100, 0.0, 100.0); + + //event plane (only for PbPb) + Int_t planeID = task->CreateValue(AliRsnMiniValue::kPlaneAngle, kFALSE); + AliRsnMiniOutput *outPlane = task->CreateOutput("eventPlane", "HIST", "EVENT"); + if (!isPP) + outPlane->AddAxis(planeID, 180, 0.0, TMath::Pi()); + + // + // -- PAIR CUTS (common to all resonances) ------------------------------------------------------ + // + AliRsnCutMiniPair *cutY = new AliRsnCutMiniPair("cutRapidity", AliRsnCutMiniPair::kRapidityRange); + cutY->SetRangeD(-0.5, 0.5); + + AliRsnCutSet *cutsPair = new AliRsnCutSet("pairCuts", AliRsnTarget::kMother); + cutsPair->AddCut(cutY); + cutsPair->SetCutScheme(cutY->GetName()); + + // + // -- CONFIG ANALYSIS -------------------------------------------------------------------------- + if((!isMC) && (!enableSyst)){ + gROOT->LoadMacro("$ALICE_ROOT/PWGLF/RESONANCES/macros/mini/ConfigTPCanalysisKStar.C"); + if (!ConfigTPCanalysisKStar(task, isMC, isPP, "", cutsPair, aodFilterBit, cutPiCandidate, cutKaCandidate, nsigmaPi, nsigmaKa, enableMonitor, isMC&IsMcTrueOnly, aodN)) return 0x0; + } + if((isMC) && (!enableSyst)) { + gROOT->LoadMacro("$ALICE_ROOT/PWGLF/RESONANCES/macros/mini/ConfigTPCanalysisKStarMC.C"); + if (!ConfigTPCanalysisKStarMC(task, isMC, isPP, "", cutsPair, aodFilterBit, cutPiCandidate, cutKaCandidate, nsigmaPi, nsigmaKa, enableMonitor, isMC&IsMcTrueOnly, 313, aodN)) return 0x0; //K* + if (!ConfigTPCanalysisKStarMC(task, isMC, isPP, "", cutsPair, aodFilterBit, cutPiCandidate, cutKaCandidate, nsigmaPi, nsigmaKa, enableMonitor, isMC&IsMcTrueOnly, -313, aodN)) return 0x0; //anti-K* + } + + //for systematic checks + if((!isMC) && (enableSyst)) + { + gROOT->LoadMacro("$ALICE_ROOT/PWGLF/RESONANCES/macros/mini/ConfigTPCanalysisKStarSyst.C"); + if (!ConfigTPCanalysisKStar(task, isMC, isPP, "", cutsPair, aodFilterBit, cutPiCandidate, cutKaCandidate, nsigmaPi, nsigmaKa, enableSyst, DCAxyFormula, dcazmax, minNcls, maxX2cls, minCrossedRows, maxClsCrossedRows, enableMonitor, isMC&IsMcTrueOnly, 313, aodNN)) return 0x0; + } + + //for systematic checks + if((isMC) && (enableSyst)) { + gROOT->LoadMacro("$ALICE_ROOT/PWGLF/RESONANCES/macros/mini/ConfigTPCanalysisKStarSyst.C"); + if (!ConfigTPCanalysisKStarMC(task, isMC, isPP, "", cutsPair, aodFilterBit, cutPiCandidate, cutKaCandidate, nsigmaPi, nsigmaKa, enableSyst, DCAxyFormula, dcazmax, minNcls, maxX2cls, minCrossedRows, maxClsCrossedRows, enableMonitor, isMC&IsMcTrueOnly, 313, aodN)) return 0x0; //K* + if (!ConfigTPCanalysisKStarMC(task, isMC, isPP, "", cutsPair, aodFilterBit, cutPiCandidate, cutKaCandidate, nsigmaPi, nsigmaKa,enableSyst, DCAxyFormula, dcazmax, minNcls, maxX2cls, minCrossedRows, maxClsCrossedRows, enableMonitor, isMC&IsMcTrueOnly, -313, aodN)) return 0x0; //anti-K* + } + + // + // -- CONTAINERS -------------------------------------------------------------------------------- + // + TString outputFileName = AliAnalysisManager::GetCommonFileName(); + // outputFileName += ":Rsn"; + Printf("AddAnalysisTaskTPCKStarSyst - Set OutputFileName : \n %s\n", outputFileName.Data() ); + + AliAnalysisDataContainer *output = mgr->CreateContainer(Form("RsnOut_%s",outNameSuffix.Data()), + TList::Class(), + AliAnalysisManager::kOutputContainer, + outputFileName); + mgr->ConnectInput(task, 0, mgr->GetCommonInputContainer()); + mgr->ConnectOutput(task, 1, output); + + return task; +} diff --git a/PWGLF/RESONANCES/macros/mini/ConfigTPCanalysisKStarSyst.C b/PWGLF/RESONANCES/macros/mini/ConfigTPCanalysisKStarSyst.C new file mode 100644 index 00000000000..30df3c3d67a --- /dev/null +++ b/PWGLF/RESONANCES/macros/mini/ConfigTPCanalysisKStarSyst.C @@ -0,0 +1,185 @@ +/*************************************************************************** + fbellini@cern.ch - last modified on 06/08/2012 + +// *** Configuration script for K*, anti-K* analysis with 2010 PbPb runs *** +// +// A configuration script for RSN package needs to define the followings: +// +// (1) decay tree of each resonance to be studied, which is needed to select +// true pairs and to assign the right mass to all candidate daughters +// (2) cuts at all levels: single daughters, tracks, events +// (3) output objects: histograms or trees +****************************************************************************/ + +Bool_t ConfigTPCanalysisKStarSyst +( + AliRsnMiniAnalysisTask *task, + Bool_t isMC, + Bool_t isPP, + const char *suffix, + AliRsnCutSet *cutsPair, + Int_t aodFilterBit = 5, + AliRsnCutSetDaughterParticle::ERsnDaughterCutSet cutPiCandidate = AliRsnCutSetDaughterParticle::kFastTPCpidNsigma, + AliRsnCutSetDaughterParticle::ERsnDaughterCutSet cutKaCandidate = AliRsnCutSetDaughterParticle::kFastTPCpidNsigma, + Float_t nsigmaPi = 2.0, + Float_t nsigmaKa = 2.0, + Bool_t enableSyst = kFALSE, + Char_t DCAxyFormula[100] = "0.0182+0.035/pt^1.01", + Double_t dcazmax = 3.2, + Double_t minNcls = 70, + Double_t maxX2cls = 5.0, + Double_t minCrossedRows = 50.0, + Double_t maxClsCrossedRows = 0.8, + Bool_t enableMonitor = kTRUE, + Bool_t IsMcTrueOnly = kFALSE, + Int_t Pdg = 313, + Int_t aodN = 0 +) +{ + // manage suffix + if (strlen(suffix) > 0) suffix = Form("_%s", suffix); + + // set daughter cuts + AliRsnCutSetDaughterParticle * cutSetQ; + AliRsnCutSetDaughterParticle * cutSetPi; + AliRsnCutSetDaughterParticle * cutSetK; + + //vary track quality cuts for systematic checks + if(enableSyst){ + AliRsnCutTrackQuality * trkQualityCut = new AliRsnCutTrackQuality("QualityCut"); + + trkQualityCut->DisableAll();//disable all cuts, filter bit, pT, eta, and DCAxy cuts will be reset later + trkQualityCut->SetAODTestFilterBit(aodFilterBit);//reset the filter bit cut + trkQualityCut->SetCheckOnlyFilterBit(kFALSE);//tells the cut object to check all other cuts individually, + trkQualityCut->SetDCARPtFormula(DCAxyFormula); + trkQualityCut->SetDCAZmax(dcazmax); + trkQualityCut->SetMinNCrossedRowsTPC(minCrossedRows, kTRUE); + trkQualityCut->SetMinNCrossedRowsOverFindableClsTPC(maxClsCrossedRows, kTRUE); + trkQualityCut->SetTPCmaxChi2(maxX2cls); + trkQualityCut->SetRejectKinkDaughters(kTRUE); + trkQualityCut->SetSPDminNClusters(AliESDtrackCuts::kAny); + trkQualityCut->SetITSmaxChi2(36); + trkQualityCut->AddStatusFlag(AliESDtrack::kTPCin , kTRUE);//already in defaults 2011 + trkQualityCut->AddStatusFlag(AliESDtrack::kTPCrefit, kTRUE);//already in defaults 2011 + trkQualityCut->AddStatusFlag(AliESDtrack::kITSrefit, kTRUE);//already in defaults 2011 + //trkQualityCut->SetTPCminNClusters(70); + trkQualityCut->SetPtRange(0.15, 20.0); + trkQualityCut->SetEtaRange(-0.8, 0.8); + + trkQualityCut->Print(); + + cutSetQ = new AliRsnCutSetDaughterParticle(Form("cutQ_bit%i",aodFilterBit), trkQualityCut, AliRsnCutSetDaughterParticle::kQualityStd2011, AliPID::kPion, -1.0); + cutSetPi = new AliRsnCutSetDaughterParticle(Form("cutPi%i_%2.1fsigma",cutPiCandidate, nsigmaPi), trkQualityCut, cutPiCandidate, AliPID::kPion, nsigmaPi); + cutSetK = new AliRsnCutSetDaughterParticle(Form("cutK%i_%2.1fsigma",cutPiCandidate, nsigmaKa), trkQualityCut, cutKaCandidate, AliPID::kKaon, nsigmaKa); + + + } + else + { + //default cuts 2011 + cutSetQ = new AliRsnCutSetDaughterParticle("cutQuality", AliRsnCutSetDaughterParticle::kQualityStd2011, AliPID::kPion, -1.0, aodFilterBit); + cutSetQ->SetUse2011StdQualityCuts(kTRUE); + cutSetPi = new AliRsnCutSetDaughterParticle(Form("cutPionTPCPbPb2011_%2.1fsigma",nsigmaPi), cutPiCandidate, AliPID::kPion, nsigmaPi, aodFilterBit); + cutSetPi->SetUse2011StdQualityCuts(kTRUE); + cutSetK = new AliRsnCutSetDaughterParticle(Form("cutKaonTPCPbPb2011_%2.1f2sigma",nsigmaKa), cutKaCandidate, AliPID::kKaon, nsigmaKa, aodFilterBit); + cutSetK->SetUse2011StdQualityCuts(kTRUE); + } + + + Int_t iCutQ = task->AddTrackCuts(cutSetQ); + Int_t iCutPi = task->AddTrackCuts(cutSetPi); + Int_t iCutK = task->AddTrackCuts(cutSetK); + + if(enableMonitor){ + Printf("======== Monitoring cut AliRsnCutSetDaughterParticle enabled"); + gROOT->LoadMacro("$ALICE_ROOT/PWGLF/RESONANCES/macros/mini/AddMonitorOutput.C"); + AddMonitorOutput(isMC, cutSetQ->GetMonitorOutput()); + AddMonitorOutput(isMC, cutSetPi->GetMonitorOutput()); + AddMonitorOutput(isMC, cutSetK->GetMonitorOutput()); + } + + // -- Values ------------------------------------------------------------------------------------ + /* invariant mass */ Int_t imID = task->CreateValue(AliRsnMiniValue::kInvMass, kFALSE); + /* IM resolution */ Int_t resID = task->CreateValue(AliRsnMiniValue::kInvMassRes, kTRUE); + /* transv. momentum */ Int_t ptID = task->CreateValue(AliRsnMiniValue::kPt, kFALSE); + /* centrality */ Int_t centID = task->CreateValue(AliRsnMiniValue::kMult, kFALSE); + /* pseudorapidity */ Int_t etaID = task->CreateValue(AliRsnMiniValue::kEta, kFALSE); + /* rapidity */ Int_t yID = task->CreateValue(AliRsnMiniValue::kY, kFALSE); + + // -- Create all needed outputs ----------------------------------------------------------------- + // use an array for more compact writing, which are different on mixing and charges + // [0] = unlike + // [1] = mixing + // [2] = like ++ + // [3] = like -- + Bool_t use [10] = { !IsMcTrueOnly, !IsMcTrueOnly, !IsMcTrueOnly, !IsMcTrueOnly , !IsMcTrueOnly, !IsMcTrueOnly, isMC , isMC , isMC , isMC }; + Bool_t useIM [10] = { 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 , 0 }; + TString name [10] = {"UnlikePM", "UnlikeMP", "MixingPM", "MixingMP", "LikePP", "LikeMM", "TruesPM", "TruesMP", "ResPM" , "ResMP" }; + TString comp [10] = {"PAIR" , "PAIR" , "MIX" , "MIX" , "PAIR" , "PAIR" , "TRUE" , "TRUE" , "TRUE" , "TRUE" }; + //TString output [10] = {"HIST" , "HIST" , "HIST" , "HIST" , "HIST" , "HIST" , "HIST" , "HIST" , "HIST" , "HIST" }; + TString output [10] = {"SPARSE" , "SPARSE" , "SPARSE" , "SPARSE" , "SPARSE" , "SPARSE" , "SPARSE" , "SPARSE" , "SPARSE" , "SPARSE" }; + Char_t charge1 [10] = {'+' , '-' , '+' , '-' , '+' , '-' , '+' , '-' , '+' , '-' }; + Char_t charge2 [10] = {'-' , '+' , '-' , '+' , '+' , '-' , '-' , '+' , '-' , '+' }; + Int_t cutID1 [10] = { iCutK , iCutK , iCutK , iCutK , iCutK , iCutK , iCutK , iCutK , iCutK , iCutK }; + Int_t cutID2 [10] = { iCutPi , iCutPi , iCutPi , iCutPi , iCutPi , iCutPi , iCutPi , iCutPi , iCutPi , iCutPi }; + + for (Int_t i = 0; i < 10; i++) { + if (!use[i]) continue; + if(Pdg > 0) AliRsnMiniOutput *out = task->CreateOutput(Form("kstar1_%s%s", name[i].Data(), suffix), output[i].Data(), comp[i].Data()); + if(Pdg < 0) AliRsnMiniOutput *out = task->CreateOutput(Form("kstar2_%s%s", name[i].Data(), suffix), output[i].Data(), comp[i].Data()); + out->SetCutID(0, cutID1[i]); + out->SetCutID(1, cutID2[i]); + out->SetDaughter(0, AliRsnDaughter::kKaon); + out->SetDaughter(1, AliRsnDaughter::kPion); + out->SetCharge(0, charge1[i]); + out->SetCharge(1, charge2[i]); + out->SetMotherPDG(Pdg);//313 + out->SetMotherMass(0.89594); + out->SetPairCuts(cutsPair); + + // axis X: invmass (or resolution) + if (useIM[i]) + out->AddAxis(imID, 90, 0.6, 1.5); + //else + //out->AddAxis(resID, 200, -0.02, 0.02); + + // axis Y: transverse momentum + out->AddAxis(ptID, 300, 0.0, 30.0); + + // axis Z: centrality-multiplicity + if (!isPP) + out->AddAxis(centID, 100, 0.0, 100.0); + else + out->AddAxis(centID, 400, 0.0, 400.0); + + // axis W: pseudorapidity + // out->AddAxis(etaID, 20, -1.0, 1.0); + // axis J: rapidity + //out->AddAxis(yID, 32, -0.8, 0.8); + + } + + if (isMC){ + // create output + + if(Pdg > 0) {AliRsnMiniOutput *outm = task->CreateOutput(Form("kstar_Mother1%s", suffix), "SPARSE", "MOTHER");} + if(Pdg < 0) {AliRsnMiniOutput *outm = task->CreateOutput(Form("kstar_Mother2%s", suffix), "SPARSE", "MOTHER");} + outm->SetDaughter(0, AliRsnDaughter::kKaon); + outm->SetDaughter(1, AliRsnDaughter::kPion); + outm->SetMotherPDG(Pdg);//313 + outm->SetMotherMass(0.89594); + // pair cuts + outm->SetPairCuts(cutsPair); + // binnings + outm->AddAxis(imID, 90, 0.6, 1.5); + outm->AddAxis(ptID, 300, 0.0, 30.0); + if (!isPP){ + outm->AddAxis(centID, 100, 0.0, 100.0); + } else { + outm->AddAxis(centID, 400, 0.0, 400.0); + } + //outm->AddAxis(yID, 32, -0.8, 0.8); + } + return kTRUE; +} +