]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGCF/Correlations/DPhi/AliAnalysisTaskPhiCorrelations.cxx
Merge branch 'TPCdev' of https://git.cern.ch/reps/AliRoot into TPCdev
[u/mrichter/AliRoot.git] / PWGCF / Correlations / DPhi / AliAnalysisTaskPhiCorrelations.cxx
index 1509fe3ee4b7fa4ae4ab9657c343d9036b2f84a4..c52ea2f6b22b3e76d3e742f8d7d70c798f50ade4 100644 (file)
@@ -16,6 +16,7 @@
 /* $Id:$ */
 
 #include <TROOT.h>
+#include <TInterpreter.h>
 #include <TChain.h>
 #include <TFile.h>
 #include <TList.h>
@@ -40,6 +41,7 @@
 #include "AliMCEventHandler.h"
 #include "AliVParticle.h"
 #include "AliCFContainer.h"
+#include "AliEventplane.h"
 
 #include "AliESDEvent.h"
 #include "AliESDInputHandler.h"
@@ -100,6 +102,7 @@ fUseVtxAxis(kFALSE),
 fCourseCentralityBinning(kFALSE),
 fSkipTrigger(kFALSE),
 fInjectedSignals(kFALSE),
+fRandomizeReactionPlane(kFALSE),
 fHelperPID(0x0),
 fAnalysisUtils(0x0),
 fMap(0x0),
@@ -123,14 +126,19 @@ fListOfHistos(0x0),
 // event QA
 fnTracksVertex(1),  // QA tracks pointing to principal vertex (= 3 default) 
 fZVertex(7.),
+fAcceptOnlyMuEvents(kFALSE),
 fCentralityMethod("V0M"),
 // track cuts
 fTrackEtaCut(0.8),
 fTrackEtaCutMin(-1.),
+fTrackPhiCutEvPlMin(0.),
+fTrackPhiCutEvPlMax(0.),
 fOnlyOneEtaSide(0),
 fPtMin(0.5),
 fDCAXYCut(0),
 fSharedClusterCut(-1),
+fCrossedRowsCut(-1),
+fFoundFractionCut(-1),
 fFilterBit(0xFF),
 fTrackStatus(0),
 fSelectBit(AliVEvent::kMB|AliVEvent::kUserDefined),
@@ -138,6 +146,7 @@ fUseChargeHadrons(kFALSE),
 fParticleSpeciesTrigger(-1),
 fParticleSpeciesAssociated(-1),
 fCheckMotherPDG(kTRUE),
+fTrackletDphiCut(9999999.),
 fSelectCharge(0),
 fTriggerSelectCharge(0),
 fAssociatedSelectCharge(0),
@@ -157,6 +166,7 @@ fWeightPerEvent(kFALSE),
 fCustomBinning(),
 fPtOrder(kTRUE),
 fTriggersFromDetector(0),
+fAssociatedFromDetector(0),
 fMCUseUncheckedCentrality(kFALSE),
 fFillpT(kFALSE)
 {
@@ -232,12 +242,16 @@ void  AliAnalysisTaskPhiCorrelations::CreateOutputObjects()
   fAnalyseUE->SetParticleSelectionCriteria(fFilterBit, fUseChargeHadrons, fTrackEtaCut, fTrackEtaCutMin, fPtMin);
   fAnalyseUE->SetDCAXYCut(fDCAXYCut);
   fAnalyseUE->SetSharedClusterCut(fSharedClusterCut);
+  fAnalyseUE->SetCrossedRowsCut(fCrossedRowsCut);
+  fAnalyseUE->SetFoundFractionCut(fFoundFractionCut);
   fAnalyseUE->SetTrackStatus(fTrackStatus);
   fAnalyseUE->SetCheckMotherPDG(fCheckMotherPDG);
   fAnalyseUE->SetDebug(fDebug); 
   fAnalyseUE->DefineESDCuts(fFilterBit);
   fAnalyseUE->SetEventSelection(fSelectBit);
   fAnalyseUE->SetHelperPID(fHelperPID);
+  if(fTrackPhiCutEvPlMax > 0.0001)
+    fAnalyseUE->SetParticlePhiCutEventPlane(fTrackPhiCutEvPlMin,fTrackPhiCutEvPlMax);
   if ((fParticleSpeciesTrigger != -1 || fParticleSpeciesAssociated != -1) && !fHelperPID)
     AliFatal("HelperPID object should be set in the steering macro");
 
@@ -328,8 +342,10 @@ void  AliAnalysisTaskPhiCorrelations::CreateOutputObjects()
     fListOfHistos->Add(new TH2F("V0AMult", "V0A multiplicity;V0A multiplicity;V0A multiplicity (scaled)", 1000, -.5, 999.5, 1000, -.5, 999.5));
     fListOfHistos->Add(new TH2F("V0AMultCorrelation", "V0A multiplicity;V0A multiplicity;SPD tracklets", 1000, -.5, 999.5, 1000, -.5, 999.5));
   }
