ROOT logo
#include <TROOT.h>
#include <TChain.h>
#include <TFile.h>
#include <TList.h>
#include <TMath.h>
#include <TTree.h>
//#include <TParameter.h>

#include "AliAnalysisTaskTwoPlusOne.h"
#include "AliCFParticle.h"
#include "AliAnalyseLeadingTrackUE.h"
#include "AliTwoPlusOneContainer.h"
#include "AliUEHist.h"

#include "AliAODHandler.h"
#include "AliAODInputHandler.h"
#include "AliVParticle.h"
#include "AliCFContainer.h"

#include "AliEventPoolManager.h"


ClassImp( AliAnalysisTaskTwoPlusOne )

//________________________________________________________________________
AliAnalysisTaskTwoPlusOne::AliAnalysisTaskTwoPlusOne(const char *name)
: AliAnalysisTaskSE(name),
  fMixingTracks(10000),
  fAnalyseUE(0x0),
// pointers to UE classes
  fHistos(0x0),
// handlers and events
  fAOD(0x0),
  fPoolMgr(0x0),
  fEventCombination(0x0),
  fUsedEvents(0),
// histogram settings
  fListOfHistos(0x0), 
// event QA
  fnTracksVertex(1),  // QA tracks pointing to principal vertex (= 3 default) 
  fZVertex(7.),
  fCentralityMethod("V0M"),
// track cuts
  fTrackEtaCut(0.9),
  fTrackEtaCutMin(-1.),
  fPtMin(0.5),
  fDCAXYCut(0),
  fSharedClusterCut(-1),
  fCrossedRowsCut(-1),
  fFoundFractionCut(-1),
  fFilterBit(0xFF),
  fTrackStatus(0),
  fThreeParticleMixed(0),
  fUseEventCombination(0),
  fCustomBinning(),
  fAlpha(0.2),
  fUseLeadingPt(1)
{

  DefineOutput(1, TList::Class());
}

//________________________________________________________________________
AliAnalysisTaskTwoPlusOne::~AliAnalysisTaskTwoPlusOne()
{
    // Destructor

}

//________________________________________________________________________
void AliAnalysisTaskTwoPlusOne::UserCreateOutputObjects()
{
  // Initialize class with main algorithms, event and track selection. 
  fAnalyseUE = new AliAnalyseLeadingTrackUE();
  fAnalyseUE->SetParticleSelectionCriteria(fFilterBit, kFALSE, fTrackEtaCut, fTrackEtaCutMin, fPtMin);
  fAnalyseUE->SetDCAXYCut(fDCAXYCut);
  fAnalyseUE->SetSharedClusterCut(fSharedClusterCut);
  fAnalyseUE->SetCrossedRowsCut(fCrossedRowsCut);
  fAnalyseUE->SetFoundFractionCut(fFoundFractionCut);
  fAnalyseUE->SetTrackStatus(fTrackStatus);
  fAnalyseUE->SetDebug(fDebug); 
  fAnalyseUE->DefineESDCuts(fFilterBit);

  fListOfHistos = new TList();
  fListOfHistos->SetOwner(kTRUE); 

  fHistos = new AliTwoPlusOneContainer("AliTwoPlusOneContainer", fCustomBinning, fAlpha);
  fHistos->GetData()->SetTrackEtaCut(fTrackEtaCut);
  fHistos->SetUseLeadingPt(fUseLeadingPt);

  fListOfHistos->Add(fHistos);

  fListOfHistos->Add(new TH1F("eventStat", ";;events", 4, -0.5, 3.5));
  fListOfHistos->Add(new TH2F("mixedDist", ";centrality;tracks;events", 101, 0, 101, 200, 0, fMixingTracks * 1.5));

  PostData(1,fListOfHistos);

  // Add task configuration to output list 
  AddSettingsTree();
  
  // event mixing
  Int_t poolsize   = 1000;  // Maximum number of events, ignored in the present implemention of AliEventPoolManager
   
  Int_t nCentralityBins  = fHistos->GetData()->GetTrackHist(AliUEHist::kToward)->GetNBins(3);

  
  Double_t* centralityBins = (Double_t*) fHistos->GetData()->GetTrackHist(AliUEHist::kToward)->GetAxis(3, 0)->GetXbins()->GetArray();
  
  Int_t nZvtxBins = fHistos->GetData()->GetTrackHist(AliUEHist::kToward)->GetNBins(5);
  
  Double_t* zvtxbin = (Double_t*) fHistos->GetData()->GetTrackHist(AliUEHist::kToward)->GetAxis(5, 0)->GetXbins()->GetArray();

  fPoolMgr = new AliEventPoolManager(poolsize, fMixingTracks, nCentralityBins, centralityBins, nZvtxBins, zvtxbin);
  fPoolMgr->SetTargetValues(fMixingTracks, 0.1, 5);

  fEventCombination = new TObjArray;
}

