CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
List of all members | Public Member Functions | Public Attributes | Static Public Attributes
objects.JetAnalyzer.JetAnalyzer Class Reference
Inheritance diagram for objects.JetAnalyzer.JetAnalyzer:

Public Member Functions

def __init__
 
def beginLoop
 
def computeQGvars
 
def declareHandles
 
def jetFlavour
 
def matchJets
 
def process
 
def smearJets
 
def testJetID
 
def testJetNoID
 

Public Attributes

 doJEC
 
 jetGammaDR
 
 jetLepArbitration
 
 jetLepDR
 
 jetReCalibrator
 
 lepPtMin
 
 qglcalc
 
 shiftJEC
 
 shiftJER
 

Static Public Attributes

 class_object = JetAnalyzer,
 
 cleanJetsFromFirstPhoton = False,
 
 cleanJetsFromIsoTracks = False,
 
 cleanJetsFromTaus = False,
 
 doPuId = False,
 
 doQG = False,
 
string jecPath = ""
 
list jet = jlpairs[lep]
 
string jetCol = 'slimmedJets'
 
float jetEta = 4.7
 
float jetEtaCentral = 2.4
 
tuple jetLepArbitration = (lambda jet,lepton : lepton)
 
float jetLepDR = 0.4
 
int jetPt = 25
 
tuple jlpairs = matchObjectCollection( leptons, allJets, self.jetLepDR**2)
 
tuple jtaupairs = matchObjectCollection( taus, allJets, self.jetLepDR**2)
 
list leptons = []
 Sort Jets by pT. More...
 
tuple leptons = event.inclusiveLeptonsifhasattr(event, 'inclusiveLeptons')
 Associate jets to leptons. More...
 
int minLepPt = 10
 
list photons = []
 Clean Jets from photons. More...
 
 recalibrateJets = False,
 
 relaxJetId = False,
 
int shiftJEC = 0
 
int shiftJER = 0
 
 smearJets = True,
 
tuple taus = getattr(event,'selectedTaus',[])
 Associate jets to taus. More...
 

Detailed Description

Taken from RootTools.JetAnalyzer, simplified, modified, added corrections    

Definition at line 45 of file JetAnalyzer.py.

Constructor & Destructor Documentation

def objects.JetAnalyzer.JetAnalyzer.__init__ (   self,
  cfg_ana,
  cfg_comp,
  looperName 
)

Definition at line 47 of file JetAnalyzer.py.

47 
48  def __init__(self, cfg_ana, cfg_comp, looperName):
49  super(JetAnalyzer,self).__init__(cfg_ana, cfg_comp, looperName)
50  mcGT = cfg_ana.mcGT if hasattr(cfg_ana,'mcGT') else "PHYS14_25_V2"
51  dataGT = cfg_ana.dataGT if hasattr(cfg_ana,'dataGT') else "GR_70_V2_AN1"
52  self.shiftJEC = self.cfg_ana.shiftJEC if hasattr(self.cfg_ana, 'shiftJEC') else 0
53  self.recalibrateJets = self.cfg_ana.recalibrateJets
54  if self.recalibrateJets == "MC" : self.recalibrateJets = self.cfg_comp.isMC
55  elif self.recalibrateJets == "Data": self.recalibrateJets = not self.cfg_comp.isMC
56  elif self.recalibrateJets not in [True,False]: raise RuntimeError, "recalibrateJets must be any of { True, False, 'MC', 'Data' }, while it is %r " % self.recalibrateJets
57  self.doJEC = self.recalibrateJets or (self.shiftJEC != 0)
58  if self.doJEC:
59  if self.cfg_comp.isMC:
60  self.jetReCalibrator = JetReCalibrator(mcGT,"AK4PFchs", False,cfg_ana.jecPath)
61  else:
62  self.jetReCalibrator = JetReCalibrator(dataGT,"AK4PFchs", True,cfg_ana.jecPath)
63  self.doPuId = getattr(self.cfg_ana, 'doPuId', True)
64  self.jetLepDR = getattr(self.cfg_ana, 'jetLepDR', 0.4)
65  self.jetLepArbitration = getattr(self.cfg_ana, 'jetLepArbitration', lambda jet,lepton: lepton)
66  self.lepPtMin = getattr(self.cfg_ana, 'minLepPt', -1)
67  self.jetGammaDR = getattr(self.cfg_ana, 'jetGammaDR', 0.4)
68  if(self.cfg_ana.doQG):
69  self.qglcalc = QGLikelihoodCalculator("/afs/cern.ch/user/t/tomc/public/qgTagger/QGLikelihoodDBFiles/QGL_v1a/pdfQG_AK4chs_antib_13TeV_v1.root")
if(conf.exists("allCellsPositionCalc"))

