]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGHF/hfe/AliHFEcuts.cxx
update for mass study
[u/mrichter/AliRoot.git] / PWGHF / hfe / AliHFEcuts.cxx
index 84d4ea134411e2546c37351bf703b671fd855d9e..58df04b9e5401122a4ce1321ef3a23ffc89e83af 100644 (file)
@@ -58,7 +58,6 @@
 #include "AliCFAcceptanceCuts.h"
 #include "AliCFCutBase.h"
 #include "AliCFEventGenCuts.h"
-#include "AliCFEventRecCuts.h"
 #include "AliCFManager.h"
 #include "AliCFParticleGenCuts.h"
 #include "AliCFTrackIsPrimaryCuts.h"
@@ -113,14 +112,16 @@ const Char_t * AliHFEcuts::fgkUndefined = "Undefined";
 AliHFEcuts::AliHFEcuts():
   TNamed(),
   fRequirements(0),
-  fTPCclusterDef(AliHFEextraCuts::kFound),
-  fTPCratioDef(AliHFEextraCuts::kFoundOverFindable),
+  fTPCclusterDef(0),
+  fTPCratioDef(0),
   fMinClustersTPC(0),
   fMinClustersTPCPID(0),
   fMinClustersITS(0),
   fMinTrackletsTRD(0),
+  fMaxChi2TRD(-1.),
   fCutITSPixel(0),
   fCheckITSLayerStatus(kTRUE),
+  fCutITSDrift(0),
   fMaxChi2clusterITS(-1.),
   fMaxChi2clusterTPC(0.),
   fMinClusterRatioTPC(0.),
@@ -129,12 +130,20 @@ AliHFEcuts::AliHFEcuts():
   fTOFPIDStep(kFALSE),
   fTOFMISMATCHStep(kFALSE),
   fTPCPIDCLEANUPStep(kFALSE),
+  fITSpatternCut(kFALSE),
   fUseMixedVertex(kTRUE),
+  fUseSPDVertex(kFALSE),
+  fUseCorrelationVertex(kFALSE),
+  fSPDVtxResolution(kFALSE),
   fIsIPSigmacut(kFALSE),
-  fIsIPAbs(kTRUE),
+  fIsIPcharge(kFALSE),
+  fIsIPOpp(kFALSE),
   fFractionOfSharedTPCClusters(-1.0),
   fMaxImpactParameterRpar(kFALSE),
   fAdditionalStatusRequirement(0),
+  fTOFsignaldx(-1.0),
+  fTOFsignaldz(-1.0),
+  fAODFilterBit(-1),
   fHistQA(0x0),
   fCutList(0x0),
   fDebugLevel(0)
@@ -147,21 +156,23 @@ AliHFEcuts::AliHFEcuts():
   memset(fPtRange, 0, sizeof(Double_t) * 2);
   memset(fIPCutParams, 0, sizeof(Float_t) * 4);
   memset(fSigmaToVtx, 0, sizeof(Double_t) * 3);
-
+  fEtaRange[0] = -0.8; fEtaRange[1] = 0.8;
 }
 
 //__________________________________________________________________
 AliHFEcuts::AliHFEcuts(const Char_t *name, const Char_t *title):
   TNamed(name, title),
   fRequirements(0),
-  fTPCclusterDef(AliHFEextraCuts::kFound),
-  fTPCratioDef(AliHFEextraCuts::kFoundOverFindable),
+  fTPCclusterDef(0),
+  fTPCratioDef(0),
   fMinClustersTPC(0),
   fMinClustersTPCPID(0),
   fMinClustersITS(0),
   fMinTrackletsTRD(0),
+  fMaxChi2TRD(-1.),
   fCutITSPixel(0),
   fCheckITSLayerStatus(kTRUE),
+  fCutITSDrift(0),
   fMaxChi2clusterITS(-1.),
   fMaxChi2clusterTPC(0.),
   fMinClusterRatioTPC(0.),
@@ -170,12 +181,20 @@ AliHFEcuts::AliHFEcuts(const Char_t *name, const Char_t *title):
   fTOFPIDStep(kFALSE),
   fTOFMISMATCHStep(kFALSE),
   fTPCPIDCLEANUPStep(kFALSE),
+  fITSpatternCut(kFALSE),
   fUseMixedVertex(kTRUE),
+  fUseSPDVertex(kFALSE),
+  fUseCorrelationVertex(kFALSE),
+  fSPDVtxResolution(kFALSE),
   fIsIPSigmacut(kFALSE),
