00001 import FWCore.ParameterSet.Config as cms
00002 import Validation.RecoTau.ValidationUtils as Utils
00003 import copy
00004 import re
00005 import os
00006
00007
00008
00009
00010 """
00011
00012 RecoTauValidation_cfi.py
00013
00014 Contains the standard tau Validation parameters. It is organized into
00015 the following sections.
00016
00017 DENOMINATOR
00018
00019 Set common kinematic cuts (pt > 5 and eta < 2.5) on the denominator source.
00020 Note that the denominator depends on the type of test (signal/background/e etc)
00021
00022 The denominator kinematic cutter requires that
00023
00024 HISTOGRAMS
00025
00026 Produce numerator and denominator histgorams used to produce
00027 tau efficiency plots
00028
00029 Provides sequence:
00030 TauValNumeratorAndDenominator
00031 Requires:
00032 tauValSelectedDenominator (filtered GenJet collection)
00033
00034 EFFICIENCY
00035
00036 Using numerator and denominators, calculate and store
00037 the efficiency curves
00038
00039 Provides sequence:
00040 TauEfficiencies
00041 Requires:
00042 TauValNumeratorAndDenominator
00043
00044 PLOTTING
00045
00046 Plot curves calculated in efficiency, in both an overlay mode
00047 showing overall performance for a release, and the indvidual
00048 discriminator efficiency compared to a given release
00049
00050 Provides sequence:
00051 loadTau
00052 plotTauValidation
00053 loadAndPlotTauValidation
00054
00055 Requires:
00056 TauEfficiencies, external root file to compare to
00057
00058 Plotting must be executed in a separate cmsRun job!
00059
00060 UTILITIES
00061
00062 Various scripts to automate things...
00063
00064
00065 """
00066
00067 """
00068
00069 DENOMINATOR
00070
00071 """
00072
00073
00074 kinematicSelectedTauValDenominator = cms.EDFilter("GenJetSelector",
00075 src = cms.InputTag("objectTypeSelectedTauValDenominator"),
00076 cut = cms.string('pt > 5. && abs(eta) < 2.5'),
00077 filter = cms.bool(False)
00078 )
00079
00080 denominator = cms.InputTag("kinematicSelectedTauValDenominator")
00081
00082 """
00083
00084 HISTOGRAMS
00085
00086 Plot the pt/eta/energy/phi spectrum of PFTaus that pass
00087 a series of PFTauDiscriminator cuts.
00088
00089 These will be used as the numerator/denominators of the
00090 efficiency calculations
00091 """
00092
00093 StandardMatchingParameters = cms.PSet(
00094 DataType = cms.string('Leptons'),
00095 MatchDeltaR_Leptons = cms.double(0.15),
00096 MatchDeltaR_Jets = cms.double(0.3),
00097 SaveOutputHistograms = cms.bool(False),
00098
00099 RefCollection = denominator,
00100 TauPtCut = cms.double(0.),
00101 )
00102
00103 PFTausHighEfficiencyLeadingPionBothProngs = cms.EDAnalyzer("TauTagValidation",
00104 StandardMatchingParameters,
00105 ExtensionName = cms.string("LeadingPion"),
00106 TauProducer = cms.InputTag('shrinkingConePFTauProducer'),
00107 discriminators = cms.VPSet(
00108 cms.PSet( discriminator = cms.string("shrinkingConePFTauDiscriminationByLeadingTrackFinding"),selectionCut = cms.double(0.5),plotStep = cms.bool(True)),
00109 cms.PSet( discriminator = cms.string("shrinkingConePFTauDiscriminationByLeadingPionPtCut"),selectionCut = cms.double(0.5),plotStep = cms.bool(False)),
00110 cms.PSet( discriminator = cms.string("shrinkingConePFTauDiscriminationByTrackIsolationUsingLeadingPion"),selectionCut = cms.double(0.5),plotStep = cms.bool(True)),
00111 cms.PSet( discriminator = cms.string("shrinkingConePFTauDiscriminationByECALIsolationUsingLeadingPion"),selectionCut = cms.double(0.5),plotStep = cms.bool(True)),
00112 cms.PSet( discriminator = cms.string("shrinkingConePFTauDiscriminationAgainstElectron"),selectionCut = cms.double(0.5),plotStep = cms.bool(True)),
00113 cms.PSet( discriminator = cms.string("shrinkingConePFTauDiscriminationAgainstMuon"),selectionCut = cms.double(0.5),plotStep = cms.bool(True))
00114 )
00115 )
00116
00117 PFTausHighEfficiencyLeadingPionBothProngs2 = PFTausHighEfficiencyLeadingPionBothProngs.clone()
00118
00119 PFTausHighEfficiencyBothProngs = cms.EDAnalyzer("TauTagValidation",
00120 StandardMatchingParameters,
00121 ExtensionName = cms.string(""),
00122 TauProducer = cms.InputTag('shrinkingConePFTauProducer'),
00123 discriminators = cms.VPSet(
00124 cms.PSet( discriminator = cms.string("shrinkingConePFTauDiscriminationByLeadingTrackFinding"),selectionCut = cms.double(0.5),plotStep = cms.bool(True)),
00125 cms.PSet( discriminator = cms.string("shrinkingConePFTauDiscriminationByLeadingTrackPtCut"),selectionCut = cms.double(0.5),plotStep = cms.bool(False)),
00126 cms.PSet( discriminator = cms.string("shrinkingConePFTauDiscriminationByTrackIsolation"),selectionCut = cms.double(0.5),plotStep = cms.bool(True)),
00127 cms.PSet( discriminator = cms.string("shrinkingConePFTauDiscriminationByECALIsolation"),selectionCut = cms.double(0.5),plotStep = cms.bool(True)),
00128 cms.PSet( discriminator = cms.string("shrinkingConePFTauDiscriminationAgainstElectron"),selectionCut = cms.double(0.5),plotStep = cms.bool(True)),
00129 cms.PSet( discriminator = cms.string("shrinkingConePFTauDiscriminationAgainstMuon"),selectionCut = cms.double(0.5),plotStep = cms.bool(True))
00130 )
00131 )
00132
00133 PFTausHighEfficiencyBothProngs2 = PFTausHighEfficiencyBothProngs.clone()
00134
00135 RunTancValidation = copy.deepcopy(PFTausHighEfficiencyBothProngs)
00136 RunTancValidation.ExtensionName = "Tanc"
00137 RunTancValidation.discriminators = cms.VPSet(
00138 cms.PSet( discriminator = cms.string("shrinkingConePFTauDiscriminationByLeadingTrackFinding"),selectionCut = cms.double(0.5),plotStep = cms.bool(True)),
00139 cms.PSet( discriminator = cms.string("shrinkingConePFTauDiscriminationByLeadingPionPtCut"),selectionCut = cms.double(0.5),plotStep = cms.bool(False)),
00140 cms.PSet( discriminator = cms.string("shrinkingConePFTauDiscriminationByTaNCfrOnePercent"),selectionCut = cms.double(0.5),plotStep = cms.bool(True)),
00141 cms.PSet( discriminator = cms.string("shrinkingConePFTauDiscriminationByTaNCfrHalfPercent"),selectionCut = cms.double(0.5),plotStep = cms.bool(True)),
00142 cms.PSet( discriminator = cms.string("shrinkingConePFTauDiscriminationByTaNCfrQuarterPercent"),selectionCut = cms.double(0.5),plotStep = cms.bool(True)),
00143 cms.PSet( discriminator = cms.string("shrinkingConePFTauDiscriminationByTaNCfrTenthPercent"),selectionCut = cms.double(0.5),plotStep = cms.bool(True)),
00144 cms.PSet( discriminator = cms.string("shrinkingConePFTauDiscriminationAgainstElectron"),selectionCut = cms.double(0.5),plotStep = cms.bool(True)),
00145 cms.PSet( discriminator = cms.string("shrinkingConePFTauDiscriminationAgainstMuon"),selectionCut = cms.double(0.5),plotStep = cms.bool(True))
00146 )
00147
00148 RunTancValidation2 = RunTancValidation.clone()
00149
00150 RunHPSValidation = copy.deepcopy(PFTausHighEfficiencyBothProngs)
00151 RunHPSValidation.ExtensionName = ""
00152
00153 RunHPSValidation.TauProducer = cms.InputTag('hpsPFTauProducer')
00154 RunHPSValidation.discriminators = cms.VPSet(
00155 cms.PSet( discriminator = cms.string("hpsPFTauDiscriminationByDecayModeFinding"),selectionCut = cms.double(0.5),plotStep = cms.bool(True)),
00156 cms.PSet( discriminator = cms.string("hpsPFTauDiscriminationByVLooseIsolation"),selectionCut = cms.double(0.5),plotStep = cms.bool(True)),
00157 cms.PSet( discriminator = cms.string("hpsPFTauDiscriminationByLooseIsolation"),selectionCut = cms.double(0.5),plotStep = cms.bool(True)),
00158 cms.PSet( discriminator = cms.string("hpsPFTauDiscriminationByMediumIsolation"),selectionCut = cms.double(0.5),plotStep = cms.bool(True)),
00159 cms.PSet( discriminator = cms.string("hpsPFTauDiscriminationByTightIsolation"),selectionCut = cms.double(0.5),plotStep = cms.bool(True)),
00160 cms.PSet( discriminator = cms.string("hpsPFTauDiscriminationByLooseElectronRejection"),selectionCut = cms.double(0.5),plotStep = cms.bool(False)),
00161 cms.PSet( discriminator = cms.string("hpsPFTauDiscriminationByMediumElectronRejection"),selectionCut = cms.double(0.5),plotStep = cms.bool(True)),
00162 cms.PSet( discriminator = cms.string("hpsPFTauDiscriminationByTightElectronRejection"),selectionCut = cms.double(0.5),plotStep = cms.bool(False)),
00163 cms.PSet( discriminator = cms.string("hpsPFTauDiscriminationByLooseMuonRejection"),selectionCut = cms.double(0.5),plotStep = cms.bool(True)),
00164 cms.PSet( discriminator = cms.string("hpsPFTauDiscriminationByTightMuonRejection"),selectionCut = cms.double(0.5),plotStep = cms.bool(False))
00165 )
00166
00167 RunHPSValidation2 = RunHPSValidation.clone()
00168
00169 RunHPSTanc_HPSValidation = copy.deepcopy(PFTausHighEfficiencyBothProngs)
00170 RunHPSTanc_HPSValidation.ExtensionName = "_HPS"
00171
00172 RunHPSTanc_HPSValidation.TauProducer = cms.InputTag('hpsTancTaus')
00173 RunHPSTanc_HPSValidation.discriminators = cms.VPSet(
00174 cms.PSet( discriminator = cms.string("hpsTancTausDiscriminationByDecayModeSelection"),selectionCut = cms.double(0.5),plotStep = cms.bool(True)),
00175 cms.PSet( discriminator = cms.string("hpsTancTausDiscriminationByVLooseIsolation"),selectionCut = cms.double(0.5),plotStep = cms.bool(True)),
00176 cms.PSet( discriminator = cms.string("hpsTancTausDiscriminationByLooseIsolation"),selectionCut = cms.double(0.5),plotStep = cms.bool(True)),
00177 cms.PSet( discriminator = cms.string("hpsTancTausDiscriminationByMediumIsolation"),selectionCut = cms.double(0.5),plotStep = cms.bool(True)),
00178 cms.PSet( discriminator = cms.string("hpsTancTausDiscriminationByTightIsolation"),selectionCut = cms.double(0.5),plotStep = cms.bool(True)),
00179 cms.PSet( discriminator = cms.string("hpsTancTausDiscriminationByLooseElectronRejection"),selectionCut = cms.double(0.5),plotStep = cms.bool(False)),
00180 cms.PSet( discriminator = cms.string("hpsTancTausDiscriminationByMediumElectronRejection"),selectionCut = cms.double(0.5),plotStep = cms.bool(True)),
00181 cms.PSet( discriminator = cms.string("hpsTancTausDiscriminationByTightElectronRejection"),selectionCut = cms.double(0.5),plotStep = cms.bool(False)),
00182 cms.PSet( discriminator = cms.string("hpsTancTausDiscriminationByLooseMuonRejection"),selectionCut = cms.double(0.5),plotStep = cms.bool(True)),
00183 cms.PSet( discriminator = cms.string("hpsTancTausDiscriminationByTightMuonRejection"),selectionCut = cms.double(0.5),plotStep = cms.bool(False))
00184 )
00185
00186 RunHPSTanc_HPSValidation2 = RunHPSTanc_HPSValidation.clone()
00187
00188 RunHPSTanc_TANCValidation = copy.deepcopy(PFTausHighEfficiencyBothProngs)
00189 RunHPSTanc_TANCValidation.ExtensionName = "_TANC"
00190 RunHPSTanc_TANCValidation.TauProducer = cms.InputTag('hpsTancTaus')
00191 RunHPSTanc_TANCValidation.discriminators = cms.VPSet(
00192 cms.PSet( discriminator = cms.string("hpsTancTausDiscriminationByDecayModeSelection"),selectionCut = cms.double(0.5),plotStep = cms.bool(True)),
00193 cms.PSet( discriminator = cms.string("hpsTancTausDiscriminationByLeadingPionPtCut"),selectionCut = cms.double(0.5),plotStep = cms.bool(False)),
00194 cms.PSet( discriminator = cms.string("hpsTancTausDiscriminationByLeadingTrackFinding"),selectionCut = cms.double(0.5),plotStep = cms.bool(False)),
00195 cms.PSet( discriminator = cms.string("hpsTancTausDiscriminationByLeadingTrackPtCut"),selectionCut = cms.double(0.5),plotStep = cms.bool(False)),
00196 cms.PSet( discriminator = cms.string("hpsTancTausDiscriminationByTanc"),selectionCut = cms.double(0.5),plotStep = cms.bool(False)),
00197 cms.PSet( discriminator = cms.string("hpsTancTausDiscriminationByTancVLoose"),selectionCut = cms.double(0.5),plotStep = cms.bool(False)),
00198 cms.PSet( discriminator = cms.string("hpsTancTausDiscriminationByTancLoose"),selectionCut = cms.double(0.5),plotStep = cms.bool(True)),
00199 cms.PSet( discriminator = cms.string("hpsTancTausDiscriminationByTancMedium"),selectionCut = cms.double(0.5),plotStep = cms.bool(False)),
00200 cms.PSet( discriminator = cms.string("hpsTancTausDiscriminationByTancRaw"),selectionCut = cms.double(0.5),plotStep = cms.bool(False)),
00201 cms.PSet( discriminator = cms.string("hpsTancTausDiscriminationByTancTight"),selectionCut = cms.double(0.5),plotStep = cms.bool(True)),
00202 )
00203
00204 RunHPSTanc_TANCValidation2 = RunHPSTanc_TANCValidation.clone()
00205
00206 CaloTausBothProngs = cms.EDAnalyzer("TauTagValidation",
00207 StandardMatchingParameters,
00208 ExtensionName = cms.string(""),
00209 TauProducer = cms.InputTag('caloRecoTauProducer'),
00210 discriminators = cms.VPSet(
00211 cms.PSet( discriminator = cms.string("caloRecoTauDiscriminationByLeadingTrackFinding"),selectionCut = cms.double(0.5),plotStep = cms.bool(True)),
00212 cms.PSet( discriminator = cms.string("caloRecoTauDiscriminationByLeadingTrackPtCut"),selectionCut = cms.double(0.5),plotStep = cms.bool(False)),
00213 cms.PSet( discriminator = cms.string("caloRecoTauDiscriminationByIsolation"),selectionCut = cms.double(0.5),plotStep = cms.bool(True)),
00214 cms.PSet( discriminator = cms.string("caloRecoTauDiscriminationAgainstElectron"),selectionCut = cms.double(0.5),plotStep = cms.bool(True))
00215 )
00216 )
00217
00218 CaloTausBothProngs2 = CaloTausBothProngs.clone()
00219
00220 TauValNumeratorAndDenominator = cms.Sequence(
00221
00222 RunHPSTanc_HPSValidation+
00223 RunHPSTanc_TANCValidation+
00224
00225 PFTausHighEfficiencyBothProngs+
00226 PFTausHighEfficiencyLeadingPionBothProngs+
00227 RunTancValidation+
00228 RunHPSValidation
00229 )
00230
00231 TauValNumeratorAndDenominator2 = cms.Sequence(
00232
00233 RunHPSTanc_HPSValidation2+
00234 RunHPSTanc_TANCValidation2+
00235
00236 PFTausHighEfficiencyBothProngs2+
00237 PFTausHighEfficiencyLeadingPionBothProngs2+
00238 RunTancValidation2+
00239 RunHPSValidation2
00240 )
00241 """
00242
00243 EFFICIENCY
00244
00245 Tau efficiency calculations
00246
00247 Define the Efficiency curves to produce. Each
00248 efficiency producer takes the numberator and denominator
00249 histograms and the dependent variables.
00250 """
00251
00252 plotPset = Utils.SetPlotSequence(TauValNumeratorAndDenominator)
00253 TauEfficiencies = cms.EDAnalyzer("DQMHistEffProducer",
00254 plots = plotPset
00255 )
00256
00257
00258 """
00259
00260 PLOTTING
00261
00262 loadTau: load two separate TauVal root files into the DQM
00263 so the plotter can access them
00264
00265 """
00266
00267 loadTau = cms.EDAnalyzer("DQMFileLoader",
00268 test = cms.PSet(
00269
00270 inputFileNames = cms.vstring('/opt/sbg/cms/ui4_data1/dbodin/CMSSW_3_5_1/src/TauID/QCD_recoFiles/TauVal_CMSSW_3_6_0_QCD.root'),
00271 scaleFactor = cms.double(1.),
00272 dqmDirectory_store = cms.string('test')
00273 ),
00274 reference = cms.PSet(
00275 inputFileNames = cms.vstring('/opt/sbg/cms/ui4_data1/dbodin/CMSSW_3_5_1/src/TauID/QCD_recoFiles/TauVal_CMSSW_3_6_0_QCD.root'),
00276 scaleFactor = cms.double(1.),
00277 dqmDirectory_store = cms.string('reference')
00278 )
00279 )
00280
00281
00282
00283
00284 xAxisStuff = cms.PSet(
00285 xAxisTitle = cms.string('P_{T} / GeV'),
00286 xAxisTitleOffset = cms.double(0.9),
00287 xAxisTitleSize = cms.double(0.05)
00288 )
00289 xModifiers = [['pt',['xAxisTitle'],['P_{T} / GeV']],['eta',['xAxisTitle'],['#eta']],['phi',['xAxisTitle'],['#phi']],['pileup',['xAxisTitle'],['# of Reco Vertices']]]
00290
00291 yAxisStuff =cms.PSet(
00292 yScale = cms.string('linear'),
00293 minY_linear = cms.double(0.),
00294 maxY_linear = cms.double(1.6),
00295 minY_log = cms.double(0.001),
00296 maxY_log = cms.double(1.8),
00297 yAxisTitle = cms.string('#varepsilon'),
00298 yAxisTitleOffset = cms.double(1.1),
00299 yAxisTitleSize = cms.double(0.05)
00300 )
00301 yModifiers = [['efficiency',['yScale','yAxisTitle'],['linear','#varepsilon']],['fakeRate',['yScale','yAxisTitle'],['log','Fake rate']]]
00302
00303 legStuff = cms.PSet(
00304 posX = cms.double(0.50),
00305 posY = cms.double(0.72),
00306 sizeX = cms.double(0.39),
00307 sizeY = cms.double(0.17),
00308 header = cms.string(''),
00309 option = cms.string('brNDC'),
00310 borderSize = cms.int32(0),
00311 fillColor = cms.int32(0)
00312 )
00313 legModifiers = [['efficiency',['posY','sizeY'],[0.72,0.17]],['efficiency_overlay',['posY','sizeY'],[0.66,0.23]]]
00314
00315 drawOptStuff = cms.PSet(
00316 markerColor = cms.int32(1),
00317 markerSize = cms.double(1.),
00318 markerStyle = cms.int32(20),
00319 lineColor = cms.int32(1),
00320 lineStyle = cms.int32(1),
00321 lineWidth = cms.int32(2),
00322 drawOption = cms.string('ex0'),
00323 drawOptionLegend = cms.string('p')
00324 )
00325 drawOptModifiers = [['eff_overlay01',['markerColor','lineColor'],[1,1]],['eff_overlay02',['markerColor','lineColor'],[2,2]],['eff_overlay03',['markerColor','lineColor'],[3,3]],['eff_overlay04',['markerColor','lineColor'],[4,4]],['eff_overlay05',['markerColor','lineColor'],[6,6]],['eff_overlay06',['markerColor','lineColor'],[5,5]],['eff_overlay07',['markerColor','lineColor'],[7,7]],['eff_overlay08',['markerColor','lineColor'],[28,28]],['eff_overlay09',['markerColor','lineColor','markerStyle'],[2,2,29]],['eff_overlay010',['markerColor','lineColor','markerStyle'],[4,4,29]],['eff_overlay011',['markerColor','lineColor','markerStyle'],[6,6,29]]]
00326
00327 standardDrawingStuff = cms.PSet(
00328 canvasSizeX = cms.int32(640),
00329 canvasSizeY = cms.int32(640),
00330 indOutputFileName = cms.string('#PLOT#.png'),
00331 xAxes = Utils.SpawnPSet(xModifiers,xAxisStuff),
00332 yAxes = Utils.SpawnPSet(yModifiers,yAxisStuff),
00333 legends = Utils.SpawnPSet(legModifiers,legStuff),
00334 labels = cms.PSet(
00335 pt = cms.PSet(
00336 posX = cms.double(0.19),
00337 posY = cms.double(0.77),
00338 sizeX = cms.double(0.12),
00339 sizeY = cms.double(0.04),
00340 option = cms.string('brNDC'),
00341 borderSize = cms.int32(0),
00342 fillColor = cms.int32(0),
00343 textColor = cms.int32(1),
00344 textSize = cms.double(0.04),
00345 textAlign = cms.int32(22),
00346 text = cms.vstring('P_{T} > 5 GeV')
00347 ),
00348 eta = cms.PSet(
00349 posX = cms.double(0.19),
00350 posY = cms.double(0.83),
00351 sizeX = cms.double(0.12),
00352 sizeY = cms.double(0.04),
00353 option = cms.string('brNDC'),
00354 borderSize = cms.int32(0),
00355 fillColor = cms.int32(0),
00356 textColor = cms.int32(1),
00357 textSize = cms.double(0.04),
00358 textAlign = cms.int32(22),
00359 text = cms.vstring('-2.5 < #eta < +2.5')
00360 )
00361 ),
00362 drawOptionSets = cms.PSet(
00363 efficiency = cms.PSet(
00364 test = cms.PSet(
00365 markerColor = cms.int32(4),
00366 markerSize = cms.double(1.),
00367 markerStyle = cms.int32(20),
00368 lineColor = cms.int32(1),
00369 lineStyle = cms.int32(1),
00370 lineWidth = cms.int32(1),
00371 drawOption = cms.string('ep'),
00372 drawOptionLegend = cms.string('p')
00373 ),
00374 reference = cms.PSet(
00375 lineColor = cms.int32(1),
00376 lineStyle = cms.int32(1),
00377 lineWidth = cms.int32(1),
00378 fillColor = cms.int32(41),
00379 drawOption = cms.string('eBand'),
00380 drawOptionLegend = cms.string('l')
00381 )
00382 )
00383 ),
00384 drawOptionEntries = Utils.SpawnPSet(drawOptModifiers,drawOptStuff)
00385 )
00386
00387 standardCompareTestAndReference = cms.PSet(
00388 processes = cms.PSet(
00389 test = cms.PSet(
00390 dqmDirectory = cms.string('test'),
00391 legendEntry = cms.string('no test label'),
00392 type = cms.string('smMC')
00393 ),
00394 reference = cms.PSet(
00395 dqmDirectory = cms.string('reference'),
00396 legendEntry = cms.string('no ref label'),
00397 type = cms.string('smMC')
00398 )
00399 ),
00400 )
00401
00402
00403
00404
00405
00406
00407 plotPFTauEfficiencies_hps = cms.EDAnalyzer("DQMHistPlotter",
00408 standardDrawingStuff,
00409 standardCompareTestAndReference,
00410 drawJobs = Utils.SpawnDrawJobs(RunHPSTanc_HPSValidation, plotPset),
00411 outputFilePath = cms.string('./HPSTancTaus_HPS/'),
00412 PrintToFile = cms.bool(True)
00413 )
00414
00415 plotPFTauEfficiencies_hps2 = plotPFTauEfficiencies_hps.clone()
00416
00417 plotPFTauEfficiencies_tanc = cms.EDAnalyzer("DQMHistPlotter",
00418 standardDrawingStuff,
00419 standardCompareTestAndReference,
00420 drawJobs = Utils.SpawnDrawJobs(RunHPSTanc_TANCValidation, plotPset),
00421 outputFilePath = cms.string('./HPSTancTaus_TANC/'),
00422 PrintToFile = cms.bool(True)
00423 )
00424
00425 plotPFTauEfficiencies_tanc2 =plotPFTauEfficiencies_tanc.clone()
00426
00427
00428
00429
00430
00431
00432 plotHPSEfficiencies = cms.EDAnalyzer("DQMHistPlotter",
00433 standardDrawingStuff,
00434 standardCompareTestAndReference,
00435 drawJobs = Utils.SpawnDrawJobs(RunHPSValidation, plotPset),
00436 outputFilePath = cms.string('./hpsPFTauProducer/'),
00437 PrintToFile = cms.bool(True)
00438 )
00439
00440 plotHPSEfficiencies2 = plotHPSEfficiencies.clone()
00441
00442
00443
00444
00445
00446
00447 plotPFTauHighEfficiencyEfficiencies = cms.EDAnalyzer("DQMHistPlotter",
00448 standardDrawingStuff,
00449 standardCompareTestAndReference,
00450 drawJobs = Utils.SpawnDrawJobs(PFTausHighEfficiencyBothProngs, plotPset),
00451 outputFilePath = cms.string('./shrinkingConePFTauProducer/'),
00452 PrintToFile = cms.bool(True)
00453 )
00454
00455 plotPFTauHighEfficiencyEfficiencies2 = plotPFTauHighEfficiencyEfficiencies.clone()
00456
00457
00458
00459
00460
00461
00462 plotCaloTauEfficiencies = cms.EDAnalyzer("DQMHistPlotter",
00463 standardDrawingStuff,
00464 standardCompareTestAndReference,
00465 drawJobs = Utils.SpawnDrawJobs(CaloTausBothProngs, plotPset),
00466 outputFilePath = cms.string('./caloRecoTauProducer/'),
00467 PrintToFile = cms.bool(True)
00468 )
00469
00470 plotCaloTauEfficiencies2 = plotCaloTauEfficiencies.clone()
00471
00472
00473
00474
00475
00476
00477 plotTancValidation = cms.EDAnalyzer("DQMHistPlotter",
00478 standardDrawingStuff,
00479 standardCompareTestAndReference,
00480 drawJobs = Utils.SpawnDrawJobs(RunTancValidation, plotPset),
00481 outputFilePath = cms.string('./shrinkingConePFTauProducerTanc/'),
00482 PrintToFile = cms.bool(True),
00483 )
00484
00485 plotTancValidation2 = plotTancValidation.clone()
00486
00487
00488
00489
00490
00491
00492 plotPFTauHighEfficiencyEfficienciesLeadingPion = cms.EDAnalyzer("DQMHistPlotter",
00493 standardDrawingStuff,
00494 standardCompareTestAndReference,
00495 drawJobs = Utils.SpawnDrawJobs(PFTausHighEfficiencyLeadingPionBothProngs, plotPset),
00496 outputFilePath = cms.string('./shrinkingConePFTauProducerLeadingPion/'),
00497 PrintToFile = cms.bool(True)
00498 )
00499
00500 plotPFTauHighEfficiencyEfficienciesLeadingPion2 = plotPFTauHighEfficiencyEfficienciesLeadingPion.clone()
00501
00502
00503 plotTauValidation = cms.Sequence(
00504 plotPFTauEfficiencies_hps
00505 +plotPFTauEfficiencies_tanc
00506 +plotPFTauHighEfficiencyEfficiencies
00507
00508 +plotTancValidation
00509 +plotPFTauHighEfficiencyEfficienciesLeadingPion
00510 +plotHPSEfficiencies
00511 )
00512
00513 plotTauValidation2 = cms.Sequence(
00514 plotPFTauEfficiencies_hps2
00515 +plotPFTauEfficiencies_tanc2
00516 +plotPFTauHighEfficiencyEfficiencies2
00517
00518 +plotTancValidation2
00519 +plotPFTauHighEfficiencyEfficienciesLeadingPion2
00520 +plotHPSEfficiencies2
00521 )
00522
00523
00524 loadAndPlotTauValidation = cms.Sequence(
00525 loadTau
00526 +plotTauValidation
00527 )
00528
00529 """
00530
00531 UTILITIES
00532
00533 """
00534
00535 class ApplyFunctionToSequence:
00536 """ Helper class that applies a given function to all modules
00537 in a sequence """
00538 def __init__(self,function):
00539 self.functor = function
00540 def enter(self, module):
00541 self.functor(module)
00542 def leave(self, module):
00543 pass
00544
00545 def TranslateToLegacyProdNames(input):
00546 input = re.sub('fixedConePFTauProducer', 'pfRecoTauProducer', input)
00547
00548 fixedDiscriminationRegex = re.compile('fixedConePFTauDiscrimination(\w*)')
00549 input = fixedDiscriminationRegex.sub(r'pfRecoTauDiscrimination\1', input)
00550 input = re.sub('shrinkingConePFTauProducer', 'pfRecoTauProducerHighEfficiency', input)
00551 shrinkingDiscriminationRegex = re.compile('shrinkingConePFTauDiscrimination(\w*)')
00552 input = shrinkingDiscriminationRegex.sub(r'pfRecoTauDiscrimination\1HighEfficiency', input)
00553 return input
00554
00555
00556 def ConvertDrawJobToLegacyCompare(input):
00557 """ Converts a draw job defined to compare 31X named PFTau validtion efficiencies
00558 to comapre a 31X to a 22X named Validation """
00559
00560 if not hasattr(input, "drawJobs"):
00561 return
00562 myDrawJobs = input.drawJobs.parameters_()
00563 for drawJobName, drawJobData in myDrawJobs.iteritems():
00564 print drawJobData
00565 if not drawJobData.plots.pythonTypeName() == "cms.PSet":
00566 continue
00567 pSetToInsert = cms.PSet(
00568 standardEfficiencyParameters,
00569 plots = cms.VPSet(
00570
00571 cms.PSet(
00572 dqmMonitorElements = drawJobData.plots.dqmMonitorElements,
00573 process = cms.string('test'),
00574 drawOptionEntry = cms.string('eff_overlay01'),
00575 legendEntry = cms.string(input.processes.test.legendEntry.value())
00576 ),
00577
00578 cms.PSet(
00579
00580 dqmMonitorElements = cms.vstring(TranslateToLegacyProdNames(drawJobData.plots.dqmMonitorElements.value()[0])),
00581 process = cms.string('reference'),
00582 drawOptionEntry = cms.string('eff_overlay02'),
00583 legendEntry = cms.string(input.processes.reference.legendEntry.value())
00584 )
00585 )
00586 )
00587 input.drawJobs.__setattr__(drawJobName, pSetToInsert)
00588
00589 def MakeLabeler(TestLabel, ReferenceLabel):
00590 def labeler(module):
00591 if hasattr(module, 'processes'):
00592 if module.processes.hasParameter(['test', 'legendEntry']) and module.processes.hasParameter([ 'reference', 'legendEntry']):
00593 module.processes.test.legendEntry = TestLabel
00594 module.processes.reference.legendEntry = ReferenceLabel
00595 print "Set test label to %s and reference label to %s for plot producer %s" % (TestLabel, ReferenceLabel, module.label())
00596 else:
00597 print "ERROR in RecoTauValidation_cfi::MakeLabeler - trying to set test/reference label but %s does not have processes.(test/reference).legendEntry parameters!" % module.label()
00598 return labeler
00599
00600 def SetYmodulesToLog(matchingNames = []):
00601 ''' set all modules whose name contains one of the matching names to log y scale'''
00602 def yLogger(module):
00603 ''' set a module to use log scaling in the yAxis'''
00604 if hasattr(module, 'drawJobs'):
00605 print "EK DEBUG"
00606 drawJobParamGetter = lambda subName : getattr(module.drawJobs, subName)
00607
00608 attrNames = dir(module.drawJobs)
00609 for subModuleName, subModule in zip(attrNames, map(drawJobParamGetter, attrNames)):
00610 matchedNames = [name for name in matchingNames if subModuleName.find( name) > -1]
00611 if len(matchingNames) == 0:
00612 matchedNames = ['take','everything','and','dont','bother']
00613 if hasattr(subModule, "yAxis") and len(matchedNames):
00614 print "Setting drawJob: ", subModuleName, " to log scale."
00615 subModule.yAxis = cms.string('fakeRate')
00616 if len(matchingNames) == 0:
00617 module.yAxes.efficiency.maxY_log = 40
00618 module.yAxes.fakeRate.maxY_log = 40
00619 return yLogger
00620
00621
00622 def SetBaseDirectory(Directory):
00623 def BaseDirectorizer(module):
00624 newPath = Directory
00625
00626 if hasattr(module, "outputFilePath"):
00627 oldPath = module.outputFilePath.value()
00628 newPath = os.path.join(newPath, oldPath)
00629 if not os.path.exists(newPath):
00630 os.makedirs(newPath)
00631 print newPath
00632 module.outputFilePath = cms.string("%s" % newPath)
00633 return BaseDirectorizer
00634
00635 def RemoveComparisonPlotCommands(module):
00636 if hasattr(module, 'drawJobs'):
00637
00638 drawJobs = module.drawJobs.parameterNames_()
00639 for drawJob in drawJobs:
00640 if drawJob != "TauIdEffStepByStep":
00641 module.drawJobs.__delattr__(drawJob)
00642 print "Removing comparison plot", drawJob
00643
00644 def SetPlotDirectory(myPlottingSequence, directory):
00645 myFunctor = ApplyFunctionToSequence(SetBaseDirectory(directory))
00646 myPlottingSequence.visit(myFunctor)
00647
00648 def SetTestAndReferenceLabels(myPlottingSequence, TestLabel, ReferenceLabel):
00649 myFunctor = ApplyFunctionToSequence(MakeLabeler(TestLabel, ReferenceLabel))
00650 myPlottingSequence.visit(myFunctor)
00651
00652 def SetCompareToLegacyProductNames(myPlottingSequence):
00653 myFunctor = ApplyFunctionToSequence(ConvertDrawJobToLegacyCompare)
00654 myPlottingSequence.visit(myFunctor)
00655
00656 def SetTestFileToPlot(myProcess, FileLoc):
00657 myProcess.loadTau.test.inputFileNames = cms.vstring(FileLoc)
00658
00659 def SetReferenceFileToPlot(myProcess, FileLoc):
00660 if FileLoc == None:
00661 del myProcess.loadTau.reference
00662 else:
00663 myProcess.loadTau.reference.inputFileNames = cms.vstring(FileLoc)
00664
00665 def SetLogScale(myPlottingSequence):
00666 myFunctor = ApplyFunctionToSequence(SetYmodulesToLog())
00667 myPlottingSequence.visit(myFunctor)
00668
00669 def SetSmartLogScale(myPlottingSequence):
00670 myFunctor = ApplyFunctionToSequence(SetYmodulesToLog(['Electron', 'Muon', 'Isolation', 'TaNC']))
00671 myPlottingSequence.visit(myFunctor)
00672
00673 def SetPlotOnlyStepByStep(myPlottingSequence):
00674 myFunctor = ApplyFunctionToSequence(RemoveComparisonPlotCommands)
00675 myPlottingSequence.visit(myFunctor)