Member Function Documentation

def objects.JetAnalyzer.JetAnalyzer.beginLoop (   self,
  setup 
)

Definition at line 77 of file JetAnalyzer.py.

77 
78  def beginLoop(self, setup):
79  super(JetAnalyzer,self).beginLoop(setup)
def objects.JetAnalyzer.JetAnalyzer.computeQGvars (   self,
  jet 
)

Definition at line 214 of file JetAnalyzer.py.

References SiPixelRawToDigiRegional_cfi.deltaPhi.

Referenced by objects.JetAnalyzer.JetAnalyzer.process().

215  def computeQGvars(self, jet):
216 
217  jet.mult = 0
218  sum_weight = 0.
219  sum_pt = 0.
220  sum_deta = 0.
221  sum_dphi = 0.
222  sum_deta2 = 0.
223  sum_detadphi = 0.
224  sum_dphi2 = 0.
225 
226 
227 
228  for ii in range(0, jet.numberOfDaughters()) :
229 
230  part = jet.daughter(ii)
231 
232  if part.charge() == 0 : # neutral particles
233 
234  if part.pt() < 1.: continue
235 
236  else : # charged particles
237 
238  if part.trackHighPurity()==False: continue
239  if part.fromPV()<=1: continue
240 
241 
242  jet.mult += 1
243 
244  deta = part.eta() - jet.eta()
245  dphi = deltaPhi(part.phi(), jet.phi())
246  partPt = part.pt()
247  weight = partPt*partPt
248  sum_weight += weight
249  sum_pt += partPt
250  sum_deta += deta*weight
251  sum_dphi += dphi*weight
252  sum_deta2 += deta*deta*weight
253  sum_detadphi += deta*dphi*weight
254  sum_dphi2 += dphi*dphi*weight
255 
256 
257 
258 
259  a = 0.
260  b = 0.
261  c = 0.
262 
263  if sum_weight > 0 :
264  jet.ptd = math.sqrt(sum_weight)/sum_pt
265  ave_deta = sum_deta/sum_weight
266  ave_dphi = sum_dphi/sum_weight
267  ave_deta2 = sum_deta2/sum_weight
268  ave_dphi2 = sum_dphi2/sum_weight
269  a = ave_deta2 - ave_deta*ave_deta
270  b = ave_dphi2 - ave_dphi*ave_dphi
271  c = -(sum_detadphi/sum_weight - ave_deta*ave_dphi)
272  else: jet.ptd = 0.
273 
274  delta = math.sqrt(math.fabs((a-b)*(a-b)+4.*c*c))
275 
276  if a+b-delta > 0: jet.axis2 = -math.log(math.sqrt(0.5*(a+b-delta)))
277  else: jet.axis2 = -1.
278 
def objects.JetAnalyzer.JetAnalyzer.declareHandles (   self)

Definition at line 70 of file JetAnalyzer.py.

References core.AutoHandle.AutoHandle.handles, core.Analyzer.Analyzer.handles, and HTTP.RequestManager.handles.

