]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Modifications in analysis tasks for train
authorpulvir <pulvir@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 26 Oct 2009 10:21:30 +0000 (10:21 +0000)
committerpulvir <pulvir@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 26 Oct 2009 10:21:30 +0000 (10:21 +0000)
PWG2/RESONANCES/macros/train/AddAnalysisTaskRsn.C
PWG2/RESONANCES/macros/train/AddAnalysisTaskRsnEff.C [new file with mode: 0644]
PWG2/RESONANCES/macros/train/AddAnalysisTaskRsnEffNoPID.C [deleted file]
PWG2/RESONANCES/macros/train/AddAnalysisTaskRsnEffPID.C [deleted file]
PWG2/RESONANCES/macros/train/RsnConfig.C

index 08691744bac805d6a4961aa57481a73e3b210a02..957ed027595020b38c12a1b8e289c2ad81ce6f27 100644 (file)
@@ -3,10 +3,10 @@
 //
 Bool_t AddAnalysisTaskRsn
 (
-  Bool_t sourceESD  = kTRUE         // if true, the source of data is ESD, otherwise is AOD from filter task
+  Bool_t sourceESD  = kTRUE // if true, the source of data is ESD, otherwise is AOD from filter task
 )
 {
-  //AliLog::SetClassDebugLevel("AliRsnCut", AliLog::kDebug+3);
+  AliLog::SetClassDebugLevel("AliMCEvent", AliLog::kWarning);
   //AliLog::SetClassDebugLevel("AliRsnCutStd", AliLog::kDebug+3);
   //AliLog::SetClassDebugLevel("AliRsnCutBetheBloch", AliLog::kDebug+3);
 
@@ -14,7 +14,7 @@ Bool_t AddAnalysisTaskRsn
   AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
 
   // initialize task with 4 slots:
-  AliRsnAnalysisSE *task = new AliRsnAnalysisSE("RsnAnalysis", 4);
+  AliRsnAnalysisSE *task = new AliRsnAnalysisSE("RsnAnalysis", 2);
   
   // set prior probabilities for PID
   task->SetPriorProbability(AliPID::kElectron, 0.02);
@@ -30,22 +30,16 @@ Bool_t AddAnalysisTaskRsn
   // initialize analysis manager with pairs from config
   AliRsnAnalysisManager *anaMgr = 0x0;
 
-  // manager #0: phi NO PID
+  // manager #0: phi
   anaMgr = task->GetAnalysisManager(0);
-  anaMgr->Add(RsnConfig(AliRsnPair::kNoPID, "PHI"  , 333, AliPID::kKaon, AliPID::kKaon));
-  anaMgr->Add(RsnConfig(AliRsnPair::kNoPID, "PHIBB", 333, AliPID::kKaon, AliPID::kKaon, 0.2));
-  // manager #1: phi with PID (realistic & perfect)
+  anaMgr->Add(RsnConfig("PHI_NOPID", 333, AliPID::kKaon, AliPID::kKaon));
+  anaMgr->Add(RsnConfig("PHI_BB"   , 333, AliPID::kKaon, AliPID::kKaon));
+  anaMgr->Add(RsnConfig("PHI_PID"  , 333, AliPID::kKaon, AliPID::kKaon));
+  // manager #1: kstar
   anaMgr = task->GetAnalysisManager(1);
-  anaMgr->Add(RsnConfig(AliRsnPair::kRealisticPID, "PHI", 333, AliPID::kKaon, AliPID::kKaon));
-  anaMgr->Add(RsnConfig(AliRsnPair::kPerfectPID  , "PHI", 333, AliPID::kKaon, AliPID::kKaon));
-  // manager #2: kstar NO PID
-  anaMgr = task->GetAnalysisManager(2);
-  anaMgr->Add(RsnConfig(AliRsnPair::kNoPID, "KSTAR"  , 313, AliPID::kPion, AliPID::kKaon));
-  anaMgr->Add(RsnConfig(AliRsnPair::kNoPID, "KSTARBB", 313, AliPID::kPion, AliPID::kKaon, 0.2));
-  // manager #1: kstar with PID (realistic & perfect)
-  anaMgr = task->GetAnalysisManager(3);
-  anaMgr->Add(RsnConfig(AliRsnPair::kRealisticPID, "KSTAR", 313, AliPID::kPion, AliPID::kKaon));
-  anaMgr->Add(RsnConfig(AliRsnPair::kPerfectPID  , "KSTAR", 313, AliPID::kPion, AliPID::kKaon));
+  anaMgr->Add(RsnConfig("KSTAR_NOPID", 313, AliPID::kPion, AliPID::kKaon));
+  anaMgr->Add(RsnConfig("KSTAR_BB"   , 313, AliPID::kPion, AliPID::kKaon));
+  anaMgr->Add(RsnConfig("KSTAR_PID"  , 313, AliPID::kPion, AliPID::kKaon));
 
   // setup cuts for events (good primary vertex)
   AliRsnCutPrimaryVertex *cutVertex = new AliRsnCutPrimaryVertex("cutVertex", 3);
@@ -63,15 +57,11 @@ Bool_t AddAnalysisTaskRsn
 
   // define and connect output containers
   AliAnalysisDataContainer *outputInfo = mgr->CreateContainer("RsnInfo", TList::Class(), AliAnalysisManager::kOutputContainer, "info.root");
-  AliAnalysisDataContainer *outputRsn[4];
-  outputRsn[0] = mgr->CreateContainer("PHI_NOPID"  , TList::Class(), AliAnalysisManager::kOutputContainer, "phi_nopid.root");
-  outputRsn[1] = mgr->CreateContainer("PHI_PID"    , TList::Class(), AliAnalysisManager::kOutputContainer, "phi_pid.root");
-  outputRsn[2] = mgr->CreateContainer("KSTAR_NOPID", TList::Class(), AliAnalysisManager::kOutputContainer, "kstar_nopid.root");
-  outputRsn[3] = mgr->CreateContainer("KSTAR_PID"  , TList::Class(), AliAnalysisManager::kOutputContainer, "kstar_pid.root");
+  AliAnalysisDataContainer *outputRsn[2];
+  outputRsn[0] = mgr->CreateContainer("PHI"  , TList::Class(), AliAnalysisManager::kOutputContainer, "phi.root");
+  outputRsn[1] = mgr->CreateContainer("KSTAR", TList::Class(), AliAnalysisManager::kOutputContainer, "kstar.root");
 
   mgr->ConnectOutput(task, 1, outputInfo);
   mgr->ConnectOutput(task, 2, outputRsn[0]);
   mgr->ConnectOutput(task, 3, outputRsn[1]);
-  mgr->ConnectOutput(task, 4, outputRsn[2]);
-  mgr->ConnectOutput(task, 5, outputRsn[3]);
 }
