ROOT logo

/**************************************************************************
 * Copyright(c) 1998-1999, 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.                  *
 **************************************************************************/
/* $Id$ */

//
//-----------------------------------------------------------------------------
/// \class AliAnalysisTaskNorm
/// Analysis task for muon trigger normalization
/// The output is a list of histograms and collections of counters.
/// The macro class can run on AODs or ESDs.
///
/// \author Cynthia Hadjidakis
//-----------------------------------------------------------------------------

#include "Riostream.h"

//ROOT includes
#include "TChain.h"
#include "TGraph.h"

//STEERBase includes
#include "AliVEvent.h"

//STEER includes
#include "AliAODEvent.h"
#include "AliESDEvent.h"
#include "AliInputEventHandler.h"
#include "AliCentrality.h"
#include "AliAODTracklets.h"
#include "AliCounterCollection.h"
#include "AliTriggerConfiguration.h"

//ANALYSIS includes
#include "AliAnalysisManager.h"
#include "AliAnalysisUtils.h"

//PWGmuon include
#include "AliMuonEventCuts.h"

//PWGmuondep include
#include "AliAnalysisTriggerScalers.h"

#include "AliAnalysisTaskNorm.h"

using std::cout;
using std::endl;

ClassImp(AliAnalysisTaskNorm)

//________________________________________________________________________
AliAnalysisTaskNorm::AliAnalysisTaskNorm(const char *name) // All data members should be initialised here
  : AliAnalysisTaskSE(name),
    fRunCounters(0x0),
    fEventCounters(0x0),
    fListVertex(0x0),
    fListV0A(0x0),
    fListZN(0x0),
    fIsESD(kFALSE),
    fIsMC(kFALSE),
    fBeamConf(0),
    fMuonEventCuts(new AliMuonEventCuts("stdEventCuts","stdEventCuts")),
    fSCentEst(0x0), 
    fCentBin(0),
    fSCentBin(0x0),
    fTrackletsBin(0),
    fSTrackletsBin(0x0),
    fV0AMultBin(0),
    fSV0AMultBin(0x0)
{
   // Constructor
   // Define input and output slots here (never in the dummy constructor)
   // Input slot #0 works with a TChain - it is connected to the default input container
  DefineInput(0, TChain::Class());
  // Output slot #1 writes into a AliCounterCollection
  DefineOutput(1, AliCounterCollection::Class()); 
  // Output slot #2 writes into a AliCounterCollection
  DefineOutput(2, AliCounterCollection::Class()); 
  // Output slot #3 writes into a TObjArray
  DefineOutput(3, TObjArray::Class()); 
  // Output slot #4 writes into a TObjArray
  DefineOutput(4, TObjArray::Class()); 
  // Output slot #5 writes into a TObjArray
  DefineOutput(5, TObjArray::Class()); 

}

//_____________________________________________________________________________
AliAnalysisTaskNorm::~AliAnalysisTaskNorm()
{
  // Destructor. Clean-up the output list, but not the histograms that are put inside
  // (the list is owner and will clean-up these histograms). Protect in PROOF case.
  if ( !AliAnalysisManager::GetAnalysisManager()->IsProofMode() ) {
    if (fEventCounters) delete fEventCounters;   
    if (fRunCounters) delete fRunCounters;   
    if (fListVertex) delete fListVertex;
    if (fListV0A) delete fListV0A;
    if (fListZN) delete fListZN;
  }

  if (fSCentEst) delete fSCentEst;
  if (fSCentBin) delete fSCentBin;
  if (fSTrackletsBin) delete fSTrackletsBin;
  if (fSV0AMultBin) delete fSV0AMultBin;

  delete fMuonEventCuts;    
}

//_____________________________________________________________________________
void AliAnalysisTaskNorm::UserCreateOutputObjects()
{

  //initialize centrality bins and estimators
  TString centEst[] = {"CL1","V0A","ZN","any"};//,"V0C","ZNA","ZNC"};//,"ZNA","ZNC","ZPA","ZPC"};
  Int_t nCentEst = sizeof(centEst)/sizeof(centEst[0]);
  TString listOfCentEst = "";

  fSCentEst = new TObjArray(nCentEst);
  fSCentEst->SetOwner(kTRUE);
  for (Int_t iCentEst = 0; iCentEst < nCentEst; iCentEst++) {
    TObjString *obj = new TObjString(centEst[iCentEst].Data());
    fSCentEst->AddAt(obj,iCentEst);
    listOfCentEst += Form("%s",centEst[iCentEst].Data());
    if ( iCentEst < nCentEst - 1 ) listOfCentEst += Form("/");
  }

  Int_t centTabBin[] = {0,1,5,10,20,40,60,80,100};
  Int_t nCentBin = sizeof(centTabBin)/sizeof(centTabBin[0]);
  nCentBin -= 1;
  fCentBin.Set(nCentBin+1, centTabBin);

  fSCentBin = new TObjArray(nCentBin);
  fSCentBin->SetOwner(kTRUE);

  Int_t min = 0 , max = 0;
  for ( Int_t iBin = 0; iBin < nCentBin+1; iBin++ ) {
    max = (Int_t)centTabBin[iBin];
    if ( iBin >= 1 ) {
      TObjString *sobj = new TObjString(Form("%d-%d",min,max));
      fSCentBin->AddAt(sobj,iBin-1);
    }
    min = (Int_t) centTabBin[iBin];
  }

  TString listOfCentBin = "";
  for (Int_t iBin = 0; iBin < nCentBin; iBin++) {
    TObjString *obj = (TObjString*) fSCentBin->At(iBin);
    if(obj) {
      listOfCentBin += Form("%s/",(obj->GetString()).Data());
    }
  }
  listOfCentBin += "other/";
  listOfCentBin += "any";

 
  //  Int_t trTabBin[] = {0,1,30,42,56,72,300};
  Int_t trTabBin[] = {0,1,15,30,35,40,45,50,60,70,100,300};
  Int_t nTrBin = sizeof(trTabBin)/sizeof(trTabBin[0]);
  nTrBin -= 1;
  fTrackletsBin.Set(nTrBin+1,trTabBin);

  fSTrackletsBin = new TObjArray(nTrBin);
  fSTrackletsBin->SetOwner(kTRUE);

  min = max = 0;
  for ( Int_t iBin = 0; iBin < nTrBin+1; iBin++ ) {
    max = trTabBin[iBin];
    if ( iBin >= 1 ) {
      TObjString *sobj = new TObjString(Form("%d-%d",min,max));
      fSTrackletsBin->AddAt(sobj,iBin-1);
    }
    min = trTabBin[iBin];
  }
  TString listOfTrackletsBin = "";
  for (Int_t iBin = 0; iBin < nTrBin; iBin++) {
    TObjString *obj = (TObjString*) fSTrackletsBin->At(iBin);
    if(obj) {
      listOfTrackletsBin += Form("%s/",(obj->GetString()).Data());
    }
  }
  listOfTrackletsBin += "other";

  // printf("%s\n",listOfTrackletsBin.Data());
  Int_t v0AMultTabBin[] = {0,15,40,80,140,200,280,400,500,700};
  Int_t nV0AMultBin = sizeof(v0AMultTabBin)/sizeof(v0AMultTabBin[0]);
  nV0AMultBin -= 1;
  fV0AMultBin.Set(nV0AMultBin+1,v0AMultTabBin);

  fSV0AMultBin = new TObjArray(nV0AMultBin);
  fSV0AMultBin->SetOwner(kTRUE);

  min = max = 0;
  for ( Int_t iBin = 0; iBin < nV0AMultBin+1; iBin++ ) {
    max = v0AMultTabBin[iBin];
    if ( iBin >= 1 ) {
      TObjString *sobj = new TObjString(Form("%d-%d",min,max));
      fSV0AMultBin->AddAt(sobj,iBin-1);
    }
    min = v0AMultTabBin[iBin];
  }
  TString listOfV0AMultBin = "";
  for (Int_t iBin = 0; iBin < nV0AMultBin; iBin++) {
    TObjString *obj = (TObjString*) fSV0AMultBin->At(iBin);
    if(obj) {
      listOfV0AMultBin += Form("%s/",(obj->GetString()).Data());
    }
  }
  listOfV0AMultBin += "other";

  //  printf("%s\n",listOfV0AMultBin.Data());

  //create event counters
  fEventCounters = new AliCounterCollection("eventCounters");
  fEventCounters->AddRubric("run",1000000);
  fEventCounters->AddRubric("trigger",1000000);
  fEventCounters->AddRubric("norm", "MBinMB/MSLinMSL/MULinMUL/MSLinMB/MULinMSL/MULinMB/other/any");
  fEventCounters->AddRubric("physsel", "yes/no");
  fEventCounters->AddRubric("isspdpu", "n3d6/n3d8/n4d6/n4d8/n5d6/n5d8/n6d6/n6d8/multbinstd/mv/any");
  //  fEventCounters->AddRubric("ntracklets",listOfTrackletsBin.Data());
  //fEventCounters->AddRubric("v0amult",listOfV0AMultBin.Data());
  //  fEventCounters->AddRubric("outofbunchpileup", "yes/no");
  //  fEventCounters->AddRubric("spdpu", "yes/no");
  fEventCounters->AddRubric("centest",listOfCentEst.Data());
  fEventCounters->AddRubric("centbin", listOfCentBin.Data());
  fEventCounters->AddRubric("vertex", "yes/no");
  fEventCounters->AddRubric("vertexcut", "abszb10/zbm10/zap10");

  fEventCounters->Init();

  //create run counters
  fRunCounters = new AliCounterCollection("runCounters");
  fRunCounters->AddRubric("run",1000000);
  //  fRunCounters->AddRubric("L0b",1000000);
  fRunCounters->AddRubric("l0brate",1000000);
  fRunCounters->AddRubric("l2a",1000000);
  fRunCounters->AddRubric("ncoll",1000000);
  fRunCounters->AddRubric("trigger",1000000);

  fRunCounters->Init();
  
  //histograms for vertex
  fListVertex = new TObjArray(2000);
  fListVertex->SetOwner();

  Float_t zrange = 50;
  Int_t nzbin = 1000, ncbin=150;
  Int_t npileup=20;

  TH1F* hVZMB = new TH1F("hVZMB"," primary vertex z (cm) for MB trigger",nzbin,-zrange,zrange);
  fListVertex->AddAtAndExpand(hVZMB, kVZMB);
  TH1F* hPileupVZMB = new TH1F("hPileupVZMB"," pile-up vertices z (cm) for MB trigger",nzbin,-zrange,zrange);
  fListVertex->AddAtAndExpand(hPileupVZMB, kPileupVZMB);
  TH1F* hVnMB = new TH1F("hVnMB"," number of vertex contributors for MB trigger",ncbin,0,ncbin);
  fListVertex->AddAtAndExpand(hVnMB, kVnCMB);
  TH1F* hNPileupMB = new TH1F("hNPileupMB"," number of pileup vertices for MB trigger",npileup,0,npileup);
  fListVertex->AddAtAndExpand(hNPileupMB, kNPileupMB);
  TH1F* hPileupVnMB = new TH1F("hPileupVnMB"," number of pileup vertices contributors for MB trigger",ncbin,0,ncbin);
  fListVertex->AddAtAndExpand(hPileupVnMB, kPileupnCMB);
  TH1F* hDeltaZMB = new TH1F("hDeltaZMB"," distance between primary vertex z and secondary vertices (cm) for MB trigger",nzbin,-zrange,zrange);
  fListVertex->AddAtAndExpand(hDeltaZMB, kDeltaZMB);

  TH1F* hVZMUL = new TH1F("hVZMUL"," primary vertex z (cm) for MUL trigger",nzbin,-zrange,zrange);
  fListVertex->AddAtAndExpand(hVZMUL, kVZMUL);
  TH1F* hPileupVZMUL = new TH1F("hPileupVZMUL"," pile-up vertices z (cm) for MUL trigger",nzbin,-zrange,zrange);
  fListVertex->AddAtAndExpand(hPileupVZMUL, kPileupVZMUL);
  TH1F* hVnMUL = new TH1F("hVnMUL"," number of contributors for MUL trigger",ncbin,0,ncbin);
  fListVertex->AddAtAndExpand(hVnMUL, kVnCMUL);
  TH1F* hNPileupMUL = new TH1F("hNPileupMUL"," number of pileup vertices for MUL trigger",npileup,0,npileup);
  fListVertex->AddAtAndExpand(hNPileupMUL, kNPileupMUL);
  TH1F* hPileupVnMUL = new TH1F("hPileupVnMUL"," number of pileup vertices contributors for MUL trigger",ncbin,0,ncbin);
  fListVertex->AddAtAndExpand(hPileupVnMUL, kPileupnCMUL);
  TH1F* hDeltaZMUL = new TH1F("hDeltaZMUL"," distance between primary vertex z and secondary vertices (cm) for MUL trigger",nzbin,-zrange,zrange);
  fListVertex->AddAtAndExpand(hDeltaZMUL, kDeltaZMUL);

  //  histograms for V0A multiplicty
  fListV0A = new TObjArray(2000);
  fListV0A->SetOwner();

  Int_t nV0Abin = 350;
  Float_t v0AMin = 0 , v0AMax = 700;
  Float_t centTabBin2[] = {0,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100,105};
  Int_t nCentBin2 = sizeof(centTabBin2)/sizeof(centTabBin2[0]);
  nCentBin2--;
  Int_t nV0ACentBin = 105;
  Float_t v0ACentMin = 0, v0ACentMax = 105;

  TH1F* hV0AMultMB = new TH1F("hV0AMultMB"," V0A mutliplicity for CINT7 trigger",nV0Abin,v0AMin,v0AMax);
  fListV0A->AddAtAndExpand(hV0AMultMB, kV0AMB);
  TH1F* hV0AMultMUL = new TH1F("hV0AMultMUL"," V0A mutliplicity for CMUL7 trigger",nV0Abin,v0AMin,v0AMax);
  fListV0A->AddAtAndExpand(hV0AMultMUL, kV0AMUL);
  TH1F* hV0ACentMB = new TH1F("hV0ACentMB"," V0A centrality for CINT7 trigger",nV0ACentBin,v0ACentMin,v0ACentMax);
  fListV0A->AddAtAndExpand(hV0ACentMB, kV0ACentMB);
  TH1F* hV0ACentMUL = new TH1F("hV0ACentMUL"," V0A centrality for CMUL7 trigger",nV0ACentBin,v0ACentMin,v0ACentMax);
  fListV0A->AddAtAndExpand(hV0ACentMUL, kV0ACentMUL);  
  TH2F* hV0AMultvsCentMB = new TH2F("hV0AMultvsCentMB"," V0A centrality vs multiplicity for CINT7 trigger",nV0Abin,v0AMin,v0AMax,200,0,200);
  fListV0A->AddAtAndExpand(hV0AMultvsCentMB, kV0AMultvsCentMB);
  TH2F* hV0ACentvsV0CCentMUL = new TH2F("hV0ACentvsV0CCentMUL"," V0A vs V0C centrality for CMUL7 trigger",nCentBin2,centTabBin2,nCentBin2,centTabBin2);//,centMin,centMax,nCent,centMin,centMax);
  hV0ACentvsV0CCentMUL->SetXTitle("V0A Event Multiplicity");
  hV0ACentvsV0CCentMUL->SetYTitle("V0C Event Multiplicity");
  fListV0A->AddAtAndExpand(hV0ACentvsV0CCentMUL, kV0ACentvsV0CCentMUL);
 TH2F* hV0ACentvsV0CCentMB = new TH2F("hV0ACentvsV0CCentMB"," V0A vs V0C centrality for CINT7 trigger",nCentBin2,centTabBin2,nCentBin2,centTabBin2);//,centMin,centMax,nCent,centMin,centMax);
  hV0ACentvsV0CCentMB->SetXTitle("V0A Event Multiplicity");
  hV0ACentvsV0CCentMB->SetYTitle("V0C Event Multiplicity");
  fListV0A->AddAtAndExpand(hV0ACentvsV0CCentMB, kV0ACentvsV0CCentMB);
  TH2F* hV0ACentvsCL1CentMUL = new TH2F("hV0ACentvsCL1CentMUL"," V0A vs CL1 centrality for CMUL7 trigger",nCentBin2,centTabBin2,nCentBin2,centTabBin2);//nCent,centMin,centMax,nCent,centMin,centMax);
  hV0ACentvsCL1CentMUL->SetXTitle("V0A Event Multiplicity");
  hV0ACentvsCL1CentMUL->SetYTitle("CL1 Event Multiplicity");
  fListV0A->AddAtAndExpand(hV0ACentvsCL1CentMUL, kV0ACentvsCL1CentMUL);
  TH2F* hV0ACentvsCL1CentMB = new TH2F("hV0ACentvsCL1CentMB"," V0A vs CL1 centrality for CINT7 trigger",nCentBin2,centTabBin2,nCentBin2,centTabBin2);//nCent,centMin,centMax,nCent,centMin,centMax);
  hV0ACentvsCL1CentMB->SetXTitle("V0A Event Multiplicity");
  hV0ACentvsCL1CentMB->SetYTitle("CL1 Event Multiplicity");
  fListV0A->AddAtAndExpand(hV0ACentvsCL1CentMB, kV0ACentvsCL1CentMB);
 TH2F* hV0CCentvsCL1CentMB = new TH2F("hV0CCentvsCL1CentMB"," V0C vs CL1 centrality for CINT7 trigger",nCentBin2,centTabBin2,nCentBin2,centTabBin2);//nCent,centMin,centMax,nCent,centMin,centMax);
  hV0CCentvsCL1CentMB->SetXTitle("V0C Event Multiplicity");
  hV0CCentvsCL1CentMB->SetYTitle("CL1 Event Multiplicity");
  fListV0A->AddAtAndExpand(hV0CCentvsCL1CentMB, kV0CCentvsCL1CentMB);


  //  histograms for ZN multiplicity
  fListZN = new TObjArray(2000);
  fListZN->SetOwner();

  Int_t nZNbin = 2100;
  Float_t zNMin = -100 , zNMax = 2000;
  Int_t nZNCentBin = 105;
  Float_t zNCentMin = 0, zNCentMax = 105;

  TH1F* hZNMultMB = new TH1F("hZNMultMB"," ZN mutliplicity for CINT7 trigger",nZNbin,zNMin,zNMax);
  fListZN->AddAtAndExpand(hZNMultMB, kZNMB);
  TH1F* hZNMultMUL = new TH1F("hZNMultMUL"," ZN mutliplicity for CMUL7 trigger",nZNbin,zNMin,zNMax);
  fListZN->AddAtAndExpand(hZNMultMUL, kZNMUL);
  TH1F* hZNCentMB = new TH1F("hZNCentMB"," ZN centrality distribution for CINT7 trigger",nZNCentBin,zNCentMin,zNCentMax);
  fListZN->AddAtAndExpand(hZNCentMB, kZNCentMB);
  TH1F* hZNCentMUL = new TH1F("hZNCentMUL"," ZN centrality distribution for CMUL7 trigger",nZNCentBin,zNCentMin,zNCentMax);
  fListZN->AddAtAndExpand(hZNCentMUL, kZNCentMUL);
  TH2F* hZNMultvsCentMB = new TH2F("hZNMultvsCentMB"," ZN centrality vs multiplicity for CINT7 trigger",nZNbin,zNMin,zNMax,250,-50,200);
  fListZN->AddAtAndExpand(hZNMultvsCentMB, kZNMultvsCentMB);


  PostData(1,fEventCounters);
  PostData(2,fRunCounters);
  PostData(3,fListVertex);
  PostData(4,fListV0A);
  PostData(5,fListZN);

}

