ROOT logo
/*************************************************************************
* Copyright(c) 1998-2009, ALICE Experiment at CERN, All rights reserved. *
*                                                                        *
* Author: The ALICE Off-line Project.                                    *
* Contributors are mentioned in the code where appropriate.              *
*                                                                        *
* Permission to use, copy, modify and distribute this software and its   *
* documentation strictly for non-commercial purposes is hereby granted   *
* without fee, provided that the above copyright notice appears in all   *
* copies and that both the copyright notice and this permission notice   *
* appear in the supporting documentation. The authors make no claims     *
* about the suitability of this software for any purpose. It is          *
* provided "as is" without express or implied warranty.                  *
**************************************************************************/

///////////////////////////////////////////////////////////////////////////
//                                                                       //
//                        Basic Analysis Task                            //
//                                                                       //
///////////////////////////////////////////////////////////////////////////

#include <TChain.h>
#include <TH1D.h>
#include <AliLog.h>
#include <AliAODHandler.h>
#include <AliAODInputHandler.h>
#include <AliAnalysisManager.h>
#include <AliVEvent.h>
#include <AliTriggerAnalysis.h>
#include <AliInputEventHandler.h>
#include <AliAODInputHandler.h>
#include <AliESDInputHandler.h>

#include "AliDielectron.h"
#include "AliDielectronMC.h"
#include "AliDielectronHistos.h"
#include "AliDielectronVarManager.h"
#include "AliAnalysisTaskDielectronFilter.h"
#include "AliAODCaloCluster.h"

ClassImp(AliAnalysisTaskDielectronFilter)

//_________________________________________________________________________________
AliAnalysisTaskDielectronFilter::AliAnalysisTaskDielectronFilter() :
AliAnalysisTaskSE(),
fDielectron(0),
fSelectPhysics(kTRUE),
fTriggerMask(AliVEvent::kMB),
fExcludeTriggerMask(0),
fTriggerOnV0AND(kFALSE),
fRejectPileup(kFALSE),
fEventStat(0x0),
fTriggerLogic(kAny),
fTriggerAnalysis(0x0),
fStoreLikeSign(kFALSE),
fStoreRotatedPairs(kFALSE),
fStoreEventsWithSingleTracks(kFALSE),
fCreateNanoAOD(kFALSE),
fStoreHeader(kFALSE),
fEventFilter(0x0)
{
  //
  // Constructor
  //
}

//_________________________________________________________________________________
AliAnalysisTaskDielectronFilter::AliAnalysisTaskDielectronFilter(const char *name) :
AliAnalysisTaskSE(name),
fDielectron(0),
fSelectPhysics(kTRUE),
fTriggerMask(AliVEvent::kMB),
fExcludeTriggerMask(0),
fTriggerOnV0AND(kFALSE),
fRejectPileup(kFALSE),
fEventStat(0x0),
fTriggerLogic(kAny),
fTriggerAnalysis(0x0),
fStoreLikeSign(kFALSE),
fStoreRotatedPairs(kFALSE),
fStoreEventsWithSingleTracks(kFALSE),
fCreateNanoAOD(kFALSE),
fStoreHeader(kFALSE),
fEventFilter(0x0)
{
  //
  // Constructor
  //
  DefineInput(0,TChain::Class());
  DefineOutput(1, THashList::Class());
  DefineOutput(2, TH1D::Class());
}

