]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWG3/hfe/AliHFEcuts.cxx
Mass bins settable from outside (Francesco)
[u/mrichter/AliRoot.git] / PWG3 / hfe / AliHFEcuts.cxx
index 6561c76a0566b152486111dbc4a83cad0b49d5b6..626889650835ff25e4adf1154a9fae5d926a79f5 100644 (file)
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/
-/************************************************************************
- *                                                                      *
- * Cut menagement class implemented by the                              *
- * ALICE Heavy Flavour Electron Group                                   *
- *                                                                      *
- * Authors:                                                             *
- *   Markus Fasel <M.Fasel@gsi.de>                                      *
- *   Markus Heide <mheide@uni-muenster.de>                              *
- *   Matus Kalisky <m.kalisky@uni-muenster.de>                          *
- *                                                                      *
- ************************************************************************/
+//
+// Cut menagement class implemented by the
+// ALICE Heavy Flavour Electron Group
+// Interface to the correction framework
+// Provides a set of standard cuts 
+// 
+// Authors:
+//   Raphaelle Bailhache <R.Bailhache@gsi.de>
+//   Markus Fasel <M.Fasel@gsi.de>
+//   Markus Heide <mheide@uni-muenster.de>
+//   Matus Kalisky <m.kalisky@uni-muenster.de>
+//
+// Overview over the 18 steps in the correction Framework
+// 0. Generated Electrons
+// 1. Signal Electrons
+// 2. Electron in Acceptance
+// ------------------------------------------------------------
+// 3. Rec without cuts (MC information)
+// 4. Rec Kine ITS/TPC (MC Information)
+// 5. Rec Primary (MC Information)
+// 6. HFE ITS (MC Information)
+// 7. HFE TRD (MC Information)
+// 8. PID (MC Information) 
+// ............................................................
+// 9. Rec without cuts(MC Information for tracks which are already registered)
+// 10. Rec Kine ITS/TPC (MC Information for tracks which are already registered)
+// 11. RecPrimary (MC Information for tracks which are already registered)
+// 12. HFE ITS (MC Information for tracks which are already registered)
+// 13. HFE TPC (MC Information for tracks which are already registered)
+// 14. PID (MC Information for tracks which are already registered)
+// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
+// 15. Rec without cuts
+// 16. Rec Kine ITS/TPC 
+// 17. Rec Primary
+// 18. HFE ITS
+// 19. HFE TRD
+// 20. PID
+//
 #include <TClass.h>
 #include <TList.h>
 #include <TObjArray.h>
 
 #include "AliCFAcceptanceCuts.h"
 #include "AliCFCutBase.h"
+#include "AliCFEventGenCuts.h"
+#include "AliCFEventRecCuts.h"
 #include "AliCFManager.h"
 #include "AliCFParticleGenCuts.h"
 #include "AliCFTrackIsPrimaryCuts.h"
 #include "AliCFTrackKineCuts.h"
 #include "AliCFTrackQualityCuts.h"
 #include "AliESDtrack.h"
-#include "AliMCParticle.h"
 
 #include "AliHFEcuts.h"
 
 ClassImp(AliHFEcuts)
 
-const Int_t AliHFEcuts::kNcutSteps = 5;
-
 //__________________________________________________________________
 AliHFEcuts::AliHFEcuts():
   fRequirements(0),
   fMinClustersTPC(0),
   fMinTrackletsTRD(0),
   fCutITSPixel(0),
+  fCheckITSLayerStatus(kTRUE),
   fMaxChi2clusterTPC(0.),
   fMinClusterRatioTPC(0.),
   fSigmaToVtx(0.),
-  fMaxImpactParamR(0.),
-  fMaxImpactParamZ(0.),
   fHistQA(0x0),