//________________________________________________________________________
void AliAnalysisTaskTwoPlusOne::UserExec(Option_t *)
{
  // exec (per event)
  fAnalyseUE->NextEvent();

  ((TH1F*) fListOfHistos->FindObject("eventStat"))->Fill(0);

  // Support for AOD based analysis
  fAOD = dynamic_cast<AliAODEvent*> (InputEvent());

  Double_t centrality = 0;
  AliCentrality *centralityObj = 0;

  centralityObj = ((AliVAODHeader*)fAOD->GetHeader())->GetCentralityP();


 if (centralityObj)
   centrality = centralityObj->GetCentralityPercentile(fCentralityMethod);
 else
   centrality = -1;
      
  if (fAOD){
    // remove outliers
    if (centrality == 0)
      {
	if (fAOD->GetVZEROData())
	  {
	    Float_t multV0 = 0;
	    for (Int_t i=0; i<64; i++)
	      multV0 += fAOD->GetVZEROData()->GetMultiplicity(i);
	    if (multV0 < 19500)
	      {
		centrality = -1;
		AliInfo("Rejecting event due to too small V0 multiplicity");
	      }
	  }
      }
  }

  
  AliInfo(Form("Centrality is %f", centrality));


  // Vertex selection *************************************************
  if(!fAnalyseUE->VertexSelection(InputEvent(), fnTracksVertex, fZVertex)) return;

  // optimization
  if (centrality < 0)
    return;

  TObjArray* tracks = fAnalyseUE->GetAcceptedParticles(InputEvent(), 0, kTRUE, -1, kTRUE);
  // create a list of reduced objects. This speeds up processing and reduces memory consumption for the event pool
  TObjArray* tracksClone = CloneAndReduceTrackList(tracks);
  delete tracks;

  const AliVVertex* vertex = InputEvent()->GetPrimaryVertex();
  Double_t zVtx = vertex->GetZ();

  //at this point of the code the event is acctepted
  //if this run is used to add 30-50% centrality events to the multiplicity of central events this is done here, all other events are skipped. 
  if(fUseEventCombination){
    if(centrality>30&&centrality<=50){

      AddEventCombination(tracksClone);
      //do only continue if there are 4 events in the fEventCombination
      if(fUsedEvents==4)
	tracksClone = fEventCombination;
      else
	return;
    }
  }

  fHistos->FillCorrelations(centrality, zVtx, AliTwoPlusOneContainer::kSameNS, tracksClone, tracksClone, tracksClone, tracksClone, 1.0, kFALSE, kFALSE);//same event for near and away side

  fHistos->FillCorrelations(centrality, zVtx, AliTwoPlusOneContainer::k1plus1, tracksClone, tracksClone, tracksClone, tracksClone, 1.0, kTRUE, kFALSE);//get number of possible away side triggers in the trigger area and outside of it

  fHistos->FillCorrelations(centrality, zVtx, AliTwoPlusOneContainer::kBackgroundSameNS, tracksClone, tracksClone, tracksClone, tracksClone, 1.0, kFALSE, kTRUE);//background estimation for the same event

  ((TH1F*) fListOfHistos->FindObject("eventStat"))->Fill(1);
  
  // event mixing

  // 1. First get an event pool corresponding in mult (cent) and
  //    zvertex to the current event. Once initialized, the pool
  //    should contain nMix (reduced) events. This routine does not
  //    pre-scan the chain. The first several events of every chain
  //    will be skipped until the needed pools are filled to the
  //    specified depth. If the pool categories are not too rare, this
  //    should not be a problem. If they are rare, you could lose
  //    statistics.
  
  // 2. Collect the whole pool's content of tracks into one TObjArray
  //    (bgTracks), which is effectively a single background super-event.
  
  // 3. The reduced and bgTracks arrays must both be passed into
  //    FillCorrelations(). Also nMix should be passed in, so a weight
  //    of 1./nMix can be applied.
  
  AliEventPool* pool = fPoolMgr->GetEventPool(centrality, zVtx);

  if (!pool)
    AliFatal(Form("No pool found for centrality = %f, zVtx = %f", centrality, zVtx));
  if (pool->IsReady()){    
    ((TH2F*) fListOfHistos->FindObject("mixedDist"))->Fill(centrality, pool->NTracksInPool());
    Int_t nMix = pool->GetCurrentNEvents();

    ((TH1F*) fListOfHistos->FindObject("eventStat"))->Fill(2);
    
    // Fill mixed-event histos here  
    for (Int_t jMix=0; jMix<nMix; jMix++){
      TObjArray* bgTracks = pool->GetEvent(jMix);
      
      //standard mixed event
      if(!fThreeParticleMixed){
	fHistos->FillCorrelations(centrality, zVtx, AliTwoPlusOneContainer::kMixedNS, tracksClone, tracksClone, bgTracks, bgTracks, 1.0 / (2*nMix), kFALSE, kFALSE);
	fHistos->FillCorrelations(centrality, zVtx, AliTwoPlusOneContainer::kMixedNS, bgTracks, bgTracks, tracksClone, tracksClone, 1.0 / (2*nMix), kFALSE, kFALSE);
      }

      //1plus1 mixed event
      fHistos->FillCorrelations(centrality, zVtx, AliTwoPlusOneContainer::kMixed1plus1, tracksClone, tracksClone, bgTracks, bgTracks, 1.0 / (2*nMix), kTRUE, kFALSE);
      fHistos->FillCorrelations(centrality, zVtx, AliTwoPlusOneContainer::kMixed1plus1, bgTracks, bgTracks, tracksClone, tracksClone, 1.0 / (2*nMix), kTRUE, kFALSE);

      //mixed combinatorics
      fHistos->FillCorrelations(centrality, zVtx, AliTwoPlusOneContainer::kMixedCombNS, tracksClone, bgTracks, tracksClone, bgTracks, 1.0 / (2*nMix), kFALSE, kFALSE);
      fHistos->FillCorrelations(centrality, zVtx, AliTwoPlusOneContainer::kMixedCombNS, bgTracks, tracksClone, bgTracks, tracksClone, 1.0 / (2*nMix), kFALSE, kFALSE);
    }
    
    
    // use 3 particle mixed event
    if(fThreeParticleMixed && nMix>1){
      TObjArray* tracks_t2 = pool->GetEvent(0);
      for (Int_t jMix=1; jMix<nMix; jMix++){

	TObjArray* bgTracks = pool->GetEvent(jMix);

	fHistos->FillCorrelations(centrality, zVtx, AliTwoPlusOneContainer::kMixedNS, tracksClone, tracks_t2, bgTracks, bgTracks, 1.0 / (nMix-1), kFALSE, kFALSE);
      }
    }
    
    
  }

  // ownership is with the pool now
  pool->UpdatePool(tracksClone);
}