70 
71  def declareHandles(self):
72  super(JetAnalyzer, self).declareHandles()
73  self.handles['jets'] = AutoHandle( self.cfg_ana.jetCol, 'std::vector<pat::Jet>' )
74  self.handles['genJet'] = AutoHandle( 'slimmedGenJets', 'vector<reco::GenJet>' )
75  self.shiftJER = self.cfg_ana.shiftJER if hasattr(self.cfg_ana, 'shiftJER') else 0
76  self.handles['rho'] = AutoHandle( ('fixedGridRhoFastjetAll','',''), 'double' )
def objects.JetAnalyzer.JetAnalyzer.jetFlavour (   self,
  event 
)

Definition at line 279 of file JetAnalyzer.py.

References funct.abs(), deltar.bestMatch(), deltar.matchObjectCollection2(), and benchmark_cfg.pdgId.

280  def jetFlavour(self,event):
281  def isFlavour(x,f):
282  id = abs(x.pdgId())
283  if id > 999: return (id/1000)%10 == f
284  if id > 99: return (id/100)%10 == f
285  return id % 100 == f
286 
287 
288 
289  event.bqObjects = [ p for p in event.genParticles if (p.status() == 2 and isFlavour(p,5)) ]
290  event.cqObjects = [ p for p in event.genParticles if (p.status() == 2 and isFlavour(p,4)) ]
291 
292  event.partons = [ p for p in event.genParticles if ((p.status() == 23 or p.status() == 3) and abs(p.pdgId())>0 and (abs(p.pdgId()) in [1,2,3,4,5,21]) ) ]
293  match = matchObjectCollection2(event.cleanJetsAll,
294  event.partons,
295  deltaRMax = 0.3)
296 
297  for jet in event.cleanJetsAll:
298  parton = match[jet]
299  jet.partonId = (parton.pdgId() if parton != None else 0)
300  jet.partonMotherId = (parton.mother(0).pdgId() if parton != None and parton.numberOfMothers()>0 else 0)
301 
302  for jet in event.jets:
303  (bmatch, dr) = bestMatch(jet, event.bqObjects)
304  if dr < 0.4:
305  jet.mcFlavour = 5
306  else:
307  (cmatch, dr) = bestMatch(jet, event.cqObjects)
308  if dr < 0.4:
309  jet.mcFlavour = 4
310  else:
311  jet.mcFlavour = 0
312 
313  event.heaviestQCDFlavour = 5 if len(event.bqObjects) else (4 if len(event.cqObjects) else 1);
314 
def bestMatch
Definition: deltar.py:136
def matchObjectCollection2
Definition: deltar.py:164
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
def objects.JetAnalyzer.JetAnalyzer.matchJets (   self,
  event,
  jets 
)

Definition at line 315 of file JetAnalyzer.py.

References funct.abs(), and deltar.matchObjectCollection2().

Referenced by objects.JetAnalyzer.JetAnalyzer.process().

316  def matchJets(self, event, jets):
317  match = matchObjectCollection2(jets,
318  event.genbquarks + event.genwzquarks,
319  deltaRMax = 0.3)
320  for jet in jets:
321  gen = match[jet]
322  jet.mcParton = gen
323  jet.mcMatchId = (gen.sourceId if gen != None else 0)
324  jet.mcMatchFlav = (abs(gen.pdgId()) if gen != None else 0)
325 
326  match = matchObjectCollection2(jets,
327  event.genJets,
328  deltaRMax = 0.3)
329  for jet in jets:
330  jet.mcJet = match[jet]
331 
332 
def matchObjectCollection2
Definition: deltar.py:164
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
def objects.JetAnalyzer.JetAnalyzer.process (   self,
  event 
)

Definition at line 80 of file JetAnalyzer.py.