-  if (fTriggersFromDetector == 1 || fTriggersFromDetector == 2)
+  if (fTriggersFromDetector == 1 || fTriggersFromDetector == 2 || fAssociatedFromDetector == 1 || fAssociatedFromDetector == 2)
     fListOfHistos->Add(new TH1F("V0SingleCells", "V0 single cell multiplicity;multiplicity;events", 100, -0.5, 99.5));
+  if (fTriggersFromDetector == 3 || fAssociatedFromDetector == 3)
+    fListOfHistos->Add(new TH1F("DphiTrklets", "tracklets Dphi;#Delta#phi,trklets (mrad);entries", 100, -100, 100));
   
   PostData(0,fListOfHistos);
   
@@ -406,13 +422,18 @@ void  AliAnalysisTaskPhiCorrelations::AddSettingsTree()
   TTree *settingsTree   = new TTree("UEAnalysisSettings","Analysis Settings in UE estimation");
   settingsTree->Branch("fnTracksVertex", &fnTracksVertex,"nTracksVertex/I");
   settingsTree->Branch("fZVertex", &fZVertex,"ZVertex/D");
+  settingsTree->Branch("fAcceptOnlyMuEvents", &fAcceptOnlyMuEvents,"AcceptOnlyMuEvents/O");
   //settingsTree->Branch("fCentralityMethod", fCentralityMethod.Data(),"CentralityMethod/C");
   settingsTree->Branch("fTrackEtaCut", &fTrackEtaCut, "TrackEtaCut/D");
   settingsTree->Branch("fTrackEtaCutMin", &fTrackEtaCutMin, "TrackEtaCutMin/D");
+  settingsTree->Branch("fTrackPhiCutEvPlMin", &fTrackPhiCutEvPlMin, "TrackPhiCutEvPlMin/D");
+  settingsTree->Branch("fTrackPhiCutEvPlMax", &fTrackPhiCutEvPlMax, "TrackPhiCutEvPlMax/D");
   settingsTree->Branch("fOnlyOneEtaSide", &fOnlyOneEtaSide,"OnlyOneEtaSide/I");
   settingsTree->Branch("fPtMin", &fPtMin, "PtMin/D");
   settingsTree->Branch("fFilterBit", &fFilterBit,"FilterBit/I");
   settingsTree->Branch("fSharedClusterCut", &fSharedClusterCut,"SharedClusterCut/D");
+  settingsTree->Branch("fCrossedRowsCut", &fCrossedRowsCut,"CrossedRowsCut/I");
+  settingsTree->Branch("fFoundFractionCut", &fFoundFractionCut,"FoundFractionCut/D");
   settingsTree->Branch("fTrackStatus", &fTrackStatus,"TrackStatus/I");
   settingsTree->Branch("fSelectBit", &fSelectBit,"EventSelectionBit/I");
   settingsTree->Branch("fUseChargeHadrons", &fUseChargeHadrons,"UseChHadrons/O");
@@ -430,7 +451,8 @@ void  AliAnalysisTaskPhiCorrelations::AddSettingsTree()
   settingsTree->Branch("fFillpT", &fFillpT,"FillpT/O");
   settingsTree->Branch("fMixingTracks", &fMixingTracks,"MixingTracks/I");
   settingsTree->Branch("fSkipTrigger", &fSkipTrigger,"SkipTrigger/O");