-  fIsIPAbs(kTRUE),
+  fIsIPcharge(kFALSE),
+  fIsIPOpp(kFALSE),
   fFractionOfSharedTPCClusters(-1.0),
   fMaxImpactParameterRpar(kFALSE),
   fAdditionalStatusRequirement(0),
+  fTOFsignaldx(-1.0),
+  fTOFsignaldz(-1.0),
+  fAODFilterBit(-1),
   fHistQA(0x0),
   fCutList(0x0),
   fDebugLevel(0)
@@ -188,6 +207,7 @@ AliHFEcuts::AliHFEcuts(const Char_t *name, const Char_t *title):
   memset(fPtRange, 0, sizeof(Double_t) * 2);
   memset(fIPCutParams, 0, sizeof(Float_t) * 4);
   memset(fSigmaToVtx, 0, sizeof(Double_t) * 3);
+  fEtaRange[0] = -0.8; fEtaRange[1] = 0.8;
 }
 
 //__________________________________________________________________
@@ -200,8 +220,10 @@ AliHFEcuts::AliHFEcuts(const AliHFEcuts &c):
   fMinClustersTPCPID(0),
   fMinClustersITS(0),
   fMinTrackletsTRD(0),
+  fMaxChi2TRD(-1.),
   fCutITSPixel(0),
   fCheckITSLayerStatus(0),
+  fCutITSDrift(0),
   fMaxChi2clusterITS(-1.),
   fMaxChi2clusterTPC(0),
   fMinClusterRatioTPC(0),
@@ -210,12 +232,20 @@ AliHFEcuts::AliHFEcuts(const AliHFEcuts &c):
   fTOFPIDStep(kFALSE),
   fTOFMISMATCHStep(kFALSE),
   fTPCPIDCLEANUPStep(kFALSE),
+  fITSpatternCut(c.fITSpatternCut),
   fUseMixedVertex(kTRUE),
+  fUseSPDVertex(kFALSE),
+  fUseCorrelationVertex(c.fUseCorrelationVertex),
+  fSPDVtxResolution(c.fSPDVtxResolution),
   fIsIPSigmacut(kFALSE),
-  fIsIPAbs(kTRUE),
+  fIsIPcharge(kFALSE),
+  fIsIPOpp(kFALSE),
   fFractionOfSharedTPCClusters(-1.0),
   fMaxImpactParameterRpar(kFALSE),
   fAdditionalStatusRequirement(0),
+  fTOFsignaldx(-1.0),
+  fTOFsignaldz(-1.0),
+  fAODFilterBit(-1),
   fHistQA(0x0),
   fCutList(0x0),
   fDebugLevel(0)