//________________________________________________________________________
Bool_t AliAnalysisTaskNorm::IsAODEvent ( const AliVEvent* event )
{
  /// Check if event is from ESD or AOD
  return ( event->IsA() == AliAODEvent::Class() );
}

//________________________________________________________________________
TString AliAnalysisTaskNorm::GetFiredTriggerClasses ( const AliVEvent* event )
{
  /// Check if track is from ESD or AOD
  return ( IsAODEvent(event) ) ? static_cast<const AliAODEvent*>(event)->GetFiredTriggerClasses() : static_cast<const AliESDEvent*>(event)->GetFiredTriggerClasses();
}

//_____________________________________________________________________________
void AliAnalysisTaskNorm::UserExec(Option_t *)
{
  
  Bool_t keepEvent = fMuonEventCuts->IsSelected(fInputHandler);
  TString sListOfTrig = GetFiredTriggerClasses(InputEvent());

  if ( DebugLevel() > 0 ) {
    AliInfo(Form("keepEvent %d - isEsd=%d - isMC=%d - beam conf = %s List of trigger=%s",keepEvent,fIsESD,fIsMC,fBeamConf.Data(),sListOfTrig.Data()));
    fMuonEventCuts->Print();
  }

  if(!keepEvent) return;

  const TObjArray* selectedTrigClasses = fMuonEventCuts->GetSelectedTrigClassesInEvent(InputEvent());
 
  AliAODEvent *aod = 0;
  AliESDEvent *esd = 0;
  if ( !fIsESD ){
    aod = static_cast<AliAODEvent *>(InputEvent());
  }
  else {
    esd = dynamic_cast<AliESDEvent *>(InputEvent());
  }
  if ( !esd && !aod ){
    AliFatal(Form("ERROR: Could not retrieve ESD (fIsESD=%d) or AOD event. Return!",fIsESD));
    return;
  }

  AliCentrality *centrality =  ( fIsESD ) ? esd->GetCentrality() : aod->GetCentrality();

  //Get list of normalization factor
  TList* normFactorList = BuildListOfNormFactor(selectedTrigClasses);
  //Get list of all triggers
  TList* triggerList = BuildListOfTrigger(selectedTrigClasses);
  //Get list of all centrality estimators + bins
  TList* centralityList = BuildListOfCentrality(centrality);
  //Get list of spd pile-up cases
  TList* spdPileUpList = BuildListOfPileUp((AliVEvent*)InputEvent());
  //Get list of ntracklets 
  TList* trackletsList = BuildListOfTracklets((AliVEvent*)InputEvent());
  //Get list of V0A multiplicity bin
  TList* v0AMultList = BuildListOfV0AMult((AliVEvent*)InputEvent());

  if ( DebugLevel() > 0 ){
    Print();
    cout<<"Trigger List"<<endl;
    triggerList->Print();
    cout<<"Norm factor List"<<endl;
    normFactorList->Print();
    cout<<"Centrality List"<<endl;
    centralityList->Print();
    cout<<"Spd Pile-Up List"<<endl;
    spdPileUpList->Print();
    cout<<"Tracklet List"<<endl;
    trackletsList->Print();
    cout<<"V0AMult List"<<endl;
    v0AMultList->Print();
    cout<<"Trigger Mask "<<(InputEvent())->GetTriggerMask()<<endl;
  }

  //Get run number
  Int_t runNr = ( (AliVEvent*) InputEvent() )->GetRunNumber();

  //Get Phys Sel.
  Bool_t physSel = kFALSE;
  UInt_t isSelected = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected());
  if (isSelected) physSel = kTRUE;

  //Get out-of-bunch pile-up
  Bool_t outofbcpileup = kFALSE;
  AliAnalysisUtils analysisUtils;
  outofbcpileup =  analysisUtils.IsOutOfBunchPileUp((AliVEvent*)InputEvent());

  //vertex
  Bool_t isVertex = kFALSE;
  TString sVertexCut = "";
  Int_t nVertexContributors = (((AliVEvent*) InputEvent() )->GetPrimaryVertex())->GetNContributors();
  if (nVertexContributors > 0) isVertex = kTRUE;
  Double_t zVertex = (((AliVEvent*) InputEvent() )->GetPrimaryVertex())->GetZ();
  if (TMath::Abs(zVertex) <= 10) sVertexCut = "vertexcut:abszb10";
  else if (zVertex < -10) sVertexCut = "vertexcut:zbm10";
  else if (zVertex > +10) sVertexCut = "vertexcut:zap10";


  //Fill some histograms for the vertex (primary and secondary)
  if (physSel && isVertex && sVertexCut.Contains("abszb10") ) FillHistoPileUpVertices((AliVEvent*)InputEvent(),selectedTrigClasses);

  //Fill some control histograms for the multiplicity
  if (physSel) FillHistoMult((AliVEvent*)InputEvent(),selectedTrigClasses);

  //Fill event counters
  //  FillEventCounters(runNr,triggerList,normFactorList,physSel,t0pileup,bgID);
  FillEventCounters(runNr,triggerList,normFactorList,centralityList,spdPileUpList,trackletsList,v0AMultList,physSel,isVertex,sVertexCut,outofbcpileup);

  //clean memory
  //DO NOT clean selectedTrigClasses, it is a constant
  delete normFactorList;
  delete triggerList;
  delete centralityList;
  delete spdPileUpList;
  delete trackletsList;
  delete v0AMultList;

  PostData(1, fEventCounters);
  PostData(2, fRunCounters);
  PostData(3, fListVertex);
  PostData(4, fListV0A);
  PostData(5, fListZN);

  return;

}


//_____________________________________________________________________________
void AliAnalysisTaskNorm::Terminate(Option_t *)
{

  fEventCounters = dynamic_cast<AliCounterCollection *>(GetOutputData(1));
  if (!fEventCounters) { AliError("Could not retrieve AliCounterCollection* fEventCounters"); return; }

  fRunCounters = dynamic_cast<AliCounterCollection *>(GetOutputData(2));
  if (!fRunCounters) { AliError("Could not retrieve AliCounterCollection* fRunCounters"); return; }

  fListVertex = dynamic_cast<TObjArray *>(GetOutputData(3));
  if (!fListVertex) { AliError("Could not retrieve TObjArray* fListVertex"); return; }

  fListV0A = dynamic_cast<TObjArray *>(GetOutputData(4));
  if (!fListV0A) { AliError("Could not retrieve TObjArray* fListV0A"); return; }

  fListZN = dynamic_cast<TObjArray *>(GetOutputData(5));
  if (!fListZN) { AliError("Could not retrieve TObjArray* fListZN"); return; }
  
  
}


//_____________________________________________________________________________
void AliAnalysisTaskNorm::Print(Option_t *) const
{

  cout << ClassName() << " - " << GetName() << " - " << fIsESD <<" - "<< fIsMC << endl;

}


//_____________________________________________________________________________
void AliAnalysisTaskNorm::Print(TObjArray *obj) const
{
  
  if (!obj) return;

  for ( Int_t itrig=0; itrig<obj->GetEntries(); ++itrig ) {
    TString sName = ((TObjString*)obj->At(itrig))->GetString();
    cout<<sName<<" - ";
  }
  cout<<endl;
  
}

//________________________________________________________________________
void AliAnalysisTaskNorm::FillHistoPileUpVertices(const AliVEvent *event, const TObjArray *trigClass)
{

  Bool_t isMB = kFALSE;
  Bool_t isMUL = kFALSE;
  
  for ( Int_t itrig = 0; itrig < trigClass->GetEntries(); itrig++ ) {
    TString sTrigClassName = ((TObjString*)trigClass->At(itrig))->GetString();
    if ( sTrigClassName.Contains("CINT7-B-NOPF-ALLNOTRD") ) isMB = kTRUE;
    if ( sTrigClassName.Contains("CMUL7-B-NOPF-MUON") ||  sTrigClassName.Contains("CMUL7-B-NOPF-ALLNOTRD") ) isMUL = kTRUE; 
  }

  // fill histo related to pileup vertices
  const AliAODEvent *aod = 0;
  const AliESDEvent *esd = 0;
  
  if ( !fIsESD ){
    aod = static_cast<const AliAODEvent *>(event);
  }
  else {
    esd = dynamic_cast<const AliESDEvent *>(event);
  }
  if ( !esd && !aod ){
    AliFatal(Form("ERROR: Could not retrieve ESD (fIsESD=%d) or AOD event. Return!",fIsESD));
    return;
  }

  Double_t zPV = 0;
  Int_t nContrPV = -1;

  //primary vertex  
  AliVVertex *primaryVertex = (fIsESD) ? (AliVVertex*) esd->GetPrimaryVertexSPD() : (AliVVertex*) aod->GetPrimaryVertexSPD();  
  
  if (primaryVertex) {
    zPV = primaryVertex->GetZ();
    nContrPV = primaryVertex->GetNContributors();
    //printf("primary vertex: z= %.2f ncontr = %d\n",zPV,nContrPV);
  }
  if(isMB) {
    ((TH1F*)fListVertex->UncheckedAt(kVZMB))->Fill(zPV);
    ((TH1F*)fListVertex->UncheckedAt(kVnCMB))->Fill(nContrPV);
  }
  if (isMUL){
    ((TH1F*)fListVertex->UncheckedAt(kVZMUL))->Fill(zPV);
    ((TH1F*)fListVertex->UncheckedAt(kVnCMUL))->Fill(nContrPV);
  }
  
  //pile-up vertices
  Int_t nPileUpVertices = (fIsESD) ? esd->GetNumberOfPileupVerticesSPD() : aod->GetNumberOfPileupVerticesSPD();
  AliVVertex *pileupVertex = 0;

  if(isMB)  ((TH1F*)fListVertex->UncheckedAt(kNPileupMB))->Fill(nPileUpVertices);
  if(isMUL)  ((TH1F*)fListVertex->UncheckedAt(kNPileupMUL))->Fill(nPileUpVertices);

  Double_t zV = 0;
  Int_t nContr = -1;
  
  for (Int_t iV = 0; iV < nPileUpVertices; iV++) {
    zV = 0;
    nContr = -1;
    pileupVertex = (fIsESD) ? (AliVVertex*) esd->GetPileupVertexSPD(iV) : (AliVVertex*) aod->GetPileupVertexSPD(iV);
    if (!pileupVertex) continue;
    zV = pileupVertex->GetZ();
    nContr = pileupVertex->GetNContributors();
    //printf("pile-up vertex nr %d/%d: z= %.2f ncontr = %d\n",iV,nPileUpVertices,zV,nContr);
    if(isMB){
      ((TH1F*)fListVertex->UncheckedAt(kPileupVZMB))->Fill(zV);
      ((TH1F*)fListVertex->UncheckedAt(kPileupnCMB))->Fill(nContr);
      ((TH1F*)fListVertex->UncheckedAt(kDeltaZMB))->Fill(zPV-zV);
    }
    if(isMUL){
      ((TH1F*)fListVertex->UncheckedAt(kPileupVZMUL))->Fill(zV);
      ((TH1F*)fListVertex->UncheckedAt(kPileupnCMUL))->Fill(nContr);
      ((TH1F*)fListVertex->UncheckedAt(kDeltaZMUL))->Fill(zPV-zV);
    }
  }

  return;
}

