From fd8aaab3d6dfa48f908c16ec9e9788860792e3b0 Mon Sep 17 00:00:00 2001 From: matthieu Date: Fri, 18 Sep 2015 17:40:15 +0200 Subject: [PATCH 1/3] change type1 jet pt threshold from 10 to 15 GeV --- .../Type1MET/python/correctionTermsPfMetType1Type2_cff.py | 2 +- PhysicsTools/PatUtils/python/patPFMETCorrections_cff.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/JetMETCorrections/Type1MET/python/correctionTermsPfMetType1Type2_cff.py b/JetMETCorrections/Type1MET/python/correctionTermsPfMetType1Type2_cff.py index 9174e5e2b8e3e..af946dfbe3c57 100644 --- a/JetMETCorrections/Type1MET/python/correctionTermsPfMetType1Type2_cff.py +++ b/JetMETCorrections/Type1MET/python/correctionTermsPfMetType1Type2_cff.py @@ -37,7 +37,7 @@ jetCorrLabel = cms.InputTag("ak4PFCHSL1FastL2L3Corrector"), #for MC jetCorrLabelRes = cms.InputTag("ak4PFCHSL1FastL2L3ResidualCorrector"), # for data, automatic switch jetCorrEtaMax = cms.double(9.9), - type1JetPtThreshold = cms.double(10.0), + type1JetPtThreshold = cms.double(15.0), skipEM = cms.bool(True), skipEMfractionThreshold = cms.double(0.90), skipMuons = cms.bool(True), diff --git a/PhysicsTools/PatUtils/python/patPFMETCorrections_cff.py b/PhysicsTools/PatUtils/python/patPFMETCorrections_cff.py index 41126b0593baa..3658ae23cecd5 100644 --- a/PhysicsTools/PatUtils/python/patPFMETCorrections_cff.py +++ b/PhysicsTools/PatUtils/python/patPFMETCorrections_cff.py @@ -40,7 +40,7 @@ offsetCorrLabel = cms.InputTag("L1FastJet"), jetCorrLabel = cms.InputTag("L3Absolute"), # for MC jetCorrLabelRes = cms.InputTag("L2L3Residual"), # for Data automatic switch - type1JetPtThreshold = cms.double(10.0), + type1JetPtThreshold = cms.double(15.0), type2ResidualCorrLabel = cms.InputTag(""), type2ResidualCorrEtaMax = cms.double(9.9), type2ExtraCorrFactor = cms.double(1.), From 8b2aa931442af0fa07bc4cf714fd0d52bc47b73b Mon Sep 17 00:00:00 2001 From: matthieu Date: Fri, 25 Sep 2015 09:52:05 +0200 Subject: [PATCH 2/3] remove automatic reclustering when running on miniAODs --- .../PatAlgos/plugins/RecoMETExtractor.cc | 63 +++++++++++++ .../PatAlgos/plugins/RecoMETExtractor.h | 47 ++++++++++ .../runMETCorrectionsAndUncertainties.py | 88 ++++++++++++++----- 3 files changed, 178 insertions(+), 20 deletions(-) create mode 100644 PhysicsTools/PatAlgos/plugins/RecoMETExtractor.cc create mode 100644 PhysicsTools/PatAlgos/plugins/RecoMETExtractor.h diff --git a/PhysicsTools/PatAlgos/plugins/RecoMETExtractor.cc b/PhysicsTools/PatAlgos/plugins/RecoMETExtractor.cc new file mode 100644 index 0000000000000..f22071b5a2f0a --- /dev/null +++ b/PhysicsTools/PatAlgos/plugins/RecoMETExtractor.cc @@ -0,0 +1,63 @@ +#include "PhysicsTools/PatAlgos/plugins/RecoMETExtractor.h" +#include "FWCore/MessageLogger/interface/MessageLogger.h" +#include "FWCore/ParameterSet/interface/ConfigurationDescriptions.h" +#include "FWCore/ParameterSet/interface/ParameterSetDescription.h" + +#include + +using namespace pat; + +RecoMETExtractor::RecoMETExtractor(const edm::ParameterSet& iConfig) { + + edm::InputTag metIT = iConfig.getParameter("metSource"); + metSrcToken_ = consumes(metIT); + + std::string corLevel = iConfig.getParameter("correctionLevel"); + + //all possible met flavors + if(corLevel=="raw") { corLevel_=pat::MET::Raw;} + else if(corLevel=="type1") { corLevel_=pat::MET::Type1;} + else if(corLevel=="type01") { corLevel_=pat::MET::Type01;} + else if(corLevel=="typeXY") { corLevel_=pat::MET::TypeXY;} + else if(corLevel=="type1XY") { corLevel_=pat::MET::Type1XY;} + else if(corLevel=="type01XY") { corLevel_=pat::MET::Type01XY;} + else if(corLevel=="type1Smear") { corLevel_=pat::MET::Type1Smear;} + else if(corLevel=="type01Smear") { corLevel_=pat::MET::Type01Smear;} + else if(corLevel=="type1SmearXY") { corLevel_=pat::MET::Type1SmearXY;} + else if(corLevel=="type01SmearXY") { corLevel_=pat::MET::Type01SmearXY;} + else if(corLevel=="rawCalo") { corLevel_=pat::MET::RawCalo;} + else { + //throw exception + + } + + // produces vector of recoMet + produces >(); +} + + +RecoMETExtractor::~RecoMETExtractor() { + +} + + +void RecoMETExtractor::produce(edm::StreamID streamID, edm::Event & iEvent, + const edm::EventSetup & iSetup) const { + + edm::Handle > src; + iEvent.getByToken(metSrcToken_, src); + if(src->size()==0) edm::LogError("RecoMETExtractor::produce") << "input reco MET collection is empty" ; + + std::vector *metCol = new std::vector(); + + reco::MET met(src->front().corP4(corLevel_), src->front().vertex() ); + metCol->push_back( met ); + + std::auto_ptr > recoMETs(metCol); + iEvent.put(recoMETs); +} + + +#include "FWCore/Framework/interface/MakerMacros.h" + +DEFINE_FWK_MODULE(RecoMETExtractor); diff --git a/PhysicsTools/PatAlgos/plugins/RecoMETExtractor.h b/PhysicsTools/PatAlgos/plugins/RecoMETExtractor.h new file mode 100644 index 0000000000000..609cc0dab5ca1 --- /dev/null +++ b/PhysicsTools/PatAlgos/plugins/RecoMETExtractor.h @@ -0,0 +1,47 @@ +#ifndef PhysicsTools_PatAlgos_RecoMETExtractor_h +#define PhysicsTools_PatAlgos_RecoMETExtractor_h + +/** + \class pat::RecoMETExtractor RecoMETExtractor.h "PhysicsTools/PatAlgos/interface/RecoMETExtractor.h" + \brief Retrieves the recoMET from a pat::MET + + The RecoMETExtractor produces the analysis-level pat::MET starting from + a collection of objects of METType. + + \author Matthieu Marionneau + \version $Id: RecoMETExtractor.h,v 1.0 2015/07/22 mmarionn Exp $ +*/ + + +#include "FWCore/Framework/interface/global/EDProducer.h" +#include "FWCore/Framework/interface/Event.h" +#include "FWCore/Framework/interface/ConsumesCollector.h" +#include "FWCore/ParameterSet/interface/ParameterSet.h" +#include "FWCore/Utilities/interface/InputTag.h" + +#include "DataFormats/PatCandidates/interface/MET.h" +#include "DataFormats/METReco/interface/MET.h" + +namespace pat { + + class RecoMETExtractor : public edm::global::EDProducer<> { + + public: + + explicit RecoMETExtractor(const edm::ParameterSet& iConfig); + ~RecoMETExtractor(); + + virtual void produce(edm::StreamID streamID, edm::Event & iEvent, + const edm::EventSetup & iSetup) const; + + private: + + edm::EDGetTokenT > metSrcToken_; + + pat::MET::METCorrectionLevel corLevel_; + + }; + +} + +#endif diff --git a/PhysicsTools/PatUtils/python/tools/runMETCorrectionsAndUncertainties.py b/PhysicsTools/PatUtils/python/tools/runMETCorrectionsAndUncertainties.py index 6e40147449545..b93d3f6634932 100644 --- a/PhysicsTools/PatUtils/python/tools/runMETCorrectionsAndUncertainties.py +++ b/PhysicsTools/PatUtils/python/tools/runMETCorrectionsAndUncertainties.py @@ -230,9 +230,9 @@ def __call__(self, process, self.setParameter('reclusterJets',True) #miniAOD - if onMiniAOD: - self.setParameter('reclusterJets',True) - self.setParameter('recoMetFromPFCs',True) + #if onMiniAOD: + # self.setParameter('reclusterJets',True) + # self.setParameter('recoMetFromPFCs',True) self.apply(process) @@ -279,26 +279,30 @@ def toolCode(self, process): patMetModuleSequence, postfix) reclusterJets = True + elif onMiniAOD: #raw MET extraction if running on miniAODs + self.extractMET(process, "raw", patMetModuleSequence, postfix) + #default MET production self.produceMET(process, metType,patMetModuleSequence, postfix) + + #jet AK4 reclustering if needed for JECs + if reclusterJets: + jetCollection = self.ak4JetReclustering(process, pfCandCollection, + patMetModuleSequence, postfix) + #preparation to run over miniAOD (met reproduction) - #-> could be extracted from the slimmedMET for a gain in CPU performances if onMiniAOD: - reclusterJets = True + # reclusterJets = True self.miniAODConfiguration(process, pfCandCollection, + jetCollectionUnskimmed, patMetModuleSequence, repro74X, postfix - ) - - #jet AK4 reclustering if needed for JECs - if reclusterJets: - jetCollection = self.ak4JetReclustering(process, pfCandCollection, - patMetModuleSequence, postfix) - + ) + #jet ES configuration and jet cleaning #self.jetConfiguration() self.jetCleaning(process, autoJetCleaning, postfix) @@ -1165,7 +1169,39 @@ def recomputeRawMetFromPfcs(self, process, pfCandCollection, onMiniAOD, patMetMo setattr(process, 'patMETs'+postfix, getattr(process,'patMETs' ).clone() ) getattr(process, "patMETs"+postfix).metSource = cms.InputTag("pfMetT1"+postfix) + + def extractMET(self, process, correctionLevel, patMetModuleSequence, postfix): + pfMet = cms.EDProducer("RecoMETExtractor", + metSource= cms.InputTag("slimmedMETs",processName=cms.InputTag.skipCurrentProcess()), + correctionLevel = cms.string(correctionLevel) + ) + if(correctionLevel=="raw"):#dummy fix + setattr(process,"pfMet"+postfix ,pfMet) + patMetModuleSequence += getattr(process, "pfMet"+postfix) + else: + setattr(process,"met"+correctionLevel+postfix ,pfMet) + patMetModuleSequence += getattr(process, "met"+correctionLevel+postfix) + + + def updateJECs(self,process,jetCollection, patMetModuleSequence, postfix): + from PhysicsTools.PatAlgos.producersLayer1.jetUpdater_cff import patJetCorrFactorsUpdated + patJetCorrFactorsReapplyJEC = patJetCorrFactorsUpdated.clone( + src = jetCollection, + levels = ['L1FastJet', + 'L2Relative', + 'L3Absolute'], + payload = 'AK4PFchs' ) # always CHS from miniAODs + + from PhysicsTools.PatAlgos.producersLayer1.jetUpdater_cff import patJetsUpdated + patJetsReapplyJEC = patJetsUpdated.clone( + jetSource = cms.InputTag("slimmedJets"), + jetCorrFactorsSource = cms.VInputTag(cms.InputTag("patJetCorrFactorsReapplyJEC")) + ) + setattr(process,"patJetCorrFactorsReapplyJEC",patJetCorrFactorsReapplyJEC) + setattr(process,"patJets",patJetsReapplyJEC.clone()) + patMetModuleSequence += getattr(process,"patJetCorrFactorsReapplyJEC") + patMetModuleSequence += getattr(process,"patJets") def ak4JetReclustering(self,process, pfCandCollection, patMetModuleSequence, postfix): @@ -1228,22 +1264,19 @@ def ak4JetReclustering(self,process, pfCandCollection, patMetModuleSequence, pos getattr(process,"patJetCorrFactors"+postfix).src=cms.InputTag(jetColName) getattr(process,"patJetCorrFactors"+postfix).primaryVertices= cms.InputTag("offlineSlimmedPrimaryVertices") - #if self._parameters["reclusterJets"].value: - return cms.InputTag("selectedPatJets"+postfix) - def miniAODConfiguration(self, process, pfCandCollection, patMetModuleSequence, repro74X, postfix ): + def miniAODConfiguration(self, process, pfCandCollection, jetCollection, patMetModuleSequence, repro74X, postfix ): if self._parameters["metType"].value == "PF": # not hasattr(process, "pfMet"+postfix) - #getattr(process, "patPFMet"+postfix).metSource = cms.InputTag("pfMet"+postfix) getattr(process, "patPFMet"+postfix).addGenMET = False if not self._parameters["runOnData"].value: getattr(process, "patPFMet"+postfix).addGenMET = True process.genMetExtractor = cms.EDProducer("GenMETExtractor", - metSource= cms.InputTag("slimmedMETs","","PAT") + metSource= cms.InputTag("slimmedMETs",processName=cms.InputTag.skipCurrentProcess()) ) patMetModuleSequence += getattr(process, "genMetExtractor") getattr(process, "patPFMet"+postfix).genMETSource = cms.InputTag("genMetExtractor") @@ -1251,6 +1284,11 @@ def miniAODConfiguration(self, process, pfCandCollection, patMetModuleSequence, if hasattr(process, "patPFMetTxyCorr"+postfix): getattr(process, "patPFMetTxyCorr"+postfix).vertexCollection = cms.InputTag("offlineSlimmedPrimaryVertices") + #handling jets when no reclustering is done + if not self._parameters["reclusterJets"].value: + self.updateJECs(process, jetCollection, patMetModuleSequence, postfix) + + #MM: FIXME MVA #if hasattr(process, "pfMVAMet"): # getattr(process, "pfMVAMet").srcVertices = cms.InputTag("offlineSlimmedPrimaryVertices") @@ -1281,14 +1319,22 @@ def miniAODConfiguration(self, process, pfCandCollection, patMetModuleSequence, getattr(process,"slimmedMETs"+postfix).tXYUncForT01Smear = cms.InputTag("patPFMetT0pcT1SmearTxy"+postfix) getattr(process,"slimmedMETs"+postfix).runningOnMiniAOD = True - getattr(process,"slimmedMETs"+postfix).t01Variation = cms.InputTag("slimmedMETs","","PAT") + getattr(process,"slimmedMETs"+postfix).t01Variation = cms.InputTag("slimmedMETs",processName=cms.InputTag.skipCurrentProcess()) + #extractor for caloMET === temporary for the beginning of the data taking + self.extractMET(process,"calo",patMetModuleSequence,postfix) + from PhysicsTools.PatAlgos.tools.metTools import addMETCollection + addMETCollection(process, + labelName = "patCaloMet", + metSource = "metcalo") + getattr(process,"patCaloMet").addGenMET = False + #smearing and type0 variations not yet supported in reprocessing del getattr(process,"slimmedMETs"+postfix).t1SmearedVarsAndUncs del getattr(process,"slimmedMETs"+postfix).tXYUncForT01 del getattr(process,"slimmedMETs"+postfix).tXYUncForT1Smear del getattr(process,"slimmedMETs"+postfix).tXYUncForT01Smear - del getattr(process,"slimmedMETs"+postfix).caloMET + #del getattr(process,"slimmedMETs"+postfix).caloMET if repro74X: del getattr(process,"slimmedMETs"+postfix).t01Variation @@ -1463,7 +1509,7 @@ def runMetCorAndUncForMiniAODProduction(process, metType="PF", # miniAOD reproduction =========================== def runMetCorAndUncFromMiniAOD(process, metType="PF", - jetCollUnskimmed="patJets", + jetCollUnskimmed="slimmedJets", jetColl="selectedPatJets", photonColl="slimmedPhotons", electronColl="slimmedElectrons", @@ -1488,6 +1534,7 @@ def runMetCorAndUncFromMiniAOD(process, metType="PF", produceIntermediateCorrections=False, addToPatDefaultSequence=False, jetCollection=jetColl, + jetCollectionUnskimmed=jetCollUnskimmed, electronCollection=electronColl, muonCollection=muonColl, tauCollection=tauColl, @@ -1511,6 +1558,7 @@ def runMetCorAndUncFromMiniAOD(process, metType="PF", produceIntermediateCorrections=True, addToPatDefaultSequence=False, jetCollection=jetColl, + jetCollectionUnskimmed=jetCollUnskimmed, electronCollection=electronColl, muonCollection=muonColl, tauCollection=tauColl, From 11b0065f3d0c48b8567a2b7e84fd85cdc4e6b343 Mon Sep 17 00:00:00 2001 From: matthieu Date: Fri, 25 Sep 2015 14:57:12 +0200 Subject: [PATCH 3/3] enable the repro74X option on the shortcuts --- .../PatAlgos/python/slimming/miniAOD_tools.py | 2 +- .../PatAlgos/test/corMETFromMiniAOD.py | 12 ++++--- .../runMETCorrectionsAndUncertainties.py | 31 +++++++++++++------ 3 files changed, 31 insertions(+), 14 deletions(-) diff --git a/PhysicsTools/PatAlgos/python/slimming/miniAOD_tools.py b/PhysicsTools/PatAlgos/python/slimming/miniAOD_tools.py index 32e43a4499eb0..ec9ed3671d3ec 100644 --- a/PhysicsTools/PatAlgos/python/slimming/miniAOD_tools.py +++ b/PhysicsTools/PatAlgos/python/slimming/miniAOD_tools.py @@ -107,7 +107,7 @@ def miniAOD_customizeCommon(process): ) runMetCorAndUncForMiniAODProduction(process, pfCandColl=cms.InputTag("noHFCands"), - recomputeMET=True, #needed for HF removal + recoMetFromPFCs=True, #needed for HF removal postfix="NoHF" ) process.load('PhysicsTools.PatAlgos.slimming.slimmedMETs_cfi') diff --git a/PhysicsTools/PatAlgos/test/corMETFromMiniAOD.py b/PhysicsTools/PatAlgos/test/corMETFromMiniAOD.py index 8a113c708fd9a..92d9e6d50e78c 100644 --- a/PhysicsTools/PatAlgos/test/corMETFromMiniAOD.py +++ b/PhysicsTools/PatAlgos/test/corMETFromMiniAOD.py @@ -22,14 +22,15 @@ # How many events to process process.maxEvents = cms.untracked.PSet( - input = cms.untracked.int32(100) + input = cms.untracked.int32(1000) ) #configurable options ======================================================================= +runOnOld74XMAOD=True #to be set to True for 74X X<12 miniAODs, False otherwise runOnData=False #data/MC switch -usePrivateSQlite=True #use external JECs (sqlite file) +usePrivateSQlite=False #use external JECs (sqlite file) useHFCandidates=False #create an additionnal NoHF slimmed MET collection if the option is set to false -applyResiduals=True #application of residual corrections. Have to be set to True once the 13 TeV residual corrections are available. False to be kept meanwhile. Can be kept to False later for private tests or for analysis checks and developments (not the official recommendation!). +applyResiduals=False #application of residual corrections. Have to be set to True once the 13 TeV residual corrections are available. False to be kept meanwhile. Can be kept to False later for private tests or for analysis checks and developments (not the official recommendation!). #=================================================================== @@ -45,7 +46,7 @@ process.GlobalTag.globaltag = autoCond['run2_data'] #process.GlobalTag.globaltag = '75X_dataRun1_v2' #'74X_dataRun2_Prompt_v1' else: - #process.GlobalTag.globaltag = 'MCRUN2_74_v9' + # process.GlobalTag.globaltag = 'MCRUN2_74_v9' process.GlobalTag.globaltag = autoCond['run2_mc'] # process.GlobalTag = GlobaTag(GlobalTag, 'auto:run2_mc', '') @@ -111,12 +112,15 @@ #for a full met computation, remove the pfCandColl input runMetCorAndUncFromMiniAOD(process, isData=runOnData, + repro74X=runOnOld74XMAOD #only for 74X X<12 miniAODs ) if not useHFCandidates: runMetCorAndUncFromMiniAOD(process, isData=runOnData, pfCandColl=cms.InputTag("noHFCands"), + repro74X=runOnOld74XMAOD, #only for 74X X<12 miniAODs + recoMetFromPFCs=True, #needed for NoHF postfix="NoHF" ) diff --git a/PhysicsTools/PatUtils/python/tools/runMETCorrectionsAndUncertainties.py b/PhysicsTools/PatUtils/python/tools/runMETCorrectionsAndUncertainties.py index b93d3f6634932..f6c718ef913ef 100644 --- a/PhysicsTools/PatUtils/python/tools/runMETCorrectionsAndUncertainties.py +++ b/PhysicsTools/PatUtils/python/tools/runMETCorrectionsAndUncertainties.py @@ -228,11 +228,16 @@ def __call__(self, process, #met reprocessing and jet reclustering if recoMetFromPFCs: self.setParameter('reclusterJets',True) + + #if reprocessing, the extractor does not work (wrong format) + #-> raw MET recomputation needed, but w/o jet reclustering + if onMiniAOD and repro74X: + self.setParameter('recoMetFromPFCs',True) - #miniAOD - #if onMiniAOD: - # self.setParameter('reclusterJets',True) - # self.setParameter('recoMetFromPFCs',True) + #jet collection overloading for automatic jet reclustering + if reclusterJets: + self.setParameter('jetCollection',cms.InputTag('selectedPatJets')) + self.setParameter('jetCollectionUnskimmed',cms.InputTag('patJets')) self.apply(process) @@ -304,7 +309,6 @@ def toolCode(self, process): ) #jet ES configuration and jet cleaning - #self.jetConfiguration() self.jetCleaning(process, autoJetCleaning, postfix) @@ -1442,7 +1446,7 @@ def runMetCorAndUncForMiniAODProduction(process, metType="PF", pfCandColl = "particleFlow", jetCleaning="LepClean", jecUnFile="CondFormats/JetMETObjects/data/Summer15_50nsV5_DATA_UncertaintySources_AK4PFchs.txt", - recomputeMET=False, + recoMetFromPFCs=False, postfix=""): runMETCorrectionsAndUncertainties = RunMETCorrectionsAndUncertainties() @@ -1462,7 +1466,7 @@ def runMetCorAndUncForMiniAODProduction(process, metType="PF", pfCandCollection =pfCandColl, autoJetCleaning=jetCleaning, jecUncertaintyFile=jecUnFile, - recoMetFromPFCs=recomputeMET, + recoMetFromPFCs=recoMetFromPFCs, postfix=postfix ) @@ -1481,7 +1485,7 @@ def runMetCorAndUncForMiniAODProduction(process, metType="PF", pfCandCollection =pfCandColl, autoJetCleaning=jetCleaning, jecUncertaintyFile=jecUnFile, - recoMetFromPFCs=recomputeMET, + recoMetFromPFCs=recoMetFromPFCs, postfix=postfix ) @@ -1500,7 +1504,7 @@ def runMetCorAndUncForMiniAODProduction(process, metType="PF", pfCandCollection =pfCandColl, autoJetCleaning=jetCleaning, jecUncertaintyFile=jecUnFile, - recoMetFromPFCs=recomputeMET, + recoMetFromPFCs=recoMetFromPFCs, postfix=postfix, ) @@ -1520,6 +1524,9 @@ def runMetCorAndUncFromMiniAOD(process, metType="PF", jetCleaning="LepClean", isData=False, jetConfig=False, + repro74X=False, + reclusterJets=False, + recoMetFromPFCs=False, jetCorLabelL3=cms.InputTag('ak4PFCHSL1FastL2L3Corrector'), jetCorLabelRes=cms.InputTag('ak4PFCHSL1FastL2L3ResidualCorrector'), jecUncFile="CondFormats/JetMETObjects/data/Summer15_50nsV5_DATA_UncertaintySources_AK4PFchs.txt", @@ -1542,6 +1549,9 @@ def runMetCorAndUncFromMiniAOD(process, metType="PF", pfCandCollection =pfCandColl, runOnData=isData, onMiniAOD=True, + repro74X=repro74X, + reclusterJets=reclusterJets, + recoMetFromPFCs=recoMetFromPFCs, autoJetCleaning=jetCleaning, manualJetConfig=jetConfig, jetFlavor=jetFlav, @@ -1566,6 +1576,9 @@ def runMetCorAndUncFromMiniAOD(process, metType="PF", pfCandCollection =pfCandColl, runOnData=isData, onMiniAOD=True, + repro74X=repro74X, + reclusterJets=reclusterJets, + recoMetFromPFCs=recoMetFromPFCs, autoJetCleaning=jetCleaning, manualJetConfig=jetConfig, jetFlavor=jetFlav,