From 79cc8961c74172b30bfc42742d36d5ba25462330 Mon Sep 17 00:00:00 2001 From: Giacomo Boldrini Date: Fri, 10 May 2024 15:55:04 +0200 Subject: [PATCH 1/4] Changed flatten subsample behaviour as it was not working with lambdas on batch --- mkShapesRDF/shapeAnalysis/latinos/LatinosUtils.py | 8 +++++--- mkShapesRDF/shapeAnalysis/runner.py | 8 ++++++-- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/mkShapesRDF/shapeAnalysis/latinos/LatinosUtils.py b/mkShapesRDF/shapeAnalysis/latinos/LatinosUtils.py index 3253a0da..d82da18d 100644 --- a/mkShapesRDF/shapeAnalysis/latinos/LatinosUtils.py +++ b/mkShapesRDF/shapeAnalysis/latinos/LatinosUtils.py @@ -17,10 +17,12 @@ def flatten_samples(samples): sample = samples[sname] if "subsamples" not in sample: continue - flatten_samples_map = samples[sname].get( - "flatten_samples_map", lambda sname, sub: "%s_%s" % (sname, sub) + active_fsm = samples[sname].get( + "flatten_samples_map", 0 ) - + if active_fsm == 0: flatten_samples_map = lambda sname, sub: "%s_%s" % (sname, sub) + else: flatten_samples_map = lambda sname, sub: "%s" % (sub) + subsamplesmap.append((sname, [])) for sub in sample["subsamples"]: new_subsample_name = flatten_samples_map(sname, sub) diff --git a/mkShapesRDF/shapeAnalysis/runner.py b/mkShapesRDF/shapeAnalysis/runner.py index d9598724..3d33b29e 100644 --- a/mkShapesRDF/shapeAnalysis/runner.py +++ b/mkShapesRDF/shapeAnalysis/runner.py @@ -854,9 +854,13 @@ def splitSubsamples(self): _sample = list(filter(lambda k: k[0] == sampleName, self.samples))[0] for subsample in list(_sample[6].keys()): # _sample[5] is the original dict, i.e. samples[sampleName] - flatten_samples_map = _sample[5].get( - "flatten_samples_map", lambda sname, sub: "%s_%s" % (sname, sub) + + active_fsm = _sample[5].get( + "flatten_samples_map", 0 ) + if active_fsm == 0: flatten_samples_map = lambda sname, sub: "%s_%s" % (sname, sub) + else: flatten_samples_map = lambda sname, sub: "%s" % (sub) + new_subsample_name = flatten_samples_map(sampleName, subsample) self.dfs[new_subsample_name] = {} for index in self.dfs[sampleName].keys(): From ac83454d3a9371e1892abcfd627396a1b1f1f07c Mon Sep 17 00:00:00 2001 From: Giacomo Boldrini Date: Fri, 10 May 2024 16:01:14 +0200 Subject: [PATCH 2/4] Updated documentation for the flatten subsample map --- docs/shapes/python/samples.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/docs/shapes/python/samples.py b/docs/shapes/python/samples.py index 2d4583dd..d7ab78dc 100644 --- a/docs/shapes/python/samples.py +++ b/docs/shapes/python/samples.py @@ -90,10 +90,12 @@ >>> + "*( !(Sum(PhotonGen_isPrompt==1 && PhotonGen_pt>15 && abs(PhotonGen_eta)<2.6) > 0)) * ewknloW", >>> "FilesPerJob": 5, >>> "subsamples": dys, ->>> "flatten_samples_map": lambda sname, sub: "%s" % (sub) ->>> # in this way flatten sampled are simply "DY_hardJets", "DY_PUJets", ->>> # and "DY_inclusive_rwgt" ->>> # default flatten_samples_map is lambda sname, sub: '%s_%s' % (sname, sub) +>>> "flatten_samples_map": 1 +>>> # By default (flatten_samples_map=0), subsamples will carry the sample +>>> # name as prefix (e.g. DY_DY_hardJets, DY_DY_PUJets, ...). By specifying +>>> # flatten_samples_map=1 the sample prefix will be dropped and subsamples +>>> # names will be the one appearing in the subsamples dictionary keys +>>> # (for this example subsample shape names will be DY_hardJets, DY_PUJets) >>> } From 950697ecec46732ec39c95412ac1bf7ea1600202 Mon Sep 17 00:00:00 2001 From: Giacomo Boldrini Date: Fri, 10 May 2024 21:38:50 +0200 Subject: [PATCH 3/4] a quick fix to mkDatacards --- mkShapesRDF/shapeAnalysis/latinos/mkDatacards.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mkShapesRDF/shapeAnalysis/latinos/mkDatacards.py b/mkShapesRDF/shapeAnalysis/latinos/mkDatacards.py index a443e38a..7c8516b0 100644 --- a/mkShapesRDF/shapeAnalysis/latinos/mkDatacards.py +++ b/mkShapesRDF/shapeAnalysis/latinos/mkDatacards.py @@ -290,8 +290,8 @@ def makeDatacards( card.write("-" * 100 + "\n") card.write("bin %s" % tagNameToAppearInDatacard + "\n") if len(data) == 0: - self._logger.warning("no data, no fun! ") - # raise RuntimeError('No Data found!') + print("no data, no fun! ") + # self._loggraise RuntimeError('No Data found!') yieldsData["data"] = 0 card.write("observation %.0f\n" % yieldsData["data"]) From 5f638ffa8d4ed5a9330f92bb04db348ad035c2a9 Mon Sep 17 00:00:00 2001 From: Giacomo Boldrini Date: Sat, 11 May 2024 16:33:13 +0200 Subject: [PATCH 4/4] Let mkDatacard work when no data is available --- .../shapeAnalysis/latinos/mkDatacards.py | 29 ++++++++++--------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/mkShapesRDF/shapeAnalysis/latinos/mkDatacards.py b/mkShapesRDF/shapeAnalysis/latinos/mkDatacards.py index 7c8516b0..79e1ca04 100644 --- a/mkShapesRDF/shapeAnalysis/latinos/mkDatacards.py +++ b/mkShapesRDF/shapeAnalysis/latinos/mkDatacards.py @@ -289,12 +289,6 @@ def makeDatacards( card.write("-" * 100 + "\n") card.write("bin %s" % tagNameToAppearInDatacard + "\n") - if len(data) == 0: - print("no data, no fun! ") - # self._loggraise RuntimeError('No Data found!') - yieldsData["data"] = 0 - - card.write("observation %.0f\n" % yieldsData["data"]) card.write( "shapes * * " @@ -305,14 +299,21 @@ def makeDatacards( + "\n" ) - card.write( - "shapes data_obs * " - + "shapes/histos_" - + tagNameToAppearInDatacard - + ".root" - + " histo_Data" - + "\n" - ) + if len(data) == 0: + print("no data, no fun! ") + yieldsData["data"] = 0 + + else: + card.write("observation %.0f\n" % yieldsData["data"]) + + card.write( + "shapes data_obs * " + + "shapes/histos_" + + tagNameToAppearInDatacard + + ".root" + + " histo_Data" + + "\n" + ) # shapes * * shapes/hww-19.36fb.mH125.of_vh2j_shape_mll.root histo_$PROCESS histo_$PROCESS_$SYSTEMATIC # shapes data_obs * shapes/hww-19.36fb.mH125.of_vh2j_shape_mll.root histo_Data