//________________________________________________________________________
void AliAnalysisTaskNorm::FillHistoMult(const AliVEvent *event, const TObjArray *trigClass)
{

  Bool_t isMB = kFALSE;
  Bool_t isMUL = kFALSE;
  
  for ( Int_t itrig = 0; itrig < trigClass->GetEntries(); itrig++ ) {
    TString sTrigClassName = ((TObjString*)trigClass->At(itrig))->GetString();
    if ( sTrigClassName.Contains("CINT7-B-NOPF-ALLNOTRD") ) isMB = kTRUE;
    if ( sTrigClassName.Contains("CMUL7-B-NOPF-MUON") ) isMUL = kTRUE; 
  }

  // fill histo related to V0A multiplicity
  AliAODEvent *aod = 0;
  AliESDEvent *esd = 0;
  
  if ( !fIsESD ){
    aod = static_cast<AliAODEvent *> (const_cast<AliVEvent*> (event) );
  }
  else {
    esd = dynamic_cast<AliESDEvent *> (const_cast<AliVEvent*> (event) );
  }
  if ( !esd && !aod ){
    AliFatal(Form("ERROR: Could not retrieve ESD (fIsESD=%d) or AOD event. Return!",fIsESD));
    return;
  }

  AliVVZERO *v0Data = (fIsESD) ? (AliVVZERO*) esd->GetVZEROData() : (AliVVZERO*) aod->GetVZEROData();
  if ( !v0Data ) return;

  Float_t v0AMult = 0;
  for (Int_t i = 0 ; i < 32 ; i++) v0AMult += v0Data->GetMultiplicityV0A(i);

  AliCentrality *centrality =  dynamic_cast<AliCentrality*> ( ( fIsESD ) ? esd->GetCentrality() : aod->GetCentrality() );
  Float_t centVal = centrality->GetCentralityPercentileUnchecked("V0A");
  Float_t centValV0C = centrality->GetCentralityPercentileUnchecked("V0C");
  Float_t centValCL1 = centrality->GetCentralityPercentileUnchecked("CL1");

  if(isMB) {
    ((TH1F*)fListV0A->UncheckedAt(kV0AMB))->Fill(v0AMult);
    ((TH1F*)fListV0A->UncheckedAt(kV0ACentMB))->Fill(centVal);
    ((TH2F*)fListV0A->UncheckedAt(kV0AMultvsCentMB))->Fill(v0AMult,centVal);
    ((TH2F*)fListV0A->UncheckedAt(kV0ACentvsV0CCentMB))->Fill(centVal,centValV0C);
    ((TH2F*)fListV0A->UncheckedAt(kV0ACentvsCL1CentMB))->Fill(centVal,centValCL1);
    ((TH2F*)fListV0A->UncheckedAt(kV0CCentvsCL1CentMB))->Fill(centValV0C,centValCL1);
  }
  if (isMUL){
    ((TH1F*)fListV0A->UncheckedAt(kV0AMUL))->Fill(v0AMult);
    ((TH1F*)fListV0A->UncheckedAt(kV0ACentMUL))->Fill(centVal);
    ((TH2F*)fListV0A->UncheckedAt(kV0ACentvsV0CCentMUL))->Fill(centVal,centValV0C);
    ((TH2F*)fListV0A->UncheckedAt(kV0ACentvsCL1CentMUL))->Fill(centVal,centValCL1);
  }
  
  //Fill histo related to ZN multiplicity
  Double_t znaTower = 0.;           // common PMT of ZNA 
  Double_t zncTower = 0.;           // common PMT of ZNC 
  Bool_t   znaFired = kFALSE;
  Bool_t   zncFired = kFALSE;

  if (fIsESD) {
    AliESDZDC *esdZDC = esd->GetESDZDC();
    if (esdZDC) {
      for (Int_t j = 0; j < 4; ++j) 
	if (esdZDC->GetZDCTDCData(12,j) != 0) 
	  znaFired = kTRUE;
      
      for (Int_t j = 0; j < 4; ++j) 
	if (esdZDC->GetZDCTDCData(10,j) != 0) 
	  zncFired = kTRUE;   

      const Double_t *ZNAtower = esdZDC->GetZN2TowerEnergy(); 
      const Double_t *ZNCtower = esdZDC->GetZN1TowerEnergy();
      if (znaFired) znaTower = ZNAtower[0];
      if (zncFired) zncTower = ZNCtower[0];
    }
  }
  else {
    AliAODZDC *aodZDC = aod->GetZDCData();
    if (aodZDC) {
      //this works only on full AOD
      const Double_t *ZNAtower = aodZDC->GetZNATowerEnergy(); 
      const Double_t *ZNCtower = aodZDC->GetZNCTowerEnergy();
      znaTower = ZNAtower[0];
      zncTower = ZNCtower[0];
    }
  }

  Double_t zNE = 0;

  if ( !fBeamConf.CompareTo("p-Pb") ) zNE = znaTower;
  else zNE = zncTower;
  
  centVal = 0;
  if ( !fBeamConf.CompareTo("p-Pb") ) centVal = centrality->GetCentralityPercentileUnchecked("ZNA");
  else centVal = centrality->GetCentralityPercentileUnchecked("ZNC");

  //  AliInfo(Form("ZN energy %.2f centrality %.2f ",zNE,centVal));

  if(isMB) {
    ((TH1F*)fListZN->UncheckedAt(kZNMB))->Fill(zNE);
    ((TH1F*)fListZN->UncheckedAt(kZNCentMB))->Fill(centVal);
    ((TH2F*)fListZN->UncheckedAt(kZNMultvsCentMB))->Fill(zNE,centVal);
  }
  if (isMUL){
    ((TH1F*)fListZN->UncheckedAt(kZNMUL))->Fill(zNE);
    ((TH1F*)fListZN->UncheckedAt(kZNCentMUL))->Fill(centVal);
  }

  return;
}

//________________________________________________________________________
TList* AliAnalysisTaskNorm::BuildListOfPileUp(const AliVEvent *event)
{
 /// build the list of different cases of spd pileup (different options)
  /// returned TList must be deleted by user
    
  TList* list = new TList();
  list->SetOwner();
  
  //add any
  list->AddLast(new TObjString("isspdpu:any"));

  //Get SPD pile-up (same bunch pile-up)
  const AliAODEvent *aod = 0;
  const AliESDEvent *esd = 0;
  
  if ( !fIsESD ){
    aod = static_cast<const AliAODEvent *>(event);
  }
  else {
    esd = dynamic_cast<const AliESDEvent *>(event);
  }
  if ( !esd && !aod ){
    AliFatal(Form("ERROR: Could not retrieve ESD (fIsESD=%d) or AOD event. Return!",fIsESD));
    return 0;
  }
  
  const Int_t nSpdPileUp = 10;
  Bool_t spdpileup[nSpdPileUp] = {kFALSE,kFALSE,kFALSE,kFALSE,kFALSE,kFALSE,kFALSE,kFALSE,kFALSE,kFALSE};
  TString sSpdPileUp[nSpdPileUp] = {"n3d6","n3d8","n4d6","n4d8","n5d6","n5d8","n6d6","n6d8","multbinstd","mv"};
  spdpileup[0] =  ( fIsESD ) ? esd->IsPileupFromSPD(3,0.6,3.,2.,5.) : aod->IsPileupFromSPD(3,0.6,3.,2.,5.);
  spdpileup[1] =  ( fIsESD ) ? esd->IsPileupFromSPD(3,0.8,3.,2.,5.) : aod->IsPileupFromSPD(3,0.8,3.,2.,5.);
  spdpileup[2] =  ( fIsESD ) ? esd->IsPileupFromSPD(4,0.6,3.,2.,5.) : aod->IsPileupFromSPD(4,0.6,3.,2.,5.);
  spdpileup[3] =  ( fIsESD ) ? esd->IsPileupFromSPD(4,0.8,3.,2.,5.) : aod->IsPileupFromSPD(4,0.8,3.,2.,5.);
  spdpileup[4] =  ( fIsESD ) ? esd->IsPileupFromSPD(5,0.6,3.,2.,5.) : aod->IsPileupFromSPD(5,0.6,3.,2.,5.);
  spdpileup[5] =  ( fIsESD ) ? esd->IsPileupFromSPD(5,0.8,3.,2.,5.) : aod->IsPileupFromSPD(5,0.8,3.,2.,5.);
  spdpileup[6] =  ( fIsESD ) ? esd->IsPileupFromSPD(6,0.6,3.,2.,5.) : aod->IsPileupFromSPD(6,0.6,3.,2.,5.);
  spdpileup[7] =  ( fIsESD ) ? esd->IsPileupFromSPD(6,0.8,3.,2.,5.) : aod->IsPileupFromSPD(6,0.8,3.,2.,5.);
  spdpileup[8] =  kFALSE;
  AliAODTracklets *tracklets = dynamic_cast<AliAODTracklets*> ((fIsESD) ? 0 : aod->GetTracklets());
  if (tracklets) {
    spdpileup[8] = ( fIsESD ) ? esd->IsPileupFromSPDInMultBins() : aod->IsPileupFromSPDInMultBins();
  }
  
  AliAnalysisUtils analysis;
  spdpileup[9] = analysis.IsPileUpMV( const_cast<AliVEvent*> (event) );
  
  //  local SPDInMultBins function
  //  spdpileup[9] =  IsPileupFromSPDInMultBins(event);
  
  for ( Int_t iSpdPileUp = 0; iSpdPileUp < nSpdPileUp; iSpdPileUp++ ) {
    if (spdpileup[iSpdPileUp]) list->AddLast(new TObjString(Form("isspdpu:%s",sSpdPileUp[iSpdPileUp].Data())));
  }
  
  return list;
  
}

//________________________________________________________________________
Bool_t AliAnalysisTaskNorm::IsPileupFromSPDInMultBins(const AliVEvent *event) const {
  
  const AliAODEvent *aod = 0;
  const AliESDEvent *esd = 0;
  
  if ( !fIsESD ){
    aod = static_cast<const AliAODEvent *>(event);
  }
  else {
    esd = dynamic_cast<const AliESDEvent *>(event);
  }
  if ( !esd && !aod ){
    AliFatal(Form("ERROR: Could not retrieve ESD (fIsESD=%d) or AOD event. Return!",fIsESD));
    return 0;
  }

  AliAODTracklets *tracklets = dynamic_cast<AliAODTracklets*> ((fIsESD) ? 0 : aod->GetTracklets());
  if ( !tracklets) return kFALSE;

  Int_t nTracklets = (fIsESD) ? 0 : tracklets->GetNumberOfTracklets();
  if(nTracklets<40) return (fIsESD) ? esd->IsPileupFromSPD(3,0.8) : aod->IsPileupFromSPD(3,0.8);
  else return (fIsESD) ? esd->IsPileupFromSPD(5,0.8) : aod->IsPileupFromSPD(5,0.8);

}

//________________________________________________________________________
TList* AliAnalysisTaskNorm::BuildListOfCentrality(AliCentrality *centrality)
{
  /// build the list of centrality bins for each estimator
  /// returned TList must be deleted by user
    
  TList* list = new TList();
  list->SetOwner();
  
  if ( centrality ){
    for ( Int_t iMethod = 0; iMethod < fSCentEst->GetEntriesFast(); iMethod++ ) {
      
      TString sMethod = ((TObjString*)fSCentEst->At(iMethod))->GetString();
      TString sMethodCentrality;

      if ( !sMethod.CompareTo("any") ) {
	list->AddLast(new TObjString(Form("centest:any/centbin:any")));
	continue;
      }

      //pA or Ap?
      if ( !sMethod.CompareTo("ZN") ) {
	if ( !fBeamConf.CompareTo("p-Pb") ) sMethodCentrality = "ZNA";
	else sMethodCentrality = "ZNC";
      }
      else sMethodCentrality = sMethod;

      Float_t centVal = centrality->GetCentralityPercentileUnchecked( sMethodCentrality.Data() );
      //      if (centVal == 0) centVal = -1; Now centval==0 goes to bin 0-5
      if ( !sMethod.CompareTo("ZN") && centVal == 101 ) centVal = 100;
      Int_t centBin = -1;
      Int_t index = 0;
      while (centBin == -1 && index < fCentBin.GetSize()-1 ) {
	index++; 
	if ( centVal >= 0 && centVal <= fCentBin.At(index) ) centBin = index - 1;
      }

      if(DebugLevel() > 0) {
	if (centBin !=-1) {
	  TString sCentBin = ((TObjString*)fSCentBin->At(centBin))->GetString();
	  printf("test method %s-%s centrality %f bin found %d bin from centrality table %s\n",sMethod.Data(),sMethodCentrality.Data(),centVal,centBin, sCentBin.Data());
	}
	else 
	  printf("test method %s centrality %f centbin:other \n",sMethod.Data(),centVal);
      }
       
      if (centBin == -1) {
	printf("test method %s centrality %f centbin:other \n",sMethod.Data(),centVal);
	list->AddLast(new TObjString(Form("centest:%s/centbin:other",sMethod.Data() )));
	list->AddLast(new TObjString(Form("centest:%s/centbin:any",sMethod.Data())));
      }
      else {
	//Add specific event centrality estimator and bin
	TString sCentBin = ((TObjString*)fSCentBin->At(centBin))->GetString();
	list->AddLast(new TObjString(Form("centest:%s/centbin:%s",sMethod.Data(),sCentBin.Data())));
	list->AddLast(new TObjString(Form("centest:%s/centbin:any",sMethod.Data())));
      }
    }
  }
  
  return list;
}



