]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Updated macros for K* in pA analysis and QA monitoring
authorfbellini <fbellini@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 28 Nov 2013 15:31:35 +0000 (15:31 +0000)
committerfbellini <fbellini@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 28 Nov 2013 15:31:35 +0000 (15:31 +0000)
PWGLF/RESONANCES/macros/mini/AddMonitorOutput.C
PWGLF/RESONANCES/macros/mini/AddTaskKStarPPB.C
PWGLF/RESONANCES/macros/mini/ConfigTOFanalysisKStar.C

index 7f440c43c329d753aa1c51b6194c5df318518ce1..77603684790d3d3cfff3c8a8d2c0aa9fecfab7b6 100644 (file)
@@ -5,6 +5,8 @@
  Tuned for monitoring TOF KStar analysis of PbPb 2010 data
 
 Options ("opt" argument):
+- dim1 --> use TH1 only (no p or pt dependence)
+- dim3 --> use TH3 (p dependence) for TOF vs TPC pid histos
 - NoTOFSIGMA  --> disable the nsigma_TOF vs p histos
 - NoTPCSIGMA  --> disable the nsigma_TPC vs p_TPC histos
 - NoSIGN --> disable splitting for single track charge
@@ -13,29 +15,43 @@ Options ("opt" argument):
 
 void AddMonitorOutput(Bool_t useMCMon = 0, TObjArray *mon=0,TString opt="",AliRsnLoopDaughter *lm=0)
 {
+  //Set options
+  Bool_t useTH1 = opt.Contains("dim1");
+  Bool_t useTH3 = opt.Contains("dim3");
+  Bool_t monitorSign = !opt.Contains("NoSIGN");
+  Bool_t monitorTrackQ = !opt.Contains("NoTrackQ");
+  Bool_t monitorTPCpid = !opt.Contains("NoTPCSIGMA");
+  Bool_t monitorTOFpid = !opt.Contains("NoTPCSIGMA");
+  
   // Multiplicity/centrality
   AliRsnValueEvent *multi = new AliRsnValueEvent("multi",AliRsnValueEvent::kMult);
   multi->SetBins(0.0, 400.0, 1);
   // Momentum
   AliRsnValueDaughter *axisMomTPC = new AliRsnValueDaughter("pTPC", AliRsnValueDaughter::kPtpc);
-  axisMomTPC->SetBins(0.0, 10.0, 0.01);
+  axisMomTPC->SetBins(0.0, 10.0, 0.02);
   AliRsnValueDaughter *axisMomP = new AliRsnValueDaughter("p", AliRsnValueDaughter::kP);
-  axisMomP->SetBins(0.0, 10.0, 0.01);
+  axisMomP->SetBins(0.0, 10.0, 0.02);
   // Momentum Pt
   AliRsnValueDaughter *axisMomPt = new AliRsnValueDaughter("pt", AliRsnValueDaughter::kPt);
-  axisMomPt->SetBins(0.0,10.0,0.01);
+  axisMomPt->SetBins(0.0,10.0,0.02);
   // Eta
   AliRsnValueDaughter *axisMomEta = new AliRsnValueDaughter("eta", AliRsnValueDaughter::kEta);
   axisMomEta->SetBins(-1.0, 1.0, 0.1);
   //ITS clusters
   AliRsnValueDaughter *axisITScls = new AliRsnValueDaughter("ITScls", AliRsnValueDaughter::kNITSclusters);
-  axisITScls->SetBins(0.0, 10.0, 1.0);
+  axisITScls->SetBins(0.0, 12.0, 1.0);
   //TPC clusters
   AliRsnValueDaughter *axisTPCcls = new AliRsnValueDaughter("TPCcls", AliRsnValueDaughter::kNTPCclusters);
-  axisTPCcls->SetBins(0.0, 300.0, 1.0);
+  axisTPCcls->SetBins(0.0, 160.0, 1.0);
+  //TPC crossed rows
+  AliRsnValueDaughter *axisTPCcrossedRows = new AliRsnValueDaughter("TPCcrossedRows", AliRsnValueDaughter::kNTPCcrossedRows);
+  axisTPCcrossedRows->SetBins(0.0, 160.0, 1.0);
+  //TPC crossed rows / findable clusters
+  AliRsnValueDaughter *axisTPCcrossedRows2Fcls = new AliRsnValueDaughter("TPCcrossedRows2Fcls", AliRsnValueDaughter::kNTPCcrossedRowsFclusters);
+  axisTPCcrossedRows2Fcls->SetBins(0.0, 1.0, 0.1);
   //ITS chi2
   AliRsnValueDaughter *axisITSchi2 = new AliRsnValueDaughter("ITSchi2", AliRsnValueDaughter::kITSchi2);
-  axisITSchi2->SetBins(0.0, 10.0, 0.1);
+  axisITSchi2->SetBins(0.0, 12.0, 0.1);
   //TPC chi2
   AliRsnValueDaughter *axisTPCchi2 = new AliRsnValueDaughter("TPCchi2", AliRsnValueDaughter::kTPCchi2);
   axisTPCchi2->SetBins(0.0, 10.0, 0.1);
@@ -44,7 +60,7 @@ void AddMonitorOutput(Bool_t useMCMon = 0, TObjArray *mon=0,TString opt="",AliRs
   axisDCAxy->SetBins(-2.5, 2.5, 0.001);
   //DCA z
   AliRsnValueDaughter *axisDCAz = new AliRsnValueDaughter("DCAz", AliRsnValueDaughter::kDCAZ);
-  axisDCAz->SetBins(-10.0, 10.0, 0.01);
+  axisDCAz->SetBins(-5.0, 5.0, 0.01);
   //Charge
   AliRsnValueDaughter *axisCharge = new AliRsnValueDaughter("charge",AliRsnValueDaughter::kCharge);
   axisCharge->SetBins(-1.5, 1.5, 1.0);
@@ -70,6 +86,17 @@ void AddMonitorOutput(Bool_t useMCMon = 0, TObjArray *mon=0,TString opt="",AliRs
   /* tof signal - time */
   AliRsnValueDaughter *axisSigTOF = new AliRsnValueDaughter("sTOF", AliRsnValueDaughter::kTOFsignal);
   axisSigTOF->SetBins(10000.0, 50000.0, 250);//in ps
+  
+  // kTOFdeltaPi
+  AliRsnValueDaughter *axisTOFdeltaPi = new AliRsnValueDaughter("Dpi", AliRsnValueDaughter::kTOFdeltaPi);
+  axisTOFdeltaPi->SetBins(-3000.,3000., 10.);
+  // kTOFdeltaK
+  AliRsnValueDaughter *axisTOFdeltaK = new AliRsnValueDaughter("DK", AliRsnValueDaughter::kTOFdeltaK);
+  axisTOFdeltaK->SetBins(-3000.,3000., 10.);
+  // kTOFdeltaP
+  AliRsnValueDaughter *axisTOFdeltaP = new AliRsnValueDaughter("Dp", AliRsnValueDaughter::kTOFdeltaP);
+  axisTOFdeltaP->SetBins(-3000.,3000., 10.);
+
   // kTOFnsigmaPi
   AliRsnValueDaughter *axisTOFnsigmaPi = new AliRsnValueDaughter("pi", AliRsnValueDaughter::kTOFnsigmaPi);
   axisTOFnsigmaPi->SetBins(-10.,10., 0.1);
@@ -96,116 +123,116 @@ void AddMonitorOutput(Bool_t useMCMon = 0, TObjArray *mon=0,TString opt="",AliRs
   // output: TH1D for momentum
   AliRsnListOutput *outMonitorP = new AliRsnListOutput("P", AliRsnListOutput::kHistoDefault);
   outMonitorP->AddValue(axisMomP);
-  if (!opt.Contains("NoSIGN")) {
-    outMonitorP->AddValue(axisCharge);
-  }
+  if (monitorSign) outMonitorP->AddValue(axisCharge);
   if (mon) mon->Add(outMonitorP);
   if (lm) lm->AddOutput(outMonitorP);
   
   // output:  TH1D for pt
   AliRsnListOutput *outMonitorPt = new AliRsnListOutput("Pt", AliRsnListOutput::kHistoDefault);
   outMonitorPt->AddValue(axisMomPt);
-  if (!opt.Contains("NoSIGN")) {
-    outMonitorPt->AddValue(axisCharge);
-  }
+  if (monitorSign) outMonitorPt->AddValue(axisCharge);
   if (mon) mon->Add(outMonitorPt);
   if (lm) lm->AddOutput(outMonitorPt);
   
   // output: TH1D for pseudorapidity
   AliRsnListOutput *outMonitorEta = new AliRsnListOutput("Eta", AliRsnListOutput::kHistoDefault);
   outMonitorEta->AddValue(axisMomEta);
-  if (!opt.Contains("NoSIGN")) {
-    outMonitorEta->AddValue(axisCharge);
-  }
+  if (monitorSign) outMonitorEta->AddValue(axisCharge);
   if (mon) mon->Add(outMonitorEta);
   if (lm) lm->AddOutput(outMonitorEta);
   
-  // output:  TH2D for phi at vertex
+  // output:  TH1D for phi at vertex
   AliRsnListOutput *outMonitorPhi = new AliRsnListOutput("Phi", AliRsnListOutput::kHistoDefault);
-  //outMonitorPhi->AddValue(axisMomPt);
   outMonitorPhi->AddValue(axisPhi);
-  if (!opt.Contains("NoSIGN")) {
-    outMonitorPhi->AddValue(axisCharge);
-  }
+  if (monitorSign) outMonitorPhi->AddValue(axisCharge);
   if (mon) mon->Add(outMonitorPhi);
   if (lm) lm->AddOutput(outMonitorPhi);
   
-  // output:  TH2D for phiOuterTPC at TPC outer radius
+  // output:  TH1D for phiOuterTPC at TPC outer radius
   AliRsnListOutput *outMonitorPhiOuterTPC = new AliRsnListOutput("PhiOuterTPC", AliRsnListOutput::kHistoDefault);
-  //outMonitorPhiOuterTPC->AddValue(axisMomPt);
   outMonitorPhiOuterTPC->AddValue(axisPhiOuterTPC);
-  if (!opt.Contains("NoSIGN")) {
-    outMonitorPhiOuterTPC->AddValue(axisCharge);
-  }
+  if (monitorSign) outMonitorPhiOuterTPC->AddValue(axisCharge);
   if (mon) mon->Add(outMonitorPhiOuterTPC);
   if (lm) lm->AddOutput(outMonitorPhiOuterTPC);
-
+  
   // output:  TH2D for phi vs pt
   AliRsnListOutput *outMonitorPhiVsPt = new AliRsnListOutput("PhiVsPt", AliRsnListOutput::kHistoDefault);
   outMonitorPhiVsPt->AddValue(axisMomPt);
   outMonitorPhiVsPt->AddValue(axisPhi);
-  if (!opt.Contains("NoSIGN")) {
-    outMonitorPhiVsPt->AddValue(axisCharge);
-  }
+  if (monitorSign) outMonitorPhiVsPt->AddValue(axisCharge);
   if (mon) mon->Add(outMonitorPhiVsPt);
   if (lm) lm->AddOutput(outMonitorPhiVsPt);
 
   /****************************************************************/
   /***************      MONITOR TRACK QUALITY  ********************/
   /****************************************************************/
-  if (!opt.Contains("NoTrackQ")) {
+  if (monitorTrackQ) {
     // output: 2D histogram of DCAxy vs pt
     AliRsnListOutput *outMonitorDCAxy = new AliRsnListOutput("DCAxyVsPt", AliRsnListOutput::kHistoDefault);
-    outMonitorDCAxy->AddValue(axisMomPt);
+    if (!useTH1) outMonitorDCAxy->AddValue(axisMomPt);
     outMonitorDCAxy->AddValue(axisDCAxy);
     if (mon) mon->Add(outMonitorDCAxy);
     if (lm) lm->AddOutput(outMonitorDCAxy);
 
     // output: 2D histogram of DCAz vs P
     AliRsnListOutput *outMonitorDCAz = new AliRsnListOutput("DCAzVsP", AliRsnListOutput::kHistoDefault);
-    outMonitorDCAz->AddValue(axisMomP);
+    if (!useTH1) outMonitorDCAz->AddValue(axisMomP);
     outMonitorDCAz->AddValue(axisDCAz);
     if (mon) mon->Add(outMonitorDCAz);
     if (lm) lm->AddOutput(outMonitorDCAz);
 
     // output: 2D histogram of ITS cls vs pt
     AliRsnListOutput *outMonitorITScls = new AliRsnListOutput("ITSclsVsPt", AliRsnListOutput::kHistoDefault);
-    outMonitorITScls->AddValue(axisMomPt);
+    if (!useTH1) outMonitorITScls->AddValue(axisMomPt);
     outMonitorITScls->AddValue(axisITScls);
     if (mon) mon->Add(outMonitorITScls);
     if (lm) lm->AddOutput(outMonitorITScls);
 
     // output: 2D histogram of TPC cls vs. pt
     AliRsnListOutput *outMonitorTPCcls = new AliRsnListOutput("TPCclsVsPt", AliRsnListOutput::kHistoDefault);
-    outMonitorTPCcls->AddValue(axisMomPt);
+    if (!useTH1) outMonitorTPCcls->AddValue(axisMomPt);
     outMonitorTPCcls->AddValue(axisTPCcls);
     if (mon) mon->Add(outMonitorTPCcls);
     if (lm) lm->AddOutput(outMonitorTPCcls);
 
     // output: 2D histogram of TPC cls vs. TPC momentum
     AliRsnListOutput *outMonitorTPCclsVsPtpc = new AliRsnListOutput("TPCclsVsPtpc", AliRsnListOutput::kHistoDefault);
-    outMonitorTPCclsVsPtpc->AddValue(axisMomTPC);
+    if (!useTH1) outMonitorTPCclsVsPtpc->AddValue(axisMomTPC);
     outMonitorTPCclsVsPtpc->AddValue(axisTPCcls);
     if (mon) mon->Add(outMonitorTPCclsVsPtpc);
     if (lm) lm->AddOutput(outMonitorTPCclsVsPtpc);
 
+    // output: 2D histogram of TPC crossed rows vs. TPC momentum
+    AliRsnListOutput *outMonitorTPCcrossedRowsVsPtpc = new AliRsnListOutput("TPCcrossedRowsVsPtpc", AliRsnListOutput::kHistoDefault);
+    if (!useTH1) outMonitorTPCcrossedRowsVsPtpc->AddValue(axisMomTPC);
+    outMonitorTPCcrossedRowsVsPtpc->AddValue(axisTPCcrossedRows);
+    if (mon) mon->Add(outMonitorTPCcrossedRowsVsPtpc);
+    if (lm) lm->AddOutput(outMonitorTPCcrossedRowsVsPtpc);
+
+    // output: 2D histogram of TPC crossed rows/Findable cls vs. TPC momentum
+    AliRsnListOutput *outMonitorTPCcrossedRows2FclsVsPtpc = new AliRsnListOutput("TPCcrossedRows2FclsVsPtpc", AliRsnListOutput::kHistoDefault);
+    if (!useTH1) outMonitorTPCcrossedRows2FclsVsPtpc->AddValue(axisMomTPC);
+    outMonitorTPCcrossedRows2FclsVsPtpc->AddValue(axisTPCcrossedRows2Fcls);
+    if (mon) mon->Add(outMonitorTPCcrossedRows2FclsVsPtpc);
+    if (lm) lm->AddOutput(outMonitorTPCcrossedRows2FclsVsPtpc);
+
     // output: 2D histogram of ITS chi2 vs pt
     AliRsnListOutput *outMonitorITSchi2 = new AliRsnListOutput("ITSchi2VsPt", AliRsnListOutput::kHistoDefault);
-    outMonitorITSchi2->AddValue(axisMomPt);
+    if (!useTH1) outMonitorITSchi2->AddValue(axisMomPt);
     outMonitorITSchi2->AddValue(axisITSchi2);
     if (mon) mon->Add(outMonitorITSchi2);
     if (lm) lm->AddOutput(outMonitorITSchi2);
 
     // output: 2D histogram of TPC chi2 vs. pt
     AliRsnListOutput *outMonitorTPCchi2 = new AliRsnListOutput("TPCchi2VsPt", AliRsnListOutput::kHistoDefault);
-    outMonitorTPCchi2->AddValue(axisMomPt);
+    if (!useTH1) outMonitorTPCchi2->AddValue(axisMomPt);
     outMonitorTPCchi2->AddValue(axisTPCchi2);
     if (mon) mon->Add(outMonitorTPCchi2);
     if (lm) lm->AddOutput(outMonitorTPCchi2);
 
     // output: 2D histogram of TPC chi2 vs. TPC momentum
     AliRsnListOutput *outMonitorTPCchi2VsPtpc = new AliRsnListOutput("TPCchi2VsPtpc", AliRsnListOutput::kHistoDefault);
-    outMonitorTPCchi2VsPtpc->AddValue(axisMomTPC);
+   if (!useTH1) outMonitorTPCchi2VsPtpc->AddValue(axisMomTPC);
     outMonitorTPCchi2VsPtpc->AddValue(axisTPCchi2);
     if (mon) mon->Add(outMonitorTPCchi2VsPtpc);
     if (lm) lm->AddOutput(outMonitorTPCchi2VsPtpc);
@@ -213,7 +240,7 @@ void AddMonitorOutput(Bool_t useMCMon = 0, TObjArray *mon=0,TString opt="",AliRs
   /****************************************************************/
   /***************       MONITOR TPC           ********************/
   /****************************************************************/
-  if (!opt.Contains("NoTPCSIGMA")) {
+  if (monitorTPCpid) {
     // output: 2D histogram of TPC signal vs. TPC momentum
     AliRsnListOutput *outMonitordEdxTPC = new AliRsnListOutput("dEdx_VsPtpc", AliRsnListOutput::kHistoDefault);
     outMonitordEdxTPC->AddValue(axisMomTPC);
@@ -249,10 +276,25 @@ void AddMonitorOutput(Bool_t useMCMon = 0, TObjArray *mon=0,TString opt="",AliRs
   AliRsnListOutput *outMonitorTOFvsTPCnsigmaPi = new AliRsnListOutput("TOFnsigmaPi_TPCnsigmaPi", AliRsnListOutput::kHistoDefault);
   outMonitorTOFvsTPCnsigmaPi->AddValue(axisTOFnsigmaPi);
   outMonitorTOFvsTPCnsigmaPi->AddValue(axisTPCnsigmaPi);
-  //outMonitorTOFvsTPCnsigmaPi->AddValue(axisMomP);
+  if (useTH3) outMonitorTOFvsTPCnsigmaPi->AddValue(axisMomP);
   if (mon) mon->Add(outMonitorTOFvsTPCnsigmaPi);
   if (lm) lm->AddOutput(outMonitorTOFvsTPCnsigmaPi);
   
+  // output:2D histogram of TOF Nsigma pi vs. TPC Nsigma pi vs momentum
+  AliRsnListOutput *outMonitorTOFvsTPCnsigmaK = new AliRsnListOutput("TOFnsigmaK_TPCnsigmaK", AliRsnListOutput::kHistoDefault);
+  outMonitorTOFvsTPCnsigmaK->AddValue(axisTOFnsigmaK);
+  outMonitorTOFvsTPCnsigmaK->AddValue(axisTPCnsigmaK);
+  if (useTH3) outMonitorTOFvsTPCnsigmaK->AddValue(axisMomP);
+  if (mon) mon->Add(outMonitorTOFvsTPCnsigmaK);
+  if (lm) lm->AddOutput(outMonitorTOFvsTPCnsigmaK);
+
+  AliRsnListOutput *outMonitorTOFvsTPCnsigmaP = new AliRsnListOutput("TOFnsigmaP_TPCnsigmaP", AliRsnListOutput::kHistoDefault);
+  outMonitorTOFvsTPCnsigmaP->AddValue(axisTOFnsigmaP);
+  outMonitorTOFvsTPCnsigmaP->AddValue(axisTPCnsigmaP);
+  if (useTH3) outMonitorTOFvsTPCnsigmaP->AddValue(axisMomP);
+  if (mon) mon->Add(outMonitorTOFvsTPCnsigmaP);
+  if (lm) lm->AddOutput(outMonitorTOFvsTPCnsigmaP);
+
   // // output: 2D histogram of TOF signal vs. momentum
   // AliRsnListOutput *outMonitorTimeTOF = new AliRsnListOutput("time_VsP", AliRsnListOutput::kHistoDefault);
   // outMonitorTimeTOF->AddValue(axisMomP);
@@ -267,7 +309,7 @@ void AddMonitorOutput(Bool_t useMCMon = 0, TObjArray *mon=0,TString opt="",AliRs
   // if (mon) mon->Add(outMonitorTimeTOFPt);
   // if (lm) lm->AddOutput(outMonitorTimeTOFPt);
 
-  if (!opt.Contains("NoTOFSIGMA")) {
+  if (monitorTOFpid) {
     // output: 2D histogram of TOF Nsigma pi vs. TPC momentum
     AliRsnListOutput *outMonitorTOFnsigmaPi = new AliRsnListOutput("TOF_nsigmaPi_vsP", AliRsnListOutput::kHistoDefault);
     outMonitorTOFnsigmaPi->AddValue(axisMomP);
@@ -288,6 +330,27 @@ void AddMonitorOutput(Bool_t useMCMon = 0, TObjArray *mon=0,TString opt="",AliRs
     outMonitorTOFnsigmaP->AddValue(axisTOFnsigmaP);
     if (mon) mon->Add(outMonitorTOFnsigmaP);
     if (lm) lm->AddOutput(outMonitorTOFnsigmaP);
+
+   // output: 2D histogram of TOF Delta pi vs. TPC momentum
+    AliRsnListOutput *outMonitorTOFdeltaPi = new AliRsnListOutput("TOF_deltaPi_vsP", AliRsnListOutput::kHistoDefault);
+    outMonitorTOFdeltaPi->AddValue(axisMomP);
+    outMonitorTOFdeltaPi->AddValue(axisTOFdeltaPi);
+    if (mon) mon->Add(outMonitorTOFdeltaPi);
+    if (lm) lm->AddOutput(outMonitorTOFdeltaPi);
+     
+    // output: 2D histogram of TOF signal vs. TOF momentum
+    AliRsnListOutput *outMonitorTOFdeltaK = new AliRsnListOutput("TOF_deltaK_vsP", AliRsnListOutput::kHistoDefault);
+    outMonitorTOFdeltaK->AddValue(axisMomP);
+    outMonitorTOFdeltaK->AddValue(axisTOFdeltaK);
+    if (mon) mon->Add(outMonitorTOFdeltaK);
+    if (lm) lm->AddOutput(outMonitorTOFdeltaK);
+      
+    // output: 2D histogram of TOF signal vs. TOF momentum
+    AliRsnListOutput *outMonitorTOFdeltaP = new AliRsnListOutput("TOF_deltaPro_vsP", AliRsnListOutput::kHistoDefault);
+    outMonitorTOFdeltaP->AddValue(axisMomP);
+    outMonitorTOFdeltaP->AddValue(axisTOFdeltaP);
+    if (mon) mon->Add(outMonitorTOFdeltaP);
+    if (lm) lm->AddOutput(outMonitorTOFdeltaP);
   }
 
   /****************************************************************/
index 5e8a69744e1e8740e3b4f756139d0aefe3f53a1c..204007d33040b056649fb9d68ec8dcb0cc67dfe1 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
-              fbellini@cern.ch - last modified on 21/11/2013
+              fbellini@cern.ch - last modified on 28/11/2013
 //
 //Lauches KStar analysis with rsn mini package
 //Allows basic configuration of pile-up check and event cuts
@@ -35,6 +35,7 @@ AliRsnMiniAnalysisTask * AddTaskKStarPPB
  Int_t       pairCutSetID = 0,
  Int_t       mixingConfigID = 0,
  Int_t       aodFilterBit = 5,
+ Int_t       customQualityCutsID = -1,
  AliRsnCutSetDaughterParticle::ERsnDaughterCutSet cutPiCandidate = AliRsnCutSetDaughterParticle::kTOFpidKstarPPB2011,
  AliRsnCutSetDaughterParticle::ERsnDaughterCutSet cutKaCandidate = AliRsnCutSetDaughterParticle::kTOFpidKstarPPB2011,
  Float_t     nsigmaPi = 2.0,
@@ -224,7 +225,7 @@ AliRsnMiniAnalysisTask * AddTaskKStarPPB
    // -- CONFIG ANALYSIS --------------------------------------------------------------------------
    //   
    gROOT->LoadMacro("$ALICE_ROOT/PWGLF/RESONANCES/macros/mini/ConfigTOFanalysisKStar.C");
-   if (!ConfigTOFanalysisKStar(task, isMC, isPP, "", cutsPair, aodFilterBit, cutPiCandidate, cutKaCandidate, nsigmaPi, nsigmaKa, enableMonitor, isMC&IsMcTrueOnly, useMixLS, signedPdg, monitorOpt.Data(), yaxisvar)) return 0x0;
+   if (!ConfigTOFanalysisKStar(task, isMC, isPP, "", cutsPair, aodFilterBit, customQualityCutsID, cutPiCandidate, cutKaCandidate, nsigmaPi, nsigmaKa, enableMonitor, isMC&IsMcTrueOnly, useMixLS, signedPdg, monitorOpt.Data(), yaxisvar)) return 0x0;
    
    
    //
index 657cc21a6ca63e5093b68d037a5a21e3ee017acd..2bc60b8ef1516e9d8e10477d6196c5352a0c9c73 100644 (file)
@@ -1,7 +1,8 @@
 /***************************************************************************
-              fbellini@cern.ch - last modified on 06/08/2012
+              fbellini@cern.ch - last modified on 28/11/2013
 
 // *** Configuration script for K*, anti-K* analysis with 2010 PbPb runs ***
+// *** Configuration script for K*, anti-K* analysis with 2013 pPb runs ***
 // 
 // A configuration script for RSN package needs to define the followings:
 //
@@ -10,7 +11,6 @@
 // (2) cuts at all levels: single daughters, tracks, events
 // (3) output objects: histograms or trees
 ****************************************************************************/
-
 Bool_t ConfigTOFanalysisKStar
 (  
     AliRsnMiniAnalysisTask *task, 
@@ -19,6 +19,7 @@ Bool_t ConfigTOFanalysisKStar
     const char             *suffix,
     AliRsnCutSet           *cutsPair,
     Int_t                  aodFilterBit = 5,
+    Int_t                  customQualityCutsID = AliRsnCutSetDaughterParticle::kDisableCustom,
     AliRsnCutSetDaughterParticle::ERsnDaughterCutSet cutPiCandidate = AliRsnCutSetDaughterParticle::kTOFpidKstarPbPb2010,
     AliRsnCutSetDaughterParticle::ERsnDaughterCutSet cutKaCandidate = AliRsnCutSetDaughterParticle::kTOFpidKstarPbPb2010,
     Float_t                nsigmaPi = 2.0,
@@ -28,7 +29,7 @@ Bool_t ConfigTOFanalysisKStar
     Bool_t                 useMixLS = 0,
     Int_t                  signedPdg = 313,
     TString                monitorOpt = "",
-    AliRsnMiniValue::EType yaxisVar = AliRsnMiniValue::kPt                
+    AliRsnMiniValue::EType yaxisVar = AliRsnMiniValue::kPt
 )
 {
   // manage suffix
@@ -38,11 +39,20 @@ Bool_t ConfigTOFanalysisKStar
   AliRsnCutSetDaughterParticle * cutSetQ;
   AliRsnCutSetDaughterParticle * cutSetPi;
   AliRsnCutSetDaughterParticle * cutSetK;
-
-  cutSetQ  = new AliRsnCutSetDaughterParticle(Form("cutQ_bit%i",aodFilterBit), AliRsnCutSetDaughterParticle::kQualityStd2010, AliPID::kPion, -1.0, aodFilterBit);
-  cutSetPi = new AliRsnCutSetDaughterParticle(Form("cutPi%i_%2.1fsigma",cutPiCandidate, nsigmaPi), cutPiCandidate, AliPID::kPion, nsigmaPi, aodFilterBit);
-  cutSetK  = new AliRsnCutSetDaughterParticle(Form("cutK%i_%2.1fsigma",cutPiCandidate, nsigmaKa), cutKaCandidate, AliPID::kKaon, nsigmaKa, aodFilterBit);
-
+  
+  AliRsnCutTrackQuality * trkQualityCut =  new AliRsnCutTrackQuality("myQualityCut");
+  if (SetCustomQualityCut(trkQualityCut, customQualityCutsID, aodFilterBit)) {
+    //Set custom quality cuts for systematic checks
+    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 {
+    //use defult quality cuts (std 2010 or 2011)
+    cutSetQ  = new AliRsnCutSetDaughterParticle(Form("cutQ_bit%i",aodFilterBit), AliRsnCutSetDaughterParticle::kQualityStd2011, AliPID::kPion, -1.0, aodFilterBit);
+    cutSetPi = new AliRsnCutSetDaughterParticle(Form("cutPi%i_%2.1fsigma",cutPiCandidate, nsigmaPi), cutPiCandidate, AliPID::kPion, nsigmaPi, aodFilterBit);
+    cutSetK  = new AliRsnCutSetDaughterParticle(Form("cutK%i_%2.1fsigma",cutPiCandidate, nsigmaKa), cutKaCandidate, AliPID::kKaon, nsigmaKa, aodFilterBit);
+  }
+  
   Int_t iCutQ = task->AddTrackCuts(cutSetQ);
   Int_t iCutPi = task->AddTrackCuts(cutSetPi);
   Int_t iCutK = task->AddTrackCuts(cutSetK);
@@ -66,7 +76,7 @@ Bool_t ConfigTOFanalysisKStar
   /* 2nd daughter pt  */ Int_t sdpt   = task->CreateValue(AliRsnMiniValue::kSecondDaughterPt, kFALSE);
   /* 1st daughter p   */ Int_t fdp    = task->CreateValue(AliRsnMiniValue::kFirstDaughterP, kFALSE);
   /* 2nd daughter p   */ Int_t sdp    = task->CreateValue(AliRsnMiniValue::kSecondDaughterP, kFALSE);
-
+  
   // -- Create all needed outputs -----------------------------------------------------------------
   // use an array for more compact writing, which are different on mixing and charges
   // [0] = unlike
@@ -152,3 +162,99 @@ Bool_t ConfigTOFanalysisKStar
   }
   return kTRUE;
 }
+
+//-------------------------------------------------------  
+Bool_t SetCustomQualityCut(AliRsnCutTrackQuality * trkQualityCut, Int_t customQualityCutsID = 0, Int_t customFilterBit = 0)
+{
+  //Sets configuration for track quality object different from std quality cuts.
+  //Returns kTRUE if track quality cut object is successfully defined,
+  //returns kFALSE if an invalid set of cuts (customQualityCutsID) is chosen or if the
+  //object to be configured does not exist.
+  
+  /* NOTES FROM PRODUCTION LHC13b pass3 - AOD filtered with v5-03-Rev-20
+  //(http://svnweb.cern.ch/world/wsvn/AliRoot/tags/v5-03-Rev-20/ANALYSIS/macros/AddTaskESDFilter.C)
+
+  //filter bit 0: Cuts on primary tracks
+  // AliESDtrackCuts* esdTrackCutsL = AliESDtrackCuts::GetStandardTPCOnlyTrackCuts();
+
+  //filter bit 4: std but looser dca cut
+  // AliESDtrackCuts* esdTrackCutsH = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(kFALSE);
+  // esdTrackCutsH->SetMaxDCAToVertexXY(2.4);
+  // esdTrackCutsH->SetMaxDCAToVertexZ(3.2);
+  // esdTrackCutsH->SetDCAToVertex2D(kTRUE);
+
+  //filter bit 5:  AliESDtrackCuts::GetStandardITSTPCTrackCuts2011();
+
+   //filter bit 10: standard cuts with tight DCA cut, using cluster cut instead of crossed rows (a la 2010 default)
+   //AliESDtrackCuts* esdTrackCutsH2Cluster = AliESDtrackCuts::GetStandardITSTPCTrackCuts2011(kTRUE, 0);
+   */
+
+  if ((!trkQualityCut) || (customQualityCutsID<=0) || (customQualityCutsID>=AliRsnCutSetDaughterParticle::kNcustomQualityCuts)){
+    Printf("::::: SetCustomQualityCut:: use default quality cuts specified in task configuration.");
+    return kFALSE;
+  }
+  //for pA 2013
+  //trkQualityCut->SetDefaults2011();//with filter bit=10
+  //reset filter bit to very loose cuts 
+  trkQualityCut->SetAODTestFilterBit(customFilterBit); 
+  //apply all other cuts "by hand"
+  trkQualityCut->SetCheckOnlyFilterBit(kFALSE);
+  trkQualityCut->SetMinNCrossedRowsTPC(70);
+  trkQualityCut->SetMinNCrossedRowsOverFindableClsTPC(0.8);
+  trkQualityCut->SetMaxChi2TPCConstrainedGlobal(36);//used for ESD only - for AOD does not correspond to any cut
+  trkQualityCut->SetTPCmaxChi2(4.0); //already in filter bit 0
+  trkQualityCut->SetRejectKinkDaughters(kTRUE); //already in filter bit 0
+  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
+
+  if (customQualityCutsID==AliRsnCutSetDaughterParticle::kFilterBitCustom) {
+    trkQualityCut->SetCheckOnlyFilterBit(kTRUE);
+  } 
+  
+  if (customQualityCutsID==AliRsnCutSetDaughterParticle::kStdLooserDCAXY){
+    trkQualityCut->SetDCARmax(2.4);
+  } else {
+    trkQualityCut->SetDCARPtFormula("0.0105+0.0350/pt^1.1");
+  }
+  
+  if (customQualityCutsID==AliRsnCutSetDaughterParticle::kStdLooserDCAZ){
+    trkQualityCut->SetDCAZmax(3.2);
+  } else {
+    trkQualityCut->SetDCAZmax(2.0); 
+  }
+  
+  if (customQualityCutsID==AliRsnCutSetDaughterParticle::kStdCrossedRows60){
+    trkQualityCut->SetMinNCrossedRowsTPC(60);
+  }
+  
+  if (customQualityCutsID==AliRsnCutSetDaughterParticle::kStdCrossedRows80){
+    trkQualityCut->SetMinNCrossedRowsTPC(80);
+  }
+  
+  if (customQualityCutsID==AliRsnCutSetDaughterParticle::kStdRowsToCls075){
+    trkQualityCut->SetMinNCrossedRowsOverFindableClsTPC(0.75);
+  }
+  
+  if (customQualityCutsID==AliRsnCutSetDaughterParticle::kStdRowsToCls085){
+    trkQualityCut->SetMinNCrossedRowsOverFindableClsTPC(0.85);
+  }
+  
+  if (customQualityCutsID==AliRsnCutSetDaughterParticle::kStdCls70){
+    trkQualityCut->SetAODTestFilterBit(10);
+    trkQualityCut->SetTPCminNClusters(70);
+  }
+  
+  if (customQualityCutsID==AliRsnCutSetDaughterParticle::kStdChi2TPCCls35){
+    trkQualityCut->SetTPCmaxChi2(3.5);
+  }
+  
+  trkQualityCut->SetPtRange(0.15, 20.0);
+  trkQualityCut->SetEtaRange(-0.8, 0.8);
+  
+  Printf(Form("::::: SetCustomQualityCut:: using custom track quality cuts #%i",customQualityCutsID));
+  trkQualityCut->Print();
+  return kTRUE;
+}