References analyzer.Analyzer.cfg_ana, objects.JetAnalyzer.JetAnalyzer.computeQGvars(), BTagPerformanceAnalyzerOnData.doJEC, objects.JetAnalyzer.JetAnalyzer.doJEC, core.AutoHandle.AutoHandle.handles, core.Analyzer.Analyzer.handles, HTTP.RequestManager.handles, if(), python.multivaluedict.map(), objects.JetAnalyzer.JetAnalyzer.matchJets(), core.Analyzer.Analyzer.readCollections(), objects.JetAnalyzer.JetAnalyzer.shiftJEC, objects.JetAnalyzer.JetAnalyzer.smearJets, JetAnalyzer.JetAnalyzer.testJetID(), objects.JetAnalyzer.JetAnalyzer.testJetID(), and objects.JetAnalyzer.JetAnalyzer.testJetNoID().

Referenced by ConfigBuilder.ConfigBuilder.__init__(), ConfigBuilder.ConfigBuilder.addExtraStream(), ConfigBuilder.ConfigBuilder.anyOf(), ConfigBuilder.ConfigBuilder.completeInputCommand(), ConfigBuilder.ConfigBuilder.doNotInlineEventContent(), ConfigBuilder.ConfigBuilder.PrintAllModules.leave(), ConfigBuilder.ConfigBuilder.prepare(), ConfigBuilder.ConfigBuilder.prepare_ALCA(), ConfigBuilder.ConfigBuilder.prepare_DQM(), ConfigBuilder.ConfigBuilder.prepare_FASTSIM(), ConfigBuilder.ConfigBuilder.prepare_HARVESTING(), ConfigBuilder.ConfigBuilder.prepare_HLT(), ConfigBuilder.ConfigBuilder.prepare_LHE(), ConfigBuilder.ConfigBuilder.prepare_VALIDATION(), ConfigBuilder.ConfigBuilder.renameHLTprocessInSequence(), ConfigBuilder.ConfigBuilder.renameInputTagsInSequence(), and ConfigBuilder.ConfigBuilder.scheduleSequence().

80 
81  def process(self, event):
82  self.readCollections( event.input )
83  rho = float(self.handles['rho'].product()[0])
84  event.rho = rho
85 
86  ## Read jets, if necessary recalibrate and shift MET
87  allJets = map(Jet, self.handles['jets'].product())
88 
89  event.deltaMetFromJEC = [0.,0.]
90  if self.doJEC:
91  #print "\nCalibrating jets %s for lumi %d, event %d" % (self.cfg_ana.jetCol, event.lumi, event.eventId)
92  self.jetReCalibrator.correctAll(allJets, rho, delta=self.shiftJEC, metShift=event.deltaMetFromJEC)
93  event.allJetsUsedForMET = allJets
94 
95  if self.cfg_comp.isMC:
96  event.genJets = [ x for x in self.handles['genJet'].product() ]
97  self.matchJets(event, allJets)
98  if getattr(self.cfg_ana, 'smearJets', False):
99  self.smearJets(event, allJets)
def objects.JetAnalyzer.JetAnalyzer.smearJets (   self,
  event,
  jets 
)

Definition at line 333 of file JetAnalyzer.py.

References objects.JetAnalyzer.JetAnalyzer.smearJets.

