ROOT logo
/**************************************************************************
 * Copyright(c) 1998-2007, 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 AliAnalysisTaskSingleMu
/// Analysis task for single muons in the spectrometer.
/// The output is a list of histograms and CF containers.
/// The macro class can run on AODs or ESDs.
/// If Monte Carlo information is present, some basics checks are performed.
///
/// \author Diego Stocco
//-----------------------------------------------------------------------------

#define AliAnalysisTaskSingleMu_cxx

#include "AliAnalysisTaskSingleMu.h"

// ROOT includes
#include "TROOT.h"
#include "TH1.h"
#include "TH2.h"
#include "TAxis.h"
#include "TCanvas.h"
#include "TLegend.h"
#include "TMath.h"
#include "TObjString.h"
#include "TObjArray.h"
#include "TF1.h"
#include "TStyle.h"
//#include "TMCProcess.h"
#include "TArrayI.h"
#include "TArrayD.h"
#include "TPaveStats.h"
#include "TFitResultPtr.h"
#include "TFile.h"
#include "THashList.h"

// STEER includes
#include "AliAODEvent.h"
#include "AliAODTrack.h"
#include "AliAODMCParticle.h"
#include "AliMCEvent.h"
#include "AliMCParticle.h"
#include "AliESDEvent.h"
#include "AliESDMuonTrack.h"
#include "AliVHeader.h"
#include "AliAODMCHeader.h"
#include "AliStack.h"

// ANALYSIS includes
#include "AliAnalysisManager.h"

// CORRFW includes
#include "AliCFContainer.h"
#include "AliCFGridSparse.h"
#include "AliCFEffGrid.h"

// PWG includes
#include "AliVAnalysisMuon.h"
#include "AliMergeableCollection.h"
#include "AliCounterCollection.h"
#include "AliMuonEventCuts.h"
#include "AliMuonTrackCuts.h"
#include "AliAnalysisMuonUtility.h"


/// \cond CLASSIMP
ClassImp(AliAnalysisTaskSingleMu) // Class implementation in ROOT context
/// \endcond


//________________________________________________________________________
AliAnalysisTaskSingleMu::AliAnalysisTaskSingleMu() :
  AliVAnalysisMuon(),
  fThetaAbsKeys(0x0),
  fCutOnDimu(kFALSE)
{
  /// Default ctor.
}

//________________________________________________________________________
AliAnalysisTaskSingleMu::AliAnalysisTaskSingleMu(const char *name, const AliMuonTrackCuts& cuts) :
  AliVAnalysisMuon(name, cuts),
  fThetaAbsKeys(0x0),
  fCutOnDimu(kFALSE)
{
  //
  /// Constructor.
  //
  TString thetaAbsKeys = "ThetaAbs23 ThetaAbs310";
  fThetaAbsKeys = thetaAbsKeys.Tokenize(" ");
}


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

  delete fThetaAbsKeys;
}

//___________________________________________________________________________
void AliAnalysisTaskSingleMu::MyUserCreateOutputObjects()
{

  TH1* histo = 0x0;
  TString histoName = "", histoTitle = "";
  
  Int_t nVzBins = 40;
  Double_t vzMin = -20., vzMax = 20.;
  TString vzName("Vz"), vzTitle("Vz"), vzUnits("cm");  
  
  histoName = "hIpVtx";
  histo = new TH1F(histoName.Data(), histoName.Data(), nVzBins, vzMin, vzMax);
  histo->SetXTitle("v_{z} (cm)");
  AddObjectToCollection(histo, kIPVz);

  
  Int_t nPtBins = 80;
  Double_t ptMin = 0., ptMax = 80.;
  TString ptName("Pt"), ptTitle("p_{T}"), ptUnits("GeV/c");
  
  Int_t nEtaBins = 25;
  Double_t etaMin = -4.5, etaMax = -2.;
  TString etaName("Eta"), etaTitle("#eta"), etaUnits("");
  
  Int_t nPhiBins = 36;
  Double_t phiMin = 0.; Double_t phiMax = 2.*TMath::Pi();
  TString phiName("Phi"), phiTitle("#phi"), phiUnits("rad");
    
  Int_t nChargeBins = 2;
  Double_t chargeMin = -2, chargeMax = 2.;
  TString chargeName("Charge"), chargeTitle("charge"), chargeUnits("e");
  
  Int_t nThetaAbsEndBins = 2;
  Double_t thetaAbsEndMin = -0.5, thetaAbsEndMax = 1.5;
  TString thetaAbsEndName("ThetaAbsEnd"), thetaAbsEndTitle("#theta_{abs}"), thetaAbsEndUnits("a.u.");    
  
  Int_t nMotherTypeBins = kNtrackSources;
  Double_t motherTypeMin = -0.5, motherTypeMax = (Double_t)kNtrackSources - 0.5;
  TString motherType("MotherType"), motherTypeTitle("motherType"), motherTypeUnits("");
    
  Int_t nbins[kNvars] = {nPtBins, nEtaBins, nPhiBins, nVzBins, nChargeBins, nThetaAbsEndBins, nMotherTypeBins};
  Double_t xmin[kNvars] = {ptMin, etaMin, phiMin, vzMin, chargeMin, thetaAbsEndMin, motherTypeMin};
  Double_t xmax[kNvars] = {ptMax, etaMax, phiMax, vzMax, chargeMax, thetaAbsEndMax, motherTypeMax};
  TString axisTitle[kNvars] = {ptTitle, etaTitle, phiTitle, vzTitle, chargeTitle, thetaAbsEndTitle, motherTypeTitle};
  TString axisUnits[kNvars] = {ptUnits, etaUnits, phiUnits, vzUnits, chargeUnits, thetaAbsEndUnits, motherTypeUnits};

  AliCFContainer* cfContainer = new AliCFContainer("SingleMuContainer","Container for tracks",kNsteps,kNvars,nbins);
  
  for ( Int_t idim = 0; idim<kNvars; idim++){
    histoTitle = Form("%s (%s)", axisTitle[idim].Data(), axisUnits[idim].Data());
    histoTitle.ReplaceAll("()","");
    
    cfContainer->SetVarTitle(idim, histoTitle.Data());
    cfContainer->SetBinLimits(idim, xmin[idim], xmax[idim]);
  }
  
  TString stepTitle[kNsteps] = {"reconstructed", "generated"};

  TAxis* currAxis = 0x0;
  for (Int_t istep=0; istep<kNsteps; istep++){
    cfContainer->SetStepTitle(istep, stepTitle[istep].Data());
    AliCFGridSparse* gridSparse = cfContainer->GetGrid(istep);
        
    currAxis = gridSparse->GetAxis(kHvarMotherType);
    for ( Int_t ibin=0; ibin<fSrcKeys->GetEntries(); ibin++ ) {
      currAxis->SetBinLabel(ibin+1, fSrcKeys->At(ibin)->GetName());
    }
  }
  
  AddObjectToCollection(cfContainer, kTrackContainer);
  
  histoName = "hRecoDimu";
  TH2* histoDimu = new TH2F(histoName.Data(), histoName.Data(), 24, 0., 120., 30, 0., 150.);
  histoDimu->SetXTitle("min. p_{T}^{#mu} (GeV/c)");
  histoDimu->SetYTitle("M_{#mu#mu} (GeV/c^{2})");
  AddObjectToCollection(histoDimu, kNobjectTypes);
  
  histoName = "hGeneratedZ";
  TH2* histoGenZ = static_cast<TH2*>(histoDimu->Clone(histoName.Data()));
  histoGenZ->SetTitle(histoName.Data());
  AddObjectToCollection(histoGenZ, kNobjectTypes+1);
  
  
  histoName = "hZmuEtaCorr";
  histoDimu = new TH2F(histoName.Data(), histoName.Data(), 160, -8., 8., 160, -8., 8.);
  histoDimu->SetXTitle("#eta_{#mu-}");
  histoDimu->SetYTitle("#eta_{#mu+}");
  AddObjectToCollection(histoDimu, kNobjectTypes+2);
  
  fMuonTrackCuts->Print("mask");
  
  AliInfo(Form("Apply cut on dimuon (60<M_mumu<120 GeV/c^2) to reject Z contribution: %i", fCutOnDimu));
}

//________________________________________________________________________
void AliAnalysisTaskSingleMu::ProcessEvent(TString physSel, const TObjArray& selectTrigClasses, TString centrality)
{
  //
  /// Fill output objects
  //

  Double_t ipVz = AliAnalysisMuonUtility::GetVertexSPD(InputEvent())->GetZ();
  Double_t ipVzMC = MCEvent() ? AliAnalysisMuonUtility::GetMCVertexZ(InputEvent(),MCEvent()) : 0.;
  
  for ( Int_t itrig=0; itrig<selectTrigClasses.GetEntries(); ++itrig ) {
    TString trigClassName = ((TObjString*)selectTrigClasses.At(itrig))->GetString();
    ((TH1*)GetMergeableObject(physSel, trigClassName, centrality, "hIpVtx"))->Fill(ipVz);
  }
  
  // Bool_t isPileupFromSPD = ( fAODEvent && ! fAODEvent->GetTracklets() ) ? InputEvent()->IsPileupFromSPD(3, 0.8, 3., 2., 5.) : InputEvent()->IsPileupFromSPDInMultBins(); // Avoid break when reading Muon AODs (tracklet info is not present and IsPileupFromSPDInMultBins crashes // UNCOMMENT TO REJECT PILEUP
  // if ( isPileupFromSPD ) return; // UNCOMMENT TO REJECT PILEUP
  
  Double_t containerInput[kNvars];
  AliVParticle* track = 0x0;

  Int_t nSteps = MCEvent() ? 2 : 1;
  for ( Int_t istep = 0; istep<nSteps; ++istep ) {
    Int_t nTracks = ( istep == kStepReconstructed ) ? AliAnalysisMuonUtility::GetNTracks(InputEvent()) : MCEvent()->GetNumberOfTracks();
    
    TObjArray selectedTracks(nTracks);
    TArrayI trackSources(nTracks);
    TArrayD trackWgt(nTracks);
    trackWgt.Reset(1.);
    for (Int_t itrack = 0; itrack < nTracks; itrack++) {
      track = ( istep == kStepReconstructed ) ? AliAnalysisMuonUtility::GetTrack(itrack,InputEvent()) : MCEvent()->GetTrack(itrack);
      
      // In case of MC we usually ask that the particle is a muon
      // However, in W or Z simulations, Pythia stores both the initial muon
      // (before ISR, FSR and kt kick) and the final state one.
      // The first muon is of course there only for information and should be rejected.
      // The Pythia code for initial state particles is 21
      Bool_t isSelected = ( istep == kStepReconstructed ) ? fMuonTrackCuts->IsSelected(track) : ( TMath::Abs(track->PdgCode()) == 13 && AliAnalysisMuonUtility::GetStatusCode(track) != 21 );
      if ( ! isSelected ) continue;
      
      selectedTracks.AddAt(track,itrack);
      trackSources[itrack] = GetParticleType(track);
      
      TObject* wgtObj = GetWeight(fSrcKeys->At(trackSources[itrack])->GetName());
      
      if ( wgtObj  ) {
        AliVParticle* mcTrack = ( istep == kStepReconstructed ) ? MCEvent()->GetTrack(track->GetLabel()) : track;
        if ( wgtObj->IsA() == TF1::Class() ) trackWgt[itrack] = static_cast<TF1*>(wgtObj)->Eval(mcTrack->Pt());
        else if ( wgtObj->IsA()->InheritsFrom(TH1::Class()) ) {
          TH1* wgtHisto = static_cast<TH1*>(wgtObj);
          trackWgt[itrack] = wgtHisto->GetBinContent(wgtHisto->GetXaxis()->FindBin(mcTrack->Pt()));
        }
        AliDebug(3,Form("Apply weights %s:  pt %g  gen pt %g  weight %g",wgtObj->GetName(),track->Pt(),mcTrack->Pt(),trackWgt[itrack]));
//        Int_t iancestor = fUtilityMuonAncestor->GetAncestor(track,MCEvent());
//        AliVParticle* motherPart = MCEvent()->GetTrack(iancestor);
//        trackWgt[itrack] = beautyMuWgt->GetBinContent(beautyMuWgt->GetXaxis()->FindBin(motherPart->Pt()));
      }
    } // loop on tracks
    
    // Loop on selected tracks
    TArrayI rejectTrack(nTracks);
    for ( Int_t itrack=0; itrack<nTracks; itrack++) {
      track = static_cast<AliVParticle*>(selectedTracks.At(itrack));
      if ( ! track ) continue;
      
      // Check dimuons
      for ( Int_t jtrack=itrack+1; jtrack<nTracks; jtrack++ ) {
        AliVParticle* auxTrack = static_cast<AliVParticle*>(selectedTracks.At(jtrack));
        if ( ! auxTrack ) continue;
        if ( track->Charge() * auxTrack->Charge() >= 0 ) continue;
          
        TLorentzVector dimuPair = AliAnalysisMuonUtility::GetTrackPair(track,auxTrack);
        Double_t ptMin = TMath::Min(track->Pt(),auxTrack->Pt());
        Double_t invMass = dimuPair.M();
        if ( fCutOnDimu && invMass > 60. && invMass < 120. ) {
          rejectTrack[itrack] = 1;
          rejectTrack[jtrack] = 1;
        }
        Double_t dimuWgt = trackWgt[itrack] * trackWgt[jtrack];
        if ( istep == kStepReconstructed ) {
          for ( Int_t itrig=0; itrig<selectTrigClasses.GetEntries(); ++itrig ) {
            TString trigClassName = ((TObjString*)selectTrigClasses.At(itrig))->GetString();
            if ( ! fMuonTrackCuts->TrackPtCutMatchTrigClass(track, fMuonEventCuts->GetTrigClassPtCutLevel(trigClassName)) || ! fMuonTrackCuts->TrackPtCutMatchTrigClass(auxTrack, fMuonEventCuts->GetTrigClassPtCutLevel(trigClassName)) ) continue;
            ((TH2*)GetMergeableObject(physSel, trigClassName, centrality, "hRecoDimu"))->Fill(ptMin,invMass,dimuWgt);
          } // loop on triggers
        }
        else {
          if ( trackSources[itrack] == kZbosonMu && trackSources[jtrack] == kZbosonMu ) {
            Bool_t isAccepted = kTRUE;
            AliVParticle* muDaughter[2] = {0x0, 0x0};
            for ( Int_t imu=0; imu<2; imu++ ) {
              AliVParticle* currPart = ( imu == 0 ) ? track : auxTrack;
              if ( currPart->Charge() < 0. ) muDaughter[0] = currPart;
              else muDaughter[1] = currPart;
              if ( currPart->Eta() < -4.5 || currPart->Eta() > -2. ) {
                isAccepted = kFALSE;
              }
            } // loop on muons in the pair
              
            Double_t pairRapidity = dimuPair.Rapidity();
            if ( pairRapidity < -4. || pairRapidity > -2.5 ) isAccepted = kFALSE;
            //printf("Rapidity Z %g  pair %g\n",track->Y(), pairRapidity);
              
            for ( Int_t itrig=0; itrig<selectTrigClasses.GetEntries(); ++itrig ) {
              TString trigClassName = ((TObjString*)selectTrigClasses.At(itrig))->GetString();
              if ( isAccepted ) ((TH2*)GetMergeableObject(physSel, trigClassName, centrality, "hGeneratedZ"))->Fill(ptMin,invMass,dimuWgt);
              ((TH2*)GetMergeableObject(physSel, trigClassName, centrality, "hZmuEtaCorr"))->Fill(muDaughter[0]->Eta(),muDaughter[1]->Eta(),dimuWgt);
            } // loop on selected trig
          } // both muons from Z
        } // kStepGeneratedMC
      } // loop on auxiliary tracks
      if ( rejectTrack[itrack] > 0 ) continue;
      
      Double_t thetaAbsEndDeg = 0;
      if ( istep == kStepReconstructed ) {
        thetaAbsEndDeg = AliAnalysisMuonUtility::GetThetaAbsDeg(track);
      }
      else {
        thetaAbsEndDeg = ( TMath::Pi()-track->Theta() ) * TMath::RadToDeg();
      }
      Int_t thetaAbsBin = ( thetaAbsEndDeg < 3. ) ? kThetaAbs23 : kThetaAbs310;

      containerInput[kHvarPt]         = track->Pt();
      containerInput[kHvarEta]        = track->Eta();
      containerInput[kHvarPhi]        = track->Phi();
      containerInput[kHvarVz]         = ( istep == kStepReconstructed ) ? ipVz : ipVzMC;
      containerInput[kHvarCharge]     = track->Charge()/3.;
      containerInput[kHvarThetaAbs]   = (Double_t)thetaAbsBin;
      containerInput[kHvarMotherType] = (Double_t)trackSources[itrack];
      
      for ( Int_t itrig=0; itrig<selectTrigClasses.GetEntries(); ++itrig ) {
        TString trigClassName = ((TObjString*)selectTrigClasses.At(itrig))->GetString();
        if ( istep == kStepReconstructed && ! fMuonTrackCuts->TrackPtCutMatchTrigClass(track, fMuonEventCuts->GetTrigClassPtCutLevel(trigClassName)) ) continue;
        ((AliCFContainer*)GetMergeableObject(physSel, trigClassName, centrality, "SingleMuContainer"))->Fill(containerInput,istep,trackWgt[itrack]);
      } // loop on selected trigger classes
    } // loop on tracks
  } // loop on container steps
}


//________________________________________________________________________
void AliAnalysisTaskSingleMu::Terminate(Option_t *) {
  //
  /// Draw some histograms at the end.
  //
  
  AliVAnalysisMuon::Terminate("");
  
  if ( ! fMergeableCollection ) return;
  
  TString physSel = fTerminateOptions->At(0)->GetName();
  TString trigClassName = fTerminateOptions->At(1)->GetName();
  TString centralityRange = fTerminateOptions->At(2)->GetName();
  TString furtherOpt = fTerminateOptions->At(3)->GetName();
  
  TString minBiasTrig = "";
  TObjArray* optArr = furtherOpt.Tokenize(" ");
  TString currName = "";
  for ( Int_t iopt=0; iopt<optArr->GetEntries(); iopt++ ) {
    currName = optArr->At(iopt)->GetName();
    if ( currName.Contains("-B-") || currName.Contains("ANY") ) minBiasTrig = currName;
  }
  delete optArr;
  
  furtherOpt.ToUpper();
  Bool_t plotChargeAsymmetry = furtherOpt.Contains("ASYM");
  
  AliCFContainer* inContainer = static_cast<AliCFContainer*> ( GetSum(physSel,trigClassName,centralityRange,"SingleMuContainer") );
  if ( ! inContainer ) return;
  
  AliCFContainer* cfContainer = inContainer;
  
  if ( ! furtherOpt.Contains("GENINTRIGCLASS") && trigClassName != "ANY" ) {
    // The output container contains both the reconstructed and (in MC)
    // the generated muons in a specific trigger class.
    // Since the trigger pt level of the track is matched to the trigger class,
    // analyzing the MUHigh trigger (for example) is equivalent of analyzing
    // Hpt tracks.
    // However, in this way, the generated muons distribution depend
    // on a condition on the reconstructed track.
    // If we calculate the Acc.xEff. as the ratio of reconstructed and
    // generated muons IN A TRIGGER CLASS, we are biasing the final result.
    // The correct value of Acc.xEff. is hence obtained as the distribution
    // of reconstructed tracks in a muon trigger class, divided by the
    // total number of generated class (which is in the "class" ANY).
    // The following code sets the generated muons as the one in the class ANY.
    // The feature is the default. If you want the generated muons in the same
    // trigger class as the generated tracks, use option "GENINTRIGCLASS"
    AliCFContainer* fullMCcontainer = static_cast<AliCFContainer*> ( GetSum(physSel,"ANY",centralityRange,"SingleMuContainer") );
    if ( fullMCcontainer ) {
      cfContainer = static_cast<AliCFContainer*>(cfContainer->Clone("SingleMuContainerCombo"));
      cfContainer->SetGrid(kStepGeneratedMC,fullMCcontainer->GetGrid(kStepGeneratedMC));
    }
  }
  
  AliCFEffGrid* effSparse = new AliCFEffGrid(Form("eff%s", cfContainer->GetName()),Form("Efficiency %s", cfContainer->GetTitle()),*cfContainer);
  effSparse->CalculateEfficiency(kStepReconstructed, kStepGeneratedMC);
  
  AliCFGridSparse* gridSparseArray[3] = {effSparse->GetNum(), effSparse->GetDen(), effSparse};
  TString gridSparseName[3] = {cfContainer->GetStepTitle(kStepReconstructed), cfContainer->GetStepTitle(kStepGeneratedMC), "Efficiency"};
  
  Int_t srcColors[kNtrackSources] = {kBlack, kRed, kSpring, kTeal, kBlue, kViolet, kMagenta, kOrange, kGray};
  //  TString allSrcNames = "";
  //  for ( Int_t isrc=0; isrc<kNtrackSources; ++isrc ) {
  //    if ( ! allSrcNames.IsNull() ) allSrcNames.Append(" ");
  //    allSrcNames += fSrcKeys->At(isrc)->GetName();
  //  }
  
  TCanvas* can = 0x0;
  Int_t xshift = 100;
  Int_t yshift = 100;
  Int_t igroup1 = -1;
  Int_t igroup2 = 0;
  
  Bool_t isMC = furtherOpt.Contains("MC");
  
  TAxis* srcAxis = gridSparseArray[0]->GetAxis(kHvarMotherType);
  Int_t unIdBin = srcAxis->FindBin(fSrcKeys->At(kUnidentified)->GetName());
  if ( unIdBin < 1 ) unIdBin = srcAxis->GetNbins();
  
  Int_t firstSrcBin = ( isMC ) ? 1 : unIdBin;
  Int_t lastSrcBin  = ( isMC ) ? srcAxis->GetNbins() - 1 : unIdBin;
  if ( ! isMC ) srcColors[unIdBin-1] = 1;
  
  ////////////////
  // Kinematics //
  ////////////////
  TString chargeNames[3] = {fChargeKeys->At(0)->GetName(), fChargeKeys->At(1)->GetName(), "Total"};
  THashList histoList[3];
  for ( Int_t icharge=0; icharge<3; icharge++ ) {
    histoList[icharge].SetName(chargeNames[icharge].Data());
  }
  for ( Int_t isrc = firstSrcBin; isrc <= lastSrcBin; ++isrc ) {
    for ( Int_t icharge=0; icharge<3; ++icharge ) {
      Int_t icharge1 = ( icharge < 2 ) ? icharge : 0;
      Int_t icharge2 = ( icharge < 2 ) ? icharge : 1;
      for ( Int_t igrid=0; igrid<3; ++igrid ) {
        if ( gridSparseArray[igrid]->GetEntries() == 0. ) break;
        if ( gridSparseArray[igrid]->IsA() != AliCFEffGrid::Class() ) {
          SetSparseRange(gridSparseArray[igrid], kHvarEta, "", -3.999, -2.501);
          SetSparseRange(gridSparseArray[igrid], kHvarMotherType, "", isrc, isrc, "USEBIN");
          SetSparseRange(gridSparseArray[igrid], kHvarCharge, "", icharge1+1, icharge2+1, "USEBIN");
        }
        TH1* histo = gridSparseArray[igrid]->Project(kHvarPt, kHvarEta);
        histo->SetName(Form("hPtEta_%s_%s_%s", gridSparseName[igrid].Data(), srcAxis->GetBinLabel(isrc), chargeNames[icharge].Data()));
        if ( histo->Integral() > 0 ) histoList[icharge].Add(histo);
        for ( Int_t iproj=0; iproj<4; ++iproj ) {
          histo = gridSparseArray[igrid]->Project(iproj);
          histo->SetName(Form("proj%i_%s_%s_%s", iproj, gridSparseName[igrid].Data(), srcAxis->GetBinLabel(isrc), chargeNames[icharge].Data()));
          if ( histo->Integral() > 0 ) histoList[icharge].Add(histo);
        } // loop on projections
      } // loop on grid sparse
    } // loop on charge
  } // loop on track sources
  
  // Get charge asymmetry or mu+/mu-
  THashList histoListRatio;
  TString basePlotName = plotChargeAsymmetry ? "ChargeAsymmetry" : "ChargeRatio";
  histoListRatio.SetName(basePlotName.Data());
  Int_t baseCharge = 1;
  Int_t auxCharge = 1-baseCharge;
  for ( Int_t ihisto=0; ihisto<histoList[baseCharge].GetEntries(); ihisto++ ) {
    TObject* obj = histoList[baseCharge].At(ihisto);
    TString histoName = obj->GetName();
    if ( histoName.Contains(gridSparseName[2].Data()) ) continue;
    TString searchName = histoName;
    searchName.ReplaceAll(fChargeKeys->At(baseCharge)->GetName(), fChargeKeys->At(auxCharge)->GetName());
    TH1* auxHisto = static_cast<TH1*> (histoList[auxCharge].FindObject(searchName.Data()));
    if ( ! auxHisto ) continue;
    histoName.ReplaceAll(fChargeKeys->At(baseCharge)->GetName(),basePlotName.Data());
    TH1* histo = static_cast<TH1*> (obj->Clone(histoName.Data()));
    if ( plotChargeAsymmetry ) {
      histo->Add(auxHisto, -1.);
      // h2 + h1 = 2xh2 + (h1-h2)
      auxHisto->Add(auxHisto, histo, 2.);
    }
    histo->Divide(auxHisto);
    TString axisTitle = plotChargeAsymmetry ? Form("(%s - %s) / (%s + %s)", fChargeKeys->At(1)->GetName(), fChargeKeys->At(0)->GetName(), fChargeKeys->At(1)->GetName(), fChargeKeys->At(0)->GetName()) : Form("%s / %s", fChargeKeys->At(1)->GetName(), fChargeKeys->At(0)->GetName());
    axisTitle.ReplaceAll("MuPlus","#mu^{+}");
    axisTitle.ReplaceAll("MuMinus","#mu^{-}");
    histo->GetYaxis()->SetTitle(axisTitle.Data());
    histo->SetStats(kFALSE);
    histoListRatio.Add(histo);
  }
  
  // Plot kinematics
  TString histoName = "", drawOpt = "";
  for ( Int_t itype=0; itype<3; itype++ ) {
    THashList* currList = 0x0;
    Int_t nCharges = 1;
    if ( itype == 1 ) currList = &histoListRatio;
    else if ( itype == 2 ) currList = &histoList[2];
    else nCharges = 2;
    for ( Int_t igrid=0; igrid<3; ++igrid ) {
      igroup1 = igrid;
      TCanvas* canKine = 0x0;
      TLegend* legKine = 0x0;
      for ( Int_t iproj=0; iproj<4; ++iproj ) {
        for ( Int_t isrc = firstSrcBin; isrc <= lastSrcBin; ++isrc ) {
          for ( Int_t icharge=0; icharge<nCharges; ++icharge ) {
            if ( itype == 0 ) currList = &histoList[icharge];
            histoName = Form("proj%i_%s_%s_%s", iproj, gridSparseName[igrid].Data(), srcAxis->GetBinLabel(isrc), currList->GetName());
            TH1* histo = static_cast<TH1*>(currList->FindObject(histoName.Data()));
            if ( ! histo ) continue;
            if ( ! canKine ) {
              igroup2 = itype;
              igroup1 = igrid;
              currName = Form("%s_%s_%s", GetName(), currList->GetName(), gridSparseName[igrid].Data());
              canKine = new TCanvas(currName.Data(),currName.Data(),igroup1*xshift,igroup2*yshift,600,600);
              canKine->Divide(2,2);
              legKine = new TLegend(0.6, 0.6, 0.8, 0.8);
            }
            canKine->cd(iproj+1);
            if ( itype != 1 ) {
              if ( ( iproj == kHvarPt || iproj == kHvarVz ) && gridSparseArray[igrid]->IsA() != AliCFEffGrid::Class() ) gPad->SetLogy();
            }
            Bool_t isFirst = ( gPad->GetListOfPrimitives()->GetEntries() == 0 );
            drawOpt = isFirst ? "e" : "esames";
            histo->SetLineColor(srcColors[isrc-1]);
            histo->SetMarkerColor(srcColors[isrc-1]);
            histo->SetMarkerStyle(20+4*icharge);
            histo->Draw(drawOpt.Data());
            TPaveStats* paveStats = (TPaveStats*)histo->FindObject("stats");
            if ( paveStats ) paveStats->SetTextColor(srcColors[isrc-1]);
            if ( iproj == 0 ) {
              TString legEntry = ( itype == 0 ) ? fChargeKeys->At(icharge)->GetName() : "";
              if ( isMC ) legEntry += Form(" %s", srcAxis->GetBinLabel(isrc));
              if ( ! legEntry.IsNull() ) legKine->AddEntry(histo,legEntry.Data(), "lp");
            }
          } // loop on mu charge
        } // loop on track sources
      } // loop on projections
      if ( legKine && legKine->GetNRows() > 0 ) {
        canKine->cd(1);
        legKine->Draw("same");
      }
    } // loop on grid sparse
  } // loop on types
  
  
  for ( Int_t igrid=0; igrid<3; igrid++ ) {
    if ( gridSparseArray[igrid]->IsA() == AliCFEffGrid::Class() ) continue;
    SetSparseRange(gridSparseArray[igrid], kHvarCharge, "", 1, gridSparseArray[igrid]->GetAxis(kHvarCharge)->GetNbins(), "USEBIN"); // Reset range
  } // loop on container steps
  
  //////////////////////
  // Event statistics //
  //////////////////////
  printf("\nTotal analyzed events:\n");
  TString evtSel = Form("trigger:%s", trigClassName.Data());
  fEventCounters->PrintSum(evtSel.Data());
  printf("Physics selected analyzed events:\n");
  evtSel = Form("trigger:%s/selected:yes", trigClassName.Data());
  fEventCounters->PrintSum(evtSel.Data());
  
  TString countPhysSel = "any";
  if ( physSel.Contains(fPhysSelKeys->At(kPhysSelPass)->GetName()) ) countPhysSel = "yes";
  else if ( physSel.Contains(fPhysSelKeys->At(kPhysSelReject)->GetName()) ) countPhysSel="no";
  countPhysSel.Prepend("selected:");
  printf("Analyzed events vs. centrality:\n");
  evtSel = Form("trigger:%s/%s", trigClassName.Data(), countPhysSel.Data());
  fEventCounters->Print("centrality",evtSel.Data(),kTRUE);
  
  
  TString outFilename = Form("/tmp/out%s.root", GetName());
  TFile* outFile = new TFile(outFilename.Data(),"RECREATE");
  for ( Int_t icharge=0; icharge<3; icharge++ ) {
    histoList[icharge].Write();
  }
  histoListRatio.Write();
  outFile->Close();
  printf("\nCreating file %s\n", outFilename.Data(
         ));
  
  ///////////////////
  // Vertex method //
  ///////////////////
  if ( ! furtherOpt.Contains("VERTEX") ) return;
  igroup1++;
  TH1* eventVertex = (TH1*)GetSum(physSel, minBiasTrig, centralityRange, "hIpVtx");
  if ( ! eventVertex ) return;
  Double_t minZ = -9.99, maxZ = 9.99;
  Double_t meanZ = 0., sigmaZ = 4.;
  Double_t nSigma = 2.;
  TString fitOpt = "R0S";
  Bool_t fixFitRange = kFALSE;
  TString fitFormula = Form("[0]+[1]*(x+[2])");
  
  // Get vertex shape
  if ( eventVertex->GetSumw2N() == 0 ) eventVertex->Sumw2();
  Double_t eventVtxIntegral = eventVertex->Integral(0,eventVertex->GetNbinsX()+1); // Include under/overflow
  printf("Event vertex integral %.0f\n\n", eventVtxIntegral);
  if ( eventVtxIntegral <= 0. ) return;
  eventVertex->Scale(1./eventVtxIntegral);
  printf("\nFit MB vertex\n");
  eventVertex->Fit("gaus",fitOpt.Data(),"",minZ,maxZ);
  TF1* vtxFit = (TF1*)eventVertex->GetListOfFunctions()->FindObject("gaus");
  currName = "vtxIntegrated";
  can = new TCanvas(currName.Data(),currName.Data(),igroup1*xshift,igroup2*yshift,600,600);
  can->SetLogy();
  eventVertex->Draw();
  vtxFit->Draw("same");
  
  
  enum {kRecoHF, kRecoBkg, kInputHF, kInputDecay, kRecoAll, kNrecoHistos};
  TString baseRecoName[kNrecoHistos] = {"RecoHF", "RecoBkg", "InputHF", "InputDecay", "RecoAll"};
  TArrayI sumMothers[kNrecoHistos];
  sumMothers[kRecoHF].Set(0);
  sumMothers[kRecoBkg].Set(0);
  sumMothers[kInputHF].Set(3);
  
  sumMothers[kInputHF][0] = srcAxis->FindBin(fSrcKeys->At(kCharmMu)->GetName());
  sumMothers[kInputHF][1] = srcAxis->FindBin(fSrcKeys->At(kBeautyMu)->GetName());
  sumMothers[kInputHF][2] = srcAxis->FindBin(fSrcKeys->At(kQuarkoniumMu)->GetName());
  sumMothers[kInputDecay].Set(1);
  sumMothers[kInputDecay][0] = srcAxis->FindBin(fSrcKeys->At(kDecayMu)->GetName());
  sumMothers[kRecoAll].Set(srcAxis->GetNbins());
  for ( Int_t isrc=0; isrc<srcAxis->GetNbins(); ++isrc ) {
    sumMothers[kRecoAll][isrc] = isrc+1;
  }
  
  meanZ = vtxFit->GetParameter(1);
  sigmaZ = vtxFit->GetParameter(2);
  
  Double_t minZfit = ( fixFitRange ) ? minZ : meanZ - nSigma*sigmaZ;
  Double_t maxZfit = ( fixFitRange ) ? maxZ : meanZ + nSigma*sigmaZ;
  
  TF1* fitFunc = new TF1("fitFunc", fitFormula.Data(), minZ, maxZ);
  fitFunc->SetLineColor(2);
  fitFunc->SetParNames("Line norm", "Line slope", "Free path");
  const Double_t kFreePath = 153.; // 150.; // 130.; // cm
  //fitFunc->SetParameters(0.,1.);
  fitFunc->FixParameter(2, kFreePath);
  
  AliCFGridSparse* gridSparse = cfContainer->GetGrid(kStepReconstructed);
  TAxis* ptAxis = gridSparse->GetAxis(kHvarPt);
  
  Double_t slope = 0.;
  Double_t limitNorm = 0., limitSlope = 0.;
  Int_t firstPtBin = 0, lastPtBin = 0;
  
  gStyle->SetOptFit(1111);
  
  for ( Int_t itheta=0; itheta<kNthetaAbs; ++itheta ) {
    igroup2++;
    SetSparseRange(gridSparse, kHvarThetaAbs, "", itheta+1, itheta+1, "USEBIN");
    SetSparseRange(gridSparse, kHvarPt, "", 1, ptAxis->GetNbins(), "USEBIN");
    TH1* recoHisto[kNrecoHistos];
    for ( Int_t ireco=0; ireco<kNrecoHistos; ++ireco ) {
      recoHisto[ireco] = gridSparse->Project(kHvarPt);
      histoName = Form("%sMuon_%s", baseRecoName[ireco].Data(), fThetaAbsKeys->At(itheta)->GetName());
      recoHisto[ireco]->SetName(histoName.Data());
      recoHisto[ireco]->SetTitle(histoName.Data());
      recoHisto[ireco]->Reset();
      recoHisto[ireco]->Sumw2();
      for ( Int_t isrc=0; isrc<sumMothers[ireco].GetSize(); ++isrc ) {
        SetSparseRange(gridSparse, kHvarMotherType, "", sumMothers[ireco][isrc], sumMothers[ireco][isrc], "USEBIN");
        TH1* auxHisto = gridSparse->Project(kHvarPt);
        recoHisto[ireco]->Add(auxHisto);
        delete auxHisto;
      }
    }
    SetSparseRange(gridSparse, kHvarMotherType, "", firstPtBin, lastSrcBin, "USEBIN");
    Int_t currDraw = 0;
    
    for ( Int_t ibinpt=0; ibinpt<=ptAxis->GetNbins(); ++ibinpt ) {
      firstPtBin = ibinpt;
      lastPtBin = ( ibinpt == 0 ) ? ptAxis->GetNbins() : ibinpt;
      SetSparseRange(gridSparse, kHvarPt, "", firstPtBin, lastPtBin, "USEBIN");
      TH1* histo = gridSparse->Project(kHvarVz);
      histo->SetName(Form("hVtx_%s_%s_ptBin%i", cfContainer->GetStepTitle(kStepReconstructed), fThetaAbsKeys->At(itheta)->GetName(), ibinpt));
      if ( histo->Integral() < 100. ) break;
      printf("\nFit %.2f < pt < %.2f (entries %g)\n", ptAxis->GetBinLowEdge(firstPtBin), ptAxis->GetBinUpEdge(lastPtBin), histo->GetEntries());
      histo->Divide(eventVertex);
      Double_t norm = histo->GetBinContent(histo->FindBin(0.));
      histo->GetYaxis()->SetTitle("#frac{dN_{#mu}}{dv_{z}} / #left(#frac{1}{N_{MB}}#frac{dN_{MB}}{dv_{z}}#right)");
      histo->SetTitle(Form("%g < p_{T} (GeV/c) < %g",ptAxis->GetBinLowEdge(firstPtBin), ptAxis->GetBinUpEdge(lastPtBin)));
      slope = ( histo->GetBinContent(histo->FindBin(meanZ+sigmaZ)) -
               histo->GetBinContent(histo->FindBin(meanZ-sigmaZ)) ) / ( 2. * sigmaZ );
      
      if ( slope < 0. ) slope = norm/kFreePath;
      
      // Try to fit twice: it fit fails the first time
      // set some limits on parameters
      for ( Int_t itry=0; itry<2; itry++ ) {
        fitFunc->SetParameter(0, norm);
        fitFunc->SetParameter(1, slope);
        if ( itry > 0 ) {
          limitNorm = 2.*histo->Integral();
          limitSlope = 2.*histo->Integral()/kFreePath;
          //fitFunc->SetParLimits(0, 0., limitNorm); // REMEMBER TO CHECK
          fitFunc->SetParLimits(1, 0., limitSlope); // REMEMBER TO CHECK
          printf("Norm 0. < %f < %f  slope  0. < %f < %f\n", norm, limitNorm, slope, limitSlope);
        }
        TFitResultPtr fitRes = histo->Fit(fitFunc, fitOpt.Data(), "", minZfit, maxZfit);
        
        //      if ( gMinuit->fCstatu.Contains("CONVERGED") &&
        if ( ((Int_t)fitRes) == 0 &&
            fitFunc->GetParameter(0) > 0. &&
            fitFunc->GetParameter(1) > 0. )
          break;
        else if ( furtherOpt.Contains("REFIT") ) printf("Re-fit with limits\n");
        else {
          printf("Warning: fit problems !!!\n");
          break;
        }
      }
      
      Double_t p0 = fitFunc->GetParameter(0);
      Double_t p0err = fitFunc->GetParError(0);
      Double_t p1 = fitFunc->GetParameter(1);
      Double_t p1err = fitFunc->GetParError(1);
      
      Double_t nullVz = ( p1 != 0. ) ? -p0/p1 : 0.;
      Double_t nullVzErr = ( p0 != 0. && p1 != 0. ) ? TMath::Abs(nullVz) * TMath::Sqrt(p0err*p0err/(p0*p0) + p1err*p1err/(p1*p1) ) : 0.;
      
      printf("Null value at %f +- %f\n", nullVz - kFreePath, nullVzErr);
      
      recoHisto[kRecoHF]->SetBinContent(ibinpt, p0);
      recoHisto[kRecoHF]->SetBinError(ibinpt, p0err);
      recoHisto[kRecoBkg]->SetBinContent(ibinpt, ( kFreePath + meanZ ) * p1);
      recoHisto[kRecoBkg]->SetBinError(ibinpt, ( kFreePath + meanZ ) * p1err);
      if ( currDraw%4 == 0 ){
        currName = Form("vtx_%s_PtBin%i",fThetaAbsKeys->At(itheta)->GetName(), ibinpt);
        can = new TCanvas(currName.Data(),currName.Data(),igroup1*xshift,igroup2*yshift,600,600);
        can->Divide(2,2);
      }
      can->cd( currDraw%4 + 1 );
      can->SetLogy();
      histo->Draw();
      fitFunc->DrawCopy("same");
      currDraw++;
    } // loop on pt bins
    SetSparseRange(gridSparse, kHvarMotherType, "", firstSrcBin, lastSrcBin, "USEBIN");
    currName = Form("recoPt_%s",fThetaAbsKeys->At(itheta)->GetName());
    can = new TCanvas(currName.Data(),currName.Data(),(igroup1+1)*xshift,igroup2*yshift,600,600);
    TLegend* leg = new TLegend(0.6, 0.6, 0.8, 0.8);
    drawOpt = "e";
    for ( Int_t ireco=0; ireco<kNrecoHistos-1; ++ireco ) {
      if ( recoHisto[ireco]->GetEntries() == 0. ) continue;
      TH1* ratio = (TH1*)recoHisto[ireco]->Clone(Form("%s_ratio", recoHisto[ireco]->GetName()));
      ratio->Divide(recoHisto[kRecoAll]);
      ratio->SetLineColor(srcColors[ireco]);
      ratio->SetMarkerColor(srcColors[ireco]);
      ratio->SetMarkerStyle(20+ireco);
      ratio->GetYaxis()->SetTitle("fraction of total");
      ratio->Draw(drawOpt.Data());
      leg->AddEntry(ratio,baseRecoName[ireco].Data(), "lp");
      drawOpt = "esame";
    }
    leg->Draw("same");
  } // loop on theta abs
}
 AliAnalysisTaskSingleMu.cxx:1
 AliAnalysisTaskSingleMu.cxx:2
 AliAnalysisTaskSingleMu.cxx:3
 AliAnalysisTaskSingleMu.cxx:4
 AliAnalysisTaskSingleMu.cxx:5
 AliAnalysisTaskSingleMu.cxx:6
 AliAnalysisTaskSingleMu.cxx:7
 AliAnalysisTaskSingleMu.cxx:8
 AliAnalysisTaskSingleMu.cxx:9
 AliAnalysisTaskSingleMu.cxx:10
 AliAnalysisTaskSingleMu.cxx:11
 AliAnalysisTaskSingleMu.cxx:12
 AliAnalysisTaskSingleMu.cxx:13
 AliAnalysisTaskSingleMu.cxx:14
 AliAnalysisTaskSingleMu.cxx:15
 AliAnalysisTaskSingleMu.cxx:16
 AliAnalysisTaskSingleMu.cxx:17
 AliAnalysisTaskSingleMu.cxx:18
 AliAnalysisTaskSingleMu.cxx:19
 AliAnalysisTaskSingleMu.cxx:20
 AliAnalysisTaskSingleMu.cxx:21
 AliAnalysisTaskSingleMu.cxx:22
 AliAnalysisTaskSingleMu.cxx:23
 AliAnalysisTaskSingleMu.cxx:24
 AliAnalysisTaskSingleMu.cxx:25
 AliAnalysisTaskSingleMu.cxx:26
 AliAnalysisTaskSingleMu.cxx:27
 AliAnalysisTaskSingleMu.cxx:28
 AliAnalysisTaskSingleMu.cxx:29
 AliAnalysisTaskSingleMu.cxx:30
 AliAnalysisTaskSingleMu.cxx:31
 AliAnalysisTaskSingleMu.cxx:32
 AliAnalysisTaskSingleMu.cxx:33
 AliAnalysisTaskSingleMu.cxx:34
 AliAnalysisTaskSingleMu.cxx:35
 AliAnalysisTaskSingleMu.cxx:36
 AliAnalysisTaskSingleMu.cxx:37
 AliAnalysisTaskSingleMu.cxx:38
 AliAnalysisTaskSingleMu.cxx:39
 AliAnalysisTaskSingleMu.cxx:40
 AliAnalysisTaskSingleMu.cxx:41
 AliAnalysisTaskSingleMu.cxx:42
 AliAnalysisTaskSingleMu.cxx:43
 AliAnalysisTaskSingleMu.cxx:44
 AliAnalysisTaskSingleMu.cxx:45
 AliAnalysisTaskSingleMu.cxx:46
 AliAnalysisTaskSingleMu.cxx:47
 AliAnalysisTaskSingleMu.cxx:48
 AliAnalysisTaskSingleMu.cxx:49
 AliAnalysisTaskSingleMu.cxx:50
 AliAnalysisTaskSingleMu.cxx:51
 AliAnalysisTaskSingleMu.cxx:52
 AliAnalysisTaskSingleMu.cxx:53
 AliAnalysisTaskSingleMu.cxx:54
 AliAnalysisTaskSingleMu.cxx:55
 AliAnalysisTaskSingleMu.cxx:56
 AliAnalysisTaskSingleMu.cxx:57
 AliAnalysisTaskSingleMu.cxx:58
 AliAnalysisTaskSingleMu.cxx:59
 AliAnalysisTaskSingleMu.cxx:60
 AliAnalysisTaskSingleMu.cxx:61
 AliAnalysisTaskSingleMu.cxx:62
 AliAnalysisTaskSingleMu.cxx:63
 AliAnalysisTaskSingleMu.cxx:64
 AliAnalysisTaskSingleMu.cxx:65
 AliAnalysisTaskSingleMu.cxx:66
 AliAnalysisTaskSingleMu.cxx:67
 AliAnalysisTaskSingleMu.cxx:68
 AliAnalysisTaskSingleMu.cxx:69
 AliAnalysisTaskSingleMu.cxx:70
 AliAnalysisTaskSingleMu.cxx:71
 AliAnalysisTaskSingleMu.cxx:72
 AliAnalysisTaskSingleMu.cxx:73
 AliAnalysisTaskSingleMu.cxx:74
 AliAnalysisTaskSingleMu.cxx:75
 AliAnalysisTaskSingleMu.cxx:76
 AliAnalysisTaskSingleMu.cxx:77
 AliAnalysisTaskSingleMu.cxx:78
 AliAnalysisTaskSingleMu.cxx:79
 AliAnalysisTaskSingleMu.cxx:80
 AliAnalysisTaskSingleMu.cxx:81
 AliAnalysisTaskSingleMu.cxx:82
 AliAnalysisTaskSingleMu.cxx:83
 AliAnalysisTaskSingleMu.cxx:84
 AliAnalysisTaskSingleMu.cxx:85
 AliAnalysisTaskSingleMu.cxx:86
 AliAnalysisTaskSingleMu.cxx:87
 AliAnalysisTaskSingleMu.cxx:88
 AliAnalysisTaskSingleMu.cxx:89
 AliAnalysisTaskSingleMu.cxx:90
 AliAnalysisTaskSingleMu.cxx:91
 AliAnalysisTaskSingleMu.cxx:92
 AliAnalysisTaskSingleMu.cxx:93
 AliAnalysisTaskSingleMu.cxx:94
 AliAnalysisTaskSingleMu.cxx:95
 AliAnalysisTaskSingleMu.cxx:96
 AliAnalysisTaskSingleMu.cxx:97
 AliAnalysisTaskSingleMu.cxx:98
 AliAnalysisTaskSingleMu.cxx:99
 AliAnalysisTaskSingleMu.cxx:100
 AliAnalysisTaskSingleMu.cxx:101
 AliAnalysisTaskSingleMu.cxx:102
 AliAnalysisTaskSingleMu.cxx:103
 AliAnalysisTaskSingleMu.cxx:104
 AliAnalysisTaskSingleMu.cxx:105
 AliAnalysisTaskSingleMu.cxx:106
 AliAnalysisTaskSingleMu.cxx:107
 AliAnalysisTaskSingleMu.cxx:108
 AliAnalysisTaskSingleMu.cxx:109
 AliAnalysisTaskSingleMu.cxx:110
 AliAnalysisTaskSingleMu.cxx:111
 AliAnalysisTaskSingleMu.cxx:112
 AliAnalysisTaskSingleMu.cxx:113
 AliAnalysisTaskSingleMu.cxx:114
 AliAnalysisTaskSingleMu.cxx:115
 AliAnalysisTaskSingleMu.cxx:116
 AliAnalysisTaskSingleMu.cxx:117
 AliAnalysisTaskSingleMu.cxx:118
 AliAnalysisTaskSingleMu.cxx:119
 AliAnalysisTaskSingleMu.cxx:120
 AliAnalysisTaskSingleMu.cxx:121
 AliAnalysisTaskSingleMu.cxx:122
 AliAnalysisTaskSingleMu.cxx:123
 AliAnalysisTaskSingleMu.cxx:124
 AliAnalysisTaskSingleMu.cxx:125
 AliAnalysisTaskSingleMu.cxx:126
 AliAnalysisTaskSingleMu.cxx:127
 AliAnalysisTaskSingleMu.cxx:128
 AliAnalysisTaskSingleMu.cxx:129
 AliAnalysisTaskSingleMu.cxx:130
 AliAnalysisTaskSingleMu.cxx:131
 AliAnalysisTaskSingleMu.cxx:132
 AliAnalysisTaskSingleMu.cxx:133
 AliAnalysisTaskSingleMu.cxx:134
 AliAnalysisTaskSingleMu.cxx:135
 AliAnalysisTaskSingleMu.cxx:136
 AliAnalysisTaskSingleMu.cxx:137
 AliAnalysisTaskSingleMu.cxx:138
 AliAnalysisTaskSingleMu.cxx:139
 AliAnalysisTaskSingleMu.cxx:140
 AliAnalysisTaskSingleMu.cxx:141
 AliAnalysisTaskSingleMu.cxx:142
 AliAnalysisTaskSingleMu.cxx:143
 AliAnalysisTaskSingleMu.cxx:144
 AliAnalysisTaskSingleMu.cxx:145
 AliAnalysisTaskSingleMu.cxx:146
 AliAnalysisTaskSingleMu.cxx:147
 AliAnalysisTaskSingleMu.cxx:148
 AliAnalysisTaskSingleMu.cxx:149
 AliAnalysisTaskSingleMu.cxx:150
 AliAnalysisTaskSingleMu.cxx:151
 AliAnalysisTaskSingleMu.cxx:152
 AliAnalysisTaskSingleMu.cxx:153
 AliAnalysisTaskSingleMu.cxx:154
 AliAnalysisTaskSingleMu.cxx:155
 AliAnalysisTaskSingleMu.cxx:156
 AliAnalysisTaskSingleMu.cxx:157
 AliAnalysisTaskSingleMu.cxx:158
 AliAnalysisTaskSingleMu.cxx:159
 AliAnalysisTaskSingleMu.cxx:160
 AliAnalysisTaskSingleMu.cxx:161
 AliAnalysisTaskSingleMu.cxx:162
 AliAnalysisTaskSingleMu.cxx:163
 AliAnalysisTaskSingleMu.cxx:164
 AliAnalysisTaskSingleMu.cxx:165
 AliAnalysisTaskSingleMu.cxx:166
 AliAnalysisTaskSingleMu.cxx:167
 AliAnalysisTaskSingleMu.cxx:168
 AliAnalysisTaskSingleMu.cxx:169
 AliAnalysisTaskSingleMu.cxx:170
 AliAnalysisTaskSingleMu.cxx:171
 AliAnalysisTaskSingleMu.cxx:172
 AliAnalysisTaskSingleMu.cxx:173
 AliAnalysisTaskSingleMu.cxx:174
 AliAnalysisTaskSingleMu.cxx:175
 AliAnalysisTaskSingleMu.cxx:176
 AliAnalysisTaskSingleMu.cxx:177
 AliAnalysisTaskSingleMu.cxx:178
 AliAnalysisTaskSingleMu.cxx:179
 AliAnalysisTaskSingleMu.cxx:180
 AliAnalysisTaskSingleMu.cxx:181
 AliAnalysisTaskSingleMu.cxx:182
 AliAnalysisTaskSingleMu.cxx:183
 AliAnalysisTaskSingleMu.cxx:184
 AliAnalysisTaskSingleMu.cxx:185
 AliAnalysisTaskSingleMu.cxx:186
 AliAnalysisTaskSingleMu.cxx:187
 AliAnalysisTaskSingleMu.cxx:188
 AliAnalysisTaskSingleMu.cxx:189
 AliAnalysisTaskSingleMu.cxx:190
 AliAnalysisTaskSingleMu.cxx:191
 AliAnalysisTaskSingleMu.cxx:192
 AliAnalysisTaskSingleMu.cxx:193
 AliAnalysisTaskSingleMu.cxx:194
 AliAnalysisTaskSingleMu.cxx:195
 AliAnalysisTaskSingleMu.cxx:196
 AliAnalysisTaskSingleMu.cxx:197
 AliAnalysisTaskSingleMu.cxx:198
 AliAnalysisTaskSingleMu.cxx:199
 AliAnalysisTaskSingleMu.cxx:200
 AliAnalysisTaskSingleMu.cxx:201
 AliAnalysisTaskSingleMu.cxx:202
 AliAnalysisTaskSingleMu.cxx:203
 AliAnalysisTaskSingleMu.cxx:204
 AliAnalysisTaskSingleMu.cxx:205
 AliAnalysisTaskSingleMu.cxx:206
 AliAnalysisTaskSingleMu.cxx:207
 AliAnalysisTaskSingleMu.cxx:208
 AliAnalysisTaskSingleMu.cxx:209
 AliAnalysisTaskSingleMu.cxx:210
 AliAnalysisTaskSingleMu.cxx:211
 AliAnalysisTaskSingleMu.cxx:212
 AliAnalysisTaskSingleMu.cxx:213
 AliAnalysisTaskSingleMu.cxx:214
 AliAnalysisTaskSingleMu.cxx:215
 AliAnalysisTaskSingleMu.cxx:216
 AliAnalysisTaskSingleMu.cxx:217
 AliAnalysisTaskSingleMu.cxx:218
 AliAnalysisTaskSingleMu.cxx:219
 AliAnalysisTaskSingleMu.cxx:220
 AliAnalysisTaskSingleMu.cxx:221
 AliAnalysisTaskSingleMu.cxx:222
 AliAnalysisTaskSingleMu.cxx:223
 AliAnalysisTaskSingleMu.cxx:224
 AliAnalysisTaskSingleMu.cxx:225
 AliAnalysisTaskSingleMu.cxx:226
 AliAnalysisTaskSingleMu.cxx:227
 AliAnalysisTaskSingleMu.cxx:228
 AliAnalysisTaskSingleMu.cxx:229
 AliAnalysisTaskSingleMu.cxx:230
 AliAnalysisTaskSingleMu.cxx:231
 AliAnalysisTaskSingleMu.cxx:232
 AliAnalysisTaskSingleMu.cxx:233
 AliAnalysisTaskSingleMu.cxx:234
 AliAnalysisTaskSingleMu.cxx:235
 AliAnalysisTaskSingleMu.cxx:236
 AliAnalysisTaskSingleMu.cxx:237
 AliAnalysisTaskSingleMu.cxx:238
 AliAnalysisTaskSingleMu.cxx:239
 AliAnalysisTaskSingleMu.cxx:240
 AliAnalysisTaskSingleMu.cxx:241
 AliAnalysisTaskSingleMu.cxx:242
 AliAnalysisTaskSingleMu.cxx:243
 AliAnalysisTaskSingleMu.cxx:244
 AliAnalysisTaskSingleMu.cxx:245
 AliAnalysisTaskSingleMu.cxx:246
 AliAnalysisTaskSingleMu.cxx:247
 AliAnalysisTaskSingleMu.cxx:248
 AliAnalysisTaskSingleMu.cxx:249
 AliAnalysisTaskSingleMu.cxx:250
 AliAnalysisTaskSingleMu.cxx:251
 AliAnalysisTaskSingleMu.cxx:252
 AliAnalysisTaskSingleMu.cxx:253
 AliAnalysisTaskSingleMu.cxx:254
 AliAnalysisTaskSingleMu.cxx:255
 AliAnalysisTaskSingleMu.cxx:256
 AliAnalysisTaskSingleMu.cxx:257
 AliAnalysisTaskSingleMu.cxx:258
 AliAnalysisTaskSingleMu.cxx:259
 AliAnalysisTaskSingleMu.cxx:260
 AliAnalysisTaskSingleMu.cxx:261
 AliAnalysisTaskSingleMu.cxx:262
 AliAnalysisTaskSingleMu.cxx:263
 AliAnalysisTaskSingleMu.cxx:264
 AliAnalysisTaskSingleMu.cxx:265
 AliAnalysisTaskSingleMu.cxx:266
 AliAnalysisTaskSingleMu.cxx:267
 AliAnalysisTaskSingleMu.cxx:268
 AliAnalysisTaskSingleMu.cxx:269
 AliAnalysisTaskSingleMu.cxx:270
 AliAnalysisTaskSingleMu.cxx:271
 AliAnalysisTaskSingleMu.cxx:272
 AliAnalysisTaskSingleMu.cxx:273
 AliAnalysisTaskSingleMu.cxx:274
 AliAnalysisTaskSingleMu.cxx:275
 AliAnalysisTaskSingleMu.cxx:276
 AliAnalysisTaskSingleMu.cxx:277
 AliAnalysisTaskSingleMu.cxx:278
 AliAnalysisTaskSingleMu.cxx:279
 AliAnalysisTaskSingleMu.cxx:280
 AliAnalysisTaskSingleMu.cxx:281
 AliAnalysisTaskSingleMu.cxx:282
 AliAnalysisTaskSingleMu.cxx:283
 AliAnalysisTaskSingleMu.cxx:284
 AliAnalysisTaskSingleMu.cxx:285
 AliAnalysisTaskSingleMu.cxx:286
 AliAnalysisTaskSingleMu.cxx:287
 AliAnalysisTaskSingleMu.cxx:288
 AliAnalysisTaskSingleMu.cxx:289
 AliAnalysisTaskSingleMu.cxx:290
 AliAnalysisTaskSingleMu.cxx:291
 AliAnalysisTaskSingleMu.cxx:292
 AliAnalysisTaskSingleMu.cxx:293
 AliAnalysisTaskSingleMu.cxx:294
 AliAnalysisTaskSingleMu.cxx:295
 AliAnalysisTaskSingleMu.cxx:296
 AliAnalysisTaskSingleMu.cxx:297
 AliAnalysisTaskSingleMu.cxx:298
 AliAnalysisTaskSingleMu.cxx:299
 AliAnalysisTaskSingleMu.cxx:300
 AliAnalysisTaskSingleMu.cxx:301
 AliAnalysisTaskSingleMu.cxx:302
 AliAnalysisTaskSingleMu.cxx:303
 AliAnalysisTaskSingleMu.cxx:304
 AliAnalysisTaskSingleMu.cxx:305
 AliAnalysisTaskSingleMu.cxx:306
 AliAnalysisTaskSingleMu.cxx:307
 AliAnalysisTaskSingleMu.cxx:308
 AliAnalysisTaskSingleMu.cxx:309
 AliAnalysisTaskSingleMu.cxx:310
 AliAnalysisTaskSingleMu.cxx:311
 AliAnalysisTaskSingleMu.cxx:312
 AliAnalysisTaskSingleMu.cxx:313
 AliAnalysisTaskSingleMu.cxx:314
 AliAnalysisTaskSingleMu.cxx:315
 AliAnalysisTaskSingleMu.cxx:316
 AliAnalysisTaskSingleMu.cxx:317
 AliAnalysisTaskSingleMu.cxx:318
 AliAnalysisTaskSingleMu.cxx:319
 AliAnalysisTaskSingleMu.cxx:320
 AliAnalysisTaskSingleMu.cxx:321
 AliAnalysisTaskSingleMu.cxx:322
 AliAnalysisTaskSingleMu.cxx:323
 AliAnalysisTaskSingleMu.cxx:324
 AliAnalysisTaskSingleMu.cxx:325
 AliAnalysisTaskSingleMu.cxx:326
 AliAnalysisTaskSingleMu.cxx:327
 AliAnalysisTaskSingleMu.cxx:328
 AliAnalysisTaskSingleMu.cxx:329
 AliAnalysisTaskSingleMu.cxx:330
 AliAnalysisTaskSingleMu.cxx:331
 AliAnalysisTaskSingleMu.cxx:332
 AliAnalysisTaskSingleMu.cxx:333
 AliAnalysisTaskSingleMu.cxx:334
 AliAnalysisTaskSingleMu.cxx:335
 AliAnalysisTaskSingleMu.cxx:336
 AliAnalysisTaskSingleMu.cxx:337
 AliAnalysisTaskSingleMu.cxx:338
 AliAnalysisTaskSingleMu.cxx:339
 AliAnalysisTaskSingleMu.cxx:340
 AliAnalysisTaskSingleMu.cxx:341
 AliAnalysisTaskSingleMu.cxx:342
 AliAnalysisTaskSingleMu.cxx:343
 AliAnalysisTaskSingleMu.cxx:344
 AliAnalysisTaskSingleMu.cxx:345
 AliAnalysisTaskSingleMu.cxx:346
 AliAnalysisTaskSingleMu.cxx:347
 AliAnalysisTaskSingleMu.cxx:348
 AliAnalysisTaskSingleMu.cxx:349
 AliAnalysisTaskSingleMu.cxx:350
 AliAnalysisTaskSingleMu.cxx:351
 AliAnalysisTaskSingleMu.cxx:352
 AliAnalysisTaskSingleMu.cxx:353
 AliAnalysisTaskSingleMu.cxx:354
 AliAnalysisTaskSingleMu.cxx:355
 AliAnalysisTaskSingleMu.cxx:356
 AliAnalysisTaskSingleMu.cxx:357
 AliAnalysisTaskSingleMu.cxx:358
 AliAnalysisTaskSingleMu.cxx:359
 AliAnalysisTaskSingleMu.cxx:360
 AliAnalysisTaskSingleMu.cxx:361
 AliAnalysisTaskSingleMu.cxx:362
 AliAnalysisTaskSingleMu.cxx:363
 AliAnalysisTaskSingleMu.cxx:364
 AliAnalysisTaskSingleMu.cxx:365
 AliAnalysisTaskSingleMu.cxx:366
 AliAnalysisTaskSingleMu.cxx:367
 AliAnalysisTaskSingleMu.cxx:368
 AliAnalysisTaskSingleMu.cxx:369
 AliAnalysisTaskSingleMu.cxx:370
 AliAnalysisTaskSingleMu.cxx:371
 AliAnalysisTaskSingleMu.cxx:372
 AliAnalysisTaskSingleMu.cxx:373
 AliAnalysisTaskSingleMu.cxx:374
 AliAnalysisTaskSingleMu.cxx:375
 AliAnalysisTaskSingleMu.cxx:376
 AliAnalysisTaskSingleMu.cxx:377
 AliAnalysisTaskSingleMu.cxx:378
 AliAnalysisTaskSingleMu.cxx:379
 AliAnalysisTaskSingleMu.cxx:380
 AliAnalysisTaskSingleMu.cxx:381
 AliAnalysisTaskSingleMu.cxx:382
 AliAnalysisTaskSingleMu.cxx:383
 AliAnalysisTaskSingleMu.cxx:384
 AliAnalysisTaskSingleMu.cxx:385
 AliAnalysisTaskSingleMu.cxx:386
 AliAnalysisTaskSingleMu.cxx:387
 AliAnalysisTaskSingleMu.cxx:388
 AliAnalysisTaskSingleMu.cxx:389
 AliAnalysisTaskSingleMu.cxx:390
 AliAnalysisTaskSingleMu.cxx:391
 AliAnalysisTaskSingleMu.cxx:392
 AliAnalysisTaskSingleMu.cxx:393
 AliAnalysisTaskSingleMu.cxx:394
 AliAnalysisTaskSingleMu.cxx:395
 AliAnalysisTaskSingleMu.cxx:396
 AliAnalysisTaskSingleMu.cxx:397
 AliAnalysisTaskSingleMu.cxx:398
 AliAnalysisTaskSingleMu.cxx:399
 AliAnalysisTaskSingleMu.cxx:400
 AliAnalysisTaskSingleMu.cxx:401
 AliAnalysisTaskSingleMu.cxx:402
 AliAnalysisTaskSingleMu.cxx:403
 AliAnalysisTaskSingleMu.cxx:404
 AliAnalysisTaskSingleMu.cxx:405
 AliAnalysisTaskSingleMu.cxx:406
 AliAnalysisTaskSingleMu.cxx:407
 AliAnalysisTaskSingleMu.cxx:408
 AliAnalysisTaskSingleMu.cxx:409
 AliAnalysisTaskSingleMu.cxx:410
 AliAnalysisTaskSingleMu.cxx:411
 AliAnalysisTaskSingleMu.cxx:412
 AliAnalysisTaskSingleMu.cxx:413
 AliAnalysisTaskSingleMu.cxx:414
 AliAnalysisTaskSingleMu.cxx:415
 AliAnalysisTaskSingleMu.cxx:416
 AliAnalysisTaskSingleMu.cxx:417
 AliAnalysisTaskSingleMu.cxx:418
 AliAnalysisTaskSingleMu.cxx:419
 AliAnalysisTaskSingleMu.cxx:420
 AliAnalysisTaskSingleMu.cxx:421
 AliAnalysisTaskSingleMu.cxx:422
 AliAnalysisTaskSingleMu.cxx:423
 AliAnalysisTaskSingleMu.cxx:424
 AliAnalysisTaskSingleMu.cxx:425
 AliAnalysisTaskSingleMu.cxx:426
 AliAnalysisTaskSingleMu.cxx:427
 AliAnalysisTaskSingleMu.cxx:428
 AliAnalysisTaskSingleMu.cxx:429
 AliAnalysisTaskSingleMu.cxx:430
 AliAnalysisTaskSingleMu.cxx:431
 AliAnalysisTaskSingleMu.cxx:432
 AliAnalysisTaskSingleMu.cxx:433
 AliAnalysisTaskSingleMu.cxx:434
 AliAnalysisTaskSingleMu.cxx:435
 AliAnalysisTaskSingleMu.cxx:436
 AliAnalysisTaskSingleMu.cxx:437
 AliAnalysisTaskSingleMu.cxx:438
 AliAnalysisTaskSingleMu.cxx:439
 AliAnalysisTaskSingleMu.cxx:440
 AliAnalysisTaskSingleMu.cxx:441
 AliAnalysisTaskSingleMu.cxx:442
 AliAnalysisTaskSingleMu.cxx:443
 AliAnalysisTaskSingleMu.cxx:444
 AliAnalysisTaskSingleMu.cxx:445
 AliAnalysisTaskSingleMu.cxx:446
 AliAnalysisTaskSingleMu.cxx:447
 AliAnalysisTaskSingleMu.cxx:448
 AliAnalysisTaskSingleMu.cxx:449
 AliAnalysisTaskSingleMu.cxx:450
 AliAnalysisTaskSingleMu.cxx:451
 AliAnalysisTaskSingleMu.cxx:452
 AliAnalysisTaskSingleMu.cxx:453
 AliAnalysisTaskSingleMu.cxx:454
 AliAnalysisTaskSingleMu.cxx:455
 AliAnalysisTaskSingleMu.cxx:456
 AliAnalysisTaskSingleMu.cxx:457
 AliAnalysisTaskSingleMu.cxx:458
 AliAnalysisTaskSingleMu.cxx:459
 AliAnalysisTaskSingleMu.cxx:460
 AliAnalysisTaskSingleMu.cxx:461
 AliAnalysisTaskSingleMu.cxx:462
 AliAnalysisTaskSingleMu.cxx:463
 AliAnalysisTaskSingleMu.cxx:464
 AliAnalysisTaskSingleMu.cxx:465
 AliAnalysisTaskSingleMu.cxx:466
 AliAnalysisTaskSingleMu.cxx:467
 AliAnalysisTaskSingleMu.cxx:468
 AliAnalysisTaskSingleMu.cxx:469
 AliAnalysisTaskSingleMu.cxx:470
 AliAnalysisTaskSingleMu.cxx:471
 AliAnalysisTaskSingleMu.cxx:472
 AliAnalysisTaskSingleMu.cxx:473
 AliAnalysisTaskSingleMu.cxx:474
 AliAnalysisTaskSingleMu.cxx:475
 AliAnalysisTaskSingleMu.cxx:476
 AliAnalysisTaskSingleMu.cxx:477
 AliAnalysisTaskSingleMu.cxx:478
 AliAnalysisTaskSingleMu.cxx:479
 AliAnalysisTaskSingleMu.cxx:480
 AliAnalysisTaskSingleMu.cxx:481
 AliAnalysisTaskSingleMu.cxx:482
 AliAnalysisTaskSingleMu.cxx:483
 AliAnalysisTaskSingleMu.cxx:484
 AliAnalysisTaskSingleMu.cxx:485
 AliAnalysisTaskSingleMu.cxx:486
 AliAnalysisTaskSingleMu.cxx:487
 AliAnalysisTaskSingleMu.cxx:488
 AliAnalysisTaskSingleMu.cxx:489
 AliAnalysisTaskSingleMu.cxx:490
 AliAnalysisTaskSingleMu.cxx:491
 AliAnalysisTaskSingleMu.cxx:492
 AliAnalysisTaskSingleMu.cxx:493
 AliAnalysisTaskSingleMu.cxx:494
 AliAnalysisTaskSingleMu.cxx:495
 AliAnalysisTaskSingleMu.cxx:496
 AliAnalysisTaskSingleMu.cxx:497
 AliAnalysisTaskSingleMu.cxx:498
 AliAnalysisTaskSingleMu.cxx:499
 AliAnalysisTaskSingleMu.cxx:500
 AliAnalysisTaskSingleMu.cxx:501
 AliAnalysisTaskSingleMu.cxx:502
 AliAnalysisTaskSingleMu.cxx:503
 AliAnalysisTaskSingleMu.cxx:504
 AliAnalysisTaskSingleMu.cxx:505
 AliAnalysisTaskSingleMu.cxx:506
 AliAnalysisTaskSingleMu.cxx:507
 AliAnalysisTaskSingleMu.cxx:508
 AliAnalysisTaskSingleMu.cxx:509
 AliAnalysisTaskSingleMu.cxx:510
 AliAnalysisTaskSingleMu.cxx:511
 AliAnalysisTaskSingleMu.cxx:512
 AliAnalysisTaskSingleMu.cxx:513
 AliAnalysisTaskSingleMu.cxx:514
 AliAnalysisTaskSingleMu.cxx:515
 AliAnalysisTaskSingleMu.cxx:516
 AliAnalysisTaskSingleMu.cxx:517
 AliAnalysisTaskSingleMu.cxx:518
 AliAnalysisTaskSingleMu.cxx:519
 AliAnalysisTaskSingleMu.cxx:520
 AliAnalysisTaskSingleMu.cxx:521
 AliAnalysisTaskSingleMu.cxx:522
 AliAnalysisTaskSingleMu.cxx:523
 AliAnalysisTaskSingleMu.cxx:524
 AliAnalysisTaskSingleMu.cxx:525
 AliAnalysisTaskSingleMu.cxx:526
 AliAnalysisTaskSingleMu.cxx:527
 AliAnalysisTaskSingleMu.cxx:528
 AliAnalysisTaskSingleMu.cxx:529
 AliAnalysisTaskSingleMu.cxx:530
 AliAnalysisTaskSingleMu.cxx:531
 AliAnalysisTaskSingleMu.cxx:532
 AliAnalysisTaskSingleMu.cxx:533
 AliAnalysisTaskSingleMu.cxx:534
 AliAnalysisTaskSingleMu.cxx:535
 AliAnalysisTaskSingleMu.cxx:536
 AliAnalysisTaskSingleMu.cxx:537
 AliAnalysisTaskSingleMu.cxx:538
 AliAnalysisTaskSingleMu.cxx:539
 AliAnalysisTaskSingleMu.cxx:540
 AliAnalysisTaskSingleMu.cxx:541
 AliAnalysisTaskSingleMu.cxx:542
 AliAnalysisTaskSingleMu.cxx:543
 AliAnalysisTaskSingleMu.cxx:544
 AliAnalysisTaskSingleMu.cxx:545
 AliAnalysisTaskSingleMu.cxx:546
 AliAnalysisTaskSingleMu.cxx:547
 AliAnalysisTaskSingleMu.cxx:548
 AliAnalysisTaskSingleMu.cxx:549
 AliAnalysisTaskSingleMu.cxx:550
 AliAnalysisTaskSingleMu.cxx:551
 AliAnalysisTaskSingleMu.cxx:552
 AliAnalysisTaskSingleMu.cxx:553
 AliAnalysisTaskSingleMu.cxx:554
 AliAnalysisTaskSingleMu.cxx:555
 AliAnalysisTaskSingleMu.cxx:556
 AliAnalysisTaskSingleMu.cxx:557
 AliAnalysisTaskSingleMu.cxx:558
 AliAnalysisTaskSingleMu.cxx:559
 AliAnalysisTaskSingleMu.cxx:560
 AliAnalysisTaskSingleMu.cxx:561
 AliAnalysisTaskSingleMu.cxx:562
 AliAnalysisTaskSingleMu.cxx:563
 AliAnalysisTaskSingleMu.cxx:564
 AliAnalysisTaskSingleMu.cxx:565
 AliAnalysisTaskSingleMu.cxx:566
 AliAnalysisTaskSingleMu.cxx:567
 AliAnalysisTaskSingleMu.cxx:568
 AliAnalysisTaskSingleMu.cxx:569
 AliAnalysisTaskSingleMu.cxx:570
 AliAnalysisTaskSingleMu.cxx:571
 AliAnalysisTaskSingleMu.cxx:572
 AliAnalysisTaskSingleMu.cxx:573
 AliAnalysisTaskSingleMu.cxx:574
 AliAnalysisTaskSingleMu.cxx:575
 AliAnalysisTaskSingleMu.cxx:576
 AliAnalysisTaskSingleMu.cxx:577
 AliAnalysisTaskSingleMu.cxx:578
 AliAnalysisTaskSingleMu.cxx:579
 AliAnalysisTaskSingleMu.cxx:580
 AliAnalysisTaskSingleMu.cxx:581
 AliAnalysisTaskSingleMu.cxx:582
 AliAnalysisTaskSingleMu.cxx:583
 AliAnalysisTaskSingleMu.cxx:584
 AliAnalysisTaskSingleMu.cxx:585
 AliAnalysisTaskSingleMu.cxx:586
 AliAnalysisTaskSingleMu.cxx:587
 AliAnalysisTaskSingleMu.cxx:588
 AliAnalysisTaskSingleMu.cxx:589
 AliAnalysisTaskSingleMu.cxx:590
 AliAnalysisTaskSingleMu.cxx:591
 AliAnalysisTaskSingleMu.cxx:592
 AliAnalysisTaskSingleMu.cxx:593
 AliAnalysisTaskSingleMu.cxx:594
 AliAnalysisTaskSingleMu.cxx:595
 AliAnalysisTaskSingleMu.cxx:596
 AliAnalysisTaskSingleMu.cxx:597
 AliAnalysisTaskSingleMu.cxx:598
 AliAnalysisTaskSingleMu.cxx:599
 AliAnalysisTaskSingleMu.cxx:600
 AliAnalysisTaskSingleMu.cxx:601
 AliAnalysisTaskSingleMu.cxx:602
 AliAnalysisTaskSingleMu.cxx:603
 AliAnalysisTaskSingleMu.cxx:604
 AliAnalysisTaskSingleMu.cxx:605
 AliAnalysisTaskSingleMu.cxx:606
 AliAnalysisTaskSingleMu.cxx:607
 AliAnalysisTaskSingleMu.cxx:608
 AliAnalysisTaskSingleMu.cxx:609
 AliAnalysisTaskSingleMu.cxx:610
 AliAnalysisTaskSingleMu.cxx:611
 AliAnalysisTaskSingleMu.cxx:612
 AliAnalysisTaskSingleMu.cxx:613
 AliAnalysisTaskSingleMu.cxx:614
 AliAnalysisTaskSingleMu.cxx:615
 AliAnalysisTaskSingleMu.cxx:616
 AliAnalysisTaskSingleMu.cxx:617
 AliAnalysisTaskSingleMu.cxx:618
 AliAnalysisTaskSingleMu.cxx:619
 AliAnalysisTaskSingleMu.cxx:620
 AliAnalysisTaskSingleMu.cxx:621
 AliAnalysisTaskSingleMu.cxx:622
 AliAnalysisTaskSingleMu.cxx:623
 AliAnalysisTaskSingleMu.cxx:624
 AliAnalysisTaskSingleMu.cxx:625
 AliAnalysisTaskSingleMu.cxx:626
 AliAnalysisTaskSingleMu.cxx:627
 AliAnalysisTaskSingleMu.cxx:628
 AliAnalysisTaskSingleMu.cxx:629
 AliAnalysisTaskSingleMu.cxx:630
 AliAnalysisTaskSingleMu.cxx:631
 AliAnalysisTaskSingleMu.cxx:632
 AliAnalysisTaskSingleMu.cxx:633
 AliAnalysisTaskSingleMu.cxx:634
 AliAnalysisTaskSingleMu.cxx:635
 AliAnalysisTaskSingleMu.cxx:636
 AliAnalysisTaskSingleMu.cxx:637
 AliAnalysisTaskSingleMu.cxx:638
 AliAnalysisTaskSingleMu.cxx:639
 AliAnalysisTaskSingleMu.cxx:640
 AliAnalysisTaskSingleMu.cxx:641
 AliAnalysisTaskSingleMu.cxx:642
 AliAnalysisTaskSingleMu.cxx:643
 AliAnalysisTaskSingleMu.cxx:644
 AliAnalysisTaskSingleMu.cxx:645
 AliAnalysisTaskSingleMu.cxx:646
 AliAnalysisTaskSingleMu.cxx:647
 AliAnalysisTaskSingleMu.cxx:648
 AliAnalysisTaskSingleMu.cxx:649
 AliAnalysisTaskSingleMu.cxx:650
 AliAnalysisTaskSingleMu.cxx:651
 AliAnalysisTaskSingleMu.cxx:652
 AliAnalysisTaskSingleMu.cxx:653
 AliAnalysisTaskSingleMu.cxx:654
 AliAnalysisTaskSingleMu.cxx:655
 AliAnalysisTaskSingleMu.cxx:656
 AliAnalysisTaskSingleMu.cxx:657
 AliAnalysisTaskSingleMu.cxx:658
 AliAnalysisTaskSingleMu.cxx:659
 AliAnalysisTaskSingleMu.cxx:660
 AliAnalysisTaskSingleMu.cxx:661
 AliAnalysisTaskSingleMu.cxx:662
 AliAnalysisTaskSingleMu.cxx:663
 AliAnalysisTaskSingleMu.cxx:664
 AliAnalysisTaskSingleMu.cxx:665
 AliAnalysisTaskSingleMu.cxx:666
 AliAnalysisTaskSingleMu.cxx:667
 AliAnalysisTaskSingleMu.cxx:668
 AliAnalysisTaskSingleMu.cxx:669
 AliAnalysisTaskSingleMu.cxx:670
 AliAnalysisTaskSingleMu.cxx:671
 AliAnalysisTaskSingleMu.cxx:672
 AliAnalysisTaskSingleMu.cxx:673
 AliAnalysisTaskSingleMu.cxx:674
 AliAnalysisTaskSingleMu.cxx:675
 AliAnalysisTaskSingleMu.cxx:676
 AliAnalysisTaskSingleMu.cxx:677
 AliAnalysisTaskSingleMu.cxx:678
 AliAnalysisTaskSingleMu.cxx:679
 AliAnalysisTaskSingleMu.cxx:680
 AliAnalysisTaskSingleMu.cxx:681
 AliAnalysisTaskSingleMu.cxx:682
 AliAnalysisTaskSingleMu.cxx:683
 AliAnalysisTaskSingleMu.cxx:684
 AliAnalysisTaskSingleMu.cxx:685
 AliAnalysisTaskSingleMu.cxx:686
 AliAnalysisTaskSingleMu.cxx:687
 AliAnalysisTaskSingleMu.cxx:688
 AliAnalysisTaskSingleMu.cxx:689
 AliAnalysisTaskSingleMu.cxx:690
 AliAnalysisTaskSingleMu.cxx:691
 AliAnalysisTaskSingleMu.cxx:692
 AliAnalysisTaskSingleMu.cxx:693
 AliAnalysisTaskSingleMu.cxx:694
 AliAnalysisTaskSingleMu.cxx:695
 AliAnalysisTaskSingleMu.cxx:696
 AliAnalysisTaskSingleMu.cxx:697
 AliAnalysisTaskSingleMu.cxx:698
 AliAnalysisTaskSingleMu.cxx:699
 AliAnalysisTaskSingleMu.cxx:700
 AliAnalysisTaskSingleMu.cxx:701
 AliAnalysisTaskSingleMu.cxx:702
 AliAnalysisTaskSingleMu.cxx:703
 AliAnalysisTaskSingleMu.cxx:704
 AliAnalysisTaskSingleMu.cxx:705
 AliAnalysisTaskSingleMu.cxx:706
 AliAnalysisTaskSingleMu.cxx:707
 AliAnalysisTaskSingleMu.cxx:708
 AliAnalysisTaskSingleMu.cxx:709
 AliAnalysisTaskSingleMu.cxx:710
 AliAnalysisTaskSingleMu.cxx:711
 AliAnalysisTaskSingleMu.cxx:712
 AliAnalysisTaskSingleMu.cxx:713
 AliAnalysisTaskSingleMu.cxx:714
 AliAnalysisTaskSingleMu.cxx:715
 AliAnalysisTaskSingleMu.cxx:716
 AliAnalysisTaskSingleMu.cxx:717
 AliAnalysisTaskSingleMu.cxx:718
 AliAnalysisTaskSingleMu.cxx:719
 AliAnalysisTaskSingleMu.cxx:720
 AliAnalysisTaskSingleMu.cxx:721
 AliAnalysisTaskSingleMu.cxx:722
 AliAnalysisTaskSingleMu.cxx:723
 AliAnalysisTaskSingleMu.cxx:724
 AliAnalysisTaskSingleMu.cxx:725
 AliAnalysisTaskSingleMu.cxx:726
 AliAnalysisTaskSingleMu.cxx:727
 AliAnalysisTaskSingleMu.cxx:728
 AliAnalysisTaskSingleMu.cxx:729
 AliAnalysisTaskSingleMu.cxx:730
 AliAnalysisTaskSingleMu.cxx:731
 AliAnalysisTaskSingleMu.cxx:732
 AliAnalysisTaskSingleMu.cxx:733
 AliAnalysisTaskSingleMu.cxx:734
 AliAnalysisTaskSingleMu.cxx:735
 AliAnalysisTaskSingleMu.cxx:736
 AliAnalysisTaskSingleMu.cxx:737
 AliAnalysisTaskSingleMu.cxx:738
 AliAnalysisTaskSingleMu.cxx:739
 AliAnalysisTaskSingleMu.cxx:740
 AliAnalysisTaskSingleMu.cxx:741
 AliAnalysisTaskSingleMu.cxx:742
 AliAnalysisTaskSingleMu.cxx:743
 AliAnalysisTaskSingleMu.cxx:744
 AliAnalysisTaskSingleMu.cxx:745
 AliAnalysisTaskSingleMu.cxx:746
 AliAnalysisTaskSingleMu.cxx:747
 AliAnalysisTaskSingleMu.cxx:748
 AliAnalysisTaskSingleMu.cxx:749
 AliAnalysisTaskSingleMu.cxx:750
 AliAnalysisTaskSingleMu.cxx:751
 AliAnalysisTaskSingleMu.cxx:752
 AliAnalysisTaskSingleMu.cxx:753
 AliAnalysisTaskSingleMu.cxx:754
 AliAnalysisTaskSingleMu.cxx:755
 AliAnalysisTaskSingleMu.cxx:756
 AliAnalysisTaskSingleMu.cxx:757
 AliAnalysisTaskSingleMu.cxx:758
 AliAnalysisTaskSingleMu.cxx:759
 AliAnalysisTaskSingleMu.cxx:760
 AliAnalysisTaskSingleMu.cxx:761
 AliAnalysisTaskSingleMu.cxx:762
 AliAnalysisTaskSingleMu.cxx:763
 AliAnalysisTaskSingleMu.cxx:764
 AliAnalysisTaskSingleMu.cxx:765
 AliAnalysisTaskSingleMu.cxx:766