diff --git a/PWG2/RESONANCES/macros/train/AddAnalysisTaskRsnEff.C b/PWG2/RESONANCES/macros/train/AddAnalysisTaskRsnEff.C
new file mode 100644 (file)
index 0000000..41feaef
--- /dev/null
@@ -0,0 +1,207 @@
+//
+// This macro add an analysis task for computing efficiency.
+// It will have as output an AliCFContainer with several steps:
+//
+//  0) all resonances in MC which decay in the pair specified
+//  1) subset of (0) whose daughters are in acceptance
+//  2) subset of (1) whose daughters satisfy quality track cuts (covariance, chi square && nTPCclusters)
+//  3) subset of (2) whose daughters satisfy primary track cuts (nsigma to vertex, no kink daughters)
+//  4) subset of (3) whose daughters satisty the BB TPC compatibility cut at 3 sigma
+//
+Bool_t AddAnalysisTaskRsnEff
+(
+  Bool_t      useBB    = kFALSE,
+  Double_t    sigmaTPC = 0.065,
+  const char *outFile  = "eff"
+)
+{
+  // retrieve analysis manager
+  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
+
+  // common suffixes
+  TString suf[2];
+  suf[0] = "nopid";
+  suf[1] = "pid";
+
+  // create task
+  AliRsnAnalysisEffSE *task[2];
+  task[0] = new AliRsnAnalysisEffSE("EffNoPID");
+  task[1] = new AliRsnAnalysisEffSE("EffPID");
+
+  // set prior probabilities for PID
+  for (Int_t i = 0; i < 2; i++)
+  {
+    task[i]->SetPriorProbability(AliPID::kElectron, 0.02);
+    task[i]->SetPriorProbability(AliPID::kMuon,     0.02);
+    task[i]->SetPriorProbability(AliPID::kPion,     0.83);
+    task[i]->SetPriorProbability(AliPID::kKaon,     0.07);
+    task[i]->SetPriorProbability(AliPID::kProton,   0.06);
+    task[i]->DumpPriors();
+  }
+
+  // pair definitions:
+  // phi   --> K+ K-
+  // kstar --> K+ pi- & K- pi+
+  AliRsnPairDef *pairPhi    = new AliRsnPairDef('+', AliPID::kKaon, '-', AliPID::kKaon, 333);
+  AliRsnPairDef *pairKStar1 = new AliRsnPairDef('-', AliPID::kKaon, '+', AliPID::kPion, 313);
+  AliRsnPairDef *pairKStar2 = new AliRsnPairDef('+', AliPID::kKaon, '-', AliPID::kPion, 313);
+  for (Int_t i = 0; i < 2; i++)
+  {
+    task[i]->AddPairDef(pairPhi);
+    task[i]->AddPairDef(pairKStar1);
+    task[i]->AddPairDef(pairKStar2);
+  }
+
+  // axis definition
+  //  0) transverse momentum
+  //  1) pseudo-rapidity
+  //  2) multiplicity (estimated with SPD tracklets - uncorrected)
+  AliRsnFunctionAxis *axisPt   = new AliRsnFunctionAxis(AliRsnFunctionAxis::kPairPt,       40,  0.0,  10.0);
+  AliRsnFunctionAxis *axisEta  = new AliRsnFunctionAxis(AliRsnFunctionAxis::kPairEta,      20, -1.5,   1.5);
+  AliRsnFunctionAxis *axisMult = new AliRsnFunctionAxis(AliRsnFunctionAxis::kEventMult,     8,  0.0, 200.0);
+  for (Int_t i = 0; i < 2; i++)
+  {
+    task[i]->AddAxis(axisMult);
+    task[i]->AddAxis(axisPt);
+    task[i]->AddAxis(axisEta);
+  }
+
+  // define cuts for event selection:
+  // this will determine the filling of bins in the "info" histograms
+  // and should be computed as additional correction factor in efficiency
+  AliRsnCutPrimaryVertex *cutVertex   = new AliRsnCutPrimaryVertex("cutVertex", 3);
+  AliRsnCutSet           *cutSetEvent = new AliRsnCutSet("eventCuts");
+  cutSetEvent->AddCut(cutVertex);
+  cutSetEvent->SetCutScheme("cutVertex");
+  for (Int_t i = 0; i < 2; i++)
+  {
+    task[i]->SetEventCuts(cutSetEvent);
+  }
+
+  //
+  // *** STEP 0 - All resonances which decay in the specified pairs
+  //
+  // This step does not need any kind of definition, since
+  // its requirement is automatically checked during execution,
+  // but to avoid segfaults, it is better to initialize a cut manager.
+  //
+  AliRsnCutMgr *cutMgrMC_step0 = new AliRsnCutMgr("mc_step0", "");
+
+  //
+  // *** STEP 1 - Acceptance
+  //
+  // Here we add a cut on the pseudorapidity for both tracks
+  //
+  AliRsnCutStd *cutEta = new AliRsnCutStd("cutEta", AliRsnCutStd::kEta, -0.9, 0.9);
+
+  AliRsnCutMgr *cutMgrMC_step1    = new AliRsnCutMgr("mc_step1", "");
+  AliRsnCutSet *cutSetTrack_step1 = new AliRsnCutSet("mc_step1_tracks");
+  
+  cutSetTrack_step1->AddCut(cutEta);
+  cutSetTrack_step1->SetCutScheme("cutEta");
+  cutMgrMC_step1   ->SetCutSet(AliRsnCut::kParticle, cutSetTrack_step1);
+
+  //
+  // *** STEP 2 - Reconstruction & track quality
+  //
+  // Use the interface to AliESDtrackCuts
+  // and set only the cuts we are interested in
+  AliRsnCutESDPrimary *cutQuality = new AliRsnCutESDPrimary("cutCov");
+  cutQuality->GetCuts()->SetMaxCovDiagonalElements(2.0, 2.0, 0.5, 0.5, 2.0);
+  cutQuality->GetCuts()->SetRequireSigmaToVertex(kTRUE);
+  cutQuality->GetCuts()->SetMaxNsigmaToVertex(10000.0);
+  cutQuality->GetCuts()->SetRequireTPCRefit(kTRUE);
+  cutQuality->GetCuts()->SetAcceptKinkDaughters(kTRUE);
+  cutQuality->GetCuts()->SetMinNClustersTPC(50);
+  cutQuality->GetCuts()->SetMaxChi2PerClusterTPC(3.5);
+
+  AliRsnCutMgr *cutMgrESD_step2   = new AliRsnCutMgr("esd_step2", "");
+  AliRsnCutSet *cutSetTrack_step2 = new AliRsnCutSet("esd_step2_tracks");
+
+  cutSetTrack_step2->AddCut(cutQuality);
+  cutSetTrack_step2->SetCutScheme("cutQuality");
+  cutMgrESD_step2  ->SetCutSet(AliRsnCut::kParticle, cutSetTrack_step2);
+
+  //
+  // *** STEP 3 - Primary tracks
+  //
+  // Use the interface to AliESDtrackCuts
+  // and set only the cuts we are interested in
+  // we also disable the cuts we applied before, for clarity
+  AliRsnCutESDPrimary *cutESDPrimary = new AliRsnCutESDPrimary("cutESDPrimary");
+  cutESDPrimary->GetCuts()->SetMaxCovDiagonalElements(100.0, 100.0, 100.0, 100.0, 100.0);
+  cutESDPrimary->GetCuts()->SetRequireSigmaToVertex(kTRUE);
+  cutESDPrimary->GetCuts()->SetMaxNsigmaToVertex(3.0);
+  cutESDPrimary->GetCuts()->SetRequireTPCRefit(kFALSE);
+  cutESDPrimary->GetCuts()->SetAcceptKinkDaughters(kFALSE);
+  cutESDPrimary->GetCuts()->SetMinNClustersTPC(0);
+  cutESDPrimary->GetCuts()->SetMaxChi2PerClusterTPC(100000000.0);
+
+  AliRsnCutMgr *cutMgrESD_step3   = new AliRsnCutMgr("esd_step3", "");
+  AliRsnCutSet *cutSetTrack_step3 = new AliRsnCutSet("esd_step3_tracks");
+
+  cutSetTrack_step3->AddCut(cutESDPrimary);
+  cutSetTrack_step3->SetCutScheme("cutESDPrimary");
+  cutMgrESD_step3  ->SetCutSet(AliRsnCut::kParticle, cutSetTrack_step3);
+
+  //
+  // *** STEP 4 - Two possibilities (depend on the first macro argument)
+  //
+  // option 1 = Bethe-Bloch cut in 3 sigma (the sigma is one argument)
+  // option 2 = realistic Bayesian PID with all detectors
+  //
+  AliRsnCutMgr *cutMgrESD_step4[2];
+  AliRsnCutSet *cutSetTrack_step4[2];
+  
+  cutMgrESD_step4[0] = new AliRsnCutMgr("esd_step4_nopid", "");
+  cutMgrESD_step4[1] = new AliRsnCutMgr("esd_step4_pid", "");
+  cutSetTrack_step4[0] = new AliRsnCutSet("esd_step4_tracks_nopid");
+  cutSetTrack_step4[1] = new AliRsnCutSet("esd_step4_tracks_pid");
+  
+  // Bethe-Bloch with kaon mass hypothesis
+  AliRsnCutBetheBloch *cutKaonBB = new AliRsnCutBetheBloch("cutKaonBB", 3.0 * sigmaTPC, AliPID::kKaon);
+  cutKaonBB->SetCalibConstant(0, 0.76176e-1);
+  cutKaonBB->SetCalibConstant(1, 10.632);
+  cutKaonBB->SetCalibConstant(2, 0.13279e-4);
+  cutKaonBB->SetCalibConstant(3, 1.8631);
+  cutKaonBB->SetCalibConstant(4, 1.9479);
+
+  // cuts for realistic PID match
+  AliRsnCutStd *cutRealisticPID = new AliRsnCutStd("cutKaonPID", AliRsnCutStd::kRealisticPIDMatch, 0);
+
+  cutSetTrack_step4[0]->AddCut(cutKaonBB);
+  cutSetTrack_step4[0]->SetCutScheme("cutKaonBB");
+
+  cutSetTrack_step4[1]->AddCut(cutRealisticPID);
+  cutSetTrack_step4[1]->SetCutScheme("cutRealisticPID");
+
+  cutMgrESD_step4[0]->SetCutSet(AliRsnCut::kParticle, cutSetTrack_step4[0]);
+  cutMgrESD_step4[1]->SetCutSet(AliRsnCut::kParticle, cutSetTrack_step4[1]);
+
+  // add all steps to the task
+  for (Int_t i = 0; i < 2; i++)
+  {
+    task[i]->AddStepMC (cutMgrMC_step0);
+    task[i]->AddStepMC (cutMgrMC_step1);
+    task[i]->AddStepESD(cutMgrESD_step2);
+    task[i]->AddStepESD(cutMgrESD_step3);
+    task[i]->AddStepESD(cutMgrESD_step4[i]);
+  }
+
+  // connect containers and finalize
+  for (Int_t i = 0; i < 2; i++)
+  {
+    mgr->AddTask(task[i]);
+    mgr->ConnectInput(task[i], 0, mgr->GetCommonInputContainer());
+
+    // initialize and connect container for the output
+    AliAnalysisDataContainer *info = 0x0, *out = 0x0;
+    info = mgr->CreateContainer(Form("EffInfo_%s", suf[i].Data()), TList::Class(), AliAnalysisManager::kOutputContainer, "info.root");
+    out  = mgr->CreateContainer(Form("EFF_%s", suf[i].Data()), TList::Class(), AliAnalysisManager::kOutputContainer, Form("%s_%s.root", outFile, suf[i].Data()));
+
+    mgr->ConnectOutput(task[i], 1, info);
+    mgr->ConnectOutput(task[i], 2, out);
+  }
+
+  return kTRUE;
+}
diff --git a/PWG2/RESONANCES/macros/train/AddAnalysisTaskRsnEffNoPID.C b/PWG2/RESONANCES/macros/train/AddAnalysisTaskRsnEffNoPID.C
deleted file mode 100644 (file)
index 8b29052..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-Bool_t AddAnalysisTaskRsnEffNoPID
-(
-  const char *outFile = "eff_nopid.root",    // output file name
-)
-{
-  // retrieve analysis manager
-  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
-
-  // create task
-  AliRsnAnalysisEffSE *task = new AliRsnAnalysisEffSE("EffNoPID");
-
-  // set prior probabilities for PID
-  task->SetPriorProbability(AliPID::kElectron, 0.02);
-  task->SetPriorProbability(AliPID::kMuon,     0.02);
-  task->SetPriorProbability(AliPID::kPion,     0.83);
-  task->SetPriorProbability(AliPID::kKaon,     0.07);
-  task->SetPriorProbability(AliPID::kProton,   0.06);
-  task->DumpPriors();
-
-  // pair definition
-  AliRsnPairDef *pairDef1 = new AliRsnPairDef('+', AliPID::kKaon, '-', AliPID::kKaon, 333);
-  AliRsnPairDef *pairDef2 = new AliRsnPairDef('-', AliPID::kKaon, '+', AliPID::kPion, 313);
-  AliRsnPairDef *pairDef3 = new AliRsnPairDef('+', AliPID::kKaon, '-', AliPID::kPion, 313);
-  task->AddPairDef(pairDef1);
-  task->AddPairDef(pairDef2);
-  task->AddPairDef(pairDef3);
-
-  // axis definition
-  AliRsnFunctionAxis *axisPt   = new AliRsnFunctionAxis(AliRsnFunctionAxis::kPairPt,      100,  0.0,  10.0);
-  AliRsnFunctionAxis *axisEta  = new AliRsnFunctionAxis(AliRsnFunctionAxis::kPairEta,      10, -1.0,   1.0);
-  AliRsnFunctionAxis *axisMult = new AliRsnFunctionAxis(AliRsnFunctionAxis::kEventMult,   500,  0.0, 500.0);
-  task->AddAxis(axisMult);
-  task->AddAxis(axisPt);
-  task->AddAxis(axisEta);
-
-  // setup cuts for events (good primary vertex)
-  AliRsnCutPrimaryVertex *cutVertex = new AliRsnCutPrimaryVertex("cutVertex", 3);
-  AliRsnCutSet *cutSetEvent = new AliRsnCutSet("eventCuts");
-  cutSetEvent->AddCut(cutVertex);
-  cutSetEvent->SetCutScheme("cutVertex");
-  task->SetEventCuts(cutSetEvent);
-
-  // *** STEP 0 - All resonances
-
-  AliRsnCutMgr *cutMgr0      = new AliRsnCutMgr("step0", "");
-  AliRsnCutSet *cutSetTrack0 = new AliRsnCutSet("step0_tracks");
-  AliRsnCutSet *cutSetPair0  = new AliRsnCutSet("step0_pairs");
-
-  cutMgr0->SetCutSet(AliRsnCut::kParticle, cutSetTrack0);
-  cutMgr0->SetCutSet(AliRsnCut::kPair    , cutSetPair0 );
-
-  task->AddStepMC(cutMgr0);
-
-  // *** STEP 1 - Acceptance
-
-  AliRsnCutMgr *cutMgr1      = new AliRsnCutMgr("step1", "");
-  AliRsnCutSet *cutSetTrack1 = new AliRsnCutSet("step1_tracks");
-  AliRsnCutSet *cutSetPair1  = new AliRsnCutSet("step1_pairs");
-
-  AliRsnCutStd *cutEta = new AliRsnCutStd("cutEta", AliRsnCutStd::kEta, -0.9, 0.9);
-
-  cutSetTrack1->AddCut(cutEta);
-  cutSetTrack1->SetCutScheme("cutEta");
-
-  cutMgr1->SetCutSet(AliRsnCut::kParticle, cutSetTrack1);
-  cutMgr1->SetCutSet(AliRsnCut::kPair    , cutSetPair1 );
-
-  task->AddStepMC(cutMgr1);
-
-  // *** STEP 2 - Reconstruction & quality
-
-  AliRsnCutMgr *cutMgr2      = new AliRsnCutMgr("step2", "");
-  AliRsnCutSet *cutSetTrack2 = new AliRsnCutSet("step2_tracks");
-  AliRsnCutSet *cutSetPair2  = new AliRsnCutSet("step2_pairs");
-
-  // cuts for tracks:
-  // -- primary track quality
-  AliRsnCutESDPrimary *cutESDPrimary = new AliRsnCutESDPrimary("cutESDPrimary");
-  cutESDPrimary->GetCuts()->SetMaxCovDiagonalElements(2.0, 2.0, 0.5, 0.5, 2.0);
-  cutESDPrimary->GetCuts()->SetRequireSigmaToVertex(kTRUE);
-  cutESDPrimary->GetCuts()->SetMaxNsigmaToVertex(4.0);
-  cutESDPrimary->GetCuts()->SetRequireTPCRefit(kTRUE);
-  cutESDPrimary->GetCuts()->SetAcceptKinkDaughters(kFALSE);
-  cutESDPrimary->GetCuts()->SetMinNClustersTPC(50);
-  cutESDPrimary->GetCuts()->SetMaxChi2PerClusterTPC(3.5);
-
-  cutSetTrack2->AddCut(cutESDPrimary);
-  cutSetTrack2->SetCutScheme("cutESDPrimary");
-
-  cutMgr2->SetCutSet(AliRsnCut::kParticle, cutSetTrack2);
-  cutMgr2->SetCutSet(AliRsnCut::kPair    , cutSetPair2 );
-
-  task->AddStepESD(cutMgr2);
-
-  // *** STEP 3 - Bethe-Bloch cut (0.2)
-
-  AliRsnCutMgr *cutMgr3      = new AliRsnCutMgr("step3", "");
-  AliRsnCutSet *cutSetTrack3 = new AliRsnCutSet("step3_tracks");
-  AliRsnCutSet *cutSetPair3  = new AliRsnCutSet("step3_pairs");
-
-  // cuts for tracks:
-  // -- Bethe-Bloch with kaon mass hypothesis
-  AliRsnCutBetheBloch *cutKaonBB = new AliRsnCutBetheBloch("cutKaonBB", 0.2, AliPID::kKaon);
-  cutKaonBB->SetCalibConstant(0, 0.76176e-1);
-  cutKaonBB->SetCalibConstant(1, 10.632);
-  cutKaonBB->SetCalibConstant(2, 0.13279e-4);
-  cutKaonBB->SetCalibConstant(3, 1.8631);
-  cutKaonBB->SetCalibConstant(4, 1.9479);
-
-  cutSetTrack3->AddCut(cutKaonBB);
-  cutSetTrack3->SetCutScheme("cutKaonBB");
-  //AliLog::SetClassDebugLevel("AliRsnCut", AliLog::kDebug+3);
-  //AliLog::SetClassDebugLevel("AliRsnCutStd", AliLog::kDebug+3);
-  //AliLog::SetClassDebugLevel("AliRsnCutBetheBloch", AliLog::kDebug+3);
-
-  cutMgr3->SetCutSet(AliRsnCut::kParticle, cutSetTrack3);
-  cutMgr3->SetCutSet(AliRsnCut::kPair    , cutSetPair3 );
-
-  task->AddStepESD(cutMgr3);
-
-  // add the task to manager
-  mgr->AddTask(task);
-
-  // connect input container according to source choice
-  mgr->ConnectInput(task, 0, mgr->GetCommonInputContainer());
-
-  // initialize and connect container for the output
-  AliAnalysisDataContainer *outputInfo = mgr->CreateContainer("EffNoPIDInfo", TList::Class(), AliAnalysisManager::kOutputContainer, "info.root");
-  AliAnalysisDataContainer *out = mgr->CreateContainer("EFF_NOPID", TList::Class(), AliAnalysisManager::kOutputContainer, outFile);
-  mgr->ConnectOutput(task, 1, outputInfo);
-  mgr->ConnectOutput(task, 2, out);
-
-  return kTRUE;
-}
diff --git a/PWG2/RESONANCES/macros/train/AddAnalysisTaskRsnEffPID.C b/PWG2/RESONANCES/macros/train/AddAnalysisTaskRsnEffPID.C
deleted file mode 100644 (file)
index 0125138..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-Bool_t AddAnalysisTaskRsnEffPID
-(
-  const char      *outFile = "eff_pid.root",    // output file name
-)
-{
-  // retrieve analysis manager
-  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
-
-  // create task
-  AliRsnAnalysisEffSE *task = new AliRsnAnalysisEffSE("EffPID");
-
-  // set prior probabilities for PID
-  task->SetPriorProbability(AliPID::kElectron, 0.02);
-  task->SetPriorProbability(AliPID::kMuon,     0.02);
-  task->SetPriorProbability(AliPID::kPion,     0.83);
-  task->SetPriorProbability(AliPID::kKaon,     0.07);
-  task->SetPriorProbability(AliPID::kProton,   0.06);
-  task->DumpPriors();
-
-  // pair definition
-  AliRsnPairDef *pairDef1 = new AliRsnPairDef('+', AliPID::kKaon, '-', AliPID::kKaon, 333);
-  AliRsnPairDef *pairDef2 = new AliRsnPairDef('-', AliPID::kKaon, '+', AliPID::kPion, 313);
-  AliRsnPairDef *pairDef3 = new AliRsnPairDef('+', AliPID::kKaon, '-', AliPID::kPion, 313);
-  task->AddPairDef(pairDef1);
-  task->AddPairDef(pairDef2);
-  task->AddPairDef(pairDef3);
-
-  // axis definition
-  //AliRsnFunctionAxis *axisIM   = new AliRsnFunctionAxis(AliRsnFunctionAxis::kPairInvMass,    1000,  0.0,   2.0);
-  AliRsnFunctionAxis *axisPt   = new AliRsnFunctionAxis(AliRsnFunctionAxis::kPairPt,          100,  0.0,  10.0);
-  AliRsnFunctionAxis *axisEta  = new AliRsnFunctionAxis(AliRsnFunctionAxis::kPairEta,          10, -1.0,   1.0);
-  AliRsnFunctionAxis *axisMult = new AliRsnFunctionAxis(AliRsnFunctionAxis::kEventMult,         8,  0.0, 200.0);
-  //task->AddAxis(axisIM);
-  task->AddAxis(axisMult);
-  task->AddAxis(axisPt);
-  task->AddAxis(axisEta);
-
-  // setup cuts for events (good primary vertex)
-  AliRsnCutPrimaryVertex *cutVertex = new AliRsnCutPrimaryVertex("cutVertex", 3);
-  AliRsnCutSet *cutSetEvent = new AliRsnCutSet("eventCuts");
-  cutSetEvent->AddCut(cutVertex);
-  cutSetEvent->SetCutScheme("cutVertex");
-  task->SetEventCuts(cutSetEvent);
-
-  // *** STEP 0 - All resonances
-
-  AliRsnCutMgr *cutMgr0      = new AliRsnCutMgr("step0", "");
-  AliRsnCutSet *cutSetTrack0 = new AliRsnCutSet("step0_tracks");
-  AliRsnCutSet *cutSetPair0  = new AliRsnCutSet("step0_pairs");
-
-  cutMgr0->SetCutSet(AliRsnCut::kParticle, cutSetTrack0);
-  cutMgr0->SetCutSet(AliRsnCut::kPair    , cutSetPair0 );
-
-  task->AddStepMC(cutMgr0);
-
-  // *** STEP 1 - Acceptance
-
-  AliRsnCutMgr *cutMgr1      = new AliRsnCutMgr("step1", "");
-  AliRsnCutSet *cutSetTrack1 = new AliRsnCutSet("step1_tracks");
-  AliRsnCutSet *cutSetPair1  = new AliRsnCutSet("step1_pairs");
-
-  AliRsnCutStd *cutEta = new AliRsnCutStd("cutEta", AliRsnCutStd::kEta, -0.9, 0.9);
-
-  cutSetTrack1->AddCut(cutEta);
-  cutSetTrack1->SetCutScheme("cutEta");
-
-  cutMgr1->SetCutSet(AliRsnCut::kParticle, cutSetTrack1);
-  cutMgr1->SetCutSet(AliRsnCut::kPair    , cutSetPair1 );
-
-  task->AddStepMC(cutMgr1);
-
-  // *** STEP 2 - Reconstruction & quality
-
-  AliRsnCutMgr *cutMgr2      = new AliRsnCutMgr("step2", "");
-  AliRsnCutSet *cutSetTrack2 = new AliRsnCutSet("step2_tracks");
-  AliRsnCutSet *cutSetPair2  = new AliRsnCutSet("step2_pairs");
-
-  // cuts for tracks:
-  // -- primary track quality
-  AliRsnCutESDPrimary *cutESDPrimary = new AliRsnCutESDPrimary("cutESDPrimary");
-  cutESDPrimary->GetCuts()->SetMaxCovDiagonalElements(2.0, 2.0, 0.5, 0.5, 2.0);
-  cutESDPrimary->GetCuts()->SetRequireSigmaToVertex(kTRUE);
-  cutESDPrimary->GetCuts()->SetMaxNsigmaToVertex(4.0);
-  cutESDPrimary->GetCuts()->SetRequireTPCRefit(kTRUE);
-  cutESDPrimary->GetCuts()->SetAcceptKinkDaughters(kFALSE);
-  cutESDPrimary->GetCuts()->SetMinNClustersTPC(50);
-  cutESDPrimary->GetCuts()->SetMaxChi2PerClusterTPC(3.5);
-
-  cutSetTrack2->AddCut(cutESDPrimary);
-  cutSetTrack2->SetCutScheme("cutESDPrimary");
-
-  cutMgr2->SetCutSet(AliRsnCut::kParticle, cutSetTrack2);
-  cutMgr2->SetCutSet(AliRsnCut::kPair    , cutSetPair2 );
-
-  task->AddStepESD(cutMgr2);
-
-  // *** STEP 3 - Realistic PID
-
-  AliRsnCutMgr *cutMgr3      = new AliRsnCutMgr("step3", "");
-  AliRsnCutSet *cutSetTrack3 = new AliRsnCutSet("step3_tracks");
-  AliRsnCutSet *cutSetPair3  = new AliRsnCutSet("step3_pairs");
-
-  // cuts for tracks:
-  // -- realistic PID
-  AliRsnCutStd *cutRealisticPID = new AliRsnCutStd("cutKaonPID", AliRsnCutStd::kRealisticPIDMatch, 0);
-
-  cutSetTrack3->AddCut(cutRealisticPID);
-  cutSetTrack3->SetCutScheme("cutRealisticPID");
-
-  cutMgr3->SetCutSet(AliRsnCut::kParticle, cutSetTrack3);
-  cutMgr3->SetCutSet(AliRsnCut::kPair    , cutSetPair3 );
-
-  task->AddStepESD(cutMgr3);
-
-  // add the task to manager
-  mgr->AddTask(task);
-
-  // connect input container according to source choice
-  mgr->ConnectInput(task, 0, mgr->GetCommonInputContainer());
-
-  // initialize and connect container for the output
-  AliAnalysisDataContainer *outputInfo = mgr->CreateContainer("EffPIDInfo", TList::Class(), AliAnalysisManager::kOutputContainer, "info.root");
-  AliAnalysisDataContainer *out = mgr->CreateContainer("EFF_PID", TList::Class(), AliAnalysisManager::kOutputContainer, outFile);
-  mgr->ConnectOutput(task, 1, outputInfo);
-  mgr->ConnectOutput(task, 2, out);
-
-  return kTRUE;
-}
index 85eafb8166482acf3bac9d82cc04371d7a5b8bf4..a2a2b65c7474b580bae141ecb986aa2e195e3dc5 100644 (file)
@@ -1,30 +1,68 @@
-AliRsnPairManager* RsnConfig
-(
-  AliRsnPair::EPairType  pidType,        // PID type (NoPID, RealisticPID or PerfectPID)
-  const char            *pairMgrName,    // name for the pair manager
-  Int_t                  resonancePDG,   // PDG code of resonance (for true pairs)
-  AliPID::EParticleType  type1,          // PID of one member of decay (+)
-  AliPID::EParticleType  type2,          // PID of other member of decay (-)
-  Double_t               bbCut = 10000.0 // Bethe-Bloch TPC cut value (large --> excluded)
-)
-{
 //
-// Creates an AliRsnPairMgr for a specified resonance, which contains:
+// This is an example macro for creation of a pair manager
+// for a resonance analysis with the PWG2/RESONANCES package.
+// Its output is an AliRsnPairManager which will be added to the task.
+// It will contain:
 // - signal (inv. mass)
-// - event mixing (inv. mass)
+// - true pairs (inv. mass)
 // - like-sign (inv. mass)
 // - true pairs (inv. mass, resolution)
+// All histogram are done w.r. to Pt or Eta and w.r. to multiplicity.
+// The binnings are hard-coded. Change them according to your preferences.
 //
-// For all pairs, a binning in Pt and Eta is provided, and a cut in multiplicity
-// which defines a multiplicity bin where the analysis is computed.
+// Arguments:
+// -- pairMgrName : a name for the pair manager which must contain
+//                  some keywords to choose amond the available cuts
+//                  and PID selection available here (this is a personal customization)
+// -- resonancePDG: PDG code of resonance (for true pairs)
+// -- type1, type2: particle species for track 1 and 2 in the pair (using AliPID enumeration)
 //
-// Arguments define how the pair manager must be built, and are explained above
+// NOTE:
+// the keyword available here are the following:
+// -- "NOPID": completely no PID analysis (only primary track cuts are applied)
+// -- "BB"   : all tracks are used, but the TPC Bethe-Bloch cut is applied (cut value = 0.2)
+// -- "PID"  : realistic PID is used
 //
-
+AliRsnPairManager* RsnConfig
+(
+  const char            *pairMgrName,    // name for the pair manager
+  Int_t                  resonancePDG,   // PDG code of resonance (for true pairs)
+  AliPID::EParticleType  type1,          // PID of one member of decay (+)
+  AliPID::EParticleType  type2           // PID of other member of decay (-)
+)
+{
   // === NAME DEFINITIONS =========================================================================
 
   AliRsnPairManager  *pairMgr  = new AliRsnPairManager(pairMgrName);
 
+  // examines the given name to define details about track selection and cuts
+  TString               str(pairMgrName);
+  AliRsnPair::EPairType pidType;
+  Bool_t                useBBCut;
+  if (str.Contains("NOPID"))
+  {
+    pidType  = AliRsnPair::kNoPID;
+    useBBCut = kFALSE;
+    Info("RsnConfig", "PID TYPE = No PID        -- BB CUT: not used");
+  }
+  else if (str.Contains("BB"))
+  {
+    pidType  = AliRsnPair::kNoPID;
+    useBBCut = kTRUE;
+    Info("RsnConfig", "PID TYPE = No PID        -- BB CUT: used");
+  }
+  else if (str.Contains("PID"))
+  {
+    pidType  = AliRsnPair::kRealisticPID;
+    useBBCut = kFALSE;
+    Info("RsnConfig", "PID TYPE = Realistic PID -- BB CUT: not used");
+  }
+  else
+  {
+    Error("RsnConfig", "Unrecognized keywords in the name. Can't continue");
+    return 0x0;
+  }
+
   // === PAIR DEFINITIONS =========================================================================
 
   // if particle #1 and #2 are different, two histograms must be built
@@ -69,13 +107,14 @@ AliRsnPairManager* RsnConfig
   AliRsnCutESDPrimary *cutESDPrimary = new AliRsnCutESDPrimary("cutESDPrimary");
   cutESDPrimary->GetCuts()->SetMaxCovDiagonalElements(2.0, 2.0, 0.5, 0.5, 2.0);
   cutESDPrimary->GetCuts()->SetRequireSigmaToVertex(kTRUE);
-  cutESDPrimary->GetCuts()->SetMaxNsigmaToVertex(4.0);
+  cutESDPrimary->GetCuts()->SetMaxNsigmaToVertex(3.0);
   cutESDPrimary->GetCuts()->SetRequireTPCRefit(kTRUE);
   cutESDPrimary->GetCuts()->SetAcceptKinkDaughters(kFALSE);
   cutESDPrimary->GetCuts()->SetMinNClustersTPC(50);
   cutESDPrimary->GetCuts()->SetMaxChi2PerClusterTPC(3.5);
   // -- Bethe-Bloch with kaon mass hypothesis
-  AliRsnCutBetheBloch *cutKaonBB = new AliRsnCutBetheBloch("cutKaonBB", bbCut, AliPID::kKaon);
+  Double_t sigmaTPC = 0.065;
+  AliRsnCutBetheBloch *cutKaonBB = new AliRsnCutBetheBloch("cutKaonBB", 3.0 * sigmaTPC, AliPID::kKaon);
   cutKaonBB->SetCalibConstant(0, 0.76176e-1);
   cutKaonBB->SetCalibConstant(1, 10.632);
   cutKaonBB->SetCalibConstant(2, 0.13279e-4);
@@ -92,14 +131,12 @@ AliRsnPairManager* RsnConfig
   // cut set definition for all pairs
   AliRsnCutSet *cutSetParticle = new AliRsnCutSet("trackCuts");
   cutSetParticle->AddCut(cutESDPrimary);
-  if (pidType == AliRsnPair::kNoPID && bbCut < 10.0)
+  if (useBBCut)
   {
-    Info("RsnConfig", "PID TYPE = NOPID AND BB CUT = %f -- Adding this cut", bbCut);
     cutSetParticle->AddCut(cutKaonBB);
     cutSetParticle->SetCutScheme("cutKaonBB&cutESDPrimary");
   }
   else {
-    Info("RsnConfig", "PID TYPE = %d AND BB CUT = %f -- Excluding cut", pidType, bbCut);
     cutSetParticle->SetCutScheme("cutESDPrimary");
   }
 
@@ -129,8 +166,8 @@ AliRsnPairManager* RsnConfig
 
   // define all binnings
   AliRsnFunctionAxis *axisIM   = new AliRsnFunctionAxis(AliRsnFunctionAxis::kPairInvMass,    1000,  0.0,   2.0);
-  AliRsnFunctionAxis *axisPt   = new AliRsnFunctionAxis(AliRsnFunctionAxis::kPairPt,          400,  0.0,  10.0);
-  AliRsnFunctionAxis *axisEta  = new AliRsnFunctionAxis(AliRsnFunctionAxis::kPairEta,          10, -1.0,   1.0);
+  AliRsnFunctionAxis *axisPt   = new AliRsnFunctionAxis(AliRsnFunctionAxis::kPairPt,           40,  0.0,  10.0);
+  AliRsnFunctionAxis *axisEta  = new AliRsnFunctionAxis(AliRsnFunctionAxis::kPairEta,          20, -1.5,   1.5);
   AliRsnFunctionAxis *axisMult = new AliRsnFunctionAxis(AliRsnFunctionAxis::kEventMult,         8,  0.0, 200.0);
 
   // function #1: pt, mult