-  fCutList(0x0)
+  fCutList(0x0),
+  fDebugLevel(0)
 {
   //
   // Default Constructor
@@ -75,13 +101,13 @@ AliHFEcuts::AliHFEcuts(const AliHFEcuts &c):
   fMinClustersTPC(c.fMinClustersTPC),
   fMinTrackletsTRD(c.fMinTrackletsTRD),
   fCutITSPixel(c.fCutITSPixel),
+  fCheckITSLayerStatus(c.fCheckITSLayerStatus),
   fMaxChi2clusterTPC(c.fMaxChi2clusterTPC),
   fMinClusterRatioTPC(c.fMinClusterRatioTPC),
   fSigmaToVtx(c.fSigmaToVtx),
-  fMaxImpactParamR(c.fMaxImpactParamR),
-  fMaxImpactParamZ(c.fMaxImpactParamZ),
   fHistQA(0x0),
-  fCutList(0x0)
+  fCutList(0x0),
+  fDebugLevel(0)
 {
   //
   // Copy Constructor
@@ -109,19 +135,48 @@ AliHFEcuts::~AliHFEcuts(){
 
 //__________________________________________________________________
 void AliHFEcuts::Initialize(AliCFManager *cfm){
+  //
+  // Initializes the cut objects from the correction framework
+  // Publishes the cuts to the correction framework manager
+  //
+  if(IsInDebugMode()){
+     fHistQA = new TList;
+    fHistQA->SetName("CutQAhistograms");
+    fHistQA->SetOwner(kFALSE);
+  }
   // Call all the setters for the cuts
   SetParticleGenCutList();
   SetAcceptanceCutList();
-  SetRecKineCutList();
+  SetRecKineITSTPCCutList();
   SetRecPrimaryCutList();
-  SetHFElectronCuts();
+  SetHFElectronITSCuts();
+  SetHFElectronTRDCuts();
+
+  // Publish to the cuts which analysis type they are (ESD Analysis by default)
+  if(IsAOD()){
+    AliInfo("Setting AOD Analysis");
+    TObjArray *genCuts = dynamic_cast<TObjArray *>(fCutList->FindObject("fPartGenCuts"));
+    if(genCuts){
+      AliCFParticleGenCuts *myGenCut = dynamic_cast<AliCFParticleGenCuts *>(genCuts->FindObject("fCutsGenMC"));
+      if(myGenCut) myGenCut->SetAODMC(kTRUE);
+    }
+  }
+
+  // Connect the event cuts
+  SetEventCutList(kEventStepGenerated);
+  SetEventCutList(kEventStepReconstructed);
+  cfm->SetEventCutsList(kEventStepGenerated, dynamic_cast<TObjArray *>(fCutList->FindObject("fEvGenCuts")));
+  cfm->SetEventCutsList(kEventStepReconstructed, dynamic_cast<TObjArray *>(fCutList->FindObject("fEvRecCuts")));
   
-  // Connect the cuts
+  // Connect the particle cuts
   cfm->SetParticleCutsList(kStepMCGenerated, dynamic_cast<TObjArray *>(fCutList->FindObject("fPartGenCuts")));
   cfm->SetParticleCutsList(kStepMCInAcceptance, dynamic_cast<TObjArray *>(fCutList->FindObject("fPartAccCuts")));
-  cfm->SetParticleCutsList(kStepRecKine, dynamic_cast<TObjArray *>(fCutList->FindObject("fPartRecCuts")));
+  cfm->SetParticleCutsList(kStepRecKineITSTPC, dynamic_cast<TObjArray *>(fCutList->FindObject("fPartRecKineITSTPCCuts")));
   cfm->SetParticleCutsList(kStepRecPrim, dynamic_cast<TObjArray *>(fCutList->FindObject("fPartPrimCuts")));
-  cfm->SetParticleCutsList(kStepHFEcuts, dynamic_cast<TObjArray *>(fCutList->FindObject("fPartHFECuts")));
+  cfm->SetParticleCutsList(kStepHFEcutsITS, dynamic_cast<TObjArray *>(fCutList->FindObject("fPartHFECutsITS")));
+  cfm->SetParticleCutsList(kStepHFEcutsTRD, dynamic_cast<TObjArray *>(fCutList->FindObject("fPartHFECutsTRD")));
+
 }
 
 //__________________________________________________________________
@@ -129,9 +184,43 @@ void AliHFEcuts::Initialize(){
   // Call all the setters for the cuts
   SetParticleGenCutList();
   SetAcceptanceCutList();
-  SetRecKineCutList();
+  SetRecKineITSTPCCutList();
   SetRecPrimaryCutList();
-  SetHFElectronCuts();
+  SetHFElectronITSCuts();
+  SetHFElectronTRDCuts();
+
+}
+
+//__________________________________________________________________
+void AliHFEcuts::SetEventCutList(Int_t istep){
+  // 
+  // Cuts for Event Selection
+  //
+  TObjArray *arr = new TObjArray;
+  if(istep == kEventStepGenerated){
+    AliCFEventGenCuts *evGenCuts = new AliCFEventGenCuts("fCutsEvGen", "Event Generated cuts");
+    evGenCuts->SetNTracksCut(1);
+    evGenCuts->SetRequireVtxCuts(kTRUE);
+    evGenCuts->SetVertexXCut(-1, 1);
+    evGenCuts->SetVertexYCut(-1, 1);
+    evGenCuts->SetVertexZCut(-30, 30);
+
+    arr->SetName("fEvGenCuts");
+    arr->AddLast(evGenCuts);
+  } else {
+    AliCFEventRecCuts *evRecCuts = new AliCFEventRecCuts("fCutsEvRec", "Event Reconstructed cuts");
+    evRecCuts->SetUseSPDVertex();
+    evRecCuts->SetNTracksCut(1);
+    evRecCuts->SetRequireVtxCuts(kTRUE);
+    evRecCuts->SetVertexXCut(-1, 1);
+    evRecCuts->SetVertexYCut(-1, 1);
+    evRecCuts->SetVertexZCut(-30, 30);
+
+
+    arr->SetName("fEvRecCuts");
+    arr->AddLast(evRecCuts);
+  }
+  fCutList->AddLast(arr);
 }
 
 //__________________________________________________________________
@@ -148,12 +237,13 @@ void AliHFEcuts::SetParticleGenCutList(){
   if(IsRequireProdVertex()){
     genCuts->SetProdVtxRangeX(fProdVtx[0], fProdVtx[1]);
     genCuts->SetProdVtxRangeY(fProdVtx[2], fProdVtx[3]);
+    genCuts->SetProdVtxRange2D(kTRUE);  // Use ellipse
   }
-  genCuts->SetRequirePdgCode(11/*, kTRUE*/);
+  genCuts->SetRequirePdgCode(11, kTRUE);
   
   AliCFTrackKineCuts *kineMCcuts = new AliCFTrackKineCuts("fCutsKineMC","MC Kine Cuts");
   kineMCcuts->SetPtRange(fPtRange[0], fPtRange[1]);
-  kineMCcuts->SetEtaRange(-0.9, 0.9);
+  kineMCcuts->SetEtaRange(-0.8, 0.8);
 
   if(IsInDebugMode()){
     genCuts->SetQAOn(fHistQA);
@@ -174,26 +264,27 @@ void AliHFEcuts::SetAcceptanceCutList(){
   // Min. Required Hist for Detectors:
   //          ITS [3]
   //          TPC [2]
-  //          TRD [12]
+  //          TRD [2*nTracklets]
   //          TOF [0]
   //
   AliCFAcceptanceCuts *accCuts = new AliCFAcceptanceCuts("fCutsAccMC", "MC Acceptance Cuts");
   accCuts->SetMinNHitITS(3);
   accCuts->SetMinNHitTPC(2);
-  accCuts->SetMinNHitTRD(12);
+  accCuts->SetMinNHitTRD(2*fMinTrackletsTRD);
   if(IsInDebugMode()) accCuts->SetQAOn(fHistQA);
   
-  TObjArray *PartAccCuts = new TObjArray();
-  PartAccCuts->SetName("fPartAccCuts");
-  PartAccCuts->AddLast(accCuts);
-  fCutList->AddLast(PartAccCuts);
+  TObjArray *partAccCuts = new TObjArray();
+  partAccCuts->SetName("fPartAccCuts");
+  partAccCuts->AddLast(accCuts);
+  fCutList->AddLast(partAccCuts);
 }
 
 //__________________________________________________________________
-void AliHFEcuts::SetRecKineCutList(){
+void AliHFEcuts::SetRecKineITSTPCCutList(){
   //
   // Track Kinematics and Quality cuts (Based on the Standard cuts from PWG0)
   //
+  // ITS refit
   // Variances:
   //  y: 2
   //  z: 2
@@ -203,7 +294,6 @@ void AliHFEcuts::SetRecKineCutList(){
   // Min. Number of Clusters:
   //  TPC: 50
   // RefitRequired:
-  //  ITS
   //  TPC
   // Chi2 per TPC cluster: 3.5
   //
@@ -214,21 +304,27 @@ void AliHFEcuts::SetRecKineCutList(){
   AliCFTrackQualityCuts *trackQuality = new AliCFTrackQualityCuts("fCutsQualityRec","REC Track Quality Cuts");
   trackQuality->SetMinNClusterTPC(fMinClustersTPC);
   trackQuality->SetMaxChi2PerClusterTPC(fMaxChi2clusterTPC);
-  trackQuality->SetStatus(AliESDtrack::kTPCrefit & AliESDtrack::kITSrefit);
+  trackQuality->SetStatus(AliESDtrack::kTPCrefit | AliESDtrack::kITSrefit);
   trackQuality->SetMaxCovDiagonalElements(2., 2., 0.5, 0.5, 2); 
 
+  AliHFEextraCuts *hfecuts = new AliHFEextraCuts("fCutsHFElectronGroupTPC","Extra cuts from the HFE group");
+  if(fMinClusterRatioTPC > 0.) hfecuts->SetClusterRatioTPC(fMinClusterRatioTPC);
+  hfecuts->SetDebugLevel(fDebugLevel);
+  
   AliCFTrackKineCuts *kineCuts = new AliCFTrackKineCuts("fCutsKineRec", "REC Kine Cuts");
   kineCuts->SetPtRange(fPtRange[0], fPtRange[1]);
-  kineCuts->SetEtaRange(-0.9, 0.9);
+  kineCuts->SetEtaRange(-0.8, 0.8);
   
   if(IsInDebugMode()){
     trackQuality->SetQAOn(fHistQA);
+    hfecuts->SetQAOn(fHistQA);
     kineCuts->SetQAOn(fHistQA);
   }
   
   TObjArray *recCuts = new TObjArray;
-  recCuts->SetName("fPartRecCuts");
+  recCuts->SetName("fPartRecKineITSTPCCuts");
   recCuts->AddLast(trackQuality);
+  recCuts->AddLast(hfecuts);
   recCuts->AddLast(kineCuts);
   fCutList->AddLast(recCuts);
 }
@@ -244,7 +340,7 @@ void AliHFEcuts::SetRecPrimaryCutList(){
   //
   AliCFTrackIsPrimaryCuts *primaryCut = new AliCFTrackIsPrimaryCuts("fCutsPrimaryCuts", "REC Primary Cuts");
   if(IsRequireDCAToVertex()){
-    primaryCut->SetDCAToVertex2D(kTRUE);
+    //primaryCut->SetDCAToVertex2D(kTRUE);
     primaryCut->SetMaxDCAToVertexXY(fDCAtoVtx[0]);
     primaryCut->SetMaxDCAToVertexZ(fDCAtoVtx[1]);
   }
@@ -262,24 +358,37 @@ void AliHFEcuts::SetRecPrimaryCutList(){
 }
 
 //__________________________________________________________________
-void AliHFEcuts::SetHFElectronCuts(){
+void AliHFEcuts::SetHFElectronITSCuts(){
   //
-  // Special Cuts introduced by the HFElectron Group
+  // Special Cuts introduced by the HFElectron Group: ITS
   //
-  AliHFEextraCuts *hfecuts = new AliHFEextraCuts("fCutsHFElectronGroup","Extra cuts from the HFE group");
+  AliHFEextraCuts *hfecuts = new AliHFEextraCuts("fCutsHFElectronGroupPixels","Extra cuts from the HFE group");
   if(IsRequireITSpixel()){
     hfecuts->SetRequireITSpixel(AliHFEextraCuts::ITSPixel_t(fCutITSPixel));
+    hfecuts->SetCheckITSstatus(fCheckITSLayerStatus);
   }
-  if(IsRequireMaxImpactParam()){
-    hfecuts->SetMaxImpactParamR(fMaxImpactParamR);
-    hfecuts->SetMaxImpactParamZ(fMaxImpactParamZ);
-  }
-  if(fMinTrackletsTRD) hfecuts->SetMinTrackletsTRD(fMinTrackletsTRD);
-  if(fMinClusterRatioTPC > 0.) hfecuts->SetClusterRatioTPC(fMinClusterRatioTPC);
+  
+  if(IsInDebugMode()) hfecuts->SetQAOn(fHistQA);
+  hfecuts->SetDebugLevel(fDebugLevel);
+
+  TObjArray *hfeCuts = new TObjArray;
+  hfeCuts->SetName("fPartHFECutsITS");
+  hfeCuts->AddLast(hfecuts);
+  fCutList->AddLast(hfeCuts);
+}
+
+//__________________________________________________________________
+void AliHFEcuts::SetHFElectronTRDCuts(){
+  //
+  // Special Cuts introduced by the HFElectron Group: TRD
+  //
+  AliHFEextraCuts *hfecuts = new AliHFEextraCuts("fCutsHFElectronGroupTRD","Extra cuts from the HFE group");
+  if(fMinTrackletsTRD > 0.) hfecuts->SetMinTrackletsTRD(fMinTrackletsTRD);
   if(IsInDebugMode()) hfecuts->SetQAOn(fHistQA);
+  hfecuts->SetDebugLevel(fDebugLevel);
   
   TObjArray *hfeCuts = new TObjArray;
-  hfeCuts->SetName("fPartHFECuts");
+  hfeCuts->SetName("fPartHFECutsTRD");
   hfeCuts->AddLast(hfecuts);
   fCutList->AddLast(hfeCuts);
 }
@@ -290,9 +399,6 @@ void AliHFEcuts::SetDebugMode(){
   // Switch on QA
   //
   SetBit(kDebugMode, kTRUE); 
-  fHistQA = new TList;
-  fHistQA->SetName("CutQAhistograms");
-  fHistQA->SetOwner(kFALSE);
 }
 
 //__________________________________________________________________
@@ -300,7 +406,7 @@ Bool_t AliHFEcuts::CheckParticleCuts(CutStep_t step, TObject *o){
   //
   // Checks the cuts without using the correction framework manager
   // 
-  TString stepnames[kNcutSteps] = {"fPartGenCuts", "fPartAccCuts", "fPartRecCuts", "fPartPrimCuts", "fPartHFECuts"};
+  TString stepnames[kNcutStepsTrack] = {"fPartGenCuts", "fPartAccCuts", "fPartRecCuts", "fPartPrimCuts", "fPartHFECuts"};
   TObjArray *cuts = dynamic_cast<TObjArray *>(fCutList->FindObject(stepnames[step].Data()));
   if(!cuts) return kTRUE;
   TIterator *it = cuts->MakeIterator();