334  def smearJets(self, event, jets):
335  # https://twiki.cern.ch/twiki/bin/viewauth/CMS/TWikiTopRefSyst#Jet_energy_resolution
336  for jet in jets:
337  gen = jet.mcJet
338  if gen != None:
339  genpt, jetpt, aeta = gen.pt(), jet.pt(), abs(jet.eta())
340  # from https://twiki.cern.ch/twiki/bin/view/CMS/JetResolution
341  factor = 1.052 + self.shiftJER*math.hypot(0.012,0.062);
342  if aeta > 2.3: factor = 1.288 + self.shiftJER*math.hypot(0.127,0.154)
343  elif aeta > 1.7: factor = 1.134 + self.shiftJER*math.hypot(0.035,0.066)
344  elif aeta > 1.1: factor = 1.096 + self.shiftJER*math.hypot(0.017,0.063)
345  elif aeta > 0.5: factor = 1.057 + self.shiftJER*math.hypot(0.012,0.056)
346  ptscale = max(0.0, (jetpt + (factor-1)*(jetpt-genpt))/jetpt)
347  #print "get with pt %.1f (gen pt %.1f, ptscale = %.3f)" % (jetpt,genpt,ptscale)
348  jet.deltaMetFromJetSmearing = [ -(ptscale-1)*jet.rawFactor()*jet.px(), -(ptscale-1)*jet.rawFactor()*jet.py() ]
349  if ptscale != 0:
350  jet.setP4(jet.p4()*ptscale)
351  # leave the uncorrected unchanged for sync
352  jet._rawFactorMultiplier *= (1.0/ptscale) if ptscale != 0 else 1
353  #else: print "jet with pt %.1d, eta %.2f is unmatched" % (jet.pt(), jet.eta())
354 
355 
356 
setattr(JetAnalyzer,"defaultConfig", cfg.Analyzer(
Abs< T >::type abs(const T &t)
Definition: Abs.h:22
def objects.JetAnalyzer.JetAnalyzer.testJetID (   self,
  jet 
)

Definition at line 201 of file JetAnalyzer.py.

References objects.JetAnalyzer.JetAnalyzer.doPuId.

Referenced by objects.JetAnalyzer.JetAnalyzer.process().

202  def testJetID(self, jet):
203  jet.puJetIdPassed = jet.puJetId()
204  jet.pfJetIdPassed = jet.jetID('POG_PFID_Loose')
205  if self.cfg_ana.relaxJetId:
206  return True
207  else:
208  return jet.pfJetIdPassed and (jet.puJetIdPassed or not(self.doPuId))
def objects.JetAnalyzer.JetAnalyzer.testJetNoID (   self,
  jet 
)

Definition at line 209 of file JetAnalyzer.py.

References funct.abs().

Referenced by objects.JetAnalyzer.JetAnalyzer.process().

210  def testJetNoID( self, jet ):
211  # 2 is loose pile-up jet id
212  return jet.pt() > self.cfg_ana.jetPt and \
213  abs( jet.eta() ) < self.cfg_ana.jetEta;
Abs< T >::type abs(const T &t)
Definition: Abs.h:22

Member Data Documentation

objects.JetAnalyzer.JetAnalyzer.class_object = JetAnalyzer,
static

Definition at line 357 of file JetAnalyzer.py.

objects.JetAnalyzer.JetAnalyzer.cleanJetsFromFirstPhoton = False,
static

Definition at line 372 of file JetAnalyzer.py.

objects.JetAnalyzer.JetAnalyzer.cleanJetsFromIsoTracks = False,
static

Definition at line 374 of file JetAnalyzer.py.

objects.JetAnalyzer.JetAnalyzer.cleanJetsFromTaus = False,
static

Definition at line 373 of file JetAnalyzer.py.

objects.JetAnalyzer.JetAnalyzer.doJEC

Definition at line 56 of file JetAnalyzer.py.

Referenced by objects.JetAnalyzer.JetAnalyzer.process().

objects.JetAnalyzer.JetAnalyzer.doPuId = False,
static

Definition at line 366 of file JetAnalyzer.py.

Referenced by objects.JetAnalyzer.JetAnalyzer.testJetID().

objects.JetAnalyzer.JetAnalyzer.doQG = False,
static

Definition at line 367 of file JetAnalyzer.py.

string objects.JetAnalyzer.JetAnalyzer.jecPath = ""
static

Definition at line 375 of file JetAnalyzer.py.

list objects.JetAnalyzer.JetAnalyzer.jet = jlpairs[lep]
static

Definition at line 163 of file JetAnalyzer.py.

string objects.JetAnalyzer.JetAnalyzer.jetCol = 'slimmedJets'
static

Definition at line 358 of file JetAnalyzer.py.

float objects.JetAnalyzer.JetAnalyzer.jetEta = 4.7
static

Definition at line 360 of file JetAnalyzer.py.

float objects.JetAnalyzer.JetAnalyzer.jetEtaCentral = 2.4
static

Definition at line 361 of file JetAnalyzer.py.

objects.JetAnalyzer.JetAnalyzer.jetGammaDR

Definition at line 66 of file JetAnalyzer.py.

objects.JetAnalyzer.JetAnalyzer.jetLepArbitration

Definition at line 64 of file JetAnalyzer.py.

tuple objects.JetAnalyzer.JetAnalyzer.jetLepArbitration = (lambda jet,lepton : lepton)
static

Definition at line 363 of file JetAnalyzer.py.

objects.JetAnalyzer.JetAnalyzer.jetLepDR

Definition at line 63 of file JetAnalyzer.py.

float objects.JetAnalyzer.JetAnalyzer.jetLepDR = 0.4
static

Definition at line 362 of file JetAnalyzer.py.

int objects.JetAnalyzer.JetAnalyzer.jetPt = 25
static

Definition at line 359 of file JetAnalyzer.py.

objects.JetAnalyzer.JetAnalyzer.jetReCalibrator

Definition at line 59 of file JetAnalyzer.py.

tuple objects.JetAnalyzer.JetAnalyzer.jlpairs = matchObjectCollection( leptons, allJets, self.jetLepDR**2)
static

Definition at line 157 of file JetAnalyzer.py.

tuple objects.JetAnalyzer.JetAnalyzer.jtaupairs = matchObjectCollection( taus, allJets, self.jetLepDR**2)
static

Definition at line 170 of file JetAnalyzer.py.

objects.JetAnalyzer.JetAnalyzer.lepPtMin

Definition at line 65 of file JetAnalyzer.py.

list JetAnalyzer.leptons = []
static

Sort Jets by pT.

Apply jet selection Clean Jets from leptons

Definition at line 126 of file JetAnalyzer.py.

tuple objects.JetAnalyzer.JetAnalyzer.leptons = event.inclusiveLeptonsifhasattr(event, 'inclusiveLeptons')
static

Associate jets to leptons.

Definition at line 156 of file JetAnalyzer.py.

int objects.JetAnalyzer.JetAnalyzer.minLepPt = 10
static

Definition at line 364 of file JetAnalyzer.py.

list JetAnalyzer.photons = []
static

Clean Jets from photons.

Definition at line 142 of file JetAnalyzer.py.

objects.JetAnalyzer.JetAnalyzer.qglcalc

Definition at line 68 of file JetAnalyzer.py.

objects.JetAnalyzer.JetAnalyzer.recalibrateJets = False,
static

Definition at line 368 of file JetAnalyzer.py.

objects.JetAnalyzer.JetAnalyzer.relaxJetId = False,
static

Definition at line 365 of file JetAnalyzer.py.

objects.JetAnalyzer.JetAnalyzer.shiftJEC

Definition at line 51 of file JetAnalyzer.py.

int objects.JetAnalyzer.JetAnalyzer.shiftJEC = 0
static

Definition at line 369 of file JetAnalyzer.py.

Referenced by objects.JetAnalyzer.JetAnalyzer.process().

objects.JetAnalyzer.JetAnalyzer.shiftJER

Definition at line 74 of file JetAnalyzer.py.

int objects.JetAnalyzer.JetAnalyzer.shiftJER = 0
static

Definition at line 371 of file JetAnalyzer.py.

objects.JetAnalyzer.JetAnalyzer.smearJets = True,
static

Definition at line 370 of file JetAnalyzer.py.

Referenced by objects.JetAnalyzer.JetAnalyzer.process(), and objects.JetAnalyzer.JetAnalyzer.smearJets().

tuple objects.JetAnalyzer.JetAnalyzer.taus = getattr(event,'selectedTaus',[])
static

Associate jets to taus.

Definition at line 169 of file JetAnalyzer.py.