From 7bbe7ef0286e41b6cf7bf355d18592b419a62b2a Mon Sep 17 00:00:00 2001 From: fbellini Date: Thu, 15 Jan 2015 16:57:16 +0100 Subject: [PATCH] Update by Chitrasen - Modified histrogram axis --- .../macros/mini/AddAnalysisTaskD0.C | 4 +- PWGLF/RESONANCES/macros/mini/ConfigD0.C | 915 +++++------------- 2 files changed, 256 insertions(+), 663 deletions(-) diff --git a/PWGLF/RESONANCES/macros/mini/AddAnalysisTaskD0.C b/PWGLF/RESONANCES/macros/mini/AddAnalysisTaskD0.C index 95c8a760b1a..b26b3ec4470 100644 --- a/PWGLF/RESONANCES/macros/mini/AddAnalysisTaskD0.C +++ b/PWGLF/RESONANCES/macros/mini/AddAnalysisTaskD0.C @@ -192,7 +192,7 @@ AliRsnMiniAnalysisTask * AddAnalysisTaskD0 //tracklets Int_t trackletID = task->CreateValue(AliRsnMiniValue::kTracklets, kFALSE); AliRsnMiniOutput *outTracklets = task->CreateOutput("eventTracklets", "HIST", "EVENT"); - outTracklets->AddAxis(trackletID, 400, 0.0, 400.0); + outTracklets->AddAxis(trackletID, 250, -0.5, 249.5); //event plane (only for PbPb) @@ -206,7 +206,7 @@ AliRsnMiniAnalysisTask * AddAnalysisTaskD0 TH2F* hvz=new TH2F("hVzVsCent","",100,0.,100., 220,-11.,11.); task->SetEventQAHist("vz",hvz);//plugs this histogram into the fHAEventVz data member - TH2F* hmc=new TH2F("MultiVsCent","",100,0.,100.,4000,0.,4000.); + TH2F* hmc=new TH2F("MultiVsCent","",100,0.,100.,1000,0.,1000.); hmc->GetYaxis()->SetTitle("QUALITY"); task->SetEventQAHist("multicent",hmc);//plugs this histogram into the fHAEventMultiCent data member diff --git a/PWGLF/RESONANCES/macros/mini/ConfigD0.C b/PWGLF/RESONANCES/macros/mini/ConfigD0.C index 3af9ed4dc0f..b26b3ec4470 100644 --- a/PWGLF/RESONANCES/macros/mini/ConfigD0.C +++ b/PWGLF/RESONANCES/macros/mini/ConfigD0.C @@ -1,686 +1,279 @@ +/*************************************************************************** + fbellini@cern.ch - last modified on 06/08/2012 // -// *** Configuration script for D0 analysis *** -// -// A configuration script for RSN package needs to define the followings: +// 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) // -// (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 ConfigD0 -( - AliRsnMiniAnalysisTask *task, - Bool_t isPP, - Bool_t isMC, - Bool_t monitor = kTRUE, - Bool_t centortracklets = kTRUE, - Bool_t sanityhistos = kTRUE, - Float_t nsigmaTPCPi = 3.0, - Float_t nsigmaTPCKa = 3.0, - Float_t nsigmaTOFPi = 2.0, - Float_t nsigmaTOFKa = 2.0, - Int_t aodFilterBit = 5, - Float_t trackDCAcutMax = 7.0, - Float_t trackDCAcutMin = 0.0, - Float_t trackDCAZcutMax = 2.0, - Int_t NTPCcluster = 70, - Double_t NTPCcrratio = 0.8, - Int_t minSPDclt = 0, - Double_t minpt = 0.15, - Short_t maxSisters = 2, - Bool_t checkP = kTRUE, - Bool_t useNTPCclt = kTRUE, - Bool_t minDCAcutFixed = kFALSE, - Bool_t maxDCAcutFixed = kFALSE, - Bool_t ptdepPIDcut = kFALSE, - Bool_t checkFeedDown = kTRUE, - Bool_t checkQuark = kTRUE, - Bool_t doCalculationInMC = kTRUE, - UShort_t originDselection = 0, - Float_t mineta = -0.8, - Float_t maxeta = 0.8, - Float_t min_inv_mass = 0.6, - Float_t max_inv_mass = 2.2, - Int_t bins = 320, - const char *suffix, - AliRsnCutSet *cutsPairY, - AliRsnCutSet *cutsPair +****************************************************************************/ + +AliRsnMiniAnalysisTask * AddAnalysisTaskD0 +( + Bool_t isMC, + Bool_t isPP, + Bool_t ispPb, + Bool_t monitor = kTRUE, + Bool_t centortracklets = kTRUE, + Bool_t sanityhistos = kTRUE, + TString centrality = "V0M", + Int_t aodFilterBit = 5, + Float_t nsigmaTPCPi = 3.0, + Float_t nsigmaTPCKa = 3.0, + Float_t nsigmaTOFPi = 2.0, + Float_t nsigmaTOFKa = 2.0, + Float_t trackDCAcutMax = 7.0, + Float_t trackDCAZcutMax = 2.0, + Int_t NTPCcluster = 70, + Double_t NTPCcrratio = 0.8, + Int_t minSPDclt = 0, + Double_t minpt = 0.15, + TString triggerMask = AliVEvent::kMB, + Bool_t useNTPCclt = kTRUE, + Bool_t maxDCAcutFixed = kFALSE, + Bool_t ptdepPIDcut = kFALSE, + Bool_t fixedYcut = kTRUE, + Bool_t checkpileup = kFALSE, + Bool_t SPDpileup = kTRUE, + Bool_t doCalculationInMC = kTRUE, + UShort_t originDselection = 0, + Int_t nmix = 5, + Double_t minYlab = -0.5, + Double_t maxYlab = 0.5, + Float_t mineta = -0.8, + Float_t maxeta = 0.8, + Float_t min_inv_mass = 0.6, + Float_t max_inv_mass = 2.2, + Int_t bins = 320, + Float_t maxDiffVzMix = 1.0, + Float_t maxDiffMultMix = 10.0, + Float_t maxDiffAngleMixDeg = 20.0, + TString outNameSuffix = "D0" ) -{ - // manage suffix - if (strlen(suffix) > 0) suffix = Form("_%s", suffix); - - TString s = ""; s+=trackDCAcutMax; s+="*(0.0015+0.0050/pt^1.01)"; - - const char *formula = s; +{ + // + // -- INITIALIZATION ---------------------------------------------------------------------------- + // retrieve analysis manager + // + Float_t trackDCAcutMin = 0.0; + Bool_t minDCAcutFixed = kTRUE; + Double_t dcaProduct = 100.0; + Float_t cutV = 10.0; + Short_t maxSisters = 2; + Bool_t checkP = kTRUE; + Bool_t checkFeedDown = kTRUE; + Bool_t checkQuark = kTRUE; + Int_t aodN = 0; + + + UInt_t trigger = 0; + + + + TString eventType = ""; + if(triggerMask=="AliVEvent::kMB | AliVEvent::kCentral") {trigger = AliVEvent::kMB | AliVEvent::kCentral; eventType+="Central";} + else if(triggerMask=="AliVEvent::kMB | AliVEvent::kSemiCentral") {trigger = AliVEvent::kMB | AliVEvent::kSemiCentral; eventType+="SemiCentral";} + else if(triggerMask=="AliVEvent::kINT7") {trigger = AliVEvent::kINT7; eventType+="kINT7";} + else if(triggerMask=="AliVEvent::kMB") {trigger = AliVEvent::kMB; eventType+="MinimumBias";} + + AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager(); + if (!mgr) { + ::Error("AddAnalysisTaskD0", "No analysis manager to connect to."); + return NULL; + } + + // create the task and configure + TString taskName = Form("D0%s%s_%.1f_%d_%.2f_%d_%.1f_%.1f_%.1f_%.1f_%.1f_%.1f_%.2f_%d_%s", (isPP? "pp" : ispPb? "pPB": "PbPb"), (isMC ? "MC" : "Data"), cutV, NTPCcluster, NTPCcrratio, minSPDclt, nsigmaTPCPi, nsigmaTPCKa, nsigmaTOFPi, nsigmaTOFKa, trackDCAcutMax, trackDCAZcutMax, minpt, originDselection, eventType.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); + } - TString s2 = ""; s2+=trackDCAcutMin; s2+="*(0.0015+0.0050/pt^1.01)"; + ::Info("AddAnalysisTaskD0", Form("TriggerMask: %i",trigger)); - const char *formulaMin = s2; + task->SelectCollisionCandidates(trigger); + task->SetMaxNDaughters(maxSisters); + task->SetCheckMomentumConservation(checkP); + task->SetCheckFeedDown(checkFeedDown); + task->SetRejectCandidateIfNotFromQuark(checkQuark); + task->SetDselection(originDselection); + task->KeepMotherInAcceptance(kTRUE); + task->SetMotherAcceptanceCutMinPt(minpt); + task->SetMotherAcceptanceCutMaxEta(maxeta); + + ::Info("AddAnalysisTaskD0", Form("Maximum numbers of daughters allowed (-1 means cut not applied): %i",maxSisters)); + ::Info("AddAnalysisTaskD0", Form("Are we checking the momentum conservation? %s", checkP? "yes" : "no")); + ::Info("AddAnalysisTaskD0", Form("Are we checking the feeddown? %s", checkFeedDown? "yes" : "no")); + ::Info("AddAnalysisTaskD0", Form("Are we rejecting the Hijing generated? %s", checkQuark? "yes" : "no")); + ::Info("AddAnalysisTaskD0", Form("Which D0 are we keeping? %s", (originDselection==0? "only from c quark" : originDselection==1? "only from b quark" : "both from c and b quark") )); + ::Info("AddAnalysisTaskD0", Form("Selecting Mother in Acceptance: Min pT %.1f, Eta Range %.1f - %.1f", minpt, mineta, maxeta)); + + + if (isPP) + task->UseMultiplicity("QUALITY"); + else + task->UseCentrality(centrality); + // set event mixing options + task->UseContinuousMix(); + //task->UseBinnedMix(); + task->SetNMix(nmix); + task->SetMaxDiffVz(maxDiffVzMix); + task->SetMaxDiffMult(maxDiffMultMix); + if (!isPP && !ispPb) task->SetMaxDiffAngle(maxDiffAngleMixDeg*TMath::DegToRad()); //set angle diff in rad + ::Info("AddAnalysisTaskD0", 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 : ispPb ? 0.0 : maxDiffAngleMixDeg))); + + mgr->AddTask(task); - // - // -- Define track cuts ------------------------------------------------------------------------- // + // -- 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", cutV, 1, kFALSE, kFALSE); + AliRsnCutEventUtils *cutEventUtils = new AliRsnCutEventUtils("cutEventUtils", kFALSE, kTRUE); + + if(checkpileup == kTRUE){ + + if(SPDpileup == kTRUE) {cutEventUtils->SetRemovePileUppA2013(kTRUE); + //cutEventUtils->SetRemoveFirstEvtInChunk(kTRUE); + //cutEventUtils->SetUseVertexSelection2013pA(kTRUE); + cutEventUtils->SetUseMVPlpSelection(kFALSE); + cutEventUtils->SetMinPlpContribSPD(5); + } + if(SPDpileup == kFALSE){cutEventUtils->SetRemovePileUppA2013(kTRUE); + //cutEventUtils->SetRemoveFirstEvtInChunk(kTRUE); + //cutEventUtils->SetUseVertexSelection2013pA(kTRUE); + cutEventUtils->SetUseMVPlpSelection(kTRUE); + cutEventUtils->SetMinPlpContribMV(5); + } + } + + ::Info("AddAnalysisTaskD0", Form("Checking Pile up? %s", (checkpileup ? "yes" : "no") )); + ::Info("AddAnalysisTaskD0", Form("Which Method? %s", (checkpileup? (SPDpileup ? "SPD" : "Multi Vertex") : "none" ))); + + // define and fill cut set for event cut + AliRsnCutSet *eventCuts = new AliRsnCutSet("eventCuts", AliRsnTarget::kEvent); + eventCuts->AddCut(cutVertex); + //if(SPDpileup == kFALSE) eventCuts->AddCut(cutEventUtils); + eventCuts->AddCut(cutEventUtils); + eventCuts->SetCutScheme(Form("%s&%s", cutEventUtils->GetName(), cutVertex->GetName() )); + eventCuts->ShowCuts(); + eventCuts->PrintSetInfo(); + // set cuts in task + task->SetEventCuts(eventCuts); - // integrated pion cut - AliRsnCutDaughterD0 *cutPi = new AliRsnCutDaughterD0("cutPionForD0", AliPID::kPion); - //cutPi->SetNoPID(kTRUE); - cutPi->SetTPCPionPIDCut(nsigmaTPCPi); - cutPi->SetTOFPionPIDCut(nsigmaTOFPi); - cutPi->SetPtDependentPIDCut(ptdepPIDcut); - AliRsnCutTrackQuality *cutQuality = (AliRsnCutTrackQuality*) cutPi->CutQuality(); - cutQuality->SetCheckOnlyFilterBit(kFALSE); - cutQuality->SetAODTestFilterBit(aodFilterBit); - if(maxDCAcutFixed)cutQuality->SetDCARmax(trackDCAcutMax); - else cutQuality->SetDCARPtFormula(formula); - if(minDCAcutFixed) cutQuality->SetDCARmin(trackDCAcutMin); - else cutQuality->SetDCARPtFormulaMin(formulaMin); - if(useNTPCclt)cutQuality->SetTPCminNClusters(NTPCcluster); - if(!useNTPCclt)cutQuality->SetMinNCrossedRowsTPC(NTPCcluster,kTRUE); - if(!useNTPCclt)cutQuality->SetMinNCrossedRowsOverFindableClsTPC(NTPCcrratio,kTRUE); - cutQuality->SetPtRange(minpt,1E20); - cutQuality->SetEtaRange(mineta, maxeta); - cutQuality->SetDCAZmax(trackDCAZcutMax); - cutQuality->SetSPDminNClusters(minSPDclt); - cutQuality->SetITSminNClusters(0); - cutQuality->SetITSmaxChi2(1E20); - cutQuality->SetTPCmaxChi2(1E20); - cutQuality->SetRejectKinkDaughters(); - cutQuality->Print(); - - - - // cut set - AliRsnCutSet *cutSetPi = new AliRsnCutSet("setPionD0", AliRsnTarget::kDaughter); - cutSetPi->AddCut(cutPi); - cutSetPi->SetCutScheme(cutPi->GetName()); - // add to task - Int_t iCutPi = task->AddTrackCuts(cutSetPi); - - - - // integrated kaon cut - AliRsnCutDaughterD0 *cutK = new AliRsnCutDaughterD0("cutKaonForD0", AliPID::kKaon); - //cutK->SetNoPID(kTRUE); - cutK->SetTPCKaonPIDCut(nsigmaTPCKa); - cutK->SetTOFKaonPIDCut(nsigmaTOFKa); - cutK->SetPtDependentPIDCut(ptdepPIDcut); - AliRsnCutTrackQuality *cutQuality = (AliRsnCutTrackQuality*) cutK->CutQuality(); - cutQuality->SetCheckOnlyFilterBit(kFALSE); - cutQuality->SetAODTestFilterBit(aodFilterBit); - if(maxDCAcutFixed)cutQuality->SetDCARmax(trackDCAcutMax); - else cutQuality->SetDCARPtFormula(formula); - if(minDCAcutFixed) cutQuality->SetDCARmin(trackDCAcutMin); - else cutQuality->SetDCARPtFormulaMin(formulaMin); - if(useNTPCclt)cutQuality->SetTPCminNClusters(NTPCcluster); - if(!useNTPCclt)cutQuality->SetMinNCrossedRowsTPC(NTPCcluster,kTRUE); - if(!useNTPCclt)cutQuality->SetMinNCrossedRowsOverFindableClsTPC(NTPCcrratio,kTRUE); - cutQuality->SetPtRange(minpt,1E20); - cutQuality->SetEtaRange(mineta, maxeta); - cutQuality->SetDCAZmax(trackDCAZcutMax); - cutQuality->SetSPDminNClusters(minSPDclt); - cutQuality->SetITSminNClusters(0); - cutQuality->SetITSmaxChi2(1E20); - cutQuality->SetTPCmaxChi2(1E20); - cutQuality->SetRejectKinkDaughters(); - cutQuality->Print(); - - - - // cut set - AliRsnCutSet *cutSetK = new AliRsnCutSet("setKaonD0", AliRsnTarget::kDaughter); - cutSetK->AddCut(cutK); - cutSetK->SetCutScheme(cutK->GetName()); - // add to task - Int_t iCutK = task->AddTrackCuts(cutSetK); - - - - //////////////////////////////////////////////////////////////////////////////////////////////// - - // -- 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); - /* dca product */ Int_t dcapID = task->CreateValue(AliRsnMiniValue::kDCAproduct, kFALSE); - /* first daughter pt */ Int_t daug1ptID = task->CreateValue(AliRsnMiniValue::kFirstDaughterPt, kFALSE); - /* second daughter pt */ Int_t daug2ptID = task->CreateValue(AliRsnMiniValue::kSecondDaughterPt, kFALSE); - /* first daughter dca */ Int_t daug1dcaID = task->CreateValue(AliRsnMiniValue::kFirstDaughterDCA, kFALSE); - /* second daughter dca*/ Int_t daug2dcaID = task->CreateValue(AliRsnMiniValue::kSecondDaughterDCA, kFALSE); - /* number of Sisters */ Int_t nsistID = task->CreateValue(AliRsnMiniValue::kNSisters, kFALSE); - /* number of trackl. */ Int_t trackletsID = task->CreateValue(AliRsnMiniValue::kTracklets, kFALSE); + // + // -- 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); + + //tracklets + Int_t trackletID = task->CreateValue(AliRsnMiniValue::kTracklets, kFALSE); + AliRsnMiniOutput *outTracklets = task->CreateOutput("eventTracklets", "HIST", "EVENT"); + outTracklets->AddAxis(trackletID, 250, -0.5, 249.5); + + + //event plane (only for PbPb) + Int_t planeID = task->CreateValue(AliRsnMiniValue::kPlaneAngle, kFALSE); + AliRsnMiniOutput *outPlane = 0x0; + if (!isPP){ + outPlane = task->CreateOutput("eventPlane", "HIST", "EVENT"); + outPlane->AddAxis(planeID, 180, 0.0, TMath::Pi()); + } + + TH2F* hvz=new TH2F("hVzVsCent","",100,0.,100., 220,-11.,11.); + task->SetEventQAHist("vz",hvz);//plugs this histogram into the fHAEventVz data member + + TH2F* hmc=new TH2F("MultiVsCent","",100,0.,100.,1000,0.,1000.); + hmc->GetYaxis()->SetTitle("QUALITY"); + task->SetEventQAHist("multicent",hmc);//plugs this histogram into the fHAEventMultiCent data member + + TH2F* hep=new TH2F("hEventPlaneVsCent","",100,0.,100., 180,0.,TMath::Pi()); + task->SetEventQAHist("eventplane",hep);//plugs this histogram into the fHAEventPlane data member // - // -- Create all needed outputs ----------------------------------------------------------------- + // -- PAIR CUTS (common to all resonances) ------------------------------------------------------ // + AliRsnCutMiniPair *cutY = 0x0; - // use an array for more compact writing, which are different on mixing and charges - // [0] = unlike - // [1] = mixing - // [2] = like ++ - // [3] = like -- - - - if(!isMC || doCalculationInMC == kTRUE){ - - Bool_t use [8] = { 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 }; - Bool_t useIM [8] = { 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 }; - TString name [8] = {"Unlike1", "Unlike2", "Mixing1", "Mixing2", "RotateK1", "RotateK2", "LikePP" , "LikeMM"}; - TString comp [8] = {"PAIR" , "PAIR" , "MIX" , "MIX" , "ROTATE1" , "ROTATE1" , "PAIR" , "PAIR" }; - TString output [8] = {"SPARSE" , "SPARSE" , "SPARSE" , "SPARSE" , "SPARSE" , "SPARSE" , "SPARSE" , "SPARSE"}; - Char_t charge1 [8] = {'-' , '+' , '-' , '+' , '-' , '+' , '+' , '-' }; - Char_t charge2 [8] = {'+' , '-' , '+' , '-' , '+' , '-' , '+' , '-' }; - Int_t cutID1 [8] = { iCutK , iCutK , iCutK , iCutK , iCutK , iCutK , iCutK , iCutK }; - Int_t cutID2 [8] = { iCutPi , iCutPi , iCutPi , iCutPi , iCutPi , iCutPi , iCutPi , iCutPi }; - Int_t ipdg [8] = { 421 , -421 , 421 , -421 , 421 , -421 , 421 , -421 }; - Double_t mass [8] = { 1.86486 , 1.86486 , 1.86486 , 1.86486 , 1.86486 , 1.86486 , 1.86486 , 1.86486}; - - for (Int_t i = 0; i < 8; i++) { - if (!use[i]) continue; - - // create output - AliRsnMiniOutput *out = task->CreateOutput(Form("D0_%s%s", name[i].Data(), suffix), output[i].Data(), comp[i].Data()); - // selection settings - 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(ipdg[i]); - out->SetMotherMass(mass[i]); - // pair cuts - out->SetPairCuts(cutsPair); - - // axis X: invmass (or resolution) - //if (useIM[i]) - out->AddAxis(imID, bins, min_inv_mass, max_inv_mass); - //else - // out->AddAxis(resID, 200, -0.02, 0.02); - // axis Y: transverse momentum - out->AddAxis(ptID, 200, 0.0, 20.0); - - // axiz Z: pseudorapidity - //if(sanityhistos==kTRUE) out->AddAxis(etaID, 100, -1, 1); - - - if (!isPP) {if(!centortracklets) out->AddAxis(centID, 100, 0.0, 100.0); - else out->AddAxis(trackletsID, 400, -0.5, 400.0);} - else out->AddAxis(centID, 400, 0.0, 400.0); - } - - if(sanityhistos==kTRUE){ - - // SANITY CHECK HISTOS - - TString mode = "SPARSE"; - - // create output - AliRsnMiniOutput *out = task->CreateOutput("D0_MixingPP", mode.Data(), "MIX"); - // selection settings - out->SetCutID(0, iCutK); - out->SetCutID(1, iCutPi); - out->SetDaughter(0, AliRsnDaughter::kKaon); - out->SetDaughter(1, AliRsnDaughter::kPion); - out->SetCharge(0, '+'); - out->SetCharge(1, '+'); - out->SetMotherPDG(421); - out->SetMotherMass(1.86486); - // pair cuts - out->SetPairCuts(cutsPair); - - // binnings - out->AddAxis(imID, bins, min_inv_mass, max_inv_mass); - out->AddAxis(ptID, 200, 0.0, 20.0); - //out->AddAxis(etaID, 100, -1, 1); - - - if (!isPP) {if(!centortracklets) out->AddAxis(centID, 100, 0.0, 100.0); - else out->AddAxis(trackletsID, 400, -0.5, 400.0);} - else out->AddAxis(centID, 400, 0.0, 400.0); - - // create output - AliRsnMiniOutput *out = task->CreateOutput("D0_MixingMM", mode.Data(), "MIX"); - // selection settings - out->SetCutID(0, iCutK); - out->SetCutID(1, iCutPi); - out->SetDaughter(0, AliRsnDaughter::kKaon); - out->SetDaughter(1, AliRsnDaughter::kPion); - out->SetCharge(0, '-'); - out->SetCharge(1, '-'); - out->SetMotherPDG(-421); - out->SetMotherMass(1.86486); - // pair cuts - out->SetPairCuts(cutsPair); - - // binnings - out->AddAxis(imID, bins, min_inv_mass, max_inv_mass); - out->AddAxis(ptID, 200, 0.0, 20.0); - //out->AddAxis(etaID, 100, -1, 1); - - if (!isPP) {if(!centortracklets) out->AddAxis(centID, 100, 0.0, 100.0); - else out->AddAxis(trackletsID, 400, -0.5, 400.0);} - else out->AddAxis(centID, 400, 0.0, 400.0); - - - } - - + if(fixedYcut == kTRUE){ + cutY = new AliRsnCutMiniPair("cutRapidity", AliRsnCutMiniPair::kRapidityRange); + cutY->SetRangeD(minYlab, maxYlab); } - - if(monitor == kTRUE){ - AddMonitorOutput_PionEta(cutSetPi->GetMonitorOutput()); - AddMonitorOutput_PionY(cutSetPi->GetMonitorOutput()); - AddMonitorOutput_PionMinPt(cutSetPi->GetMonitorOutput()); - AddMonitorOutput_PionDCA(cutSetPi->GetMonitorOutput()); - AddMonitorOutput_PionTPC_PIDCut(cutSetPi->GetMonitorOutput()); - AddMonitorOutput_PionTOF_PIDCut(cutSetPi->GetMonitorOutput()); - AddMonitorOutput_PionNTPC(cutSetPi->GetMonitorOutput()); - - AddMonitorOutput_KaonEta(cutSetK->GetMonitorOutput()); - AddMonitorOutput_KaonY(cutSetK->GetMonitorOutput()); - AddMonitorOutput_KaonMinPt(cutSetK->GetMonitorOutput()); - AddMonitorOutput_KaonDCA(cutSetK->GetMonitorOutput()); - AddMonitorOutput_KaonTPC_PIDCut(cutSetK->GetMonitorOutput()); - AddMonitorOutput_KaonTOF_PIDCut(cutSetK->GetMonitorOutput()); - AddMonitorOutput_KaonNTPC(cutSetK->GetMonitorOutput()); + else { + cutY = new AliRsnCutMiniPair("cutRapidity", AliRsnCutMiniPair::kRapidityFiducialRegion); + cutY->SetRangeD(-0.8, 0.8); + cutY->SetPtDepCut(kTRUE); + cutY->SetMinPt(0.0); + cutY->SetMaxPt(5.0); + cutY->SetPtDepCutMaxFormula("-0.2/15*pt*pt+1.9/15*pt+0.5"); + cutY->SetPtDepCutMinFormula("0.2/15*pt*pt-1.9/15*pt-0.5"); } + ::Info("AddAnalysisTaskD0", Form("Fixed Y cut? %s", (fixedYcut ? "yes" : "no") )); - if (isMC) { - - // TRUE RECONSTRUCTED PAIRS - - TString mode = "SPARSE"; - - // create output - AliRsnMiniOutput *out = task->CreateOutput("D0_True1", mode.Data(), "TRUE"); - // selection settings - out->SetCutID(0, iCutK); - out->SetCutID(1, iCutPi); - out->SetDaughter(0, AliRsnDaughter::kKaon); - out->SetDaughter(1, AliRsnDaughter::kPion); - out->SetCharge(0, '-'); - out->SetCharge(1, '+'); - out->SetMotherPDG(421); - out->SetMotherMass(1.86486); - // pair cuts - out->SetPairCuts(cutsPair); - out->SetMaxNSisters(maxSisters); - out->SetCheckMomentumConservation(checkP); - out->SetCheckFeedDown(checkFeedDown); - out->SetRejectCandidateIfNotFromQuark(checkQuark); - out->SetDselection(originDselection); - // binnings - out->AddAxis(imID, bins, min_inv_mass, max_inv_mass); - out->AddAxis(ptID, 200, 0.0, 20.0); - //out->AddAxis(yID, 100, -1, 1); - //out->AddAxis(dcapID, 100, -0.001, 0.001); - //out->AddAxis(nsistID, 10, 0, 5); - - if (!isPP) {if(!centortracklets) out->AddAxis(centID, 100, 0.0, 100.0); - else out->AddAxis(trackletsID, 400, -0.5, 400.0);} - else out->AddAxis(centID, 400, 0.0, 400.0); - - // create output - AliRsnMiniOutput *out = task->CreateOutput("D0_True2", mode.Data(), "TRUE"); - // selection settings - out->SetCutID(0, iCutK); - out->SetCutID(1, iCutPi); - out->SetDaughter(0, AliRsnDaughter::kKaon); - out->SetDaughter(1, AliRsnDaughter::kPion); - out->SetCharge(0, '+'); - out->SetCharge(1, '-'); - out->SetMotherPDG(-421); - out->SetMotherMass(1.86486); - // pair cuts - out->SetPairCuts(cutsPair); - out->SetMaxNSisters(maxSisters); - out->SetCheckMomentumConservation(checkP); - out->SetCheckFeedDown(checkFeedDown); - out->SetRejectCandidateIfNotFromQuark(checkQuark); - out->SetDselection(originDselection); - // binnings - out->AddAxis(imID, bins, min_inv_mass, max_inv_mass); - out->AddAxis(ptID, 200, 0.0, 20.0); - //out->AddAxis(yID, 100, -1, 1); - //out->AddAxis(dcapID, 100, -0.001, 0.001); - //out->AddAxis(nsistID, 10, 0, 5); - - if (!isPP) {if(!centortracklets) out->AddAxis(centID, 100, 0.0, 100.0); - else out->AddAxis(trackletsID, 400, -0.5, 400.0);} - else out->AddAxis(centID, 400, 0.0, 400.0); - - - // GENERATED MOTHERS + AliRsnCutMiniPair *cutDCAproduct = new AliRsnCutMiniPair("cutDCAproduct", AliRsnCutMiniPair::kDCAproduct); + cutDCAproduct->SetRangeD(-1E20, dcaProduct); - TString mode = "SPARSE"; + AliRsnCutSet *cutsPairY = new AliRsnCutSet("pairCutsY", AliRsnTarget::kMother); + cutsPairY->AddCut(cutY); + cutsPairY->UseMonitor(kTRUE); + cutsPairY->SetCutScheme("setPairD0_Y"); + cutsPairY->ShowCuts(); + cutsPairY->PrintSetInfo(); - // create output - AliRsnMiniOutput *out = task->CreateOutput("D0_TrueMC1", mode.Data(), "MOTHER"); - // selection settings - out->SetDaughter(0, AliRsnDaughter::kKaon); - out->SetDaughter(1, AliRsnDaughter::kPion); - out->SetMotherPDG(421); - out->SetMotherMass(1.86486); - // pair cuts - out->SetPairCuts(cutsPairY); - // binnings - out->AddAxis(imID, bins, min_inv_mass, max_inv_mass); - out->AddAxis(ptID, 200, 0.0, 20.0); - //out->AddAxis(yID, 100, -1, 1); - - if (!isPP) {if(!centortracklets) out->AddAxis(centID, 100, 0.0, 100.0); - else out->AddAxis(trackletsID, 400, -0.5, 400.0);} - else out->AddAxis(centID, 400, 0.0, 400.0); - - // create output - AliRsnMiniOutput *out = task->CreateOutput("D0_TrueMC2", mode.Data(), "MOTHER"); - // selection settings - out->SetDaughter(0, AliRsnDaughter::kKaon); - out->SetDaughter(1, AliRsnDaughter::kPion); - out->SetMotherPDG(-421); - out->SetMotherMass(1.86486); - // pair cuts - out->SetPairCuts(cutsPairY); - // binnings - out->AddAxis(imID, bins, min_inv_mass, max_inv_mass); - out->AddAxis(ptID, 200, 0.0, 20.0); - //out->AddAxis(yID, 100, -1, 1); - - if (!isPP) {if(!centortracklets) out->AddAxis(centID, 100, 0.0, 100.0); - else out->AddAxis(trackletsID, 400, -0.5, 400.0);} - else out->AddAxis(centID, 400, 0.0, 400.0); + AliRsnCutSet *cutsPair = new AliRsnCutSet("pairCuts", AliRsnTarget::kMother); + cutsPair->AddCut(cutY); + cutsPair->AddCut(cutDCAproduct); + cutsPair->UseMonitor(kTRUE); + cutsPair->SetCutScheme(Form("%s&%s", cutY->GetName(), cutDCAproduct->GetName())); + cutsPair->ShowCuts(); + cutsPair->PrintSetInfo(); - - // GENERATED MOTHERS IN THE ACCEPTANCE - - TString mode = "SPARSE"; - - // create output - AliRsnMiniOutput *out = task->CreateOutput("D0_TrueMC_InAcc1", mode.Data(), "MOTHER_IN_ACC"); - // selection settings - out->SetDaughter(0, AliRsnDaughter::kKaon); - out->SetDaughter(1, AliRsnDaughter::kPion); - out->SetMotherPDG(421); - out->SetMotherMass(1.86486); - // pair cuts - out->SetPairCuts(cutsPairY); - // binnings - out->AddAxis(imID, bins, min_inv_mass, max_inv_mass); - out->AddAxis(ptID, 200, 0.0, 20.0); - //out->AddAxis(yID, 100, -1, 1); + // + // -- CONFIG ANALYSIS -------------------------------------------------------------------------- + gROOT->LoadMacro("$ALICE_ROOT/PWGLF/RESONANCES/macros/mini/ConfigD0.C"); - if (!isPP) {if(!centortracklets) out->AddAxis(centID, 100, 0.0, 100.0); - else out->AddAxis(trackletsID, 400, -0.5, 400.0);} - else out->AddAxis(centID, 400, 0.0, 400.0); + if (isMC) { + Printf("========================== MC analysis - PID cuts used"); + } else + Printf("========================== DATA analysis - PID cuts used"); + if (!ConfigD0(task, isPP, isMC, monitor, centortracklets, sanityhistos, nsigmaTPCPi, nsigmaTPCKa, nsigmaTOFPi, nsigmaTOFKa, aodFilterBit, trackDCAcutMax, trackDCAcutMin, trackDCAZcutMax, NTPCcluster, NTPCcrratio, minSPDclt, minpt, maxSisters, checkP, useNTPCclt, minDCAcutFixed, maxDCAcutFixed, ptdepPIDcut, checkFeedDown, checkQuark, doCalculationInMC, originDselection, mineta, maxeta, min_inv_mass, max_inv_mass, bins, "", cutsPairY, cutsPair)) return 0x0; - // create output - AliRsnMiniOutput *out = task->CreateOutput("D0_TrueMC_InAcc2", mode.Data(), "MOTHER_IN_ACC"); - // selection settings - out->SetDaughter(0, AliRsnDaughter::kKaon); - out->SetDaughter(1, AliRsnDaughter::kPion); - out->SetMotherPDG(-421); - out->SetMotherMass(1.86486); - // pair cuts - out->SetPairCuts(cutsPairY); - // binnings - out->AddAxis(imID, bins, min_inv_mass, max_inv_mass); - out->AddAxis(ptID, 200, 0.0, 20.0); - //out->AddAxis(yID, 100, -1, 1); - - if (!isPP) {if(!centortracklets) out->AddAxis(centID, 100, 0.0, 100.0); - else out->AddAxis(trackletsID, 400, -0.5, 400.0);} - else out->AddAxis(centID, 400, 0.0, 400.0); + // + // -- CONTAINERS -------------------------------------------------------------------------------- + // + TString outputFileName = AliAnalysisManager::GetCommonFileName(); + Printf("AddAnalysisTaskD0 - Set OutputFileName : \n %s\n", outputFileName.Data() ); + AliAnalysisDataContainer *output = mgr->CreateContainer(Form("%s_%.1f_%d_%.2f_%d_%.1f_%.1f_%.1f_%.1f_%.1f_%.1f_%.2f_%d_%s",outNameSuffix.Data(),cutV,NTPCcluster,NTPCcrratio,minSPDclt,nsigmaTPCPi,nsigmaTPCKa,nsigmaTOFPi,nsigmaTOFKa,trackDCAcutMax,trackDCAZcutMax,minpt,originDselection,eventType.Data()), + TList::Class(), + AliAnalysisManager::kOutputContainer, + outputFileName); + mgr->ConnectInput(task, 0, mgr->GetCommonInputContainer()); + mgr->ConnectOutput(task, 1, output); - } - - - return kTRUE; -} - - -void AddMonitorOutput_PionEta(TObjArray *mon=0,TString opt="",AliRsnLoopDaughter *peta=0) -{ - - // PionEta - AliRsnValueDaughter *axisPionEta = new AliRsnValueDaughter("pion_eta", AliRsnValueDaughter::kEta); - axisPionEta->SetBins(-1.0,1.0,0.05); - - // output: 2D histogram - AliRsnListOutput *outMonitorPionEta = new AliRsnListOutput("Pion_Eta", AliRsnListOutput::kHistoDefault); - outMonitorPionEta->AddValue(axisPionEta); - - // add outputs to loop - if (mon) mon->Add(outMonitorPionEta); - if (peta) peta->AddOutput(outMonitorPionEta); - -} - -void AddMonitorOutput_PionY(TObjArray *mon=0,TString opt="",AliRsnLoopDaughter *py=0) -{ - - // PionY - AliRsnValueDaughter *axisPionY = new AliRsnValueDaughter("pion_y", AliRsnValueDaughter::kY); - axisPionY->SetBins(-1.0,1.0,0.05); - - // output: 2D histogram - AliRsnListOutput *outMonitorPionY = new AliRsnListOutput("Pion_Y", AliRsnListOutput::kHistoDefault); - outMonitorPionY->AddValue(axisPionY); - - // add outputs to loop - if (mon) mon->Add(outMonitorPionY); - if (py) py->AddOutput(outMonitorPionY); - -} - -void AddMonitorOutput_PionMinPt(TObjArray *mon=0,TString opt="",AliRsnLoopDaughter *pmpt=0) -{ - - // PionMinPt - AliRsnValueDaughter *axisPionMinPt = new AliRsnValueDaughter("pion_minpt", AliRsnValueDaughter::kPt); - axisPionMinPt->SetBins(0.0,1,0.05); - - // output: 2D histogram - AliRsnListOutput *outMonitorPionMinPt = new AliRsnListOutput("Pion_MinPt", AliRsnListOutput::kHistoDefault); - outMonitorPionMinPt->AddValue(axisPionMinPt); - - // add outputs to loop - if (mon) mon->Add(outMonitorPionMinPt); - if (pmpt) pmpt->AddOutput(outMonitorPionMinPt); - -} - -void AddMonitorOutput_PionDCA(TObjArray *mon=0,TString opt="",AliRsnLoopDaughter *pdca=0) -{ - - // PionDCA - AliRsnValueDaughter *axisPionDCA = new AliRsnValueDaughter("pion_dca", AliRsnValueDaughter::kDCAXY); - axisPionDCA->SetBins(-1.0,1,0.05); - - // output: 2D histogram - AliRsnListOutput *outMonitorPionDCA = new AliRsnListOutput("Pion_DCA", AliRsnListOutput::kHistoDefault); - outMonitorPionDCA->AddValue(axisPionDCA); - - // add outputs to loop - if (mon) mon->Add(outMonitorPionDCA); - if (pdca) pdca->AddOutput(outMonitorPionDCA); - -} - -void AddMonitorOutput_PionTPC_PIDCut(TObjArray *mon=0,TString opt="",AliRsnLoopDaughter *piTPCPID=0) -{ - - // Pion PID Cut - AliRsnValueDaughter *axisPionTPCPIDCut = new AliRsnValueDaughter("pionTPCPID", AliRsnValueDaughter::kTPCnsigmaPi); - axisPionTPCPIDCut->SetBins(0.0,5,0.1); - - // output: 2D histogram - AliRsnListOutput *outMonitorPionTPCPIDCut = new AliRsnListOutput("Pion_TPC_PID_Cut", AliRsnListOutput::kHistoDefault); - outMonitorPionTPCPIDCut->AddValue(axisPionTPCPIDCut); - - // add outputs to loop - if (mon) mon->Add(outMonitorPionTPCPIDCut); - if (piTPCPID) piTPCPID->AddOutput(outMonitorPionPIDCut); - -} - -void AddMonitorOutput_PionTOF_PIDCut(TObjArray *mon=0,TString opt="",AliRsnLoopDaughter *piTOFPID=0) -{ - - // Pion PID Cut - AliRsnValueDaughter *axisPionTOFPIDCut = new AliRsnValueDaughter("pionTOFPID", AliRsnValueDaughter::kTOFnsigmaPi); - axisPionTOFPIDCut->SetBins(0.0,5,0.1); - - // output: 2D histogram - AliRsnListOutput *outMonitorPionTOFPIDCut = new AliRsnListOutput("Pion_TOF_PID_Cut", AliRsnListOutput::kHistoDefault); - outMonitorPionTOFPIDCut->AddValue(axisPionTOFPIDCut); - - // add outputs to loop - if (mon) mon->Add(outMonitorPionTOFPIDCut); - if (piTOFPID) piTOFPID->AddOutput(outMonitorPionTOFPIDCut); - -} - -void AddMonitorOutput_PionNTPC(TObjArray *mon=0,TString opt="",AliRsnLoopDaughter *piNTPC=0) -{ - - // Pion PID Cut - AliRsnValueDaughter *axisPionNTPC = new AliRsnValueDaughter("pionNTPC", AliRsnValueDaughter::kNTPCclusters); - axisPionNTPC->SetBins(0.0,200,1); - - // output: 2D histogram - AliRsnListOutput *outMonitorPionNTPC = new AliRsnListOutput("Pion_NTPC", AliRsnListOutput::kHistoDefault); - outMonitorPionNTPC->AddValue(axisPionNTPC); - - // add outputs to loop - if (mon) mon->Add(outMonitorPionNTPC); - if (piNTPC) piNTPC->AddOutput(outMonitorPionNTPC); - -} - -void AddMonitorOutput_KaonEta(TObjArray *mon=0,TString opt="",AliRsnLoopDaughter *keta=0) -{ - - // KaonEta - AliRsnValueDaughter *axisKaonEta = new AliRsnValueDaughter("kaon_eta", AliRsnValueDaughter::kEta); - axisKaonEta->SetBins(-1.0,1.0,0.05); - - // output: 2D histogram - AliRsnListOutput *outMonitorKaonEta = new AliRsnListOutput("Kaon_Eta", AliRsnListOutput::kHistoDefault); - outMonitorKaonEta->AddValue(axisKaonEta); - - // add outputs to loop - if (mon) mon->Add(outMonitorKaonEta); - if (keta) keta->AddOutput(outMonitorKaonEta); - -} - -void AddMonitorOutput_KaonY(TObjArray *mon=0,TString opt="",AliRsnLoopDaughter *ky=0) -{ - - // KaonY - AliRsnValueDaughter *axisKaonY = new AliRsnValueDaughter("kaon_y", AliRsnValueDaughter::kY); - axisKaonY->SetBins(-1.0,1.0,0.05); - - // output: 2D histogram - AliRsnListOutput *outMonitorKaonY = new AliRsnListOutput("Kaon_Y", AliRsnListOutput::kHistoDefault); - outMonitorKaonY->AddValue(axisKaonY); - - // add outputs to loop - if (mon) mon->Add(outMonitorKaonY); - if (ky) ky->AddOutput(outMonitorKaonY); - -} - -void AddMonitorOutput_KaonMinPt(TObjArray *mon=0,TString opt="",AliRsnLoopDaughter *kmpt=0) -{ - - // KaonMinPt - AliRsnValueDaughter *axisKaonMinPt = new AliRsnValueDaughter("kaon_minpt", AliRsnValueDaughter::kPt); - axisKaonMinPt->SetBins(0.0,1,0.05); - - // output: 2D histogram - AliRsnListOutput *outMonitorKaonMinPt = new AliRsnListOutput("Kaon_MinPt", AliRsnListOutput::kHistoDefault); - outMonitorKaonMinPt->AddValue(axisKaonMinPt); - - // add outputs to loop - if (mon) mon->Add(outMonitorKaonMinPt); - if (kmpt) kmpt->AddOutput(outMonitorKaonMinPt); - -} - -void AddMonitorOutput_KaonDCA(TObjArray *mon=0,TString opt="",AliRsnLoopDaughter *kdca=0) -{ - - // KaonDCA - AliRsnValueDaughter *axisKaonDCA = new AliRsnValueDaughter("kaon_dca", AliRsnValueDaughter::kDCAXY); - axisKaonDCA->SetBins(-1.0,1,0.05); - - // output: 2D histogram - AliRsnListOutput *outMonitorKaonDCA = new AliRsnListOutput("Kaon_DCA", AliRsnListOutput::kHistoDefault); - outMonitorKaonDCA->AddValue(axisKaonDCA); - - // add outputs to loop - if (mon) mon->Add(outMonitorKaonDCA); - if (kdca) kdca->AddOutput(outMonitorKaonDCA); - + return task; } - -void AddMonitorOutput_KaonTPC_PIDCut(TObjArray *mon=0,TString opt="",AliRsnLoopDaughter *kTPCPID=0) -{ - - // Kaon TPC PID Cut - AliRsnValueDaughter *axisKaonTPCPIDCut = new AliRsnValueDaughter("kaonTPCPID", AliRsnValueDaughter::kTPCnsigmaK); - axisKaonTPCPIDCut->SetBins(0.0,5,0.1); - - // output: 2D histogram - AliRsnListOutput *outMonitorKaonTPCPIDCut = new AliRsnListOutput("Kaon_TPC_PID_Cut", AliRsnListOutput::kHistoDefault); - outMonitorKaonTPCPIDCut->AddValue(axisKaonTPCPIDCut); - - // add outputs to loop - if (mon) mon->Add(outMonitorKaonTPCPIDCut); - if (kTPCPID) kTPCPID->AddOutput(outMonitorKaonTPCPIDCut); - -} - -void AddMonitorOutput_KaonTOF_PIDCut(TObjArray *mon=0,TString opt="",AliRsnLoopDaughter *kTOFPID=0) -{ - - // Kaon TOF PID Cut - AliRsnValueDaughter *axisKaonTOFPIDCut = new AliRsnValueDaughter("kaonTOFPID", AliRsnValueDaughter::kTOFnsigmaK); - axisKaonTOFPIDCut->SetBins(0.0,5,0.1); - - // output: 2D histogram - AliRsnListOutput *outMonitorKaonTOFPIDCut = new AliRsnListOutput("Kaon_TOF_PID_Cut", AliRsnListOutput::kHistoDefault); - outMonitorKaonTOFPIDCut->AddValue(axisKaonTOFPIDCut); - - // add outputs to loop - if (mon) mon->Add(outMonitorKaonTOFPIDCut); - if (kTOFPID) kTOFPID->AddOutput(outMonitorKaonTOFPIDCut); - -} - -void AddMonitorOutput_KaonNTPC(TObjArray *mon=0,TString opt="",AliRsnLoopDaughter *kNTPC=0) -{ - - // Kaon PID Cut - AliRsnValueDaughter *axisKaonNTPC = new AliRsnValueDaughter("kaonNTPC", AliRsnValueDaughter::kNTPCclusters); - axisKaonNTPC->SetBins(0.0,200,1); - - // output: 2D histogram - AliRsnListOutput *outMonitorKaonNTPC = new AliRsnListOutput("Kaon_NTPC", AliRsnListOutput::kHistoDefault); - outMonitorKaonNTPC->AddValue(axisKaonNTPC); - - // add outputs to loop - if (mon) mon->Add(outMonitorKaonNTPC); - if (kNTPC) kNTPC->AddOutput(outMonitorKaonNTPC); - -} - -- 2.39.3