From 8091beec6e9fef49ea7ac9d8d87566b3f88c4d39 Mon Sep 17 00:00:00 2001
From: "Ming-Yan, Lee"
Date: Tue, 16 May 2023 12:34:54 +0200
Subject: [PATCH] feat : add full run2 campaign config & several fixes on SFs
(#18)
* feat : add full run2 camapign & several fixes on SFs
- runner: add test option(run iterative with 1 file, 1 chunk)
- runner: add begin/ stop for splited file case
- config: add full run2 config example from Hc analysis
- example: add example workflow (test_wf) with config/example.py wrapped latest corrections & systematics implementation
- scripts: update fetch.py script (avoid merge data into one dict) & put error for empty list
- data: add run3 files back
- utils: add JEC shifts, rochester muon correction ttbar pT reweighting, pileup SFs
- utils: make SFs reader capable for more than 1 object
- utils: update collated scripts
- helper: add xsection for H+c
=============old commits==================
# This is a combination of 2 commits.
* fix: previous fixes
- plot: add additional cross-section rescaler for sample set, add mergemap for comparison script
- plot : fixes from Andrey in #16
- utils: add cross section template
- utils: trying to fix the plotting scripts
- utils: setup debug mode for plotting script
* Development from BTV
- minor fixes for runner.py and comparison.py; add JERC to MET propagation (#39)
- patch for the daskoutput name (#40)
- update plotting scripts and add track variables (#41)
- fix setup.cfg for CI pipelines (#42)
- MC merging in plotting scripts and move to PuppiMET (#43)
- plotting style improvements; future warnings in runner.py (#45)
- re-added worker port condition for lxplus; bug for xlabel in comparison.py (#48)
- updated 13 TeV single top and ttbar cross sections (#49)
- correctionlib(jsonpog-integration) implementation & fixes on actions (#50)
* feat: add array output to root files
---------
Co-authored-by: Andrey Pozdnyakov
---
.github/workflows/plotting_test.yml | 15 +-
.gitignore | 2 +-
README.md | 208 +-
WQ_test.yml | 16 -
config/HWW2l2nu.py | 98 -
config/HWW2l2nu_split.py | 104 -
config/Hc_HWW2l2nu/MC_UL16_post.py | 168 ++
config/Hc_HWW2l2nu/MC_UL16_pre.py | 171 ++
config/Hc_HWW2l2nu/MC_UL17.py | 167 ++
config/Hc_HWW2l2nu/MC_UL18.py | 167 ++
config/Hc_HWW2l2nu/data_UL16_post.py | 163 ++
config/Hc_HWW2l2nu/data_UL16_pre.py | 165 ++
config/Hc_HWW2l2nu/data_UL17.py | 173 ++
config/Hc_HWW2l2nu/data_UL18.py | 162 ++
config/example.py | 68 +-
filefetcher/fetch.py | 14 +-
metadata/nano_UL17_test.json | 8 +
metadata/test.json | 12 -
metadata/ttbar_UL17.json | 5 +
runner_wconfig.py | 26 +-
.../JME/2016postVFP_UL/jec_compiled.pkl.gz | Bin 246925 -> 244897 bytes
.../JME/2016preVFP_UL/jec_compiled.pkl.gz | Bin 433937 -> 430072 bytes
.../data/JME/2017_UL/compile_jec.pkl.gz | Bin 334209 -> 0 bytes
.../data/JME/2017_UL/jec_compiled.pkl.gz | Bin 1345408 -> 1334723 bytes
.../data/JME/2018_UL/compile_jec.pkl.gz | Bin 38335 -> 0 bytes
.../data/JME/2018_UL/jec_compiled.pkl.gz | Bin 854133 -> 847389 bytes
..._RunC_V2_DATA_L1FastJet_AK4PFPuppi.jec.txt | 2 +
...nC_V2_DATA_L2L3Residual_AK4PFPuppi.jec.txt | 37 +
...RunC_V2_DATA_L2Relative_AK4PFPuppi.jec.txt | 83 +
...RunC_V2_DATA_L3Absolute_AK4PFPuppi.jec.txt | 2 +
..._RunD_V2_DATA_L1FastJet_AK4PFPuppi.jec.txt | 2 +
...nD_V2_DATA_L2L3Residual_AK4PFPuppi.jec.txt | 37 +
...RunD_V2_DATA_L2Relative_AK4PFPuppi.jec.txt | 83 +
...RunD_V2_DATA_L2Residual_AK4PFPuppi.jec.txt | 37 +
...RunD_V2_DATA_L3Absolute_AK4PFPuppi.jec.txt | 2 +
...nD_V2_DATA_Uncertainty_AK4PFPuppi.junc.txt | 41 +
...2Run3_V1_MC_PtResolution_AK4PFPuppi.jr.txt | 229 ++
...Winter22Run3_V1_MC_SF_AK4PFPuppi.jersf.txt | 277 +++
...r22Run3_V2_MC_L1FastJet_AK4PFPuppi.jec.txt | 2 +
...22Run3_V2_MC_L2Relative_AK4PFPuppi.jec.txt | 83 +
...22Run3_V2_MC_L2Residual_AK4PFPuppi.jec.txt | 2 +
...22Run3_V2_MC_L3Absolute_AK4PFPuppi.jec.txt | 2 +
..._MC_UncertaintySources_AK4PFPuppi.junc.txt | 2185 +++++++++++++++++
...Run3_V2_MC_Uncertainty_AK4PFPuppi.junc.txt | 41 +
.../data/JME/Winter22Run3/__init__.py | 0
.../pileup_Data_Run3_2022_ERA_CDv2.root | Bin 0 -> 5264 bytes
...ter22_Run3_2022_LHC_Simulation_10h_2h.root | Bin 0 -> 4785 bytes
...t_Collisions2022_355100_357900_Golden.json | 189 ++
src/BTVNanoCommissioning/helpers/func.py | 70 +-
src/BTVNanoCommissioning/helpers/xsection.py | 47 +-
.../utils/Configurator.py | 1 +
src/BTVNanoCommissioning/utils/correction.py | 958 +++++---
src/BTVNanoCommissioning/utils/plot_utils.py | 159 +-
src/BTVNanoCommissioning/utils/xs_scaler.py | 36 +-
test_wf.py | 143 +-
testfile/btv_compare.yml | 1 +
testfile/btv_datamc.yml | 6 +-
57 files changed, 6003 insertions(+), 666 deletions(-)
delete mode 100644 WQ_test.yml
delete mode 100644 config/HWW2l2nu.py
delete mode 100644 config/HWW2l2nu_split.py
create mode 100644 config/Hc_HWW2l2nu/MC_UL16_post.py
create mode 100644 config/Hc_HWW2l2nu/MC_UL16_pre.py
create mode 100644 config/Hc_HWW2l2nu/MC_UL17.py
create mode 100644 config/Hc_HWW2l2nu/MC_UL18.py
create mode 100644 config/Hc_HWW2l2nu/data_UL16_post.py
create mode 100644 config/Hc_HWW2l2nu/data_UL16_pre.py
create mode 100644 config/Hc_HWW2l2nu/data_UL17.py
create mode 100644 config/Hc_HWW2l2nu/data_UL18.py
create mode 100644 metadata/nano_UL17_test.json
delete mode 100644 metadata/test.json
create mode 100644 metadata/ttbar_UL17.json
delete mode 100644 src/BTVNanoCommissioning/data/JME/2017_UL/compile_jec.pkl.gz
delete mode 100644 src/BTVNanoCommissioning/data/JME/2018_UL/compile_jec.pkl.gz
create mode 100644 src/BTVNanoCommissioning/data/JME/Winter22Run3/Winter22Run3_RunC_V2_DATA_L1FastJet_AK4PFPuppi.jec.txt
create mode 100644 src/BTVNanoCommissioning/data/JME/Winter22Run3/Winter22Run3_RunC_V2_DATA_L2L3Residual_AK4PFPuppi.jec.txt
create mode 100644 src/BTVNanoCommissioning/data/JME/Winter22Run3/Winter22Run3_RunC_V2_DATA_L2Relative_AK4PFPuppi.jec.txt
create mode 100644 src/BTVNanoCommissioning/data/JME/Winter22Run3/Winter22Run3_RunC_V2_DATA_L3Absolute_AK4PFPuppi.jec.txt
create mode 100644 src/BTVNanoCommissioning/data/JME/Winter22Run3/Winter22Run3_RunD_V2_DATA_L1FastJet_AK4PFPuppi.jec.txt
create mode 100644 src/BTVNanoCommissioning/data/JME/Winter22Run3/Winter22Run3_RunD_V2_DATA_L2L3Residual_AK4PFPuppi.jec.txt
create mode 100644 src/BTVNanoCommissioning/data/JME/Winter22Run3/Winter22Run3_RunD_V2_DATA_L2Relative_AK4PFPuppi.jec.txt
create mode 100644 src/BTVNanoCommissioning/data/JME/Winter22Run3/Winter22Run3_RunD_V2_DATA_L2Residual_AK4PFPuppi.jec.txt
create mode 100644 src/BTVNanoCommissioning/data/JME/Winter22Run3/Winter22Run3_RunD_V2_DATA_L3Absolute_AK4PFPuppi.jec.txt
create mode 100644 src/BTVNanoCommissioning/data/JME/Winter22Run3/Winter22Run3_RunD_V2_DATA_Uncertainty_AK4PFPuppi.junc.txt
create mode 100644 src/BTVNanoCommissioning/data/JME/Winter22Run3/Winter22Run3_V1_MC_PtResolution_AK4PFPuppi.jr.txt
create mode 100644 src/BTVNanoCommissioning/data/JME/Winter22Run3/Winter22Run3_V1_MC_SF_AK4PFPuppi.jersf.txt
create mode 100644 src/BTVNanoCommissioning/data/JME/Winter22Run3/Winter22Run3_V2_MC_L1FastJet_AK4PFPuppi.jec.txt
create mode 100644 src/BTVNanoCommissioning/data/JME/Winter22Run3/Winter22Run3_V2_MC_L2Relative_AK4PFPuppi.jec.txt
create mode 100644 src/BTVNanoCommissioning/data/JME/Winter22Run3/Winter22Run3_V2_MC_L2Residual_AK4PFPuppi.jec.txt
create mode 100644 src/BTVNanoCommissioning/data/JME/Winter22Run3/Winter22Run3_V2_MC_L3Absolute_AK4PFPuppi.jec.txt
create mode 100644 src/BTVNanoCommissioning/data/JME/Winter22Run3/Winter22Run3_V2_MC_UncertaintySources_AK4PFPuppi.junc.txt
create mode 100644 src/BTVNanoCommissioning/data/JME/Winter22Run3/Winter22Run3_V2_MC_Uncertainty_AK4PFPuppi.junc.txt
create mode 100644 src/BTVNanoCommissioning/data/JME/Winter22Run3/__init__.py
create mode 100644 src/BTVNanoCommissioning/data/PU/Winter22Run3/pileup_Data_Run3_2022_ERA_CDv2.root
create mode 100644 src/BTVNanoCommissioning/data/PU/Winter22Run3/pileup_DistrWinter22_Run3_2022_LHC_Simulation_10h_2h.root
create mode 100644 src/BTVNanoCommissioning/data/lumiMasks/Cert_Collisions2022_355100_357900_Golden.json
diff --git a/.github/workflows/plotting_test.yml b/.github/workflows/plotting_test.yml
index 6d6d6a6c..c5663b2e 100644
--- a/.github/workflows/plotting_test.yml
+++ b/.github/workflows/plotting_test.yml
@@ -1,4 +1,4 @@
-name: Test plotter
+name: plotting script test
on:
push:
branches: [ master ]
@@ -13,17 +13,13 @@ jobs:
strategy:
max-parallel: 4
matrix:
- python-version: ["3.10"]
+ python-version: ["3.8", "3.9", "3.10"]
defaults:
run:
shell: "bash -l {0}"
steps:
- - uses: actions/checkout@v2
- - uses: cvmfs-contrib/github-action-cvmfs@v2
- with:
- cvmfs_repositories: 'grid.cern.ch'
- name: Set conda environment
uses: conda-incubator/setup-miniconda@v2
@@ -42,16 +38,15 @@ jobs:
conda info
conda env list
conda list
-
+
+
- name: Install Repo
run: |
pip install -e .
-
+
- name: data/MC plotter
run: |
python plotting/plotdataMC.py --cfg testfile/btv_datamc.yml
-
- name: comparison plotter
run: |
python plotting/comparison.py --cfg testfile/btv_comapre.yml
-
diff --git a/.gitignore b/.gitignore
index 92da352b..9e682733 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,7 +5,7 @@
.ipynb_checkpoints/
\#*
configurator.pkl
-
+*/configurator.py
runinfo/
plot/
plotting/plot/
diff --git a/README.md b/README.md
index 628125c4..99154183 100644
--- a/README.md
+++ b/README.md
@@ -13,7 +13,9 @@ Generalized framework columnar-based analysis with [coffea](https://coffeateam.g
:heavy_exclamation_mark: Install under `bash` environment
-Clone repository from git
+```
+# only first time, including submodules
+git clone --recursive git@github.com:cms-btv-pog/BTVNanoCommissioning.git
```bash
# only first time
@@ -68,7 +70,47 @@ voms-proxy-init --voms cms --vomses ~/.grid-security/vomses
Use the `./filefetcher/fetch.py` script:
```
+<<<<<<< HEAD
python filefetcher/fetch.py --input filefetcher/input_DAS_list.txt --output output_name.json
+=======
+--wf {validation,ttcom,ttdilep_sf,ttsemilep_sf,emctag_ttdilep_sf,ctag_ttdilep_sf,ectag_ttdilep_sf,ctag_ttsemilep_sf,ectag_ttsemilep_sf,ctag_Wc_sf,ectag_Wc_sf,ctag_DY_sf,ectag_DY_sf}, --workflow {validation,ttcom,ttdilep_sf,ttsemilep_sf,emctag_ttdilep_sf,ctag_ttdilep_sf,ectag_ttdilep_sf,ctag_ttsemilep_sf,ectag_ttsemilep_sf,ctag_Wc_sf,ectag_Wc_sf,ctag_DY_sf,ectag_DY_sf}
+ Which processor to run
+ -o OUTPUT, --output OUTPUT
+ Output histogram filename (default: hists.coffea)
+ --samples SAMPLEJSON, --json SAMPLEJSON
+ JSON file containing dataset and file locations
+ (default: dummy_samples.json)
+ --year YEAR Year
+ --campaign CAMPAIGN Dataset campaign, change the corresponding correction
+ files{ "Rereco17_94X","Winter22Run3","2018_UL","2017_UL","2016preVFP_UL","2016postVFP_UL"}
+ --isCorr Run with SFs
+ --isJERC JER/JEC implemented to jet
+ --isSyst Run with systematics for SF
+ --executor {iterative,futures,parsl/slurm,parsl/condor,parsl/condor/naf_lite,dask/condor,dask/slurm,dask/lpc,dask/lxplus,dask/casa}
+ The type of executor to use (default: futures).
+ -j WORKERS, --workers WORKERS
+ Number of workers (cores/threads) to use for multi- worker executors (e.g. futures or condor) (default:
+ 3)
+ -s SCALEOUT, --scaleout SCALEOUT
+ Number of nodes to scale out to if using slurm/condor.
+ Total number of concurrent threads is ``workers x
+ scaleout`` (default: 6)
+ --memory MEMORY Memory used in jobs (in GB) ``(default: 4GB)
+ --disk DISK Disk used in jobs ``(default: 4GB)
+ --voms VOMS Path to voms proxy, made accessible to worker nodes.
+ By default a copy will be made to $HOME.
+ --chunk N Number of events per process chunk
+ --retries N Number of retries for coffea processor
+ --index INDEX (Specific for dask/lxplus file splitting, default:0,0)
+ Format: $dictindex,$fileindex. $dictindex refers to the index of the file list split to 50 files per dask-worker.
+ The job will start submission from the corresponding indices
+ --validate Do not process, just check all files are accessible
+ --skipbadfiles Skip bad files.
+ --only ONLY Only process specific dataset or file
+ --limit N Limit to the first N files of each dataset in sample
+ JSON
+ --max N Max number of chunks to run in total
+>>>>>>> ca74d50... feat: correctionlib(jsonpog-integration) implementation & fixes on actions (#50)
```
where the `input_DAS_list.txt` is a simple file with a list of dataset names extract from DAS (you need to create it yourself for the samples you want to run over), and output json file in creted in `./metadata` directory.
@@ -361,25 +403,119 @@ memray run --live runner.py --cfg config/example.py
```
### Plotting code
+All the `lumiMask`, correction files (SFs, pileup weight), and JEC, JER files are under `BTVNanoCommissioning/src/data/` following the substructure `${type}/${campaign}/${files}`(except `lumiMasks` and `Prescales`)
+<<<<<<< HEAD
Produce data/MC comparison, shape comparison plots from `.coffea` files, load configuration (`yaml`) files, brief [intro](https://docs.fileformat.com/programming/yaml/) of yaml.
+=======
+## Correction files configurations
+:heavy_exclamation_mark: If the correction files are not supported yet by jsonpog-integration, you can still try with custom input data.
+
+### Options with custom input data
+>>>>>>> ca74d50... feat: correctionlib(jsonpog-integration) implementation & fixes on actions (#50)
-Details of yaml file format would summarized in table below. The **required** info are marked as bold style.
+Details of yaml file format would summarized in table below. Information used in data/MC script would marked with () and comparsion script with (). The **required** info are marked as bold style.
-You can find test file set(`.coffea` and `.yaml`) in `testfile/`. Specify `--debug` to get more info for yaml format.
+
+Take `Rereco17_94X` as an example.
+
```
python plotting/plotdataMC.py --cfg testfile/btv_datamc.yml (--debug)
python plotting/comparison.py --cfg testfile/btv_compare.yml (--debug)
```
+
+
+
+### Use central maintained jsonpog-integration
+The official correction files collected in [jsonpog-integration](https://gitlab.cern.ch/cms-nanoAOD/jsonpog-integration) is updated by POG except `lumiMask` and `JME` still updated by maintainer. No longer to request input files in the `correction_config`.
+
+<<<<<<< HEAD
+See the example with `2017_UL`.
+=======
+
+Take `Rereco17_94X` as an example.
+>>>>>>> ca74d50... feat: correctionlib(jsonpog-integration) implementation & fixes on actions (#50)
+
+
+```python
+ "2017_UL": {
+ # Same with custom config
+ "lumiMask": "Cert_294927-306462_13TeV_UL2017_Collisions17_MuonJSON.txt",
+ "JME": "jec_compiled.pkl.gz",
+ # no config need to be specify for PU weights
+ "PU": None,
+ # Btag SFs - specify $TAGGER : $TYPE-> find [$TAGGER_$TYPE] in json file
+ "BTV": {"deepCSV": "shape", "deepJet": "shape"},
+
+ "LSF": {
+ # Electron SF - Following the scheme: "${SF_name} ${year}": "${WP}"
+ # https://github.com/cms-egamma/cms-egamma-docs/blob/master/docs/EgammaSFJSON.md
+ "ele_ID 2017": "wp90iso",
+ "ele_Reco 2017": "RecoAbove20",
+
+ # Muon SF - Following the scheme: "${SF_name} ${year}": "${WP}"
+ # WPs : ['NUM_GlobalMuons_DEN_genTracks', 'NUM_HighPtID_DEN_TrackerMuons', 'NUM_HighPtID_DEN_genTracks', 'NUM_IsoMu27_DEN_CutBasedIdTight_and_PFIsoTight', 'NUM_LooseID_DEN_TrackerMuons', 'NUM_LooseID_DEN_genTracks', 'NUM_LooseRelIso_DEN_LooseID', 'NUM_LooseRelIso_DEN_MediumID', 'NUM_LooseRelIso_DEN_MediumPromptID', 'NUM_LooseRelIso_DEN_TightIDandIPCut', 'NUM_LooseRelTkIso_DEN_HighPtIDandIPCut', 'NUM_LooseRelTkIso_DEN_TrkHighPtIDandIPCut', 'NUM_MediumID_DEN_TrackerMuons', 'NUM_MediumID_DEN_genTracks', 'NUM_MediumPromptID_DEN_TrackerMuons', 'NUM_MediumPromptID_DEN_genTracks', 'NUM_Mu50_or_OldMu100_or_TkMu100_DEN_CutBasedIdGlobalHighPt_and_TkIsoLoose', 'NUM_SoftID_DEN_TrackerMuons', 'NUM_SoftID_DEN_genTracks', 'NUM_TightID_DEN_TrackerMuons', 'NUM_TightID_DEN_genTracks', 'NUM_TightRelIso_DEN_MediumID', 'NUM_TightRelIso_DEN_MediumPromptID', 'NUM_TightRelIso_DEN_TightIDandIPCut', 'NUM_TightRelTkIso_DEN_HighPtIDandIPCut', 'NUM_TightRelTkIso_DEN_TrkHighPtIDandIPCut', 'NUM_TrackerMuons_DEN_genTracks', 'NUM_TrkHighPtID_DEN_TrackerMuons', 'NUM_TrkHighPtID_DEN_genTracks']
+
+ "mu_Reco 2017_UL": "NUM_TrackerMuons_DEN_genTracks",
+ "mu_HLT 2017_UL": "NUM_IsoMu27_DEN_CutBasedIdTight_and_PFIsoTight",
+ "mu_ID 2017_UL": "NUM_TightID_DEN_TrackerMuons",
+ "mu_Iso 2017_UL": "NUM_TightRelIso_DEN_TightIDandIPCut",
+ },
+ },
+```
+
+
+
+
+<<<<<<< HEAD
+=======
+### Use central maintained jsonpog-integration
+The official correction files collected in [jsonpog-integration](https://gitlab.cern.ch/cms-nanoAOD/jsonpog-integration) is updated by POG except `lumiMask` and `JME` still updated by maintainer. No longer to request input files in the `correction_config`.
+
+See the example with `2017_UL`.
+
+
+```python
+ "2017_UL": {
+ # Same with custom config
+ "lumiMask": "Cert_294927-306462_13TeV_UL2017_Collisions17_MuonJSON.txt",
+ "JME": "jec_compiled.pkl.gz",
+ # no config need to be specify for PU weights
+ "PU": None,
+ # Btag SFs - specify $TAGGER : $TYPE-> find [$TAGGER_$TYPE] in json file
+ "BTV": {"deepCSV": "shape", "deepJet": "shape"},
+
+ "LSF": {
+ # Electron SF - Following the scheme: "${SF_name} ${year}": "${WP}"
+ # https://github.com/cms-egamma/cms-egamma-docs/blob/master/docs/EgammaSFJSON.md
+ "ele_ID 2017": "wp90iso",
+ "ele_Reco 2017": "RecoAbove20",
+
+ # Muon SF - Following the scheme: "${SF_name} ${year}": "${WP}"
+ # WPs : ['NUM_GlobalMuons_DEN_genTracks', 'NUM_HighPtID_DEN_TrackerMuons', 'NUM_HighPtID_DEN_genTracks', 'NUM_IsoMu27_DEN_CutBasedIdTight_and_PFIsoTight', 'NUM_LooseID_DEN_TrackerMuons', 'NUM_LooseID_DEN_genTracks', 'NUM_LooseRelIso_DEN_LooseID', 'NUM_LooseRelIso_DEN_MediumID', 'NUM_LooseRelIso_DEN_MediumPromptID', 'NUM_LooseRelIso_DEN_TightIDandIPCut', 'NUM_LooseRelTkIso_DEN_HighPtIDandIPCut', 'NUM_LooseRelTkIso_DEN_TrkHighPtIDandIPCut', 'NUM_MediumID_DEN_TrackerMuons', 'NUM_MediumID_DEN_genTracks', 'NUM_MediumPromptID_DEN_TrackerMuons', 'NUM_MediumPromptID_DEN_genTracks', 'NUM_Mu50_or_OldMu100_or_TkMu100_DEN_CutBasedIdGlobalHighPt_and_TkIsoLoose', 'NUM_SoftID_DEN_TrackerMuons', 'NUM_SoftID_DEN_genTracks', 'NUM_TightID_DEN_TrackerMuons', 'NUM_TightID_DEN_genTracks', 'NUM_TightRelIso_DEN_MediumID', 'NUM_TightRelIso_DEN_MediumPromptID', 'NUM_TightRelIso_DEN_TightIDandIPCut', 'NUM_TightRelTkIso_DEN_HighPtIDandIPCut', 'NUM_TightRelTkIso_DEN_TrkHighPtIDandIPCut', 'NUM_TrackerMuons_DEN_genTracks', 'NUM_TrkHighPtID_DEN_TrackerMuons', 'NUM_TrkHighPtID_DEN_genTracks']
+
+ "mu_Reco 2017_UL": "NUM_TrackerMuons_DEN_genTracks",
+ "mu_HLT 2017_UL": "NUM_IsoMu27_DEN_CutBasedIdTight_and_PFIsoTight",
+ "mu_ID 2017_UL": "NUM_TightID_DEN_TrackerMuons",
+ "mu_Iso 2017_UL": "NUM_TightRelIso_DEN_TightIDandIPCut",
+ },
+ },
+```
+
+
+
+
+>>>>>>> ca74d50... feat: correctionlib(jsonpog-integration) implementation & fixes on actions (#50)
+## Create compiled JERC file(`pkl.gz`)
| Parameter name | Allowed values | Description
| :-----: | :---: | :-----------------------------
| **input**(Required)| `list` or `str`
(wildcard options `*` accepted)| input `.coffea` files|
| **output** (Required)| `str` | output directory of plots with date|
| **mergemap**(Required)| `dict` | collect sample names, (color, label) setting for file set. details in [map diction](#dict-of-merge-maps-and-comparison-file-lists)|
-| **reference** & **compare** (Required) | `dict`| specify the class only for comparison plots |
+| **reference** & **compare** (Required) | `dict`| specify the class for comparison plots |
| **variable**(Required) | `dict` | variables to plot, see [variables section](#variables)|
|com| `str` | √s , default set to be 13TeV|
|inbox_text| `str` | text put in `AnchoredText`|
@@ -404,6 +540,7 @@ In `comparison.py` config file (`testfile/btv_compare.yaml`), color and label n
Code snipped
+<<<<<<< HEAD
```yaml
## plodataMC.py
mergemap:
@@ -440,12 +577,46 @@ compare:
+=======
+:new: non-uniform rebinning is possible, specify the bins with list of edges `--autorebin 50,80,81,82,83,100.5`
+
+```
+python plotdataMC.py -i a.coffea,b.coffea --lumi 41500 -p dilep_sf -v z_mass,z_pt
+python plotdataMC.py -i "test*.coffea" --lumi 41500 -p dilep_sf -v z_mass,z_pt
+
+options:
+ -h, --help show this help message and exit
+ --lumi LUMI luminosity in /pb
+ --com COM sqrt(s) in TeV
+ -p {dilep_sf,ttsemilep_sf,ctag_Wc_sf,ctag_DY_sf,ctag_ttsemilep_sf,ctag_ttdilep_sf}, --phase {dilep_sf,ttsemilep_sf,ctag_Wc_sf,ctag_DY_sf,ctag_ttsemilep_sf,ctag_ttdilep_sf}
+ which phase space
+ --log LOG log on y axis
+ --norm NORM Use for reshape SF, scale to same yield as no SFs case
+ -v VARIABLE, --variable VARIABLE
+ variables to plot, splitted by ,. Wildcard option * available as well. Specifying `all` will run through all variables.
+ --SF make w/, w/o SF comparisons
+ --ext EXT prefix name
+ -i INPUT, --input INPUT
+ input coffea files (str), splitted different files with ','. Wildcard option * available as well.
+ --autorebin AUTOREBIN
+ Rebin the plotting variables, input `int` or `list`. int: merge N bins. list of number: rebin edges(non-uniform bin is possible)
+ --xlabel XLABEL rename the label for x-axis
+ --ylabel YLABEL rename the label for y-axis
+ --splitOSSS SPLITOSSS
+ Only for W+c phase space, split opposite sign(1) and same sign events(-1), if not specified, the combined OS-SS phase space is used
+ --xrange XRANGE custom x-range, --xrange xmin,xmax
+ --flow FLOW
+ str, optional {None, 'show', 'sum'} Whether plot the under/overflow bin. If 'show', add additional under/overflow bin. If 'sum', add the under/overflow bin content to first/last bin.
+```
+- data/data, MC/MC comparisons
+>>>>>>> ca74d50... feat: correctionlib(jsonpog-integration) implementation & fixes on actions (#50)
#### Variables
Common definitions for both usage, use default settings if leave empty value for the keys.
:bangbang: `blind` option is only used in the data/MC comparison plots to blind particular observable like BDT score.
+<<<<<<< HEAD
|Option| Default |
|:-----: |:---: |
| `xlabel` | take name of `key` |
@@ -492,6 +663,35 @@ Common definitions for both usage, use default settings if leave empty value for
all:
rebin: 2
```
+=======
+options:
+ -h, --help show this help message and exit
+ -p {dilep_sf,ttsemilep_sf,ctag_Wc_sf,ctag_DY_sf,ctag_ttsemilep_sf,ctag_ttdilep_sf}, --phase {dilep_sf,ttsemilep_sf,ctag_Wc_sf,ctag_DY_sf,ctag_ttsemilep_sf,ctag_ttdilep_sf}
+ which phase space
+ -i INPUT, --input INPUT
+ input coffea files (str), splitted different files with ','. Wildcard option * available as well.
+ -r REF, --ref REF referance dataset
+ -c COMPARED, --compared COMPARED
+ compared datasets, splitted by ,
+ --sepflav SEPFLAV seperate flavour(b/c/light)
+ --log log on y axis
+ -v VARIABLE, --variable VARIABLE
+ variables to plot, splitted by ,. Wildcard option * available as well. Specifying `all` will run through all variables.
+ --ext EXT prefix name
+ --com COM sqrt(s) in TeV
+ --shortref SHORTREF short name for reference dataset for legend
+ --shortcomp SHORTCOMP
+ short names for compared datasets for legend, split by ','
+ --autorebin AUTOREBIN
+ Rebin the plotting variables, input `int` or `list`. int: merge N bins. list of number: rebin edges(non-uniform bin is possible)
+ --xlabel XLABEL rename the label for x-axis
+ --ylabel YLABEL rename the label for y-axis
+ --norm compare shape, normalized yield to reference
+ --xrange XRANGE custom x-range, --xrange xmin,xmax
+ --flow FLOW
+ str, optional {None, 'show', 'sum'} Whether plot the under/overflow bin. If 'show', add additional under/overflow bin. If 'sum', add the under/overflow bin content to first/last bin.
+```
+>>>>>>> ca74d50... feat: correctionlib(jsonpog-integration) implementation & fixes on actions (#50)
diff --git a/WQ_test.yml b/WQ_test.yml
deleted file mode 100644
index 73b4ac05..00000000
--- a/WQ_test.yml
+++ /dev/null
@@ -1,16 +0,0 @@
-name: CoffeaRunner_WQ
-channels:
- - conda-forge
- - defaults
-dependencies:
- - python=3.9
- - ndcctools
- - conda
- - coffea
- - voms
- - ca-policy-lcg
- - ca-certificates
- - xrootd
- - openssl
- - fsspec[version='>=0.3.3']
- - psutil
diff --git a/config/HWW2l2nu.py b/config/HWW2l2nu.py
deleted file mode 100644
index 19fe64f3..00000000
--- a/config/HWW2l2nu.py
+++ /dev/null
@@ -1,98 +0,0 @@
-from Hpluscharm.workflows import workflows as hplusc_wf
-
-cfg = {
- "dataset": {
- "jsons": [
- # "src/Hpluscharm/input_json/higgs_UL17.json",
- # "src/Hpluscharm/input_json/signal_UL17.json",
- # "src/Hpluscharm/input_json/mcbkg_UL17.json"
- "src/Hpluscharm/input_json/st_local.json"
- ],
- "campaign": "UL17",
- "year": "2017",
- "filter": {
- "samples": [
- # "TTTo2L2Nu_TuneCP5_13TeV-powheg-pythia8",
- # "TTToSemiLeptonic_TuneCP5_13TeV-powheg-pythia8",
- "ST_t-channel_antitop_4f_InclusiveDecays_TuneCP5_13TeV-powheg-madspin-pythia8",
- # "ST_t-channel_top_4f_InclusiveDecays_TuneCP5_13TeV-powheg-madspin-pythia8",
- # "DYJetsToLL_M-10to50_TuneCP5_13TeV-madgraphMLM-pythia8",
- # "DYJetsToLL_M-50_TuneCP5_13TeV-amcatnloFXFX-pythia8"
- ]
- }
- # "samples_exclude" : ["gchcWW2L2Nu_4f"]
- # }
- },
- # Input and output files
- "workflow": hplusc_wf["HWWtest"],
- "output": "st1_array",
- "run_options": {
- "executor": "parsl/condor/naf_lite",
- "workers": 4,
- "scaleout": 300,
- "walltime": "03:00:00",
- "mem_per_worker": 2, # GB
- "chunk": 50000,
- "max": None,
- "skipbadfiles": True,
- "retries": 20,
- "voms": None,
- "splitjobs": True,
- # "limit": 1,
- },
- ## selections
- "categories": {"cats": [], "cats2": []},
- "preselections": {
- "mu1hlt": ["IsoMu27"],
- "mu2hlt": [
- "Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_Mass3p8",
- "Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_Mass8",
- ],
- "e1hlt": ["Ele35_WPTight_Gsf"],
- "e2hlt": ["Ele23_Ele12_CaloIdL_TrackIdL_IsoVL"],
- "emuhlt": [
- "Mu23_TrkIsoVVL_Ele12_CaloIdL_TrackIdL_IsoVL",
- "Mu12_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL",
- "Mu12_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ",
- "Mu23_TrkIsoVVL_Ele12_CaloIdL_TrackIdL_IsoVL_DZ",
- ],
- },
- ## weights
- "weights": {
- "common": {
- "inclusive": {
- "lumiMask": "Cert_294927-306462_13TeV_UL2017_Collisions17_GoldenJSON.txt",
- "PU": "puweight_UL17.histo.root",
- "JME": "mc_compile_jec.pkl.gz",
- "BTV": {
- "DeepJetC": "DeepJet_ctagSF_Summer20UL17_interp.root",
- },
- "LSF": {
- # "ele_Trig TrigSF": "Ele32_L1DoubleEG_TrigSF_vhcc.histo.root",
- "ele_Rereco_above20 EGamma_SF2D": "egammaEffi_ptAbove20.txt_EGM2D_UL2017.histo.root",
- "ele_Rereco_below20 EGamma_SF2D": "egammaEffi_ptBelow20.txt_EGM2D_UL2017.histo.root",
- "ele_ID EGamma_SF2D": "egammaEffi.txt_EGM2D_MVA90iso_UL17.histo.root",
- "mu_ID NUM_TightID_DEN_TrackerMuons_abseta_pt": "Efficiencies_muon_generalTracks_Z_Run2017_UL_ID.histo.root",
- "mu_Iso NUM_TightRelIso_DEN_TightIDandIPCut_abseta_pt": "Efficiencies_muon_generalTracks_Z_Run2017_UL_ISO.histo.root",
- "ele_Rereco_above20_error EGamma_SF2D_error": "egammaEffi_ptAbove20.txt_EGM2D_UL2017.histo.root",
- "ele_Rereco_below20_error EGamma_SF2D_error": "egammaEffi_ptBelow20.txt_EGM2D_UL2017.histo.root",
- "ele_ID_error EGamma_SF2D_error": "egammaEffi.txt_EGM2D_MVA90iso_UL17.histo.root",
- "mu_ID_error NUM_TightID_DEN_TrackerMuons_abseta_pt_error": "Efficiencies_muon_generalTracks_Z_Run2017_UL_ID.histo.root",
- "mu_Iso_error NUM_TightRelIso_DEN_TightIDandIPCut_abseta_pt_error": "Efficiencies_muon_generalTracks_Z_Run2017_UL_ISO.histo.root",
- },
- },
- },
- },
- ## user specific
- "userconfig": {
- "systematics": {
- "JERC": False,
- "weights": False,
- },
- "export_array": True,
- "BDT": {
- "ll": "src/Hpluscharm/MVA/xgb_output/SR_ll_scangamma_2017_gamma2.json",
- "emu": "src/Hpluscharm/MVA/xgb_output/SR_emu_scangamma_2017_gamma2.json",
- },
- },
-}
diff --git a/config/HWW2l2nu_split.py b/config/HWW2l2nu_split.py
deleted file mode 100644
index ab3e7b34..00000000
--- a/config/HWW2l2nu_split.py
+++ /dev/null
@@ -1,104 +0,0 @@
-from Hpluscharm.workflows import workflows as hplusc_wf
-
-cfg = {
- "dataset": {
- "jsons": [
- # "src/Hpluscharm/input_json/higgs_UL17.json",
- # "src/Hpluscharm/input_json/signal_UL17.json",
- "src/Hpluscharm/input_json/mcbkg_UL17.json"
- # "src/Hpluscharm/input_json/st_local.json"
- ],
- "campaign": "UL17",
- "year": "2017",
- "filter": {
- "samples": [
- # # # # "ZZ_TuneCP5_13TeV-pythia8",
- # # # # "WZ_TuneCP5_13TeV-pythia8",
- # # # # "WW_TuneCP5_13TeV-pythia8"
- # # # # "gchcWW2L2Nu_4f"
- # "TTTo2L2Nu_TuneCP5_13TeV-powheg-pythia8",
- # "TTToSemiLeptonic_TuneCP5_13TeV-powheg-pythia8",
- "ST_tW_top_5f_inclusiveDecays_TuneCP5_13TeV-powheg-pythia8",
- "ST_tW_antitop_5f_inclusiveDecays_TuneCP5_13TeV-powheg-pythia8",
- "ST_s-channel_4f_leptonDecays_TuneCP5_13TeV-amcatnlo-pythia8",
- "ST_t-channel_antitop_4f_InclusiveDecays_TuneCP5_13TeV-powheg-madspin-pythia8",
- "ST_t-channel_top_4f_InclusiveDecays_TuneCP5_13TeV-powheg-madspin-pythia8",
- # "WJetsToLNu_TuneCP5_13TeV-amcatnloFXFX-pythia8",
- # "DYJetsToLL_M-10to50_TuneCP5_13TeV-madgraphMLM-pythia8",
- # "DYJetsToLL_M-50_TuneCP5_13TeV-amcatnloFXFX-pythia8",
- # "DYJetsToTauTauToMuTauh_M-50_TuneCP5_13TeV-madgraphMLM-pythia8"
- ]
- },
- },
- # Input and output files
- "workflow": hplusc_wf["HWWtest"],
- "output": "st_all_array",
- "run_options": {
- "executor": "parsl/condor/naf_lite",
- # "executor":"iterative",
- "workers": 4,
- "scaleout": 200,
- "walltime": "03:00:00",
- "mem_per_worker": 2, # GB
- "chunk": 15000,
- "skipbadfiles": True,
- "sample_size": 20,
- "retries": 50,
- "index": "0,0",
- },
- ## selections
- "categories": {"cats": [], "cats2": []},
- "preselections": {
- "mu1hlt": ["IsoMu27"],
- "mu2hlt": [
- "Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_Mass3p8",
- "Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_Mass8",
- ],
- "e1hlt": ["Ele35_WPTight_Gsf"],
- "e2hlt": ["Ele23_Ele12_CaloIdL_TrackIdL_IsoVL"],
- "emuhlt": [
- "Mu23_TrkIsoVVL_Ele12_CaloIdL_TrackIdL_IsoVL",
- "Mu12_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL",
- "Mu12_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ",
- "Mu23_TrkIsoVVL_Ele12_CaloIdL_TrackIdL_IsoVL_DZ",
- ],
- },
- ## weights
- "weights": {
- "common": {
- "inclusive": {
- "lumiMask": "Cert_294927-306462_13TeV_UL2017_Collisions17_GoldenJSON.txt",
- "PU": "puweight_UL17.histo.root",
- "JME": "mc_compile_jec.pkl.gz",
- "BTV": {
- "DeepJetC": "DeepJet_ctagSF_Summer20UL17_interp.root",
- },
- "LSF": {
- # "ele_Trig TrigSF": "Ele32_L1DoubleEG_TrigSF_vhcc.histo.root",
- "ele_Rereco_above20 EGamma_SF2D": "egammaEffi_ptAbove20.txt_EGM2D_UL2017.histo.root",
- "ele_Rereco_below20 EGamma_SF2D": "egammaEffi_ptBelow20.txt_EGM2D_UL2017.histo.root",
- "ele_ID EGamma_SF2D": "egammaEffi.txt_EGM2D_MVA90iso_UL17.histo.root",
- "mu_ID NUM_TightID_DEN_TrackerMuons_abseta_pt": "Efficiencies_muon_generalTracks_Z_Run2017_UL_ID.histo.root",
- "mu_Iso NUM_TightRelIso_DEN_TightIDandIPCut_abseta_pt": "Efficiencies_muon_generalTracks_Z_Run2017_UL_ISO.histo.root",
- "ele_Rereco_above20_error EGamma_SF2D_error": "egammaEffi_ptAbove20.txt_EGM2D_UL2017.histo.root",
- "ele_Rereco_below20_error EGamma_SF2D_error": "egammaEffi_ptBelow20.txt_EGM2D_UL2017.histo.root",
- "ele_ID_error EGamma_SF2D_error": "egammaEffi.txt_EGM2D_MVA90iso_UL17.histo.root",
- "mu_ID_error NUM_TightID_DEN_TrackerMuons_abseta_pt_error": "Efficiencies_muon_generalTracks_Z_Run2017_UL_ID.histo.root",
- "mu_Iso_error NUM_TightRelIso_DEN_TightIDandIPCut_abseta_pt_error": "Efficiencies_muon_generalTracks_Z_Run2017_UL_ISO.histo.root",
- },
- },
- },
- },
- "systematic": {
- "JERC": False,
- "weights": False,
- },
- ## user specific
- "userconfig": {
- "export_array": True,
- "BDT": {
- "ll": "src/Hpluscharm/MVA/xgb_output/SR_ll_scangamma_2017_gamma2.json",
- "emu": "src/Hpluscharm/MVA/xgb_output/SR_emu_scangamma_2017_gamma2.json",
- },
- },
-}
diff --git a/config/Hc_HWW2l2nu/MC_UL16_post.py b/config/Hc_HWW2l2nu/MC_UL16_post.py
new file mode 100644
index 00000000..d45e8f78
--- /dev/null
+++ b/config/Hc_HWW2l2nu/MC_UL16_post.py
@@ -0,0 +1,168 @@
+from Hpluscharm.workflows import workflows as hplusc_wf
+
+cfg = {
+ "dataset": {
+ "jsons": [
+ "src/Hpluscharm/input_json/signal_UL16post_off.json",
+ "src/Hpluscharm/input_json/UL16_postVFP.json",
+ ],
+ "campaign": "2016postVFP_UL",
+ "year": "2016",
+ # "filter": {
+ # "samples": [
+ # "HPlusCharm_4FS_MuRFScaleDynX0p50_HToWWTo2L2Nu_M125_TuneCP5_13TeV-amcatnloFXFX-pythia8"]}
+ },
+ # Input and output files
+ "workflow": hplusc_wf["HWWtest"],
+ "output": "MC_fixHLT_postVFP_UL16",
+ "run_options": {
+ "executor": "parsl/condor/naf_lite",
+ # "executor":"iterative",
+ "workers": 2,
+ "scaleout": 400,
+ "walltime": "03:00:00",
+ "mem_per_worker": 2, # GB
+ "chunk": 150000,
+ "skipbadfiles": True,
+ "retries": 20,
+ # "limit":1,
+ "index": "21,0",
+ "sample_size": 150,
+ # "voms": None,
+ # "splitjobs": False,
+ },
+ ## selections
+ "categories": {"cats": [], "cats2": []},
+ "preselections": {
+ "mu1hlt": ["IsoMu27"],
+ "mu2hlt": [
+ "Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_Mass3p8",
+ "Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_Mass8",
+ ],
+ "e1hlt": ["Ele35_WPTight_Gsf"],
+ "e2hlt": ["Ele23_Ele12_CaloIdL_TrackIdL_IsoVL"],
+ "emuhlt": [
+ "Mu23_TrkIsoVVL_Ele12_CaloIdL_TrackIdL_IsoVL",
+ "Mu12_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL",
+ "Mu8_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL",
+ "Mu12_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ",
+ "Mu23_TrkIsoVVL_Ele12_CaloIdL_TrackIdL_IsoVL_DZ",
+ ],
+ },
+ ## weights
+ "weights": {
+ "common": {
+ "inclusive": {
+ "lumiMask": "Cert_271036-284044_13TeV_Legacy2016_Collisions16_JSON.txt",
+ "PU": None,
+ "roccor": None,
+ "JME": "jec_compiled.pkl.gz",
+ "BTV": {"deepJet": "shape"},
+ "LSF": {
+ "ele_ID 2016postVFP": "wp90iso",
+ "ele_Reco 2016postVFP": "RecoAbove20",
+ "ele_Reco_low 2016postVFP": "RecoBelow20",
+ "mu_Reco 2016postVFP_UL": "NUM_TrackerMuons_DEN_genTracks",
+ "mu_ID 2016postVFP_UL": "NUM_TightID_DEN_TrackerMuons",
+ "mu_Iso 2016postVFP_UL": "NUM_TightRelIso_DEN_TightIDandIPCut",
+ "mu_ID_low NUM_TightID_DEN_TrackerMuons": "Efficiency_muon_trackerMuon_Run2016postVFP_UL_ID.histo.json",
+ "mu_Reco_low NUM_TrackerMuons_DEN_genTracks": "Efficiency_muon_generalTracks_Run2016postVFP_UL_trackerMuon.histo.json",
+ },
+ },
+ },
+ },
+ "systematic": {
+ "JERC": "split",
+ "weights": True,
+ },
+ ## user specific
+ "userconfig": {
+ "export_array": False,
+ "BDT": {
+ "json": "src/Hpluscharm/MVA/xgb_output/None_binary_LM_nsv_UL17_nofocal.json",
+ "binning": {
+ "SR2_LM": [
+ 0.0,
+ 0.023,
+ 0.045,
+ 0.068,
+ 0.09,
+ 0.113,
+ 0.135,
+ 0.158,
+ 0.18,
+ 0.202,
+ 0.225,
+ 0.248,
+ 0.27,
+ 0.293,
+ 0.315,
+ 0.338,
+ 0.36,
+ 0.383,
+ 0.405,
+ 0.428,
+ 0.45,
+ 0.473,
+ 0.495,
+ 0.518,
+ 0.54,
+ 0.563,
+ 0.585,
+ 0.608,
+ 0.63,
+ 0.653,
+ 0.675,
+ 0.698,
+ 0.72,
+ 0.742,
+ 0.765,
+ 0.788,
+ 0.81,
+ 0.833,
+ 0.855,
+ 0.878,
+ 0.9,
+ 0.923,
+ 0.945,
+ 0.968,
+ 0.99,
+ 1.0,
+ ],
+ "SR_LM": [
+ 0.0,
+ 0.034,
+ 0.068,
+ 0.101,
+ 0.135,
+ 0.169,
+ 0.203,
+ 0.237,
+ 0.27,
+ 0.304,
+ 0.338,
+ 0.372,
+ 0.406,
+ 0.439,
+ 0.473,
+ 0.507,
+ 0.541,
+ 0.574,
+ 0.608,
+ 0.642,
+ 0.676,
+ 0.71,
+ 0.743,
+ 0.777,
+ 0.811,
+ 0.845,
+ 0.879,
+ 0.912,
+ 0.946,
+ 0.98,
+ 1.0,
+ ],
+ },
+ },
+ },
+}
diff --git a/config/Hc_HWW2l2nu/MC_UL16_pre.py b/config/Hc_HWW2l2nu/MC_UL16_pre.py
new file mode 100644
index 00000000..f1ab7988
--- /dev/null
+++ b/config/Hc_HWW2l2nu/MC_UL16_pre.py
@@ -0,0 +1,171 @@
+from Hpluscharm.workflows import workflows as hplusc_wf
+
+cfg = {
+ "dataset": {
+ "jsons": [
+ "src/Hpluscharm/input_json/UL16_preVFP.json",
+ "src/Hpluscharm/input_json/signal_UL16pre_off.json",
+ ],
+ "campaign": "2016preVFP_UL",
+ "year": "2016",
+ # "filter": {
+ # "samples": [
+ # "HPlusCharm_4FS_MuRFScaleDynX0p50_HToWWTo2L2Nu_M125_TuneCP5_13TeV-amcatnloFXFX-pythia8"]}
+ },
+ # Input and output files
+ "workflow": hplusc_wf["HWWtest"],
+ "output": "MC_fixHLT_preVFP_UL16",
+ "run_options": {
+ "executor": "parsl/condor/naf_lite",
+ # "executor":"futures",
+ # "executor":"iterative",
+ "workers": 2,
+ "scaleout": 500,
+ "walltime": "03:00:00",
+ "mem_per_worker": 2, # GB
+ "chunk": 150000,
+ "skipbadfiles": True,
+ "retries": 40,
+ "index": "10,0,11,1",
+ "sample_size": 150,
+ # "limit":1,
+ # "max":1,
+ # "index":"0,0",
+ # "voms": None,
+ "splitjobs": False,
+ },
+ ## selections
+ "categories": {"cats": [], "cats2": []},
+ "preselections": {
+ "mu1hlt": ["IsoMu27"],
+ "mu2hlt": [
+ "Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_Mass3p8",
+ "Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_Mass8",
+ ],
+ "e1hlt": ["Ele35_WPTight_Gsf"],
+ "e2hlt": ["Ele23_Ele12_CaloIdL_TrackIdL_IsoVL"],
+ "emuhlt": [
+ "Mu8_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL",
+ "Mu23_TrkIsoVVL_Ele12_CaloIdL_TrackIdL_IsoVL",
+ "Mu12_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL",
+ "Mu12_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ",
+ "Mu23_TrkIsoVVL_Ele12_CaloIdL_TrackIdL_IsoVL_DZ",
+ ],
+ },
+ ## weights
+ "weights": {
+ "common": {
+ "inclusive": {
+ "lumiMask": "Cert_271036-284044_13TeV_Legacy2016_Collisions16_JSON.txt",
+ "PU": None,
+ "roccor": None,
+ "JME": "jec_compiled.pkl.gz",
+ "BTV": {"deepJet": "shape"},
+ "LSF": {
+ "ele_ID 2016preVFP": "wp90iso",
+ "ele_Reco 2016preVFP": "RecoAbove20",
+ "ele_Reco_low 2016preVFP": "RecoBelow20",
+ "mu_Reco 2016preVFP_UL": "NUM_TrackerMuons_DEN_genTracks",
+ "mu_ID 2016preVFP_UL": "NUM_TightID_DEN_TrackerMuons",
+ "mu_Iso 2016preVFP_UL": "NUM_TightRelIso_DEN_TightIDandIPCut",
+ "mu_ID_low NUM_TightID_DEN_TrackerMuons": "Efficiency_muon_trackerMuon_Run2016preVFP_UL_ID.histo.json",
+ "mu_Reco_low NUM_TrackerMuons_DEN_genTracks": "Efficiency_muon_generalTracks_Run2016preVFP_UL_trackerMuon.histo.json",
+ },
+ },
+ },
+ },
+ "systematic": {
+ "JERC": "split",
+ "weights": True,
+ },
+ ## user specific
+ "userconfig": {
+ "export_array": False,
+ "BDT": {
+ "json": "src/Hpluscharm/MVA/xgb_output/None_binary_LM_nsv_UL17_nofocal.json",
+ "binning": {
+ "SR2_LM": [
+ 0.0,
+ 0.023,
+ 0.045,
+ 0.068,
+ 0.09,
+ 0.113,
+ 0.135,
+ 0.158,
+ 0.18,
+ 0.202,
+ 0.225,
+ 0.248,
+ 0.27,
+ 0.293,
+ 0.315,
+ 0.338,
+ 0.36,
+ 0.383,
+ 0.405,
+ 0.428,
+ 0.45,
+ 0.473,
+ 0.495,
+ 0.518,
+ 0.54,
+ 0.563,
+ 0.585,
+ 0.608,
+ 0.63,
+ 0.653,
+ 0.675,
+ 0.698,
+ 0.72,
+ 0.742,
+ 0.765,
+ 0.788,
+ 0.81,
+ 0.833,
+ 0.855,
+ 0.878,
+ 0.9,
+ 0.923,
+ 0.945,
+ 0.968,
+ 0.99,
+ 1.0,
+ ],
+ "SR_LM": [
+ 0.0,
+ 0.034,
+ 0.068,
+ 0.101,
+ 0.135,
+ 0.169,
+ 0.203,
+ 0.237,
+ 0.27,
+ 0.304,
+ 0.338,
+ 0.372,
+ 0.406,
+ 0.439,
+ 0.473,
+ 0.507,
+ 0.541,
+ 0.574,
+ 0.608,
+ 0.642,
+ 0.676,
+ 0.71,
+ 0.743,
+ 0.777,
+ 0.811,
+ 0.845,
+ 0.879,
+ 0.912,
+ 0.946,
+ 0.98,
+ 1.0,
+ ],
+ },
+ },
+ },
+}
diff --git a/config/Hc_HWW2l2nu/MC_UL17.py b/config/Hc_HWW2l2nu/MC_UL17.py
new file mode 100644
index 00000000..356a6960
--- /dev/null
+++ b/config/Hc_HWW2l2nu/MC_UL17.py
@@ -0,0 +1,167 @@
+from Hpluscharm.workflows import workflows as hplusc_wf
+
+cfg = {
+ "dataset": {
+ "jsons": [
+ "src/Hpluscharm/input_json/signal_UL17.json",
+ "src/Hpluscharm/input_json/signal_UL17_off.json",
+ "src/Hpluscharm/input_json/mcbkg_UL17.json",
+ "src/Hpluscharm/input_json/higgs_UL17.json",
+ "src/Hpluscharm/input_json/hzz_other.json",
+ ],
+ "campaign": "2017_UL",
+ "year": "2017",
+ },
+ # Input and output files
+ "workflow": hplusc_wf["HWWtest"],
+ "output": "MC_fixHLT_UL17",
+ "run_options": {
+ "executor": "parsl/condor/naf_lite",
+ # "executor":"futures",
+ # "executor": "iterative",
+ "workers": 2,
+ "scaleout": 500,
+ "walltime": "03:00:00",
+ "mem_per_worker": 2, # GB
+ "chunk": 150000,
+ "skipbadfiles": True,
+ "retries": 20,
+ "sample_size": 150,
+ "index": "11,0",
+ # "voms": None,
+ # "splitjobs": False,
+ },
+ ## selections
+ "categories": {"cats": [], "cats2": []},
+ "preselections": {
+ "mu1hlt": ["IsoMu27"],
+ "mu2hlt": [
+ "Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_Mass3p8",
+ "Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_Mass8",
+ ],
+ "e1hlt": ["Ele35_WPTight_Gsf"],
+ "e2hlt": ["Ele23_Ele12_CaloIdL_TrackIdL_IsoVL"],
+ "emuhlt": [
+ "Mu23_TrkIsoVVL_Ele12_CaloIdL_TrackIdL_IsoVL",
+ "Mu12_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL",
+ "Mu12_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ",
+ "Mu23_TrkIsoVVL_Ele12_CaloIdL_TrackIdL_IsoVL_DZ",
+ ],
+ },
+ ## weights
+ "weights": {
+ "common": {
+ "inclusive": {
+ "lumiMask": "Cert_294927-306462_13TeV_UL2017_Collisions17_GoldenJSON.txt",
+ "PU": None,
+ "JME": "jec_compiled.pkl.gz",
+ "roccor": None,
+ "BTV": {"deepJet": "shape"},
+ "LSF": {
+ "ele_ID 2017": "wp90iso",
+ "ele_Reco 2017": "RecoAbove20",
+ "ele_Reco_low 2017": "RecoBelow20",
+ "mu_Reco 2017_UL": "NUM_TrackerMuons_DEN_genTracks",
+ "mu_ID 2017_UL": "NUM_TightID_DEN_TrackerMuons",
+ "mu_Iso 2017_UL": "NUM_TightRelIso_DEN_TightIDandIPCut",
+ "mu_ID_low NUM_TightID_DEN_TrackerMuons": "Efficiency_muon_trackerMuon_Run2017_UL_ID.histo.json",
+ "mu_Reco_low NUM_TrackerMuons_DEN_genTracks": "Efficiency_muon_generalTracks_Run2017_UL_trackerMuon.histo.json",
+ },
+ },
+ },
+ },
+ "systematic": {
+ "JERC": "split",
+ "weights": True,
+ },
+ ## user specific
+ "userconfig": {
+ "export_array": False,
+ "BDT": {
+ "json": "src/Hpluscharm/MVA/xgb_output/None_binary_LM_nsv_UL17_nofocal.json",
+ "binning": {
+ "SR2_LM": [
+ 0.0,
+ 0.023,
+ 0.045,
+ 0.068,
+ 0.09,
+ 0.113,
+ 0.135,
+ 0.158,
+ 0.18,
+ 0.202,
+ 0.225,
+ 0.248,
+ 0.27,
+ 0.293,
+ 0.315,
+ 0.338,
+ 0.36,
+ 0.383,
+ 0.405,
+ 0.428,
+ 0.45,
+ 0.473,
+ 0.495,
+ 0.518,
+ 0.54,
+ 0.563,
+ 0.585,
+ 0.608,
+ 0.63,
+ 0.653,
+ 0.675,
+ 0.698,
+ 0.72,
+ 0.742,
+ 0.765,
+ 0.788,
+ 0.81,
+ 0.833,
+ 0.855,
+ 0.878,
+ 0.9,
+ 0.923,
+ 0.945,
+ 0.968,
+ 0.99,
+ 1.0,
+ ],
+ "SR_LM": [
+ 0.0,
+ 0.034,
+ 0.068,
+ 0.101,
+ 0.135,
+ 0.169,
+ 0.203,
+ 0.237,
+ 0.27,
+ 0.304,
+ 0.338,
+ 0.372,
+ 0.406,
+ 0.439,
+ 0.473,
+ 0.507,
+ 0.541,
+ 0.574,
+ 0.608,
+ 0.642,
+ 0.676,
+ 0.71,
+ 0.743,
+ 0.777,
+ 0.811,
+ 0.845,
+ 0.879,
+ 0.912,
+ 0.946,
+ 0.98,
+ 1.0,
+ ],
+ },
+ },
+ },
+}
diff --git a/config/Hc_HWW2l2nu/MC_UL18.py b/config/Hc_HWW2l2nu/MC_UL18.py
new file mode 100644
index 00000000..24a7b857
--- /dev/null
+++ b/config/Hc_HWW2l2nu/MC_UL18.py
@@ -0,0 +1,167 @@
+from Hpluscharm.workflows import workflows as hplusc_wf
+
+cfg = {
+ "dataset": {
+ "jsons": [
+ "src/Hpluscharm/input_json/signal_UL18_off.json",
+ "src/Hpluscharm/input_json/UL18_MC.json",
+ ],
+ "campaign": "2018_UL",
+ "year": "2018",
+ # "filter": {
+ # "samples": [
+ # "HPlusCharm_4FS_MuRFScaleDynX0p50_HToWWTo2L2Nu_M125_TuneCP5_13TeV-amcatnloFXFX-pythia8",
+ # "HPlusCharm_4FS_MuRFScaleDynX0p50_HToZZTo4L_M125_TuneCP5_13TeV_amcatnlo_JHUGenV7011_pythia8",
+ # "HPlusCharm_4FS_MuRFScaleDynX0p50_HToGG_M125_TuneCP5_13TeV-amcatnloFXFX-pythia8"]}
+ },
+ # Input and output files
+ "workflow": hplusc_wf["HWWtest"],
+ "output": "MC_fixHLT_UL18",
+ "run_options": {
+ "executor": "parsl/condor/naf_lite",
+ # "executor":"iterative",
+ "workers": 2,
+ "scaleout": 600,
+ "walltime": "03:00:00",
+ "mem_per_worker": 2, # GB
+ "chunk": 150000,
+ "skipbadfiles": True,
+ "retries": 50,
+ "index": "25,0",
+ "sample_size": 150,
+ # "limit":1
+ },
+ ## selections
+ "categories": {"cats": [], "cats2": []},
+ "preselections": {
+ "mu1hlt": ["IsoMu27"],
+ "mu2hlt": [
+ "Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_Mass3p8",
+ "Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_Mass8",
+ ],
+ "e1hlt": ["Ele35_WPTight_Gsf"],
+ "e2hlt": ["Ele23_Ele12_CaloIdL_TrackIdL_IsoVL"],
+ "emuhlt": [
+ "Mu23_TrkIsoVVL_Ele12_CaloIdL_TrackIdL_IsoVL",
+ "Mu12_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL",
+ "Mu12_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ",
+ "Mu23_TrkIsoVVL_Ele12_CaloIdL_TrackIdL_IsoVL_DZ",
+ ],
+ },
+ ## weights
+ "weights": {
+ "common": {
+ "inclusive": {
+ "lumiMask": "Cert_314472-325175_13TeV_Legacy2018_Collisions18_JSON.txt",
+ "PU": None,
+ "roccor": None,
+ "JME": "jec_compiled.pkl.gz",
+ "BTV": {"deepJet": "shape"},
+ "LSF": {
+ "ele_ID 2018": "wp90iso",
+ "ele_Reco 2018": "RecoAbove20",
+ "ele_Reco_low 2018": "RecoBelow20",
+ "mu_Reco 2018_UL": "NUM_TrackerMuons_DEN_genTracks",
+ "mu_ID 2018_UL": "NUM_TightID_DEN_TrackerMuons",
+ "mu_Iso 2018_UL": "NUM_TightRelIso_DEN_TightIDandIPCut",
+ "mu_ID_low NUM_TightID_DEN_TrackerMuons": "Efficiency_muon_trackerMuon_Run2018_UL_ID.histo.json",
+ "mu_Reco_low NUM_TrackerMuons_DEN_genTracks": "Efficiency_muon_generalTracks_Run2018_UL_trackerMuon.histo.json",
+ },
+ },
+ },
+ },
+ "systematic": {
+ "JERC": True,
+ "weights": True,
+ },
+ ## user specific
+ "userconfig": {
+ "export_array": False,
+ "BDT": {
+ "json": "src/Hpluscharm/MVA/xgb_output/None_binary_LM_nsv_UL17_nofocal.json",
+ "binning": {
+ "SR2_LM": [
+ 0.0,
+ 0.023,
+ 0.045,
+ 0.068,
+ 0.09,
+ 0.113,
+ 0.135,
+ 0.158,
+ 0.18,
+ 0.202,
+ 0.225,
+ 0.248,
+ 0.27,
+ 0.293,
+ 0.315,
+ 0.338,
+ 0.36,
+ 0.383,
+ 0.405,
+ 0.428,
+ 0.45,
+ 0.473,
+ 0.495,
+ 0.518,
+ 0.54,
+ 0.563,
+ 0.585,
+ 0.608,
+ 0.63,
+ 0.653,
+ 0.675,
+ 0.698,
+ 0.72,
+ 0.742,
+ 0.765,
+ 0.788,
+ 0.81,
+ 0.833,
+ 0.855,
+ 0.878,
+ 0.9,
+ 0.923,
+ 0.945,
+ 0.968,
+ 0.99,
+ 1.0,
+ ],
+ "SR_LM": [
+ 0.0,
+ 0.034,
+ 0.068,
+ 0.101,
+ 0.135,
+ 0.169,
+ 0.203,
+ 0.237,
+ 0.27,
+ 0.304,
+ 0.338,
+ 0.372,
+ 0.406,
+ 0.439,
+ 0.473,
+ 0.507,
+ 0.541,
+ 0.574,
+ 0.608,
+ 0.642,
+ 0.676,
+ 0.71,
+ 0.743,
+ 0.777,
+ 0.811,
+ 0.845,
+ 0.879,
+ 0.912,
+ 0.946,
+ 0.98,
+ 1.0,
+ ],
+ },
+ },
+ },
+}
diff --git a/config/Hc_HWW2l2nu/data_UL16_post.py b/config/Hc_HWW2l2nu/data_UL16_post.py
new file mode 100644
index 00000000..7163a5f1
--- /dev/null
+++ b/config/Hc_HWW2l2nu/data_UL16_post.py
@@ -0,0 +1,163 @@
+from Hpluscharm.workflows import workflows as hplusc_wf
+
+cfg = {
+ "dataset": {
+ "jsons": [
+ "src/Hpluscharm/input_json/UL16_postVFP_data.json",
+ ],
+ "campaign": "2016postVFP_UL",
+ "year": "2016",
+ },
+ # Input and output files
+ "workflow": hplusc_wf["HWWtest"],
+ "output": "data_fixHLT_postVFP_UL16",
+ "run_options": {
+ "executor": "parsl/condor/naf_lite",
+ # "executor":"iterative",
+ "workers": 2,
+ "scaleout": 300,
+ "walltime": "03:00:00",
+ "mem_per_worker": 2, # GB
+ "chunk": 200000,
+ "retries": 50,
+ # "limit":1,
+ # "index":"0,0",
+ # "sample_size": 10,
+ # "voms": None,
+ "splitjobs": False,
+ },
+ ## selections
+ "categories": {"cats": [], "cats2": []},
+ "preselections": {
+ "mu1hlt": ["IsoMu27"],
+ "mu2hlt": [
+ "Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_Mass3p8",
+ "Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_Mass8",
+ ],
+ "e1hlt": ["Ele35_WPTight_Gsf"],
+ "e2hlt": ["Ele23_Ele12_CaloIdL_TrackIdL_IsoVL"],
+ "emuhlt": [
+ "Mu23_TrkIsoVVL_Ele12_CaloIdL_TrackIdL_IsoVL",
+ "Mu12_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL",
+ "Mu8_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL",
+ "Mu12_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ",
+ "Mu23_TrkIsoVVL_Ele12_CaloIdL_TrackIdL_IsoVL_DZ",
+ ],
+ },
+ ## weights
+ "weights": {
+ "common": {
+ "inclusive": {
+ "lumiMask": "Cert_271036-284044_13TeV_Legacy2016_Collisions16_JSON.txt",
+ "PU": None,
+ "roccor": None,
+ "JME": "jec_compiled.pkl.gz",
+ "BTV": {"deepJet": "shape"},
+ "LSF": {
+ "ele_ID 2016postVFP": "wp90iso",
+ "ele_Reco 2016postVFP": "RecoAbove20",
+ "ele_Reco_low 2016postVFP": "RecoBelow20",
+ "mu_Reco 2016postVFP_UL": "NUM_TrackerMuons_DEN_genTracks",
+ "mu_ID 2016postVFP_UL": "NUM_TightID_DEN_TrackerMuons",
+ "mu_Iso 2016postVFP_UL": "NUM_TightRelIso_DEN_TightIDandIPCut",
+ "mu_ID_low NUM_TightID_DEN_TrackerMuons": "Efficiency_muon_trackerMuon_Run2016postVFP_UL_ID.histo.json",
+ "mu_Reco_low NUM_TrackerMuons_DEN_genTracks": "Efficiency_muon_generalTracks_Run2016postVFP_UL_trackerMuon.histo.json",
+ },
+ },
+ },
+ },
+ "systematic": {
+ "JERC": False,
+ "weights": False,
+ },
+ ## user specific
+ "userconfig": {
+ "export_array": False,
+ "BDT": {
+ "json": "src/Hpluscharm/MVA/xgb_output/None_binary_LM_nsv_UL17_nofocal.json",
+ "binning": {
+ "SR2_LM": [
+ 0.0,
+ 0.023,
+ 0.045,
+ 0.068,
+ 0.09,
+ 0.113,
+ 0.135,
+ 0.158,
+ 0.18,
+ 0.202,
+ 0.225,
+ 0.248,
+ 0.27,
+ 0.293,
+ 0.315,
+ 0.338,
+ 0.36,
+ 0.383,
+ 0.405,
+ 0.428,
+ 0.45,
+ 0.473,
+ 0.495,
+ 0.518,
+ 0.54,
+ 0.563,
+ 0.585,
+ 0.608,
+ 0.63,
+ 0.653,
+ 0.675,
+ 0.698,
+ 0.72,
+ 0.742,
+ 0.765,
+ 0.788,
+ 0.81,
+ 0.833,
+ 0.855,
+ 0.878,
+ 0.9,
+ 0.923,
+ 0.945,
+ 0.968,
+ 0.99,
+ 1.0,
+ ],
+ "SR_LM": [
+ 0.0,
+ 0.034,
+ 0.068,
+ 0.101,
+ 0.135,
+ 0.169,
+ 0.203,
+ 0.237,
+ 0.27,
+ 0.304,
+ 0.338,
+ 0.372,
+ 0.406,
+ 0.439,
+ 0.473,
+ 0.507,
+ 0.541,
+ 0.574,
+ 0.608,
+ 0.642,
+ 0.676,
+ 0.71,
+ 0.743,
+ 0.777,
+ 0.811,
+ 0.845,
+ 0.879,
+ 0.912,
+ 0.946,
+ 0.98,
+ 1.0,
+ ],
+ },
+ },
+ },
+}
diff --git a/config/Hc_HWW2l2nu/data_UL16_pre.py b/config/Hc_HWW2l2nu/data_UL16_pre.py
new file mode 100644
index 00000000..e7c4e639
--- /dev/null
+++ b/config/Hc_HWW2l2nu/data_UL16_pre.py
@@ -0,0 +1,165 @@
+from Hpluscharm.workflows import workflows as hplusc_wf
+
+cfg = {
+ "dataset": {
+ "jsons": [
+ "src/Hpluscharm/input_json/UL16_preVFP_data.json",
+ ],
+ "campaign": "2016preVFP_UL",
+ "year": "2016",
+ },
+ # Input and output files
+ "workflow": hplusc_wf["HWWtest"],
+ "output": "data_fixHLT_preVFP_UL16",
+ "run_options": {
+ "executor": "parsl/condor/naf_lite",
+ # "executor":"futures",
+ # "executor":"iterative",
+ "workers": 2,
+ "scaleout": 100,
+ "walltime": "03:00:00",
+ "mem_per_worker": 2, # GB
+ "chunk": 200000,
+ "retries": 50,
+ # "index":"0,0",
+ # "sample_size": 5,
+ # "limit":1,
+ # "index":"0,0",
+ # "voms": None,
+ "splitjobs": False,
+ },
+ ## selections
+ "categories": {"cats": [], "cats2": []},
+ "preselections": {
+ "mu1hlt": ["IsoMu27"],
+ "mu2hlt": [
+ "Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_Mass3p8",
+ "Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_Mass8",
+ ],
+ "e1hlt": ["Ele35_WPTight_Gsf"],
+ "e2hlt": ["Ele23_Ele12_CaloIdL_TrackIdL_IsoVL"],
+ "emuhlt": [
+ "Mu23_TrkIsoVVL_Ele12_CaloIdL_TrackIdL_IsoVL",
+ "Mu12_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL",
+ "Mu8_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL",
+ "Mu12_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ",
+ "Mu23_TrkIsoVVL_Ele12_CaloIdL_TrackIdL_IsoVL_DZ",
+ ],
+ },
+ ## weights
+ "weights": {
+ "common": {
+ "inclusive": {
+ "lumiMask": "Cert_271036-284044_13TeV_Legacy2016_Collisions16_JSON.txt",
+ "PU": None,
+ "roccor": None,
+ "JME": "jec_compiled.pkl.gz",
+ "BTV": {"deepJet": "shape"},
+ "LSF": {
+ "ele_ID 2016preVFP": "wp90iso",
+ "ele_Reco 2016preVFP": "RecoAbove20",
+ "ele_Reco_low 2016preVFP": "RecoBelow20",
+ "mu_Reco 2016preVFP_UL": "NUM_TrackerMuons_DEN_genTracks",
+ "mu_ID 2016preVFP_UL": "NUM_TightID_DEN_TrackerMuons",
+ "mu_Iso 2016preVFP_UL": "NUM_TightRelIso_DEN_TightIDandIPCut",
+ "mu_ID_low NUM_TightID_DEN_TrackerMuons": "Efficiency_muon_trackerMuon_Run2016preVFP_UL_ID.histo.json",
+ "mu_Reco_low NUM_TrackerMuons_DEN_genTracks": "Efficiency_muon_generalTracks_Run2016preVFP_UL_trackerMuon.histo.json",
+ },
+ },
+ },
+ },
+ "systematic": {
+ "JERC": False,
+ "weights": False,
+ },
+ ## user specific
+ "userconfig": {
+ "export_array": False,
+ "BDT": {
+ "json": "src/Hpluscharm/MVA/xgb_output/None_binary_LM_nsv_UL17_nofocal.json",
+ "binning": {
+ "SR2_LM": [
+ 0.0,
+ 0.023,
+ 0.045,
+ 0.068,
+ 0.09,
+ 0.113,
+ 0.135,
+ 0.158,
+ 0.18,
+ 0.202,
+ 0.225,
+ 0.248,
+ 0.27,
+ 0.293,
+ 0.315,
+ 0.338,
+ 0.36,
+ 0.383,
+ 0.405,
+ 0.428,
+ 0.45,
+ 0.473,
+ 0.495,
+ 0.518,
+ 0.54,
+ 0.563,
+ 0.585,
+ 0.608,
+ 0.63,
+ 0.653,
+ 0.675,
+ 0.698,
+ 0.72,
+ 0.742,
+ 0.765,
+ 0.788,
+ 0.81,
+ 0.833,
+ 0.855,
+ 0.878,
+ 0.9,
+ 0.923,
+ 0.945,
+ 0.968,
+ 0.99,
+ 1.0,
+ ],
+ "SR_LM": [
+ 0.0,
+ 0.034,
+ 0.068,
+ 0.101,
+ 0.135,
+ 0.169,
+ 0.203,
+ 0.237,
+ 0.27,
+ 0.304,
+ 0.338,
+ 0.372,
+ 0.406,
+ 0.439,
+ 0.473,
+ 0.507,
+ 0.541,
+ 0.574,
+ 0.608,
+ 0.642,
+ 0.676,
+ 0.71,
+ 0.743,
+ 0.777,
+ 0.811,
+ 0.845,
+ 0.879,
+ 0.912,
+ 0.946,
+ 0.98,
+ 1.0,
+ ],
+ },
+ },
+ },
+}
diff --git a/config/Hc_HWW2l2nu/data_UL17.py b/config/Hc_HWW2l2nu/data_UL17.py
new file mode 100644
index 00000000..0111ffed
--- /dev/null
+++ b/config/Hc_HWW2l2nu/data_UL17.py
@@ -0,0 +1,173 @@
+from Hpluscharm.workflows import workflows as hplusc_wf
+
+cfg = {
+ "dataset": {
+ "jsons": [
+ "src/Hpluscharm/input_json/UL17_data.json",
+ ],
+ "campaign": "2017_UL",
+ "year": "2017",
+ "filter": {
+ "samples": [
+ "MuonEG_Run2017B-UL2017_MiniAODv2_NanoAODv9-v1",
+ "MuonEG_Run2017C-UL2017_MiniAODv2_NanoAODv9-v1",
+ "MuonEG_Run2017D-UL2017_MiniAODv2_NanoAODv9-v1",
+ "MuonEG_Run2017F-UL2017_MiniAODv2_NanoAODv9-v1",
+ "MuonEG_Run2017E-UL2017_MiniAODv2_NanoAODv9-v1",
+ ],
+ "samples_exclude": [],
+ },
+ },
+ # Input and output files
+ "workflow": hplusc_wf["HWWtest"],
+ "output": "data_fixHLT_UL17",
+ "run_options": {
+ "executor": "parsl/condor/naf_lite",
+ # "executor":"futures",
+ # "executor": "iterative",
+ "workers": 2,
+ "scaleout": 500,
+ "walltime": "03:00:00",
+ "mem_per_worker": 2, # GB
+ "chunk": 200000,
+ "skipbadfiles": True,
+ "retries": 20,
+ # "limit": 1,
+ # "index":"0,0",
+ # "voms": None,
+ "splitjobs": False,
+ },
+ ## selections
+ "categories": {"cats": [], "cats2": []},
+ "preselections": {
+ "mu1hlt": ["IsoMu27"],
+ "mu2hlt": [
+ "Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_Mass3p8",
+ "Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_Mass8",
+ ],
+ "e1hlt": ["Ele35_WPTight_Gsf"],
+ "e2hlt": ["Ele23_Ele12_CaloIdL_TrackIdL_IsoVL"],
+ "emuhlt": [
+ "Mu23_TrkIsoVVL_Ele12_CaloIdL_TrackIdL_IsoVL",
+ "Mu12_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL",
+ "Mu12_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ",
+ "Mu23_TrkIsoVVL_Ele12_CaloIdL_TrackIdL_IsoVL_DZ",
+ ],
+ },
+ ## weights
+ "weights": {
+ "common": {
+ "inclusive": {
+ "lumiMask": "Cert_294927-306462_13TeV_UL2017_Collisions17_GoldenJSON.txt",
+ "PU": None,
+ "JME": "jec_compiled.pkl.gz",
+ "roccor": None,
+ "BTV": {"deepJet": "shape"},
+ "LSF": {
+ "ele_ID 2017": "wp90iso",
+ "ele_Reco 2017": "RecoAbove20",
+ "ele_Reco_low 2017": "RecoBelow20",
+ "mu_Reco 2017_UL": "NUM_TrackerMuons_DEN_genTracks",
+ "mu_ID 2017_UL": "NUM_TightID_DEN_TrackerMuons",
+ "mu_Iso 2017_UL": "NUM_TightRelIso_DEN_TightIDandIPCut",
+ "mu_ID_low NUM_TightID_DEN_TrackerMuons": "Efficiency_muon_trackerMuon_Run2017_UL_ID.histo.json",
+ "mu_Reco_low NUM_TrackerMuons_DEN_genTracks": "Efficiency_muon_generalTracks_Run2017_UL_trackerMuon.histo.json",
+ },
+ },
+ },
+ },
+ "systematic": {
+ "JERC": False,
+ "weights": False,
+ },
+ ## user specific
+ "userconfig": {
+ "export_array": False,
+ "BDT": {
+ "json": "src/Hpluscharm/MVA/xgb_output/None_binary_LM_nsv_UL17_nofocal.json",
+ "binning": {
+ "SR2_LM": [
+ 0.0,
+ 0.023,
+ 0.045,
+ 0.068,
+ 0.09,
+ 0.113,
+ 0.135,
+ 0.158,
+ 0.18,
+ 0.202,
+ 0.225,
+ 0.248,
+ 0.27,
+ 0.293,
+ 0.315,
+ 0.338,
+ 0.36,
+ 0.383,
+ 0.405,
+ 0.428,
+ 0.45,
+ 0.473,
+ 0.495,
+ 0.518,
+ 0.54,
+ 0.563,
+ 0.585,
+ 0.608,
+ 0.63,
+ 0.653,
+ 0.675,
+ 0.698,
+ 0.72,
+ 0.742,
+ 0.765,
+ 0.788,
+ 0.81,
+ 0.833,
+ 0.855,
+ 0.878,
+ 0.9,
+ 0.923,
+ 0.945,
+ 0.968,
+ 0.99,
+ 1.0,
+ ],
+ "SR_LM": [
+ 0.0,
+ 0.034,
+ 0.068,
+ 0.101,
+ 0.135,
+ 0.169,
+ 0.203,
+ 0.237,
+ 0.27,
+ 0.304,
+ 0.338,
+ 0.372,
+ 0.406,
+ 0.439,
+ 0.473,
+ 0.507,
+ 0.541,
+ 0.574,
+ 0.608,
+ 0.642,
+ 0.676,
+ 0.71,
+ 0.743,
+ 0.777,
+ 0.811,
+ 0.845,
+ 0.879,
+ 0.912,
+ 0.946,
+ 0.98,
+ 1.0,
+ ],
+ },
+ },
+ },
+}
diff --git a/config/Hc_HWW2l2nu/data_UL18.py b/config/Hc_HWW2l2nu/data_UL18.py
new file mode 100644
index 00000000..35322e9e
--- /dev/null
+++ b/config/Hc_HWW2l2nu/data_UL18.py
@@ -0,0 +1,162 @@
+from Hpluscharm.workflows import workflows as hplusc_wf
+
+cfg = {
+ "dataset": {
+ "jsons": [
+ "src/Hpluscharm/input_json/UL18_data.json",
+ ],
+ "campaign": "2018_UL",
+ "year": "2018",
+ },
+ # Input and output files
+ "workflow": hplusc_wf["HWWtest"],
+ "output": "data_fixHLT_UL18",
+ "run_options": {
+ "executor": "parsl/condor/naf_lite",
+ # "executor":"futures",
+ # "executor":"iterative",
+ "workers": 2,
+ "scaleout": 800,
+ "walltime": "03:00:00",
+ "mem_per_worker": 2, # GB
+ "chunk": 200000,
+ "retries": 30,
+ # "index": "0,0",
+ # "sample_size": 5,
+ # "voms": None,
+ "splitjobs": False,
+ },
+ ## selections
+ "categories": {"cats": [], "cats2": []},
+ "preselections": {
+ "mu1hlt": ["IsoMu27"],
+ "mu2hlt": [
+ "Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_Mass3p8",
+ "Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_Mass8",
+ ],
+ "e1hlt": ["Ele35_WPTight_Gsf"],
+ "e2hlt": ["Ele23_Ele12_CaloIdL_TrackIdL_IsoVL"],
+ "emuhlt": [
+ "Mu23_TrkIsoVVL_Ele12_CaloIdL_TrackIdL_IsoVL",
+ "Mu12_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL",
+ "Mu12_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ",
+ "Mu23_TrkIsoVVL_Ele12_CaloIdL_TrackIdL_IsoVL_DZ",
+ ],
+ },
+ ## weights
+ "weights": {
+ "common": {
+ "inclusive": {
+ "lumiMask": "Cert_314472-325175_13TeV_Legacy2018_Collisions18_JSON.txt",
+ "PU": None,
+ "roccor": None,
+ "JME": "jec_compiled.pkl.gz",
+ "BTV": {"deepJet": "shape"},
+ "LSF": {
+ "ele_ID 2018": "wp90iso",
+ "ele_Reco 2018": "RecoAbove20",
+ "ele_Reco_low 2018": "RecoBelow20",
+ "mu_Reco 2018_UL": "NUM_TrackerMuons_DEN_genTracks",
+ "mu_ID 2018_UL": "NUM_TightID_DEN_TrackerMuons",
+ "mu_Iso 2018_UL": "NUM_TightRelIso_DEN_TightIDandIPCut",
+ "mu_ID_low NUM_TightID_DEN_TrackerMuons": "Efficiency_muon_trackerMuon_Run2018_UL_ID.histo.json",
+ "mu_Reco_low NUM_TrackerMuons_DEN_genTracks": "Efficiency_muon_generalTracks_Run2018_UL_trackerMuon.histo.json",
+ },
+ },
+ },
+ },
+ "systematic": {
+ "JERC": False,
+ "weights": False,
+ },
+ ## user specific
+ "userconfig": {
+ "export_array": False,
+ "BDT": {
+ "json": "src/Hpluscharm/MVA/xgb_output/None_binary_LM_nsv_UL17_nofocal.json",
+ "binning": {
+ "SR2_LM": [
+ 0.0,
+ 0.023,
+ 0.045,
+ 0.068,
+ 0.09,
+ 0.113,
+ 0.135,
+ 0.158,
+ 0.18,
+ 0.202,
+ 0.225,
+ 0.248,
+ 0.27,
+ 0.293,
+ 0.315,
+ 0.338,
+ 0.36,
+ 0.383,
+ 0.405,
+ 0.428,
+ 0.45,
+ 0.473,
+ 0.495,
+ 0.518,
+ 0.54,
+ 0.563,
+ 0.585,
+ 0.608,
+ 0.63,
+ 0.653,
+ 0.675,
+ 0.698,
+ 0.72,
+ 0.742,
+ 0.765,
+ 0.788,
+ 0.81,
+ 0.833,
+ 0.855,
+ 0.878,
+ 0.9,
+ 0.923,
+ 0.945,
+ 0.968,
+ 0.99,
+ 1.0,
+ ],
+ "SR_LM": [
+ 0.0,
+ 0.034,
+ 0.068,
+ 0.101,
+ 0.135,
+ 0.169,
+ 0.203,
+ 0.237,
+ 0.27,
+ 0.304,
+ 0.338,
+ 0.372,
+ 0.406,
+ 0.439,
+ 0.473,
+ 0.507,
+ 0.541,
+ 0.574,
+ 0.608,
+ 0.642,
+ 0.676,
+ 0.71,
+ 0.743,
+ 0.777,
+ 0.811,
+ 0.845,
+ 0.879,
+ 0.912,
+ 0.946,
+ 0.98,
+ 1.0,
+ ],
+ },
+ },
+ },
+}
diff --git a/config/example.py b/config/example.py
index b3494beb..2faec5e0 100644
--- a/config/example.py
+++ b/config/example.py
@@ -1,60 +1,76 @@
-# Local Variables:
-# python-indent-offset: 4
-# End:
-
from test_wf import NanoProcessor as test_wf
cfg = {
"dataset": {
- "jsons": ["metadata/test.json"],
- "campaign": "UL17",
+ "jsons": [
+ "metadata/ttbar_UL17.json",
+ ],
+ "campaign": "2017_UL",
"year": "2017",
- "filter": {
- "samples": [
- "GluGluHToWWTo2L2Nu_M-125_TuneCP5_13TeV-powheg-jhugen727-pythia8",
- "SingleMuon_Run2017B-UL2017_MiniAODv2_NanoAODv9-v1",
- ],
- "samples_exclude": ["TTTo2L2Nu_TuneCP5_13TeV-powheg-pythia8"],
- },
},
# Input and output files
"workflow": test_wf,
- "output": "output_test",
+ "output": "test",
"run_options": {
- # "executor": "parsl/condor",
- "executor": "futures",
- "workers": 10,
- "scaleout": 40,
+ "executor": "iterative",
+ "workers": 2,
"walltime": "03:00:00",
"mem_per_worker": 2, # GB
- "chunk": 500000,
- "max": None,
- "skipbadfiles": None,
- "voms": None,
- "limit": 2,
+ "chunk": 250000,
+ "skipbadfiles": False,
"retries": 20,
- "splitjobs": False,
+ "limit": 1,
+ "max": 1,
+ },
+ ## selections
+ "categories": {"cats": [], "cats2": []},
+ "preselections": {
+ "mu1hlt": ["IsoMu27"],
+ "mu2hlt": [
+ "Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_Mass3p8",
+ "Mu17_TrkIsoVVL_Mu8_TrkIsoVVL_DZ_Mass8",
+ ],
+ "e1hlt": ["Ele35_WPTight_Gsf"],
+ "e2hlt": ["Ele23_Ele12_CaloIdL_TrackIdL_IsoVL"],
+ "emuhlt": [
+ "Mu23_TrkIsoVVL_Ele12_CaloIdL_TrackIdL_IsoVL",
+ "Mu12_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL",
+ "Mu12_TrkIsoVVL_Ele23_CaloIdL_TrackIdL_IsoVL_DZ",
+ "Mu23_TrkIsoVVL_Ele12_CaloIdL_TrackIdL_IsoVL_DZ",
+ ],
},
## weights
"weights": {
"common": {
"inclusive": {
"lumiMask": "Cert_294927-306462_13TeV_UL2017_Collisions17_GoldenJSON.txt",
- "PU": None,
+ ## compiled factories for JME
"JME": "jec_compiled.pkl.gz",
+ ## Read txt roccor corrections
+ "roccor": None,
+ ## Read from correctionlib , structured dict ID (campaign): WP
+ "PU": None, # no ID need to specied
+ # JMAR, IDs from JME
+ "JMAR": {"PUJetID_eff": "L"},
+ # BTV SFs (shape currently implemented)
"BTV": {"deepJet": "shape"},
"LSF": {
"ele_ID 2017": "wp90iso",
"ele_Reco 2017": "RecoAbove20",
"ele_Reco_low 2017": "RecoBelow20",
"mu_Reco 2017_UL": "NUM_TrackerMuons_DEN_genTracks",
- "mu_HLT 2017_UL": "NUM_IsoMu27_DEN_CutBasedIdTight_and_PFIsoTight",
"mu_ID 2017_UL": "NUM_TightID_DEN_TrackerMuons",
"mu_Iso 2017_UL": "NUM_TightRelIso_DEN_TightIDandIPCut",
+ ## customed json/root file
"mu_ID_low NUM_TightID_DEN_TrackerMuons": "Efficiency_muon_trackerMuon_Run2017_UL_ID.histo.json",
"mu_Reco_low NUM_TrackerMuons_DEN_genTracks": "Efficiency_muon_generalTracks_Run2017_UL_trackerMuon.histo.json",
},
},
},
},
+ "systematic": {
+ "JERC": "split", # False, True(only total unc)
+ "weights": True, # SFs/weight uncertainties
+ "roccor": True, # rochester muon up/down
+ },
}
diff --git a/filefetcher/fetch.py b/filefetcher/fetch.py
index 2200cccf..9223533c 100644
--- a/filefetcher/fetch.py
+++ b/filefetcher/fetch.py
@@ -50,10 +50,14 @@ def getFilesFromDas(args):
if dataset.startswith("#") or dataset.strip() == "":
# print("we skip this line:", line)
continue
+
dsname = dataset.strip().split("/")[1] # Dataset first name
+
Tier = dataset.strip().split("/")[
3
] # NANOAODSIM for regular samples, USER for private
+ if "SIM" not in Tier:
+ dsname = dataset.strip().split("/")[1] + "_" + dataset.split("/")[2]
instance = "prod/global"
if Tier == "USER":
instance = "prod/phys03"
@@ -154,8 +158,14 @@ def main(args):
else:
fdict = getFilesFromDas(args)
- # print(fdict)
- output_file = "./metadata/%s" % (args.output)
+ # Check the any file lists empty
+ empty = True
+ for dsname, flist in fdict.items():
+ if len(flist) == 0:
+ print(dsname, "is empty!!!!")
+ empty = False
+ assert empty, "you have empty lists"
+ output_file = "./%s" % (args.output)
with open(output_file, "w") as fp:
json.dump(fdict, fp, indent=4)
print("The file is saved at: ", output_file)
diff --git a/metadata/nano_UL17_test.json b/metadata/nano_UL17_test.json
new file mode 100644
index 00000000..1c83003b
--- /dev/null
+++ b/metadata/nano_UL17_test.json
@@ -0,0 +1,8 @@
+{
+"TTTo2L2Nu_TuneCP5_13TeV-powheg-pythia8": [
+ "root://xrootd-cms.infn.it//store/mc/RunIISummer20UL17NanoAODv9/TTTo2L2Nu_TuneCP5_13TeV-powheg-pythia8/NANOAODSIM/106X_mc2017_realistic_v9-v1/2510000/EFBBD9DF-1B6A-C54A-9CA5-704B819BB6A8.root"],
+"WJetsToLNu_TuneCP5_13TeV-amcatnloFXFX-pythia8":
+["root://xrootd-cms.infn.it///store/mc/RunIISummer20UL17NanoAODv9/WJetsToLNu_TuneCP5_13TeV-amcatnloFXFX-pythia8/NANOAODSIM/PUForTRKv2_TRKv2_106X_mc2017_realistic_v9-v2/60000/03F5AB12-7343-D44C-849C-3A86E60906DD.root"],
+"SingleMuon_Run2017B-UL2017_MiniAODv2_NanoAODv9-v1": [
+ "root://grid-cms-xrootd.physik.rwth-aachen.de:1094///store/data/Run2017B/SingleMuon/NANOAOD/UL2017_MiniAODv2_NanoAODv9-v1/120000/3274AED5-511E-3E45-8BCC-684FFD2F5BA8.root"]
+}
diff --git a/metadata/test.json b/metadata/test.json
deleted file mode 100644
index 1b5db74f..00000000
--- a/metadata/test.json
+++ /dev/null
@@ -1,12 +0,0 @@
-{
- "SingleMuon_Run2017B-UL2017_MiniAODv2_NanoAODv9-v1": [
- "root://xrootd-cms.infn.it///store/data/Run2017B/SingleMuon/NANOAOD/UL2017_MiniAODv2_NanoAODv9-v1/120000/3274AED5-511E-3E45-8BCC-684FFD2F5BA8.root",
- "root://xrootd-cms.infn.it///store/data/Run2017B/SingleMuon/NANOAOD/UL2017_MiniAODv2_NanoAODv9-v1/120000/12CE0481-77A2-FD48-9FBD-43BE811EAD5D.root"],
- "GluGluHToWWTo2L2Nu_M-125_TuneCP5_13TeV-powheg-jhugen727-pythia8": [
- "root://xrootd-cms.infn.it///store/mc/RunIISummer20UL17NanoAODv9/GluGluHToWWTo2L2Nu_M-125_TuneCP5_13TeV-powheg-jhugen727-pythia8/NANOAODSIM/106X_mc2017_realistic_v9-v2/40000/702ED98F-6108-9945-BAD3-4F4DF1682C4E.root",
- "root://xrootd-cms.infn.it///store/mc/RunIISummer20UL17NanoAODv9/GluGluHToWWTo2L2Nu_M-125_TuneCP5_13TeV-powheg-jhugen727-pythia8/NANOAODSIM/106X_mc2017_realistic_v9-v2/40000/1727F5CB-DA64-C548-9385-BBDDCE73DDCA.root"],
- "TTTo2L2Nu_TuneCP5_13TeV-powheg-pythia8": [
- "root://xrootd-cms.infn.it///store/mc/RunIISummer20UL17NanoAODv9/TTTo2L2Nu_TuneCP5_13TeV-powheg-pythia8/NANOAODSIM/106X_mc2017_realistic_v9-v1/2510000/EFBBD9DF-1B6A-C54A-9CA5-704B819BB6A8.root",
- "root://xrootd-cms.infn.it///store/mc/RunIISummer20UL17NanoAODv9/TTTo2L2Nu_TuneCP5_13TeV-powheg-pythia8/NANOAODSIM/106X_mc2017_realistic_v9-v1/2510000/E7185D42-E19B-4743-B5D2-2D2A008AB656.root"]
-
-}
diff --git a/metadata/ttbar_UL17.json b/metadata/ttbar_UL17.json
new file mode 100644
index 00000000..11576c63
--- /dev/null
+++ b/metadata/ttbar_UL17.json
@@ -0,0 +1,5 @@
+{"TTTo2L2Nu_TuneCP5_13TeV-powheg-pythia8": [
+ "root://grid-cms-xrootd.physik.rwth-aachen.de:1094//store/mc/RunIISummer20UL17NanoAODv9/TTTo2L2Nu_TuneCP5_13TeV-powheg-pythia8/NANOAODSIM/106X_mc2017_realistic_v9-v1/2510000/EFBBD9DF-1B6A-C54A-9CA5-704B819BB6A8.root",
+ "root://grid-cms-xrootd.physik.rwth-aachen.de:1094//store/mc/RunIISummer20UL17NanoAODv9/TTTo2L2Nu_TuneCP5_13TeV-powheg-pythia8/NANOAODSIM/106X_mc2017_realistic_v9-v1/2510000/E7185D42-E19B-4743-B5D2-2D2A008AB656.root",
+ "root://grid-cms-xrootd.physik.rwth-aachen.de:1094//store/mc/RunIISummer20UL17NanoAODv9/TTTo2L2Nu_TuneCP5_13TeV-powheg-pythia8/NANOAODSIM/106X_mc2017_realistic_v9-v1/2510000/47450C94-04DF-7048-A46E-E77DEFE35A0A.root",
+ "root://grid-cms-xrootd.physik.rwth-aachen.de:1094//store/mc/RunIISummer20UL17NanoAODv9/TTTo2L2Nu_TuneCP5_13TeV-powheg-pythia8/NANOAODSIM/106X_mc2017_realistic_v9-v1/2510000/C9E789DD-BB0B-0344-84C0-FDA560DD2E94.root"]}
diff --git a/runner_wconfig.py b/runner_wconfig.py
index c33485e7..5bf2b3fb 100644
--- a/runner_wconfig.py
+++ b/runner_wconfig.py
@@ -66,12 +66,20 @@ def retry_handler(exception, task_record):
action="store_true",
help="Do not process, just check all files are accessible",
)
+ parser.add_argument(
+ "--test",
+ action="store_true",
+ help="run 1 files, 1 chunk in iterative",
+ )
args = parser.parse_args()
if args.cfg[-3:] == ".py":
config = Configurator(args.cfg, overwrite_output_dir=args.overwrite_file)
else:
raise sys.exit("Please provide a .py configuration file")
-
+ if args.test:
+ config.run_options["executor"] = "iterative"
+ config.fileset = {f: [config.fileset[f][0]] for f in config.fileset}
+ config.run_options["max"] = 1
# Scan if files can be opened
if args.validate:
start = time.time()
@@ -166,6 +174,7 @@ def retry_handler(exception, task_record):
chunksize=config.run_options["chunk"],
maxchunks=config.run_options["max"],
)
+ save(output, config.outfile)
elif "parsl" in config.run_options["executor"]:
import parsl
from parsl.providers import LocalProvider, CondorProvider, SlurmProvider
@@ -323,12 +332,16 @@ def retry_handler(exception, task_record):
for sindex, sample in enumerate(config.fileset.keys()):
if sindex < int(config.run_options["index"].split(",")[0]):
continue
+ if len(config.run_options["index"].split(",")) == 4 and sindex > int(
+ config.run_options["index"].split(",")[2]
+ ):
+ break
+
if int(config.run_options["index"].split(",")[1]) == findex:
mins = findex * config.run_options["sample_size"]
else:
mins = 0
findex = 0
-
while mins < len(config.fileset[sample]):
splitted = {}
maxs = mins + config.run_options["sample_size"]
@@ -336,6 +349,10 @@ def retry_handler(exception, task_record):
mins = maxs
findex = findex + 1
+ if len(
+ config.run_options["index"].split(",")
+ ) == 4 and findex > int(config.run_options["index"].split(",")[3]):
+ break
output = processor.run_uproot_job(
splitted,
treename="Events",
@@ -359,7 +376,7 @@ def retry_handler(exception, task_record):
chunksize=config.run_options["chunk"],
maxchunks=config.run_options["max"],
)
-
+ save(output, config.outfile)
elif "dask" in config.run_options["executor"]:
from dask_jobqueue import SLURMCluster, HTCondorCluster
from distributed import Client
@@ -415,6 +432,7 @@ def retry_handler(exception, task_record):
elif "condor" in config.run_options["executor"]:
cluster = HTCondorCluster(
cores=config.run_options["workers"],
+ disk="4GB",
memory=config.run_options["mem_per_worker"],
env_extra=env_extra,
)
@@ -447,7 +465,7 @@ def retry_handler(exception, task_record):
maxchunks=config.run_options["max"],
)
- save(output, config.outfile)
+ save(output, config.outfile)
# print(output) better to print this in a file:
with open(f"{config.outfile}.print.txt", "w") as f:
diff --git a/src/BTVNanoCommissioning/data/JME/2016postVFP_UL/jec_compiled.pkl.gz b/src/BTVNanoCommissioning/data/JME/2016postVFP_UL/jec_compiled.pkl.gz
index 371bb47b58d3ec6ad696fb1c77d6c1b56e3d3e20..8151ca07a59b5901381fbe8fe177bd4e87d9b835 100644
GIT binary patch
literal 244897
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