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 <AliCFContainer.h>
#include <AliInputEventHandler.h>
#include <AliESDInputHandler.h>
#include <AliAODInputHandler.h>
#include <AliAnalysisManager.h>
#include <AliVEvent.h>
#include <AliTriggerAnalysis.h>
#include <AliPIDResponse.h>
#include <AliTPCPIDResponse.h>

#include "AliDielectron.h"
#include "AliDielectronHistos.h"
#include "AliDielectronCF.h"
#include "AliDielectronMC.h"
#include "AliDielectronMixingHandler.h"
#include "AliAnalysisTaskMultiDielectron.h"

ClassImp(AliAnalysisTaskMultiDielectron)

//_________________________________________________________________________________
AliAnalysisTaskMultiDielectron::AliAnalysisTaskMultiDielectron() :
  AliAnalysisTaskSE(),
	fPairArray(0x0),
  fListDielectron(),
  fListHistos(),
  fListCF(),
  fSelectPhysics(kFALSE),
  fTriggerMask(AliVEvent::kMB),
  fExcludeTriggerMask(0),
  fTriggerOnV0AND(kFALSE),
  fFiredTrigger(""),
  fFiredExclude(kFALSE),
  fRejectPileup(kFALSE),
  fBeamEnergy(-1.),
  fTriggerLogic(kAny),
  fTriggerAnalysis(0x0),
  fEventFilter(0x0),
  fEventStat(0x0)
{
  //
  // Constructor
  //
}

//_________________________________________________________________________________
AliAnalysisTaskMultiDielectron::AliAnalysisTaskMultiDielectron(const char *name) :
  AliAnalysisTaskSE(name),
  fPairArray(0x0),
  fListDielectron(),
  fListHistos(),
  fListCF(),
  fSelectPhysics(kFALSE),
  fTriggerMask(AliVEvent::kMB),
  fExcludeTriggerMask(0),
  fTriggerOnV0AND(kFALSE),
  fFiredTrigger(""),
  fFiredExclude(kFALSE),
  fRejectPileup(kFALSE),
  fBeamEnergy(-1.),
  fTriggerLogic(kAny),
  fTriggerAnalysis(0x0),
  fEventFilter(0x0),
  fEventStat(0x0)
{
  //
  // Constructor
  //
  DefineInput(0,TChain::Class());
  DefineOutput(1, TList::Class());
  DefineOutput(2, TList::Class());
  DefineOutput(3, TH1D::Class());
  fListHistos.SetName("Dielectron_Histos_Multi");
  fListCF.SetName("Dielectron_CF_Multi");
  fListDielectron.SetOwner();
  fListHistos.SetOwner();
  fListCF.SetOwner();
}

//_________________________________________________________________________________
AliAnalysisTaskMultiDielectron::~AliAnalysisTaskMultiDielectron()
{
  //
  // Destructor
  //

  //histograms and CF are owned by the dielectron framework.
  //however they are streamed to file, so in the first place the
  //lists need to be owner...
  fListHistos.SetOwner(kFALSE);
  fListCF.SetOwner(kFALSE);

  //  if(fPairArray)       { delete fPairArray;       fPairArray=0; }
  // try to reduce memory issues
  if(fEventStat)       { delete fEventStat;       fEventStat=0; }
  if(fTriggerAnalysis) { delete fTriggerAnalysis; fTriggerAnalysis=0; }
}
//_________________________________________________________________________________
void AliAnalysisTaskMultiDielectron::UserCreateOutputObjects()
{
  //
  // Add all histogram manager histogram lists to the output TList
  //

  if (!fListHistos.IsEmpty()||!fListCF.IsEmpty()) return; //already initialised

//   AliAnalysisManager *man=AliAnalysisManager::GetAnalysisManager();
//   Bool_t isESD=man->GetInputEventHandler()->IsA()==AliESDInputHandler::Class();
//   Bool_t isAOD=man->GetInputEventHandler()->IsA()==AliAODInputHandler::Class();
  
  TIter nextDie(&fListDielectron);
  AliDielectron *die=0;
  while ( (die=static_cast<AliDielectron*>(nextDie())) ){
    die->Init();
    if (die->GetHistogramList())    fListHistos.Add(const_cast<THashList*>(die->GetHistogramList()));
    if (die->GetHistogramArray())   fListHistos.Add(const_cast<TObjArray*>(die->GetHistogramArray()));
    if (die->GetQAHistArray())      fListHistos.Add(const_cast<TObjArray*>(die->GetQAHistArray()));
    if (die->GetCFManagerPair())    fListCF.Add(const_cast<AliCFContainer*>(die->GetCFManagerPair()->GetContainer()));
  }

  Int_t cuts=fListDielectron.GetEntries();
  Int_t nbins=kNbinsEvent+2*cuts;
  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");
    
    for (Int_t i=0; i<cuts; ++i){
      fEventStat->GetXaxis()->SetBinLabel((kNbinsEvent+1)+2*i,Form("#splitline{1 candidate}{%s}",fListDielectron.At(i)->GetName()));
      fEventStat->GetXaxis()->SetBinLabel((kNbinsEvent+2)+2*i,Form("#splitline{With >1 candidate}{%s}",fListDielectron.At(i)->GetName()));
    }
  }

  if (!fTriggerAnalysis) fTriggerAnalysis=new AliTriggerAnalysis;
  fTriggerAnalysis->EnableHistograms();
  fTriggerAnalysis->SetAnalyzeMC(AliDielectronMC::Instance()->HasMC());
  
  PostData(1, &fListHistos);
  PostData(2, &fListCF);
  PostData(3, fEventStat);
}