//________________________________________________________________________
TList* AliAnalysisTaskNorm::BuildListOfV0AMult(const AliVEvent *event) {
  /// build the list of V0A multiplicity bins 
  /// returned TList must be deleted by user
    
  TList* list = new TList();
  list->SetOwner();

  const AliAODEvent *aod = 0;
  const AliESDEvent *esd = 0;
  
  if ( !fIsESD ){
    aod = static_cast<const AliAODEvent *>(event);
  }
  else {
    esd = dynamic_cast<const AliESDEvent *>(event);
  }
  if ( !esd && !aod ){
    AliFatal(Form("ERROR: Could not retrieve ESD (fIsESD=%d) or AOD event. Return!",fIsESD));
    list->AddLast(new TObjString(Form("v0amult:other")));
    return list;
  }

  AliVVZERO *v0Data = (fIsESD) ? (AliVVZERO*) esd->GetVZEROData() : (AliVVZERO*) aod->GetVZEROData();
  if ( !v0Data ) {
    list->AddLast(new TObjString(Form("v0amult:other")));
    return list;
  }

  Float_t v0AMult = 0;
  for (Int_t i = 0 ; i < 32 ; i++) v0AMult += v0Data->GetMultiplicityV0A(i);

  Int_t bin = -1, index = -1;

  while (bin == -1 && index < fV0AMultBin.GetSize()-1 ) {
    index++; 
    if ( v0AMult >= 0 && v0AMult < fV0AMultBin.At(index) ) bin = index - 1;
  }
  
  if(DebugLevel() > 0) {
    if (bin !=-1) {
      TString sBin = ((TObjString*)fSV0AMultBin->At(bin))->GetString();
      printf("test v0Amult %.2f bin found %d bin from v0AMult table %s\n",v0AMult,bin, sBin.Data());
    }
    else 
      printf("test v0AMult %.2f no bin\n",v0AMult);
  }
  
  if (bin == -1) {
    list->AddLast(new TObjString(Form("v0amult:other")));
  }
  else {
    //Add specific event centrality estimator and bin
    TString sBin = ((TObjString*)fSV0AMultBin->At(bin))->GetString();
    list->AddLast(new TObjString(Form("v0amult:%s",sBin.Data())));
  }

  return list;
}



//________________________________________________________________________
TList* AliAnalysisTaskNorm::BuildListOfTracklets(const AliVEvent *event) {
  /// build the list of tracklets multiplicity bins 
  /// returned TList must be deleted by user
    
  TList* list = new TList();
  list->SetOwner();

  const AliAODEvent *aod = 0;
  const AliESDEvent *esd = 0;
  
  if ( !fIsESD ){
    aod = static_cast<const AliAODEvent *>(event);
  }
  else {
    esd = dynamic_cast<const AliESDEvent *>(event);
  }
  if ( !esd && !aod ){
    AliFatal(Form("ERROR: Could not retrieve ESD (fIsESD=%d) or AOD event. Return!",fIsESD));
    list->AddLast(new TObjString(Form("ntracklets:other")));
    return list;
  }

  AliAODTracklets *tracklets = dynamic_cast<AliAODTracklets*> ((fIsESD) ? 0 : aod->GetTracklets());
  if ( !tracklets) {
    list->AddLast(new TObjString(Form("ntracklets:other")));
    return list;
  }

  Int_t nTracklets = (fIsESD) ? 0 : tracklets->GetNumberOfTracklets();
  Int_t trBin = -1, index = -1;

  while (trBin == -1 && index < fTrackletsBin.GetSize()-1 ) {
    index++; 
    if ( nTracklets >= 0 && nTracklets < fTrackletsBin.At(index) ) trBin = index - 1;
  }
  
  if(DebugLevel() > 0) {
    if (trBin !=-1) {
      TString sTrBin = ((TObjString*)fSTrackletsBin->At(trBin))->GetString();
      printf("test ntracklets %d bin found %d bin from ntracklets table %s\n",nTracklets,trBin, sTrBin.Data());
    }
    else 
      printf("test ntracklets %d no bin\n",nTracklets);
  }
  
  if (trBin == -1) {
    list->AddLast(new TObjString(Form("ntracklets:other")));
  }
  else {
    //Add specific event centrality estimator and bin
    TString sTrBin = ((TObjString*)fSTrackletsBin->At(trBin))->GetString();
    list->AddLast(new TObjString(Form("ntracklets:%s",sTrBin.Data())));
  }

  return list;
}



//________________________________________________________________________
TList* AliAnalysisTaskNorm::BuildListOfTrigger(const TObjArray *obj)
{
  /// build the list of trigger for the counters from the selected trigger objarray
  /// returned TList must be deleted by user
    
  TList* list = new TList();
  list->SetOwner();
  
  // add case any
  list->AddLast(new TObjString("trigger:any"));

  if ( obj ){
    for ( Int_t itrig = 0; itrig<obj->GetEntries(); itrig++ ) {
      TString sTrigClassName = ((TObjString*)obj->At(itrig))->GetString();
      //Add specific trigger
      list->AddLast(new TObjString(Form("trigger:%s",sTrigClassName.Data())));
    }
  }
  
  // add case other if no specific trigger was found
  if (list->GetSize() == 1) list->AddLast(new TObjString("trigger:other"));

  return list;
}


//_____________________________________________________________________________
Bool_t AliAnalysisTaskNorm::CheckPattern ( TString trigName, TObjArray* keepArray, TObjArray* rejectArray )
{
  for ( Int_t ipat=0; ipat<rejectArray->GetEntries(); ++ipat ) {
    if ( trigName.Contains(rejectArray->At(ipat)->GetName() ) ) return kFALSE;
  } // loop on reject pattern
  
  for ( Int_t ipat=0; ipat<keepArray->GetEntries(); ++ipat ) {
    if ( trigName.Contains(keepArray->At(ipat)->GetName() ) ) return kTRUE;
  } // loop on keep pattern
  
  return ( keepArray->GetEntries() == 0 ) ? kTRUE : kFALSE;
}


//_____________________________________________________________________________
TObjArray* AliAnalysisTaskNorm::BuildArrayOfTrigger ( const TObjArray* triggerArray, TString keepPattern, TString rejectPattern )
{

  /// build the selected list of trigger from the trigger objarray
  /// returned TObjArray must be deleted by user

  TObjArray* selectedList = new TObjArray();
  selectedList->SetOwner();
  TObjArray* rejectArray = rejectPattern.Tokenize(",");
  TObjArray* keepArray = keepPattern.Tokenize(",");
  
  for ( Int_t iTrig = 0; iTrig < triggerArray->GetEntries(); iTrig++ ){
    TString currTrigName = ((TObjString*)triggerArray->At(iTrig))->GetName();
    if ( CheckPattern(currTrigName, keepArray, rejectArray) ) selectedList->AddLast(new TObjString(currTrigName.Data()));
  }

  delete rejectArray;
  delete keepArray;

  return selectedList;

}

//________________________________________________________________________
TList* AliAnalysisTaskNorm::BuildListOfNormFactor(const TObjArray *trig ) {
  // returned TList must be deleted by user
  TList *list = new TList();
  list->SetOwner();

  //fEventCounters->AddRubric("norm", "MBinMB/MSLinMSL/MULinMUL/MSLinMB/MULinMSL/MULinMB/any");
  
  //any event
  list->AddLast(new TObjString("norm:any"));
  
  if ( trig ) {

    Bool_t isMUL = kFALSE, isMSL = kFALSE, isMB = kFALSE;
    Bool_t isMULInMSL = kFALSE, isMSLInMB = kFALSE, isMULInMB = kFALSE;
    TString sNorm;
    
    for ( Int_t itrig=0; itrig< trig->GetEntries(); itrig++ ) {
      TString sTrigClassName = ((TObjString*) trig->At(itrig))->GetString();
      if (sTrigClassName.Contains("CINT7-B-NOPF-ALLNOTRD")) isMB = kTRUE;
      if (sTrigClassName.Contains("CMUL7-B-NOPF-MUON")) isMUL = kTRUE;
      if (sTrigClassName.Contains("CMSL7-B-NOPF-MUON")) isMSL = kTRUE;
      if (sTrigClassName.Contains("CINT7-B-NOPF-ALLNOTRD&0MSL")) isMSLInMB = kTRUE;
      if (sTrigClassName.Contains("CMSL7-B-NOPF-MUON&0MUL")) isMULInMSL = kTRUE;
      if (sTrigClassName.Contains("CINT7-B-NOPF-ALLNOTRD&0MUL")) isMULInMB = kTRUE;
    }
    
    if (isMB){
      sNorm = "MBinMB"; 
      list->AddLast(new TObjString(Form("norm:%s",sNorm.Data())));
    }
    if (isMSL){
      sNorm = "MSLinMSL"; 
      list->AddLast(new TObjString(Form("norm:%s",sNorm.Data())));
    }
    if (isMUL){
      sNorm = "MULinMUL"; 
      list->AddLast(new TObjString(Form("norm:%s",sNorm.Data())));
    }
    if (isMSLInMB){
      sNorm = "MSLinMB"; 
      list->AddLast(new TObjString(Form("norm:%s",sNorm.Data())));
    }
    if (isMULInMSL){
      sNorm = "MULinMSL"; 
      list->AddLast(new TObjString(Form("norm:%s",sNorm.Data())));
    }
    if (isMULInMB){
      sNorm = "MULinMB"; 
      list->AddLast(new TObjString(Form("norm:%s",sNorm.Data())));
    }

    // add case other if no specific trigger was found
    if ( list->GetSize() == 1 ) list->AddLast(new TObjString("norm:other"));

  }  

  return list;
  
}