@@ -249,8 +279,10 @@ void AliHFEcuts::Copy(TObject &c) const {
   target.fMinClustersTPCPID = fMinClustersTPCPID;
   target.fMinClustersITS = fMinClustersITS;
   target.fMinTrackletsTRD = fMinTrackletsTRD;
+  target.fMaxChi2TRD  = fMaxChi2TRD;
   target.fCutITSPixel = fCutITSPixel;
   target.fCheckITSLayerStatus = fCheckITSLayerStatus;
+  target.fCutITSDrift = fCutITSDrift;
   target.fMaxChi2clusterITS = fMaxChi2clusterITS;
   target.fMaxChi2clusterTPC = fMaxChi2clusterTPC;
   target.fMinClusterRatioTPC = fMinClusterRatioTPC;
@@ -260,11 +292,18 @@ void AliHFEcuts::Copy(TObject &c) const {
   target.fTOFMISMATCHStep = fTOFMISMATCHStep;
   target.fTPCPIDCLEANUPStep = fTPCPIDCLEANUPStep;
   target.fUseMixedVertex = fUseMixedVertex;
+  target.fUseSPDVertex = fUseSPDVertex;
+  target.fUseCorrelationVertex = fUseCorrelationVertex;
+  target.fSPDVtxResolution = fSPDVtxResolution;
   target.fIsIPSigmacut = fIsIPSigmacut;
-  target.fIsIPAbs = fIsIPAbs;
+  target.fIsIPcharge = fIsIPcharge;
+  target.fIsIPOpp = fIsIPOpp;
   target.fFractionOfSharedTPCClusters = fFractionOfSharedTPCClusters;
   target.fMaxImpactParameterRpar = fMaxImpactParameterRpar;
   target.fAdditionalStatusRequirement = fAdditionalStatusRequirement;
+  target.fTOFsignaldx = fTOFsignaldx;
+  target.fTOFsignaldz = fTOFsignaldz;
+  target.fAODFilterBit = fAODFilterBit;
   target.fDebugLevel = 0;
 
   memcpy(target.fProdVtx, fProdVtx, sizeof(Double_t) * 4);
@@ -272,6 +311,7 @@ void AliHFEcuts::Copy(TObject &c) const {
   memcpy(target.fPtRange, fPtRange, sizeof(Double_t) *2);
   memcpy(target.fIPCutParams, fIPCutParams, sizeof(Float_t) * 4);
   memcpy(target.fSigmaToVtx, fSigmaToVtx, sizeof(Double_t) * 3);
+  memcpy(target.fEtaRange, fEtaRange, sizeof(Double_t) * 2);
 
   // Copy cut List
   if(target.fCutList){
@@ -365,7 +405,9 @@ void AliHFEcuts::Initialize(AliCFManager *cfm){
     TObjArray *genCuts = dynamic_cast<TObjArray *>(fCutList->FindObject("fPartGenCuts"));
     if(genCuts){
       AliCFParticleGenCuts *myGenCut = dynamic_cast<AliCFParticleGenCuts *>(genCuts->FindObject("fCutsGenMC"));
-      if(myGenCut) myGenCut->SetAODMC(kTRUE);
+      if(myGenCut) {
+       myGenCut->SetAODMC(kTRUE);
+      }
     }
   }
 
@@ -412,9 +454,23 @@ void AliHFEcuts::Initialize(){
   SetHFElectronITSCuts();
   SetHFElectronTOFCuts();
   SetHFElectronTPCCuts();
-  SetHFElectronTRDCuts();
+  SetHFElectronTRDCuts();  
   SetHFElectronDcaCuts();
 
+  // Publish to the cuts which analysis type they are (ESD Analysis by default)
+  if(IsAOD()){
+    //printf("Initialize AOD\n");
+    //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);
+       //printf("Set AOD MC\n");
+      }
+    }
+  }
+
   // Connect the event cuts
   SetEventCutList(kEventStepGenerated);
   SetEventCutList(kEventStepReconstructed);
@@ -442,29 +498,19 @@ void AliHFEcuts::SetEventCutList(Int_t istep){
     arr->AddLast(evGenCuts);
   } else {
 
-    if(!fUseMixedVertex) {
-      AliCFEventRecCuts *evRecCuts = new AliCFEventRecCuts((Char_t *)"fCutsEvRec", (Char_t *)"Event Reconstructed cuts");
-      //evRecCuts->SetNTracksCut(1);
-      evRecCuts->SetRequireVtxCuts(kTRUE);
-      //evRecCuts->SetVertexXCut(-1, 1);
-      //evRecCuts->SetVertexYCut(-1, 1);
-      //evRecCuts->SetVertexZCut(-30, 30);
-      evRecCuts->SetVertexZCut(-fVertexRangeZ, fVertexRangeZ);
-      evRecCuts->SetVertexNContributors(1,(Int_t)1.e9);
-      if(IsQAOn()) evRecCuts->SetQAOn(fHistQA);
-      arr->SetName("fEvRecCuts");
-      arr->AddLast(evRecCuts);
-    } else {
-      AliHFEextraEventCuts *evRecCuts = new AliHFEextraEventCuts((Char_t *)"fCutsEvRec", (Char_t *)"Event Reconstructed cuts");
-      evRecCuts->SetRequireVtxCuts(kTRUE);
-      evRecCuts->SetUseMixedVertex();
-      evRecCuts->SetVertexZCut(-fVertexRangeZ, fVertexRangeZ);
-      //evRecCuts->SetVertexNContributors(1,(Int_t)1.e9);
-      if(IsQAOn()) evRecCuts->SetQAOn(fHistQA);
-      arr->SetName("fEvRecCuts");
-      arr->AddLast(evRecCuts);
-    }
-  }
+    AliHFEextraEventCuts *evRecCuts = new AliHFEextraEventCuts((Char_t *)"fCutsEvRec", (Char_t *)"Event Reconstructed cuts");
+    evRecCuts->SetRequireVtxCuts(kTRUE);
+    if(fUseSPDVertex) evRecCuts->SetUseSPDVertex();
+    if(fUseMixedVertex) evRecCuts->SetUseMixedVertex();
+    if(fUseCorrelationVertex) evRecCuts->SetCheckCorrelationSPDVtx();
+    if(fSPDVtxResolution) evRecCuts->SetCheckSPDResolution();
+    evRecCuts->SetVertexZCut(-fVertexRangeZ, fVertexRangeZ);
+    //evRecCuts->SetVertexNContributors(1,(Int_t)1.e9);
+    if(IsQAOn()) evRecCuts->SetQAOn(fHistQA);
+    arr->SetName("fEvRecCuts");
+    arr->AddLast(evRecCuts);
+   
+  } 
   fCutList->AddLast(arr);
 }
 
@@ -474,7 +520,7 @@ void AliHFEcuts::SetParticleGenCutList(){
   // Initialize Particle Cuts for Monte Carlo Tracks
   // Production Vertex Radius: < 3cm
   // Particle Species: Electrons
-  // Eta: < 0.8
+  // Eta: < 0.8 (fEtaRange)
   //
   
   TObjArray *mcCuts = new TObjArray;
@@ -489,9 +535,16 @@ void AliHFEcuts::SetParticleGenCutList(){
   }
   if(IsRequireProdVertex()){
     AliDebug(3, Form("Vertex Range: fProdVtx[0] %f, fProdVtx[1] %f, fProdVtx[2] %f, fProdVtx[3] %f", fProdVtx[0], fProdVtx[1], fProdVtx[2], fProdVtx[3]));
+    //if(!IsAOD()) {
     genCuts->SetProdVtxRangeX(fProdVtx[0], fProdVtx[1]);
     genCuts->SetProdVtxRangeY(fProdVtx[2], fProdVtx[3]);
     genCuts->SetProdVtxRange2D(kTRUE);  // Use ellipse
+    //}
+    //else {
+      // (ONLY PROVISOIRE FOR MC AOD)
+    // genCuts->SetProdVtxRangeX(-TMath::Abs(fProdVtx[1]), TMath::Abs(fProdVtx[1]));
+    // genCuts->SetProdVtxRangeY(-TMath::Abs(fProdVtx[3]), TMath::Abs(fProdVtx[3]));
+    //}
   }
   genCuts->SetRequirePdgCode(11, kTRUE);
   if(IsQAOn()) genCuts->SetQAOn(fHistQA);
@@ -503,7 +556,8 @@ void AliHFEcuts::SetParticleGenCutList(){
   if(IsRequireKineMCCuts()) {  
     AliCFTrackKineCuts *kineMCcuts = new AliCFTrackKineCuts((Char_t *)"fCutsKineMC", (Char_t *)"MC Kine Cuts");
     kineMCcuts->SetPtRange(fPtRange[0], fPtRange[1]);
-    kineMCcuts->SetEtaRange(-0.8, 0.8);
+    //kineMCcuts->SetEtaRange(-0.8, 0.8);
+    kineMCcuts->SetEtaRange(fEtaRange[0],fEtaRange[1]);
     if(IsQAOn()) kineMCcuts->SetQAOn(fHistQA);
     mcCuts->AddLast(kineMCcuts);
   }
@@ -574,14 +628,17 @@ void AliHFEcuts::SetRecKineITSTPCCutList(){
   hfecuts->SetDebugLevel(fDebugLevel);
   hfecuts->SetMinNbITScls(fMinClustersITS);
   // Set the cut in the TPC number of clusters
-  hfecuts->SetMinNClustersTPC(fMinClustersTPC, fTPCclusterDef);
+  hfecuts->SetMinNClustersTPC(fMinClustersTPC,AliHFEextraCuts::ETPCclusterDef_t(fTPCclusterDef));
   hfecuts->SetMinNClustersTPCPID(fMinClustersTPCPID);
-  hfecuts->SetClusterRatioTPC(fMinClusterRatioTPC, fTPCratioDef);
+  hfecuts->SetClusterRatioTPC(fMinClusterRatioTPC,AliHFEextraCuts::ETPCclrDef_t(fTPCratioDef));
   if(fFractionOfSharedTPCClusters > 0.0) hfecuts->SetFractionOfTPCSharedClusters(fFractionOfSharedTPCClusters); 
+  if(fITSpatternCut) hfecuts->SetITSpatternCut();
+  if(fAODFilterBit > -1) hfecuts->SetAODFilterBit(fAODFilterBit);
   
   AliCFTrackKineCuts *kineCuts = new AliCFTrackKineCuts((Char_t *)"fCutsKineRec", (Char_t *)"REC Kine Cuts");
   kineCuts->SetPtRange(fPtRange[0], fPtRange[1]);
-  kineCuts->SetEtaRange(-0.8, 0.8);
+  //kineCuts->SetEtaRange(-0.8, 0.8);
+  kineCuts->SetEtaRange(fEtaRange[0],fEtaRange[1]);
   
   if(IsQAOn()){
     trackQuality->SetQAOn(fHistQA);
@@ -625,7 +682,7 @@ void AliHFEcuts::SetRecPrimaryCutList(){
   AliHFEextraCuts *hfecuts = new AliHFEextraCuts("fCutsPrimaryCutsextra","Extra cuts from the HFE group");
   hfecuts->SetMaxImpactParameterRpar(fMaxImpactParameterRpar);
   hfecuts->SetRejectKinkDaughter();
-  hfecuts->SetRejectKinkMother();
+  //hfecuts->SetRejectKinkMother();
   if(IsRequireDCAToVertex()){
     hfecuts->SetMaxImpactParamR(fDCAtoVtx[0]);
     hfecuts->SetMaxImpactParamZ(fDCAtoVtx[1]);
@@ -634,11 +691,7 @@ void AliHFEcuts::SetRecPrimaryCutList(){
   TObjArray *primCuts = new TObjArray;
   primCuts->SetName("fPartPrimCuts");
   // needed for AOD...
-  if(IsRequireSigmaToVertex()) {
-    //printf("Add primary COORFW\n");
-    primCuts->AddLast(primaryCut);
-  }
-  //printf("Did not add primary COORFW\n");
+  if(IsRequireSigmaToVertex()) primCuts->AddLast(primaryCut);
   //if(fMaxImpactParameterRpar){
   primCuts->AddLast(hfecuts);
   //}
@@ -656,6 +709,9 @@ void AliHFEcuts::SetHFElectronITSCuts(){
     hfecuts->SetRequireITSpixel(AliHFEextraCuts::ITSPixel_t(fCutITSPixel));
     hfecuts->SetCheckITSstatus(fCheckITSLayerStatus);
   }
+  if(IsRequireITSdrift()){
+    hfecuts->SetRequireITSdrift(AliHFEextraCuts::ITSDrift_t(fCutITSDrift));
+  }
   
   if(IsQAOn()) hfecuts->SetQAOn(fHistQA);
   hfecuts->SetDebugLevel(fDebugLevel);
@@ -675,6 +731,7 @@ void AliHFEcuts::SetHFElectronTOFCuts(){
   AliHFEextraCuts *hfecuts = new AliHFEextraCuts("fCutsHFElectronGroupTOF","Extra cuts from the HFE group on TOF PID");
   if(fTOFPIDStep) hfecuts->SetTOFPID(kTRUE);
   if(fTOFMISMATCHStep) hfecuts->SetTOFMISMATCH(kTRUE);
+  if((fTOFsignaldx > 0.0) && (fTOFsignaldz > 0.0)) hfecuts->SetTOFsignalDxz(fTOFsignaldx,fTOFsignaldz);
   if(IsQAOn()) hfecuts->SetQAOn(fHistQA);
   hfecuts->SetDebugLevel(fDebugLevel);
   
@@ -710,6 +767,9 @@ void AliHFEcuts::SetHFElectronTRDCuts(){
   AliDebug(2, "Called\n");
   AliHFEextraCuts *hfecuts = new AliHFEextraCuts("fCutsHFElectronGroupTRD","Extra cuts from the HFE group on TRD PID");
   if(fMinTrackletsTRD > 0.) hfecuts->SetMinTrackletsTRD(fMinTrackletsTRD, fTRDtrackletsExact);
+  if(fMaxChi2TRD >= 0)
+    hfecuts->SetMaxChi2TRD(fMaxChi2TRD);
+  
   if(IsQAOn()) hfecuts->SetQAOn(fHistQA);
   hfecuts->SetDebugLevel(fDebugLevel);
   
@@ -726,7 +786,7 @@ void AliHFEcuts::SetHFElectronDcaCuts(){
   //
   AliDebug(2, "Called\n");
   AliHFEextraCuts *hfecuts = new AliHFEextraCuts("fCutsHFElectronGroupDCA","Extra cuts from the HFE group");
-  hfecuts->SetMinHFEImpactParamR(fIPCutParams,fIsIPSigmacut,fIsIPAbs);
+  hfecuts->SetMinHFEImpactParamR(fIPCutParams,fIsIPSigmacut,fIsIPcharge,fIsIPOpp);
   if(IsQAOn()) hfecuts->SetQAOn(fHistQA);
   hfecuts->SetDebugLevel(fDebugLevel);
 
@@ -790,7 +850,7 @@ void AliHFEcuts::SetRecEvent(const AliVEvent *ev){
 }
 
 //__________________________________________________________________
-void AliHFEcuts::SetMCEvent(const AliMCEvent *ev){
+void AliHFEcuts::SetMCEvent(const AliVEvent *ev){
   //
   // Publish reconstructed event to the cuts
   //