//_________________________________________________________________________________
void AliAnalysisTaskMultiDielectron::UserExec(Option_t *)
{
  //
  // Main loop. Called for every event
  //

  if (fListHistos.IsEmpty()&&fListCF.IsEmpty()) 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;
  
//   AliPIDResponse *pidRes=inputHandler->GetPIDResponse();
  if ( inputHandler->GetPIDResponse() ){
    // for the 2.76 pass2 MC private train. Together with a sigma shift of -0.169
//    pidRes->GetTPCResponse().SetSigma(4.637e-3,2.41332105409873257e+04);
    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);
   
      TString firedTriggerClasses=InputEvent()->GetFiredTriggerClasses();
      if(!fFiredTrigger.IsNull()) isSelected=(firedTriggerClasses.Contains(fFiredTrigger))^fFiredExclude;
    }
   }
 
 
  //Before physics selection
  fEventStat->Fill(kAllEvents);
  if (isSelected==0||isRejected) {
    PostData(3,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
  TIter nextDie(&fListDielectron);
  AliDielectron *die=0;
  Bool_t hasMC=AliDielectronMC::Instance()->HasMC();
  while ( (die=static_cast<AliDielectron*>(nextDie())) ){
    AliDielectronHistos *h=die->GetHistoManager();
    if (h){
      AliDielectronVarManager::SetFillMap(h->GetUsedVars());
      if (hasMC && AliDielectronMC::Instance()->ConnectMCEvent() && h->GetHistogramList()->FindObject("MCEvent_noCuts")) {
	AliDielectronVarManager::SetEvent(AliDielectronMC::Instance()->GetMCEvent());
        h->FillClass("MCEvent_noCuts",AliDielectronVarManager::kNMaxValues,AliDielectronVarManager::GetData());
      }
      if (h->GetHistogramList()->FindObject("Event_noCuts")) {
	AliDielectronVarManager::SetEvent(InputEvent());
        h->FillClass("Event_noCuts",AliDielectronVarManager::kNMaxValues,AliDielectronVarManager::GetData());
      }
    }
  }
  nextDie.Reset();
  
  //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());
  AliDielectronPair::SetBeamEnergy(InputEvent(), fBeamEnergy);
  
  //Process event in all AliDielectron instances
  //   TIter nextDie(&fListDielectron);
  //   AliDielectron *die=0;
  Bool_t sel=kFALSE;
  Int_t idie=0;
  while ( (die=static_cast<AliDielectron*>(nextDie())) ){
    if(die->DoEventProcess()) {
      sel= die->Process(InputEvent());
      // input for internal train
      if(die->DontClearArrays()) {
	fPairArray = (*(die->GetPairArraysPointer()));

      }
    }
    else {
      // internal train
      if(sel) die->Process(fPairArray);
    }

    if (die->HasCandidates()){
      Int_t ncandidates=die->GetPairArray(1)->GetEntriesFast();
      if (ncandidates==1) fEventStat->Fill((kNbinsEvent)+2*idie);
      else if (ncandidates>1) fEventStat->Fill((kNbinsEvent+1)+2*idie);
    }
    ++idie;
  }

  PostData(1, &fListHistos);
  PostData(2, &fListCF);
  PostData(3,fEventStat);
}

//_________________________________________________________________________________
void AliAnalysisTaskMultiDielectron::FinishTaskOutput()
{
  //
  // Write debug tree
  //
  TIter nextDie(&fListDielectron);
  Int_t ic=0;
  AliDielectron *die=0;
  AliDielectron *die2=0;
  fPairArray=0x0;

  // main loop
  while ( (die=static_cast<AliDielectron*>(nextDie())) ){
    ic++;

    // debug tree
    die->SaveDebugTree();

    // skip internal train tasks in main loop
    if(!die->DoEventProcess()) continue;

    // mix remaining
    AliDielectronMixingHandler *mix=die->GetMixingHandler();
    if (!mix || !mix->GetMixUncomplete()) continue;

    // loop over all pools
    for (Int_t ipool=0; ipool<mix->GetNumberOfBins(); ++ipool){
      //      printf("mix remaining %04d/%04d \n",ipool,mix->GetNumberOfBins());
      if(! mix->MixRemaining(die, ipool) ) { fPairArray=0x0;  continue; }

      fPairArray = (*(die->GetPairArraysPointer()));
      if(!fPairArray) continue;

      // loop over internal train task candidates
      for(Int_t i=ic; i<fListDielectron.GetEntries(); i++) {
	die2 = static_cast<AliDielectron*>(fListDielectron.At(i));
	// abort if tasks following are not internal wagons
	if(die2->DoEventProcess()) break;
	// fill internal train output
	die2->SetPairArraysPointer(fPairArray);
	//	printf(" --> fill internal train output %s \n",die2->GetName());
	die2->FillHistogramsFromPairArray(kTRUE);
      }
      // printf("\n\n\n===============\ncall mix in Terminate: %p (%p)\n=================\n\n",mix,die);

    }

  }

  PostData(1, &fListHistos);
  PostData(2, &fListCF);
}

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