-  settingsTree->Branch("fInjectedSignals", &fInjectedSignals,"SkipTrigger/O");
+  settingsTree->Branch("fInjectedSignals", &fInjectedSignals,"InjectedSignals/O");
+  settingsTree->Branch("fRandomizeReactionPlane", &fRandomizeReactionPlane,"RandomizeReactionPlane/O");
   settingsTree->Branch("fRejectCentralityOutliers", &fRejectCentralityOutliers,"RejectCentralityOutliers/O");
   settingsTree->Branch("fRejectZeroTrackEvents", &fRejectZeroTrackEvents,"RejectZeroTrackEvents/O");
   settingsTree->Branch("fRemoveWeakDecays", &fRemoveWeakDecays,"RemoveWeakDecays/O");
@@ -439,6 +461,7 @@ void  AliAnalysisTaskPhiCorrelations::AddSettingsTree()
   settingsTree->Branch("fWeightPerEvent", &fWeightPerEvent,"WeightPerEvent/O");
   settingsTree->Branch("fPtOrder", &fPtOrder,"PtOrder/O");
   settingsTree->Branch("fTriggersFromDetector", &fTriggersFromDetector,"TriggersFromDetector/I");
+  settingsTree->Branch("fAssociatedFromDetector", &fAssociatedFromDetector,"AssociatedFromDetector/I");
   settingsTree->Branch("fMCUseUncheckedCentrality", &fMCUseUncheckedCentrality,"MCUseUncheckedCentrality/O");
   settingsTree->Branch("fTwoTrackEfficiencyCut", &fTwoTrackEfficiencyCut,"TwoTrackEfficiencyCut/D");
   settingsTree->Branch("fTwoTrackCutMinRadius", &fTwoTrackCutMinRadius,"TwoTrackCutMinRadius/D");
@@ -482,6 +505,10 @@ void  AliAnalysisTaskPhiCorrelations::AnalyseCorrectionMode()
       
       centrality = collGeometry->ImpactParameter();
     }
+    else if (fCentralityMethod == "nano")
+    {
+      centrality = (Float_t) gROOT->ProcessLine(Form("100.0 + 100.0 * ((AliNanoAODHeader*) %p)->GetCentrality(\"%s\")", fAOD->GetHeader(), fCentralityMethod.Data())) / 100 - 1.0;
+    }
     else
     {
       AliCentrality *centralityObj = 0;
@@ -537,8 +564,8 @@ void  AliAnalysisTaskPhiCorrelations::AnalyseCorrectionMode()
     
   if (!fAnalyseUE->VertexSelection(vertexSupplier, 0, fZVertex)) 
     return;
-  
-  Float_t zVtx = 0;
+    
+    Float_t zVtx = 0;
   if (fAOD)
     zVtx = ((AliAODMCHeader*) vertexSupplier)->GetVtxZ();
   else
@@ -606,6 +633,13 @@ void  AliAnalysisTaskPhiCorrelations::AnalyseCorrectionMode()
     AliInfo(Form("Injected signals in this event (%d headers). Keeping particles/tracks of %s. Will skip particles/tracks above %d.", headers, eventHeader->ClassName(), skipParticlesAbove));
   }
   
+  if (fCentralityWeights && !AcceptEventCentralityWeight(centrality))
+  {
+    AliInfo(Form("Rejecting event because of centrality weighting: %f", centrality));
+    fHistos->FillEvent(centrality, AliUEHist::kCFStepAnaTopology);
+    return;
+  }
+  
   // Get MC primaries
   // triggers
   TObjArray* tmpList = fAnalyseUE->GetAcceptedParticles(mc, 0, kTRUE, fParticleSpeciesTrigger, kTRUE);
@@ -623,9 +657,30 @@ void  AliAnalysisTaskPhiCorrelations::AnalyseCorrectionMode()
     delete tmpList;
   }
   
+  if (fRandomizeReactionPlane)
+  {
+    Double_t centralityDigits = centrality*1000. - (Int_t)(centrality*1000.);
+    Double_t angle = TMath::TwoPi() * centralityDigits;
+    AliInfo(Form("Shifting phi of all tracks by %f (digits %f)", angle, centralityDigits));
+    ShiftTracks(tracksMC, angle);
+    if (tracksCorrelateMC != tracksMC)
+      ShiftTracks(tracksCorrelateMC, angle);
+  }
+  
   if (fFillOnlyStep0)
     zVtx = 0;
   
