Skip to content

Complete RunII data analysis with UHH2 branch RunII_102X_v1

Robin edited this page Sep 25, 2019 · 41 revisions

Analysis of 2016/2017/2018 data and MC produced with various CMSSW versions (8_0_X, 9_4_X and 10_2_X) is possible with just one CMSSW version (10_2_X). We take advantage of it and launch processing of RunII data in UHH2 format in one branch, RunII_102X_v1, for consistency and more smooth analysis of RunII dataset.

Updates in the ntuples can be found here in Object/collection updates for 10_2_X, with a summary set of slides here

Samples for processing are collected in this spreadsheet

Here we list changes should be done on analysis level:

GENERAL

  • To ensure year-specific changes are passed in correctly, you should include the the "year" in the Version parameter in your XML file, e.g.

<InputData Lumi="1" NEventsMax="-1" Type="MC" Version="TTbar_2018" Cacheable="False">

This is accessible via the central uhh2::Context object, e.g.:

bool is2017 = (ctx.get("dataset_version").find("2017") != std::string::npos);

  • Better: one can also use central enums to do this for you: see the extract_year() function in common/include/Utils.h, along with the enum class Year. This can then be used:
Year year = extract_year(ctx);
if (year != Year::is2016v2) {
  ...
} else if (year == Year::is2018) {
  ...
}
  • PU profile in 2017 samples

Some 2017 samples were produced with bug in PU profile. There was attempt to fix it and re-do some samples. Such samples contain new_pmx in the MINIOAD name. However production was stopped at some point due to higher priority of (at that time new) 2018 samples. Therefore for analysis of 2017 MC we recommend to check PU profile of each sample, especially if miniAOD does not contain "new_pmx". If one checks the parent AODSIM dataset, if it has "PU2017" in its name, the PU profile was fixed. If it does not, it will be buggy and must be explicitly checked manually.

You can use scripts/check2017SamplesPileup.py to check one or many dataset names.

JETS (not substructure)

  • Update JEC, make sure the most up to date JEC is used for 2016/2017/2018 and all are different

    • 2016 recommendation: Summer16_03Feb2017_V11
    • 2017 recommendation: Fall17_17Nov2017_V32
    • 2018 recommendation: Autumn18_V4
  • Update JetID working point. Note that working points for CHS and PUPPI are different according to JetMET recommendation

These are implemented as WP_LOOSE_CHS, WP_TIGHT_CHS, WP_LOOSE_PUPPI, WP_TIGHT_PUPPI, WP_TIGHT_LEPVETO. The switch between years is done automatically during event processing.

TOP JETS

(may be helpful: https://github.com/UHH2/UHH2/wiki/(Top)-Jet-collections-in-Ntuples)

GEN JETS

GEN TOP JETS

MET

  • Make sure all MET filters from JetMET recommendation are applied
  • Note that flag for "ECAL bad calibration filter update" as recommended in Dec.18 is stored in out ntuples as separate variables. One can access it via EcalBadCalibSelection: metfilters_selection->add<EcalBadCalibSelection>("EcalBadCalibSelection");
  • For 2016v2, the Bad Muon filter was rerun, and stored as Extra_BadPFMuonFilter trigger flag. The Bad Charged Candidate is not currently recommended.
  • ✅ MET filters in CommonModules has been updated for the various years

MUONS

  • ⚠️ IDs in MuonIds.h/cxx have not been checked - prefer the builtin Selector

ELECTRONS

TRIGGER

  • Add UHH2 module to do L1Prefiring weights a la the main recipe so we can reapply them if necessary (only if we store photons. unlikely weights will change)
  • Information about trigger configuration collected here: https://github.com/UHH2/TriggerPaths/
  • Few tables listing all triggers with luminosity close to year luminosity.

For 2016 and 2018 difference between "recorded lumi" and total luminosity is required to be below 5%. Here is the list you will get after such requirement:

2016: http://www.desy.de/~karavdia/unprescaled_HLT_RunII/unprescaled_HLT_paths_2016.html

2018: http://www.desy.de/~karavdia/unprescaled_HLT_RunII/unprescaled_HLT_paths_2018.html

In 2017 many HLT paths were missing in the beginning of data taking (Run2017B, which account for 12% of total luminosity collected in 2017). Therefore all paths with at least 80% of 2017 luminosity are collected in the 2017 list: http://www.desy.de/~karavdia/unprescaled_HLT_RunII/unprescaled_HLT_paths_2017.html

You can also see difference in respect to BCDEF and CDEF luminosity in the table. If difference is above few % in each case, this path most probably was not 100% active or was prescaled during data taking.

GEN PARTICLES

HOTVR/XCONE (RECO and GEN) JETS

TAUS

  • Taus are removed, clean your config files. If you want/plan to use them, speak up asap

PF CANDIDATES

  • For samples with PFParticles, they are all without PUPPI weights applied. If you need the equivalent PUPPI particle, you need to multiply the 4-vector by the stored PUPPI weight:
p.v4() * p.puppiWeight()

GEN/EVENT INFO

PHOTONS

PAG recommendation pages for reference:

Clone this wiki locally