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.                  *
 **************************************************************************/

// 
// General task to match two sets of jets
//
// This task takes two TClonesArray's as input: 
// [1] fSourceJets - e.g. pythia jets
// [2] fTargetJets - e.g. a samle containing pythia jets embedded in a pbpb event
// the task will try to match jets from the source array to the target array, and
// save the found TARGET jets in a new array 'fMatchedJets'
// the purpose of this task is twofold
// [1] matching for embedding studies
// [2] matching to create a detector response function
//
// matching is done in three steps
// [1] geometric matching, where jets are matched by R = sqrt(dphi*dphi-deta*deta) or directly via dphi and deta
// [2] optional injection / bijection check 
//     in this check, it is made sure that fSourceJets -> fMatchedJets is either an injective non-surjective 
//     or bijective map, depending on the matching resolution which is chosen for step [1]
//     so that each source jet has a unique target and vice-versa.
//     if R (or dphi, deta) are proportional to, or larger than, the jet radius, matching tends to be 
//     bijective (each source has a target), if R is chosen to be very small, source jets might be lost 
//     as no target can be found.
//     the mapping is done in such a way that each target is matched to its closest source and each source
//     is mapped to its closest target
// [3] constituent matching
//     - how many constituents of the source jet are present in the matched jet? 
//       a cut on the constituent fraction can be performed (not recommended)
//     - how much of the original pt is recovered in the matched jet? 
//       a cut on the fraction of recovered / original pt can be performed (recommended)
//
// detector response
//     to obtain a detector respose function, supply
// [1] fSourceJets - particle level jets
// [2] fTargetJets - detector level jets
// 
// Author: Redmer Alexander Bertens, Utrecht Univeristy, Utrecht, Netherlands
// rbertens@cern.ch, rbertens@nikhef.nl, r.a.bertens@uu.nl 

// root includes
#include <TClonesArray.h>
#include <TChain.h>
#include <TMath.h>
#include <TF1.h>
#include <TF2.h>
#include <TH3.h>
#include <TH1F.h>
#include <TH2F.h>
#include <TH3F.h>
#include <TProfile.h>
#include <TFile.h>
#include <TTree.h>
#include <TKey.h>
#include <TSystem.h>
// aliroot includes
#include <AliAnalysisTask.h>
#include <AliAnalysisManager.h>
#include <AliLog.h>
#include <AliVEvent.h>
#include <AliVParticle.h>
// emcal jet framework includes
#include <AliEmcalJet.h>
#include <AliAnalysisTaskJetMatching.h>
#include <AliLocalRhoParameter.h>

class AliAnalysisTaskJetMatching;
using namespace std;

ClassImp(AliAnalysisTaskJetMatching)