//________________________________________________________________________
void AliAnalysisTaskTwoPlusOne::Terminate(Option_t*)
{
    //terminate function is called at the end
    //can be used to draw histograms etc.
    
    
}


TObjArray* AliAnalysisTaskTwoPlusOne::CloneAndReduceTrackList(TObjArray* tracks)
{
  // clones a track list by using AliCFParticle which uses much less memory (used for event mixing)
  
  TObjArray* tracksClone = new TObjArray;
  tracksClone->SetOwner(kTRUE);
  
  for (Int_t i=0; i<tracks->GetEntriesFast(); i++)
  {
    AliVParticle* particle = (AliVParticle*) tracks->UncheckedAt(i);
    AliCFParticle* copy = new AliCFParticle(particle->Pt(), particle->Eta(), particle->Phi(), particle->Charge(), 0);
    copy->SetUniqueID(particle->GetUniqueID());
    tracksClone->Add(copy);
  }
  
  return tracksClone;
}

//____________________________________________________________________
void AliAnalysisTaskTwoPlusOne::AddEventCombination(TObjArray* tracks)
{
  //if fEventCombination was full before, clear it
  if(fUsedEvents==4){
    fEventCombination->Clear();
    fUsedEvents = 0;
  }

  for (Int_t i=0; i<tracks->GetEntriesFast(); i++)
  {
    AliCFParticle* part = (AliCFParticle*) tracks->UncheckedAt(i);
    fEventCombination->Add(part);
  }
  fUsedEvents++;
}