//_________________________________________________________________________________
void AliAnalysisTaskDielectronFilter::Init()
{
  // Initialization
  if (fDebug > 1) AliInfo("Init() \n");
  
// require AOD handler
  AliAODHandler *aodH = (AliAODHandler*)((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
  if (!aodH) AliFatal("No AOD handler. Halting.");
    
  aodH->AddFilteredAOD("AliAOD.Dielectron.root", "DielectronEvents");
//   AddAODBranch("AliDielectronCandidates",fDielectron->GetPairArraysPointer(),"deltaAOD.Dielectron.root");
}

//_________________________________________________________________________________
void AliAnalysisTaskDielectronFilter::UserCreateOutputObjects()
{
  //
  // Initilise histograms
  //

  //require dielectron framework
  if (!fDielectron) {
    AliFatal("Dielectron framework class required. Please create and instance with proper cuts and set it via 'SetDielectron' before executing this task!!!");
    return;
  }
  if(fStoreRotatedPairs) fDielectron->SetStoreRotatedPairs(kTRUE);
  fDielectron->SetDontClearArrays(); 
  fDielectron->Init();

  Int_t nbins=kNbinsEvent+2;
  if (!fEventStat){
    fEventStat=new TH1D("hEventStat","Event statistics",nbins,0,nbins);
    fEventStat->GetXaxis()->SetBinLabel(1,"Before Phys. Sel.");
    fEventStat->GetXaxis()->SetBinLabel(2,"After Phys. Sel.");

    //default names
    fEventStat->GetXaxis()->SetBinLabel(3,"Bin3 not used");
    fEventStat->GetXaxis()->SetBinLabel(4,"Bin4 not used");
    fEventStat->GetXaxis()->SetBinLabel(5,"Bin5 not used");

    if(fTriggerOnV0AND) fEventStat->GetXaxis()->SetBinLabel(3,"V0and triggers");
    if (fEventFilter) fEventStat->GetXaxis()->SetBinLabel(4,"After Event Filter");
    if (fRejectPileup) fEventStat->GetXaxis()->SetBinLabel(5,"After Pileup rejection");

    fEventStat->GetXaxis()->SetBinLabel((kNbinsEvent+1),Form("#splitline{1 candidate}{%s}",fDielectron->GetName()));
    fEventStat->GetXaxis()->SetBinLabel((kNbinsEvent+2),Form("#splitline{With >1 candidate}{%s}",fDielectron->GetName()));
   }

Bool_t isAOD=AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()->IsA()==AliAODInputHandler::Class(); 
if(fCreateNanoAOD && isAOD){
  AliAODHandler *aodH = (AliAODHandler*)((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
  AliAODExtension *extDielectron = aodH->GetFilteredAOD("AliAOD.Dielectron.root");
   TClonesArray *nanoAODTracks = new TClonesArray("AliAODTrack",500);
   nanoAODTracks->SetName("tracks");
   extDielectron->AddBranch("TClonesArray", &nanoAODTracks);
   TClonesArray *nanoAODVertices = new TClonesArray("AliAODVertex",500);
   nanoAODVertices->SetName("vertices");
   extDielectron->AddBranch("TClonesArray", &nanoAODVertices);
   TClonesArray *nanoAODCaloCluster = new TClonesArray("AliAODCaloCluster",500);
   nanoAODCaloCluster->SetName("caloClusters");
   extDielectron->AddBranch("TClonesArray", &nanoAODCaloCluster);  
   extDielectron->GetAOD()->GetStdContent();
   }else if(fCreateNanoAOD && !isAOD){AliWarning("Filtered-Nano AODs creation works only on AODs ");  } 
  
  PostData(1, const_cast<THashList*>(fDielectron->GetHistogramList()));
  PostData(2,fEventStat);
}

//_________________________________________________________________________________
void AliAnalysisTaskDielectronFilter::UserExec(Option_t *)
{
  //
  // Main loop. Called for every event
  //
  
  if (!fDielectron) return;
  
  AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager();
  Bool_t isESD=man->GetInputEventHandler()->IsA()==AliESDInputHandler::Class();
  Bool_t isAOD=man->GetInputEventHandler()->IsA()==AliAODInputHandler::Class();

  
  AliInputEventHandler* inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler());
  if (!inputHandler) return;

  if ( inputHandler->GetPIDResponse() ){
    AliDielectronVarManager::SetPIDResponse( inputHandler->GetPIDResponse() );
  } else {
    AliFatal("This task needs the PID response attached to the input event handler!");
  }
  
  // Was event selected ?
  ULong64_t isSelected = AliVEvent::kAny;
  Bool_t isRejected = kFALSE;
  if( fSelectPhysics && inputHandler){
    if((isESD && inputHandler->GetEventSelection()) || isAOD){
      isSelected = inputHandler->IsEventSelected();
      if (fExcludeTriggerMask && (isSelected&fExcludeTriggerMask)) isRejected=kTRUE;
      if (fTriggerLogic==kAny) isSelected&=fTriggerMask;
      else if (fTriggerLogic==kExact) isSelected=((isSelected&fTriggerMask)==fTriggerMask);
    }
   }
 
  //before physics selection
  fEventStat->Fill(kAllEvents);
  if (isSelected==0||isRejected) {
    PostData(2,fEventStat);
    return;
  }
  //after physics selection
  fEventStat->Fill(kSelectedEvents);

  //V0and
  if(fTriggerOnV0AND){
  if(isESD){if (!fTriggerAnalysis->IsOfflineTriggerFired(static_cast<AliESDEvent*>(InputEvent()), AliTriggerAnalysis::kV0AND))
            return;}
  if(isAOD){if(!((static_cast<AliAODEvent*>(InputEvent()))->GetVZEROData()->GetV0ADecision() == AliVVZERO::kV0BB &&
            (static_cast<AliAODEvent*>(InputEvent()))->GetVZEROData()->GetV0CDecision() == AliVVZERO::kV0BB) )
            return;}
   }

   fEventStat->Fill(kV0andEvents);

  //Fill Event histograms before the event filter
  AliDielectronHistos *h=fDielectron->GetHistoManager();

  Double_t values[AliDielectronVarManager::kNMaxValues]={0};
  Double_t valuesMC[AliDielectronVarManager::kNMaxValues]={0};
  if(h)  AliDielectronVarManager::SetFillMap(h->GetUsedVars());
  else   AliDielectronVarManager::SetFillMap(0x0);
  AliDielectronVarManager::SetEvent(InputEvent());
  AliDielectronVarManager::Fill(InputEvent(),values);
  AliDielectronVarManager::Fill(InputEvent(),valuesMC);

  Bool_t hasMC=AliDielectronMC::Instance()->HasMC();
  if (hasMC) {
    if (AliDielectronMC::Instance()->ConnectMCEvent())
      AliDielectronVarManager::Fill(AliDielectronMC::Instance()->GetMCEvent(),valuesMC);
  }

  if (h){
    if (h->GetHistogramList()->FindObject("Event_noCuts"))
      h->FillClass("Event_noCuts",AliDielectronVarManager::kNMaxValues,values);
    if (hasMC && h->GetHistogramList()->FindObject("MCEvent_noCuts"))
      h->FillClass("Event_noCuts",AliDielectronVarManager::kNMaxValues,valuesMC);
  }

  //event filter
  if (fEventFilter) {
  if (!fEventFilter->IsSelected(InputEvent())) return;
  }
  fEventStat->Fill(kFilteredEvents);

  //pileup
  if (fRejectPileup){
  if (InputEvent()->IsPileupFromSPD(3,0.8,3.,2.,5.)) return;
  }
  fEventStat->Fill(kPileupEvents);

  //bz for AliKF
  Double_t bz = InputEvent()->GetMagneticField();
  AliKFParticle::SetField( bz );

  AliDielectronPID::SetCorrVal((Double_t)InputEvent()->GetRunNumber());
  
  fDielectron->Process(InputEvent());
  
  Bool_t hasCand = kFALSE;
  if(fStoreLikeSign) hasCand = (fDielectron->HasCandidates() || fDielectron->HasCandidatesLikeSign());
  else hasCand = (fDielectron->HasCandidates());

  if(fStoreRotatedPairs) hasCand = (hasCand || fDielectron->HasCandidatesTR());
 
  if(fStoreEventsWithSingleTracks) hasCand = (hasCand || fDielectron->GetTrackArray(0) || fDielectron->GetTrackArray(1));

  
  AliAODHandler *aodH=(AliAODHandler*)((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
  AliAODExtension *extDielectron = aodH->GetFilteredAOD("AliAOD.Dielectron.root");
  if(hasCand){
    AliAODEvent *aod = aodH->GetAOD();
    
    // reset bit for all tracks
    if(isAOD){
    for(Int_t it=0;it<aod->GetNumberOfTracks();it++){
        aod->GetTrack(it)->ResetBit(kIsReferenced);  aod->GetTrack(it)->SetUniqueID(0);
        }
    }

    //replace the references of the legs with the AOD references
    TObjArray *obj = 0x0;
    for(Int_t i=0; i < 11; i++ ){
      obj = (TObjArray*)((*(fDielectron->GetPairArraysPointer()))->UncheckedAt(i));
      if(!obj) continue;
      for(int j=0;j<obj->GetEntriesFast();j++){
        AliDielectronPair *pairObj = (AliDielectronPair*)obj->UncheckedAt(j);
        Int_t id1 = ((AliVTrack*)pairObj->GetFirstDaughterP())->GetID();
        Int_t id2 = ((AliVTrack*)pairObj->GetSecondDaughterP())->GetID();
        
        for(Int_t it=0;it<aod->GetNumberOfTracks();it++){
          if(aod->GetTrack(it)->GetID() == id1) pairObj->SetRefFirstDaughter(aod->GetTrack(it)); 
          if(aod->GetTrack(it)->GetID() == id2) pairObj->SetRefSecondDaughter(aod->GetTrack(it));
        }
      }
    }
    
    extDielectron->SelectEvent();
    Int_t ncandidates=fDielectron->GetPairArray(1)->GetEntriesFast();
    if (ncandidates==1) fEventStat->Fill((kNbinsEvent));
    else if (ncandidates>1) fEventStat->Fill((kNbinsEvent+1));
 
    //see if dielectron candidate branch exists, if not create is
    TTree *t=extDielectron->GetTree();

    if(!t->GetListOfBranches()->GetEntries() && isAOD)
      t->Branch(aod->GetList());
    
    if (!t->GetBranch("dielectrons"))
      t->Bronch("dielectrons","TObjArray",fDielectron->GetPairArraysPointer());
      
      // store positive and negative tracks
      if(fCreateNanoAOD && isAOD){
      Int_t nTracks = (fDielectron->GetTrackArray(0))->GetEntries() + (fDielectron->GetTrackArray(1))->GetEntries();
       AliAODEvent *nanoEv = extDielectron->GetAOD();
       nanoEv->GetTracks()->Clear();      
       nanoEv->GetVertices()->Clear();      
       nanoEv->GetCaloClusters()->Clear();      
       
       AliAODVertex* tmp = ((static_cast<AliAODEvent*>(InputEvent()))->GetPrimaryVertex())->CloneWithoutRefs();
       nanoEv->AddVertex(tmp);
       AliAODVertex* tmpSpd = ((static_cast<AliAODEvent*>(InputEvent()))->GetPrimaryVertexSPD())->CloneWithoutRefs();
       nanoEv->AddVertex(tmpSpd);
       nanoEv->GetVertex(0)->SetNContributors((static_cast<AliAODEvent*>(InputEvent()))->GetPrimaryVertex()->GetNContributors());
       nanoEv->GetVertex(1)->SetNContributors((static_cast<AliAODEvent*>(InputEvent()))->GetPrimaryVertexSPD()->GetNContributors());
       // set event plane 
       AliAODHeader * header = dynamic_cast<AliAODHeader*>(nanoEv->GetHeader());
       if(!header) AliFatal("Not a standard AOD");


       header->SetEventplane(((AliVAODHeader*)static_cast<AliAODEvent*>(InputEvent())->GetHeader())->GetEventplaneP());
       header->ResetEventplanePointer(); 
       // set multiplicity
       header->SetRefMultiplicity((Int_t)values[AliDielectronVarManager::kNTrk]);
       header->SetRefMultiplicityPos((Int_t)values[AliDielectronVarManager::kNacc]);
       //nanoEv->GetHeader()->SetRefMultiplicityNeg(values[AliDielectronVarManager::kMatchEffITSTPC]);

         for(int kj=0; kj<(fDielectron->GetTrackArray(0))->GetEntries(); kj++){
         Int_t posit = nanoEv->AddTrack((AliAODTrack*)fDielectron->GetTrackArray(0)->At(kj));
         Int_t posVtx = nanoEv->AddVertex(((AliAODTrack*)fDielectron->GetTrackArray(0)->At(kj))->GetProdVertex()); 
         nanoEv->GetVertex(posVtx)->ResetBit(kIsReferenced);  
         nanoEv->GetVertex(posVtx)->SetUniqueID(0);
         nanoEv->GetVertex(posVtx)->RemoveDaughters();
         nanoEv->GetTrack(posit)->ResetBit(kIsReferenced);  
         nanoEv->GetTrack(posit)->SetUniqueID(0); 
         // calo cluster
         Int_t caloIndex = ((AliAODTrack*)fDielectron->GetTrackArray(0)->At(kj))->GetEMCALcluster();
         if(caloIndex > 0 && (static_cast<AliAODEvent*>(InputEvent()))->GetCaloCluster(caloIndex)){
         Int_t posCaloCls = nanoEv->AddCaloCluster(static_cast<AliAODEvent*>(InputEvent())->GetCaloCluster(caloIndex));
         nanoEv->GetTrack(posit)->SetEMCALcluster(posCaloCls);
         AliAODCaloCluster *clCls = nanoEv->GetCaloCluster(posCaloCls);
         for(int u=0; u<clCls->GetNTracksMatched(); u++) clCls->RemoveTrackMatched(clCls->GetTrackMatched(u)); 
         nanoEv->GetCaloCluster(posCaloCls)->AddTrackMatched((AliAODTrack*)nanoEv->GetTrack(posit)); 
         }
         // set references for vtx
         AliAODTrack * trk = dynamic_cast<AliAODTrack*>(nanoEv->GetTrack(posit));
         if(!trk) AliFatal("Not a standard AOD");
         trk->SetProdVertex(nanoEv->GetVertex(posVtx));
         }

         for(int kj=0; kj<(fDielectron->GetTrackArray(1))->GetEntries(); kj++){
         Int_t negat = nanoEv->AddTrack((AliAODTrack*)fDielectron->GetTrackArray(1)->At(kj));
         Int_t negVtx = nanoEv->AddVertex(((AliAODTrack*)fDielectron->GetTrackArray(1)->At(kj))->GetProdVertex());    
         nanoEv->GetVertex(negVtx)->ResetBit(kIsReferenced);  
         nanoEv->GetVertex(negVtx)->SetUniqueID(0);
         nanoEv->GetVertex(negVtx)->RemoveDaughters();
         nanoEv->GetTrack(negat)->ResetBit(kIsReferenced);  
         nanoEv->GetTrack(negat)->SetUniqueID(0);
         // calo cluster
         Int_t caloIndex = ((AliAODTrack*)fDielectron->GetTrackArray(1)->At(kj))->GetEMCALcluster(); 
         if(caloIndex > 0 && (static_cast<AliAODEvent*>(InputEvent()))->GetCaloCluster(caloIndex)){
         Int_t negCaloCls = nanoEv->AddCaloCluster(static_cast<AliAODEvent*>(InputEvent())->GetCaloCluster(caloIndex));
         nanoEv->GetTrack(negat)->SetEMCALcluster(negCaloCls);
         AliAODCaloCluster *clCls = nanoEv->GetCaloCluster(negCaloCls); 
         for(int u=0; u<clCls->GetNTracksMatched(); u++) clCls->RemoveTrackMatched(clCls->GetTrackMatched(u));
         nanoEv->GetCaloCluster(negCaloCls)->AddTrackMatched((AliAODTrack*)nanoEv->GetTrack(negat));
         }
         AliAODTrack * trk = dynamic_cast<AliAODTrack*>(nanoEv->GetTrack(negat));
         if(!trk) AliFatal("Not a standard AOD");
         trk->SetProdVertex(nanoEv->GetVertex(negVtx)); 
         }  
        delete tmp; delete tmpSpd; 
        nanoEv->GetTracks()->Expand(nTracks); 
        nanoEv->GetVertices()->Expand(nTracks+2); 
        nanoEv->GetCaloClusters()->Expand(nanoEv->GetNumberOfCaloClusters()); 
   
    }
    if(isAOD) t->Fill();
  }
 
  if(fCreateNanoAOD && isAOD && (!hasCand) &&  fStoreHeader)  
   {
     // set event plane 
     AliAODHeader * header = dynamic_cast<AliAODHeader*>(extDielectron->GetAOD()->GetHeader());
     if(!header) AliFatal("Not a standard AOD");     
     header->SetEventplane(((AliAODHeader*)(static_cast<AliAODEvent*>(InputEvent()))->GetHeader())->GetEventplaneP());
     header->ResetEventplanePointer();
     extDielectron->GetTree()->Fill(); // fill header for all events without tracks
   }
 
  PostData(1, const_cast<THashList*>(fDielectron->GetHistogramList()));
  PostData(2,fEventStat);
  return;
}


 AliAnalysisTaskDielectronFilter.cxx:1
 AliAnalysisTaskDielectronFilter.cxx:2
 AliAnalysisTaskDielectronFilter.cxx:3
 AliAnalysisTaskDielectronFilter.cxx:4
 AliAnalysisTaskDielectronFilter.cxx:5
 AliAnalysisTaskDielectronFilter.cxx:6
 AliAnalysisTaskDielectronFilter.cxx:7
 AliAnalysisTaskDielectronFilter.cxx:8
 AliAnalysisTaskDielectronFilter.cxx:9
 AliAnalysisTaskDielectronFilter.cxx:10
 AliAnalysisTaskDielectronFilter.cxx:11
 AliAnalysisTaskDielectronFilter.cxx:12
 AliAnalysisTaskDielectronFilter.cxx:13
 AliAnalysisTaskDielectronFilter.cxx:14
 AliAnalysisTaskDielectronFilter.cxx:15
 AliAnalysisTaskDielectronFilter.cxx:16
 AliAnalysisTaskDielectronFilter.cxx:17
 AliAnalysisTaskDielectronFilter.cxx:18
 AliAnalysisTaskDielectronFilter.cxx:19
 AliAnalysisTaskDielectronFilter.cxx:20
 AliAnalysisTaskDielectronFilter.cxx:21
 AliAnalysisTaskDielectronFilter.cxx:22
 AliAnalysisTaskDielectronFilter.cxx:23
 AliAnalysisTaskDielectronFilter.cxx:24
 AliAnalysisTaskDielectronFilter.cxx:25
 AliAnalysisTaskDielectronFilter.cxx:26
 AliAnalysisTaskDielectronFilter.cxx:27
 AliAnalysisTaskDielectronFilter.cxx:28
 AliAnalysisTaskDielectronFilter.cxx:29
 AliAnalysisTaskDielectronFilter.cxx:30
 AliAnalysisTaskDielectronFilter.cxx:31
 AliAnalysisTaskDielectronFilter.cxx:32
 AliAnalysisTaskDielectronFilter.cxx:33
 AliAnalysisTaskDielectronFilter.cxx:34
 AliAnalysisTaskDielectronFilter.cxx:35
 AliAnalysisTaskDielectronFilter.cxx:36
 AliAnalysisTaskDielectronFilter.cxx:37
 AliAnalysisTaskDielectronFilter.cxx:38
 AliAnalysisTaskDielectronFilter.cxx:39
 AliAnalysisTaskDielectronFilter.cxx:40
 AliAnalysisTaskDielectronFilter.cxx:41
 AliAnalysisTaskDielectronFilter.cxx:42
 AliAnalysisTaskDielectronFilter.cxx:43
 AliAnalysisTaskDielectronFilter.cxx:44
 AliAnalysisTaskDielectronFilter.cxx:45
 AliAnalysisTaskDielectronFilter.cxx:46
 AliAnalysisTaskDielectronFilter.cxx:47
 AliAnalysisTaskDielectronFilter.cxx:48
 AliAnalysisTaskDielectronFilter.cxx:49
 AliAnalysisTaskDielectronFilter.cxx:50
 AliAnalysisTaskDielectronFilter.cxx:51
 AliAnalysisTaskDielectronFilter.cxx:52
 AliAnalysisTaskDielectronFilter.cxx:53
 AliAnalysisTaskDielectronFilter.cxx:54
 AliAnalysisTaskDielectronFilter.cxx:55
 AliAnalysisTaskDielectronFilter.cxx:56
 AliAnalysisTaskDielectronFilter.cxx:57
 AliAnalysisTaskDielectronFilter.cxx:58
 AliAnalysisTaskDielectronFilter.cxx:59
 AliAnalysisTaskDielectronFilter.cxx:60
 AliAnalysisTaskDielectronFilter.cxx:61
 AliAnalysisTaskDielectronFilter.cxx:62
 AliAnalysisTaskDielectronFilter.cxx:63
 AliAnalysisTaskDielectronFilter.cxx:64
 AliAnalysisTaskDielectronFilter.cxx:65
 AliAnalysisTaskDielectronFilter.cxx:66
 AliAnalysisTaskDielectronFilter.cxx:67
 AliAnalysisTaskDielectronFilter.cxx:68
 AliAnalysisTaskDielectronFilter.cxx:69
 AliAnalysisTaskDielectronFilter.cxx:70
 AliAnalysisTaskDielectronFilter.cxx:71
 AliAnalysisTaskDielectronFilter.cxx:72
 AliAnalysisTaskDielectronFilter.cxx:73
 AliAnalysisTaskDielectronFilter.cxx:74
 AliAnalysisTaskDielectronFilter.cxx:75
 AliAnalysisTaskDielectronFilter.cxx:76
 AliAnalysisTaskDielectronFilter.cxx:77
 AliAnalysisTaskDielectronFilter.cxx:78
 AliAnalysisTaskDielectronFilter.cxx:79
 AliAnalysisTaskDielectronFilter.cxx:80
 AliAnalysisTaskDielectronFilter.cxx:81
 AliAnalysisTaskDielectronFilter.cxx:82
 AliAnalysisTaskDielectronFilter.cxx:83
 AliAnalysisTaskDielectronFilter.cxx:84
 AliAnalysisTaskDielectronFilter.cxx:85
 AliAnalysisTaskDielectronFilter.cxx:86
 AliAnalysisTaskDielectronFilter.cxx:87
 AliAnalysisTaskDielectronFilter.cxx:88
 AliAnalysisTaskDielectronFilter.cxx:89
 AliAnalysisTaskDielectronFilter.cxx:90
 AliAnalysisTaskDielectronFilter.cxx:91
 AliAnalysisTaskDielectronFilter.cxx:92
 AliAnalysisTaskDielectronFilter.cxx:93
 AliAnalysisTaskDielectronFilter.cxx:94
 AliAnalysisTaskDielectronFilter.cxx:95
 AliAnalysisTaskDielectronFilter.cxx:96
 AliAnalysisTaskDielectronFilter.cxx:97
 AliAnalysisTaskDielectronFilter.cxx:98
 AliAnalysisTaskDielectronFilter.cxx:99
 AliAnalysisTaskDielectronFilter.cxx:100
 AliAnalysisTaskDielectronFilter.cxx:101
 AliAnalysisTaskDielectronFilter.cxx:102
 AliAnalysisTaskDielectronFilter.cxx:103
 AliAnalysisTaskDielectronFilter.cxx:104
 AliAnalysisTaskDielectronFilter.cxx:105
 AliAnalysisTaskDielectronFilter.cxx:106
 AliAnalysisTaskDielectronFilter.cxx:107
 AliAnalysisTaskDielectronFilter.cxx:108
 AliAnalysisTaskDielectronFilter.cxx:109
 AliAnalysisTaskDielectronFilter.cxx:110
 AliAnalysisTaskDielectronFilter.cxx:111
 AliAnalysisTaskDielectronFilter.cxx:112
 AliAnalysisTaskDielectronFilter.cxx:113
 AliAnalysisTaskDielectronFilter.cxx:114
 AliAnalysisTaskDielectronFilter.cxx:115
 AliAnalysisTaskDielectronFilter.cxx:116
 AliAnalysisTaskDielectronFilter.cxx:117
 AliAnalysisTaskDielectronFilter.cxx:118
 AliAnalysisTaskDielectronFilter.cxx:119
 AliAnalysisTaskDielectronFilter.cxx:120
 AliAnalysisTaskDielectronFilter.cxx:121
 AliAnalysisTaskDielectronFilter.cxx:122
 AliAnalysisTaskDielectronFilter.cxx:123
 AliAnalysisTaskDielectronFilter.cxx:124
 AliAnalysisTaskDielectronFilter.cxx:125
 AliAnalysisTaskDielectronFilter.cxx:126
 AliAnalysisTaskDielectronFilter.cxx:127
 AliAnalysisTaskDielectronFilter.cxx:128
 AliAnalysisTaskDielectronFilter.cxx:129
 AliAnalysisTaskDielectronFilter.cxx:130
 AliAnalysisTaskDielectronFilter.cxx:131
 AliAnalysisTaskDielectronFilter.cxx:132
 AliAnalysisTaskDielectronFilter.cxx:133
 AliAnalysisTaskDielectronFilter.cxx:134
 AliAnalysisTaskDielectronFilter.cxx:135
 AliAnalysisTaskDielectronFilter.cxx:136
 AliAnalysisTaskDielectronFilter.cxx:137
 AliAnalysisTaskDielectronFilter.cxx:138
 AliAnalysisTaskDielectronFilter.cxx:139
 AliAnalysisTaskDielectronFilter.cxx:140
 AliAnalysisTaskDielectronFilter.cxx:141
 AliAnalysisTaskDielectronFilter.cxx:142
 AliAnalysisTaskDielectronFilter.cxx:143
 AliAnalysisTaskDielectronFilter.cxx:144
 AliAnalysisTaskDielectronFilter.cxx:145
 AliAnalysisTaskDielectronFilter.cxx:146
 AliAnalysisTaskDielectronFilter.cxx:147
 AliAnalysisTaskDielectronFilter.cxx:148
 AliAnalysisTaskDielectronFilter.cxx:149
 AliAnalysisTaskDielectronFilter.cxx:150
 AliAnalysisTaskDielectronFilter.cxx:151
 AliAnalysisTaskDielectronFilter.cxx:152
 AliAnalysisTaskDielectronFilter.cxx:153
 AliAnalysisTaskDielectronFilter.cxx:154
 AliAnalysisTaskDielectronFilter.cxx:155
 AliAnalysisTaskDielectronFilter.cxx:156
 AliAnalysisTaskDielectronFilter.cxx:157
 AliAnalysisTaskDielectronFilter.cxx:158
 AliAnalysisTaskDielectronFilter.cxx:159
 AliAnalysisTaskDielectronFilter.cxx:160
 AliAnalysisTaskDielectronFilter.cxx:161
 AliAnalysisTaskDielectronFilter.cxx:162
 AliAnalysisTaskDielectronFilter.cxx:163
 AliAnalysisTaskDielectronFilter.cxx:164
 AliAnalysisTaskDielectronFilter.cxx:165
 AliAnalysisTaskDielectronFilter.cxx:166
 AliAnalysisTaskDielectronFilter.cxx:167
 AliAnalysisTaskDielectronFilter.cxx:168
 AliAnalysisTaskDielectronFilter.cxx:169
 AliAnalysisTaskDielectronFilter.cxx:170
 AliAnalysisTaskDielectronFilter.cxx:171
 AliAnalysisTaskDielectronFilter.cxx:172
 AliAnalysisTaskDielectronFilter.cxx:173
 AliAnalysisTaskDielectronFilter.cxx:174
 AliAnalysisTaskDielectronFilter.cxx:175
 AliAnalysisTaskDielectronFilter.cxx:176
 AliAnalysisTaskDielectronFilter.cxx:177
 AliAnalysisTaskDielectronFilter.cxx:178
 AliAnalysisTaskDielectronFilter.cxx:179
 AliAnalysisTaskDielectronFilter.cxx:180
 AliAnalysisTaskDielectronFilter.cxx:181
 AliAnalysisTaskDielectronFilter.cxx:182
 AliAnalysisTaskDielectronFilter.cxx:183
 AliAnalysisTaskDielectronFilter.cxx:184
 AliAnalysisTaskDielectronFilter.cxx:185
 AliAnalysisTaskDielectronFilter.cxx:186
 AliAnalysisTaskDielectronFilter.cxx:187
 AliAnalysisTaskDielectronFilter.cxx:188
 AliAnalysisTaskDielectronFilter.cxx:189
 AliAnalysisTaskDielectronFilter.cxx:190
 AliAnalysisTaskDielectronFilter.cxx:191
 AliAnalysisTaskDielectronFilter.cxx:192
 AliAnalysisTaskDielectronFilter.cxx:193
 AliAnalysisTaskDielectronFilter.cxx:194
 AliAnalysisTaskDielectronFilter.cxx:195
 AliAnalysisTaskDielectronFilter.cxx:196
 AliAnalysisTaskDielectronFilter.cxx:197
 AliAnalysisTaskDielectronFilter.cxx:198
 AliAnalysisTaskDielectronFilter.cxx:199
 AliAnalysisTaskDielectronFilter.cxx:200
 AliAnalysisTaskDielectronFilter.cxx:201
 AliAnalysisTaskDielectronFilter.cxx:202
 AliAnalysisTaskDielectronFilter.cxx:203
 AliAnalysisTaskDielectronFilter.cxx:204
 AliAnalysisTaskDielectronFilter.cxx:205
 AliAnalysisTaskDielectronFilter.cxx:206
 AliAnalysisTaskDielectronFilter.cxx:207
 AliAnalysisTaskDielectronFilter.cxx:208
 AliAnalysisTaskDielectronFilter.cxx:209
 AliAnalysisTaskDielectronFilter.cxx:210
 AliAnalysisTaskDielectronFilter.cxx:211
 AliAnalysisTaskDielectronFilter.cxx:212
 AliAnalysisTaskDielectronFilter.cxx:213
 AliAnalysisTaskDielectronFilter.cxx:214
 AliAnalysisTaskDielectronFilter.cxx:215
 AliAnalysisTaskDielectronFilter.cxx:216
 AliAnalysisTaskDielectronFilter.cxx:217
 AliAnalysisTaskDielectronFilter.cxx:218
 AliAnalysisTaskDielectronFilter.cxx:219
 AliAnalysisTaskDielectronFilter.cxx:220
 AliAnalysisTaskDielectronFilter.cxx:221
 AliAnalysisTaskDielectronFilter.cxx:222
 AliAnalysisTaskDielectronFilter.cxx:223
 AliAnalysisTaskDielectronFilter.cxx:224
 AliAnalysisTaskDielectronFilter.cxx:225
 AliAnalysisTaskDielectronFilter.cxx:226
 AliAnalysisTaskDielectronFilter.cxx:227
 AliAnalysisTaskDielectronFilter.cxx:228
 AliAnalysisTaskDielectronFilter.cxx:229
 AliAnalysisTaskDielectronFilter.cxx:230
 AliAnalysisTaskDielectronFilter.cxx:231
 AliAnalysisTaskDielectronFilter.cxx:232
 AliAnalysisTaskDielectronFilter.cxx:233
 AliAnalysisTaskDielectronFilter.cxx:234
 AliAnalysisTaskDielectronFilter.cxx:235
 AliAnalysisTaskDielectronFilter.cxx:236
 AliAnalysisTaskDielectronFilter.cxx:237
 AliAnalysisTaskDielectronFilter.cxx:238
 AliAnalysisTaskDielectronFilter.cxx:239
 AliAnalysisTaskDielectronFilter.cxx:240
 AliAnalysisTaskDielectronFilter.cxx:241
 AliAnalysisTaskDielectronFilter.cxx:242
 AliAnalysisTaskDielectronFilter.cxx:243
 AliAnalysisTaskDielectronFilter.cxx:244
 AliAnalysisTaskDielectronFilter.cxx:245
 AliAnalysisTaskDielectronFilter.cxx:246
 AliAnalysisTaskDielectronFilter.cxx:247
 AliAnalysisTaskDielectronFilter.cxx:248
 AliAnalysisTaskDielectronFilter.cxx:249
 AliAnalysisTaskDielectronFilter.cxx:250
 AliAnalysisTaskDielectronFilter.cxx:251
 AliAnalysisTaskDielectronFilter.cxx:252
 AliAnalysisTaskDielectronFilter.cxx:253
 AliAnalysisTaskDielectronFilter.cxx:254
 AliAnalysisTaskDielectronFilter.cxx:255
 AliAnalysisTaskDielectronFilter.cxx:256
 AliAnalysisTaskDielectronFilter.cxx:257
 AliAnalysisTaskDielectronFilter.cxx:258
 AliAnalysisTaskDielectronFilter.cxx:259
 AliAnalysisTaskDielectronFilter.cxx:260
 AliAnalysisTaskDielectronFilter.cxx:261
 AliAnalysisTaskDielectronFilter.cxx:262
 AliAnalysisTaskDielectronFilter.cxx:263
 AliAnalysisTaskDielectronFilter.cxx:264
 AliAnalysisTaskDielectronFilter.cxx:265
 AliAnalysisTaskDielectronFilter.cxx:266
 AliAnalysisTaskDielectronFilter.cxx:267
 AliAnalysisTaskDielectronFilter.cxx:268
 AliAnalysisTaskDielectronFilter.cxx:269
 AliAnalysisTaskDielectronFilter.cxx:270
 AliAnalysisTaskDielectronFilter.cxx:271
 AliAnalysisTaskDielectronFilter.cxx:272
 AliAnalysisTaskDielectronFilter.cxx:273
 AliAnalysisTaskDielectronFilter.cxx:274
 AliAnalysisTaskDielectronFilter.cxx:275
 AliAnalysisTaskDielectronFilter.cxx:276
 AliAnalysisTaskDielectronFilter.cxx:277
 AliAnalysisTaskDielectronFilter.cxx:278
 AliAnalysisTaskDielectronFilter.cxx:279
 AliAnalysisTaskDielectronFilter.cxx:280
 AliAnalysisTaskDielectronFilter.cxx:281
 AliAnalysisTaskDielectronFilter.cxx:282
 AliAnalysisTaskDielectronFilter.cxx:283
 AliAnalysisTaskDielectronFilter.cxx:284
 AliAnalysisTaskDielectronFilter.cxx:285
 AliAnalysisTaskDielectronFilter.cxx:286
 AliAnalysisTaskDielectronFilter.cxx:287
 AliAnalysisTaskDielectronFilter.cxx:288
 AliAnalysisTaskDielectronFilter.cxx:289
 AliAnalysisTaskDielectronFilter.cxx:290
 AliAnalysisTaskDielectronFilter.cxx:291
 AliAnalysisTaskDielectronFilter.cxx:292
 AliAnalysisTaskDielectronFilter.cxx:293
 AliAnalysisTaskDielectronFilter.cxx:294
 AliAnalysisTaskDielectronFilter.cxx:295
 AliAnalysisTaskDielectronFilter.cxx:296
 AliAnalysisTaskDielectronFilter.cxx:297
 AliAnalysisTaskDielectronFilter.cxx:298
 AliAnalysisTaskDielectronFilter.cxx:299
 AliAnalysisTaskDielectronFilter.cxx:300
 AliAnalysisTaskDielectronFilter.cxx:301
 AliAnalysisTaskDielectronFilter.cxx:302
 AliAnalysisTaskDielectronFilter.cxx:303
 AliAnalysisTaskDielectronFilter.cxx:304
 AliAnalysisTaskDielectronFilter.cxx:305
 AliAnalysisTaskDielectronFilter.cxx:306
 AliAnalysisTaskDielectronFilter.cxx:307
 AliAnalysisTaskDielectronFilter.cxx:308
 AliAnalysisTaskDielectronFilter.cxx:309
 AliAnalysisTaskDielectronFilter.cxx:310
 AliAnalysisTaskDielectronFilter.cxx:311
 AliAnalysisTaskDielectronFilter.cxx:312
 AliAnalysisTaskDielectronFilter.cxx:313
 AliAnalysisTaskDielectronFilter.cxx:314
 AliAnalysisTaskDielectronFilter.cxx:315
 AliAnalysisTaskDielectronFilter.cxx:316
 AliAnalysisTaskDielectronFilter.cxx:317
 AliAnalysisTaskDielectronFilter.cxx:318
 AliAnalysisTaskDielectronFilter.cxx:319
 AliAnalysisTaskDielectronFilter.cxx:320
 AliAnalysisTaskDielectronFilter.cxx:321
 AliAnalysisTaskDielectronFilter.cxx:322
 AliAnalysisTaskDielectronFilter.cxx:323
 AliAnalysisTaskDielectronFilter.cxx:324
 AliAnalysisTaskDielectronFilter.cxx:325
 AliAnalysisTaskDielectronFilter.cxx:326
 AliAnalysisTaskDielectronFilter.cxx:327
 AliAnalysisTaskDielectronFilter.cxx:328
 AliAnalysisTaskDielectronFilter.cxx:329
 AliAnalysisTaskDielectronFilter.cxx:330
 AliAnalysisTaskDielectronFilter.cxx:331
 AliAnalysisTaskDielectronFilter.cxx:332
 AliAnalysisTaskDielectronFilter.cxx:333
 AliAnalysisTaskDielectronFilter.cxx:334
 AliAnalysisTaskDielectronFilter.cxx:335
 AliAnalysisTaskDielectronFilter.cxx:336
 AliAnalysisTaskDielectronFilter.cxx:337
 AliAnalysisTaskDielectronFilter.cxx:338
 AliAnalysisTaskDielectronFilter.cxx:339
 AliAnalysisTaskDielectronFilter.cxx:340
 AliAnalysisTaskDielectronFilter.cxx:341
 AliAnalysisTaskDielectronFilter.cxx:342
 AliAnalysisTaskDielectronFilter.cxx:343
 AliAnalysisTaskDielectronFilter.cxx:344
 AliAnalysisTaskDielectronFilter.cxx:345
 AliAnalysisTaskDielectronFilter.cxx:346
 AliAnalysisTaskDielectronFilter.cxx:347
 AliAnalysisTaskDielectronFilter.cxx:348
 AliAnalysisTaskDielectronFilter.cxx:349
 AliAnalysisTaskDielectronFilter.cxx:350
 AliAnalysisTaskDielectronFilter.cxx:351
 AliAnalysisTaskDielectronFilter.cxx:352
 AliAnalysisTaskDielectronFilter.cxx:353
 AliAnalysisTaskDielectronFilter.cxx:354
 AliAnalysisTaskDielectronFilter.cxx:355
 AliAnalysisTaskDielectronFilter.cxx:356
 AliAnalysisTaskDielectronFilter.cxx:357
 AliAnalysisTaskDielectronFilter.cxx:358
 AliAnalysisTaskDielectronFilter.cxx:359
 AliAnalysisTaskDielectronFilter.cxx:360
 AliAnalysisTaskDielectronFilter.cxx:361
 AliAnalysisTaskDielectronFilter.cxx:362
 AliAnalysisTaskDielectronFilter.cxx:363
 AliAnalysisTaskDielectronFilter.cxx:364
 AliAnalysisTaskDielectronFilter.cxx:365
 AliAnalysisTaskDielectronFilter.cxx:366
 AliAnalysisTaskDielectronFilter.cxx:367
 AliAnalysisTaskDielectronFilter.cxx:368
 AliAnalysisTaskDielectronFilter.cxx:369
 AliAnalysisTaskDielectronFilter.cxx:370
 AliAnalysisTaskDielectronFilter.cxx:371
 AliAnalysisTaskDielectronFilter.cxx:372
 AliAnalysisTaskDielectronFilter.cxx:373
 AliAnalysisTaskDielectronFilter.cxx:374
 AliAnalysisTaskDielectronFilter.cxx:375
 AliAnalysisTaskDielectronFilter.cxx:376
 AliAnalysisTaskDielectronFilter.cxx:377
 AliAnalysisTaskDielectronFilter.cxx:378
 AliAnalysisTaskDielectronFilter.cxx:379
 AliAnalysisTaskDielectronFilter.cxx:380
 AliAnalysisTaskDielectronFilter.cxx:381
 AliAnalysisTaskDielectronFilter.cxx:382
 AliAnalysisTaskDielectronFilter.cxx:383
 AliAnalysisTaskDielectronFilter.cxx:384
 AliAnalysisTaskDielectronFilter.cxx:385
 AliAnalysisTaskDielectronFilter.cxx:386
 AliAnalysisTaskDielectronFilter.cxx:387
 AliAnalysisTaskDielectronFilter.cxx:388
 AliAnalysisTaskDielectronFilter.cxx:389
 AliAnalysisTaskDielectronFilter.cxx:390
 AliAnalysisTaskDielectronFilter.cxx:391
 AliAnalysisTaskDielectronFilter.cxx:392
 AliAnalysisTaskDielectronFilter.cxx:393
 AliAnalysisTaskDielectronFilter.cxx:394
 AliAnalysisTaskDielectronFilter.cxx:395
 AliAnalysisTaskDielectronFilter.cxx:396
 AliAnalysisTaskDielectronFilter.cxx:397
 AliAnalysisTaskDielectronFilter.cxx:398
 AliAnalysisTaskDielectronFilter.cxx:399
 AliAnalysisTaskDielectronFilter.cxx:400
 AliAnalysisTaskDielectronFilter.cxx:401
 AliAnalysisTaskDielectronFilter.cxx:402
 AliAnalysisTaskDielectronFilter.cxx:403
 AliAnalysisTaskDielectronFilter.cxx:404
 AliAnalysisTaskDielectronFilter.cxx:405
 AliAnalysisTaskDielectronFilter.cxx:406
 AliAnalysisTaskDielectronFilter.cxx:407
 AliAnalysisTaskDielectronFilter.cxx:408