AliAnalysisTaskJetMatching::AliAnalysisTaskJetMatching() : AliAnalysisTaskEmcalJet("AliAnalysisTaskJetMatching", kTRUE), 
    fSourceJets(0), fSourceJetsName(0), fTargetJets(0), fTargetJetsName(0), fMatchedJets(0), fMatchedJetsName(GetName()), fSourceRho(0), fSourceRhoName(0), fTargetRho(0), fTargetRhoName(0), fUseScaledRho(0), fSourceRadius(0.3), fTargetRadius(0.3), fMatchingScheme(kGeoEtaPhi), fUseEmcalBaseJetCuts(kFALSE), fSourceBKG(kNoSourceBKG), fTargetBKG(kNoTargetBKG), fOutputList(0), fHistUnsortedCorrelation(0), fHistMatchedCorrelation(0), fHistSourceJetPt(0), fHistMatchedSourceJetPt(0), fHistTargetJetPt(0), fHistMatchedJetPt(0), fHistSourceMatchedJetPt(0), fHistDetectorResponseProb(0), fHistNoConstSourceJet(0), fHistNoConstTargetJet(0), fHistNoConstMatchJet(0), fProfFracPtMatched(0), fProfFracPtJets(0), fProfFracNoMatched(0), fProfFracNoJets(0), fHistDiJet(0), fHistDiJetLeadingJet(0), fHistDiJetDPhi(0), fHistDiJetDPt(0), fHistAnalysisSummary(0), fProfQAMatched(0), fProfQA(0), fNoMatchedJets(200), fMatchEta(.3), fMatchPhi(.3), fMatchR(.08), fDoDetectorResponse(kFALSE), fMatchConstituents(kTRUE), fMinFracRecoveredConstituents(.5), fMinFracRecoveredConstituentPt(0.5), fGetBijection(kTRUE), fh1Trials(0x0), fh1AvgTrials(0x0), fh1Xsec(0x0), fAvgTrials(0) {
    // default constructor
    ClearMatchedJetsCache();
}
//_____________________________________________________________________________
AliAnalysisTaskJetMatching::AliAnalysisTaskJetMatching(const char* name) : AliAnalysisTaskEmcalJet(name, kTRUE),
    fSourceJets(0), fSourceJetsName(0), fTargetJets(0), fTargetJetsName(0), fMatchedJets(0), fMatchedJetsName(GetName()), fSourceRho(0), fSourceRhoName(0), fTargetRho(0), fTargetRhoName(0), fUseScaledRho(0), fSourceRadius(0.3), fTargetRadius(0.3), fMatchingScheme(kGeoEtaPhi), fUseEmcalBaseJetCuts(kFALSE), fSourceBKG(kNoSourceBKG), fTargetBKG(kNoTargetBKG), fOutputList(0), fHistUnsortedCorrelation(0), fHistMatchedCorrelation(0), fHistSourceJetPt(0), fHistMatchedSourceJetPt(0), fHistTargetJetPt(0), fHistMatchedJetPt(0), fHistSourceMatchedJetPt(0), fHistDetectorResponseProb(0), fHistNoConstSourceJet(0), fHistNoConstTargetJet(0), fHistNoConstMatchJet(0), fProfFracPtMatched(0), fProfFracPtJets(0), fProfFracNoMatched(0), fProfFracNoJets(0), fHistDiJet(0), fHistDiJetLeadingJet(0), fHistDiJetDPhi(0), fHistDiJetDPt(0), fHistAnalysisSummary(0), fProfQAMatched(0), fProfQA(0), fNoMatchedJets(200), fMatchEta(.3), fMatchPhi(.3), fMatchR(.08), fDoDetectorResponse(kFALSE), fMatchConstituents(kTRUE), fMinFracRecoveredConstituents(0.5), fMinFracRecoveredConstituentPt(0.5), fGetBijection(kTRUE), fh1Trials(0x0), fh1AvgTrials(0x0), fh1Xsec(0x0), fAvgTrials(0) {
    // constructor
    ClearMatchedJetsCache();
    DefineInput(0, TChain::Class());
    DefineOutput(1, TList::Class());
}
//_____________________________________________________________________________
AliAnalysisTaskJetMatching::~AliAnalysisTaskJetMatching()
{
    // destructor
    if(fOutputList)             delete fOutputList;
}
//_____________________________________________________________________________
void AliAnalysisTaskJetMatching::ExecOnce() 
{
    // initialize the anaysis
    #ifdef DEBUGTASK
        printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
    #endif
    // get the stand alone jets from the input event
    fSourceJets = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fSourceJetsName.Data()));
    if(!fSourceJets) AliFatal(Form("%s: Container with name %s not found. Aborting", GetName(), fSourceJetsName.Data()));
    fTargetJets = dynamic_cast<TClonesArray*>(InputEvent()->FindListObject(fTargetJetsName.Data()));
    if(!fTargetJets) AliFatal(Form("%s: Container with name %s not found. Aborting", GetName(), fSourceJetsName.Data()));
    // append the list of matched jets to the event
    fMatchedJets->Delete();
    if (!(InputEvent()->FindListObject(fMatchedJetsName))) InputEvent()->AddObject(fMatchedJets);
    else AliFatal(Form("%s: Object with name %s already in event! Aborting", GetName(), fMatchedJetsName.Data()));
    FillAnalysisSummaryHistogram();
    switch (fSourceBKG) {
        case kSourceLocalRho : {
            fSourceRho = dynamic_cast<AliLocalRhoParameter*>(InputEvent()->FindListObject(fSourceRhoName));
            if(!fSourceRho) AliFatal(Form("%s: Object with name %s requested but not found! Aborting", GetName(), fSourceRhoName.Data()));
        } break;
        default : break;
    }
    switch (fTargetBKG) {
        case kTargetLocalRho : {
            fTargetRho = dynamic_cast<AliLocalRhoParameter*>(InputEvent()->FindListObject(fTargetRhoName));
            if(!fTargetRho) AliFatal(Form("%s: Object with name %s requested but not found! Aborting", GetName(), fTargetRhoName.Data()));
        } break;
        default : break;
    }
    AliAnalysisTaskEmcalJet::ExecOnce(); // init base class
    if(fDoDetectorResponse) fMatchConstituents = kFALSE;
}
//_____________________________________________________________________________
void AliAnalysisTaskJetMatching::UserCreateOutputObjects()
{
    // create output objects
    #ifdef DEBUGTASK
        printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
    #endif
    // add the matched jets array to the event
    fMatchedJets = new TClonesArray("AliEmcalJet");
    fMatchedJets->SetName(fMatchedJetsName);
    fOutputList = new TList();
    fOutputList->SetOwner(kTRUE);
    // add analysis histograms
    fHistUnsortedCorrelation = BookTH1F("fHistUnsortedCorrelation", "#Delta #varphi unsorted", 50, 0, TMath::Pi());
    fHistMatchedCorrelation = BookTH1F("fHistMatchedCorrelation", "#Delta #varphi matched", 50, 0, TMath::Pi());
    fHistSourceJetPt = (fDoDetectorResponse) ? BookTH1F("fHistParticleLevelJetPt", "p_{t}^{gen} [GeV/c]", 150, -50, 250) :  BookTH1F("fHistSourceJetPt", "p_{t} [GeV/c]", 150, -50, 250);      
    fHistMatchedSourceJetPt = (fDoDetectorResponse) ? BookTH1F("fHistMatchedParticleLevelJetPt", "p_{t}^{gen} [GeV/c]", 150, -50, 250) : BookTH1F("fHistMatchedSourceJetPt", "p_{t} [GeV/c]", 150, -50, 250);
    fHistTargetJetPt = BookTH1F("fHistTargetJetPt", "p_{t} [GeV/c]", 150, -50, 250);
    fHistMatchedJetPt = (fDoDetectorResponse) ? BookTH1F("fHistDetectorLevelJet", "p_{t}^{rec}", 150, -50, 250) : BookTH1F("fHistMatchedJetPt", "p_{t} [GeV/c]", 150, -50, 250);
    fHistSourceMatchedJetPt = (fDoDetectorResponse) ? BookTH2F("fHistDetectorResponse", "particle level jet p_{t}^{gen} [GeV/c]", "detector level jet p_{t}^{rec} [GeV/c]", 300, -50, 250, 300, -50, 250) : BookTH2F("fHistSourceMatchedJetPt", "source jet p_{t} [GeV/c]", "matched jet p_{t} [GeV/c]", 300, -50, 250, 300, -50, 250);
    if(fDoDetectorResponse) {
        fHistDetectorResponseProb = BookTH2F("fHistDetectorResponseProb", "(p_{t}^{det} - p_{t}^{part})/p_{t}^{part}", "p_{t}^{part}", 100, -1.5, 1., 20, 0, 200);
        fh1Xsec = new TProfile("fh1Xsec","xsec from pyxsec.root",1,0,1);
        fh1Xsec->GetXaxis()->SetBinLabel(1,"<#sigma>");
        fOutputList->Add(fh1Xsec);
        fh1Trials = new TH1F("fh1Trials","trials root file",1,0,1);
        fh1Trials->GetXaxis()->SetBinLabel(1,"#sum{ntrials}");
        fOutputList->Add(fh1Trials);
        fh1AvgTrials = new TH1F("fh1AvgTrials","avg trials root file",1,0,1);
        fh1AvgTrials->GetXaxis()->SetBinLabel(1,"#sum{avg ntrials}");
        fOutputList->Add(fh1AvgTrials);
    }
    fHistNoConstSourceJet = BookTH1F("fHistNoConstSourceJet", "number of constituents source jets", 50, 0, 50);
    fHistNoConstTargetJet = BookTH1F("fHistNoConstTargetJet", "number of constituents target jets", 50, 0, 50);
    fHistNoConstMatchJet = BookTH1F("fHistNoConstMatchJet", "number of constituents matched jets", 50, 0, 50);
    if(!fDoDetectorResponse) { // these observables cannot be measured in current detector response mode
        fProfFracPtMatched = new TProfile("fProfFracPtMatched", "recovered target p_{T} / source p_{T}", 15, -50, 250);
        fOutputList->Add(fProfFracPtMatched);
        fProfFracNoMatched = new TProfile("fProfFracNoMatched", "recovered target constituents / source constituents", 15, -50, 250);
        fOutputList->Add(fProfFracNoMatched);
    }
    // the analysis summary histo which stores all the analysis flags is always written to file
    fHistAnalysisSummary = BookTH1F("fHistAnalysisSummary", "flag", 51, -0.5, 15.5);
    fProfQAMatched = new TProfile("fProfQAMatched", "fProfQAMatched", 3, 0, 3);
    fProfQAMatched->GetXaxis()->SetBinLabel(1, "<#delta p_{t} >");
    fProfQAMatched->GetXaxis()->SetBinLabel(2, "<#delta #eta>");
    fProfQAMatched->GetXaxis()->SetBinLabel(3, "<#delta #varphi>");
    fOutputList->Add(fProfQAMatched);
    fProfQA = new TProfile("fProfQA", "fProfQA", 3, 0, 3);
    fProfQA->GetXaxis()->SetBinLabel(1, "<#delta p_{t} >");
    fProfQA->GetXaxis()->SetBinLabel(2, "<#delta #eta>");
    fProfQA->GetXaxis()->SetBinLabel(3, "<#delta #varphi>");
    fOutputList->Add(fProfQA);
    fProfFracPtJets = new TProfile("fProfFracPtJets", "source p_{T} / target p_{T}", 15, -50, 250);
    fOutputList->Add(fProfFracPtJets);
    fProfFracNoJets = new TProfile("fProfFracNoJets", "source constituents / target constituents", 15, -50, 250);
    fOutputList->Add(fProfFracNoJets);
    switch (fMatchingScheme) {
        case kDiJet : {
            fHistDiJet = BookTH3F("fHistDiJet", "matched di-jet #varphi", "matched di-jet #eta", "leading jet p_{T} (GeV/c)", 100, 0., TMath::TwoPi(), 100, -5., 5., 100, 0, 200);
            fHistDiJetLeadingJet = BookTH3F("fHistDiJetLeadingJet", "leading jet #varphi", "leadingd jet #eta", "leading jet p_{T} (GeV/c)", 100, 0., TMath::TwoPi(), 100, -5., 5., 100, 0, 200);
            fHistDiJetDPhi = BookTH2F("fHistDiJetDPhi", "leading jet #varphi - (matched jet #varphi - #pi)", "leading jet p_{T} (GeV/c)", 100, -1.*TMath::Pi(), TMath::Pi(), 100, 0, 200);
            fHistDiJetDPt = BookTH2F("fHistDiJetDPt", "leading jet p_{T} - sub leading jet p_{T} (GeV/c)", "leading jet p_{T} (GeV/c)", 100, -25, 25, 100, 0, 200);
        } break;
        default : break;
    }
    fOutputList->Sort();
    PostData(1, fOutputList);
}
//_____________________________________________________________________________
TH1F* AliAnalysisTaskJetMatching::BookTH1F(const char* name, const char* x, Int_t bins, Double_t min, Double_t max, Bool_t append)
{
    // book a TH1F and connect it to the output container
    #ifdef DEBUGTASK
        printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
    #endif
    if(append && !fOutputList) return 0x0;
    TString title(name);
    title += Form(";%s;[counts]", x);
    TH1F* histogram = new TH1F(name, title.Data(), bins, min, max);
    histogram->Sumw2();
    if(append) fOutputList->Add(histogram);
    return histogram;   
}
//_____________________________________________________________________________
TH2F* AliAnalysisTaskJetMatching::BookTH2F(const char* name, const char* x, const char*y, Int_t binsx, Double_t minx, Double_t maxx, Int_t binsy, Double_t miny, Double_t maxy, Bool_t append)
{
    // book a TH2F and connect it to the output container
    #ifdef DEBUGTASK
        printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
    #endif
    if(append && !fOutputList) return 0x0;
    TString title(name);
    title += Form(";%s;%s", x, y);
    TH2F* histogram = new TH2F(name, title.Data(), binsx, minx, maxx, binsy, miny, maxy);
    histogram->Sumw2();
    if(append) fOutputList->Add(histogram);
    return histogram;   
}
//_____________________________________________________________________________
TH3F* AliAnalysisTaskJetMatching::BookTH3F(const char* name, const char* x, const char* y, const char* z, Int_t binsx, Double_t minx, Double_t maxx, Int_t binsy, Double_t miny, Double_t maxy, Int_t binsz, Double_t minz, Double_t maxz, Bool_t append)
{
    // book a TH2F and connect it to the output container
    #ifdef DEBUGTASK
        printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
    #endif
    if(append && !fOutputList) return 0x0;
    TString title(name);
    title += Form(";%s;%s;%s", x, y, z);
    TH3F* histogram = new TH3F(name, title.Data(), binsx, minx, maxx, binsy, miny, maxy, binsz, minz, maxz);
    histogram->Sumw2();
    if(append) fOutputList->Add(histogram);
    return histogram;   
}
//_____________________________________________________________________________
Bool_t AliAnalysisTaskJetMatching::Notify()
{
    // for each file get the number of trials and pythia cross section
    // see  $ALICE_ROOT/PWGJE/AliAnalysisTaskJetProperties.cxx
    //      $ALICE_ROOT/PWG/Tools/AliAnalysisHelperJetTasks.cxx
    // this function is implenented here temporarily to avoid introducing a dependency
    // later on this could just be a call to a static helper function
    #ifdef DEBUGTASK
        printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
    #endif
    Float_t xsection(0), ftrials(1);
    fAvgTrials = ftrials;
    TTree *tree = AliAnalysisManager::GetAnalysisManager()->GetTree();
    if(tree) {
        TFile *curfile = tree->GetCurrentFile();
        if (!curfile) return kFALSE;
        TString file(curfile->GetName()); 
        if(file.Contains("root_archive.zip#")) file.Replace(file.Index("#",1,file.Index("root_archive",12,0,TString::kExact),TString::kExact)+1,file.Index(".root",5,TString::kExact)-file.Index("root_archive",12,0,TString::kExact),"");
        else file.ReplaceAll(gSystem->BaseName(file.Data()),"");
        TFile *fxsec = TFile::Open(Form("%s%s",file.Data(),"pyxsec.root"));
        if(!fxsec) {
            fxsec = TFile::Open(Form("%s%s",file.Data(),"pyxsec_hists.root"));
            if(fxsec) {
                TKey* key = (TKey*)fxsec->GetListOfKeys()->At(0); 
                if(key) {
                      TList *list = dynamic_cast<TList*>(key->ReadObj());
                      if(list) {
                          xsection = ((TProfile*)list->FindObject("h1Xsec"))->GetBinContent(1);
                          ftrials  = ((TH1F*)list->FindObject("h1Trials"))->GetBinContent(1);
                      }
                }
                fxsec->Close();
            }
        } else {
            TTree *xtree = (TTree*)fxsec->Get("Xsection");
            if(xtree) {
                UInt_t _ftrials  = 0;
                Double_t _xsection  = 0;
                xtree->SetBranchAddress("xsection",&_xsection);
                xtree->SetBranchAddress("ntrials",&_ftrials);
                xtree->GetEntry(0);
                ftrials = _ftrials;
                xsection = _xsection;
            }
            fxsec->Close();
        }
        fh1Xsec->Fill("<#sigma>",xsection);
        Float_t nEntries = (Float_t)tree->GetTree()->GetEntries();
        if(ftrials >= nEntries && nEntries > 0.) fAvgTrials = ftrials/nEntries;
        fh1Trials->Fill("#sum{ntrials}",ftrials); 
    }  
    return kTRUE;
}
//_____________________________________________________________________________
Bool_t AliAnalysisTaskJetMatching::Run()
{
    // execute once for each event
    #ifdef DEBUGTASK
        printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
    #endif
    if(!(InputEvent() && fSourceJets && fTargetJets && IsEventSelected())) return kFALSE;
    if(fh1AvgTrials) fh1AvgTrials->Fill("#sum{avg ntrials}", fAvgTrials);
    // step one: do geometric matching 
    switch (fMatchingScheme) {
        // FIXME having separate dedicated functions is not necessary and historical
        // cluttered code - should be cleaned up and merged into one
        case kGeoEtaPhi : {
            DoGeometricMatchingEtaPhi();
            // break if no jet was matched
            if(!fMatchedJetContainer[1][0]) return kTRUE;
        } break;
        case kGeoR : {
            DoGeometricMatchingR();
            // break if no jet was matched
            if(!fMatchedJetContainer[1][0]) return kTRUE;
        } break;
        case kDiJet : {
            DoDiJetMatching();
        } break;
        default : break;
    }
    // optional step two: get a bijection (avoid duplicate matches)
    if(fGetBijection)           GetBijection();
    // optional step three: match constituents within matched jets
    if(fMatchConstituents)      DoConstituentMatching();
    // stream data to output
    PostMatchedJets();
    FillMatchedJetHistograms();
    #ifdef DEBUGTASK
        PrintInfo();
    #endif
    PostData(1, fOutputList);
    return kTRUE;
}
//_____________________________________________________________________________
void AliAnalysisTaskJetMatching::DoGeometricMatchingEtaPhi()
{
    // do geometric matching based on eta phi distance between jet centers
    #ifdef DEBUGTASK
        printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
    #endif
    fNoMatchedJets = 0; // reset the matched jet counter
    Int_t iSource(fSourceJets->GetEntriesFast()), iTarget(fTargetJets->GetEntriesFast());
    for(Int_t i(0); i < iSource; i++) {
        AliEmcalJet* sourceJet(static_cast<AliEmcalJet*>(fSourceJets->At(i)));
        if(!PassesCuts(sourceJet, 0)) continue;
        for(Int_t j(0); j < iTarget; j++) {
            AliEmcalJet* targetJet(static_cast<AliEmcalJet*>(fTargetJets->At(j)));
            if(!PassesCuts(targetJet, 1)) continue;
            if (fUseEmcalBaseJetCuts && !AcceptJet(targetJet, 1)) continue;
            if((TMath::Abs(sourceJet->Eta() - targetJet->Eta()) < fMatchEta )) {
                Double_t sourcePhi(sourceJet->Phi()), targetPhi(targetJet->Phi());
                if(TMath::Abs(sourcePhi-targetPhi) > TMath::Abs(sourcePhi-targetPhi+TMath::TwoPi())) sourcePhi+=TMath::TwoPi();
                if(TMath::Abs(sourcePhi-targetPhi) > TMath::Abs(sourcePhi-targetPhi-TMath::TwoPi())) sourcePhi-=TMath::TwoPi();
                if(TMath::Abs(sourcePhi-targetPhi) < fMatchPhi) {       // accept the jets as matching 
                Bool_t isBestMatch(kTRUE);
                    if(fGetBijection) { // match has been found, for bijection only store it if there's no better match
    #ifdef DEBUGTASK
        printf(" > Entering first bijection test \n");
    #endif
                        for(Int_t k(i); k < iSource; k++) {
                            AliEmcalJet* candidateSourceJet(static_cast<AliEmcalJet*>(fSourceJets->At(k)));
                            if(PassesCuts(candidateSourceJet, 0)) continue;
    #ifdef DEBUGTASK
        printf("source distance %.2f \t candidate distance %.2f \n", GetR(sourceJet, targetJet),GetR(candidateSourceJet, targetJet));
    #endif
                            if(GetR(sourceJet, targetJet) > GetR(candidateSourceJet, targetJet)) {
                                isBestMatch = kFALSE;
                                break;
                            }
                        }
    #ifdef DEBUGTASK
        (isBestMatch) ? printf(" kept source \n ") : printf(" we can do better (rejected source) \n");
    #endif
                    }
                    if(isBestMatch) {
                        fMatchedJetContainer[fNoMatchedJets][0] = sourceJet;
                        fMatchedJetContainer[fNoMatchedJets][1] = targetJet;
                        fNoMatchedJets++;
                    }
                    if(fNoMatchedJets > 199) {   // maximum to keep the cache at reasonable size
                        AliError(Form("%s: Found too many matched jets (> 100). Adjust matching criteria !", GetName()));
                        return;
                    }
                }
            }
        }
    }
}
//_____________________________________________________________________________
void AliAnalysisTaskJetMatching::DoGeometricMatchingR()
{
    // do geometric matching based on shortest path between jet centers
    #ifdef DEBUGTASK
        printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
    #endif
    fNoMatchedJets = 0; // reset the matched jet counter
    Int_t iSource(fSourceJets->GetEntriesFast()), iTarget(fTargetJets->GetEntriesFast());
    for(Int_t i(0); i < iSource; i++) {
        AliEmcalJet* sourceJet(static_cast<AliEmcalJet*>(fSourceJets->At(i)));
        if(!PassesCuts(sourceJet, 0)) continue;
        for(Int_t j(0); j < iTarget; j++) {
            AliEmcalJet* targetJet(static_cast<AliEmcalJet*>(fTargetJets->At(j)));
            if(!PassesCuts(targetJet, 1)) continue;
            else if (fUseEmcalBaseJetCuts && !AcceptJet(targetJet, 1)) continue;
            if(GetR(sourceJet, targetJet) <= fMatchR) {
                Bool_t isBestMatch(kTRUE);
                if(fGetBijection) { // match has been found, for bijection only store it if there's no better match
    #ifdef DEBUGTASK
        printf(" > Entering first bijection test \n");
    #endif
                    for(Int_t k(i); k < iSource; k++) {
                        AliEmcalJet* candidateSourceJet(static_cast<AliEmcalJet*>(fSourceJets->At(k)));
                        if(!PassesCuts(candidateSourceJet, 0)) continue;
    #ifdef DEBUGTASK
        printf("source distance %.2f \t candidate distance %.2f \n", GetR(sourceJet, targetJet),GetR(candidateSourceJet, targetJet));
    #endif
                        if(GetR(sourceJet, targetJet) > GetR(candidateSourceJet, targetJet)) {
                            isBestMatch = kFALSE;
                            break;
                        }
                    }
    #ifdef DEBUGTASK
        (isBestMatch) ? printf(" kept source \n ") : printf(" we can do better (rejected source) \n");
    #endif
                }
                if(isBestMatch) {
                    fMatchedJetContainer[fNoMatchedJets][0] = sourceJet;
                    fMatchedJetContainer[fNoMatchedJets][1] = targetJet;
                    fNoMatchedJets++;
                }
                if(fNoMatchedJets > 99) {
                    AliError(Form("%s: Found too many matched jets (> 100). Adjust matching criteria !", GetName()));
                    return;
                }
            }
        }
    }
}
//_____________________________________________________________________________
void AliAnalysisTaskJetMatching::DoDiJetMatching()
{
    // match dijets. this is in a sense a 'special' mode of the task as both jet supplied jet arrays 
    // (target and source) are the same jet collection, matching will be performed on distribution in
    // azimuth
    // no ouptut array is produced, dedicated dijet histo's are filled in this function instead
    #ifdef DEBUGTASK
        printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
    #endif
    // get the leading jet in a given acceptance (TPC is default)
    Int_t leadingJetIndex(-1), subLeadingJetIndex(-1);
    // retrieve the leading jet, leadingJetIndex points to the leading jet
    AliEmcalJet* leadingJet(GetLeadingJet(fSourceJets, leadingJetIndex));
    if(!leadingJet) return;
    // fill phi and eta of leading jet (should always be in selected acceptance)
    fHistDiJetLeadingJet->Fill(leadingJet->Phi(), leadingJet->Eta(), leadingJet->Pt());
    Double_t sourcePhi(leadingJet->Phi()), targetPhi(-1);
    // get the sub-leading jet - faster when leading jet is also provided
    AliEmcalJet* subLeadingJet(GetSubLeadingJet(fSourceJets, leadingJetIndex, subLeadingJetIndex));
    if(!subLeadingJet) return;
    else { // check if the sub-leading jet is actually the away-side jet
        targetPhi = subLeadingJet->Phi() + TMath::Pi();
        // rotate jets to common phase
        if(TMath::Abs(sourcePhi) > TMath::Abs(sourcePhi+TMath::TwoPi())) sourcePhi+=TMath::TwoPi();
        if(TMath::Abs(sourcePhi) > TMath::Abs(sourcePhi-TMath::TwoPi())) sourcePhi-=TMath::TwoPi();
        if(TMath::Abs(targetPhi) > TMath::Abs(targetPhi+TMath::TwoPi())) targetPhi+=TMath::TwoPi();
        if(TMath::Abs(targetPhi) > TMath::Abs(targetPhi-TMath::TwoPi())) targetPhi-=TMath::TwoPi();
        if(TMath::Abs(sourcePhi-targetPhi) < fMatchPhi) {
            fHistDiJet->Fill(subLeadingJet->Phi(), subLeadingJet->Eta(), leadingJet->Pt());
            fHistDiJetDPhi->Fill(sourcePhi-targetPhi, leadingJet->Pt());
            fHistDiJetDPt->Fill(leadingJet->Pt() - subLeadingJet->Pt(), leadingJet->Pt());
        }
    }
}
//_____________________________________________________________________________
void AliAnalysisTaskJetMatching::DoConstituentMatching()
{
    // match constituents within matched jets 
    #ifdef DEBUGTASK
        printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
    #endif
    if(!fTracks) {
        AliFatal(Form("%s Fatal error! To do deep matching, supply jet constituents ! \n", GetName()));
        return; // coverity ...
    }
    for(Int_t i(0); i < fNoMatchedJets; i++) {
        AliEmcalJet* sourceJet = fMatchedJetContainer[i][0];
        AliEmcalJet* targetJet = fMatchedJetContainer[i][1];
        if(sourceJet && targetJet) {    // duplicate check: slot migth be NULL
            Double_t targetPt(0);
            Int_t iSJ(sourceJet->GetNumberOfTracks());
            Int_t iTJ(targetJet->GetNumberOfTracks());
            Int_t overlap(0), alreadyFound(0);
            for(Int_t j(0); j < iSJ; j++) {
                alreadyFound = 0;
                Int_t idSource((Int_t)sourceJet->TrackAt(j));
                for(Int_t k(0); k < iTJ; k++) { // compare all target tracks to the source track
                    if(idSource == targetJet->TrackAt(k) && alreadyFound == 0) {
                        overlap++;
                        alreadyFound++; // avoid possible duplicate matching
                        AliVParticle* vp(static_cast<AliVParticle*>(targetJet->TrackAt(k, fTracks)));
                        if(vp) targetPt += vp->Pt();
                        continue;
                    }
                }
            }
            if((float)overlap/(float)iSJ < fMinFracRecoveredConstituents || targetPt/sourceJet->Pt() < fMinFracRecoveredConstituentPt) {
    #ifdef DEBUGTASK
        printf("  \n > Purging jet, recovered constituents ratio  %i / %i = %.2f <  or pt ratio %.2f / %.2f = %.2f < %.2f", overlap, iSJ, (float)overlap/(float)iSJ, targetPt, sourceJet->Pt(), targetPt/sourceJet->Pt(), fMinFracRecoveredConstituentPt);
    #endif
                fMatchedJetContainer[i][0] = 0x0;
                fMatchedJetContainer[i][1] = 0x0;
                continue;
            }
            if(sourceJet->Pt() > 0) {
                Double_t sourceRho(0), targetRho(0);
                if(fSourceRho) sourceRho = fSourceRho->GetLocalVal(sourceJet->Phi(), fSourceRadius)*sourceJet->Area();
                if(fTargetRho) targetRho = fTargetRho->GetLocalVal(targetJet->Phi(), fTargetRadius)*targetJet->Area();
                fProfFracPtMatched->Fill(sourceJet->Pt()-sourceRho, (targetPt-targetRho) / (sourceJet->Pt()-sourceRho));
                fProfFracPtJets->Fill(sourceJet->Pt()-sourceRho, (targetJet->Pt()-targetRho) / (sourceJet->Pt()-sourceRho));
                fProfFracNoMatched->Fill(sourceJet->Pt()-sourceRho, (double)overlap / (double)sourceJet->GetNumberOfTracks());
                fProfFracNoJets->Fill(sourceJet->Pt()-sourceRho, (double)targetJet->GetNumberOfTracks() / (double)sourceJet->GetNumberOfTracks());
            }
    #ifdef DEBUGTASK
        if(fDebug > 0) {
              printf("\n > Jet A: %i const\t", iSJ);
              printf(" > Jet B %i const\t", iTJ);
              printf(" -> OVERLAP: %i tracks <- \n", overlap);
        }
    #endif
       }
    }
}
//_____________________________________________________________________________
void AliAnalysisTaskJetMatching::GetBijection()
{
    // bijection of source and matched jets, based on closest distance between jets
    #ifdef DEBUGTASK
        printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
    #endif
    for(Int_t i(0); i < fNoMatchedJets; i++) {
        for(Int_t j(i+1); j < fNoMatchedJets; j++) {
            if(fMatchedJetContainer[i][0] == fMatchedJetContainer[j][0]) {
                // found source with two targets, now see which target is closer to the source
                if(!(fMatchedJetContainer[i][0] && fMatchedJetContainer[i][1] && fMatchedJetContainer[j][0] && fMatchedJetContainer[j][1] )) continue;
                Double_t rA(GetR(fMatchedJetContainer[i][0], fMatchedJetContainer[i][1]));      // distance between connection A = i
                Double_t rB(GetR(fMatchedJetContainer[j][0], fMatchedJetContainer[j][1]));      // distance between connection B = j
                if (rB > rA) {  // jet two is far away, clear it from both target and source list
                    fMatchedJetContainer[j][0] = 0x0;
                    fMatchedJetContainer[j][1] = 0x0;
                } else {                // jet one is far away, clear it from both target and source list
                    fMatchedJetContainer[i][0] = fMatchedJetContainer[j][0];    // switch to avoid breaking loop
                    fMatchedJetContainer[i][1] = fMatchedJetContainer[j][1];    
                    fMatchedJetContainer[j][0] = 0x0;                           // clear duplicate jet from cache
                    fMatchedJetContainer[j][1] = 0x0;
                }
    #ifdef DEBUGTASK
         printf(" found duplicate jet, chose %.2f over %.2f \n" , (rB > rA) ? rA : rB, (rB > rA) ? rB : rA);
    #endif
            }
        }
    }
}
//_____________________________________________________________________________
void AliAnalysisTaskJetMatching::PostMatchedJets()
{
    // post matched jets
    #ifdef DEBUGTASK
        printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
    #endif
    fMatchedJets->Delete();     // should be a NULL operation, but added just in case
    for(Int_t i(0), p(0); i < fNoMatchedJets; i++) {
        if(fMatchedJetContainer[i][1]) {        // duplicate jets will have NULL value here and are skipped
            new((*fMatchedJets)[p]) AliEmcalJet(*fMatchedJetContainer[i][1]);
            p++; 
        }
    }
}
//_____________________________________________________________________________
void AliAnalysisTaskJetMatching::FillAnalysisSummaryHistogram() const
{
    // fill the analysis summary histrogram, saves all relevant analysis settigns
    #ifdef DEBUGTASK
        printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
    #endif
    fHistAnalysisSummary->GetXaxis()->SetBinLabel(1, "fUseScaledRho");
    fHistAnalysisSummary->SetBinContent(1, (int)fUseScaledRho);
    fHistAnalysisSummary->GetXaxis()->SetBinLabel(2, "fMatchingScheme");
    fHistAnalysisSummary->SetBinContent(2, (int)fMatchingScheme);
    fHistAnalysisSummary->GetXaxis()->SetBinLabel(3, "fSourceBKG");
    fHistAnalysisSummary->SetBinContent(3, (int)fSourceBKG);
    fHistAnalysisSummary->GetXaxis()->SetBinLabel(4, "fTargetBKG");
    fHistAnalysisSummary->SetBinContent(4, (int)fTargetBKG);
    fHistAnalysisSummary->GetXaxis()->SetBinLabel(5, "fMatchEta");
    fHistAnalysisSummary->SetBinContent(5, fMatchEta);
    fHistAnalysisSummary->GetXaxis()->SetBinLabel(6, "fMatchPhi");
    fHistAnalysisSummary->SetBinContent(6, fMatchPhi);
    fHistAnalysisSummary->GetXaxis()->SetBinLabel(7, "fMatchR");
    fHistAnalysisSummary->SetBinContent(7, fMatchR);
    fHistAnalysisSummary->GetXaxis()->SetBinLabel(8, "iter");
    fHistAnalysisSummary->SetBinContent(8, 1.);
}
//_____________________________________________________________________________
void AliAnalysisTaskJetMatching::FillMatchedJetHistograms() 
{
    // fill matched jet histograms
    #ifdef DEBUGTASK
        printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__);
    #endif
    for(Int_t i(0); i < fSourceJets->GetEntriesFast(); i++) {
        AliEmcalJet* source = static_cast<AliEmcalJet*>(fSourceJets->At(i));
        if(!source) continue;
        else if(fUseEmcalBaseJetCuts && !AcceptJet(source, 0)) continue;
        Double_t sourceRho(0), targetRho(0);
        if(fSourceRho) sourceRho = fSourceRho->GetLocalVal(source->Phi(), fSourceRadius)*source->Area();
        fHistSourceJetPt->Fill(source->Pt()-sourceRho);
        fHistNoConstSourceJet->Fill(source->GetNumberOfConstituents());
        for(Int_t j(0); j < fTargetJets->GetEntriesFast(); j++) {
            AliEmcalJet* target = static_cast<AliEmcalJet*>(fTargetJets->At(j));
            if(target) {
                if(fUseEmcalBaseJetCuts && !AcceptJet(target, 1)) continue;
                if(fTargetRho) targetRho = fTargetRho->GetLocalVal(target->Phi(), fTargetRadius)*target->Area();
                fProfQA->Fill(0.5, TMath::Abs((source->Pt()-sourceRho)-(target->Pt()-targetRho)));  
                fProfQA->Fill(1.5, TMath::Abs(source->Eta()-target->Eta()));
                fProfQA->Fill(2.5, TMath::Abs(source->Phi()-target->Phi()));
                fHistUnsortedCorrelation->Fill(PhaseShift(source->Phi()-target->Phi(), 2));
                if(j==0) {
                    fHistTargetJetPt->Fill(target->Pt()-targetRho);
                    fHistNoConstTargetJet->Fill(target->GetNumberOfConstituents());
                }
            }
        }
    }
    for(Int_t i(0); i < fNoMatchedJets; i++) {
        if(fMatchedJetContainer[i][0] && fMatchedJetContainer[i][1]) {
            Double_t sourceRho(0), targetRho(0);
            if(fSourceRho) sourceRho = fSourceRho->GetLocalVal(fMatchedJetContainer[i][0]->Phi(), fSourceRadius)*fMatchedJetContainer[i][0]->Area();
            if(fTargetRho) targetRho = fTargetRho->GetLocalVal(fMatchedJetContainer[i][1]->Phi(), fTargetRadius)*fMatchedJetContainer[i][1]->Area();
            fHistMatchedCorrelation->Fill(PhaseShift(fMatchedJetContainer[i][0]->Phi()-fMatchedJetContainer[i][1]->Phi(), 2));
            fHistMatchedSourceJetPt->Fill(fMatchedJetContainer[i][0]->Pt()-sourceRho);
            fHistMatchedJetPt->Fill(fMatchedJetContainer[i][1]->Pt()-targetRho);
            fHistNoConstMatchJet->Fill(fMatchedJetContainer[i][1]->Pt()-targetRho);
            fProfQAMatched->Fill(0.5, TMath::Abs((fMatchedJetContainer[i][0]->Pt()-sourceRho)-(fMatchedJetContainer[i][1]->Pt()-targetRho)));
            fProfQAMatched->Fill(1.5, TMath::Abs(fMatchedJetContainer[i][0]->Eta()-fMatchedJetContainer[i][1]->Eta()));
            fProfQAMatched->Fill(2.5, TMath::Abs(fMatchedJetContainer[i][0]->Phi()-fMatchedJetContainer[i][1]->Phi()));
            
            fHistSourceMatchedJetPt->Fill(fMatchedJetContainer[i][0]->Pt()-sourceRho, fMatchedJetContainer[i][1]->Pt()-targetRho);
            if(fDoDetectorResponse) {
                fProfFracPtJets->Fill(fMatchedJetContainer[i][0]->Pt()-sourceRho, (fMatchedJetContainer[i][1]->Pt()-targetRho) / (fMatchedJetContainer[i][0]->Pt()-sourceRho));
                fProfFracNoJets->Fill(fMatchedJetContainer[i][0]->Pt()-sourceRho, (double)fMatchedJetContainer[i][1]->GetNumberOfTracks() / (double)fMatchedJetContainer[i][0]->GetNumberOfTracks());
                fHistDetectorResponseProb->Fill((fMatchedJetContainer[i][1]->Pt()-fMatchedJetContainer[i][0]->Pt())/fMatchedJetContainer[i][0]->Pt(), fMatchedJetContainer[i][0]->Pt());
            }
        }
    }
}
//_____________________________________________________________________________
AliEmcalJet* AliAnalysisTaskJetMatching::GetLeadingJet(TClonesArray* source, Int_t &leadingJetIndex, Double_t etaMin, Double_t etaMax) 
{
    // return the leading jet within giiven acceptance
    Int_t iJets(source->GetEntriesFast());
    Double_t pt(0);
    AliEmcalJet* leadingJet(0x0);
    for(Int_t i(0); i < iJets; i++) {
        AliEmcalJet* jet = static_cast<AliEmcalJet*>(source->At(i));
        if(jet->Eta() < etaMin || jet->Eta() > etaMax) continue;
        if(jet->Pt() > pt) {
           leadingJet = jet;
           pt = leadingJet->Pt();
           leadingJetIndex = i;
        }
    }
    return leadingJet;
}
//_____________________________________________________________________________
AliEmcalJet* AliAnalysisTaskJetMatching::GetSubLeadingJet(TClonesArray* source, Int_t leadingJetIndex, Int_t &subLeadingJetIndex) 
{
    // return the sub-leading jet within given acceptance
    // same as GetLeadingJet() but skips the leading jet (so returned jet is 
    // sub-leading by design)
    // there is no eta requirement on the location of the sub-leading jet
    Int_t iJets(source->GetEntriesFast());
    // if the leading jet isn't given, retrieve it
    if(leadingJetIndex < 0) GetLeadingJet(source, leadingJetIndex);
    AliEmcalJet *leadingJet(0x0), *prevLeadingJet(static_cast<AliEmcalJet*>(source->At(leadingJetIndex)));
    if(!prevLeadingJet) return 0x0;
    Double_t pt(0), leadingPt(prevLeadingJet->Pt());
    for(Int_t i(0); i < iJets; i++) {
        if(i == leadingJetIndex) continue;
        AliEmcalJet* jet = static_cast<AliEmcalJet*>(source->At(i));
        // check if jet is actually sub-leading
        if(jet->Pt() > pt && jet->Pt() <= leadingPt) {
           leadingJet = jet;
           pt = leadingJet->Pt();
           subLeadingJetIndex = i;
        }
    }
    return leadingJet;
}
//_____________________________________________________________________________
void AliAnalysisTaskJetMatching::PrintInfo() const
{
    // print some info 
    printf("\n > No. of source jets from %s \n \t %i \n ", fSourceJetsName.Data(), fSourceJets->GetEntriesFast());
    printf(" > No. of target jets from %s \n \t %i \n ", fTargetJetsName.Data(), fTargetJets->GetEntriesFast());
    printf(" > No. of matched jets from %s \n \t %i \n ", fMatchedJetsName.Data(), fMatchedJets->GetEntriesFast());
}
//_____________________________________________________________________________
void AliAnalysisTaskJetMatching::Terminate(Option_t *)
{
    // terminate
}
//_____________________________________________________________________________
 AliAnalysisTaskJetMatching.cxx:1
 AliAnalysisTaskJetMatching.cxx:2
 AliAnalysisTaskJetMatching.cxx:3
 AliAnalysisTaskJetMatching.cxx:4
 AliAnalysisTaskJetMatching.cxx:5
 AliAnalysisTaskJetMatching.cxx:6
 AliAnalysisTaskJetMatching.cxx:7
 AliAnalysisTaskJetMatching.cxx:8
 AliAnalysisTaskJetMatching.cxx:9
 AliAnalysisTaskJetMatching.cxx:10
 AliAnalysisTaskJetMatching.cxx:11
 AliAnalysisTaskJetMatching.cxx:12
 AliAnalysisTaskJetMatching.cxx:13
 AliAnalysisTaskJetMatching.cxx:14
 AliAnalysisTaskJetMatching.cxx:15
 AliAnalysisTaskJetMatching.cxx:16
 AliAnalysisTaskJetMatching.cxx:17
 AliAnalysisTaskJetMatching.cxx:18
 AliAnalysisTaskJetMatching.cxx:19
 AliAnalysisTaskJetMatching.cxx:20
 AliAnalysisTaskJetMatching.cxx:21
 AliAnalysisTaskJetMatching.cxx:22
 AliAnalysisTaskJetMatching.cxx:23
 AliAnalysisTaskJetMatching.cxx:24
 AliAnalysisTaskJetMatching.cxx:25
 AliAnalysisTaskJetMatching.cxx:26
 AliAnalysisTaskJetMatching.cxx:27
 AliAnalysisTaskJetMatching.cxx:28
 AliAnalysisTaskJetMatching.cxx:29
 AliAnalysisTaskJetMatching.cxx:30
 AliAnalysisTaskJetMatching.cxx:31
 AliAnalysisTaskJetMatching.cxx:32
 AliAnalysisTaskJetMatching.cxx:33
 AliAnalysisTaskJetMatching.cxx:34
 AliAnalysisTaskJetMatching.cxx:35
 AliAnalysisTaskJetMatching.cxx:36
 AliAnalysisTaskJetMatching.cxx:37
 AliAnalysisTaskJetMatching.cxx:38
 AliAnalysisTaskJetMatching.cxx:39
 AliAnalysisTaskJetMatching.cxx:40
 AliAnalysisTaskJetMatching.cxx:41
 AliAnalysisTaskJetMatching.cxx:42
 AliAnalysisTaskJetMatching.cxx:43
 AliAnalysisTaskJetMatching.cxx:44
 AliAnalysisTaskJetMatching.cxx:45
 AliAnalysisTaskJetMatching.cxx:46
 AliAnalysisTaskJetMatching.cxx:47
 AliAnalysisTaskJetMatching.cxx:48
 AliAnalysisTaskJetMatching.cxx:49
 AliAnalysisTaskJetMatching.cxx:50
 AliAnalysisTaskJetMatching.cxx:51
 AliAnalysisTaskJetMatching.cxx:52
 AliAnalysisTaskJetMatching.cxx:53
 AliAnalysisTaskJetMatching.cxx:54
 AliAnalysisTaskJetMatching.cxx:55
 AliAnalysisTaskJetMatching.cxx:56
 AliAnalysisTaskJetMatching.cxx:57
 AliAnalysisTaskJetMatching.cxx:58
 AliAnalysisTaskJetMatching.cxx:59
 AliAnalysisTaskJetMatching.cxx:60
 AliAnalysisTaskJetMatching.cxx:61
 AliAnalysisTaskJetMatching.cxx:62
 AliAnalysisTaskJetMatching.cxx:63
 AliAnalysisTaskJetMatching.cxx:64
 AliAnalysisTaskJetMatching.cxx:65
 AliAnalysisTaskJetMatching.cxx:66
 AliAnalysisTaskJetMatching.cxx:67
 AliAnalysisTaskJetMatching.cxx:68
 AliAnalysisTaskJetMatching.cxx:69
 AliAnalysisTaskJetMatching.cxx:70
 AliAnalysisTaskJetMatching.cxx:71
 AliAnalysisTaskJetMatching.cxx:72
 AliAnalysisTaskJetMatching.cxx:73
 AliAnalysisTaskJetMatching.cxx:74
 AliAnalysisTaskJetMatching.cxx:75
 AliAnalysisTaskJetMatching.cxx:76
 AliAnalysisTaskJetMatching.cxx:77
 AliAnalysisTaskJetMatching.cxx:78
 AliAnalysisTaskJetMatching.cxx:79
 AliAnalysisTaskJetMatching.cxx:80
 AliAnalysisTaskJetMatching.cxx:81
 AliAnalysisTaskJetMatching.cxx:82
 AliAnalysisTaskJetMatching.cxx:83
 AliAnalysisTaskJetMatching.cxx:84
 AliAnalysisTaskJetMatching.cxx:85
 AliAnalysisTaskJetMatching.cxx:86
 AliAnalysisTaskJetMatching.cxx:87
 AliAnalysisTaskJetMatching.cxx:88
 AliAnalysisTaskJetMatching.cxx:89
 AliAnalysisTaskJetMatching.cxx:90
 AliAnalysisTaskJetMatching.cxx:91
 AliAnalysisTaskJetMatching.cxx:92
 AliAnalysisTaskJetMatching.cxx:93
 AliAnalysisTaskJetMatching.cxx:94
 AliAnalysisTaskJetMatching.cxx:95
 AliAnalysisTaskJetMatching.cxx:96
 AliAnalysisTaskJetMatching.cxx:97
 AliAnalysisTaskJetMatching.cxx:98
 AliAnalysisTaskJetMatching.cxx:99
 AliAnalysisTaskJetMatching.cxx:100
 AliAnalysisTaskJetMatching.cxx:101
 AliAnalysisTaskJetMatching.cxx:102
 AliAnalysisTaskJetMatching.cxx:103
 AliAnalysisTaskJetMatching.cxx:104
 AliAnalysisTaskJetMatching.cxx:105
 AliAnalysisTaskJetMatching.cxx:106
 AliAnalysisTaskJetMatching.cxx:107
 AliAnalysisTaskJetMatching.cxx:108
 AliAnalysisTaskJetMatching.cxx:109
 AliAnalysisTaskJetMatching.cxx:110
 AliAnalysisTaskJetMatching.cxx:111
 AliAnalysisTaskJetMatching.cxx:112
 AliAnalysisTaskJetMatching.cxx:113
 AliAnalysisTaskJetMatching.cxx:114
 AliAnalysisTaskJetMatching.cxx:115
 AliAnalysisTaskJetMatching.cxx:116
 AliAnalysisTaskJetMatching.cxx:117
 AliAnalysisTaskJetMatching.cxx:118
 AliAnalysisTaskJetMatching.cxx:119
 AliAnalysisTaskJetMatching.cxx:120
 AliAnalysisTaskJetMatching.cxx:121
 AliAnalysisTaskJetMatching.cxx:122
 AliAnalysisTaskJetMatching.cxx:123
 AliAnalysisTaskJetMatching.cxx:124
 AliAnalysisTaskJetMatching.cxx:125
 AliAnalysisTaskJetMatching.cxx:126
 AliAnalysisTaskJetMatching.cxx:127
 AliAnalysisTaskJetMatching.cxx:128
 AliAnalysisTaskJetMatching.cxx:129
 AliAnalysisTaskJetMatching.cxx:130
 AliAnalysisTaskJetMatching.cxx:131
 AliAnalysisTaskJetMatching.cxx:132
 AliAnalysisTaskJetMatching.cxx:133
 AliAnalysisTaskJetMatching.cxx:134
 AliAnalysisTaskJetMatching.cxx:135
 AliAnalysisTaskJetMatching.cxx:136
 AliAnalysisTaskJetMatching.cxx:137
 AliAnalysisTaskJetMatching.cxx:138
 AliAnalysisTaskJetMatching.cxx:139
 AliAnalysisTaskJetMatching.cxx:140
 AliAnalysisTaskJetMatching.cxx:141
 AliAnalysisTaskJetMatching.cxx:142
 AliAnalysisTaskJetMatching.cxx:143
 AliAnalysisTaskJetMatching.cxx:144
 AliAnalysisTaskJetMatching.cxx:145
 AliAnalysisTaskJetMatching.cxx:146
 AliAnalysisTaskJetMatching.cxx:147
 AliAnalysisTaskJetMatching.cxx:148
 AliAnalysisTaskJetMatching.cxx:149
 AliAnalysisTaskJetMatching.cxx:150
 AliAnalysisTaskJetMatching.cxx:151
 AliAnalysisTaskJetMatching.cxx:152
 AliAnalysisTaskJetMatching.cxx:153
 AliAnalysisTaskJetMatching.cxx:154
 AliAnalysisTaskJetMatching.cxx:155
 AliAnalysisTaskJetMatching.cxx:156
 AliAnalysisTaskJetMatching.cxx:157
 AliAnalysisTaskJetMatching.cxx:158
 AliAnalysisTaskJetMatching.cxx:159
 AliAnalysisTaskJetMatching.cxx:160
 AliAnalysisTaskJetMatching.cxx:161
 AliAnalysisTaskJetMatching.cxx:162
 AliAnalysisTaskJetMatching.cxx:163
 AliAnalysisTaskJetMatching.cxx:164
 AliAnalysisTaskJetMatching.cxx:165
 AliAnalysisTaskJetMatching.cxx:166
 AliAnalysisTaskJetMatching.cxx:167
 AliAnalysisTaskJetMatching.cxx:168
 AliAnalysisTaskJetMatching.cxx:169
 AliAnalysisTaskJetMatching.cxx:170
 AliAnalysisTaskJetMatching.cxx:171
 AliAnalysisTaskJetMatching.cxx:172
 AliAnalysisTaskJetMatching.cxx:173
 AliAnalysisTaskJetMatching.cxx:174
 AliAnalysisTaskJetMatching.cxx:175
 AliAnalysisTaskJetMatching.cxx:176
 AliAnalysisTaskJetMatching.cxx:177
 AliAnalysisTaskJetMatching.cxx:178
 AliAnalysisTaskJetMatching.cxx:179
 AliAnalysisTaskJetMatching.cxx:180
 AliAnalysisTaskJetMatching.cxx:181
 AliAnalysisTaskJetMatching.cxx:182
 AliAnalysisTaskJetMatching.cxx:183
 AliAnalysisTaskJetMatching.cxx:184
 AliAnalysisTaskJetMatching.cxx:185
 AliAnalysisTaskJetMatching.cxx:186
 AliAnalysisTaskJetMatching.cxx:187
 AliAnalysisTaskJetMatching.cxx:188
 AliAnalysisTaskJetMatching.cxx:189
 AliAnalysisTaskJetMatching.cxx:190
 AliAnalysisTaskJetMatching.cxx:191
 AliAnalysisTaskJetMatching.cxx:192
 AliAnalysisTaskJetMatching.cxx:193
 AliAnalysisTaskJetMatching.cxx:194
 AliAnalysisTaskJetMatching.cxx:195
 AliAnalysisTaskJetMatching.cxx:196
 AliAnalysisTaskJetMatching.cxx:197
 AliAnalysisTaskJetMatching.cxx:198
 AliAnalysisTaskJetMatching.cxx:199
 AliAnalysisTaskJetMatching.cxx:200
 AliAnalysisTaskJetMatching.cxx:201
 AliAnalysisTaskJetMatching.cxx:202
 AliAnalysisTaskJetMatching.cxx:203
 AliAnalysisTaskJetMatching.cxx:204
 AliAnalysisTaskJetMatching.cxx:205
 AliAnalysisTaskJetMatching.cxx:206
 AliAnalysisTaskJetMatching.cxx:207
 AliAnalysisTaskJetMatching.cxx:208
 AliAnalysisTaskJetMatching.cxx:209
 AliAnalysisTaskJetMatching.cxx:210
 AliAnalysisTaskJetMatching.cxx:211
 AliAnalysisTaskJetMatching.cxx:212
 AliAnalysisTaskJetMatching.cxx:213
 AliAnalysisTaskJetMatching.cxx:214
 AliAnalysisTaskJetMatching.cxx:215
 AliAnalysisTaskJetMatching.cxx:216
 AliAnalysisTaskJetMatching.cxx:217
 AliAnalysisTaskJetMatching.cxx:218
 AliAnalysisTaskJetMatching.cxx:219
 AliAnalysisTaskJetMatching.cxx:220
 AliAnalysisTaskJetMatching.cxx:221
 AliAnalysisTaskJetMatching.cxx:222
 AliAnalysisTaskJetMatching.cxx:223
 AliAnalysisTaskJetMatching.cxx:224
 AliAnalysisTaskJetMatching.cxx:225
 AliAnalysisTaskJetMatching.cxx:226
 AliAnalysisTaskJetMatching.cxx:227
 AliAnalysisTaskJetMatching.cxx:228
 AliAnalysisTaskJetMatching.cxx:229
 AliAnalysisTaskJetMatching.cxx:230
 AliAnalysisTaskJetMatching.cxx:231
 AliAnalysisTaskJetMatching.cxx:232
 AliAnalysisTaskJetMatching.cxx:233
 AliAnalysisTaskJetMatching.cxx:234
 AliAnalysisTaskJetMatching.cxx:235
 AliAnalysisTaskJetMatching.cxx:236
 AliAnalysisTaskJetMatching.cxx:237
 AliAnalysisTaskJetMatching.cxx:238
 AliAnalysisTaskJetMatching.cxx:239
 AliAnalysisTaskJetMatching.cxx:240
 AliAnalysisTaskJetMatching.cxx:241
 AliAnalysisTaskJetMatching.cxx:242
 AliAnalysisTaskJetMatching.cxx:243
 AliAnalysisTaskJetMatching.cxx:244
 AliAnalysisTaskJetMatching.cxx:245
 AliAnalysisTaskJetMatching.cxx:246
 AliAnalysisTaskJetMatching.cxx:247
 AliAnalysisTaskJetMatching.cxx:248
 AliAnalysisTaskJetMatching.cxx:249
 AliAnalysisTaskJetMatching.cxx:250
 AliAnalysisTaskJetMatching.cxx:251
 AliAnalysisTaskJetMatching.cxx:252
 AliAnalysisTaskJetMatching.cxx:253
 AliAnalysisTaskJetMatching.cxx:254
 AliAnalysisTaskJetMatching.cxx:255
 AliAnalysisTaskJetMatching.cxx:256
 AliAnalysisTaskJetMatching.cxx:257
 AliAnalysisTaskJetMatching.cxx:258
 AliAnalysisTaskJetMatching.cxx:259
 AliAnalysisTaskJetMatching.cxx:260
 AliAnalysisTaskJetMatching.cxx:261
 AliAnalysisTaskJetMatching.cxx:262
 AliAnalysisTaskJetMatching.cxx:263
 AliAnalysisTaskJetMatching.cxx:264
 AliAnalysisTaskJetMatching.cxx:265
 AliAnalysisTaskJetMatching.cxx:266
 AliAnalysisTaskJetMatching.cxx:267
 AliAnalysisTaskJetMatching.cxx:268
 AliAnalysisTaskJetMatching.cxx:269
 AliAnalysisTaskJetMatching.cxx:270
 AliAnalysisTaskJetMatching.cxx:271
 AliAnalysisTaskJetMatching.cxx:272
 AliAnalysisTaskJetMatching.cxx:273
 AliAnalysisTaskJetMatching.cxx:274
 AliAnalysisTaskJetMatching.cxx:275
 AliAnalysisTaskJetMatching.cxx:276
 AliAnalysisTaskJetMatching.cxx:277
 AliAnalysisTaskJetMatching.cxx:278
 AliAnalysisTaskJetMatching.cxx:279
 AliAnalysisTaskJetMatching.cxx:280
 AliAnalysisTaskJetMatching.cxx:281
 AliAnalysisTaskJetMatching.cxx:282
 AliAnalysisTaskJetMatching.cxx:283
 AliAnalysisTaskJetMatching.cxx:284
 AliAnalysisTaskJetMatching.cxx:285
 AliAnalysisTaskJetMatching.cxx:286
 AliAnalysisTaskJetMatching.cxx:287
 AliAnalysisTaskJetMatching.cxx:288
 AliAnalysisTaskJetMatching.cxx:289
 AliAnalysisTaskJetMatching.cxx:290
 AliAnalysisTaskJetMatching.cxx:291
 AliAnalysisTaskJetMatching.cxx:292
 AliAnalysisTaskJetMatching.cxx:293
 AliAnalysisTaskJetMatching.cxx:294
 AliAnalysisTaskJetMatching.cxx:295
 AliAnalysisTaskJetMatching.cxx:296
 AliAnalysisTaskJetMatching.cxx:297
 AliAnalysisTaskJetMatching.cxx:298
 AliAnalysisTaskJetMatching.cxx:299
 AliAnalysisTaskJetMatching.cxx:300
 AliAnalysisTaskJetMatching.cxx:301
 AliAnalysisTaskJetMatching.cxx:302
 AliAnalysisTaskJetMatching.cxx:303
 AliAnalysisTaskJetMatching.cxx:304
 AliAnalysisTaskJetMatching.cxx:305
 AliAnalysisTaskJetMatching.cxx:306
 AliAnalysisTaskJetMatching.cxx:307
 AliAnalysisTaskJetMatching.cxx:308
 AliAnalysisTaskJetMatching.cxx:309
 AliAnalysisTaskJetMatching.cxx:310
 AliAnalysisTaskJetMatching.cxx:311
 AliAnalysisTaskJetMatching.cxx:312
 AliAnalysisTaskJetMatching.cxx:313
 AliAnalysisTaskJetMatching.cxx:314
 AliAnalysisTaskJetMatching.cxx:315
 AliAnalysisTaskJetMatching.cxx:316
 AliAnalysisTaskJetMatching.cxx:317
 AliAnalysisTaskJetMatching.cxx:318
 AliAnalysisTaskJetMatching.cxx:319
 AliAnalysisTaskJetMatching.cxx:320
 AliAnalysisTaskJetMatching.cxx:321
 AliAnalysisTaskJetMatching.cxx:322
 AliAnalysisTaskJetMatching.cxx:323
 AliAnalysisTaskJetMatching.cxx:324
 AliAnalysisTaskJetMatching.cxx:325
 AliAnalysisTaskJetMatching.cxx:326
 AliAnalysisTaskJetMatching.cxx:327
 AliAnalysisTaskJetMatching.cxx:328
 AliAnalysisTaskJetMatching.cxx:329
 AliAnalysisTaskJetMatching.cxx:330
 AliAnalysisTaskJetMatching.cxx:331
 AliAnalysisTaskJetMatching.cxx:332
 AliAnalysisTaskJetMatching.cxx:333
 AliAnalysisTaskJetMatching.cxx:334
 AliAnalysisTaskJetMatching.cxx:335
 AliAnalysisTaskJetMatching.cxx:336
 AliAnalysisTaskJetMatching.cxx:337
 AliAnalysisTaskJetMatching.cxx:338
 AliAnalysisTaskJetMatching.cxx:339
 AliAnalysisTaskJetMatching.cxx:340
 AliAnalysisTaskJetMatching.cxx:341
 AliAnalysisTaskJetMatching.cxx:342
 AliAnalysisTaskJetMatching.cxx:343
 AliAnalysisTaskJetMatching.cxx:344
 AliAnalysisTaskJetMatching.cxx:345
 AliAnalysisTaskJetMatching.cxx:346
 AliAnalysisTaskJetMatching.cxx:347
 AliAnalysisTaskJetMatching.cxx:348
 AliAnalysisTaskJetMatching.cxx:349
 AliAnalysisTaskJetMatching.cxx:350
 AliAnalysisTaskJetMatching.cxx:351
 AliAnalysisTaskJetMatching.cxx:352
 AliAnalysisTaskJetMatching.cxx:353
 AliAnalysisTaskJetMatching.cxx:354
 AliAnalysisTaskJetMatching.cxx:355
 AliAnalysisTaskJetMatching.cxx:356
 AliAnalysisTaskJetMatching.cxx:357
 AliAnalysisTaskJetMatching.cxx:358
 AliAnalysisTaskJetMatching.cxx:359
 AliAnalysisTaskJetMatching.cxx:360
 AliAnalysisTaskJetMatching.cxx:361
 AliAnalysisTaskJetMatching.cxx:362
 AliAnalysisTaskJetMatching.cxx:363
 AliAnalysisTaskJetMatching.cxx:364
 AliAnalysisTaskJetMatching.cxx:365
 AliAnalysisTaskJetMatching.cxx:366
 AliAnalysisTaskJetMatching.cxx:367
 AliAnalysisTaskJetMatching.cxx:368
 AliAnalysisTaskJetMatching.cxx:369
 AliAnalysisTaskJetMatching.cxx:370
 AliAnalysisTaskJetMatching.cxx:371
 AliAnalysisTaskJetMatching.cxx:372
 AliAnalysisTaskJetMatching.cxx:373
 AliAnalysisTaskJetMatching.cxx:374
 AliAnalysisTaskJetMatching.cxx:375
 AliAnalysisTaskJetMatching.cxx:376
 AliAnalysisTaskJetMatching.cxx:377
 AliAnalysisTaskJetMatching.cxx:378
 AliAnalysisTaskJetMatching.cxx:379
 AliAnalysisTaskJetMatching.cxx:380
 AliAnalysisTaskJetMatching.cxx:381
 AliAnalysisTaskJetMatching.cxx:382
 AliAnalysisTaskJetMatching.cxx:383
 AliAnalysisTaskJetMatching.cxx:384
 AliAnalysisTaskJetMatching.cxx:385
 AliAnalysisTaskJetMatching.cxx:386
 AliAnalysisTaskJetMatching.cxx:387
 AliAnalysisTaskJetMatching.cxx:388
 AliAnalysisTaskJetMatching.cxx:389
 AliAnalysisTaskJetMatching.cxx:390
 AliAnalysisTaskJetMatching.cxx:391
 AliAnalysisTaskJetMatching.cxx:392
 AliAnalysisTaskJetMatching.cxx:393
 AliAnalysisTaskJetMatching.cxx:394
 AliAnalysisTaskJetMatching.cxx:395
 AliAnalysisTaskJetMatching.cxx:396
 AliAnalysisTaskJetMatching.cxx:397
 AliAnalysisTaskJetMatching.cxx:398
 AliAnalysisTaskJetMatching.cxx:399
 AliAnalysisTaskJetMatching.cxx:400
 AliAnalysisTaskJetMatching.cxx:401
 AliAnalysisTaskJetMatching.cxx:402
 AliAnalysisTaskJetMatching.cxx:403
 AliAnalysisTaskJetMatching.cxx:404
 AliAnalysisTaskJetMatching.cxx:405
 AliAnalysisTaskJetMatching.cxx:406
 AliAnalysisTaskJetMatching.cxx:407
 AliAnalysisTaskJetMatching.cxx:408
 AliAnalysisTaskJetMatching.cxx:409
 AliAnalysisTaskJetMatching.cxx:410
 AliAnalysisTaskJetMatching.cxx:411
 AliAnalysisTaskJetMatching.cxx:412
 AliAnalysisTaskJetMatching.cxx:413
 AliAnalysisTaskJetMatching.cxx:414
 AliAnalysisTaskJetMatching.cxx:415
 AliAnalysisTaskJetMatching.cxx:416
 AliAnalysisTaskJetMatching.cxx:417
 AliAnalysisTaskJetMatching.cxx:418
 AliAnalysisTaskJetMatching.cxx:419
 AliAnalysisTaskJetMatching.cxx:420
 AliAnalysisTaskJetMatching.cxx:421
 AliAnalysisTaskJetMatching.cxx:422
 AliAnalysisTaskJetMatching.cxx:423
 AliAnalysisTaskJetMatching.cxx:424
 AliAnalysisTaskJetMatching.cxx:425
 AliAnalysisTaskJetMatching.cxx:426
 AliAnalysisTaskJetMatching.cxx:427
 AliAnalysisTaskJetMatching.cxx:428
 AliAnalysisTaskJetMatching.cxx:429
 AliAnalysisTaskJetMatching.cxx:430
 AliAnalysisTaskJetMatching.cxx:431
 AliAnalysisTaskJetMatching.cxx:432
 AliAnalysisTaskJetMatching.cxx:433
 AliAnalysisTaskJetMatching.cxx:434
 AliAnalysisTaskJetMatching.cxx:435
 AliAnalysisTaskJetMatching.cxx:436
 AliAnalysisTaskJetMatching.cxx:437
 AliAnalysisTaskJetMatching.cxx:438
 AliAnalysisTaskJetMatching.cxx:439
 AliAnalysisTaskJetMatching.cxx:440
 AliAnalysisTaskJetMatching.cxx:441
 AliAnalysisTaskJetMatching.cxx:442
 AliAnalysisTaskJetMatching.cxx:443
 AliAnalysisTaskJetMatching.cxx:444
 AliAnalysisTaskJetMatching.cxx:445
 AliAnalysisTaskJetMatching.cxx:446
 AliAnalysisTaskJetMatching.cxx:447
 AliAnalysisTaskJetMatching.cxx:448
 AliAnalysisTaskJetMatching.cxx:449
 AliAnalysisTaskJetMatching.cxx:450
 AliAnalysisTaskJetMatching.cxx:451
 AliAnalysisTaskJetMatching.cxx:452
 AliAnalysisTaskJetMatching.cxx:453
 AliAnalysisTaskJetMatching.cxx:454
 AliAnalysisTaskJetMatching.cxx:455
 AliAnalysisTaskJetMatching.cxx:456
 AliAnalysisTaskJetMatching.cxx:457
 AliAnalysisTaskJetMatching.cxx:458
 AliAnalysisTaskJetMatching.cxx:459
 AliAnalysisTaskJetMatching.cxx:460
 AliAnalysisTaskJetMatching.cxx:461
 AliAnalysisTaskJetMatching.cxx:462
 AliAnalysisTaskJetMatching.cxx:463
 AliAnalysisTaskJetMatching.cxx:464
 AliAnalysisTaskJetMatching.cxx:465
 AliAnalysisTaskJetMatching.cxx:466
 AliAnalysisTaskJetMatching.cxx:467
 AliAnalysisTaskJetMatching.cxx:468
 AliAnalysisTaskJetMatching.cxx:469
 AliAnalysisTaskJetMatching.cxx:470
 AliAnalysisTaskJetMatching.cxx:471
 AliAnalysisTaskJetMatching.cxx:472
 AliAnalysisTaskJetMatching.cxx:473
 AliAnalysisTaskJetMatching.cxx:474
 AliAnalysisTaskJetMatching.cxx:475
 AliAnalysisTaskJetMatching.cxx:476
 AliAnalysisTaskJetMatching.cxx:477
 AliAnalysisTaskJetMatching.cxx:478
 AliAnalysisTaskJetMatching.cxx:479
 AliAnalysisTaskJetMatching.cxx:480
 AliAnalysisTaskJetMatching.cxx:481
 AliAnalysisTaskJetMatching.cxx:482
 AliAnalysisTaskJetMatching.cxx:483
 AliAnalysisTaskJetMatching.cxx:484
 AliAnalysisTaskJetMatching.cxx:485
 AliAnalysisTaskJetMatching.cxx:486
 AliAnalysisTaskJetMatching.cxx:487
 AliAnalysisTaskJetMatching.cxx:488
 AliAnalysisTaskJetMatching.cxx:489
 AliAnalysisTaskJetMatching.cxx:490
 AliAnalysisTaskJetMatching.cxx:491
 AliAnalysisTaskJetMatching.cxx:492
 AliAnalysisTaskJetMatching.cxx:493
 AliAnalysisTaskJetMatching.cxx:494
 AliAnalysisTaskJetMatching.cxx:495
 AliAnalysisTaskJetMatching.cxx:496
 AliAnalysisTaskJetMatching.cxx:497
 AliAnalysisTaskJetMatching.cxx:498
 AliAnalysisTaskJetMatching.cxx:499
 AliAnalysisTaskJetMatching.cxx:500
 AliAnalysisTaskJetMatching.cxx:501
 AliAnalysisTaskJetMatching.cxx:502
 AliAnalysisTaskJetMatching.cxx:503
 AliAnalysisTaskJetMatching.cxx:504
 AliAnalysisTaskJetMatching.cxx:505
 AliAnalysisTaskJetMatching.cxx:506
 AliAnalysisTaskJetMatching.cxx:507
 AliAnalysisTaskJetMatching.cxx:508
 AliAnalysisTaskJetMatching.cxx:509
 AliAnalysisTaskJetMatching.cxx:510
 AliAnalysisTaskJetMatching.cxx:511
 AliAnalysisTaskJetMatching.cxx:512
 AliAnalysisTaskJetMatching.cxx:513
 AliAnalysisTaskJetMatching.cxx:514
 AliAnalysisTaskJetMatching.cxx:515
 AliAnalysisTaskJetMatching.cxx:516
 AliAnalysisTaskJetMatching.cxx:517
 AliAnalysisTaskJetMatching.cxx:518
 AliAnalysisTaskJetMatching.cxx:519
 AliAnalysisTaskJetMatching.cxx:520
 AliAnalysisTaskJetMatching.cxx:521
 AliAnalysisTaskJetMatching.cxx:522
 AliAnalysisTaskJetMatching.cxx:523
 AliAnalysisTaskJetMatching.cxx:524
 AliAnalysisTaskJetMatching.cxx:525
 AliAnalysisTaskJetMatching.cxx:526
 AliAnalysisTaskJetMatching.cxx:527
 AliAnalysisTaskJetMatching.cxx:528
 AliAnalysisTaskJetMatching.cxx:529
 AliAnalysisTaskJetMatching.cxx:530
 AliAnalysisTaskJetMatching.cxx:531
 AliAnalysisTaskJetMatching.cxx:532
 AliAnalysisTaskJetMatching.cxx:533
 AliAnalysisTaskJetMatching.cxx:534
 AliAnalysisTaskJetMatching.cxx:535
 AliAnalysisTaskJetMatching.cxx:536
 AliAnalysisTaskJetMatching.cxx:537
 AliAnalysisTaskJetMatching.cxx:538
 AliAnalysisTaskJetMatching.cxx:539
 AliAnalysisTaskJetMatching.cxx:540
 AliAnalysisTaskJetMatching.cxx:541
 AliAnalysisTaskJetMatching.cxx:542
 AliAnalysisTaskJetMatching.cxx:543
 AliAnalysisTaskJetMatching.cxx:544
 AliAnalysisTaskJetMatching.cxx:545
 AliAnalysisTaskJetMatching.cxx:546
 AliAnalysisTaskJetMatching.cxx:547
 AliAnalysisTaskJetMatching.cxx:548
 AliAnalysisTaskJetMatching.cxx:549
 AliAnalysisTaskJetMatching.cxx:550
 AliAnalysisTaskJetMatching.cxx:551
 AliAnalysisTaskJetMatching.cxx:552
 AliAnalysisTaskJetMatching.cxx:553
 AliAnalysisTaskJetMatching.cxx:554
 AliAnalysisTaskJetMatching.cxx:555
 AliAnalysisTaskJetMatching.cxx:556
 AliAnalysisTaskJetMatching.cxx:557
 AliAnalysisTaskJetMatching.cxx:558
 AliAnalysisTaskJetMatching.cxx:559
 AliAnalysisTaskJetMatching.cxx:560
 AliAnalysisTaskJetMatching.cxx:561
 AliAnalysisTaskJetMatching.cxx:562
 AliAnalysisTaskJetMatching.cxx:563
 AliAnalysisTaskJetMatching.cxx:564
 AliAnalysisTaskJetMatching.cxx:565
 AliAnalysisTaskJetMatching.cxx:566
 AliAnalysisTaskJetMatching.cxx:567
 AliAnalysisTaskJetMatching.cxx:568
 AliAnalysisTaskJetMatching.cxx:569
 AliAnalysisTaskJetMatching.cxx:570
 AliAnalysisTaskJetMatching.cxx:571
 AliAnalysisTaskJetMatching.cxx:572
 AliAnalysisTaskJetMatching.cxx:573
 AliAnalysisTaskJetMatching.cxx:574
 AliAnalysisTaskJetMatching.cxx:575
 AliAnalysisTaskJetMatching.cxx:576
 AliAnalysisTaskJetMatching.cxx:577
 AliAnalysisTaskJetMatching.cxx:578
 AliAnalysisTaskJetMatching.cxx:579
 AliAnalysisTaskJetMatching.cxx:580
 AliAnalysisTaskJetMatching.cxx:581
 AliAnalysisTaskJetMatching.cxx:582
 AliAnalysisTaskJetMatching.cxx:583
 AliAnalysisTaskJetMatching.cxx:584
 AliAnalysisTaskJetMatching.cxx:585
 AliAnalysisTaskJetMatching.cxx:586
 AliAnalysisTaskJetMatching.cxx:587
 AliAnalysisTaskJetMatching.cxx:588
 AliAnalysisTaskJetMatching.cxx:589
 AliAnalysisTaskJetMatching.cxx:590
 AliAnalysisTaskJetMatching.cxx:591
 AliAnalysisTaskJetMatching.cxx:592
 AliAnalysisTaskJetMatching.cxx:593
 AliAnalysisTaskJetMatching.cxx:594
 AliAnalysisTaskJetMatching.cxx:595
 AliAnalysisTaskJetMatching.cxx:596
 AliAnalysisTaskJetMatching.cxx:597
 AliAnalysisTaskJetMatching.cxx:598
 AliAnalysisTaskJetMatching.cxx:599
 AliAnalysisTaskJetMatching.cxx:600
 AliAnalysisTaskJetMatching.cxx:601
 AliAnalysisTaskJetMatching.cxx:602
 AliAnalysisTaskJetMatching.cxx:603
 AliAnalysisTaskJetMatching.cxx:604
 AliAnalysisTaskJetMatching.cxx:605
 AliAnalysisTaskJetMatching.cxx:606
 AliAnalysisTaskJetMatching.cxx:607
 AliAnalysisTaskJetMatching.cxx:608
 AliAnalysisTaskJetMatching.cxx:609
 AliAnalysisTaskJetMatching.cxx:610
 AliAnalysisTaskJetMatching.cxx:611
 AliAnalysisTaskJetMatching.cxx:612
 AliAnalysisTaskJetMatching.cxx:613
 AliAnalysisTaskJetMatching.cxx:614
 AliAnalysisTaskJetMatching.cxx:615
 AliAnalysisTaskJetMatching.cxx:616
 AliAnalysisTaskJetMatching.cxx:617
 AliAnalysisTaskJetMatching.cxx:618
 AliAnalysisTaskJetMatching.cxx:619
 AliAnalysisTaskJetMatching.cxx:620
 AliAnalysisTaskJetMatching.cxx:621
 AliAnalysisTaskJetMatching.cxx:622
 AliAnalysisTaskJetMatching.cxx:623
 AliAnalysisTaskJetMatching.cxx:624
 AliAnalysisTaskJetMatching.cxx:625
 AliAnalysisTaskJetMatching.cxx:626
 AliAnalysisTaskJetMatching.cxx:627
 AliAnalysisTaskJetMatching.cxx:628
 AliAnalysisTaskJetMatching.cxx:629
 AliAnalysisTaskJetMatching.cxx:630
 AliAnalysisTaskJetMatching.cxx:631
 AliAnalysisTaskJetMatching.cxx:632
 AliAnalysisTaskJetMatching.cxx:633
 AliAnalysisTaskJetMatching.cxx:634
 AliAnalysisTaskJetMatching.cxx:635
 AliAnalysisTaskJetMatching.cxx:636
 AliAnalysisTaskJetMatching.cxx:637
 AliAnalysisTaskJetMatching.cxx:638
 AliAnalysisTaskJetMatching.cxx:639
 AliAnalysisTaskJetMatching.cxx:640
 AliAnalysisTaskJetMatching.cxx:641
 AliAnalysisTaskJetMatching.cxx:642
 AliAnalysisTaskJetMatching.cxx:643
 AliAnalysisTaskJetMatching.cxx:644
 AliAnalysisTaskJetMatching.cxx:645
 AliAnalysisTaskJetMatching.cxx:646
 AliAnalysisTaskJetMatching.cxx:647
 AliAnalysisTaskJetMatching.cxx:648
 AliAnalysisTaskJetMatching.cxx:649
 AliAnalysisTaskJetMatching.cxx:650
 AliAnalysisTaskJetMatching.cxx:651
 AliAnalysisTaskJetMatching.cxx:652
 AliAnalysisTaskJetMatching.cxx:653
 AliAnalysisTaskJetMatching.cxx:654
 AliAnalysisTaskJetMatching.cxx:655
 AliAnalysisTaskJetMatching.cxx:656
 AliAnalysisTaskJetMatching.cxx:657
 AliAnalysisTaskJetMatching.cxx:658
 AliAnalysisTaskJetMatching.cxx:659
 AliAnalysisTaskJetMatching.cxx:660
 AliAnalysisTaskJetMatching.cxx:661
 AliAnalysisTaskJetMatching.cxx:662
 AliAnalysisTaskJetMatching.cxx:663
 AliAnalysisTaskJetMatching.cxx:664
 AliAnalysisTaskJetMatching.cxx:665
 AliAnalysisTaskJetMatching.cxx:666
 AliAnalysisTaskJetMatching.cxx:667
 AliAnalysisTaskJetMatching.cxx:668
 AliAnalysisTaskJetMatching.cxx:669
 AliAnalysisTaskJetMatching.cxx:670
 AliAnalysisTaskJetMatching.cxx:671
 AliAnalysisTaskJetMatching.cxx:672
 AliAnalysisTaskJetMatching.cxx:673
 AliAnalysisTaskJetMatching.cxx:674
 AliAnalysisTaskJetMatching.cxx:675
 AliAnalysisTaskJetMatching.cxx:676
 AliAnalysisTaskJetMatching.cxx:677
 AliAnalysisTaskJetMatching.cxx:678
 AliAnalysisTaskJetMatching.cxx:679
 AliAnalysisTaskJetMatching.cxx:680
 AliAnalysisTaskJetMatching.cxx:681
 AliAnalysisTaskJetMatching.cxx:682
 AliAnalysisTaskJetMatching.cxx:683
 AliAnalysisTaskJetMatching.cxx:684
 AliAnalysisTaskJetMatching.cxx:685
 AliAnalysisTaskJetMatching.cxx:686
 AliAnalysisTaskJetMatching.cxx:687
 AliAnalysisTaskJetMatching.cxx:688
 AliAnalysisTaskJetMatching.cxx:689
 AliAnalysisTaskJetMatching.cxx:690
 AliAnalysisTaskJetMatching.cxx:691
 AliAnalysisTaskJetMatching.cxx:692
 AliAnalysisTaskJetMatching.cxx:693
 AliAnalysisTaskJetMatching.cxx:694
 AliAnalysisTaskJetMatching.cxx:695
 AliAnalysisTaskJetMatching.cxx:696
 AliAnalysisTaskJetMatching.cxx:697
 AliAnalysisTaskJetMatching.cxx:698
 AliAnalysisTaskJetMatching.cxx:699
 AliAnalysisTaskJetMatching.cxx:700
 AliAnalysisTaskJetMatching.cxx:701
 AliAnalysisTaskJetMatching.cxx:702
 AliAnalysisTaskJetMatching.cxx:703
 AliAnalysisTaskJetMatching.cxx:704
 AliAnalysisTaskJetMatching.cxx:705
 AliAnalysisTaskJetMatching.cxx:706
 AliAnalysisTaskJetMatching.cxx:707
 AliAnalysisTaskJetMatching.cxx:708
 AliAnalysisTaskJetMatching.cxx:709
 AliAnalysisTaskJetMatching.cxx:710
 AliAnalysisTaskJetMatching.cxx:711
 AliAnalysisTaskJetMatching.cxx:712
 AliAnalysisTaskJetMatching.cxx:713
 AliAnalysisTaskJetMatching.cxx:714
 AliAnalysisTaskJetMatching.cxx:715
 AliAnalysisTaskJetMatching.cxx:716
 AliAnalysisTaskJetMatching.cxx:717
 AliAnalysisTaskJetMatching.cxx:718
 AliAnalysisTaskJetMatching.cxx:719
 AliAnalysisTaskJetMatching.cxx:720
 AliAnalysisTaskJetMatching.cxx:721
 AliAnalysisTaskJetMatching.cxx:722
 AliAnalysisTaskJetMatching.cxx:723