+  // Event selection based on number of number of MC particles
+  if (fRejectZeroTrackEvents && tracksMC->GetEntriesFast() == 0)
+  {
+    AliInfo(Form("Rejecting event due to kinematic selection: %f %d", centrality, tracksMC->GetEntriesFast()));
+    fHistos->FillEvent(centrality, AliUEHist::kCFStepAnaTopology);
+    if (tracksMC != tracksCorrelateMC)
+      delete tracksCorrelateMC;
+    delete tracksMC;
+    return;
+  }
+  
   // (MC-true all particles)
   // STEP 0
   fHistos->FillCorrelations(centrality, zVtx, AliUEHist::kCFStepAll, tracksMC, tracksCorrelateMC, weight);
@@ -1028,6 +1083,16 @@ void  AliAnalysisTaskPhiCorrelations::AnalyseDataMode()
       else
        centrality = -1;
     }
+    else if (fCentralityMethod == "nano")
+    {
+//       fAOD->GetHeader()->Dump();
+//       Printf("%p %p %d", dynamic_cast<AliNanoAODHeader*> (fAOD->GetHeader()), dynamic_cast<AliNanoAODHeader*> ((TObject*) (fAOD->GetHeader())), fAOD->GetHeader()->InheritsFrom("AliNanoAODHeader"));
+
+      Int_t error = 0;
+      centrality = (Float_t) gROOT->ProcessLine(Form("100.0 + 100.0 * ((AliNanoAODHeader*) %p)->GetCentrality(\"%s\")", fAOD->GetHeader(), fCentralityMethod.Data()), &error) / 100 - 1.0;
+      if (error != TInterpreter::kNoError)
+       centrality = -1;
+    }
     else
     {
       if (fAOD)
@@ -1040,7 +1105,7 @@ void  AliAnalysisTaskPhiCorrelations::AnalyseDataMode()
        //centrality = centralityObj->GetCentralityPercentileUnchecked(fCentralityMethod);
       else
        centrality = -1;
-
+      
       if (fAOD)
       {
        // remove outliers
@@ -1086,6 +1151,9 @@ void  AliAnalysisTaskPhiCorrelations::AnalyseDataMode()
     return;
   }
   
+  // Reject events without a muon in the muon arm ************************************************
+  if(fAcceptOnlyMuEvents && !IsMuEvent())return;
+  
   // Vertex selection *************************************************
   if(!fAnalyseUE->VertexSelection(inputEvent, fnTracksVertex, fZVertex)) return;
   
@@ -1105,37 +1173,23 @@ void  AliAnalysisTaskPhiCorrelations::AnalyseDataMode()
     return;
 
   TObjArray* tracks = 0;
-  
-  if (fTriggersFromDetector == 0)
-    tracks = fAnalyseUE->GetAcceptedParticles(inputEvent, 0, kTRUE, fParticleSpeciesTrigger, kTRUE);
-  else if (fTriggersFromDetector == 1 || fTriggersFromDetector == 2)
-  {
-    tracks = new TObjArray;
-    tracks->SetOwner(kTRUE);
-    
-    AliVVZERO* vZero = inputEvent->GetVZEROData();
-
-    const Int_t vZeroStart = (fTriggersFromDetector == 1) ? 32 : 0;
-    
-    TH1F* singleCells = (TH1F*) fListOfHistos->FindObject("V0SingleCells");
-    for (Int_t i=vZeroStart; i<vZeroStart+32; i++)
-    {
-      Float_t weight = vZero->GetMultiplicity(i);
-      singleCells->Fill(weight);
-      
-      // rough estimate of multiplicity
-      for (Int_t j=0; j<TMath::Nint(weight); j++)
-      {
-       AliDPhiBasicParticle* particle = new AliDPhiBasicParticle((AliVVZERO::GetVZEROEtaMax(i) + AliVVZERO::GetVZEROEtaMin(i)) / 2, AliVVZERO::GetVZEROAvgPhi(i), 1.1, 0); // fit pT = 1.1 and charge = 0
-       particle->SetUniqueID(-1); // not needed here
-       
-       tracks->Add(particle);
-      }
-    }
+  Double_t evtPlanePhi = -999.; //A value outside [-pi/2,pi/2] will be ignored
+  if(fTrackPhiCutEvPlMax > 0.0001) {
+    AliEventplane* evtPlane = inputEvent->GetEventplane();
+    Double_t qx = 0; Double_t qy = 0;
+    if(evtPlane) evtPlanePhi = evtPlane->CalculateVZEROEventPlane(inputEvent, 10, 2, qx, qy);
+    //Reject event if the plane is not available
+    else return; 
   }
+  if (fTriggersFromDetector == 0)
+    tracks = fAnalyseUE->GetAcceptedParticles(inputEvent, 0, kTRUE, fParticleSpeciesTrigger, kTRUE, kTRUE, evtPlanePhi);
+  else if (fTriggersFromDetector <= 4)
+    tracks=GetParticlesFromDetector(inputEvent,fTriggersFromDetector);
   else
     AliFatal(Form("Invalid setting for fTriggersFromDetector: %d", fTriggersFromDetector));
-
+  
   //Printf("Accepted %d tracks", tracks->GetEntries());
   
   // check for outlier in centrality vs number of tracks (rough constants extracted from correlation histgram)
@@ -1182,8 +1236,16 @@ void  AliAnalysisTaskPhiCorrelations::AnalyseDataMode()
   
   // correlate particles with...
   TObjArray* tracksCorrelate = 0;
-  if (fParticleSpeciesAssociated != fParticleSpeciesTrigger || fTriggersFromDetector > 0)
-    tracksCorrelate = fAnalyseUE->GetAcceptedParticles(inputEvent, 0, kTRUE, fParticleSpeciesAssociated, kTRUE);
+  if(fAssociatedFromDetector==0){
+    if (fParticleSpeciesAssociated != fParticleSpeciesTrigger || fTriggersFromDetector > 0 || fTrackPhiCutEvPlMax > 0.0001)
+      tracksCorrelate = fAnalyseUE->GetAcceptedParticles(inputEvent, 0, kTRUE, fParticleSpeciesAssociated, kTRUE);
+  }
+  else if (fAssociatedFromDetector <= 4){
+    if(fAssociatedFromDetector != fTriggersFromDetector)
+      tracksCorrelate = GetParticlesFromDetector(inputEvent,fAssociatedFromDetector);
+  }
+  else
+    AliFatal(Form("Invalid setting for fAssociatedFromDetector: %d", fAssociatedFromDetector));
   
   // reference multiplicity
   Int_t referenceMultiplicity = -1;
@@ -1410,3 +1472,125 @@ Bool_t AliAnalysisTaskPhiCorrelations::AcceptEventCentralityWeight(Double_t cent
   
   return result;
 }
+
+//____________________________________________________________________
+void AliAnalysisTaskPhiCorrelations::ShiftTracks(TObjArray* tracks, Double_t angle)
+{
+  // shifts the phi angle of all tracks by angle
+  // 0 <= angle <= 2pi
+  
+  for (Int_t i=0; i<tracks->GetEntriesFast(); ++i) 
+  {
+    AliDPhiBasicParticle* part = (AliDPhiBasicParticle*) tracks->At(i);
+    Double_t newAngle = part->Phi() + angle; 
+    if (newAngle >= TMath::TwoPi())
+      newAngle -= TMath::TwoPi();
+    
+    part->SetPhi(newAngle);
+  }
+}
+
+//____________________________________________________________________
+TObjArray* AliAnalysisTaskPhiCorrelations::GetParticlesFromDetector(AliVEvent* inputEvent, Int_t idet)
+{
+  //1 = VZERO_A; 2 = VZERO_C; 3 = SPD tracklets
+  TObjArray* obj = new TObjArray;
+  obj->SetOwner(kTRUE);
+  
+  if (idet == 1 || idet == 2)
+  {
+    AliVVZERO* vZero = inputEvent->GetVZEROData();
+    
+    const Int_t vZeroStart = (idet == 1) ? 32 : 0;
+    
+    TH1F* singleCells = (TH1F*) fListOfHistos->FindObject("V0SingleCells");
+    for (Int_t i=vZeroStart; i<vZeroStart+32; i++)
+      {
+       Float_t weight = vZero->GetMultiplicity(i);
+       singleCells->Fill(weight);
+       
+       // rough estimate of multiplicity
+       for (Int_t j=0; j<TMath::Nint(weight); j++)
+         {
+           AliDPhiBasicParticle* particle = new AliDPhiBasicParticle((AliVVZERO::GetVZEROEtaMax(i) + AliVVZERO::GetVZEROEtaMin(i)) / 2, AliVVZERO::GetVZEROAvgPhi(i), 1.1, 0); // fit pT = 1.1 and charge = 0
+           particle->SetUniqueID(fAnalyseUE->GetEventCounter()* 100000 + j + i * 1000);
+           
+           obj->Add(particle);
+         }
+      }    
+  }
+  else if (idet == 3)
+    {
+      if(!fAOD)
+       AliFatal("Tracklets only available on AOD");
+      AliAODTracklets* trklets=(AliAODTracklets*)fAOD->GetTracklets();
+      if(!trklets)
+       AliFatal("AliAODTracklets not found");
+      for(Int_t itrklets=0;itrklets<trklets->GetNumberOfTracklets();itrklets++)
+       {
+         Float_t eta=-TMath::Log(TMath::Tan(trklets->GetTheta(itrklets)/2));
+         if(TMath::Abs(eta)>fTrackEtaCut)continue;
+         Float_t pT=1000*TMath::Abs(trklets->GetDeltaPhi(itrklets));//in mrad
+         if(pT>fTrackletDphiCut)continue;
+         TH1F* DphiTrklets = (TH1F*)fListOfHistos->FindObject("DphiTrklets");
+         DphiTrklets->Fill(1000*trklets->GetDeltaPhi(itrklets)); //in mrad
+         Float_t phi=trklets->GetPhi(itrklets);
+         phi+=trklets->GetDeltaPhi(itrklets)*39./34.; //correction dphi*39./34. (Dphi in rad)
+         if (phi<0) phi+=TMath::TwoPi();
+         if (phi>TMath::TwoPi()) phi-=TMath::TwoPi();
+         
+         AliDPhiBasicParticle* particle = new AliDPhiBasicParticle(eta,phi, pT, 0); // pT = TMath::Abs(trklets->GetDeltaPhi(itrklets)) in mrad and charge = 0
+         particle->SetUniqueID(fAnalyseUE->GetEventCounter()* 100000 + itrklets);
+         
+         obj->Add(particle);
+               }      
+    }
+  else if (idet == 4)
+    {
+      if(!fAOD)
+       AliFatal("Muon selection only implemented on AOD");//FIXME to be implemented also for ESDs as in AliAnalyseLeadingTrackUE::GetAcceptedPArticles
+      for (Int_t iTrack = 0; iTrack < fAOD->GetNTracks(); iTrack++) {
+       AliAODTrack* track = fAOD->GetTrack(iTrack);
+       if (!track->IsMuonTrack()) continue;
+       //Float_t dca    = track->DCA();
+       //Float_t chi2   = track->Chi2perNDF();
+       Float_t rabs   = track->GetRAtAbsorberEnd();
+       Float_t eta    = track->Eta();
+       Int_t   matching   = track->GetMatchTrigger();
+       if (rabs < 17.6 || rabs > 89.5) continue;
+       if (eta < -4 || eta > -2.5) continue;
+       if (matching < 2) continue;
+       
+       AliDPhiBasicParticle* particle = new AliDPhiBasicParticle(eta,track->Phi(), track->Pt(), track->Charge()); 
+       particle->SetUniqueID(fAnalyseUE->GetEventCounter() * 100000 + iTrack);
+       
+       obj->Add(particle);
+      }
+    }      
+  else
+    AliFatal(Form("GetParticlesFromDetector: Invalid idet value: %d", idet));
+  
+  return obj;  
+}
+
+//____________________________________________________________________
+Bool_t AliAnalysisTaskPhiCorrelations::IsMuEvent(){
+  
+  if(!fAOD)
+    AliFatal("Muon selection only implemented on AOD");//FIXME to be implemented also for ESDs as in AliAnalyseLeadingTrackUE::GetAcceptedPArticles
+  for (Int_t iTrack = 0; iTrack < fAOD->GetNTracks(); iTrack++) {
+    AliAODTrack* track = fAOD->GetTrack(iTrack);
+    if (!track->IsMuonTrack()) continue;
+    //Float_t dca    = track->DCA();
+    //Float_t chi2   = track->Chi2perNDF();
+    Float_t rabs   = track->GetRAtAbsorberEnd();
+    Float_t eta    = track->Eta();
+    Int_t   matching   = track->GetMatchTrigger();
+    if (rabs < 17.6 || rabs > 89.5) continue;
+    if (eta < -4 || eta > -2.5) continue;
+    if (matching < 2) continue;
+    return kTRUE;
+  }
+  return kFALSE;
+  
+}