From 26503cecfcdaf84cec1f5ec8034cfa101033a9b2 Mon Sep 17 00:00:00 2001 From: rbertens Date: Mon, 13 Oct 2014 11:46:22 +0200 Subject: [PATCH] bug-fix: rotation of sub-leading jet in di-jet --- .../UserTasks/AliAnalysisTaskJetMatching.cxx | 34 +++++++++++++------ .../UserTasks/AliAnalysisTaskJetMatching.h | 1 + 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/PWGJE/EMCALJetTasks/UserTasks/AliAnalysisTaskJetMatching.cxx b/PWGJE/EMCALJetTasks/UserTasks/AliAnalysisTaskJetMatching.cxx index d25567f5509..0e3daebb0b9 100644 --- a/PWGJE/EMCALJetTasks/UserTasks/AliAnalysisTaskJetMatching.cxx +++ b/PWGJE/EMCALJetTasks/UserTasks/AliAnalysisTaskJetMatching.cxx @@ -80,13 +80,13 @@ using namespace std; ClassImp(AliAnalysisTaskJetMatching) AliAnalysisTaskJetMatching::AliAnalysisTaskJetMatching() : AliAnalysisTaskEmcalJet("AliAnalysisTaskJetMatching", kTRUE), - fDebug(0), 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), 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) { + fDebug(0), 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), 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), - fDebug(0), 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), 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) { + fDebug(0), 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), 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()); @@ -187,8 +187,9 @@ void AliAnalysisTaskJetMatching::UserCreateOutputObjects() fOutputList->Add(fProfFracNoJets); switch (fMatchingScheme) { case kDiJet : { - fHistDiJet = BookTH2F("fHistDiJet", "matched jet #varphi", "matched jet #eta", 100, 0., TMath::TwoPi(), 100, -2.5, 2.5); - fHistDiJetLeadingJet = BookTH2F("fHistDiJetLeadingJet", "matched jet #varphi", "matched jet #eta", 100, 0., TMath::TwoPi(), 100, -2.5, 2.5); + fHistDiJet = BookTH2F("fHistDiJet", "matched di-jet #varphi", "matched di-jet #eta", 100, 0., TMath::TwoPi(), 100, -5., 5.); + fHistDiJetLeadingJet = BookTH2F("fHistDiJetLeadingJet", "leading jet #varphi", "leadingd jet #eta", 100, 0., TMath::TwoPi(), 100, -5., 5.); + fHistDiJetDPhi = BookTH1F("fHistDiJetDPhi", "leading jet #varphi - (matched jet #varphi - #pi)", 100, -1.*TMath::Pi(), TMath::Pi()); } break; default : break; } @@ -329,7 +330,7 @@ void AliAnalysisTaskJetMatching::DoGeometricMatchingEtaPhi() 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 - if(fDebug > 0) printf(" > Entering first bbijection test \n"); + if(fDebug > 0) printf(" > Entering first bijection test \n"); for(Int_t k(i); k < iSource; k++) { AliEmcalJet* candidateSourceJet(static_cast(fSourceJets->At(k))); if(PassesCuts(candidateSourceJet, 0)) continue; @@ -403,21 +404,30 @@ 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 if(fDebug > 0) printf("__FILE__ = %s \n __LINE __ %i , __FUNC__ %s \n ", __FILE__, __LINE__, __func__); - // get the leading jet in a given acceptance + // 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; - fHistDiJetLeadingJet->Fill(leadingJet->Eta(), leadingJet->Phi()); + // fill phi and eta of leading jet (should always be in selected acceptance) + fHistDiJetLeadingJet->Fill(leadingJet->Phi(), leadingJet->Eta()); Double_t sourcePhi(leadingJet->Phi()), targetPhi(-1); - // grab the sub-leading jet + // 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(); - 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) fHistDiJet->Fill(subLeadingJet->Eta(), subLeadingJet->Phi()); + // 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()); + fHistDiJetDPhi->Fill(sourcePhi-targetPhi); + } } } //_____________________________________________________________________________ @@ -611,6 +621,8 @@ AliEmcalJet* AliAnalysisTaskJetMatching::GetSubLeadingJet(TClonesArray* source, // same as GetLeadingJet() but skips the leading jet (so returned jet is // sub-leading by design) Int_t iJets(source->GetEntriesFast()); + // if the leading jet isn't given, retrieve it + if(leadingJetIndex < 0) GetLeadingJet(source, leadingJetIndex, etaMin, etaMax); Double_t pt(0); AliEmcalJet* leadingJet(0x0); for(Int_t i(0); i < iJets; i++) { diff --git a/PWGJE/EMCALJetTasks/UserTasks/AliAnalysisTaskJetMatching.h b/PWGJE/EMCALJetTasks/UserTasks/AliAnalysisTaskJetMatching.h index 2f28bfb6e3a..f81e6b7bd9f 100644 --- a/PWGJE/EMCALJetTasks/UserTasks/AliAnalysisTaskJetMatching.h +++ b/PWGJE/EMCALJetTasks/UserTasks/AliAnalysisTaskJetMatching.h @@ -139,6 +139,7 @@ class AliAnalysisTaskJetMatching : public AliAnalysisTaskEmcalJet TProfile* fProfFracNoJets; //! no of consstituents fraction jet / jet TH2F* fHistDiJet; //! matched dijet eta, phi TH2F* fHistDiJetLeadingJet; //! leading jet (for dijet) eta, phi + TH1F* fHistDiJetDPhi; //! dijet dphi TH1F* fHistAnalysisSummary; //! flags TProfile* fProfQAMatched; //! QA spreads of matched jets TProfile* fProfQA; //! QA spreads of source and target jets -- 2.39.3