//_____________________________________________________________________________
void AliAnalysisTaskNorm::FillEventCounters( Int_t runNr, TList *triggerList, TList *normFactorList, TList *centralityList, TList *spdPileUpList, TList *trackletsList, TList *v0AMultList, Bool_t physsel, Bool_t isVertex, TString sVertexCut, Bool_t outofbunchpileup) {

  TIter nextTriggerKey(triggerList);
  TObjString *triggerKey = 0x0;

  TIter nextNormFactorKey(normFactorList);
  TObjString *normFactorKey = 0x0;

  TIter nextCentralityKey(centralityList);
  TObjString *centralityKey = 0x0;

  TIter nextSpdPileUpKey(spdPileUpList);
  TObjString *spdPileUpKey = 0x0;

  TIter nextTrackletsKey(trackletsList);
  //TObjString *trackletsKey = 0x0;

  TIter nextV0AMultKey(v0AMultList);
  //TObjString *v0AMultKey = 0x0;

  TString selected;
  selected = (physsel) ? "physsel:yes" : "physsel:no";
  selected += (isVertex) ? "/vertex:yes" : "/vertex:no";
  selected += Form("/%s",sVertexCut.Data());

  TString selected2;
  selected2 = (outofbunchpileup) ? "/outofbunchpileup:yes" : "/outofbunchpileup:no";
  
  //Loop over triggerList
  while ( ( triggerKey = (TObjString*) nextTriggerKey() )  ) {
    
    //Loop over normFactor List
    nextNormFactorKey.Reset();
    while ( ( normFactorKey = (TObjString*) nextNormFactorKey() ) ) {

      //Loop over centrality List
      nextCentralityKey.Reset();
      while ( ( centralityKey = (TObjString*) nextCentralityKey() ) ) {

	//Loop over spd pileup list
	nextSpdPileUpKey.Reset();
	while ( ( spdPileUpKey = (TObjString*) nextSpdPileUpKey() ) ) {

	  //Loop over ntracklets list
	  //nextTrackletsKey.Reset();
	  //while ( ( trackletsKey = (TObjString*) nextTrackletsKey() ) ) {

	    //Loop over V0Amult list
	    //nextV0AMultKey.Reset();
	    //while ( ( v0AMultKey = (TObjString*) nextV0AMultKey() ) ) {
	      
	      TString sEventCounters;
	      //sEventCounters = Form("run:%d/%s/%s/%s/%s/%s/%s/%s",runNr,selected.Data(),triggerKey->GetName(),normFactorKey->GetName(),centralityKey->GetName(),spdPileUpKey->GetName(),trackletsKey->GetName(),v0AMultKey->GetName());
	      sEventCounters = Form("run:%d/%s/%s/%s/%s/%s",runNr,selected.Data(),triggerKey->GetName(),normFactorKey->GetName(),centralityKey->GetName(),spdPileUpKey->GetName());
	      fEventCounters->Count(sEventCounters);
	      //	printf("event counters = %s\n",sEventCounters.Data());

	      // }//end loop on V0A multiplcity list
	      // }//end loop on ntracklets list
	}// end loop on spd pile up list
      }//end loop on centrality list
    }//end loop on normfactor list
  }//end loop on triggerList
  
  return;
}
 
 AliAnalysisTaskNorm.cxx:1
 AliAnalysisTaskNorm.cxx:2
 AliAnalysisTaskNorm.cxx:3
 AliAnalysisTaskNorm.cxx:4
 AliAnalysisTaskNorm.cxx:5
 AliAnalysisTaskNorm.cxx:6
 AliAnalysisTaskNorm.cxx:7
 AliAnalysisTaskNorm.cxx:8
 AliAnalysisTaskNorm.cxx:9
 AliAnalysisTaskNorm.cxx:10
 AliAnalysisTaskNorm.cxx:11
 AliAnalysisTaskNorm.cxx:12
 AliAnalysisTaskNorm.cxx:13
 AliAnalysisTaskNorm.cxx:14
 AliAnalysisTaskNorm.cxx:15
 AliAnalysisTaskNorm.cxx:16
 AliAnalysisTaskNorm.cxx:17
 AliAnalysisTaskNorm.cxx:18
 AliAnalysisTaskNorm.cxx:19
 AliAnalysisTaskNorm.cxx:20
 AliAnalysisTaskNorm.cxx:21
 AliAnalysisTaskNorm.cxx:22
 AliAnalysisTaskNorm.cxx:23
 AliAnalysisTaskNorm.cxx:24
 AliAnalysisTaskNorm.cxx:25
 AliAnalysisTaskNorm.cxx:26
 AliAnalysisTaskNorm.cxx:27
 AliAnalysisTaskNorm.cxx:28
 AliAnalysisTaskNorm.cxx:29
 AliAnalysisTaskNorm.cxx:30
 AliAnalysisTaskNorm.cxx:31
 AliAnalysisTaskNorm.cxx:32
 AliAnalysisTaskNorm.cxx:33
 AliAnalysisTaskNorm.cxx:34
 AliAnalysisTaskNorm.cxx:35
 AliAnalysisTaskNorm.cxx:36
 AliAnalysisTaskNorm.cxx:37
 AliAnalysisTaskNorm.cxx:38
 AliAnalysisTaskNorm.cxx:39
 AliAnalysisTaskNorm.cxx:40
 AliAnalysisTaskNorm.cxx:41
 AliAnalysisTaskNorm.cxx:42
 AliAnalysisTaskNorm.cxx:43
 AliAnalysisTaskNorm.cxx:44
 AliAnalysisTaskNorm.cxx:45
 AliAnalysisTaskNorm.cxx:46
 AliAnalysisTaskNorm.cxx:47
 AliAnalysisTaskNorm.cxx:48
 AliAnalysisTaskNorm.cxx:49
 AliAnalysisTaskNorm.cxx:50
 AliAnalysisTaskNorm.cxx:51
 AliAnalysisTaskNorm.cxx:52
 AliAnalysisTaskNorm.cxx:53
 AliAnalysisTaskNorm.cxx:54
 AliAnalysisTaskNorm.cxx:55
 AliAnalysisTaskNorm.cxx:56
 AliAnalysisTaskNorm.cxx:57
 AliAnalysisTaskNorm.cxx:58
 AliAnalysisTaskNorm.cxx:59
 AliAnalysisTaskNorm.cxx:60
 AliAnalysisTaskNorm.cxx:61
 AliAnalysisTaskNorm.cxx:62
 AliAnalysisTaskNorm.cxx:63
 AliAnalysisTaskNorm.cxx:64
 AliAnalysisTaskNorm.cxx:65
 AliAnalysisTaskNorm.cxx:66
 AliAnalysisTaskNorm.cxx:67
 AliAnalysisTaskNorm.cxx:68
 AliAnalysisTaskNorm.cxx:69
 AliAnalysisTaskNorm.cxx:70
 AliAnalysisTaskNorm.cxx:71
 AliAnalysisTaskNorm.cxx:72
 AliAnalysisTaskNorm.cxx:73
 AliAnalysisTaskNorm.cxx:74
 AliAnalysisTaskNorm.cxx:75
 AliAnalysisTaskNorm.cxx:76
 AliAnalysisTaskNorm.cxx:77
 AliAnalysisTaskNorm.cxx:78
 AliAnalysisTaskNorm.cxx:79
 AliAnalysisTaskNorm.cxx:80
 AliAnalysisTaskNorm.cxx:81
 AliAnalysisTaskNorm.cxx:82
 AliAnalysisTaskNorm.cxx:83
 AliAnalysisTaskNorm.cxx:84
 AliAnalysisTaskNorm.cxx:85
 AliAnalysisTaskNorm.cxx:86
 AliAnalysisTaskNorm.cxx:87
 AliAnalysisTaskNorm.cxx:88
 AliAnalysisTaskNorm.cxx:89
 AliAnalysisTaskNorm.cxx:90
 AliAnalysisTaskNorm.cxx:91
 AliAnalysisTaskNorm.cxx:92
 AliAnalysisTaskNorm.cxx:93
 AliAnalysisTaskNorm.cxx:94
 AliAnalysisTaskNorm.cxx:95
 AliAnalysisTaskNorm.cxx:96
 AliAnalysisTaskNorm.cxx:97
 AliAnalysisTaskNorm.cxx:98
 AliAnalysisTaskNorm.cxx:99
 AliAnalysisTaskNorm.cxx:100
 AliAnalysisTaskNorm.cxx:101
 AliAnalysisTaskNorm.cxx:102
 AliAnalysisTaskNorm.cxx:103
 AliAnalysisTaskNorm.cxx:104
 AliAnalysisTaskNorm.cxx:105
 AliAnalysisTaskNorm.cxx:106
 AliAnalysisTaskNorm.cxx:107
 AliAnalysisTaskNorm.cxx:108
 AliAnalysisTaskNorm.cxx:109
 AliAnalysisTaskNorm.cxx:110
 AliAnalysisTaskNorm.cxx:111
 AliAnalysisTaskNorm.cxx:112
 AliAnalysisTaskNorm.cxx:113
 AliAnalysisTaskNorm.cxx:114
 AliAnalysisTaskNorm.cxx:115
 AliAnalysisTaskNorm.cxx:116
 AliAnalysisTaskNorm.cxx:117
 AliAnalysisTaskNorm.cxx:118
 AliAnalysisTaskNorm.cxx:119
 AliAnalysisTaskNorm.cxx:120
 AliAnalysisTaskNorm.cxx:121
 AliAnalysisTaskNorm.cxx:122
 AliAnalysisTaskNorm.cxx:123
 AliAnalysisTaskNorm.cxx:124
 AliAnalysisTaskNorm.cxx:125
 AliAnalysisTaskNorm.cxx:126
 AliAnalysisTaskNorm.cxx:127
 AliAnalysisTaskNorm.cxx:128
 AliAnalysisTaskNorm.cxx:129
 AliAnalysisTaskNorm.cxx:130
 AliAnalysisTaskNorm.cxx:131
 AliAnalysisTaskNorm.cxx:132
 AliAnalysisTaskNorm.cxx:133
 AliAnalysisTaskNorm.cxx:134
 AliAnalysisTaskNorm.cxx:135
 AliAnalysisTaskNorm.cxx:136
 AliAnalysisTaskNorm.cxx:137
 AliAnalysisTaskNorm.cxx:138
 AliAnalysisTaskNorm.cxx:139
 AliAnalysisTaskNorm.cxx:140
 AliAnalysisTaskNorm.cxx:141
 AliAnalysisTaskNorm.cxx:142
 AliAnalysisTaskNorm.cxx:143
 AliAnalysisTaskNorm.cxx:144
 AliAnalysisTaskNorm.cxx:145
 AliAnalysisTaskNorm.cxx:146
 AliAnalysisTaskNorm.cxx:147
 AliAnalysisTaskNorm.cxx:148
 AliAnalysisTaskNorm.cxx:149
 AliAnalysisTaskNorm.cxx:150
 AliAnalysisTaskNorm.cxx:151
 AliAnalysisTaskNorm.cxx:152
 AliAnalysisTaskNorm.cxx:153
 AliAnalysisTaskNorm.cxx:154
 AliAnalysisTaskNorm.cxx:155
 AliAnalysisTaskNorm.cxx:156
 AliAnalysisTaskNorm.cxx:157
 AliAnalysisTaskNorm.cxx:158
 AliAnalysisTaskNorm.cxx:159
 AliAnalysisTaskNorm.cxx:160
 AliAnalysisTaskNorm.cxx:161
 AliAnalysisTaskNorm.cxx:162
 AliAnalysisTaskNorm.cxx:163
 AliAnalysisTaskNorm.cxx:164
 AliAnalysisTaskNorm.cxx:165
 AliAnalysisTaskNorm.cxx:166
 AliAnalysisTaskNorm.cxx:167
 AliAnalysisTaskNorm.cxx:168
 AliAnalysisTaskNorm.cxx:169
 AliAnalysisTaskNorm.cxx:170
 AliAnalysisTaskNorm.cxx:171
 AliAnalysisTaskNorm.cxx:172
 AliAnalysisTaskNorm.cxx:173
 AliAnalysisTaskNorm.cxx:174
 AliAnalysisTaskNorm.cxx:175
 AliAnalysisTaskNorm.cxx:176
 AliAnalysisTaskNorm.cxx:177
 AliAnalysisTaskNorm.cxx:178
 AliAnalysisTaskNorm.cxx:179
 AliAnalysisTaskNorm.cxx:180
 AliAnalysisTaskNorm.cxx:181
 AliAnalysisTaskNorm.cxx:182
 AliAnalysisTaskNorm.cxx:183
 AliAnalysisTaskNorm.cxx:184
 AliAnalysisTaskNorm.cxx:185
 AliAnalysisTaskNorm.cxx:186
 AliAnalysisTaskNorm.cxx:187
 AliAnalysisTaskNorm.cxx:188
 AliAnalysisTaskNorm.cxx:189
 AliAnalysisTaskNorm.cxx:190
 AliAnalysisTaskNorm.cxx:191
 AliAnalysisTaskNorm.cxx:192
 AliAnalysisTaskNorm.cxx:193
 AliAnalysisTaskNorm.cxx:194
 AliAnalysisTaskNorm.cxx:195
 AliAnalysisTaskNorm.cxx:196
 AliAnalysisTaskNorm.cxx:197
 AliAnalysisTaskNorm.cxx:198
 AliAnalysisTaskNorm.cxx:199
 AliAnalysisTaskNorm.cxx:200
 AliAnalysisTaskNorm.cxx:201
 AliAnalysisTaskNorm.cxx:202
 AliAnalysisTaskNorm.cxx:203
 AliAnalysisTaskNorm.cxx:204
 AliAnalysisTaskNorm.cxx:205
 AliAnalysisTaskNorm.cxx:206
 AliAnalysisTaskNorm.cxx:207
 AliAnalysisTaskNorm.cxx:208
 AliAnalysisTaskNorm.cxx:209
 AliAnalysisTaskNorm.cxx:210
 AliAnalysisTaskNorm.cxx:211
 AliAnalysisTaskNorm.cxx:212
 AliAnalysisTaskNorm.cxx:213
 AliAnalysisTaskNorm.cxx:214
 AliAnalysisTaskNorm.cxx:215
 AliAnalysisTaskNorm.cxx:216
 AliAnalysisTaskNorm.cxx:217
 AliAnalysisTaskNorm.cxx:218
 AliAnalysisTaskNorm.cxx:219
 AliAnalysisTaskNorm.cxx:220
 AliAnalysisTaskNorm.cxx:221
 AliAnalysisTaskNorm.cxx:222
 AliAnalysisTaskNorm.cxx:223
 AliAnalysisTaskNorm.cxx:224
 AliAnalysisTaskNorm.cxx:225
 AliAnalysisTaskNorm.cxx:226
 AliAnalysisTaskNorm.cxx:227
 AliAnalysisTaskNorm.cxx:228
 AliAnalysisTaskNorm.cxx:229
 AliAnalysisTaskNorm.cxx:230
 AliAnalysisTaskNorm.cxx:231
 AliAnalysisTaskNorm.cxx:232
 AliAnalysisTaskNorm.cxx:233
 AliAnalysisTaskNorm.cxx:234
 AliAnalysisTaskNorm.cxx:235
 AliAnalysisTaskNorm.cxx:236
 AliAnalysisTaskNorm.cxx:237
 AliAnalysisTaskNorm.cxx:238
 AliAnalysisTaskNorm.cxx:239
 AliAnalysisTaskNorm.cxx:240
 AliAnalysisTaskNorm.cxx:241
 AliAnalysisTaskNorm.cxx:242
 AliAnalysisTaskNorm.cxx:243
 AliAnalysisTaskNorm.cxx:244
 AliAnalysisTaskNorm.cxx:245
 AliAnalysisTaskNorm.cxx:246
 AliAnalysisTaskNorm.cxx:247
 AliAnalysisTaskNorm.cxx:248
 AliAnalysisTaskNorm.cxx:249
 AliAnalysisTaskNorm.cxx:250
 AliAnalysisTaskNorm.cxx:251
 AliAnalysisTaskNorm.cxx:252
 AliAnalysisTaskNorm.cxx:253
 AliAnalysisTaskNorm.cxx:254
 AliAnalysisTaskNorm.cxx:255
 AliAnalysisTaskNorm.cxx:256
 AliAnalysisTaskNorm.cxx:257
 AliAnalysisTaskNorm.cxx:258
 AliAnalysisTaskNorm.cxx:259
 AliAnalysisTaskNorm.cxx:260
 AliAnalysisTaskNorm.cxx:261
 AliAnalysisTaskNorm.cxx:262
 AliAnalysisTaskNorm.cxx:263
 AliAnalysisTaskNorm.cxx:264
 AliAnalysisTaskNorm.cxx:265
 AliAnalysisTaskNorm.cxx:266
 AliAnalysisTaskNorm.cxx:267
 AliAnalysisTaskNorm.cxx:268
 AliAnalysisTaskNorm.cxx:269
 AliAnalysisTaskNorm.cxx:270
 AliAnalysisTaskNorm.cxx:271
 AliAnalysisTaskNorm.cxx:272
 AliAnalysisTaskNorm.cxx:273
 AliAnalysisTaskNorm.cxx:274
 AliAnalysisTaskNorm.cxx:275
 AliAnalysisTaskNorm.cxx:276
 AliAnalysisTaskNorm.cxx:277
 AliAnalysisTaskNorm.cxx:278
 AliAnalysisTaskNorm.cxx:279
 AliAnalysisTaskNorm.cxx:280
 AliAnalysisTaskNorm.cxx:281
 AliAnalysisTaskNorm.cxx:282
 AliAnalysisTaskNorm.cxx:283
 AliAnalysisTaskNorm.cxx:284
 AliAnalysisTaskNorm.cxx:285
 AliAnalysisTaskNorm.cxx:286
 AliAnalysisTaskNorm.cxx:287
 AliAnalysisTaskNorm.cxx:288
 AliAnalysisTaskNorm.cxx:289
 AliAnalysisTaskNorm.cxx:290
 AliAnalysisTaskNorm.cxx:291
 AliAnalysisTaskNorm.cxx:292
 AliAnalysisTaskNorm.cxx:293
 AliAnalysisTaskNorm.cxx:294
 AliAnalysisTaskNorm.cxx:295
 AliAnalysisTaskNorm.cxx:296
 AliAnalysisTaskNorm.cxx:297
 AliAnalysisTaskNorm.cxx:298
 AliAnalysisTaskNorm.cxx:299
 AliAnalysisTaskNorm.cxx:300
 AliAnalysisTaskNorm.cxx:301
 AliAnalysisTaskNorm.cxx:302
 AliAnalysisTaskNorm.cxx:303
 AliAnalysisTaskNorm.cxx:304
 AliAnalysisTaskNorm.cxx:305
 AliAnalysisTaskNorm.cxx:306
 AliAnalysisTaskNorm.cxx:307
 AliAnalysisTaskNorm.cxx:308
 AliAnalysisTaskNorm.cxx:309
 AliAnalysisTaskNorm.cxx:310
 AliAnalysisTaskNorm.cxx:311
 AliAnalysisTaskNorm.cxx:312
 AliAnalysisTaskNorm.cxx:313
 AliAnalysisTaskNorm.cxx:314
 AliAnalysisTaskNorm.cxx:315
 AliAnalysisTaskNorm.cxx:316
 AliAnalysisTaskNorm.cxx:317
 AliAnalysisTaskNorm.cxx:318
 AliAnalysisTaskNorm.cxx:319
 AliAnalysisTaskNorm.cxx:320
 AliAnalysisTaskNorm.cxx:321
 AliAnalysisTaskNorm.cxx:322
 AliAnalysisTaskNorm.cxx:323
 AliAnalysisTaskNorm.cxx:324
 AliAnalysisTaskNorm.cxx:325
 AliAnalysisTaskNorm.cxx:326
 AliAnalysisTaskNorm.cxx:327
 AliAnalysisTaskNorm.cxx:328
 AliAnalysisTaskNorm.cxx:329
 AliAnalysisTaskNorm.cxx:330
 AliAnalysisTaskNorm.cxx:331
 AliAnalysisTaskNorm.cxx:332
 AliAnalysisTaskNorm.cxx:333
 AliAnalysisTaskNorm.cxx:334
 AliAnalysisTaskNorm.cxx:335
 AliAnalysisTaskNorm.cxx:336
 AliAnalysisTaskNorm.cxx:337
 AliAnalysisTaskNorm.cxx:338
 AliAnalysisTaskNorm.cxx:339
 AliAnalysisTaskNorm.cxx:340
 AliAnalysisTaskNorm.cxx:341
 AliAnalysisTaskNorm.cxx:342
 AliAnalysisTaskNorm.cxx:343
 AliAnalysisTaskNorm.cxx:344
 AliAnalysisTaskNorm.cxx:345
 AliAnalysisTaskNorm.cxx:346
 AliAnalysisTaskNorm.cxx:347
 AliAnalysisTaskNorm.cxx:348
 AliAnalysisTaskNorm.cxx:349
 AliAnalysisTaskNorm.cxx:350
 AliAnalysisTaskNorm.cxx:351
 AliAnalysisTaskNorm.cxx:352
 AliAnalysisTaskNorm.cxx:353
 AliAnalysisTaskNorm.cxx:354
 AliAnalysisTaskNorm.cxx:355
 AliAnalysisTaskNorm.cxx:356
 AliAnalysisTaskNorm.cxx:357
 AliAnalysisTaskNorm.cxx:358
 AliAnalysisTaskNorm.cxx:359
 AliAnalysisTaskNorm.cxx:360
 AliAnalysisTaskNorm.cxx:361
 AliAnalysisTaskNorm.cxx:362
 AliAnalysisTaskNorm.cxx:363
 AliAnalysisTaskNorm.cxx:364
 AliAnalysisTaskNorm.cxx:365
 AliAnalysisTaskNorm.cxx:366
 AliAnalysisTaskNorm.cxx:367
 AliAnalysisTaskNorm.cxx:368
 AliAnalysisTaskNorm.cxx:369
 AliAnalysisTaskNorm.cxx:370
 AliAnalysisTaskNorm.cxx:371
 AliAnalysisTaskNorm.cxx:372
 AliAnalysisTaskNorm.cxx:373
 AliAnalysisTaskNorm.cxx:374
 AliAnalysisTaskNorm.cxx:375
 AliAnalysisTaskNorm.cxx:376
 AliAnalysisTaskNorm.cxx:377
 AliAnalysisTaskNorm.cxx:378
 AliAnalysisTaskNorm.cxx:379
 AliAnalysisTaskNorm.cxx:380
 AliAnalysisTaskNorm.cxx:381
 AliAnalysisTaskNorm.cxx:382
 AliAnalysisTaskNorm.cxx:383
 AliAnalysisTaskNorm.cxx:384
 AliAnalysisTaskNorm.cxx:385
 AliAnalysisTaskNorm.cxx:386
 AliAnalysisTaskNorm.cxx:387
 AliAnalysisTaskNorm.cxx:388
 AliAnalysisTaskNorm.cxx:389
 AliAnalysisTaskNorm.cxx:390
 AliAnalysisTaskNorm.cxx:391
 AliAnalysisTaskNorm.cxx:392
 AliAnalysisTaskNorm.cxx:393
 AliAnalysisTaskNorm.cxx:394
 AliAnalysisTaskNorm.cxx:395
 AliAnalysisTaskNorm.cxx:396
 AliAnalysisTaskNorm.cxx:397
 AliAnalysisTaskNorm.cxx:398
 AliAnalysisTaskNorm.cxx:399
 AliAnalysisTaskNorm.cxx:400
 AliAnalysisTaskNorm.cxx:401
 AliAnalysisTaskNorm.cxx:402
 AliAnalysisTaskNorm.cxx:403
 AliAnalysisTaskNorm.cxx:404
 AliAnalysisTaskNorm.cxx:405
 AliAnalysisTaskNorm.cxx:406
 AliAnalysisTaskNorm.cxx:407
 AliAnalysisTaskNorm.cxx:408
 AliAnalysisTaskNorm.cxx:409
 AliAnalysisTaskNorm.cxx:410
 AliAnalysisTaskNorm.cxx:411
 AliAnalysisTaskNorm.cxx:412
 AliAnalysisTaskNorm.cxx:413
 AliAnalysisTaskNorm.cxx:414
 AliAnalysisTaskNorm.cxx:415
 AliAnalysisTaskNorm.cxx:416
 AliAnalysisTaskNorm.cxx:417
 AliAnalysisTaskNorm.cxx:418
 AliAnalysisTaskNorm.cxx:419
 AliAnalysisTaskNorm.cxx:420
 AliAnalysisTaskNorm.cxx:421
 AliAnalysisTaskNorm.cxx:422
 AliAnalysisTaskNorm.cxx:423
 AliAnalysisTaskNorm.cxx:424
 AliAnalysisTaskNorm.cxx:425
 AliAnalysisTaskNorm.cxx:426
 AliAnalysisTaskNorm.cxx:427
 AliAnalysisTaskNorm.cxx:428
 AliAnalysisTaskNorm.cxx:429
 AliAnalysisTaskNorm.cxx:430
 AliAnalysisTaskNorm.cxx:431
 AliAnalysisTaskNorm.cxx:432
 AliAnalysisTaskNorm.cxx:433
 AliAnalysisTaskNorm.cxx:434
 AliAnalysisTaskNorm.cxx:435
 AliAnalysisTaskNorm.cxx:436
 AliAnalysisTaskNorm.cxx:437
 AliAnalysisTaskNorm.cxx:438
 AliAnalysisTaskNorm.cxx:439
 AliAnalysisTaskNorm.cxx:440
 AliAnalysisTaskNorm.cxx:441
 AliAnalysisTaskNorm.cxx:442
 AliAnalysisTaskNorm.cxx:443
 AliAnalysisTaskNorm.cxx:444
 AliAnalysisTaskNorm.cxx:445
 AliAnalysisTaskNorm.cxx:446
 AliAnalysisTaskNorm.cxx:447
 AliAnalysisTaskNorm.cxx:448
 AliAnalysisTaskNorm.cxx:449
 AliAnalysisTaskNorm.cxx:450
 AliAnalysisTaskNorm.cxx:451
 AliAnalysisTaskNorm.cxx:452
 AliAnalysisTaskNorm.cxx:453
 AliAnalysisTaskNorm.cxx:454
 AliAnalysisTaskNorm.cxx:455
 AliAnalysisTaskNorm.cxx:456
 AliAnalysisTaskNorm.cxx:457
 AliAnalysisTaskNorm.cxx:458
 AliAnalysisTaskNorm.cxx:459
 AliAnalysisTaskNorm.cxx:460
 AliAnalysisTaskNorm.cxx:461
 AliAnalysisTaskNorm.cxx:462
 AliAnalysisTaskNorm.cxx:463
 AliAnalysisTaskNorm.cxx:464
 AliAnalysisTaskNorm.cxx:465
 AliAnalysisTaskNorm.cxx:466
 AliAnalysisTaskNorm.cxx:467
 AliAnalysisTaskNorm.cxx:468
 AliAnalysisTaskNorm.cxx:469
 AliAnalysisTaskNorm.cxx:470
 AliAnalysisTaskNorm.cxx:471
 AliAnalysisTaskNorm.cxx:472
 AliAnalysisTaskNorm.cxx:473
 AliAnalysisTaskNorm.cxx:474
 AliAnalysisTaskNorm.cxx:475
 AliAnalysisTaskNorm.cxx:476
 AliAnalysisTaskNorm.cxx:477
 AliAnalysisTaskNorm.cxx:478
 AliAnalysisTaskNorm.cxx:479
 AliAnalysisTaskNorm.cxx:480
 AliAnalysisTaskNorm.cxx:481
 AliAnalysisTaskNorm.cxx:482
 AliAnalysisTaskNorm.cxx:483
 AliAnalysisTaskNorm.cxx:484
 AliAnalysisTaskNorm.cxx:485
 AliAnalysisTaskNorm.cxx:486
 AliAnalysisTaskNorm.cxx:487
 AliAnalysisTaskNorm.cxx:488
 AliAnalysisTaskNorm.cxx:489
 AliAnalysisTaskNorm.cxx:490
 AliAnalysisTaskNorm.cxx:491
 AliAnalysisTaskNorm.cxx:492
 AliAnalysisTaskNorm.cxx:493
 AliAnalysisTaskNorm.cxx:494
 AliAnalysisTaskNorm.cxx:495
 AliAnalysisTaskNorm.cxx:496
 AliAnalysisTaskNorm.cxx:497
 AliAnalysisTaskNorm.cxx:498
 AliAnalysisTaskNorm.cxx:499
 AliAnalysisTaskNorm.cxx:500
 AliAnalysisTaskNorm.cxx:501
 AliAnalysisTaskNorm.cxx:502
 AliAnalysisTaskNorm.cxx:503
 AliAnalysisTaskNorm.cxx:504
 AliAnalysisTaskNorm.cxx:505
 AliAnalysisTaskNorm.cxx:506
 AliAnalysisTaskNorm.cxx:507
 AliAnalysisTaskNorm.cxx:508
 AliAnalysisTaskNorm.cxx:509
 AliAnalysisTaskNorm.cxx:510
 AliAnalysisTaskNorm.cxx:511
 AliAnalysisTaskNorm.cxx:512
 AliAnalysisTaskNorm.cxx:513
 AliAnalysisTaskNorm.cxx:514
 AliAnalysisTaskNorm.cxx:515
 AliAnalysisTaskNorm.cxx:516
 AliAnalysisTaskNorm.cxx:517
 AliAnalysisTaskNorm.cxx:518
 AliAnalysisTaskNorm.cxx:519
 AliAnalysisTaskNorm.cxx:520
 AliAnalysisTaskNorm.cxx:521
 AliAnalysisTaskNorm.cxx:522
 AliAnalysisTaskNorm.cxx:523
 AliAnalysisTaskNorm.cxx:524
 AliAnalysisTaskNorm.cxx:525
 AliAnalysisTaskNorm.cxx:526
 AliAnalysisTaskNorm.cxx:527
 AliAnalysisTaskNorm.cxx:528
 AliAnalysisTaskNorm.cxx:529
 AliAnalysisTaskNorm.cxx:530
 AliAnalysisTaskNorm.cxx:531
 AliAnalysisTaskNorm.cxx:532
 AliAnalysisTaskNorm.cxx:533
 AliAnalysisTaskNorm.cxx:534
 AliAnalysisTaskNorm.cxx:535
 AliAnalysisTaskNorm.cxx:536
 AliAnalysisTaskNorm.cxx:537
 AliAnalysisTaskNorm.cxx:538
 AliAnalysisTaskNorm.cxx:539
 AliAnalysisTaskNorm.cxx:540
 AliAnalysisTaskNorm.cxx:541
 AliAnalysisTaskNorm.cxx:542
 AliAnalysisTaskNorm.cxx:543
 AliAnalysisTaskNorm.cxx:544
 AliAnalysisTaskNorm.cxx:545
 AliAnalysisTaskNorm.cxx:546
 AliAnalysisTaskNorm.cxx:547
 AliAnalysisTaskNorm.cxx:548
 AliAnalysisTaskNorm.cxx:549
 AliAnalysisTaskNorm.cxx:550
 AliAnalysisTaskNorm.cxx:551
 AliAnalysisTaskNorm.cxx:552
 AliAnalysisTaskNorm.cxx:553
 AliAnalysisTaskNorm.cxx:554
 AliAnalysisTaskNorm.cxx:555
 AliAnalysisTaskNorm.cxx:556
 AliAnalysisTaskNorm.cxx:557
 AliAnalysisTaskNorm.cxx:558
 AliAnalysisTaskNorm.cxx:559
 AliAnalysisTaskNorm.cxx:560
 AliAnalysisTaskNorm.cxx:561
 AliAnalysisTaskNorm.cxx:562
 AliAnalysisTaskNorm.cxx:563
 AliAnalysisTaskNorm.cxx:564
 AliAnalysisTaskNorm.cxx:565
 AliAnalysisTaskNorm.cxx:566
 AliAnalysisTaskNorm.cxx:567
 AliAnalysisTaskNorm.cxx:568
 AliAnalysisTaskNorm.cxx:569
 AliAnalysisTaskNorm.cxx:570
 AliAnalysisTaskNorm.cxx:571
 AliAnalysisTaskNorm.cxx:572
 AliAnalysisTaskNorm.cxx:573
 AliAnalysisTaskNorm.cxx:574
 AliAnalysisTaskNorm.cxx:575
 AliAnalysisTaskNorm.cxx:576
 AliAnalysisTaskNorm.cxx:577
 AliAnalysisTaskNorm.cxx:578
 AliAnalysisTaskNorm.cxx:579
 AliAnalysisTaskNorm.cxx:580
 AliAnalysisTaskNorm.cxx:581
 AliAnalysisTaskNorm.cxx:582
 AliAnalysisTaskNorm.cxx:583
 AliAnalysisTaskNorm.cxx:584
 AliAnalysisTaskNorm.cxx:585
 AliAnalysisTaskNorm.cxx:586
 AliAnalysisTaskNorm.cxx:587
 AliAnalysisTaskNorm.cxx:588
 AliAnalysisTaskNorm.cxx:589
 AliAnalysisTaskNorm.cxx:590
 AliAnalysisTaskNorm.cxx:591
 AliAnalysisTaskNorm.cxx:592
 AliAnalysisTaskNorm.cxx:593
 AliAnalysisTaskNorm.cxx:594
 AliAnalysisTaskNorm.cxx:595
 AliAnalysisTaskNorm.cxx:596
 AliAnalysisTaskNorm.cxx:597
 AliAnalysisTaskNorm.cxx:598
 AliAnalysisTaskNorm.cxx:599
 AliAnalysisTaskNorm.cxx:600
 AliAnalysisTaskNorm.cxx:601
 AliAnalysisTaskNorm.cxx:602
 AliAnalysisTaskNorm.cxx:603
 AliAnalysisTaskNorm.cxx:604
 AliAnalysisTaskNorm.cxx:605
 AliAnalysisTaskNorm.cxx:606
 AliAnalysisTaskNorm.cxx:607
 AliAnalysisTaskNorm.cxx:608
 AliAnalysisTaskNorm.cxx:609
 AliAnalysisTaskNorm.cxx:610
 AliAnalysisTaskNorm.cxx:611
 AliAnalysisTaskNorm.cxx:612
 AliAnalysisTaskNorm.cxx:613
 AliAnalysisTaskNorm.cxx:614
 AliAnalysisTaskNorm.cxx:615
 AliAnalysisTaskNorm.cxx:616
 AliAnalysisTaskNorm.cxx:617
 AliAnalysisTaskNorm.cxx:618
 AliAnalysisTaskNorm.cxx:619
 AliAnalysisTaskNorm.cxx:620
 AliAnalysisTaskNorm.cxx:621
 AliAnalysisTaskNorm.cxx:622
 AliAnalysisTaskNorm.cxx:623
 AliAnalysisTaskNorm.cxx:624
 AliAnalysisTaskNorm.cxx:625
 AliAnalysisTaskNorm.cxx:626
 AliAnalysisTaskNorm.cxx:627
 AliAnalysisTaskNorm.cxx:628
 AliAnalysisTaskNorm.cxx:629
 AliAnalysisTaskNorm.cxx:630
 AliAnalysisTaskNorm.cxx:631
 AliAnalysisTaskNorm.cxx:632
 AliAnalysisTaskNorm.cxx:633
 AliAnalysisTaskNorm.cxx:634
 AliAnalysisTaskNorm.cxx:635
 AliAnalysisTaskNorm.cxx:636
 AliAnalysisTaskNorm.cxx:637
 AliAnalysisTaskNorm.cxx:638
 AliAnalysisTaskNorm.cxx:639
 AliAnalysisTaskNorm.cxx:640
 AliAnalysisTaskNorm.cxx:641
 AliAnalysisTaskNorm.cxx:642
 AliAnalysisTaskNorm.cxx:643
 AliAnalysisTaskNorm.cxx:644
 AliAnalysisTaskNorm.cxx:645
 AliAnalysisTaskNorm.cxx:646
 AliAnalysisTaskNorm.cxx:647
 AliAnalysisTaskNorm.cxx:648
 AliAnalysisTaskNorm.cxx:649
 AliAnalysisTaskNorm.cxx:650
 AliAnalysisTaskNorm.cxx:651
 AliAnalysisTaskNorm.cxx:652
 AliAnalysisTaskNorm.cxx:653
 AliAnalysisTaskNorm.cxx:654
 AliAnalysisTaskNorm.cxx:655
 AliAnalysisTaskNorm.cxx:656
 AliAnalysisTaskNorm.cxx:657
 AliAnalysisTaskNorm.cxx:658
 AliAnalysisTaskNorm.cxx:659
 AliAnalysisTaskNorm.cxx:660
 AliAnalysisTaskNorm.cxx:661
 AliAnalysisTaskNorm.cxx:662
 AliAnalysisTaskNorm.cxx:663
 AliAnalysisTaskNorm.cxx:664
 AliAnalysisTaskNorm.cxx:665
 AliAnalysisTaskNorm.cxx:666
 AliAnalysisTaskNorm.cxx:667
 AliAnalysisTaskNorm.cxx:668
 AliAnalysisTaskNorm.cxx:669
 AliAnalysisTaskNorm.cxx:670
 AliAnalysisTaskNorm.cxx:671
 AliAnalysisTaskNorm.cxx:672
 AliAnalysisTaskNorm.cxx:673
 AliAnalysisTaskNorm.cxx:674
 AliAnalysisTaskNorm.cxx:675
 AliAnalysisTaskNorm.cxx:676
 AliAnalysisTaskNorm.cxx:677
 AliAnalysisTaskNorm.cxx:678
 AliAnalysisTaskNorm.cxx:679
 AliAnalysisTaskNorm.cxx:680
 AliAnalysisTaskNorm.cxx:681
 AliAnalysisTaskNorm.cxx:682
 AliAnalysisTaskNorm.cxx:683
 AliAnalysisTaskNorm.cxx:684
 AliAnalysisTaskNorm.cxx:685
 AliAnalysisTaskNorm.cxx:686
 AliAnalysisTaskNorm.cxx:687
 AliAnalysisTaskNorm.cxx:688
 AliAnalysisTaskNorm.cxx:689
 AliAnalysisTaskNorm.cxx:690
 AliAnalysisTaskNorm.cxx:691
 AliAnalysisTaskNorm.cxx:692
 AliAnalysisTaskNorm.cxx:693
 AliAnalysisTaskNorm.cxx:694
 AliAnalysisTaskNorm.cxx:695
 AliAnalysisTaskNorm.cxx:696
 AliAnalysisTaskNorm.cxx:697
 AliAnalysisTaskNorm.cxx:698
 AliAnalysisTaskNorm.cxx:699
 AliAnalysisTaskNorm.cxx:700
 AliAnalysisTaskNorm.cxx:701
 AliAnalysisTaskNorm.cxx:702
 AliAnalysisTaskNorm.cxx:703
 AliAnalysisTaskNorm.cxx:704
 AliAnalysisTaskNorm.cxx:705
 AliAnalysisTaskNorm.cxx:706
 AliAnalysisTaskNorm.cxx:707
 AliAnalysisTaskNorm.cxx:708
 AliAnalysisTaskNorm.cxx:709
 AliAnalysisTaskNorm.cxx:710
 AliAnalysisTaskNorm.cxx:711
 AliAnalysisTaskNorm.cxx:712
 AliAnalysisTaskNorm.cxx:713
 AliAnalysisTaskNorm.cxx:714
 AliAnalysisTaskNorm.cxx:715
 AliAnalysisTaskNorm.cxx:716
 AliAnalysisTaskNorm.cxx:717
 AliAnalysisTaskNorm.cxx:718
 AliAnalysisTaskNorm.cxx:719
 AliAnalysisTaskNorm.cxx:720
 AliAnalysisTaskNorm.cxx:721
 AliAnalysisTaskNorm.cxx:722
 AliAnalysisTaskNorm.cxx:723
 AliAnalysisTaskNorm.cxx:724
 AliAnalysisTaskNorm.cxx:725
 AliAnalysisTaskNorm.cxx:726
 AliAnalysisTaskNorm.cxx:727
 AliAnalysisTaskNorm.cxx:728
 AliAnalysisTaskNorm.cxx:729
 AliAnalysisTaskNorm.cxx:730
 AliAnalysisTaskNorm.cxx:731
 AliAnalysisTaskNorm.cxx:732
 AliAnalysisTaskNorm.cxx:733
 AliAnalysisTaskNorm.cxx:734
 AliAnalysisTaskNorm.cxx:735
 AliAnalysisTaskNorm.cxx:736
 AliAnalysisTaskNorm.cxx:737
 AliAnalysisTaskNorm.cxx:738
 AliAnalysisTaskNorm.cxx:739
 AliAnalysisTaskNorm.cxx:740
 AliAnalysisTaskNorm.cxx:741
 AliAnalysisTaskNorm.cxx:742
 AliAnalysisTaskNorm.cxx:743
 AliAnalysisTaskNorm.cxx:744
 AliAnalysisTaskNorm.cxx:745
 AliAnalysisTaskNorm.cxx:746
 AliAnalysisTaskNorm.cxx:747
 AliAnalysisTaskNorm.cxx:748
 AliAnalysisTaskNorm.cxx:749
 AliAnalysisTaskNorm.cxx:750
 AliAnalysisTaskNorm.cxx:751
 AliAnalysisTaskNorm.cxx:752
 AliAnalysisTaskNorm.cxx:753
 AliAnalysisTaskNorm.cxx:754
 AliAnalysisTaskNorm.cxx:755
 AliAnalysisTaskNorm.cxx:756
 AliAnalysisTaskNorm.cxx:757
 AliAnalysisTaskNorm.cxx:758
 AliAnalysisTaskNorm.cxx:759
 AliAnalysisTaskNorm.cxx:760
 AliAnalysisTaskNorm.cxx:761
 AliAnalysisTaskNorm.cxx:762
 AliAnalysisTaskNorm.cxx:763
 AliAnalysisTaskNorm.cxx:764
 AliAnalysisTaskNorm.cxx:765
 AliAnalysisTaskNorm.cxx:766
 AliAnalysisTaskNorm.cxx:767
 AliAnalysisTaskNorm.cxx:768
 AliAnalysisTaskNorm.cxx:769
 AliAnalysisTaskNorm.cxx:770
 AliAnalysisTaskNorm.cxx:771
 AliAnalysisTaskNorm.cxx:772
 AliAnalysisTaskNorm.cxx:773
 AliAnalysisTaskNorm.cxx:774
 AliAnalysisTaskNorm.cxx:775
 AliAnalysisTaskNorm.cxx:776
 AliAnalysisTaskNorm.cxx:777
 AliAnalysisTaskNorm.cxx:778
 AliAnalysisTaskNorm.cxx:779
 AliAnalysisTaskNorm.cxx:780
 AliAnalysisTaskNorm.cxx:781
 AliAnalysisTaskNorm.cxx:782
 AliAnalysisTaskNorm.cxx:783
 AliAnalysisTaskNorm.cxx:784
 AliAnalysisTaskNorm.cxx:785
 AliAnalysisTaskNorm.cxx:786
 AliAnalysisTaskNorm.cxx:787
 AliAnalysisTaskNorm.cxx:788
 AliAnalysisTaskNorm.cxx:789
 AliAnalysisTaskNorm.cxx:790
 AliAnalysisTaskNorm.cxx:791
 AliAnalysisTaskNorm.cxx:792
 AliAnalysisTaskNorm.cxx:793
 AliAnalysisTaskNorm.cxx:794
 AliAnalysisTaskNorm.cxx:795
 AliAnalysisTaskNorm.cxx:796
 AliAnalysisTaskNorm.cxx:797
 AliAnalysisTaskNorm.cxx:798
 AliAnalysisTaskNorm.cxx:799
 AliAnalysisTaskNorm.cxx:800
 AliAnalysisTaskNorm.cxx:801
 AliAnalysisTaskNorm.cxx:802
 AliAnalysisTaskNorm.cxx:803
 AliAnalysisTaskNorm.cxx:804
 AliAnalysisTaskNorm.cxx:805
 AliAnalysisTaskNorm.cxx:806
 AliAnalysisTaskNorm.cxx:807
 AliAnalysisTaskNorm.cxx:808
 AliAnalysisTaskNorm.cxx:809
 AliAnalysisTaskNorm.cxx:810
 AliAnalysisTaskNorm.cxx:811
 AliAnalysisTaskNorm.cxx:812
 AliAnalysisTaskNorm.cxx:813
 AliAnalysisTaskNorm.cxx:814
 AliAnalysisTaskNorm.cxx:815
 AliAnalysisTaskNorm.cxx:816
 AliAnalysisTaskNorm.cxx:817
 AliAnalysisTaskNorm.cxx:818
 AliAnalysisTaskNorm.cxx:819
 AliAnalysisTaskNorm.cxx:820
 AliAnalysisTaskNorm.cxx:821
 AliAnalysisTaskNorm.cxx:822
 AliAnalysisTaskNorm.cxx:823
 AliAnalysisTaskNorm.cxx:824
 AliAnalysisTaskNorm.cxx:825
 AliAnalysisTaskNorm.cxx:826
 AliAnalysisTaskNorm.cxx:827
 AliAnalysisTaskNorm.cxx:828
 AliAnalysisTaskNorm.cxx:829
 AliAnalysisTaskNorm.cxx:830
 AliAnalysisTaskNorm.cxx:831
 AliAnalysisTaskNorm.cxx:832
 AliAnalysisTaskNorm.cxx:833
 AliAnalysisTaskNorm.cxx:834
 AliAnalysisTaskNorm.cxx:835
 AliAnalysisTaskNorm.cxx:836
 AliAnalysisTaskNorm.cxx:837
 AliAnalysisTaskNorm.cxx:838
 AliAnalysisTaskNorm.cxx:839
 AliAnalysisTaskNorm.cxx:840
 AliAnalysisTaskNorm.cxx:841
 AliAnalysisTaskNorm.cxx:842
 AliAnalysisTaskNorm.cxx:843
 AliAnalysisTaskNorm.cxx:844
 AliAnalysisTaskNorm.cxx:845
 AliAnalysisTaskNorm.cxx:846
 AliAnalysisTaskNorm.cxx:847
 AliAnalysisTaskNorm.cxx:848
 AliAnalysisTaskNorm.cxx:849
 AliAnalysisTaskNorm.cxx:850
 AliAnalysisTaskNorm.cxx:851
 AliAnalysisTaskNorm.cxx:852
 AliAnalysisTaskNorm.cxx:853
 AliAnalysisTaskNorm.cxx:854
 AliAnalysisTaskNorm.cxx:855
 AliAnalysisTaskNorm.cxx:856
 AliAnalysisTaskNorm.cxx:857
 AliAnalysisTaskNorm.cxx:858
 AliAnalysisTaskNorm.cxx:859
 AliAnalysisTaskNorm.cxx:860
 AliAnalysisTaskNorm.cxx:861
 AliAnalysisTaskNorm.cxx:862
 AliAnalysisTaskNorm.cxx:863
 AliAnalysisTaskNorm.cxx:864
 AliAnalysisTaskNorm.cxx:865
 AliAnalysisTaskNorm.cxx:866
 AliAnalysisTaskNorm.cxx:867
 AliAnalysisTaskNorm.cxx:868
 AliAnalysisTaskNorm.cxx:869
 AliAnalysisTaskNorm.cxx:870
 AliAnalysisTaskNorm.cxx:871
 AliAnalysisTaskNorm.cxx:872
 AliAnalysisTaskNorm.cxx:873
 AliAnalysisTaskNorm.cxx:874
 AliAnalysisTaskNorm.cxx:875
 AliAnalysisTaskNorm.cxx:876
 AliAnalysisTaskNorm.cxx:877
 AliAnalysisTaskNorm.cxx:878
 AliAnalysisTaskNorm.cxx:879
 AliAnalysisTaskNorm.cxx:880
 AliAnalysisTaskNorm.cxx:881
 AliAnalysisTaskNorm.cxx:882
 AliAnalysisTaskNorm.cxx:883
 AliAnalysisTaskNorm.cxx:884
 AliAnalysisTaskNorm.cxx:885
 AliAnalysisTaskNorm.cxx:886
 AliAnalysisTaskNorm.cxx:887
 AliAnalysisTaskNorm.cxx:888
 AliAnalysisTaskNorm.cxx:889
 AliAnalysisTaskNorm.cxx:890
 AliAnalysisTaskNorm.cxx:891
 AliAnalysisTaskNorm.cxx:892
 AliAnalysisTaskNorm.cxx:893
 AliAnalysisTaskNorm.cxx:894
 AliAnalysisTaskNorm.cxx:895
 AliAnalysisTaskNorm.cxx:896
 AliAnalysisTaskNorm.cxx:897
 AliAnalysisTaskNorm.cxx:898
 AliAnalysisTaskNorm.cxx:899
 AliAnalysisTaskNorm.cxx:900
 AliAnalysisTaskNorm.cxx:901
 AliAnalysisTaskNorm.cxx:902
 AliAnalysisTaskNorm.cxx:903
 AliAnalysisTaskNorm.cxx:904
 AliAnalysisTaskNorm.cxx:905
 AliAnalysisTaskNorm.cxx:906
 AliAnalysisTaskNorm.cxx:907
 AliAnalysisTaskNorm.cxx:908
 AliAnalysisTaskNorm.cxx:909
 AliAnalysisTaskNorm.cxx:910
 AliAnalysisTaskNorm.cxx:911
 AliAnalysisTaskNorm.cxx:912
 AliAnalysisTaskNorm.cxx:913
 AliAnalysisTaskNorm.cxx:914
 AliAnalysisTaskNorm.cxx:915
 AliAnalysisTaskNorm.cxx:916
 AliAnalysisTaskNorm.cxx:917
 AliAnalysisTaskNorm.cxx:918
 AliAnalysisTaskNorm.cxx:919
 AliAnalysisTaskNorm.cxx:920
 AliAnalysisTaskNorm.cxx:921
 AliAnalysisTaskNorm.cxx:922
 AliAnalysisTaskNorm.cxx:923
 AliAnalysisTaskNorm.cxx:924
 AliAnalysisTaskNorm.cxx:925
 AliAnalysisTaskNorm.cxx:926
 AliAnalysisTaskNorm.cxx:927
 AliAnalysisTaskNorm.cxx:928
 AliAnalysisTaskNorm.cxx:929
 AliAnalysisTaskNorm.cxx:930
 AliAnalysisTaskNorm.cxx:931
 AliAnalysisTaskNorm.cxx:932
 AliAnalysisTaskNorm.cxx:933
 AliAnalysisTaskNorm.cxx:934
 AliAnalysisTaskNorm.cxx:935
 AliAnalysisTaskNorm.cxx:936
 AliAnalysisTaskNorm.cxx:937
 AliAnalysisTaskNorm.cxx:938
 AliAnalysisTaskNorm.cxx:939
 AliAnalysisTaskNorm.cxx:940
 AliAnalysisTaskNorm.cxx:941
 AliAnalysisTaskNorm.cxx:942
 AliAnalysisTaskNorm.cxx:943
 AliAnalysisTaskNorm.cxx:944
 AliAnalysisTaskNorm.cxx:945
 AliAnalysisTaskNorm.cxx:946
 AliAnalysisTaskNorm.cxx:947
 AliAnalysisTaskNorm.cxx:948
 AliAnalysisTaskNorm.cxx:949
 AliAnalysisTaskNorm.cxx:950
 AliAnalysisTaskNorm.cxx:951
 AliAnalysisTaskNorm.cxx:952
 AliAnalysisTaskNorm.cxx:953
 AliAnalysisTaskNorm.cxx:954
 AliAnalysisTaskNorm.cxx:955
 AliAnalysisTaskNorm.cxx:956
 AliAnalysisTaskNorm.cxx:957
 AliAnalysisTaskNorm.cxx:958
 AliAnalysisTaskNorm.cxx:959
 AliAnalysisTaskNorm.cxx:960
 AliAnalysisTaskNorm.cxx:961
 AliAnalysisTaskNorm.cxx:962
 AliAnalysisTaskNorm.cxx:963
 AliAnalysisTaskNorm.cxx:964
 AliAnalysisTaskNorm.cxx:965
 AliAnalysisTaskNorm.cxx:966
 AliAnalysisTaskNorm.cxx:967
 AliAnalysisTaskNorm.cxx:968
 AliAnalysisTaskNorm.cxx:969
 AliAnalysisTaskNorm.cxx:970
 AliAnalysisTaskNorm.cxx:971
 AliAnalysisTaskNorm.cxx:972
 AliAnalysisTaskNorm.cxx:973
 AliAnalysisTaskNorm.cxx:974
 AliAnalysisTaskNorm.cxx:975
 AliAnalysisTaskNorm.cxx:976
 AliAnalysisTaskNorm.cxx:977
 AliAnalysisTaskNorm.cxx:978
 AliAnalysisTaskNorm.cxx:979
 AliAnalysisTaskNorm.cxx:980
 AliAnalysisTaskNorm.cxx:981
 AliAnalysisTaskNorm.cxx:982
 AliAnalysisTaskNorm.cxx:983
 AliAnalysisTaskNorm.cxx:984
 AliAnalysisTaskNorm.cxx:985
 AliAnalysisTaskNorm.cxx:986
 AliAnalysisTaskNorm.cxx:987
 AliAnalysisTaskNorm.cxx:988
 AliAnalysisTaskNorm.cxx:989
 AliAnalysisTaskNorm.cxx:990
 AliAnalysisTaskNorm.cxx:991
 AliAnalysisTaskNorm.cxx:992
 AliAnalysisTaskNorm.cxx:993
 AliAnalysisTaskNorm.cxx:994
 AliAnalysisTaskNorm.cxx:995
 AliAnalysisTaskNorm.cxx:996
 AliAnalysisTaskNorm.cxx:997
 AliAnalysisTaskNorm.cxx:998
 AliAnalysisTaskNorm.cxx:999
 AliAnalysisTaskNorm.cxx:1000
 AliAnalysisTaskNorm.cxx:1001
 AliAnalysisTaskNorm.cxx:1002
 AliAnalysisTaskNorm.cxx:1003
 AliAnalysisTaskNorm.cxx:1004
 AliAnalysisTaskNorm.cxx:1005
 AliAnalysisTaskNorm.cxx:1006
 AliAnalysisTaskNorm.cxx:1007
 AliAnalysisTaskNorm.cxx:1008
 AliAnalysisTaskNorm.cxx:1009
 AliAnalysisTaskNorm.cxx:1010
 AliAnalysisTaskNorm.cxx:1011
 AliAnalysisTaskNorm.cxx:1012
 AliAnalysisTaskNorm.cxx:1013
 AliAnalysisTaskNorm.cxx:1014
 AliAnalysisTaskNorm.cxx:1015
 AliAnalysisTaskNorm.cxx:1016
 AliAnalysisTaskNorm.cxx:1017
 AliAnalysisTaskNorm.cxx:1018
 AliAnalysisTaskNorm.cxx:1019
 AliAnalysisTaskNorm.cxx:1020
 AliAnalysisTaskNorm.cxx:1021
 AliAnalysisTaskNorm.cxx:1022
 AliAnalysisTaskNorm.cxx:1023
 AliAnalysisTaskNorm.cxx:1024
 AliAnalysisTaskNorm.cxx:1025
 AliAnalysisTaskNorm.cxx:1026
 AliAnalysisTaskNorm.cxx:1027
 AliAnalysisTaskNorm.cxx:1028
 AliAnalysisTaskNorm.cxx:1029
 AliAnalysisTaskNorm.cxx:1030
 AliAnalysisTaskNorm.cxx:1031
 AliAnalysisTaskNorm.cxx:1032
 AliAnalysisTaskNorm.cxx:1033
 AliAnalysisTaskNorm.cxx:1034
 AliAnalysisTaskNorm.cxx:1035
 AliAnalysisTaskNorm.cxx:1036
 AliAnalysisTaskNorm.cxx:1037
 AliAnalysisTaskNorm.cxx:1038
 AliAnalysisTaskNorm.cxx:1039
 AliAnalysisTaskNorm.cxx:1040
 AliAnalysisTaskNorm.cxx:1041
 AliAnalysisTaskNorm.cxx:1042
 AliAnalysisTaskNorm.cxx:1043
 AliAnalysisTaskNorm.cxx:1044
 AliAnalysisTaskNorm.cxx:1045
 AliAnalysisTaskNorm.cxx:1046
 AliAnalysisTaskNorm.cxx:1047
 AliAnalysisTaskNorm.cxx:1048
 AliAnalysisTaskNorm.cxx:1049
 AliAnalysisTaskNorm.cxx:1050
 AliAnalysisTaskNorm.cxx:1051
 AliAnalysisTaskNorm.cxx:1052
 AliAnalysisTaskNorm.cxx:1053
 AliAnalysisTaskNorm.cxx:1054
 AliAnalysisTaskNorm.cxx:1055
 AliAnalysisTaskNorm.cxx:1056
 AliAnalysisTaskNorm.cxx:1057
 AliAnalysisTaskNorm.cxx:1058
 AliAnalysisTaskNorm.cxx:1059
 AliAnalysisTaskNorm.cxx:1060
 AliAnalysisTaskNorm.cxx:1061
 AliAnalysisTaskNorm.cxx:1062
 AliAnalysisTaskNorm.cxx:1063
 AliAnalysisTaskNorm.cxx:1064
 AliAnalysisTaskNorm.cxx:1065
 AliAnalysisTaskNorm.cxx:1066
 AliAnalysisTaskNorm.cxx:1067
 AliAnalysisTaskNorm.cxx:1068
 AliAnalysisTaskNorm.cxx:1069
 AliAnalysisTaskNorm.cxx:1070
 AliAnalysisTaskNorm.cxx:1071
 AliAnalysisTaskNorm.cxx:1072
 AliAnalysisTaskNorm.cxx:1073
 AliAnalysisTaskNorm.cxx:1074
 AliAnalysisTaskNorm.cxx:1075
 AliAnalysisTaskNorm.cxx:1076
 AliAnalysisTaskNorm.cxx:1077
 AliAnalysisTaskNorm.cxx:1078
 AliAnalysisTaskNorm.cxx:1079
 AliAnalysisTaskNorm.cxx:1080
 AliAnalysisTaskNorm.cxx:1081
 AliAnalysisTaskNorm.cxx:1082
 AliAnalysisTaskNorm.cxx:1083
 AliAnalysisTaskNorm.cxx:1084
 AliAnalysisTaskNorm.cxx:1085
 AliAnalysisTaskNorm.cxx:1086
 AliAnalysisTaskNorm.cxx:1087
 AliAnalysisTaskNorm.cxx:1088
 AliAnalysisTaskNorm.cxx:1089
 AliAnalysisTaskNorm.cxx:1090
 AliAnalysisTaskNorm.cxx:1091
 AliAnalysisTaskNorm.cxx:1092
 AliAnalysisTaskNorm.cxx:1093
 AliAnalysisTaskNorm.cxx:1094
 AliAnalysisTaskNorm.cxx:1095
 AliAnalysisTaskNorm.cxx:1096
 AliAnalysisTaskNorm.cxx:1097
 AliAnalysisTaskNorm.cxx:1098
 AliAnalysisTaskNorm.cxx:1099
 AliAnalysisTaskNorm.cxx:1100
 AliAnalysisTaskNorm.cxx:1101
 AliAnalysisTaskNorm.cxx:1102
 AliAnalysisTaskNorm.cxx:1103
 AliAnalysisTaskNorm.cxx:1104
 AliAnalysisTaskNorm.cxx:1105
 AliAnalysisTaskNorm.cxx:1106
 AliAnalysisTaskNorm.cxx:1107
 AliAnalysisTaskNorm.cxx:1108
 AliAnalysisTaskNorm.cxx:1109
 AliAnalysisTaskNorm.cxx:1110
 AliAnalysisTaskNorm.cxx:1111
 AliAnalysisTaskNorm.cxx:1112
 AliAnalysisTaskNorm.cxx:1113
 AliAnalysisTaskNorm.cxx:1114
 AliAnalysisTaskNorm.cxx:1115
 AliAnalysisTaskNorm.cxx:1116
 AliAnalysisTaskNorm.cxx:1117
 AliAnalysisTaskNorm.cxx:1118
 AliAnalysisTaskNorm.cxx:1119
 AliAnalysisTaskNorm.cxx:1120
 AliAnalysisTaskNorm.cxx:1121
 AliAnalysisTaskNorm.cxx:1122
 AliAnalysisTaskNorm.cxx:1123
 AliAnalysisTaskNorm.cxx:1124
 AliAnalysisTaskNorm.cxx:1125
 AliAnalysisTaskNorm.cxx:1126
 AliAnalysisTaskNorm.cxx:1127
 AliAnalysisTaskNorm.cxx:1128
 AliAnalysisTaskNorm.cxx:1129
 AliAnalysisTaskNorm.cxx:1130
 AliAnalysisTaskNorm.cxx:1131
 AliAnalysisTaskNorm.cxx:1132
 AliAnalysisTaskNorm.cxx:1133
 AliAnalysisTaskNorm.cxx:1134
 AliAnalysisTaskNorm.cxx:1135
 AliAnalysisTaskNorm.cxx:1136
 AliAnalysisTaskNorm.cxx:1137
 AliAnalysisTaskNorm.cxx:1138
 AliAnalysisTaskNorm.cxx:1139
 AliAnalysisTaskNorm.cxx:1140
 AliAnalysisTaskNorm.cxx:1141
 AliAnalysisTaskNorm.cxx:1142
 AliAnalysisTaskNorm.cxx:1143
 AliAnalysisTaskNorm.cxx:1144
 AliAnalysisTaskNorm.cxx:1145
 AliAnalysisTaskNorm.cxx:1146
 AliAnalysisTaskNorm.cxx:1147
 AliAnalysisTaskNorm.cxx:1148
 AliAnalysisTaskNorm.cxx:1149
 AliAnalysisTaskNorm.cxx:1150
 AliAnalysisTaskNorm.cxx:1151
 AliAnalysisTaskNorm.cxx:1152
 AliAnalysisTaskNorm.cxx:1153
 AliAnalysisTaskNorm.cxx:1154
 AliAnalysisTaskNorm.cxx:1155
 AliAnalysisTaskNorm.cxx:1156
 AliAnalysisTaskNorm.cxx:1157
 AliAnalysisTaskNorm.cxx:1158
 AliAnalysisTaskNorm.cxx:1159
 AliAnalysisTaskNorm.cxx:1160
 AliAnalysisTaskNorm.cxx:1161
 AliAnalysisTaskNorm.cxx:1162
 AliAnalysisTaskNorm.cxx:1163
 AliAnalysisTaskNorm.cxx:1164
 AliAnalysisTaskNorm.cxx:1165
 AliAnalysisTaskNorm.cxx:1166
 AliAnalysisTaskNorm.cxx:1167
 AliAnalysisTaskNorm.cxx:1168
 AliAnalysisTaskNorm.cxx:1169
 AliAnalysisTaskNorm.cxx:1170
 AliAnalysisTaskNorm.cxx:1171
 AliAnalysisTaskNorm.cxx:1172
 AliAnalysisTaskNorm.cxx:1173
 AliAnalysisTaskNorm.cxx:1174
 AliAnalysisTaskNorm.cxx:1175
 AliAnalysisTaskNorm.cxx:1176
 AliAnalysisTaskNorm.cxx:1177
 AliAnalysisTaskNorm.cxx:1178
 AliAnalysisTaskNorm.cxx:1179
 AliAnalysisTaskNorm.cxx:1180
 AliAnalysisTaskNorm.cxx:1181
 AliAnalysisTaskNorm.cxx:1182
 AliAnalysisTaskNorm.cxx:1183
 AliAnalysisTaskNorm.cxx:1184
 AliAnalysisTaskNorm.cxx:1185
 AliAnalysisTaskNorm.cxx:1186
 AliAnalysisTaskNorm.cxx:1187
 AliAnalysisTaskNorm.cxx:1188
 AliAnalysisTaskNorm.cxx:1189
 AliAnalysisTaskNorm.cxx:1190
 AliAnalysisTaskNorm.cxx:1191
 AliAnalysisTaskNorm.cxx:1192
 AliAnalysisTaskNorm.cxx:1193