-
Notifications
You must be signed in to change notification settings - Fork 60
Complete RunII data analysis with UHH2 branch RunII_102X_v1
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 incommon/include/Utils.h
, along with the enum classYear
. 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 inMuonIds.h/cxx
have not been checked - prefer the builtinSelector
ELECTRONS
- Might be useful: EGamma summary talk at CMS week Dec18
- Make sure 2016 uses Summer16 and 2017 uses Fall17 electronID
⚠️ Note: cutBasedElectronID without isolation is not checked!
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:
-
Ntuple instructions per branch/release
- 10_6_X, UL16/17/18
- 10_2_X, 2016/17/18
- 9_4_X, 2017
- 9_2_X, 2017
-
8_0_X, 2016
- Installing and Compiling (Run II, 80X, miniAOD v1, 80X_v1)
- Ntuple Production (Run II, 80X, MiniAODv1)
- Installing, Compiling and Ntuples (Run II, 80X, miniAOD v2, 80X_v2)
- Installing, Compiling and Ntuples (Run II, 80X, Moriond17, 80X_v3)
- Installing, Compiling and Ntuples (Run II, 80X, miniAOD v2, HOTVR & XCone reprocessing, 80X_v5)
-
Analysis info
- crab kill, follow-up tasks, duplicates
- Running failing crab jobs locally
- Checking & Reprocessing of missing ntuples
- Creating & using luminosity ROOT file in SFrame
- Finding a MINIAOD file from an ntuple event
- Luminosity & cross-section weighting information for Monte Carlo samples
- NtupleFormat
- Pileup reweighting for MC
- 2017 MC samples with buggy pileup
- Recipe for PDF uncertainties (RunII, 25ns, MiniAODv2)
- Running
- Singularity (using SL6 on EL7)
- Storing user variables in objects
- Trigger Paths & Filters; storing trigger objects
- Working with DESY Tier 2 dCache (
/pnfs
) - Tier2 UHH2 group space
- Application of Keras Neural-Network in UHH2
-
Developer tips
- (Top) Jet collections in Ntuples
- Adding a new object class to ntuples
- CMSSW vs. SFrame
- Code Conventions
- Code Overview
- Committing & Contributing Code
- Compiling and installing fastjet, fastjet contrib
- Continuous Integration
- Continuous Integration Setup Instructions
- Debugging tips
- git(hub) tutorial
- Handling different years (RunII_102_v1 10_2_X and beyond)
- Event Class
- Maintainer Responsibilities
- Metadata
- OS Acronyms
- Performance
- Porting changes across branches (cherry-picking)
- Renaming a ntuple collection
- Using an external package
- DNN/TF dev planning
-
Older ntuple instructions
-
7_6_X, 25ns, 2015
- Installing and Compiling (Run II, 25ns)
- Installing and Compiling (Run II, 25ns, miniAOD v2)
- Installing and Compiling (Run II, 76X, 25ns, miniAOD v2)
- Ntuple Production (Run II, 25ns v1 MC ONLY!)
- Ntuple Production (Run II, 25ns, MiniAODv2)
- Ntuple Production (Run II, 25ns, prompt reco D v3)
- Ntuple Production (Run II, 76X, 25ns, MiniAODv2)
- 7_4_X, 50ns, 2015
- Phys14, 2014
-
7_6_X, 25ns, 2015