From d5e8640d1b0582b96f195119a156b7d67bbecd02 Mon Sep 17 00:00:00 2001 From: kleinb Date: Sun, 10 Apr 2011 11:48:57 +0000 Subject: [PATCH] Reading jets from output AOD, even in case of input AOD, added secondary histograms to FF task (Oliver) --- .../AliAnalysisTaskFragmentationFunction.cxx | 222 ++++++++++++------ .../AliAnalysisTaskFragmentationFunction.h | 38 +-- PWG4/macros/AddTaskFragmentationFunction.C | 4 +- PWG4/macros/AddTaskJetSpectrum2.C | 4 +- PWG4/macros/AnalysisTrainPWG4Jets.C | 63 ++++- 5 files changed, 231 insertions(+), 100 deletions(-) diff --git a/PWG4/JetTasks/AliAnalysisTaskFragmentationFunction.cxx b/PWG4/JetTasks/AliAnalysisTaskFragmentationFunction.cxx index ed7ee52f7ee..cfe745784b7 100644 --- a/PWG4/JetTasks/AliAnalysisTaskFragmentationFunction.cxx +++ b/PWG4/JetTasks/AliAnalysisTaskFragmentationFunction.cxx @@ -58,6 +58,7 @@ AliAnalysisTaskFragmentationFunction::AliAnalysisTaskFragmentationFunction() : AliAnalysisTaskSE() ,fESD(0) ,fAOD(0) + ,fAODJets(0) ,fAODExtension(0) ,fNonStdFile("") ,fBranchRecJets("jets") @@ -67,6 +68,7 @@ AliAnalysisTaskFragmentationFunction::AliAnalysisTaskFragmentationFunction() ,fTrackTypeGen(0) ,fJetTypeGen(0) ,fJetTypeRecEff(0) + ,fUseAODInputJets(kTRUE) ,fFilterMask(0) ,fUsePhysicsSelection(kTRUE) ,fEventClass(0) @@ -102,6 +104,7 @@ AliAnalysisTaskFragmentationFunction::AliAnalysisTaskFragmentationFunction() ,fTracksRecCuts(0) ,fTracksGen(0) ,fTracksAODMCCharged(0) + ,fTracksAODMCChargedSec(0) ,fTracksRecQualityCuts(0) ,fJetsRec(0) ,fJetsRecCuts(0) @@ -251,10 +254,13 @@ AliAnalysisTaskFragmentationFunction::AliAnalysisTaskFragmentationFunction() ,fh1nRecBckgJetsCuts(0) ,fh1nGenBckgJets(0) ,fh2PtRecVsGenPrim(0) + ,fh2PtRecVsGenSec(0) ,fQATrackHistosRecEffGen(0) - ,fQATrackHistosRecEffRec(0) + ,fQATrackHistosRecEffRec(0) + ,fQATrackHistosSecRec(0) ,fFFHistosRecEffGen(0) ,fFFHistosRecEffRec(0) + ,fFFHistosSecRec(0) ,fhnResponseSinglePt(0) ,fhnResponseJetTrackPt(0) ,fhnResponseJetZ(0) @@ -336,6 +342,7 @@ AliAnalysisTaskFragmentationFunction::AliAnalysisTaskFragmentationFunction(const : AliAnalysisTaskSE(name) ,fESD(0) ,fAOD(0) + ,fAODJets(0) ,fAODExtension(0) ,fNonStdFile("") ,fBranchRecJets("jets") @@ -345,6 +352,7 @@ AliAnalysisTaskFragmentationFunction::AliAnalysisTaskFragmentationFunction(const ,fTrackTypeGen(0) ,fJetTypeGen(0) ,fJetTypeRecEff(0) + ,fUseAODInputJets(kTRUE) ,fFilterMask(0) ,fUsePhysicsSelection(kTRUE) ,fEventClass(0) @@ -380,6 +388,7 @@ AliAnalysisTaskFragmentationFunction::AliAnalysisTaskFragmentationFunction(const ,fTracksRecCuts(0) ,fTracksGen(0) ,fTracksAODMCCharged(0) + ,fTracksAODMCChargedSec(0) ,fTracksRecQualityCuts(0) ,fJetsRec(0) ,fJetsRecCuts(0) @@ -529,10 +538,13 @@ AliAnalysisTaskFragmentationFunction::AliAnalysisTaskFragmentationFunction(const ,fh1nRecBckgJetsCuts(0) ,fh1nGenBckgJets(0) ,fh2PtRecVsGenPrim(0) + ,fh2PtRecVsGenSec(0) ,fQATrackHistosRecEffGen(0) - ,fQATrackHistosRecEffRec(0) + ,fQATrackHistosRecEffRec(0) + ,fQATrackHistosSecRec(0) ,fFFHistosRecEffGen(0) ,fFFHistosRecEffRec(0) + ,fFFHistosSecRec(0) ,fhnResponseSinglePt(0) ,fhnResponseJetTrackPt(0) ,fhnResponseJetZ(0) @@ -618,6 +630,7 @@ AliAnalysisTaskFragmentationFunction::AliAnalysisTaskFragmentationFunction(const : AliAnalysisTaskSE() ,fESD(copy.fESD) ,fAOD(copy.fAOD) + ,fAODJets(copy.fAODJets) ,fAODExtension(copy.fAODExtension) ,fNonStdFile(copy.fNonStdFile) ,fBranchRecJets(copy.fBranchRecJets) @@ -627,6 +640,7 @@ AliAnalysisTaskFragmentationFunction::AliAnalysisTaskFragmentationFunction(const ,fTrackTypeGen(copy.fTrackTypeGen) ,fJetTypeGen(copy.fJetTypeGen) ,fJetTypeRecEff(copy.fJetTypeRecEff) + ,fUseAODInputJets(copy.fUseAODInputJets) ,fFilterMask(copy.fFilterMask) ,fUsePhysicsSelection(copy.fUsePhysicsSelection) ,fEventClass(copy.fEventClass) @@ -662,6 +676,7 @@ AliAnalysisTaskFragmentationFunction::AliAnalysisTaskFragmentationFunction(const ,fTracksRecCuts(copy.fTracksRecCuts) ,fTracksGen(copy.fTracksGen) ,fTracksAODMCCharged(copy.fTracksAODMCCharged) + ,fTracksAODMCChargedSec(copy.fTracksAODMCChargedSec) ,fTracksRecQualityCuts(copy.fTracksRecQualityCuts) ,fJetsRec(copy.fJetsRec) ,fJetsRecCuts(copy.fJetsRecCuts) @@ -811,10 +826,13 @@ AliAnalysisTaskFragmentationFunction::AliAnalysisTaskFragmentationFunction(const ,fh1nRecBckgJetsCuts(copy.fh1nRecBckgJetsCuts) ,fh1nGenBckgJets(copy.fh1nGenBckgJets) ,fh2PtRecVsGenPrim(copy.fh2PtRecVsGenPrim) + ,fh2PtRecVsGenSec(copy.fh2PtRecVsGenSec) ,fQATrackHistosRecEffGen(copy.fQATrackHistosRecEffGen) ,fQATrackHistosRecEffRec(copy.fQATrackHistosRecEffRec) + ,fQATrackHistosSecRec(copy.fQATrackHistosSecRec) ,fFFHistosRecEffGen(copy.fFFHistosRecEffGen) - ,fFFHistosRecEffRec(copy.fFFHistosRecEffRec) + ,fFFHistosRecEffRec(copy.fFFHistosRecEffRec) + ,fFFHistosSecRec(copy.fFFHistosSecRec) ,fhnResponseSinglePt(copy.fhnResponseSinglePt) ,fhnResponseJetTrackPt(copy.fhnResponseJetTrackPt) ,fhnResponseJetZ(copy.fhnResponseJetZ) @@ -901,6 +919,7 @@ AliAnalysisTaskFragmentationFunction& AliAnalysisTaskFragmentationFunction::oper AliAnalysisTaskSE::operator=(o); fESD = o.fESD; fAOD = o.fAOD; + fAODJets = o.fAODJets; fAODExtension = o.fAODExtension; fNonStdFile = o.fNonStdFile; fBranchRecJets = o.fBranchRecJets; @@ -910,6 +929,7 @@ AliAnalysisTaskFragmentationFunction& AliAnalysisTaskFragmentationFunction::oper fTrackTypeGen = o.fTrackTypeGen; fJetTypeGen = o.fJetTypeGen; fJetTypeRecEff = o.fJetTypeRecEff; + fUseAODInputJets = o.fUseAODInputJets; fFilterMask = o.fFilterMask; fUsePhysicsSelection = o.fUsePhysicsSelection; fEventClass = o.fEventClass; @@ -950,6 +970,7 @@ AliAnalysisTaskFragmentationFunction& AliAnalysisTaskFragmentationFunction::oper fTracksRecCuts = o.fTracksRecCuts; fTracksGen = o.fTracksGen; fTracksAODMCCharged = o.fTracksAODMCCharged; + fTracksAODMCChargedSec = o.fTracksAODMCChargedSec; fTracksRecQualityCuts = o.fTracksRecQualityCuts; fJetsRec = o.fJetsRec; fJetsRecCuts = o.fJetsRecCuts; @@ -1097,10 +1118,13 @@ AliAnalysisTaskFragmentationFunction& AliAnalysisTaskFragmentationFunction::oper fh1nGenJets = o.fh1nGenJets; fh1nRecEffJets = o.fh1nRecEffJets; fh2PtRecVsGenPrim = o.fh2PtRecVsGenPrim; + fh2PtRecVsGenSec = o.fh2PtRecVsGenSec; fQATrackHistosRecEffGen = o.fQATrackHistosRecEffGen; fQATrackHistosRecEffRec = o.fQATrackHistosRecEffRec; + fQATrackHistosSecRec = o.fQATrackHistosSecRec; fFFHistosRecEffGen = o.fFFHistosRecEffGen; - fFFHistosRecEffRec = o.fFFHistosRecEffRec; + fFFHistosRecEffRec = o.fFFHistosRecEffRec; + fFFHistosSecRec = o.fFFHistosSecRec; fhnResponseSinglePt = o.fhnResponseSinglePt; fhnResponseJetTrackPt = o.fhnResponseJetTrackPt; fhnResponseJetZ = o.fhnResponseJetZ; @@ -1174,15 +1198,16 @@ AliAnalysisTaskFragmentationFunction::~AliAnalysisTaskFragmentationFunction() { // destructor - if(fTracksRec) delete fTracksRec; - if(fTracksRecCuts) delete fTracksRecCuts; - if(fTracksGen) delete fTracksGen; - if(fTracksAODMCCharged) delete fTracksAODMCCharged; - if(fTracksRecQualityCuts) delete fTracksRecQualityCuts; - if(fJetsRec) delete fJetsRec; - if(fJetsRecCuts) delete fJetsRecCuts; - if(fJetsGen) delete fJetsGen; - if(fJetsRecEff) delete fJetsRecEff; + if(fTracksRec) delete fTracksRec; + if(fTracksRecCuts) delete fTracksRecCuts; + if(fTracksGen) delete fTracksGen; + if(fTracksAODMCCharged) delete fTracksAODMCCharged; + if(fTracksAODMCChargedSec) delete fTracksAODMCChargedSec; + if(fTracksRecQualityCuts) delete fTracksRecQualityCuts; + if(fJetsRec) delete fJetsRec; + if(fJetsRecCuts) delete fJetsRecCuts; + if(fJetsGen) delete fJetsGen; + if(fJetsRecEff) delete fJetsRecEff; if(fBckgMode && (fBckgType[0]==kBckgClusters || fBckgType[1]==kBckgClusters || fBckgType[2]==kBckgClusters || fBckgType[3]==kBckgClusters || fBckgType[4]==kBckgClusters || fBckgType[0]==kBckgClustersOutLeading || fBckgType[1]==kBckgClustersOutLeading || fBckgType[2]==kBckgClustersOutLeading || @@ -2307,6 +2332,9 @@ void AliAnalysisTaskFragmentationFunction::UserCreateOutputObjects() fTracksAODMCCharged = new TList(); fTracksAODMCCharged->SetOwner(kFALSE); + fTracksAODMCChargedSec = new TList(); + fTracksAODMCChargedSec->SetOwner(kFALSE); + fTracksRecQualityCuts = new TList(); fTracksRecQualityCuts->SetOwner(kFALSE); @@ -2380,6 +2408,7 @@ void AliAnalysisTaskFragmentationFunction::UserCreateOutputObjects() fh1nGenJets = new TH1F("fh1nGenJets","generated jets per event",10,-0.5,9.5); fh1nRecEffJets = new TH1F("fh1nRecEffJets","reconstruction effiency: jets per event",10,-0.5,9.5); fh2PtRecVsGenPrim = new TH2F("fh2PtRecVsGenPrim","rec vs gen pt",fQATrackNBinsPt,fQATrackPtMin,fQATrackPtMax,fQATrackNBinsPt,fQATrackPtMin,fQATrackPtMax); + fh2PtRecVsGenSec = new TH2F("fh2PtRecVsGenSec","rec vs gen pt",fQATrackNBinsPt,fQATrackPtMin,fQATrackPtMax,fQATrackNBinsPt,fQATrackPtMin,fQATrackPtMax); // Background if(fBckgMode) { @@ -2591,6 +2620,11 @@ void AliAnalysisTaskFragmentationFunction::UserCreateOutputObjects() fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax, fQATrackHighPtThreshold); + fQATrackHistosSecRec = new AliFragFuncQATrackHistos("SecRec", fQATrackNBinsPt, fQATrackPtMin, fQATrackPtMax, + fQATrackNBinsEta, fQATrackEtaMin, fQATrackEtaMax, + fQATrackNBinsPhi, fQATrackPhiMin, fQATrackPhiMax, + fQATrackHighPtThreshold); + Int_t nBinsResponseSinglePt[2] = {fFFNBinsPt, fFFNBinsPt}; Double_t binMinResponseSinglePt[2] = {fFFPtMin, fFFPtMin}; @@ -2613,6 +2647,11 @@ void AliAnalysisTaskFragmentationFunction::UserCreateOutputObjects() fFFNBinsXi, fFFXiMin, fFFXiMax, fFFNBinsZ , fFFZMin , fFFZMax); + fFFHistosSecRec = new AliFragFuncHistos("SecRec", fFFNBinsJetPt, fFFJetPtMin, fFFJetPtMax, + fFFNBinsPt, fFFPtMin, fFFPtMax, + fFFNBinsXi, fFFXiMin, fFFXiMax, + fFFNBinsZ , fFFZMin , fFFZMax); + Int_t nBinsResponseJetTrackPt[3] = {fFFNBinsJetPt,fFFNBinsPt,fFFNBinsPt}; Double_t binMinResponseJetTrackPt[3] = {fFFJetPtMin,fFFPtMin, fFFPtMin}; @@ -2955,10 +2994,12 @@ void AliAnalysisTaskFragmentationFunction::UserCreateOutputObjects() if(fQAMode&1){ fQATrackHistosRecEffGen->DefineHistos(); fQATrackHistosRecEffRec->DefineHistos(); + fQATrackHistosSecRec->DefineHistos(); } if(fFFMode){ fFFHistosRecEffGen->DefineHistos(); fFFHistosRecEffRec->DefineHistos(); + fFFHistosSecRec->DefineHistos(); } } // end: efficiency @@ -3217,17 +3258,20 @@ void AliAnalysisTaskFragmentationFunction::UserCreateOutputObjects() if(fQAMode&1){ fQATrackHistosRecEffGen->AddToOutput(fCommonHistList); fQATrackHistosRecEffRec->AddToOutput(fCommonHistList); + fQATrackHistosSecRec->AddToOutput(fCommonHistList); fCommonHistList->Add(fhnResponseSinglePt); } if(fFFMode){ fFFHistosRecEffGen->AddToOutput(fCommonHistList); fFFHistosRecEffRec->AddToOutput(fCommonHistList); + fFFHistosSecRec->AddToOutput(fCommonHistList); fCommonHistList->Add(fhnResponseJetTrackPt); fCommonHistList->Add(fhnResponseJetZ); fCommonHistList->Add(fhnResponseJetXi); } fCommonHistList->Add(fh1nRecEffJets); fCommonHistList->Add(fh2PtRecVsGenPrim); + fCommonHistList->Add(fh2PtRecVsGenSec); } @@ -3288,16 +3332,26 @@ void AliAnalysisTaskFragmentationFunction::UserExec(Option_t *) TObject* handler = AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler(); if( handler && handler->InheritsFrom("AliAODInputHandler") ) { fAOD = ((AliAODInputHandler*)handler)->GetEvent(); + if(fUseAODInputJets) fAODJets = fAOD; if (fDebug > 1) Printf("%s:%d AOD event from input", (char*)__FILE__,__LINE__); } else { handler = AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler(); if( handler && handler->InheritsFrom("AliAODHandler") ) { - fAOD = ((AliAODHandler*)handler)->GetAOD(); + fAOD = ((AliAODHandler*)handler)->GetAOD(); + fAODJets = fAOD; if (fDebug > 1) Printf("%s:%d AOD event from output", (char*)__FILE__,__LINE__); } } + if(!fAODJets && !fUseAODInputJets){ // case we have AOD in input & output and want jets from output + TObject* outHandler = AliAnalysisManager::GetAnalysisManager()->GetOutputEventHandler(); + if( outHandler && outHandler->InheritsFrom("AliAODHandler") ) { + fAODJets = ((AliAODHandler*)outHandler)->GetAOD(); + if (fDebug > 1) Printf("%s:%d jets from output AOD", (char*)__FILE__,__LINE__); + } + } + if(fNonStdFile.Length()!=0){ // case we have an AOD extension - fetch the jets from the extended output @@ -3312,6 +3366,11 @@ void AliAnalysisTaskFragmentationFunction::UserExec(Option_t *) Printf("%s:%d AODEvent not found", (char*)__FILE__,__LINE__); return; } + if(!fAODJets){ + Printf("%s:%d AODEvent with jet branch not found", (char*)__FILE__,__LINE__); + return; + } + // event selection ************************************************** // *** event class *** @@ -3980,30 +4039,42 @@ void AliAnalysisTaskFragmentationFunction::UserExec(Option_t *) if(fEffMode && (fJetTypeRecEff != kJetsUndef)){ - // arrays for generated particles: reconstructed AOD track index, isPrimary flag, are initialized in AssociateGenRec(...) function + // arrays holding for each generated particle the reconstructed AOD track index & isPrimary flag, are initialized in AssociateGenRec(...) function TArrayI indexAODTr; TArrayS isGenPrim; - - // array for reconcstructed AOD tracks: generated particle index, initialized in AssociateGenRec(...) function + + // array holding for each reconstructed AOD track generated particle index, initialized in AssociateGenRec(...) function TArrayI indexMCTr; - + + // ... and another set for secondaries (secondary MC tracks are stored in a different list) + TArrayI indexAODTrSec; + TArrayS isGenSec; + TArrayI indexMCTrSec; + Int_t nTracksAODMCCharged = GetListOfTracks(fTracksAODMCCharged, kTrackAODMCCharged); if(fDebug>2)Printf("%s:%d selected AODMC tracks: %d ",(char*)__FILE__,__LINE__,nTracksAODMCCharged); + Int_t nTracksAODMCChargedSec = GetListOfTracks(fTracksAODMCChargedSec, kTrackAODMCChargedSec); + if(fDebug>2)Printf("%s:%d selected AODMC secondary tracks: %d ",(char*)__FILE__,__LINE__,nTracksAODMCChargedSec); + Int_t nTracksRecQualityCuts = GetListOfTracks(fTracksRecQualityCuts, kTrackAODQualityCuts); if(fDebug>2)Printf("%s:%d selected rec tracks quality after cuts, full acceptance/pt : %d ",(char*)__FILE__,__LINE__,nTracksRecQualityCuts); // associate gen and rec tracks, store indices in TArrays - AssociateGenRec(fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,indexMCTr,isGenPrim); + AssociateGenRec(fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,indexMCTr,isGenPrim,fh2PtRecVsGenPrim); + AssociateGenRec(fTracksAODMCChargedSec,fTracksRecQualityCuts,indexAODTrSec,indexMCTrSec,isGenSec,fh2PtRecVsGenSec); // single track eff - if(fQAMode&1) FillSingleTrackRecEffHisto(fQATrackHistosRecEffGen,fQATrackHistosRecEffRec,fTracksAODMCCharged,indexAODTr,isGenPrim); + if(fQAMode&1) FillSingleTrackHistosRecGen(fQATrackHistosRecEffGen,fQATrackHistosRecEffRec,fTracksAODMCCharged,indexAODTr,isGenPrim); if(fQAMode&1) FillSingleTrackResponse(fhnResponseSinglePt,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim); + // secondaries + if(fQAMode&1) FillSingleTrackHistosRecGen(0x0,fQATrackHistosSecRec,fTracksAODMCChargedSec,indexAODTrSec,isGenSec); // jet track eff Double_t sumPtGenLeadingJetRecEff = 0; + Double_t sumPtGenLeadingJetSec = 0; Double_t sumPtRecLeadingJetRecEff = 0; for(Int_t ij=0; ijFillJetQA( jetEta, jetPhi, sumPtGenLeadingJetRecEff ); - if(fFFMode) FillJetTrackRecEffHisto(fFFHistosRecEffGen,fFFHistosRecEffRec,sumPtGenLeadingJetRecEff,sumPtRecLeadingJetRecEff, - jettracklistGen,fTracksAODMCCharged,indexAODTr,isGenPrim,fUseRecEffRecJetPtBins); - + if(fFFMode) FillJetTrackHistosRecGen(fFFHistosRecEffGen,fFFHistosRecEffRec,sumPtGenLeadingJetRecEff,sumPtRecLeadingJetRecEff, + jettracklistGenPrim,fTracksAODMCCharged,indexAODTr,isGenPrim,fUseRecEffRecJetPtBins); + if(fFFMode) FillJetTrackResponse(fhnResponseJetTrackPt,fhnResponseJetZ,fhnResponseJetXi,sumPtGenLeadingJetRecEff,sumPtRecLeadingJetRecEff, - jettracklistGen,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,fUseResponseRecJetPtBins); + jettracklistGenPrim,fTracksAODMCCharged,fTracksRecQualityCuts,indexAODTr,isGenPrim,fUseResponseRecJetPtBins); + + // secondaries: use jet pt from primaries + if(fFFMode) FillJetTrackHistosRecGen(0x0,fFFHistosSecRec,sumPtGenLeadingJetRecEff,sumPtRecLeadingJetRecEff, + jettracklistGenSec,fTracksAODMCChargedSec,indexAODTrSec,isGenSec,fUseRecEffRecJetPtBins); - delete jettracklistGen; + delete jettracklistGenPrim; + delete jettracklistGenSec; delete jettracklistRec; } } @@ -4084,6 +4163,7 @@ void AliAnalysisTaskFragmentationFunction::UserExec(Option_t *) fTracksRecCuts->Clear(); fTracksGen->Clear(); fTracksAODMCCharged->Clear(); + fTracksAODMCChargedSec->Clear(); fTracksRecQualityCuts->Clear(); fJetsRec->Clear(); @@ -4235,7 +4315,7 @@ Int_t AliAnalysisTaskFragmentationFunction::GetListOfTracks(TList *list, Int_t t iCount++; } } - else if (type==kTrackAODMCCharged || type==kTrackAODMCAll || type==kTrackAODMCChargedAcceptance) { + else if (type==kTrackAODMCCharged || type==kTrackAODMCAll || type==kTrackAODMCChargedAcceptance || type==kTrackAODMCChargedSec) { // MC particles (from AOD), physical primaries, all or rather charged or rather charged within acceptance if(!fAOD) return -1; @@ -4245,9 +4325,10 @@ Int_t AliAnalysisTaskFragmentationFunction::GetListOfTracks(TList *list, Int_t t for(int it=0; itGetEntriesFast(); ++it){ AliAODMCParticle *part = dynamic_cast(tca->At(it)); if(!part)continue; - if(!part->IsPhysicalPrimary())continue; + if(type != kTrackAODMCChargedSec && !part->IsPhysicalPrimary())continue; + if(type == kTrackAODMCChargedSec && part->IsPhysicalPrimary())continue; - if (type==kTrackAODMCCharged || type==kTrackAODMCChargedAcceptance){ + if (type==kTrackAODMCCharged || type==kTrackAODMCChargedAcceptance || type==kTrackAODMCChargedSec){ if(part->Charge()==0) continue; if(type==kTrackAODMCChargedAcceptance && ( part->Eta() > fTrackEtaMax @@ -4285,9 +4366,9 @@ Int_t AliAnalysisTaskFragmentationFunction::GetListOfJets(TList *list, Int_t typ } TClonesArray *aodRecJets = 0; - if(fBranchRecJets.Length()) aodRecJets = dynamic_cast(fAOD->FindListObject(fBranchRecJets.Data())); + if(fBranchRecJets.Length()) aodRecJets = dynamic_cast(fAODJets->FindListObject(fBranchRecJets.Data())); + if(!aodRecJets) aodRecJets = dynamic_cast(fAODJets->GetList()->FindObject(fBranchRecJets.Data())); if(fAODExtension&&!aodRecJets) aodRecJets = dynamic_cast(fAODExtension->GetAOD()->FindListObject(fBranchRecJets.Data())); - if(!aodRecJets) aodRecJets = dynamic_cast(fAOD->GetList()->FindObject(fBranchRecJets.Data())); if(!aodRecJets){ if(fBranchRecJets.Length()) Printf("%s:%d no reconstructed jet array with name %s in AOD", (char*)__FILE__,__LINE__,fBranchRecJets.Data()); @@ -4403,8 +4484,8 @@ Int_t AliAnalysisTaskFragmentationFunction::GetListOfJets(TList *list, Int_t typ } TClonesArray *aodGenJets = 0; - if(fBranchGenJets.Length()) aodGenJets = dynamic_cast(fAOD->FindListObject(fBranchGenJets.Data())); - if(!aodGenJets) aodGenJets = dynamic_cast(fAOD->GetList()->FindObject(fBranchGenJets.Data())); + if(fBranchGenJets.Length()) aodGenJets = dynamic_cast(fAODJets->FindListObject(fBranchGenJets.Data())); + if(!aodGenJets) aodGenJets = dynamic_cast(fAODJets->GetList()->FindObject(fBranchGenJets.Data())); if(fAODExtension&&!aodGenJets) aodGenJets = dynamic_cast(fAODExtension->GetAOD()->FindListObject(fBranchGenJets.Data())); if(!aodGenJets){ @@ -4455,9 +4536,9 @@ Int_t AliAnalysisTaskFragmentationFunction::GetListOfBckgJets(TList *list, Int_t } TClonesArray *aodRecJets = 0; - if(fBranchRecBckgClusters.Length()) aodRecJets = dynamic_cast(fAOD->FindListObject(fBranchRecBckgClusters.Data())); - if(!aodRecJets) aodRecJets = dynamic_cast(fAOD->GetList()->FindObject(fBranchRecBckgClusters.Data())); - if(fAODExtension&&!aodRecJets) aodRecJets = dynamic_cast(fAODExtension->GetAOD()->FindListObject(fBranchRecBckgClusters.Data())); + if(fBranchRecBckgClusters.Length()) aodRecJets = dynamic_cast(fAODJets->FindListObject(fBranchRecBckgClusters.Data())); + if(!aodRecJets) aodRecJets = dynamic_cast(fAODJets->GetList()->FindObject(fBranchRecBckgClusters.Data())); + if(fAODExtension&&!aodRecJets) aodRecJets = dynamic_cast(fAODExtension->GetAOD()->FindListObject(fBranchRecBckgClusters.Data())); if(!aodRecJets){ if(fBranchRecBckgClusters.Length()) Printf("%s:%d no reconstructed jet array with name %s in AOD", (char*)__FILE__,__LINE__,fBranchRecBckgClusters.Data()); @@ -4587,26 +4668,27 @@ void AliAnalysisTaskFragmentationFunction::GetJetTracksTrackrefs(TList* list, co } // _ ________________________________________________________________________________________________________________________________ -void AliAnalysisTaskFragmentationFunction::AssociateGenRec(TList* tracksAODMCCharged,TList* tracksRec, TArrayI& indexAODTr,TArrayI& indexMCTr,TArrayS& isGenPrim) +void AliAnalysisTaskFragmentationFunction::AssociateGenRec(TList* tracksAODMCCharged,TList* tracksRec, TArrayI& indexAODTr,TArrayI& indexMCTr, + TArrayS& isRefGen,TH2F* fh2PtRecVsGen) { // associate generated and reconstructed tracks, fill TArrays of list indices - Int_t nTracksRec = tracksRec->GetSize(); Int_t nTracksGen = tracksAODMCCharged->GetSize(); TClonesArray *tca = dynamic_cast(fAOD->FindListObject(AliAODMCParticle::StdBranchName())); + if(!nTracksGen) return; if(!tca) return; // set size indexAODTr.Set(nTracksGen); indexMCTr.Set(nTracksRec); - isGenPrim.Set(nTracksGen); + isRefGen.Set(nTracksGen); indexAODTr.Reset(-1); indexMCTr.Reset(-1); - isGenPrim.Reset(0); + isRefGen.Reset(0); // loop over reconstructed tracks, get generated track @@ -4627,10 +4709,10 @@ void AliAnalysisTaskFragmentationFunction::AssociateGenRec(TList* tracksAODMCCh indexAODTr[listIndex] = iRec; indexMCTr[iRec] = listIndex; } - } + } - // define primary sample for reconstruction efficiency + // define reference sample of primaries/secondaries (for reconstruction efficiency / contamination) for(Int_t iGen=0; iGen(tracksRec->At(iRec)); if(vt){ Float_t recPt = vt->Pt(); - fh2PtRecVsGenPrim->Fill(genPt,recPt); + fh2PtRecVsGen->Fill(genPt,recPt); } } } @@ -4659,8 +4741,8 @@ void AliAnalysisTaskFragmentationFunction::AssociateGenRec(TList* tracksAODMCCh } // _____________________________________________________________________________________________________________________________________________ -void AliAnalysisTaskFragmentationFunction::FillSingleTrackRecEffHisto(AliFragFuncQATrackHistos* trackQAGen, AliFragFuncQATrackHistos* trackQARec, TList* tracksGen, - const TArrayI& indexAODTr, const TArrayS& isGenPrim){ +void AliAnalysisTaskFragmentationFunction::FillSingleTrackHistosRecGen(AliFragFuncQATrackHistos* trackQAGen, AliFragFuncQATrackHistos* trackQARec, TList* tracksGen, + const TArrayI& indexAODTr, const TArrayS& isRefGen){ // fill QA for single track reconstruction efficiency @@ -4670,10 +4752,10 @@ void AliAnalysisTaskFragmentationFunction::FillSingleTrackRecEffHisto(AliFragFun for(Int_t iGen=0; iGen (tracksGen->At(iGen)); - if(!gentrack)continue; + if(!gentrack) continue; Double_t ptGen = gentrack->Pt(); Double_t etaGen = gentrack->Eta(); Double_t phiGen = TVector2::Phi_0_2pi(gentrack->Phi()); @@ -4684,19 +4766,19 @@ void AliAnalysisTaskFragmentationFunction::FillSingleTrackRecEffHisto(AliFragFun if(phiGen < fTrackPhiMin || phiGen > fTrackPhiMax) continue; if(ptGen < fTrackPtCut) continue; - trackQAGen->FillTrackQA(etaGen, phiGen, ptGen); + if(trackQAGen) trackQAGen->FillTrackQA(etaGen, phiGen, ptGen); Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track - if(iRec>=0) trackQARec->FillTrackQA(etaGen, phiGen, ptGen); + if(iRec>=0 && trackQARec) trackQARec->FillTrackQA(etaGen, phiGen, ptGen); } } // ______________________________________________________________________________________________________________________________________________________ -void AliAnalysisTaskFragmentationFunction::FillJetTrackRecEffHisto(TObject* histGen, TObject* histRec, Double_t jetPtGen, Double_t jetPtRec, TList* jetTrackList, - const TList* tracksGen, const TArrayI& indexAODTr, const TArrayS& isGenPrim, const Bool_t useRecJetPt) -{ - // fill objects for jet track reconstruction efficiency +void AliAnalysisTaskFragmentationFunction::FillJetTrackHistosRecGen(TObject* histGen,TObject* histRec,Double_t jetPtGen,Double_t jetPtRec, TList* jetTrackList, const TList* tracksGen, + const TArrayI& indexAODTr,const TArrayS& isRefGen, const Bool_t useRecJetPt) +{ + // fill objects for jet track reconstruction efficiency or secondaries contamination // arguments histGen/histRec can be of different type: AliFragFuncHistos*, AliFragFuncIntraJetHistos*, ... Int_t nTracksJet = jetTrackList->GetSize(); // list with AODMC tracks @@ -4718,8 +4800,9 @@ void AliAnalysisTaskFragmentationFunction::FillJetTrackRecEffHisto(TObject* hist continue; } - if(isGenPrim[iGen] != 1) continue; // select primaries - + + if(isRefGen[iGen] != 1) continue; // select primaries + Double_t ptGen = gentrack->Pt(); Double_t etaGen = gentrack->Eta(); Double_t phiGen = TVector2::Phi_0_2pi(gentrack->Phi()); @@ -4737,20 +4820,24 @@ void AliAnalysisTaskFragmentationFunction::FillJetTrackRecEffHisto(TObject* hist Int_t iRec = indexAODTr[iGen]; // can be -1 if no good reconstructed track Bool_t isRec = (iRec>=0) ? kTRUE : kFALSE; - if(dynamic_cast(histGen) && dynamic_cast(histRec)){ + if(dynamic_cast(histGen) || dynamic_cast(histRec)){ // histGen can be NULL for secondaries -> || // after checking can afford normal cast - AliFragFuncHistos* effFFhistGen = (AliFragFuncHistos*)(histGen); - AliFragFuncHistos* effFFhistRec = (AliFragFuncHistos*)(histRec); - - if(useRecJetPt) effFFhistGen->FillFF( ptGen, jetPtRec, incrementJetPtGenFF ); - else effFFhistGen->FillFF( ptGen, jetPtGen, incrementJetPtGenFF ); + AliFragFuncHistos* FFhistGen = (AliFragFuncHistos*) (histGen); + AliFragFuncHistos* FFhistRec = (AliFragFuncHistos*) (histRec); - incrementJetPtGenFF = kFALSE; + if(FFhistGen){ + if(useRecJetPt) FFhistGen->FillFF( ptGen, jetPtRec, incrementJetPtGenFF ); + else FFhistGen->FillFF( ptGen, jetPtGen, incrementJetPtGenFF ); + + incrementJetPtGenFF = kFALSE; + } - if(isRec){ - if(useRecJetPt) effFFhistRec->FillFF( ptGen, jetPtRec, incrementJetPtRecFF ); - else effFFhistRec->FillFF( ptGen, jetPtGen, incrementJetPtRecFF ); + + if(FFhistRec && isRec){ + + if(useRecJetPt) FFhistRec->FillFF( ptGen, jetPtRec, incrementJetPtRecFF ); + else FFhistRec->FillFF( ptGen, jetPtGen, incrementJetPtRecFF ); incrementJetPtRecFF = kFALSE; } @@ -4763,7 +4850,6 @@ void AliAnalysisTaskFragmentationFunction::FillJetTrackRecEffHisto(TObject* hist } } - // _____________________________________________________________________________________________________________________________________________ void AliAnalysisTaskFragmentationFunction::FillSingleTrackResponse(THnSparse* hnResponse, TList* tracksGen, TList* tracksRec, const TArrayI& indexAODTr, const TArrayS& isGenPrim) diff --git a/PWG4/JetTasks/AliAnalysisTaskFragmentationFunction.h b/PWG4/JetTasks/AliAnalysisTaskFragmentationFunction.h index dbced13af0a..ac4277c16e7 100644 --- a/PWG4/JetTasks/AliAnalysisTaskFragmentationFunction.h +++ b/PWG4/JetTasks/AliAnalysisTaskFragmentationFunction.h @@ -345,6 +345,8 @@ class AliAnalysisTaskFragmentationFunction : public AliAnalysisTaskSE { Float_t trackPhiMin = 0., Float_t trackPhiMax = 2*TMath::Pi()) {fTrackPtCut = trackPt; fTrackEtaMin = trackEtaMin; fTrackEtaMax = trackEtaMax; fTrackPhiMin = trackPhiMin; fTrackPhiMax = trackPhiMax;} + + virtual void UseAODInputJets(Bool_t b) {fUseAODInputJets = b;} virtual void SetFilterMask(UInt_t i) {fFilterMask = i;} virtual void UsePhysicsSelection(Bool_t b) {fUsePhysicsSelection = b;} virtual void SetEventClass(Int_t i){fEventClass = i;} @@ -449,18 +451,18 @@ class AliAnalysisTaskFragmentationFunction : public AliAnalysisTaskSE { Double_t GetDiJetBin(Double_t invMass, Double_t leadingJetPt, Double_t eMean, Int_t kindSlices); // function to find which bin fill Double_t InvMass(const AliAODJet* jet1, const AliAODJet* jet2); - void AssociateGenRec(TList* tracksAODMCCharged,TList* tracksRec, TArrayI& indexAODTr,TArrayI& indexMCTr,TArrayS& isGenPrim); - void FillSingleTrackRecEffHisto(AliFragFuncQATrackHistos* trackQAGen, AliFragFuncQATrackHistos* trackQARec, TList* tracksGen, const TArrayI& indexAODTr, const TArrayS& isGenPrim); - void FillJetTrackRecEffHisto(TObject* histGen,TObject* histRec,Double_t jetPtGen,Double_t jetPtRec, TList* jetTrackList, const TList* tracksGen, - const TArrayI& indexAODTr,const TArrayS& isGenPrim, const Bool_t useRecJetPt); - void FillSingleTrackResponse(THnSparse* hnResponse, TList* tracksGen, TList* tracksRec, const TArrayI& indexAODTr, const TArrayS& isGenPrim); + void AssociateGenRec(TList* tracksAODMCCharged,TList* tracksRec, TArrayI& indexAODTr,TArrayI& indexMCTr,TArrayS& isRefGen,TH2F* fh2PtRecVsGen); + + void FillSingleTrackHistosRecGen(AliFragFuncQATrackHistos* trackQAGen, AliFragFuncQATrackHistos* trackQARec, TList* tracksGen, + const TArrayI& indexAODTr, const TArrayS& isRefGen); + void FillJetTrackHistosRecGen(TObject* histGen,TObject* histRec,Double_t jetPtGen,Double_t jetPtRec, TList* jetTrackList, const TList* tracksGen, + const TArrayI& indexAODTr,const TArrayS& isRefGen, const Bool_t useRecJetPt); + void FillSingleTrackResponse(THnSparse* hnResponse, TList* tracksGen, TList* tracksRec, const TArrayI& indexAODTr, const TArrayS& isGenPrim); void FillJetTrackResponse(THnSparse* hnResponsePt, THnSparse* hnResponseZ, THnSparse* hnResponseXi, Double_t jetPtGen, Double_t jetPtRec, TList* jetTrackList, const TList* tracksGen, TList* tracksRec, const TArrayI& indexAODTr, const TArrayS& isGenPrim,const Bool_t useRecJetPt); - - // Float_t CalcJetArea(const Float_t etaJet, const Float_t rc) const; @@ -476,7 +478,7 @@ class AliAnalysisTaskFragmentationFunction : public AliAnalysisTaskSE { // Consts enum {kTrackUndef=0, kTrackAOD, kTrackAODQualityCuts, kTrackAODCuts, kTrackKineAll, kTrackKineCharged, kTrackKineChargedAcceptance, - kTrackAODMCAll, kTrackAODMCCharged, kTrackAODMCChargedAcceptance}; + kTrackAODMCAll, kTrackAODMCCharged, kTrackAODMCChargedAcceptance, kTrackAODMCChargedSec}; enum {kJetsUndef=0, kJetsRec, kJetsRecAcceptance, kJetsGen, kJetsGenAcceptance, kJetsKine, kJetsKineAcceptance}; enum {kBckgPerp=0, kBckgOutLJ, kBckgOut2J, kBckgClusters, kBckgClustersOutLeading, kBckgOut3J, kBckgOutAJ, kBckgOutLJStat, kBckgOut2JStat, kBckgOut3JStat, kBckgOutAJStat, kBckgASide, kBckgASideWindow, kBckgPerpWindow}; @@ -490,6 +492,7 @@ class AliAnalysisTaskFragmentationFunction : public AliAnalysisTaskSE { AliESDEvent* fESD; // ESD event AliAODEvent* fAOD; // AOD event + AliAODEvent* fAODJets; // AOD event with jet branch (case we have AOD both in input and output) AliAODExtension *fAODExtension; //! where we take the jets from can be input or output AOD //AliMCEvent* fMCEvent; // MC event TString fNonStdFile; // name of delta aod file to catch the extension @@ -505,6 +508,7 @@ class AliAnalysisTaskFragmentationFunction : public AliAnalysisTaskSE { Int_t fJetTypeRecEff; // type of jets used for filling reconstruction efficiency histos + Bool_t fUseAODInputJets; // take jets from in/output - only relevant if AOD event both in input AND output and we want to use output UInt_t fFilterMask; // filter bit for selected tracks Bool_t fUsePhysicsSelection; // switch for event selection Int_t fEventClass; // event class to be looked at for this instace of the task @@ -548,11 +552,12 @@ class AliAnalysisTaskFragmentationFunction : public AliAnalysisTaskSE { Float_t fAvgTrials; // average number of trials per event - TList* fTracksRec; //! reconstructed tracks - TList* fTracksRecCuts; //! reconstructed tracks after cuts - TList* fTracksGen; //! generated tracks - TList* fTracksAODMCCharged; //! AOD MC tracks - TList* fTracksRecQualityCuts; //! reconstructed tracks after quality cuts, no acceptance/pt cut + TList* fTracksRec; //! reconstructed tracks + TList* fTracksRecCuts; //! reconstructed tracks after cuts + TList* fTracksGen; //! generated tracks + TList* fTracksAODMCCharged; //! AOD MC tracks + TList* fTracksAODMCChargedSec; //! AOD MC tracks - secondaries + TList* fTracksRecQualityCuts; //! reconstructed tracks after quality cuts, no acceptance/pt cut TList* fJetsRec; //! jets from reconstructed tracks @@ -750,15 +755,18 @@ class AliAnalysisTaskFragmentationFunction : public AliAnalysisTaskSE { TH1F *fh1nRecEffJets; //! number of jets for reconstruction eff per event TH1F *fh1nRecBckgJetsCuts; //! number of jets from reconstructed tracks per event TH1F *fh1nGenBckgJets; //! number of jets from generated tracks per event - TH2F *fh2PtRecVsGenPrim; //! association rec/gen MC: rec vs gen pt + TH2F *fh2PtRecVsGenPrim; //! association rec/gen MC: rec vs gen pt, primaries + TH2F *fh2PtRecVsGenSec; //! association rec/gen MC: rec vs gen pt, secondaries - // tracking efficiency + // tracking efficiency / secondaries AliFragFuncQATrackHistos* fQATrackHistosRecEffGen; //! tracking efficiency: generated primaries AliFragFuncQATrackHistos* fQATrackHistosRecEffRec; //! tracking efficiency: reconstructed primaries + AliFragFuncQATrackHistos* fQATrackHistosSecRec; //! reconstructed secondaries AliFragFuncHistos* fFFHistosRecEffGen; //! tracking efficiency: FF generated primaries AliFragFuncHistos* fFFHistosRecEffRec; //! tracking efficiency: FF reconstructed primaries + AliFragFuncHistos* fFFHistosSecRec; //! secondary contamination: FF reconstructed secondaries // momentum resolution THnSparse* fhnResponseSinglePt; //! single track response pt diff --git a/PWG4/macros/AddTaskFragmentationFunction.C b/PWG4/macros/AddTaskFragmentationFunction.C index 968884723a8..0abb939a00e 100644 --- a/PWG4/macros/AddTaskFragmentationFunction.C +++ b/PWG4/macros/AddTaskFragmentationFunction.C @@ -245,9 +245,7 @@ AliAnalysisTaskFragmentationFunction *AddTaskFragmentationFunction( task->SetBckgMode(1); // default: bgMode = 1 task->SetBckgType(); - task->SetBranchRecBackClusters("clustersAOD_KT04_B0_Filter00256_Cut00150_Skip00"); - - + task->SetBranchRecBackClusters(Form("clustersAOD_KT04_B0_Filter%05d_Cut00150_Skip00",filterMask)); // Define histo bins task->SetFFHistoBins(); diff --git a/PWG4/macros/AddTaskJetSpectrum2.C b/PWG4/macros/AddTaskJetSpectrum2.C index c3a452f99f3..51a17ade293 100644 --- a/PWG4/macros/AddTaskJetSpectrum2.C +++ b/PWG4/macros/AddTaskJetSpectrum2.C @@ -101,8 +101,8 @@ AliAnalysisTaskJetSpectrum2 *AddTaskJetSpectrum2(const char* bRec,const char* bG if(type == "AOD"){ - // Assume all jet are produced already - pwg4spec->SetAODJetInput(kTRUE); + // Assume all jets are not yet produced + // pwg4spec->SetAODJetInput(kTRUE); pwg4spec->SetAODTrackInput(kTRUE); pwg4spec->SetAODMCInput(kTRUE); } diff --git a/PWG4/macros/AnalysisTrainPWG4Jets.C b/PWG4/macros/AnalysisTrainPWG4Jets.C index f882927f534..355aa1646e8 100644 --- a/PWG4/macros/AnalysisTrainPWG4Jets.C +++ b/PWG4/macros/AnalysisTrainPWG4Jets.C @@ -161,7 +161,7 @@ Int_t kProofOffset = 0; //== grid plugin setup variables Bool_t kPluginUse = kTRUE; // do not change Bool_t kPluginUseProductionMode = kFALSE; // use the plugin in production mode -TString kPluginRootVersion = "v5-27-06b"; // *CHANGE ME IF MORE RECENT IN GRID* +TString kPluginRootVersion = "v5-28-00a"; // *CHANGE ME IF MORE RECENT IN GRID* TString kPluginAliRootVersion = "v4-19-15-AN"; // *CHANGE ME IF MORE RECENT IN GRID* Bool_t kPluginMergeViaJDL = kTRUE; // merge via JDL Bool_t kPluginFastReadOption = kFALSE; // use xrootd tweaks @@ -406,6 +406,7 @@ void AnalysisTrainPWG4Jets(const char *analysis_mode="local", } */ + if(iPhysicsSelection && !iAODanalysis){ gROOT->LoadMacro("$ALICE_ROOT/ANALYSIS/macros/AddTaskPhysicsSelection.C"); Int_t iTriggerHIC = 0; @@ -415,10 +416,13 @@ void AnalysisTrainPWG4Jets(const char *analysis_mode="local", rejectBkg = false; // for the moment... } AliPhysicsSelectionTask* physSelTask = AddTaskPhysicsSelection(kIsMC,rejectBkg); - iPhysicsSelectionFlag = AliVEvent::kMB; + mgr->RegisterExtraFile("EventStat_temp.root"); mgr->AddStatisticsTask(); } + else{ + iPhysicsSelectionFlag = AliVEvent::kMB; + } if(iCentralitySelection){ @@ -560,6 +564,7 @@ void AnalysisTrainPWG4Jets(const char *analysis_mode="local", taskCl->SetBackgroundCalc(kTRUE); taskCl->SetCentralityCut(fCenLo,fCenUp); taskCl->SetGhostEtamax(fTrackEtaWindow); + if(iAODanalysis==2)taskCl->SetAODTrackInput(kTRUE); kDefaultJetBackgroundBranchCut1 = Form("%s_%s",AliAODJetEventBackground::StdBranchName(),taskCl->GetJetOutputBranch()); if (iPWG4FastEmbedding) { @@ -568,52 +573,62 @@ void AnalysisTrainPWG4Jets(const char *analysis_mode="local", taskClEmb->SetBackgroundCalc(kTRUE); taskClEmb->SetCentralityCut(fCenLo,fCenUp); taskClEmb->SetGhostEtamax(fTrackEtaWindow); + if(iAODanalysis==2)taskClEmb->SetAODTrackInput(kTRUE); kDefaultJetBackgroundBranch_extra = Form("%s_%s",AliAODJetEventBackground::StdBranchName(),taskClEmb->GetJetOutputBranch()); taskClEmb = AddTaskJetCluster("AODextraonly","",kHighPtFilterMask,iPhysicsSelectionFlag,"KT",0.4,0,1, kDeltaAODJetName.Data(),0.15,fTrackEtaWindow); // this one is for the background and random jets taskClEmb->SetBackgroundCalc(kFALSE); taskClEmb->SetCentralityCut(fCenLo,fCenUp); taskClEmb->SetGhostEtamax(fTrackEtaWindow); - + if(iAODanalysis==2)taskClEmb->SetAODTrackInput(kTRUE); + taskClEmb = AddTaskJetCluster("AODextra","",kHighPtFilterMask,iPhysicsSelectionFlag,"ANTIKT",0.4,0,1,kDeltaAODJetName.Data(),0.15,fTrackEtaWindow); taskClEmb->SetCentralityCut(fCenLo,fCenUp); taskClEmb->SetBackgroundBranch(kDefaultJetBackgroundBranch_extra.Data()); kJetSubtractBranches_extra += Form("%s ",taskClEmb->GetJetOutputBranch()); + if(iAODanalysis==2)taskClEmb->SetAODTrackInput(kTRUE); taskClEmb = AddTaskJetCluster("AODextraonly","",kHighPtFilterMask,iPhysicsSelectionFlag,"ANTIKT",0.4,0,1,kDeltaAODJetName.Data(),0.15,fTrackEtaWindow); taskClEmb->SetCentralityCut(fCenLo,fCenUp); + if(iAODanalysis==2)taskClEmb->SetAODTrackInput(kTRUE); } taskCl = AddTaskJetCluster("AOD","",kHighPtFilterMask,iPhysicsSelectionFlag,"KT",0.2,0,1, kDeltaAODJetName.Data(),0.15); // this one is for the background and random jets taskCl->SetBackgroundCalc(kTRUE); taskCl->SetCentralityCut(fCenLo,fCenUp); taskCl->SetGhostEtamax(fTrackEtaWindow); + if(iAODanalysis==2)taskCl->SetAODTrackInput(kTRUE); } else{ taskCl = AddTaskJetCluster("AOD","",kHighPtFilterMask,iPhysicsSelectionFlag,"KT",0.6,0,1,kDeltaAODJetName.Data(),0.15); // this one is for the background jets taskCl->SetBackgroundCalc(kTRUE); kDefaultJetBackgroundBranch = Form("%s_%s",AliAODJetEventBackground::StdBranchName(),taskCl->GetJetOutputBranch()); taskCl->SetGhostEtamax(fTrackEtaWindow); + if(iAODanalysis==2)taskCl->SetAODTrackInput(kTRUE); taskCl = AddTaskJetCluster("AOD","",kHighPtFilterMask,iPhysicsSelectionFlag,"KT",0.4,0,1,kDeltaAODJetName.Data(),0.15); taskCl->SetBackgroundCalc(kTRUE); taskCl->SetGhostEtamax(fTrackEtaWindow); + if(iAODanalysis==2)taskCl->SetAODTrackInput(kTRUE); } taskCl = AddTaskJetCluster("AOD","",kHighPtFilterMask,iPhysicsSelectionFlag,"ANTIKT",0.4,2,1,kDeltaAODJetName.Data(),0.15); taskCl->SetCentralityCut(fCenLo,fCenUp); if(kIsPbPb)taskCl->SetBackgroundBranch(kDefaultJetBackgroundBranch.Data()); taskCl->SetNRandomCones(1); + if(iAODanalysis==2)taskCl->SetAODTrackInput(kTRUE); kDefaultJetBranch = taskCl->GetJetOutputBranch(); kJetSubtractBranches += Form("%s ",taskCl->GetJetOutputBranch()); taskCl = AddTaskJetCluster("AOD","",kHighPtFilterMask,iPhysicsSelectionFlag,"ANTIKT",0.4,2,1,kDeltaAODJetName.Data(),2.0); taskCl->SetCentralityCut(fCenLo,fCenUp); + if(iAODanalysis==2)taskCl->SetAODTrackInput(kTRUE); if(kIsPbPb)taskCl->SetBackgroundBranch(kDefaultJetBackgroundBranchCut1.Data()); kJetSubtractBranchesCut1 += Form("%s ",taskCl->GetJetOutputBranch()); taskCl = AddTaskJetCluster("AOD","",kHighPtFilterMask,iPhysicsSelectionFlag,"ANTIKT",0.2,0,1,kDeltaAODJetName.Data(),0.15); taskCl->SetCentralityCut(fCenLo,fCenUp); + if(iAODanalysis==2)taskCl->SetAODTrackInput(kTRUE); if(kIsPbPb)taskCl->SetBackgroundBranch(kDefaultJetBackgroundBranch.Data()); kJetSubtractBranches += Form("%s ",taskCl->GetJetOutputBranch()); @@ -630,11 +645,13 @@ void AnalysisTrainPWG4Jets(const char *analysis_mode="local", taskCl->SetBackgroundCalc(kTRUE); taskCl->SetGhostEtamax(0.9); kDefaultJetBackgroundBranchMC = Form("%s_%s",AliAODJetEventBackground::StdBranchName(),taskCl->GetJetOutputBranch()); - + if(iAODanalysis==2)taskCl->SetAODTrackInput(kTRUE); + taskCl = AddTaskJetCluster("AODMC2","",kHighPtFilterMask,iPhysicsSelectionFlag,"KT",0.4,0,1, kDeltaAODJetName.Data(),0.15); // this one is for the background and random jets taskCl->SetBackgroundCalc(kTRUE); taskCl->SetGhostEtamax(fTrackEtaWindow); kDefaultJetBackgroundBranchMC2 = Form("%s_%s",AliAODJetEventBackground::StdBranchName(),taskCl->GetJetOutputBranch(),fTrackEtaWindow); + if(iAODanalysis==2)taskCl->SetAODTrackInput(kTRUE); } else{ taskCl = AddTaskJetCluster("AODMC","",kHighPtFilterMask,iPhysicsSelectionFlag,"KT",0.6,0,1, kDeltaAODJetName.Data(),0.15,fTrackEtaWindow); // this one is for the background and random jets @@ -646,6 +663,7 @@ void AnalysisTrainPWG4Jets(const char *analysis_mode="local", taskCl->SetBackgroundCalc(kTRUE); taskCl->SetGhostEtamax(fTrackEtaWindow); kDefaultJetBackgroundBranchMC2 = Form("%s_%s",AliAODJetEventBackground::StdBranchName(),taskCl->GetJetOutputBranch()); + if(iAODanalysis==2)taskCl->SetAODTrackInput(kTRUE); // pp background calcs... } @@ -653,11 +671,12 @@ void AnalysisTrainPWG4Jets(const char *analysis_mode="local", taskCl->SetGhostEtamax(fTrackEtaWindow); if(kIsPbPb)taskCl->SetBackgroundBranch(kDefaultJetBackgroundBranchMC.Data()); kDefaultJetBranchMC = taskCl->GetJetOutputBranch(); + if(iAODanalysis==2)taskCl->SetAODTrackInput(kTRUE); taskCl = AddTaskJetCluster("AODMC2","",kHighPtFilterMask,iPhysicsSelectionFlag,"ANTIKT",0.4,0,1, kDeltaAODJetName.Data(),0.15,fTrackEtaWindow); if(kIsPbPb)taskCl->SetBackgroundBranch(kDefaultJetBackgroundBranchMC2.Data()); kDefaultJetBranchMC2 = taskCl->GetJetOutputBranch(); - + if(iAODanalysis==2)taskCl->SetAODTrackInput(kTRUE); } @@ -814,8 +833,9 @@ void AnalysisTrainPWG4Jets(const char *analysis_mode="local", // // the random jets... - taskjetSpectrum = AddTaskJetSpectrum2("clustersAOD_KT04_B0_Filter00256_Cut00150_Skip00RandomConeSkip00", - "clustersAOD_KT04_B0_Filter00256_Cut00150_Skip00RandomCone_random", + taskjetSpectrum = AddTaskJetSpectrum2( + Form("clustersAOD_KT04_B0_Filter%05d_Cut00150_Skip00RandomConeSkip00",kHighPtFilterMask), + Form("clustersAOD_KT04_B0_Filter%05d_Cut00150_Skip00RandomCone_random",kHighPtFilterMask), kDeltaAODJetName.Data(),kHighPtFilterMask,AliVEvent::kMB,0,i); taskjetSpectrum->SetBranchBkgRec(bkgClusters.Data()); @@ -825,8 +845,9 @@ void AnalysisTrainPWG4Jets(const char *analysis_mode="local", taskjetSpectrum->SetTrackEtaWindow(fTrackEtaWindow); taskjetSpectrum->SetJetEtaWindow(fJetEtaWindow); - taskjetSpectrum = AddTaskJetSpectrum2("clustersAOD_KT04_B0_Filter00256_Cut02000_Skip00RandomConeSkip00", - "clustersAOD_KT04_B0_Filter00256_Cut02000_Skip00RandomCone_random", + taskjetSpectrum = AddTaskJetSpectrum2( + Form("clustersAOD_KT04_B0_Filter%05d_Cut02000_Skip00RandomConeSkip00",kHighPtFilterMask), + Form("clustersAOD_KT04_B0_Filter%05d_Cut02000_Skip00RandomCone_random",kHighPtFilterMask), kDeltaAODJetName.Data(),kHighPtFilterMask,AliVEvent::kMB,0,i); taskjetSpectrum->SetBranchBkgRec(bkgClustersCut1.Data()); taskjetSpectrum->SetBranchBkgGen(bkgClustersCut1.Data()); @@ -944,21 +965,36 @@ void AnalysisTrainPWG4Jets(const char *analysis_mode="local", // Anti-kT taskFrag = AddTaskFragmentationFunction(1<<23,kHighPtFilterMask, 1); if(kDeltaAODJetName.Length()>0)taskFrag->SetNonStdFile(kDeltaAODJetName.Data()); + if(iAODanalysis==2)taskFrag->UseAODInputJets(kFALSE); + taskFrag = AddTaskFragmentationFunction(1<<23,kHighPtFilterMask, 2); if(kDeltaAODJetName.Length()>0)taskFrag->SetNonStdFile(kDeltaAODJetName.Data()); + if(iAODanalysis==2)taskFrag->UseAODInputJets(kFALSE); + taskFrag = AddTaskFragmentationFunction(1<<23,kHighPtFilterMask, 3); if(kDeltaAODJetName.Length()>0)taskFrag->SetNonStdFile(kDeltaAODJetName.Data()); + if(iAODanalysis==2)taskFrag->UseAODInputJets(kFALSE); + taskFrag = AddTaskFragmentationFunction(1<<23,kHighPtFilterMask, 4); if(kDeltaAODJetName.Length()>0)taskFrag->SetNonStdFile(kDeltaAODJetName.Data()); + if(iAODanalysis==2)taskFrag->UseAODInputJets(kFALSE); + // UA1 taskFrag = AddTaskFragmentationFunction(1<<0,kHighPtFilterMask, 1); if(kDeltaAODJetName.Length()>0)taskFrag->SetNonStdFile(kDeltaAODJetName.Data()); + if(iAODanalysis==2)taskFrag->UseAODInputJets(kFALSE); + taskFrag = AddTaskFragmentationFunction(1<<0,kHighPtFilterMask, 2); if(kDeltaAODJetName.Length()>0)taskFrag->SetNonStdFile(kDeltaAODJetName.Data()); + if(iAODanalysis==2)taskFrag->UseAODInputJets(kFALSE); + taskFrag = AddTaskFragmentationFunction(1<<0,kHighPtFilterMask, 3); if(kDeltaAODJetName.Length()>0)taskFrag->SetNonStdFile(kDeltaAODJetName.Data()); + if(iAODanalysis==2)taskFrag->UseAODInputJets(kFALSE); + taskFrag = AddTaskFragmentationFunction(1<<0,kHighPtFilterMask, 4); if(kDeltaAODJetName.Length()>0)taskFrag->SetNonStdFile(kDeltaAODJetName.Data()); + if(iAODanalysis==2)taskFrag->UseAODInputJets(kFALSE); // SISCONE /* @@ -970,9 +1006,12 @@ void AnalysisTrainPWG4Jets(const char *analysis_mode="local", // Anti-kT B2 - B3 taskFrag = AddTaskFragmentationFunction(1<<26,kHighPtFilterMask, 1); if(kDeltaAODJetName.Length()>0)taskFrag->SetNonStdFile(kDeltaAODJetName.Data()); + if(iAODanalysis==2)taskFrag->UseAODInputJets(kFALSE); + + taskFrag = AddTaskFragmentationFunction(1<<27,kHighPtFilterMask, 1); if(kDeltaAODJetName.Length()>0)taskFrag->SetNonStdFile(kDeltaAODJetName.Data()); - + if(iAODanalysis==2)taskFrag->UseAODInputJets(kFALSE); } if (!taskFrag) ::Warning("AnalysisTrainPWG4Jets", "AliAnalysisTaskFragmentationFunction cannot run for this train conditions - EXCLUDED"); @@ -1316,7 +1355,7 @@ void StartAnalysis(const char *mode, TChain *chain) { ::Error("AnalysisTrainPWG4Jets.C::StartAnalysis", "Cannot create the chain"); return; } - mgr->StartAnalysis(mode, chain); + // mgr->StartAnalysis(mode, chain); mgr->StartAnalysis(mode, chain,kNumberOfEvents); } return; @@ -1975,7 +2014,7 @@ AliAnalysisAlien* CreateAlienHandler(const char *plugin_mode) // Define production directory LFN plugin->SetGridDataDir(kGridDatadir.Data()); // Set data search pattern - if (iAODanalysis) plugin->SetDataPattern(" *AliAOD.Jets.root"); + if (iAODanalysis) plugin->SetDataPattern(" *AliAOD.root"); // else plugin->SetDataPattern(Form(" %s/*/*ESD.tag.root",kGridPassPattern.Data())); else plugin->SetDataPattern(Form(" %s/*/*AliESDs.root",kGridPassPattern.Data())); // ...then add run numbers to be considered -- 2.43.0