//____________________________________________________________________
void  AliAnalysisTaskTwoPlusOne::AddSettingsTree()
{
  //Write settings to output list
  TTree *settingsTree   = new TTree("UEAnalysisSettings","Analysis Settings in UE estimation");
  settingsTree->Branch("fnTracksVertex", &fnTracksVertex,"nTracksVertex/I");
  settingsTree->Branch("fZVertex", &fZVertex,"ZVertex/D");
  //settingsTree->Branch("fCentralityMethod", fCentralityMethod.Data(),"CentralityMethod/C");
  settingsTree->Branch("fTrackEtaCut", &fTrackEtaCut, "TrackEtaCut/D");
  settingsTree->Branch("fTrackEtaCutMin", &fTrackEtaCutMin, "TrackEtaCutMin/D");
  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("fThreeParticleMixed", &fThreeParticleMixed,"fThreeParticleMixed/I");
  settingsTree->Branch("fMixingTracks", &fMixingTracks,"MixingTracks/I");
  
  settingsTree->Fill();
  fListOfHistos->Add(settingsTree);
}  
 AliAnalysisTaskTwoPlusOne.cxx:1
 AliAnalysisTaskTwoPlusOne.cxx:2
 AliAnalysisTaskTwoPlusOne.cxx:3
 AliAnalysisTaskTwoPlusOne.cxx:4
 AliAnalysisTaskTwoPlusOne.cxx:5
 AliAnalysisTaskTwoPlusOne.cxx:6
 AliAnalysisTaskTwoPlusOne.cxx:7
 AliAnalysisTaskTwoPlusOne.cxx:8
 AliAnalysisTaskTwoPlusOne.cxx:9
 AliAnalysisTaskTwoPlusOne.cxx:10
 AliAnalysisTaskTwoPlusOne.cxx:11
 AliAnalysisTaskTwoPlusOne.cxx:12
 AliAnalysisTaskTwoPlusOne.cxx:13
 AliAnalysisTaskTwoPlusOne.cxx:14
 AliAnalysisTaskTwoPlusOne.cxx:15
 AliAnalysisTaskTwoPlusOne.cxx:16
 AliAnalysisTaskTwoPlusOne.cxx:17
 AliAnalysisTaskTwoPlusOne.cxx:18
 AliAnalysisTaskTwoPlusOne.cxx:19
 AliAnalysisTaskTwoPlusOne.cxx:20
 AliAnalysisTaskTwoPlusOne.cxx:21
 AliAnalysisTaskTwoPlusOne.cxx:22
 AliAnalysisTaskTwoPlusOne.cxx:23
 AliAnalysisTaskTwoPlusOne.cxx:24
 AliAnalysisTaskTwoPlusOne.cxx:25
 AliAnalysisTaskTwoPlusOne.cxx:26
 AliAnalysisTaskTwoPlusOne.cxx:27
 AliAnalysisTaskTwoPlusOne.cxx:28
 AliAnalysisTaskTwoPlusOne.cxx:29
 AliAnalysisTaskTwoPlusOne.cxx:30
 AliAnalysisTaskTwoPlusOne.cxx:31
 AliAnalysisTaskTwoPlusOne.cxx:32
 AliAnalysisTaskTwoPlusOne.cxx:33
 AliAnalysisTaskTwoPlusOne.cxx:34
 AliAnalysisTaskTwoPlusOne.cxx:35
 AliAnalysisTaskTwoPlusOne.cxx:36
 AliAnalysisTaskTwoPlusOne.cxx:37
 AliAnalysisTaskTwoPlusOne.cxx:38
 AliAnalysisTaskTwoPlusOne.cxx:39
 AliAnalysisTaskTwoPlusOne.cxx:40
 AliAnalysisTaskTwoPlusOne.cxx:41
 AliAnalysisTaskTwoPlusOne.cxx:42
 AliAnalysisTaskTwoPlusOne.cxx:43
 AliAnalysisTaskTwoPlusOne.cxx:44
 AliAnalysisTaskTwoPlusOne.cxx:45
 AliAnalysisTaskTwoPlusOne.cxx:46
 AliAnalysisTaskTwoPlusOne.cxx:47
 AliAnalysisTaskTwoPlusOne.cxx:48
 AliAnalysisTaskTwoPlusOne.cxx:49
 AliAnalysisTaskTwoPlusOne.cxx:50
 AliAnalysisTaskTwoPlusOne.cxx:51
 AliAnalysisTaskTwoPlusOne.cxx:52
 AliAnalysisTaskTwoPlusOne.cxx:53
 AliAnalysisTaskTwoPlusOne.cxx:54
 AliAnalysisTaskTwoPlusOne.cxx:55
 AliAnalysisTaskTwoPlusOne.cxx:56
 AliAnalysisTaskTwoPlusOne.cxx:57
 AliAnalysisTaskTwoPlusOne.cxx:58
 AliAnalysisTaskTwoPlusOne.cxx:59
 AliAnalysisTaskTwoPlusOne.cxx:60
 AliAnalysisTaskTwoPlusOne.cxx:61
 AliAnalysisTaskTwoPlusOne.cxx:62
 AliAnalysisTaskTwoPlusOne.cxx:63
 AliAnalysisTaskTwoPlusOne.cxx:64
 AliAnalysisTaskTwoPlusOne.cxx:65
 AliAnalysisTaskTwoPlusOne.cxx:66
 AliAnalysisTaskTwoPlusOne.cxx:67
 AliAnalysisTaskTwoPlusOne.cxx:68
 AliAnalysisTaskTwoPlusOne.cxx:69
 AliAnalysisTaskTwoPlusOne.cxx:70
 AliAnalysisTaskTwoPlusOne.cxx:71
 AliAnalysisTaskTwoPlusOne.cxx:72
 AliAnalysisTaskTwoPlusOne.cxx:73
 AliAnalysisTaskTwoPlusOne.cxx:74
 AliAnalysisTaskTwoPlusOne.cxx:75
 AliAnalysisTaskTwoPlusOne.cxx:76
 AliAnalysisTaskTwoPlusOne.cxx:77
 AliAnalysisTaskTwoPlusOne.cxx:78
 AliAnalysisTaskTwoPlusOne.cxx:79
 AliAnalysisTaskTwoPlusOne.cxx:80
 AliAnalysisTaskTwoPlusOne.cxx:81
 AliAnalysisTaskTwoPlusOne.cxx:82
 AliAnalysisTaskTwoPlusOne.cxx:83
 AliAnalysisTaskTwoPlusOne.cxx:84
 AliAnalysisTaskTwoPlusOne.cxx:85
 AliAnalysisTaskTwoPlusOne.cxx:86
 AliAnalysisTaskTwoPlusOne.cxx:87
 AliAnalysisTaskTwoPlusOne.cxx:88
 AliAnalysisTaskTwoPlusOne.cxx:89
 AliAnalysisTaskTwoPlusOne.cxx:90
 AliAnalysisTaskTwoPlusOne.cxx:91
 AliAnalysisTaskTwoPlusOne.cxx:92
 AliAnalysisTaskTwoPlusOne.cxx:93
 AliAnalysisTaskTwoPlusOne.cxx:94
 AliAnalysisTaskTwoPlusOne.cxx:95
 AliAnalysisTaskTwoPlusOne.cxx:96
 AliAnalysisTaskTwoPlusOne.cxx:97
 AliAnalysisTaskTwoPlusOne.cxx:98
 AliAnalysisTaskTwoPlusOne.cxx:99
 AliAnalysisTaskTwoPlusOne.cxx:100
 AliAnalysisTaskTwoPlusOne.cxx:101
 AliAnalysisTaskTwoPlusOne.cxx:102
 AliAnalysisTaskTwoPlusOne.cxx:103
 AliAnalysisTaskTwoPlusOne.cxx:104
 AliAnalysisTaskTwoPlusOne.cxx:105
 AliAnalysisTaskTwoPlusOne.cxx:106
 AliAnalysisTaskTwoPlusOne.cxx:107
 AliAnalysisTaskTwoPlusOne.cxx:108
 AliAnalysisTaskTwoPlusOne.cxx:109
 AliAnalysisTaskTwoPlusOne.cxx:110
 AliAnalysisTaskTwoPlusOne.cxx:111
 AliAnalysisTaskTwoPlusOne.cxx:112
 AliAnalysisTaskTwoPlusOne.cxx:113
 AliAnalysisTaskTwoPlusOne.cxx:114
 AliAnalysisTaskTwoPlusOne.cxx:115
 AliAnalysisTaskTwoPlusOne.cxx:116
 AliAnalysisTaskTwoPlusOne.cxx:117
 AliAnalysisTaskTwoPlusOne.cxx:118
 AliAnalysisTaskTwoPlusOne.cxx:119
 AliAnalysisTaskTwoPlusOne.cxx:120
 AliAnalysisTaskTwoPlusOne.cxx:121
 AliAnalysisTaskTwoPlusOne.cxx:122
 AliAnalysisTaskTwoPlusOne.cxx:123
 AliAnalysisTaskTwoPlusOne.cxx:124
 AliAnalysisTaskTwoPlusOne.cxx:125
 AliAnalysisTaskTwoPlusOne.cxx:126
 AliAnalysisTaskTwoPlusOne.cxx:127
 AliAnalysisTaskTwoPlusOne.cxx:128
 AliAnalysisTaskTwoPlusOne.cxx:129
 AliAnalysisTaskTwoPlusOne.cxx:130
 AliAnalysisTaskTwoPlusOne.cxx:131
 AliAnalysisTaskTwoPlusOne.cxx:132
 AliAnalysisTaskTwoPlusOne.cxx:133
 AliAnalysisTaskTwoPlusOne.cxx:134
 AliAnalysisTaskTwoPlusOne.cxx:135
 AliAnalysisTaskTwoPlusOne.cxx:136
 AliAnalysisTaskTwoPlusOne.cxx:137
 AliAnalysisTaskTwoPlusOne.cxx:138
 AliAnalysisTaskTwoPlusOne.cxx:139
 AliAnalysisTaskTwoPlusOne.cxx:140
 AliAnalysisTaskTwoPlusOne.cxx:141
 AliAnalysisTaskTwoPlusOne.cxx:142
 AliAnalysisTaskTwoPlusOne.cxx:143
 AliAnalysisTaskTwoPlusOne.cxx:144
 AliAnalysisTaskTwoPlusOne.cxx:145
 AliAnalysisTaskTwoPlusOne.cxx:146
 AliAnalysisTaskTwoPlusOne.cxx:147
 AliAnalysisTaskTwoPlusOne.cxx:148
 AliAnalysisTaskTwoPlusOne.cxx:149
 AliAnalysisTaskTwoPlusOne.cxx:150
 AliAnalysisTaskTwoPlusOne.cxx:151
 AliAnalysisTaskTwoPlusOne.cxx:152
 AliAnalysisTaskTwoPlusOne.cxx:153
 AliAnalysisTaskTwoPlusOne.cxx:154
 AliAnalysisTaskTwoPlusOne.cxx:155
 AliAnalysisTaskTwoPlusOne.cxx:156
 AliAnalysisTaskTwoPlusOne.cxx:157
 AliAnalysisTaskTwoPlusOne.cxx:158
 AliAnalysisTaskTwoPlusOne.cxx:159
 AliAnalysisTaskTwoPlusOne.cxx:160
 AliAnalysisTaskTwoPlusOne.cxx:161
 AliAnalysisTaskTwoPlusOne.cxx:162
 AliAnalysisTaskTwoPlusOne.cxx:163
 AliAnalysisTaskTwoPlusOne.cxx:164
 AliAnalysisTaskTwoPlusOne.cxx:165
 AliAnalysisTaskTwoPlusOne.cxx:166
 AliAnalysisTaskTwoPlusOne.cxx:167
 AliAnalysisTaskTwoPlusOne.cxx:168
 AliAnalysisTaskTwoPlusOne.cxx:169
 AliAnalysisTaskTwoPlusOne.cxx:170
 AliAnalysisTaskTwoPlusOne.cxx:171
 AliAnalysisTaskTwoPlusOne.cxx:172
 AliAnalysisTaskTwoPlusOne.cxx:173
 AliAnalysisTaskTwoPlusOne.cxx:174
 AliAnalysisTaskTwoPlusOne.cxx:175
 AliAnalysisTaskTwoPlusOne.cxx:176
 AliAnalysisTaskTwoPlusOne.cxx:177
 AliAnalysisTaskTwoPlusOne.cxx:178
 AliAnalysisTaskTwoPlusOne.cxx:179
 AliAnalysisTaskTwoPlusOne.cxx:180
 AliAnalysisTaskTwoPlusOne.cxx:181
 AliAnalysisTaskTwoPlusOne.cxx:182
 AliAnalysisTaskTwoPlusOne.cxx:183
 AliAnalysisTaskTwoPlusOne.cxx:184
 AliAnalysisTaskTwoPlusOne.cxx:185
 AliAnalysisTaskTwoPlusOne.cxx:186
 AliAnalysisTaskTwoPlusOne.cxx:187
 AliAnalysisTaskTwoPlusOne.cxx:188
 AliAnalysisTaskTwoPlusOne.cxx:189
 AliAnalysisTaskTwoPlusOne.cxx:190
 AliAnalysisTaskTwoPlusOne.cxx:191
 AliAnalysisTaskTwoPlusOne.cxx:192
 AliAnalysisTaskTwoPlusOne.cxx:193
 AliAnalysisTaskTwoPlusOne.cxx:194
 AliAnalysisTaskTwoPlusOne.cxx:195
 AliAnalysisTaskTwoPlusOne.cxx:196
 AliAnalysisTaskTwoPlusOne.cxx:197
 AliAnalysisTaskTwoPlusOne.cxx:198
 AliAnalysisTaskTwoPlusOne.cxx:199
 AliAnalysisTaskTwoPlusOne.cxx:200
 AliAnalysisTaskTwoPlusOne.cxx:201
 AliAnalysisTaskTwoPlusOne.cxx:202
 AliAnalysisTaskTwoPlusOne.cxx:203
 AliAnalysisTaskTwoPlusOne.cxx:204
 AliAnalysisTaskTwoPlusOne.cxx:205
 AliAnalysisTaskTwoPlusOne.cxx:206
 AliAnalysisTaskTwoPlusOne.cxx:207
 AliAnalysisTaskTwoPlusOne.cxx:208
 AliAnalysisTaskTwoPlusOne.cxx:209
 AliAnalysisTaskTwoPlusOne.cxx:210
 AliAnalysisTaskTwoPlusOne.cxx:211
 AliAnalysisTaskTwoPlusOne.cxx:212
 AliAnalysisTaskTwoPlusOne.cxx:213
 AliAnalysisTaskTwoPlusOne.cxx:214
 AliAnalysisTaskTwoPlusOne.cxx:215
 AliAnalysisTaskTwoPlusOne.cxx:216
 AliAnalysisTaskTwoPlusOne.cxx:217
 AliAnalysisTaskTwoPlusOne.cxx:218
 AliAnalysisTaskTwoPlusOne.cxx:219
 AliAnalysisTaskTwoPlusOne.cxx:220
 AliAnalysisTaskTwoPlusOne.cxx:221
 AliAnalysisTaskTwoPlusOne.cxx:222
 AliAnalysisTaskTwoPlusOne.cxx:223
 AliAnalysisTaskTwoPlusOne.cxx:224
 AliAnalysisTaskTwoPlusOne.cxx:225
 AliAnalysisTaskTwoPlusOne.cxx:226
 AliAnalysisTaskTwoPlusOne.cxx:227
 AliAnalysisTaskTwoPlusOne.cxx:228
 AliAnalysisTaskTwoPlusOne.cxx:229
 AliAnalysisTaskTwoPlusOne.cxx:230
 AliAnalysisTaskTwoPlusOne.cxx:231
 AliAnalysisTaskTwoPlusOne.cxx:232
 AliAnalysisTaskTwoPlusOne.cxx:233
 AliAnalysisTaskTwoPlusOne.cxx:234
 AliAnalysisTaskTwoPlusOne.cxx:235
 AliAnalysisTaskTwoPlusOne.cxx:236
 AliAnalysisTaskTwoPlusOne.cxx:237
 AliAnalysisTaskTwoPlusOne.cxx:238
 AliAnalysisTaskTwoPlusOne.cxx:239
 AliAnalysisTaskTwoPlusOne.cxx:240
 AliAnalysisTaskTwoPlusOne.cxx:241
 AliAnalysisTaskTwoPlusOne.cxx:242
 AliAnalysisTaskTwoPlusOne.cxx:243
 AliAnalysisTaskTwoPlusOne.cxx:244
 AliAnalysisTaskTwoPlusOne.cxx:245
 AliAnalysisTaskTwoPlusOne.cxx:246
 AliAnalysisTaskTwoPlusOne.cxx:247
 AliAnalysisTaskTwoPlusOne.cxx:248
 AliAnalysisTaskTwoPlusOne.cxx:249
 AliAnalysisTaskTwoPlusOne.cxx:250
 AliAnalysisTaskTwoPlusOne.cxx:251
 AliAnalysisTaskTwoPlusOne.cxx:252
 AliAnalysisTaskTwoPlusOne.cxx:253
 AliAnalysisTaskTwoPlusOne.cxx:254
 AliAnalysisTaskTwoPlusOne.cxx:255
 AliAnalysisTaskTwoPlusOne.cxx:256
 AliAnalysisTaskTwoPlusOne.cxx:257
 AliAnalysisTaskTwoPlusOne.cxx:258
 AliAnalysisTaskTwoPlusOne.cxx:259
 AliAnalysisTaskTwoPlusOne.cxx:260
 AliAnalysisTaskTwoPlusOne.cxx:261
 AliAnalysisTaskTwoPlusOne.cxx:262
 AliAnalysisTaskTwoPlusOne.cxx:263
 AliAnalysisTaskTwoPlusOne.cxx:264
 AliAnalysisTaskTwoPlusOne.cxx:265
 AliAnalysisTaskTwoPlusOne.cxx:266
 AliAnalysisTaskTwoPlusOne.cxx:267
 AliAnalysisTaskTwoPlusOne.cxx:268
 AliAnalysisTaskTwoPlusOne.cxx:269
 AliAnalysisTaskTwoPlusOne.cxx:270
 AliAnalysisTaskTwoPlusOne.cxx:271
 AliAnalysisTaskTwoPlusOne.cxx:272
 AliAnalysisTaskTwoPlusOne.cxx:273
 AliAnalysisTaskTwoPlusOne.cxx:274
 AliAnalysisTaskTwoPlusOne.cxx:275
 AliAnalysisTaskTwoPlusOne.cxx:276
 AliAnalysisTaskTwoPlusOne.cxx:277
 AliAnalysisTaskTwoPlusOne.cxx:278
 AliAnalysisTaskTwoPlusOne.cxx:279
 AliAnalysisTaskTwoPlusOne.cxx:280
 AliAnalysisTaskTwoPlusOne.cxx:281
 AliAnalysisTaskTwoPlusOne.cxx:282
 AliAnalysisTaskTwoPlusOne.cxx:283
 AliAnalysisTaskTwoPlusOne.cxx:284
 AliAnalysisTaskTwoPlusOne.cxx:285
 AliAnalysisTaskTwoPlusOne.cxx:286
 AliAnalysisTaskTwoPlusOne.cxx:287
 AliAnalysisTaskTwoPlusOne.cxx:288
 AliAnalysisTaskTwoPlusOne.cxx:289
 AliAnalysisTaskTwoPlusOne.cxx:290
 AliAnalysisTaskTwoPlusOne.cxx:291
 AliAnalysisTaskTwoPlusOne.cxx:292
 AliAnalysisTaskTwoPlusOne.cxx:293
 AliAnalysisTaskTwoPlusOne.cxx:294
 AliAnalysisTaskTwoPlusOne.cxx:295
 AliAnalysisTaskTwoPlusOne.cxx:296
 AliAnalysisTaskTwoPlusOne.cxx:297
 AliAnalysisTaskTwoPlusOne.cxx:298
 AliAnalysisTaskTwoPlusOne.cxx:299
 AliAnalysisTaskTwoPlusOne.cxx:300
 AliAnalysisTaskTwoPlusOne.cxx:301
 AliAnalysisTaskTwoPlusOne.cxx:302
 AliAnalysisTaskTwoPlusOne.cxx:303
 AliAnalysisTaskTwoPlusOne.cxx:304
 AliAnalysisTaskTwoPlusOne.cxx:305
 AliAnalysisTaskTwoPlusOne.cxx:306
 AliAnalysisTaskTwoPlusOne.cxx:307
 AliAnalysisTaskTwoPlusOne.cxx:308
 AliAnalysisTaskTwoPlusOne.cxx:309
 AliAnalysisTaskTwoPlusOne.cxx:310
 AliAnalysisTaskTwoPlusOne.cxx:311
 AliAnalysisTaskTwoPlusOne.cxx:312
 AliAnalysisTaskTwoPlusOne.cxx:313
 AliAnalysisTaskTwoPlusOne.cxx:314
 AliAnalysisTaskTwoPlusOne.cxx:315
 AliAnalysisTaskTwoPlusOne.cxx:316
 AliAnalysisTaskTwoPlusOne.cxx:317
 AliAnalysisTaskTwoPlusOne.cxx:318
 AliAnalysisTaskTwoPlusOne.cxx:319
 AliAnalysisTaskTwoPlusOne.cxx:320
 AliAnalysisTaskTwoPlusOne.cxx:321
 AliAnalysisTaskTwoPlusOne.cxx:322
 AliAnalysisTaskTwoPlusOne.cxx:323
 AliAnalysisTaskTwoPlusOne.cxx:324
 AliAnalysisTaskTwoPlusOne.cxx:325
 AliAnalysisTaskTwoPlusOne.cxx:326
 AliAnalysisTaskTwoPlusOne.cxx:327
 AliAnalysisTaskTwoPlusOne.cxx:328
 AliAnalysisTaskTwoPlusOne.cxx:329
 AliAnalysisTaskTwoPlusOne.cxx:330
 AliAnalysisTaskTwoPlusOne.cxx:331
 AliAnalysisTaskTwoPlusOne.cxx:332
 AliAnalysisTaskTwoPlusOne.cxx:333