ATLAS Offline Software
Loading...
Searching...
No Matches
Prerec2012/ParsebJESInput.py
Go to the documentation of this file.
1# Copyright (C) 2002-2017 CERN for the benefit of the ATLAS collaboration
2
3from ROOT import *
4from array import array
5import glob
6import re
7import math
8import ProviderHistoHelpers
9
10
11SystematicNameDictionary = {
12 'herwigpp' : 'bJES_Generator',
13 'distorted_geometry' : 'bJES_Geometry',
14 'FTFP_BERT' : 'bJES_HadIntModel'
15 }
16
17jetDefDict = {
18 'AntiKt4TopoEM' : 'AntiKt4Topo_EMJES',
19 'AntiKt6TopoEM' : 'AntiKt6Topo_EMJES',
20 'AntiKt4LCTopo' : 'AntiKt4Topo_LCJES',
21 'AntiKt6LCTopo' : 'AntiKt6Topo_LCJES'
22 }
23
24def ReadBJESHistograms(dirName):
25 if not dirName.endswith("/"):
26 dirName = dirName + "/"
27
28 # Run over each file (one per jet definition)
29 # Skip files that don't start with b-JES and contain GSC
30 histos = {}
31 files = sorted(glob.glob(dirName+"b-JES*GSC.root"))
32 for aFileName in files:
33 # Determine the jet definition
34 jetDef = ""
35 for aFileDef,aJetDef in jetDefDict.iteritems():
36 if aFileDef in aFileName:
37 jetDef = aJetDef
38 break
39 if jetDef == "":
40 print "Failed to determine jet definition for file:",aFileName
41 return None
42 histos[jetDef] = {}
43
44 # Read in the histograms of interest from the file
45 inFile = TFile(aFileName,"READ")
46 for aName,aSystName in SystematicNameDictionary.iteritems():
47 systematicName = aSystName + "_" + jetDef
48 histo = inFile.Get(aName)
49 if histo is None:
50 print "Failed to get histogram:",systematicName
51 return None
52
53 histo2D = ProviderHistoHelpers.ConvertTGraphToProviderHisto(histo,systematicName)
54 histo2D.SetDirectory(0)
55
56 # It's currently response, set to difference from 1
57 for ptBin in range(1,histo2D.GetNbinsX()+1):
58 for etaBin in range(1,histo2D.GetNbinsY()+1):
59 histo2D.SetBinContent(ptBin,etaBin,1-histo2D.GetBinContent(ptBin,etaBin))
60
61 histos[jetDef][aSystName] = histo2D
62
63 # Done reading, close the file
64 inFile.Close()
65
66 # Make one quadrature sum histo of the desired components for now
67 # The new provider design should make this irrelevant for multijet components too, but for now...
68 for aDef,aHistoSet in histos.iteritems():
69 # We want one histo of herwigpp and distorted_geometry (leave out FTFP_BERT)
70 histos[aDef]['bJES'] = ProviderHistoHelpers.QuadratureSumHisto('bJES',[histos[aDef]['bJES_Generator'],histos[aDef]['bJES_Geometry']])
71 histos[aDef]['bJES'].SetDirectory(0)
72
73 return histos
74
ConvertTGraphToProviderHisto(graph, histoName)