diff --git a/doc/tableformat/fastNLOTableFormatv26.ods b/doc/tableformat/fastNLOTableFormatv26.ods new file mode 100644 index 0000000000000000000000000000000000000000..952fd1dc6a1c61300cebc9d697e8cdfcb6f374bd Binary files /dev/null and b/doc/tableformat/fastNLOTableFormatv26.ods differ diff --git a/v2.5/README b/previous/v2.5/README similarity index 100% rename from v2.5/README rename to previous/v2.5/README diff --git a/v2.5/generators/difftop/interface/fnlttbar000.str b/previous/v2.5/generators/difftop/interface/fnlttbar000.str similarity index 100% rename from v2.5/generators/difftop/interface/fnlttbar000.str rename to previous/v2.5/generators/difftop/interface/fnlttbar000.str diff --git a/v2.5/generators/difftop/interface/fnlttbar100.str b/previous/v2.5/generators/difftop/interface/fnlttbar100.str similarity index 100% rename from v2.5/generators/difftop/interface/fnlttbar100.str rename to previous/v2.5/generators/difftop/interface/fnlttbar100.str diff --git a/v2.5/generators/nlojet++/.gitignore b/previous/v2.5/generators/nlojet++/.gitignore similarity index 100% rename from v2.5/generators/nlojet++/.gitignore rename to previous/v2.5/generators/nlojet++/.gitignore diff --git a/v2.5/generators/nlojet++/AUTHORS b/previous/v2.5/generators/nlojet++/AUTHORS similarity index 100% rename from v2.5/generators/nlojet++/AUTHORS rename to previous/v2.5/generators/nlojet++/AUTHORS diff --git a/v2.5/generators/nlojet++/COPYING b/previous/v2.5/generators/nlojet++/COPYING similarity index 100% rename from v2.5/generators/nlojet++/COPYING rename to previous/v2.5/generators/nlojet++/COPYING diff --git a/v2.5/generators/nlojet++/ChangeLog b/previous/v2.5/generators/nlojet++/ChangeLog similarity index 100% rename from v2.5/generators/nlojet++/ChangeLog rename to previous/v2.5/generators/nlojet++/ChangeLog diff --git a/v2.5/generators/nlojet++/Makefile.am b/previous/v2.5/generators/nlojet++/Makefile.am similarity index 100% rename from v2.5/generators/nlojet++/Makefile.am rename to previous/v2.5/generators/nlojet++/Makefile.am diff --git a/v2.5/generators/nlojet++/NEWS b/previous/v2.5/generators/nlojet++/NEWS similarity index 100% rename from v2.5/generators/nlojet++/NEWS rename to previous/v2.5/generators/nlojet++/NEWS diff --git a/v2.5/generators/nlojet++/README b/previous/v2.5/generators/nlojet++/README similarity index 100% rename from v2.5/generators/nlojet++/README rename to previous/v2.5/generators/nlojet++/README diff --git a/v2.5/generators/nlojet++/configure.ac b/previous/v2.5/generators/nlojet++/configure.ac similarity index 100% rename from v2.5/generators/nlojet++/configure.ac rename to previous/v2.5/generators/nlojet++/configure.ac diff --git a/v2.5/generators/nlojet++/interface/Makefile.am b/previous/v2.5/generators/nlojet++/interface/Makefile.am similarity index 100% rename from v2.5/generators/nlojet++/interface/Makefile.am rename to previous/v2.5/generators/nlojet++/interface/Makefile.am diff --git a/v2.5/generators/nlojet++/interface/check/.gitignore b/previous/v2.5/generators/nlojet++/interface/check/.gitignore similarity index 100% rename from v2.5/generators/nlojet++/interface/check/.gitignore rename to previous/v2.5/generators/nlojet++/interface/check/.gitignore diff --git a/v2.5/generators/nlojet++/interface/check/Makefile.am b/previous/v2.5/generators/nlojet++/interface/check/Makefile.am similarity index 100% rename from v2.5/generators/nlojet++/interface/check/Makefile.am rename to previous/v2.5/generators/nlojet++/interface/check/Makefile.am diff --git a/previous/v2.5/generators/nlojet++/interface/check/fnlo-compare-tables.py b/previous/v2.5/generators/nlojet++/interface/check/fnlo-compare-tables.py new file mode 100755 index 0000000000000000000000000000000000000000..287ca83587134acf287a5efec304491252f2acfd --- /dev/null +++ b/previous/v2.5/generators/nlojet++/interface/check/fnlo-compare-tables.py @@ -0,0 +1,71 @@ +#!/usr/bin/env python3 + +import sys +import os + +try: + import fastnlo as fnlo +except ModuleNotFoundError: + print("fastNLO Python extension not found") + sys.exit(77) + +LIBDIR = os.environ["LIBDIR"] +DATADIR = f"{os.path.dirname(os.path.abspath(__file__))}/../data/check/" + +TABLE_TYPE = ["fix", "flex"] +NODE_COUNTING = ["NodesPerBin", "NodeDensity"] +DISTANCE_MEASURE = ["slx", "lgx"] +SEED = [1000, 2000] + +# fnlo.SetGlobalVerbosity(fnlo.DEBUG) + +os.system("rm -rf output") +os.system(f"ln -sf {DATADIR}InclusiveNJets_InclusiveJets_fix.wrm InclusiveNJets_InclusiveJets_fix_slx.wrm") +os.system(f"ln -sf {DATADIR}InclusiveNJets_InclusiveJets_fix.wrm InclusiveNJets_InclusiveJets_fix_lgx.wrm") +os.system(f"ln -sf {DATADIR}InclusiveNJets_InclusiveJets_flex.wrm InclusiveNJets_InclusiveJets_flex_slx.wrm") +os.system(f"ln -sf {DATADIR}InclusiveNJets_InclusiveJets_flex.wrm InclusiveNJets_InclusiveJets_flex_lgx.wrm") + + +def generate_table(table_type: str, distance_measure: str, node_counting: str, seed: int): + os.system(f"ln -sf {DATADIR}{table_type}_{distance_measure}_{node_counting}.str InclusiveNJets.str") + print(f"Asserting that steering file InclusiveNJets.str -> {DATADIR}{table_type}_{distance_measure}_{node_counting}.str exists") + assert os.path.exists("InclusiveNJets.str") + os.system( + "nlojet++ " + "--calculate " + "-c born " + f"-s {seed} " + f"--name {table_type}_{distance_measure}_{node_counting}_{seed:06d} " + f" -u {LIBDIR}/fastnlo_interface_nlojet/libInclusiveNJets.la " + "--max-event 10000 " + "--save-after 10000 " + ) + expected_outfile = "output/run-hhc-born-2jet.tab.gz" + print(f"Asserting that there is a table under {expected_outfile}") + assert os.path.exists(expected_outfile) + os.system(f"mv {expected_outfile} output/{table_type}_{distance_measure}_{node_counting}_{seed:06d}.tab.gz") + + +for table_type in TABLE_TYPE: + for distance_measure in DISTANCE_MEASURE: + for node_counting in NODE_COUNTING: + for seed in SEED: + generate_table(table_type, distance_measure, node_counting, seed) + os.system( + f"fnlo-tk-merge2 output/{table_type}_{distance_measure}_{node_counting}_??????.tab.gz " + f"output/{table_type}_{distance_measure}_{node_counting}_merged.tab.gz") + + for seed in SEED: + filename_0 = f"output/{table_type}_{distance_measure}_{NODE_COUNTING[0]}_{seed:06d}.tab.gz" + filename_1 = f"output/{table_type}_{distance_measure}_{NODE_COUNTING[1]}_{seed:06d}.tab.gz" + table_0 = fnlo.fastNLOTable(filename_0) + table_1 = fnlo.fastNLOTable(filename_1) + print(f"Asserting equal: {filename_0} <-> {filename_1}") + assert table_0.IsEquivalent(table_1, 1e-8) + + filename_0 = f"output/{table_type}_{distance_measure}_{NODE_COUNTING[0]}_merged.tab.gz" + filename_1 = f"output/{table_type}_{distance_measure}_{NODE_COUNTING[1]}_merged.tab.gz" + table_0_merged = fnlo.fastNLOTable(filename_0) + table_1_merged = fnlo.fastNLOTable(filename_1) + print(f"Asserting equal: {filename_0} <-> {filename_1}") + assert table_0_merged.IsEquivalent(table_1_merged, 1e-8) diff --git a/v2.5/generators/nlojet++/interface/check/fnlo-nj-lotest.pl.in b/previous/v2.5/generators/nlojet++/interface/check/fnlo-nj-lotest.pl.in similarity index 100% rename from v2.5/generators/nlojet++/interface/check/fnlo-nj-lotest.pl.in rename to previous/v2.5/generators/nlojet++/interface/check/fnlo-nj-lotest.pl.in diff --git a/v2.5/generators/nlojet++/interface/check/fnlo-nj-nlotest.pl.in b/previous/v2.5/generators/nlojet++/interface/check/fnlo-nj-nlotest.pl.in similarity index 100% rename from v2.5/generators/nlojet++/interface/check/fnlo-nj-nlotest.pl.in rename to previous/v2.5/generators/nlojet++/interface/check/fnlo-nj-nlotest.pl.in diff --git a/v2.5/generators/nlojet++/interface/check/fnlo-nj-wrmtest.pl.in b/previous/v2.5/generators/nlojet++/interface/check/fnlo-nj-wrmtest.pl.in similarity index 100% rename from v2.5/generators/nlojet++/interface/check/fnlo-nj-wrmtest.pl.in rename to previous/v2.5/generators/nlojet++/interface/check/fnlo-nj-wrmtest.pl.in diff --git a/v2.5/generators/nlojet++/interface/data/.gitignore b/previous/v2.5/generators/nlojet++/interface/data/.gitignore similarity index 100% rename from v2.5/generators/nlojet++/interface/data/.gitignore rename to previous/v2.5/generators/nlojet++/interface/data/.gitignore diff --git a/v2.5/generators/nlojet++/interface/data/AzimuthalDecorrelation/Makefile.am b/previous/v2.5/generators/nlojet++/interface/data/AzimuthalDecorrelation/Makefile.am similarity index 100% rename from v2.5/generators/nlojet++/interface/data/AzimuthalDecorrelation/Makefile.am rename to previous/v2.5/generators/nlojet++/interface/data/AzimuthalDecorrelation/Makefile.am diff --git a/v2.5/generators/nlojet++/interface/data/AzimuthalDecorrelation/fnl2522diffb_I885663_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/AzimuthalDecorrelation/fnl2522diffb_I885663_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/AzimuthalDecorrelation/fnl2522diffb_I885663_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/AzimuthalDecorrelation/fnl2522diffb_I885663_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/AzimuthalDecorrelation/fnl2522normb_I885663_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/AzimuthalDecorrelation/fnl2522normb_I885663_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/AzimuthalDecorrelation/fnl2522normb_I885663_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/AzimuthalDecorrelation/fnl2522normb_I885663_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/DijetAngular/Makefile.am b/previous/v2.5/generators/nlojet++/interface/data/DijetAngular/Makefile.am similarity index 100% rename from v2.5/generators/nlojet++/interface/data/DijetAngular/Makefile.am rename to previous/v2.5/generators/nlojet++/interface/data/DijetAngular/Makefile.am diff --git a/v2.5/generators/nlojet++/interface/data/DijetAngular/fnl2622f_I1090423_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/DijetAngular/fnl2622f_I1090423_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/DijetAngular/fnl2622f_I1090423_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/DijetAngular/fnl2622f_I1090423_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/DijetAngular/fnl2622f_I1090423_v23_flex.str b/previous/v2.5/generators/nlojet++/interface/data/DijetAngular/fnl2622f_I1090423_v23_flex.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/DijetAngular/fnl2622f_I1090423_v23_flex.str rename to previous/v2.5/generators/nlojet++/interface/data/DijetAngular/fnl2622f_I1090423_v23_flex.str diff --git a/v2.5/generators/nlojet++/interface/data/DijetMass/Makefile.am b/previous/v2.5/generators/nlojet++/interface/data/DijetMass/Makefile.am similarity index 100% rename from v2.5/generators/nlojet++/interface/data/DijetMass/Makefile.am rename to previous/v2.5/generators/nlojet++/interface/data/DijetMass/Makefile.am diff --git a/v2.5/generators/nlojet++/interface/data/DijetMass/fnl2412c_I895742_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/DijetMass/fnl2412c_I895742_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/DijetMass/fnl2412c_I895742_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/DijetMass/fnl2412c_I895742_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/DijetMass/fnl2412c_I895742_v23_flex.str b/previous/v2.5/generators/nlojet++/interface/data/DijetMass/fnl2412c_I895742_v23_flex.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/DijetMass/fnl2412c_I895742_v23_flex.str rename to previous/v2.5/generators/nlojet++/interface/data/DijetMass/fnl2412c_I895742_v23_flex.str diff --git a/v2.5/generators/nlojet++/interface/data/DijetMass/fnl2412e_I1208923_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/DijetMass/fnl2412e_I1208923_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/DijetMass/fnl2412e_I1208923_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/DijetMass/fnl2412e_I1208923_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/DijetMass/fnl2412e_I1208923_v23_flex.str b/previous/v2.5/generators/nlojet++/interface/data/DijetMass/fnl2412e_I1208923_v23_flex.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/DijetMass/fnl2412e_I1208923_v23_flex.str rename to previous/v2.5/generators/nlojet++/interface/data/DijetMass/fnl2412e_I1208923_v23_flex.str diff --git a/v2.5/generators/nlojet++/interface/data/DijetMass/fnl2452_I1082936_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/DijetMass/fnl2452_I1082936_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/DijetMass/fnl2452_I1082936_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/DijetMass/fnl2452_I1082936_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/DijetMass/fnl2452_I1082936_v23_fix_ptmax.str b/previous/v2.5/generators/nlojet++/interface/data/DijetMass/fnl2452_I1082936_v23_fix_ptmax.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/DijetMass/fnl2452_I1082936_v23_fix_ptmax.str rename to previous/v2.5/generators/nlojet++/interface/data/DijetMass/fnl2452_I1082936_v23_fix_ptmax.str diff --git a/v2.5/generators/nlojet++/interface/data/DijetMass/fnl2452_I1082936_v23_fix_ptmaxexpystar.str b/previous/v2.5/generators/nlojet++/interface/data/DijetMass/fnl2452_I1082936_v23_fix_ptmaxexpystar.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/DijetMass/fnl2452_I1082936_v23_fix_ptmaxexpystar.str rename to previous/v2.5/generators/nlojet++/interface/data/DijetMass/fnl2452_I1082936_v23_fix_ptmaxexpystar.str diff --git a/v2.5/generators/nlojet++/interface/data/DijetMass/fnl2452_I1082936_v23_flex_ptmaxexpystar.str b/previous/v2.5/generators/nlojet++/interface/data/DijetMass/fnl2452_I1082936_v23_flex_ptmaxexpystar.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/DijetMass/fnl2452_I1082936_v23_flex_ptmaxexpystar.str rename to previous/v2.5/generators/nlojet++/interface/data/DijetMass/fnl2452_I1082936_v23_flex_ptmaxexpystar.str diff --git a/v2.5/generators/nlojet++/interface/data/DijetMass/fnl2452b_I1268975_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/DijetMass/fnl2452b_I1268975_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/DijetMass/fnl2452b_I1268975_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/DijetMass/fnl2452b_I1268975_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/DijetMass/fnl2452b_I1268975_v23_fix_ptmax.str b/previous/v2.5/generators/nlojet++/interface/data/DijetMass/fnl2452b_I1268975_v23_fix_ptmax.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/DijetMass/fnl2452b_I1268975_v23_fix_ptmax.str rename to previous/v2.5/generators/nlojet++/interface/data/DijetMass/fnl2452b_I1268975_v23_fix_ptmax.str diff --git a/v2.5/generators/nlojet++/interface/data/DijetMass/fnl2452b_I1268975_v23_fix_ptmaxexpystar.str b/previous/v2.5/generators/nlojet++/interface/data/DijetMass/fnl2452b_I1268975_v23_fix_ptmaxexpystar.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/DijetMass/fnl2452b_I1268975_v23_fix_ptmaxexpystar.str rename to previous/v2.5/generators/nlojet++/interface/data/DijetMass/fnl2452b_I1268975_v23_fix_ptmaxexpystar.str diff --git a/v2.5/generators/nlojet++/interface/data/DijetMass/fnl2452b_I1268975_v23_flex_ptmaxexpystar.str b/previous/v2.5/generators/nlojet++/interface/data/DijetMass/fnl2452b_I1268975_v23_flex_ptmaxexpystar.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/DijetMass/fnl2452b_I1268975_v23_flex_ptmaxexpystar.str rename to previous/v2.5/generators/nlojet++/interface/data/DijetMass/fnl2452b_I1268975_v23_flex_ptmaxexpystar.str diff --git a/v2.5/generators/nlojet++/interface/data/DijetMass/fnl2462_I1082936_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/DijetMass/fnl2462_I1082936_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/DijetMass/fnl2462_I1082936_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/DijetMass/fnl2462_I1082936_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/DijetMass/fnl2462_I1082936_v23_flex_ptmaxexpystar.str b/previous/v2.5/generators/nlojet++/interface/data/DijetMass/fnl2462_I1082936_v23_flex_ptmaxexpystar.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/DijetMass/fnl2462_I1082936_v23_flex_ptmaxexpystar.str rename to previous/v2.5/generators/nlojet++/interface/data/DijetMass/fnl2462_I1082936_v23_flex_ptmaxexpystar.str diff --git a/v2.5/generators/nlojet++/interface/data/DijetMass/fnl2462b_I1268975_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/DijetMass/fnl2462b_I1268975_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/DijetMass/fnl2462b_I1268975_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/DijetMass/fnl2462b_I1268975_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/DijetMass/fnl2462b_I1268975_v23_flex_ptmaxexpystar.str b/previous/v2.5/generators/nlojet++/interface/data/DijetMass/fnl2462b_I1268975_v23_flex_ptmaxexpystar.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/DijetMass/fnl2462b_I1268975_v23_flex_ptmaxexpystar.str rename to previous/v2.5/generators/nlojet++/interface/data/DijetMass/fnl2462b_I1268975_v23_flex_ptmaxexpystar.str diff --git a/v2.5/generators/nlojet++/interface/data/Examples/DijetMass_Example_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/Examples/DijetMass_Example_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/Examples/DijetMass_Example_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/Examples/DijetMass_Example_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/Examples/InclusiveJets_Example_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/Examples/InclusiveJets_Example_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/Examples/InclusiveJets_Example_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/Examples/InclusiveJets_Example_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/Examples/InclusiveJets_UpdatedDescription_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/Examples/InclusiveJets_UpdatedDescription_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/Examples/InclusiveJets_UpdatedDescription_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/Examples/InclusiveJets_UpdatedDescription_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/Examples/Makefile.am b/previous/v2.5/generators/nlojet++/interface/data/Examples/Makefile.am similarity index 100% rename from v2.5/generators/nlojet++/interface/data/Examples/Makefile.am rename to previous/v2.5/generators/nlojet++/interface/data/Examples/Makefile.am diff --git a/v2.5/generators/nlojet++/interface/data/InclusiveJets/Makefile.am b/previous/v2.5/generators/nlojet++/interface/data/InclusiveJets/Makefile.am similarity index 100% rename from v2.5/generators/nlojet++/interface/data/InclusiveJets/Makefile.am rename to previous/v2.5/generators/nlojet++/interface/data/InclusiveJets/Makefile.am diff --git a/v2.5/generators/nlojet++/interface/data/InclusiveJets/fnl2332e_I1298810_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/InclusiveJets/fnl2332e_I1298810_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/InclusiveJets/fnl2332e_I1298810_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/InclusiveJets/fnl2332e_I1298810_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/InclusiveJets/fnl2342b_I902309_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/InclusiveJets/fnl2342b_I902309_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/InclusiveJets/fnl2342b_I902309_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/InclusiveJets/fnl2342b_I902309_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/InclusiveJets/fnl2342b_I902309_v23_flex.str b/previous/v2.5/generators/nlojet++/interface/data/InclusiveJets/fnl2342b_I902309_v23_flex.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/InclusiveJets/fnl2342b_I902309_v23_flex.str rename to previous/v2.5/generators/nlojet++/interface/data/InclusiveJets/fnl2342b_I902309_v23_flex.str diff --git a/v2.5/generators/nlojet++/interface/data/InclusiveJets/fnl2342e_I1298810_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/InclusiveJets/fnl2342e_I1298810_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/InclusiveJets/fnl2342e_I1298810_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/InclusiveJets/fnl2342e_I1298810_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/InclusiveJets/fnl2352_I1082936_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/InclusiveJets/fnl2352_I1082936_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/InclusiveJets/fnl2352_I1082936_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/InclusiveJets/fnl2352_I1082936_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/InclusiveJets/fnl2352b_I1325553_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/InclusiveJets/fnl2352b_I1325553_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/InclusiveJets/fnl2352b_I1325553_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/InclusiveJets/fnl2352b_I1325553_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/InclusiveJets/fnl2362_I1082936_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/InclusiveJets/fnl2362_I1082936_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/InclusiveJets/fnl2362_I1082936_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/InclusiveJets/fnl2362_I1082936_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/InclusiveJets/fnl2362b_I1325553_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/InclusiveJets/fnl2362b_I1325553_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/InclusiveJets/fnl2362b_I1325553_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/InclusiveJets/fnl2362b_I1325553_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/InclusiveJets/fnl4352_I1228693_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/InclusiveJets/fnl4352_I1228693_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/InclusiveJets/fnl4352_I1228693_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/InclusiveJets/fnl4352_I1228693_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/InclusiveJets/fnl4362_I1228693_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/InclusiveJets/fnl4362_I1228693_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/InclusiveJets/fnl4362_I1228693_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/InclusiveJets/fnl4362_I1228693_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/InclusiveJets/fnl5332g_v23_I1459051_fix.str b/previous/v2.5/generators/nlojet++/interface/data/InclusiveJets/fnl5332g_v23_I1459051_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/InclusiveJets/fnl5332g_v23_I1459051_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/InclusiveJets/fnl5332g_v23_I1459051_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/InclusiveJets/fnl5362g_v23_I1459051_fix.str b/previous/v2.5/generators/nlojet++/interface/data/InclusiveJets/fnl5362g_v23_I1459051_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/InclusiveJets/fnl5362g_v23_I1459051_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/InclusiveJets/fnl5362g_v23_I1459051_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/InclusiveJets/fnr0001midpHT_I723509_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/InclusiveJets/fnr0001midpHT_I723509_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/InclusiveJets/fnr0001midpHT_I723509_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/InclusiveJets/fnr0001midpHT_I723509_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/InclusiveJets/fnr0001midpMB_I723509_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/InclusiveJets/fnr0001midpMB_I723509_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/InclusiveJets/fnr0001midpMB_I723509_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/InclusiveJets/fnr0001midpMB_I723509_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/InclusiveJets/fnt2004_I743342_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/InclusiveJets/fnt2004_I743342_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/InclusiveJets/fnt2004_I743342_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/InclusiveJets/fnt2004_I743342_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/InclusiveJets/fnt2007midp_I790693_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/InclusiveJets/fnt2007midp_I790693_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/InclusiveJets/fnt2007midp_I790693_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/InclusiveJets/fnt2007midp_I790693_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/InclusiveJets/fnt2009midp_I779574_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/InclusiveJets/fnt2009midp_I779574_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/InclusiveJets/fnt2009midp_I779574_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/InclusiveJets/fnt2009midp_I779574_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/InclusiveNJetDiffs/Makefile.am b/previous/v2.5/generators/nlojet++/interface/data/InclusiveNJetDiffs/Makefile.am similarity index 100% rename from v2.5/generators/nlojet++/interface/data/InclusiveNJetDiffs/Makefile.am rename to previous/v2.5/generators/nlojet++/interface/data/InclusiveNJetDiffs/Makefile.am diff --git a/v2.5/generators/nlojet++/interface/data/InclusiveNJetDiffs/fnl2342e-2332e_I1298810_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/InclusiveNJetDiffs/fnl2342e-2332e_I1298810_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/InclusiveNJetDiffs/fnl2342e-2332e_I1298810_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/InclusiveNJetDiffs/fnl2342e-2332e_I1298810_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/InclusiveNJetDiffs/fnl2342e-2332e_y0_I1298810_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/InclusiveNJetDiffs/fnl2342e-2332e_y0_I1298810_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/InclusiveNJetDiffs/fnl2342e-2332e_y0_I1298810_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/InclusiveNJetDiffs/fnl2342e-2332e_y0_I1298810_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/InclusiveNJetEvents/Makefile.am b/previous/v2.5/generators/nlojet++/interface/data/InclusiveNJetEvents/Makefile.am similarity index 100% rename from v2.5/generators/nlojet++/interface/data/InclusiveNJetEvents/Makefile.am rename to previous/v2.5/generators/nlojet++/interface/data/InclusiveNJetEvents/Makefile.am diff --git a/v2.5/generators/nlojet++/interface/data/InclusiveNJetEvents/fnl2732dena_I1230937_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/InclusiveNJetEvents/fnl2732dena_I1230937_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/InclusiveNJetEvents/fnl2732dena_I1230937_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/InclusiveNJetEvents/fnl2732dena_I1230937_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/InclusiveNJetEvents/fnl2732numa_I1230937_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/InclusiveNJetEvents/fnl2732numa_I1230937_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/InclusiveNJetEvents/fnl2732numa_I1230937_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/InclusiveNJetEvents/fnl2732numa_I1230937_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/Makefile.am b/previous/v2.5/generators/nlojet++/interface/data/Makefile.am similarity index 100% rename from v2.5/generators/nlojet++/interface/data/Makefile.am rename to previous/v2.5/generators/nlojet++/interface/data/Makefile.am diff --git a/v2.5/generators/nlojet++/interface/data/README b/previous/v2.5/generators/nlojet++/interface/data/README similarity index 100% rename from v2.5/generators/nlojet++/interface/data/README rename to previous/v2.5/generators/nlojet++/interface/data/README diff --git a/v2.5/generators/nlojet++/interface/data/RivetAdditions/ATLAS_2013_I1228693.info b/previous/v2.5/generators/nlojet++/interface/data/RivetAdditions/ATLAS_2013_I1228693.info similarity index 100% rename from v2.5/generators/nlojet++/interface/data/RivetAdditions/ATLAS_2013_I1228693.info rename to previous/v2.5/generators/nlojet++/interface/data/RivetAdditions/ATLAS_2013_I1228693.info diff --git a/v2.5/generators/nlojet++/interface/data/RivetAdditions/ATLAS_2013_I1228693.plot b/previous/v2.5/generators/nlojet++/interface/data/RivetAdditions/ATLAS_2013_I1228693.plot similarity index 100% rename from v2.5/generators/nlojet++/interface/data/RivetAdditions/ATLAS_2013_I1228693.plot rename to previous/v2.5/generators/nlojet++/interface/data/RivetAdditions/ATLAS_2013_I1228693.plot diff --git a/v2.5/generators/nlojet++/interface/data/RivetAdditions/ATLAS_2013_I1228693.yoda b/previous/v2.5/generators/nlojet++/interface/data/RivetAdditions/ATLAS_2013_I1228693.yoda similarity index 100% rename from v2.5/generators/nlojet++/interface/data/RivetAdditions/ATLAS_2013_I1228693.yoda rename to previous/v2.5/generators/nlojet++/interface/data/RivetAdditions/ATLAS_2013_I1228693.yoda diff --git a/v2.5/generators/nlojet++/interface/data/RivetAdditions/CMS_2011_I895742.info b/previous/v2.5/generators/nlojet++/interface/data/RivetAdditions/CMS_2011_I895742.info similarity index 100% rename from v2.5/generators/nlojet++/interface/data/RivetAdditions/CMS_2011_I895742.info rename to previous/v2.5/generators/nlojet++/interface/data/RivetAdditions/CMS_2011_I895742.info diff --git a/v2.5/generators/nlojet++/interface/data/RivetAdditions/CMS_2011_I895742.plot b/previous/v2.5/generators/nlojet++/interface/data/RivetAdditions/CMS_2011_I895742.plot similarity index 100% rename from v2.5/generators/nlojet++/interface/data/RivetAdditions/CMS_2011_I895742.plot rename to previous/v2.5/generators/nlojet++/interface/data/RivetAdditions/CMS_2011_I895742.plot diff --git a/v2.5/generators/nlojet++/interface/data/RivetAdditions/CMS_2011_I895742.yoda b/previous/v2.5/generators/nlojet++/interface/data/RivetAdditions/CMS_2011_I895742.yoda similarity index 100% rename from v2.5/generators/nlojet++/interface/data/RivetAdditions/CMS_2011_I895742.yoda rename to previous/v2.5/generators/nlojet++/interface/data/RivetAdditions/CMS_2011_I895742.yoda diff --git a/v2.5/generators/nlojet++/interface/data/RivetAdditions/CMS_2013_I1208923.info b/previous/v2.5/generators/nlojet++/interface/data/RivetAdditions/CMS_2013_I1208923.info similarity index 100% rename from v2.5/generators/nlojet++/interface/data/RivetAdditions/CMS_2013_I1208923.info rename to previous/v2.5/generators/nlojet++/interface/data/RivetAdditions/CMS_2013_I1208923.info diff --git a/v2.5/generators/nlojet++/interface/data/RivetAdditions/CMS_2013_I1208923.plot b/previous/v2.5/generators/nlojet++/interface/data/RivetAdditions/CMS_2013_I1208923.plot similarity index 100% rename from v2.5/generators/nlojet++/interface/data/RivetAdditions/CMS_2013_I1208923.plot rename to previous/v2.5/generators/nlojet++/interface/data/RivetAdditions/CMS_2013_I1208923.plot diff --git a/v2.5/generators/nlojet++/interface/data/RivetAdditions/CMS_2013_I1208923.yoda b/previous/v2.5/generators/nlojet++/interface/data/RivetAdditions/CMS_2013_I1208923.yoda similarity index 100% rename from v2.5/generators/nlojet++/interface/data/RivetAdditions/CMS_2013_I1208923.yoda rename to previous/v2.5/generators/nlojet++/interface/data/RivetAdditions/CMS_2013_I1208923.yoda diff --git a/v2.5/generators/nlojet++/interface/data/RivetAdditions/CMS_2015_I1410826.info b/previous/v2.5/generators/nlojet++/interface/data/RivetAdditions/CMS_2015_I1410826.info similarity index 100% rename from v2.5/generators/nlojet++/interface/data/RivetAdditions/CMS_2015_I1410826.info rename to previous/v2.5/generators/nlojet++/interface/data/RivetAdditions/CMS_2015_I1410826.info diff --git a/v2.5/generators/nlojet++/interface/data/RivetAdditions/CMS_2015_I1410826.plot b/previous/v2.5/generators/nlojet++/interface/data/RivetAdditions/CMS_2015_I1410826.plot similarity index 100% rename from v2.5/generators/nlojet++/interface/data/RivetAdditions/CMS_2015_I1410826.plot rename to previous/v2.5/generators/nlojet++/interface/data/RivetAdditions/CMS_2015_I1410826.plot diff --git a/v2.5/generators/nlojet++/interface/data/RivetAdditions/CMS_2015_I1410826.yoda b/previous/v2.5/generators/nlojet++/interface/data/RivetAdditions/CMS_2015_I1410826.yoda similarity index 100% rename from v2.5/generators/nlojet++/interface/data/RivetAdditions/CMS_2015_I1410826.yoda rename to previous/v2.5/generators/nlojet++/interface/data/RivetAdditions/CMS_2015_I1410826.yoda diff --git a/v2.5/generators/nlojet++/interface/data/RivetAdditions/CMS_2017_I1487277.info b/previous/v2.5/generators/nlojet++/interface/data/RivetAdditions/CMS_2017_I1487277.info similarity index 100% rename from v2.5/generators/nlojet++/interface/data/RivetAdditions/CMS_2017_I1487277.info rename to previous/v2.5/generators/nlojet++/interface/data/RivetAdditions/CMS_2017_I1487277.info diff --git a/v2.5/generators/nlojet++/interface/data/RivetAdditions/CMS_2017_I1487277.plot b/previous/v2.5/generators/nlojet++/interface/data/RivetAdditions/CMS_2017_I1487277.plot similarity index 100% rename from v2.5/generators/nlojet++/interface/data/RivetAdditions/CMS_2017_I1487277.plot rename to previous/v2.5/generators/nlojet++/interface/data/RivetAdditions/CMS_2017_I1487277.plot diff --git a/v2.5/generators/nlojet++/interface/data/RivetAdditions/CMS_2017_I1487277.yoda b/previous/v2.5/generators/nlojet++/interface/data/RivetAdditions/CMS_2017_I1487277.yoda similarity index 100% rename from v2.5/generators/nlojet++/interface/data/RivetAdditions/CMS_2017_I1487277.yoda rename to previous/v2.5/generators/nlojet++/interface/data/RivetAdditions/CMS_2017_I1487277.yoda diff --git a/v2.5/generators/nlojet++/interface/data/RivetAdditions/Makefile.am b/previous/v2.5/generators/nlojet++/interface/data/RivetAdditions/Makefile.am similarity index 100% rename from v2.5/generators/nlojet++/interface/data/RivetAdditions/Makefile.am rename to previous/v2.5/generators/nlojet++/interface/data/RivetAdditions/Makefile.am diff --git a/v2.5/generators/nlojet++/interface/data/Test/fnl2342b_2mu_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/Test/fnl2342b_2mu_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/Test/fnl2342b_2mu_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/Test/fnl2342b_2mu_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/Test/fnl2342b_2x_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/Test/fnl2342b_2x_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/Test/fnl2342b_2x_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/Test/fnl2342b_2x_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/Test/fnl2342b_mu2_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/Test/fnl2342b_mu2_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/Test/fnl2342b_mu2_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/Test/fnl2342b_mu2_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/Test/fnl2342b_x2_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/Test/fnl2342b_x2_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/Test/fnl2342b_x2_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/Test/fnl2342b_x2_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/Test/fnl2342b_xcm_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/Test/fnl2342b_xcm_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/Test/fnl2342b_xcm_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/Test/fnl2342b_xcm_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/Test/fnl2342b_xl10_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/Test/fnl2342b_xl10_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/Test/fnl2342b_xl10_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/Test/fnl2342b_xl10_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/Test/fnl2342b_xlin_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/Test/fnl2342b_xlin_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/Test/fnl2342b_xlin_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/Test/fnl2342b_xlin_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/Test/fnl2342b_xll25_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/Test/fnl2342b_xll25_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/Test/fnl2342b_xll25_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/Test/fnl2342b_xll25_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/Test/fnl2342b_xln_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/Test/fnl2342b_xln_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/Test/fnl2342b_xln_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/Test/fnl2342b_xln_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/Test/fnl2342b_xon_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/Test/fnl2342b_xon_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/Test/fnl2342b_xon_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/Test/fnl2342b_xon_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/Test/fnl2342b_xsl10_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/Test/fnl2342b_xsl10_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/Test/fnl2342b_xsl10_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/Test/fnl2342b_xsl10_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/check/InclusiveNJets_InclusiveJets_fix.wrm b/previous/v2.5/generators/nlojet++/interface/data/check/InclusiveNJets_InclusiveJets_fix.wrm similarity index 100% rename from v2.5/generators/nlojet++/interface/data/check/InclusiveNJets_InclusiveJets_fix.wrm rename to previous/v2.5/generators/nlojet++/interface/data/check/InclusiveNJets_InclusiveJets_fix.wrm diff --git a/v2.5/generators/nlojet++/interface/data/check/InclusiveNJets_InclusiveJets_flex.wrm b/previous/v2.5/generators/nlojet++/interface/data/check/InclusiveNJets_InclusiveJets_flex.wrm similarity index 100% rename from v2.5/generators/nlojet++/interface/data/check/InclusiveNJets_InclusiveJets_flex.wrm rename to previous/v2.5/generators/nlojet++/interface/data/check/InclusiveNJets_InclusiveJets_flex.wrm diff --git a/v2.5/generators/nlojet++/interface/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix.wrm b/previous/v2.5/generators/nlojet++/interface/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix.wrm similarity index 100% rename from v2.5/generators/nlojet++/interface/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix.wrm rename to previous/v2.5/generators/nlojet++/interface/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix.wrm diff --git a/v2.5/generators/nlojet++/interface/data/check/Makefile.am b/previous/v2.5/generators/nlojet++/interface/data/check/Makefile.am similarity index 79% rename from v2.5/generators/nlojet++/interface/data/check/Makefile.am rename to previous/v2.5/generators/nlojet++/interface/data/check/Makefile.am index d6d04ceef0bd1e0a93870c532a1870a4efe1a02b..241d2c4f3610d2caf30c52180e74e70d8ab57888 100644 --- a/v2.5/generators/nlojet++/interface/data/check/Makefile.am +++ b/previous/v2.5/generators/nlojet++/interface/data/check/Makefile.am @@ -16,8 +16,9 @@ AUTOMAKE_OPTIONS = gnu # born.tab.gz --> fnr0001midpHT_I723509_v23_fix-hhc-born-2jet.tab.gz # nlo.tab.gz --> fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet.tab.gz dist_check_DATA = steer.str warmup.txt born.tab.gz nlo.tab.gz compare-table-helper.py \ - fix_NodeDensity.str fix_NodesPerBin.str InclusiveNJets_InclusiveJets_fix.wrm \ - flex_NodeDensity.str flex_NodesPerBin.str InclusiveNJets_InclusiveJets_flex.wrm + InclusiveNJets_InclusiveJets_fix.wrm InclusiveNJets_InclusiveJets_flex.wrm \ + fix_slx_NodeDensity.str fix_slx_NodesPerBin.str flex_slx_NodeDensity.str flex_slx_NodesPerBin.str \ + fix_lgx_NodeDensity.str fix_lgx_NodesPerBin.str flex_lgx_NodeDensity.str flex_lgx_NodesPerBin.str # Files that are required to build the project but that can be # recreated IF the necessary autotools etc. are available by: diff --git a/v2.5/generators/nlojet++/interface/data/check/born.tab.gz b/previous/v2.5/generators/nlojet++/interface/data/check/born.tab.gz similarity index 100% rename from v2.5/generators/nlojet++/interface/data/check/born.tab.gz rename to previous/v2.5/generators/nlojet++/interface/data/check/born.tab.gz diff --git a/v2.5/generators/nlojet++/interface/data/check/compare-table-helper.py b/previous/v2.5/generators/nlojet++/interface/data/check/compare-table-helper.py similarity index 100% rename from v2.5/generators/nlojet++/interface/data/check/compare-table-helper.py rename to previous/v2.5/generators/nlojet++/interface/data/check/compare-table-helper.py diff --git a/previous/v2.5/generators/nlojet++/interface/data/check/fix_lgx_NodeDensity.str b/previous/v2.5/generators/nlojet++/interface/data/check/fix_lgx_NodeDensity.str new file mode 100644 index 0000000000000000000000000000000000000000..3ad062b5e1c5917482f4ffaf3dfb012d54ee29c6 --- /dev/null +++ b/previous/v2.5/generators/nlojet++/interface/data/check/fix_lgx_NodeDensity.str @@ -0,0 +1,207 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName InclusiveJets_fix_lgx +ScenarioDescription { + "d2sigma-jet_dpT_dy_[pb_GeV]" + "CMS_Collaboration" + "Inclusive_Jet_pT" + "anti-kT_R=0.5" + "CMS-PAPER-QCD-10-011, arXiv:1106.0208, Phys. Rev. Lett. 107 (2011) 132001." + "RIVET_ID=CMS_2011_S9086218/D01-x01-y01,SPIRES_ID=9086218,INSPIRE_RECORD=902309" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.5.0" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.5 # Jet size parameter: Required for all jets +#OvThr 0.5 # Overlap threshold: Required for cone jets (Normally 10: 0.75; 11,12: 0.50) +# # Overall jet phase space +ptjmin 18. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 3.0 # Maximal jet rapidity +# Use either rapidity or pseudorapidity but not both! If both are set, only rapidity cuts are applied. +#etajmin 0.0 # Minimal jet pseudorapidity +#etajmax 3.0 # Maximal jet pseudorapidity +#Njetmin 1 # Minimal number of jets required to be in preselected phase space +# # (Normally one, i.e. single-jet inclusive) +#obs0min x.y # +#obs0max x.y # By default these values are derived from the binning in these +#obs1min x.y # observables and are set automatically. If required the min/max +#obs1max x.y # values for each of the maximally three observables can be set +#obs2min x.y # by hand. +#obs2max x.y # + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "|y|" # This defines the observables to be calculated! + "pT_[GeV]" # Implemented observables are: "|y|", "pT_[GeV]", "phi" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 2. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "pT_jet_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + # Implemented scales are: "pT_jet_[GeV]", "pT_max_[GeV]" + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +# Example for SingleDifferentialBinning: +#SingleDifferentialBinning { +# 7. 11. 18. 30. 50. 100. +#} + +# Example for DoubleDifferentialBinning: +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 846. 1684. + 0.5 1.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 790. 1684. + 1.0 1.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 1410. + 1.5 2.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 1032. + 2.0 2.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 737. + 2.5 3.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 468. +}} + +# Example for TripleDifferentialBinning: +#TripleDifferentialBinning {{ +# 1stDimLo 1stDimUp 2ndDimLo 2ndDimUp "----- Array of bin-grid for 3rd dimension -----" +# 100. 150. -1.0 0.0 7. 11. 18. 30. 50. +# 150. 200. -1.0 0.0 7. 11. 18. 30. 50. +# 200. 400. 0.0 1.5 7. 11. 18. 30. 50. +# 400. 700. 0.0 1.5 7. 11. 18. 30. 50. +# 700. 5000. 1.5 2.5 7. 11. 18. 30. 50. +# 5000. 15000. 1.5 2.5 7. 11. 18. 30. 50. +#}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 7000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). +NPDF 2 +NPDFDim 1 + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +#GlobalVerbosity DEBUG # Global output verbosity of fastNLO toolkit, def.=WARNING, +GlobalVerbosity INFO # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJets.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck true # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "log10" +X_NNodes 1 +X_NoOfNodesPerMagnitude false +X_NNodeCounting "NodeDensity" + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 +Mu1_NNodeCounting "NodesPerDim2" + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 +Mu2_NNodeCounting "NodesPerDim2" diff --git a/previous/v2.5/generators/nlojet++/interface/data/check/fix_lgx_NodesPerBin.str b/previous/v2.5/generators/nlojet++/interface/data/check/fix_lgx_NodesPerBin.str new file mode 100644 index 0000000000000000000000000000000000000000..5bcf8c518f8b4663fac6e8b65e6748e01ab00f4a --- /dev/null +++ b/previous/v2.5/generators/nlojet++/interface/data/check/fix_lgx_NodesPerBin.str @@ -0,0 +1,207 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName InclusiveJets_fix_lgx +ScenarioDescription { + "d2sigma-jet_dpT_dy_[pb_GeV]" + "CMS_Collaboration" + "Inclusive_Jet_pT" + "anti-kT_R=0.5" + "CMS-PAPER-QCD-10-011, arXiv:1106.0208, Phys. Rev. Lett. 107 (2011) 132001." + "RIVET_ID=CMS_2011_S9086218/D01-x01-y01,SPIRES_ID=9086218,INSPIRE_RECORD=902309" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.5.0" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.5 # Jet size parameter: Required for all jets +#OvThr 0.5 # Overlap threshold: Required for cone jets (Normally 10: 0.75; 11,12: 0.50) +# # Overall jet phase space +ptjmin 18. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 3.0 # Maximal jet rapidity +# Use either rapidity or pseudorapidity but not both! If both are set, only rapidity cuts are applied. +#etajmin 0.0 # Minimal jet pseudorapidity +#etajmax 3.0 # Maximal jet pseudorapidity +#Njetmin 1 # Minimal number of jets required to be in preselected phase space +# # (Normally one, i.e. single-jet inclusive) +#obs0min x.y # +#obs0max x.y # By default these values are derived from the binning in these +#obs1min x.y # observables and are set automatically. If required the min/max +#obs1max x.y # values for each of the maximally three observables can be set +#obs2min x.y # by hand. +#obs2max x.y # + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "|y|" # This defines the observables to be calculated! + "pT_[GeV]" # Implemented observables are: "|y|", "pT_[GeV]", "phi" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 2. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "pT_jet_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + # Implemented scales are: "pT_jet_[GeV]", "pT_max_[GeV]" + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +# Example for SingleDifferentialBinning: +#SingleDifferentialBinning { +# 7. 11. 18. 30. 50. 100. +#} + +# Example for DoubleDifferentialBinning: +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 846. 1684. + 0.5 1.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 790. 1684. + 1.0 1.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 1410. + 1.5 2.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 1032. + 2.0 2.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 737. + 2.5 3.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 468. +}} + +# Example for TripleDifferentialBinning: +#TripleDifferentialBinning {{ +# 1stDimLo 1stDimUp 2ndDimLo 2ndDimUp "----- Array of bin-grid for 3rd dimension -----" +# 100. 150. -1.0 0.0 7. 11. 18. 30. 50. +# 150. 200. -1.0 0.0 7. 11. 18. 30. 50. +# 200. 400. 0.0 1.5 7. 11. 18. 30. 50. +# 400. 700. 0.0 1.5 7. 11. 18. 30. 50. +# 700. 5000. 1.5 2.5 7. 11. 18. 30. 50. +# 5000. 15000. 1.5 2.5 7. 11. 18. 30. 50. +#}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 7000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). +NPDF 2 +NPDFDim 1 + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +#GlobalVerbosity DEBUG # Global output verbosity of fastNLO toolkit, def.=WARNING, +GlobalVerbosity INFO # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJets.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck true # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "log10" +X_NNodes 9 +X_NoOfNodesPerMagnitude false +X_NNodeCounting "NodesPerBin" + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 +Mu1_NNodeCounting "NodesPerBin" + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 +Mu2_NNodeCounting "NodesPerBin" diff --git a/v2.5/generators/nlojet++/interface/data/check/fix_NodeDensity.str b/previous/v2.5/generators/nlojet++/interface/data/check/fix_slx_NodeDensity.str similarity index 99% rename from v2.5/generators/nlojet++/interface/data/check/fix_NodeDensity.str rename to previous/v2.5/generators/nlojet++/interface/data/check/fix_slx_NodeDensity.str index 8d2bfbd28fe3a70230e602d356942005c7c73529..623959d051b2af13a177389a2ffbf85258a3801c 100644 --- a/v2.5/generators/nlojet++/interface/data/check/fix_NodeDensity.str +++ b/previous/v2.5/generators/nlojet++/interface/data/check/fix_slx_NodeDensity.str @@ -15,7 +15,7 @@ # Description of scenario # (Write each line of description in quotation marks) # -------------------------------------------------------------------- # -ScenarioName InclusiveJets_fix +ScenarioName InclusiveJets_fix_slx ScenarioDescription { "d2sigma-jet_dpT_dy_[pb_GeV]" "CMS_Collaboration" diff --git a/v2.5/generators/nlojet++/interface/data/check/fix_NodesPerBin.str b/previous/v2.5/generators/nlojet++/interface/data/check/fix_slx_NodesPerBin.str similarity index 99% rename from v2.5/generators/nlojet++/interface/data/check/fix_NodesPerBin.str rename to previous/v2.5/generators/nlojet++/interface/data/check/fix_slx_NodesPerBin.str index 2a45d07baa6a7f6fd66ba8a0678dbf1b001a1799..64c24414b53bd36d0cad0a8472b4eec48983fe08 100644 --- a/v2.5/generators/nlojet++/interface/data/check/fix_NodesPerBin.str +++ b/previous/v2.5/generators/nlojet++/interface/data/check/fix_slx_NodesPerBin.str @@ -15,7 +15,7 @@ # Description of scenario # (Write each line of description in quotation marks) # -------------------------------------------------------------------- # -ScenarioName InclusiveJets_fix +ScenarioName InclusiveJets_fix_slx ScenarioDescription { "d2sigma-jet_dpT_dy_[pb_GeV]" "CMS_Collaboration" diff --git a/previous/v2.5/generators/nlojet++/interface/data/check/flex_lgx_NodeDensity.str b/previous/v2.5/generators/nlojet++/interface/data/check/flex_lgx_NodeDensity.str new file mode 100644 index 0000000000000000000000000000000000000000..311bd37abc594ab0adae5d2ec988b6767c6fde8a --- /dev/null +++ b/previous/v2.5/generators/nlojet++/interface/data/check/flex_lgx_NodeDensity.str @@ -0,0 +1,207 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName InclusiveJets_flex_lgx +ScenarioDescription { + "d2sigma-jet_dpT_dy_[pb_GeV]" + "CMS_Collaboration" + "Inclusive_Jet_pT" + "anti-kT_R=0.5" + "CMS-PAPER-QCD-10-011, arXiv:1106.0208, Phys. Rev. Lett. 107 (2011) 132001." + "RIVET_ID=CMS_2011_S9086218/D01-x01-y01,SPIRES_ID=9086218,INSPIRE_RECORD=902309" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.5.0" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.5 # Jet size parameter: Required for all jets +#OvThr 0.5 # Overlap threshold: Required for cone jets (Normally 10: 0.75; 11,12: 0.50) +# # Overall jet phase space +ptjmin 18. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 3.0 # Maximal jet rapidity +# Use either rapidity or pseudorapidity but not both! If both are set, only rapidity cuts are applied. +#etajmin 0.0 # Minimal jet pseudorapidity +#etajmax 3.0 # Maximal jet pseudorapidity +#Njetmin 1 # Minimal number of jets required to be in preselected phase space +# # (Normally one, i.e. single-jet inclusive) +#obs0min x.y # +#obs0max x.y # By default these values are derived from the binning in these +#obs1min x.y # observables and are set automatically. If required the min/max +#obs1max x.y # values for each of the maximally three observables can be set +#obs2min x.y # by hand. +#obs2max x.y # + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "|y|" # This defines the observables to be calculated! + "pT_[GeV]" # Implemented observables are: "|y|", "pT_[GeV]", "phi" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 2. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "pT_jet_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + # Implemented scales are: "pT_jet_[GeV]", "pT_max_[GeV]" + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +# Example for SingleDifferentialBinning: +#SingleDifferentialBinning { +# 7. 11. 18. 30. 50. 100. +#} + +# Example for DoubleDifferentialBinning: +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 846. 1684. + 0.5 1.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 790. 1684. + 1.0 1.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 1410. + 1.5 2.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 1032. + 2.0 2.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 737. + 2.5 3.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 468. +}} + +# Example for TripleDifferentialBinning: +#TripleDifferentialBinning {{ +# 1stDimLo 1stDimUp 2ndDimLo 2ndDimUp "----- Array of bin-grid for 3rd dimension -----" +# 100. 150. -1.0 0.0 7. 11. 18. 30. 50. +# 150. 200. -1.0 0.0 7. 11. 18. 30. 50. +# 200. 400. 0.0 1.5 7. 11. 18. 30. 50. +# 400. 700. 0.0 1.5 7. 11. 18. 30. 50. +# 700. 5000. 1.5 2.5 7. 11. 18. 30. 50. +# 5000. 15000. 1.5 2.5 7. 11. 18. 30. 50. +#}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 7000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). +NPDF 2 +NPDFDim 1 + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +#GlobalVerbosity DEBUG # Global output verbosity of fastNLO toolkit, def.=WARNING, +GlobalVerbosity INFO # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJets.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable true # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck true # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "log10" +X_NNodes 1 +X_NoOfNodesPerMagnitude false +X_NNodeCounting "NodeDensity" + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 +Mu1_NNodeCounting "NodesPerDim2" + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 +Mu2_NNodeCounting "NodesPerDim2" diff --git a/previous/v2.5/generators/nlojet++/interface/data/check/flex_lgx_NodesPerBin.str b/previous/v2.5/generators/nlojet++/interface/data/check/flex_lgx_NodesPerBin.str new file mode 100644 index 0000000000000000000000000000000000000000..57f46d833422d7c72eb12bbe1ae7e4251bb709e9 --- /dev/null +++ b/previous/v2.5/generators/nlojet++/interface/data/check/flex_lgx_NodesPerBin.str @@ -0,0 +1,207 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName InclusiveJets_flex_lgx +ScenarioDescription { + "d2sigma-jet_dpT_dy_[pb_GeV]" + "CMS_Collaboration" + "Inclusive_Jet_pT" + "anti-kT_R=0.5" + "CMS-PAPER-QCD-10-011, arXiv:1106.0208, Phys. Rev. Lett. 107 (2011) 132001." + "RIVET_ID=CMS_2011_S9086218/D01-x01-y01,SPIRES_ID=9086218,INSPIRE_RECORD=902309" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.5.0" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.5 # Jet size parameter: Required for all jets +#OvThr 0.5 # Overlap threshold: Required for cone jets (Normally 10: 0.75; 11,12: 0.50) +# # Overall jet phase space +ptjmin 18. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 3.0 # Maximal jet rapidity +# Use either rapidity or pseudorapidity but not both! If both are set, only rapidity cuts are applied. +#etajmin 0.0 # Minimal jet pseudorapidity +#etajmax 3.0 # Maximal jet pseudorapidity +#Njetmin 1 # Minimal number of jets required to be in preselected phase space +# # (Normally one, i.e. single-jet inclusive) +#obs0min x.y # +#obs0max x.y # By default these values are derived from the binning in these +#obs1min x.y # observables and are set automatically. If required the min/max +#obs1max x.y # values for each of the maximally three observables can be set +#obs2min x.y # by hand. +#obs2max x.y # + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "|y|" # This defines the observables to be calculated! + "pT_[GeV]" # Implemented observables are: "|y|", "pT_[GeV]", "phi" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 2. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "pT_jet_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + # Implemented scales are: "pT_jet_[GeV]", "pT_max_[GeV]" + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +# Example for SingleDifferentialBinning: +#SingleDifferentialBinning { +# 7. 11. 18. 30. 50. 100. +#} + +# Example for DoubleDifferentialBinning: +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 846. 1684. + 0.5 1.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 790. 1684. + 1.0 1.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 1410. + 1.5 2.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 1032. + 2.0 2.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 737. + 2.5 3.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 468. +}} + +# Example for TripleDifferentialBinning: +#TripleDifferentialBinning {{ +# 1stDimLo 1stDimUp 2ndDimLo 2ndDimUp "----- Array of bin-grid for 3rd dimension -----" +# 100. 150. -1.0 0.0 7. 11. 18. 30. 50. +# 150. 200. -1.0 0.0 7. 11. 18. 30. 50. +# 200. 400. 0.0 1.5 7. 11. 18. 30. 50. +# 400. 700. 0.0 1.5 7. 11. 18. 30. 50. +# 700. 5000. 1.5 2.5 7. 11. 18. 30. 50. +# 5000. 15000. 1.5 2.5 7. 11. 18. 30. 50. +#}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 7000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). +NPDF 2 +NPDFDim 1 + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +#GlobalVerbosity DEBUG # Global output verbosity of fastNLO toolkit, def.=WARNING, +GlobalVerbosity INFO # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJets.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable true # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck true # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "log10" +X_NNodes 9 +X_NoOfNodesPerMagnitude false +X_NNodeCounting "NodesPerBin" + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 +Mu1_NNodeCounting "NodesPerBin" + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 +Mu2_NNodeCounting "NodesPerBin" diff --git a/v2.5/generators/nlojet++/interface/data/check/flex_NodeDensity.str b/previous/v2.5/generators/nlojet++/interface/data/check/flex_slx_NodeDensity.str similarity index 99% rename from v2.5/generators/nlojet++/interface/data/check/flex_NodeDensity.str rename to previous/v2.5/generators/nlojet++/interface/data/check/flex_slx_NodeDensity.str index a3eb18b3c8de0023877e00c609613f836887b5c9..fd1f5952d4fca922040ab458b7155ea4fb571d6e 100644 --- a/v2.5/generators/nlojet++/interface/data/check/flex_NodeDensity.str +++ b/previous/v2.5/generators/nlojet++/interface/data/check/flex_slx_NodeDensity.str @@ -15,7 +15,7 @@ # Description of scenario # (Write each line of description in quotation marks) # -------------------------------------------------------------------- # -ScenarioName InclusiveJets_flex +ScenarioName InclusiveJets_flex_slx ScenarioDescription { "d2sigma-jet_dpT_dy_[pb_GeV]" "CMS_Collaboration" diff --git a/v2.5/generators/nlojet++/interface/data/check/flex_NodesPerBin.str b/previous/v2.5/generators/nlojet++/interface/data/check/flex_slx_NodesPerBin.str similarity index 99% rename from v2.5/generators/nlojet++/interface/data/check/flex_NodesPerBin.str rename to previous/v2.5/generators/nlojet++/interface/data/check/flex_slx_NodesPerBin.str index 9ec5051a957ebbc440456d0b02b1074f81e5d73a..66bc3485a99c95c431a5b734687f90ccb285383b 100644 --- a/v2.5/generators/nlojet++/interface/data/check/flex_NodesPerBin.str +++ b/previous/v2.5/generators/nlojet++/interface/data/check/flex_slx_NodesPerBin.str @@ -15,7 +15,7 @@ # Description of scenario # (Write each line of description in quotation marks) # -------------------------------------------------------------------- # -ScenarioName InclusiveJets_flex +ScenarioName InclusiveJets_flex_slx ScenarioDescription { "d2sigma-jet_dpT_dy_[pb_GeV]" "CMS_Collaboration" diff --git a/v2.5/generators/nlojet++/interface/data/check/fnr0001midpHT_I723509_v23_fix-hhc-born-2jet.tab.gz b/previous/v2.5/generators/nlojet++/interface/data/check/fnr0001midpHT_I723509_v23_fix-hhc-born-2jet.tab.gz similarity index 100% rename from v2.5/generators/nlojet++/interface/data/check/fnr0001midpHT_I723509_v23_fix-hhc-born-2jet.tab.gz rename to previous/v2.5/generators/nlojet++/interface/data/check/fnr0001midpHT_I723509_v23_fix-hhc-born-2jet.tab.gz diff --git a/v2.5/generators/nlojet++/interface/data/check/fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet.tab.gz b/previous/v2.5/generators/nlojet++/interface/data/check/fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet.tab.gz similarity index 100% rename from v2.5/generators/nlojet++/interface/data/check/fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet.tab.gz rename to previous/v2.5/generators/nlojet++/interface/data/check/fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet.tab.gz diff --git a/v2.5/generators/nlojet++/interface/data/check/nlo.tab.gz b/previous/v2.5/generators/nlojet++/interface/data/check/nlo.tab.gz similarity index 100% rename from v2.5/generators/nlojet++/interface/data/check/nlo.tab.gz rename to previous/v2.5/generators/nlojet++/interface/data/check/nlo.tab.gz diff --git a/v2.5/generators/nlojet++/interface/data/check/steer.str b/previous/v2.5/generators/nlojet++/interface/data/check/steer.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/check/steer.str rename to previous/v2.5/generators/nlojet++/interface/data/check/steer.str diff --git a/v2.5/generators/nlojet++/interface/data/check/warmup.txt b/previous/v2.5/generators/nlojet++/interface/data/check/warmup.txt similarity index 100% rename from v2.5/generators/nlojet++/interface/data/check/warmup.txt rename to previous/v2.5/generators/nlojet++/interface/data/check/warmup.txt diff --git a/v2.5/generators/nlojet++/interface/data/dev/fnl2380ak57v22.cc b/previous/v2.5/generators/nlojet++/interface/data/dev/fnl2380ak57v22.cc similarity index 100% rename from v2.5/generators/nlojet++/interface/data/dev/fnl2380ak57v22.cc rename to previous/v2.5/generators/nlojet++/interface/data/dev/fnl2380ak57v22.cc diff --git a/v2.5/generators/nlojet++/interface/data/dev/fnl2380ak57v22.str b/previous/v2.5/generators/nlojet++/interface/data/dev/fnl2380ak57v22.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/dev/fnl2380ak57v22.str rename to previous/v2.5/generators/nlojet++/interface/data/dev/fnl2380ak57v22.str diff --git a/v2.5/generators/nlojet++/interface/data/dev/fnl2522adiff_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/dev/fnl2522adiff_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/dev/fnl2522adiff_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/dev/fnl2522adiff_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/dev/fnl3232e_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/dev/fnl3232e_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/dev/fnl3232e_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/dev/fnl3232e_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/dev/fnl3732dena_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/dev/fnl3732dena_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/dev/fnl3732dena_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/dev/fnl3732dena_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/dev/fnl3732denht_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/dev/fnl3732denht_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/dev/fnl3732denht_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/dev/fnl3732denht_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/dev/fnl3732denhta_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/dev/fnl3732denhta_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/dev/fnl3732denhta_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/dev/fnl3732denhta_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/dev/fnl3732numa_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/dev/fnl3732numa_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/dev/fnl3732numa_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/dev/fnl3732numa_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/dev/fnl3732numht_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/dev/fnl3732numht_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/dev/fnl3732numht_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/dev/fnl3732numht_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/dev/fnl3732numhta_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/dev/fnl3732numhta_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/dev/fnl3732numhta_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/dev/fnl3732numhta_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/dev/fnl4350b_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/dev/fnl4350b_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/dev/fnl4350b_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/dev/fnl4350b_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/dev/fnl5332f_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/dev/fnl5332f_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/dev/fnl5332f_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/dev/fnl5332f_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/dev/fnl5332g_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/dev/fnl5332g_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/dev/fnl5332g_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/dev/fnl5332g_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/dev/fnl5332h_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/dev/fnl5332h_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/dev/fnl5332h_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/dev/fnl5332h_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/dev/fnl5350c_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/dev/fnl5350c_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/dev/fnl5350c_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/dev/fnl5350c_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/dev/fnl5350eta0v22.str b/previous/v2.5/generators/nlojet++/interface/data/dev/fnl5350eta0v22.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/dev/fnl5350eta0v22.str rename to previous/v2.5/generators/nlojet++/interface/data/dev/fnl5350eta0v22.str diff --git a/v2.5/generators/nlojet++/interface/data/dev/fnl5362g_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/dev/fnl5362g_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/dev/fnl5362g_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/dev/fnl5362g_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/dev/fnl5362h_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/dev/fnl5362h_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/dev/fnl5362h_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/dev/fnl5362h_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/dev/fnl5622i_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/dev/fnl5622i_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/dev/fnl5622i_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/dev/fnl5622i_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/dev/fnl5662i_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/dev/fnl5662i_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/dev/fnl5662i_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/dev/fnl5662i_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/dev/fnl5662ia_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/dev/fnl5662ia_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/dev/fnl5662ia_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/dev/fnl5662ia_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/dev/fnl5672i_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/dev/fnl5672i_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/dev/fnl5672i_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/dev/fnl5672i_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/dev/fnl5732dena_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/dev/fnl5732dena_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/dev/fnl5732dena_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/dev/fnl5732dena_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/dev/fnl5732numa_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/dev/fnl5732numa_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/dev/fnl5732numa_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/dev/fnl5732numa_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/dev/fnl5932numa_v23_fix.str b/previous/v2.5/generators/nlojet++/interface/data/dev/fnl5932numa_v23_fix.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/dev/fnl5932numa_v23_fix.str rename to previous/v2.5/generators/nlojet++/interface/data/dev/fnl5932numa_v23_fix.str diff --git a/v2.5/generators/nlojet++/interface/data/dev/fnl_triplediffjets.str b/previous/v2.5/generators/nlojet++/interface/data/dev/fnl_triplediffjets.str similarity index 100% rename from v2.5/generators/nlojet++/interface/data/dev/fnl_triplediffjets.str rename to previous/v2.5/generators/nlojet++/interface/data/dev/fnl_triplediffjets.str diff --git a/v2.5/generators/nlojet++/interface/hadron/InclusiveNJetDiffs.cc b/previous/v2.5/generators/nlojet++/interface/hadron/InclusiveNJetDiffs.cc similarity index 100% rename from v2.5/generators/nlojet++/interface/hadron/InclusiveNJetDiffs.cc rename to previous/v2.5/generators/nlojet++/interface/hadron/InclusiveNJetDiffs.cc diff --git a/v2.5/generators/nlojet++/interface/hadron/InclusiveNJetEvents.cc b/previous/v2.5/generators/nlojet++/interface/hadron/InclusiveNJetEvents.cc similarity index 100% rename from v2.5/generators/nlojet++/interface/hadron/InclusiveNJetEvents.cc rename to previous/v2.5/generators/nlojet++/interface/hadron/InclusiveNJetEvents.cc diff --git a/v2.5/generators/nlojet++/interface/hadron/InclusiveNJetPairs.cc b/previous/v2.5/generators/nlojet++/interface/hadron/InclusiveNJetPairs.cc similarity index 100% rename from v2.5/generators/nlojet++/interface/hadron/InclusiveNJetPairs.cc rename to previous/v2.5/generators/nlojet++/interface/hadron/InclusiveNJetPairs.cc diff --git a/v2.5/generators/nlojet++/interface/hadron/InclusiveNJets.cc b/previous/v2.5/generators/nlojet++/interface/hadron/InclusiveNJets.cc similarity index 100% rename from v2.5/generators/nlojet++/interface/hadron/InclusiveNJets.cc rename to previous/v2.5/generators/nlojet++/interface/hadron/InclusiveNJets.cc diff --git a/v2.5/generators/nlojet++/interface/hadron/InclusiveNJets_new.cc b/previous/v2.5/generators/nlojet++/interface/hadron/InclusiveNJets_new.cc similarity index 100% rename from v2.5/generators/nlojet++/interface/hadron/InclusiveNJets_new.cc rename to previous/v2.5/generators/nlojet++/interface/hadron/InclusiveNJets_new.cc diff --git a/v2.5/generators/nlojet++/interface/hadron/Makefile.am b/previous/v2.5/generators/nlojet++/interface/hadron/Makefile.am similarity index 100% rename from v2.5/generators/nlojet++/interface/hadron/Makefile.am rename to previous/v2.5/generators/nlojet++/interface/hadron/Makefile.am diff --git a/v2.5/generators/nlojet++/interface/hadron/fastNLOjetpp.cc b/previous/v2.5/generators/nlojet++/interface/hadron/fastNLOjetpp.cc similarity index 100% rename from v2.5/generators/nlojet++/interface/hadron/fastNLOjetpp.cc rename to previous/v2.5/generators/nlojet++/interface/hadron/fastNLOjetpp.cc diff --git a/v2.5/generators/nlojet++/interface/include/Makefile.am b/previous/v2.5/generators/nlojet++/interface/include/Makefile.am similarity index 100% rename from v2.5/generators/nlojet++/interface/include/Makefile.am rename to previous/v2.5/generators/nlojet++/interface/include/Makefile.am diff --git a/v2.5/generators/nlojet++/interface/include/fnlo_int_nlojet/Makefile.am b/previous/v2.5/generators/nlojet++/interface/include/fnlo_int_nlojet/Makefile.am similarity index 100% rename from v2.5/generators/nlojet++/interface/include/fnlo_int_nlojet/Makefile.am rename to previous/v2.5/generators/nlojet++/interface/include/fnlo_int_nlojet/Makefile.am diff --git a/v2.5/generators/nlojet++/interface/include/fnlo_int_nlojet/cone-e.h b/previous/v2.5/generators/nlojet++/interface/include/fnlo_int_nlojet/cone-e.h similarity index 100% rename from v2.5/generators/nlojet++/interface/include/fnlo_int_nlojet/cone-e.h rename to previous/v2.5/generators/nlojet++/interface/include/fnlo_int_nlojet/cone-e.h diff --git a/v2.5/generators/nlojet++/interface/include/fnlo_int_nlojet/cone-et.h b/previous/v2.5/generators/nlojet++/interface/include/fnlo_int_nlojet/cone-et.h similarity index 100% rename from v2.5/generators/nlojet++/interface/include/fnlo_int_nlojet/cone-et.h rename to previous/v2.5/generators/nlojet++/interface/include/fnlo_int_nlojet/cone-et.h diff --git a/v2.5/generators/nlojet++/interface/include/fnlo_int_nlojet/fastNLOjetpp.h b/previous/v2.5/generators/nlojet++/interface/include/fnlo_int_nlojet/fastNLOjetpp.h similarity index 100% rename from v2.5/generators/nlojet++/interface/include/fnlo_int_nlojet/fastNLOjetpp.h rename to previous/v2.5/generators/nlojet++/interface/include/fnlo_int_nlojet/fastNLOjetpp.h diff --git a/v2.5/generators/nlojet++/interface/include/fnlo_int_nlojet/fastjet-jets.h b/previous/v2.5/generators/nlojet++/interface/include/fnlo_int_nlojet/fastjet-jets.h similarity index 100% rename from v2.5/generators/nlojet++/interface/include/fnlo_int_nlojet/fastjet-jets.h rename to previous/v2.5/generators/nlojet++/interface/include/fnlo_int_nlojet/fastjet-jets.h diff --git a/v2.5/generators/nlojet++/interface/include/fnlo_int_nlojet/fj-jets.h b/previous/v2.5/generators/nlojet++/interface/include/fnlo_int_nlojet/fj-jets.h similarity index 100% rename from v2.5/generators/nlojet++/interface/include/fnlo_int_nlojet/fj-jets.h rename to previous/v2.5/generators/nlojet++/interface/include/fnlo_int_nlojet/fj-jets.h diff --git a/v2.5/generators/nlojet++/interface/include/fnlo_int_nlojet/fnlo_int_hhc_nlojet.h b/previous/v2.5/generators/nlojet++/interface/include/fnlo_int_nlojet/fnlo_int_hhc_nlojet.h similarity index 100% rename from v2.5/generators/nlojet++/interface/include/fnlo_int_nlojet/fnlo_int_hhc_nlojet.h rename to previous/v2.5/generators/nlojet++/interface/include/fnlo_int_nlojet/fnlo_int_hhc_nlojet.h diff --git a/v2.5/generators/nlojet++/interface/include/fnlo_int_nlojet/kt-e.h b/previous/v2.5/generators/nlojet++/interface/include/fnlo_int_nlojet/kt-e.h similarity index 100% rename from v2.5/generators/nlojet++/interface/include/fnlo_int_nlojet/kt-e.h rename to previous/v2.5/generators/nlojet++/interface/include/fnlo_int_nlojet/kt-e.h diff --git a/v2.5/generators/nlojet++/interface/include/fnlo_int_nlojet/pdf-hhc-dummy.h b/previous/v2.5/generators/nlojet++/interface/include/fnlo_int_nlojet/pdf-hhc-dummy.h similarity index 100% rename from v2.5/generators/nlojet++/interface/include/fnlo_int_nlojet/pdf-hhc-dummy.h rename to previous/v2.5/generators/nlojet++/interface/include/fnlo_int_nlojet/pdf-hhc-dummy.h diff --git a/v2.5/generators/nlojet++/interface/jetalgos/Makefile.am b/previous/v2.5/generators/nlojet++/interface/jetalgos/Makefile.am similarity index 100% rename from v2.5/generators/nlojet++/interface/jetalgos/Makefile.am rename to previous/v2.5/generators/nlojet++/interface/jetalgos/Makefile.am diff --git a/v2.5/generators/nlojet++/interface/jetalgos/cone-e.cc b/previous/v2.5/generators/nlojet++/interface/jetalgos/cone-e.cc similarity index 100% rename from v2.5/generators/nlojet++/interface/jetalgos/cone-e.cc rename to previous/v2.5/generators/nlojet++/interface/jetalgos/cone-e.cc diff --git a/v2.5/generators/nlojet++/interface/jetalgos/cone-et.cc b/previous/v2.5/generators/nlojet++/interface/jetalgos/cone-et.cc similarity index 100% rename from v2.5/generators/nlojet++/interface/jetalgos/cone-et.cc rename to previous/v2.5/generators/nlojet++/interface/jetalgos/cone-et.cc diff --git a/v2.5/generators/nlojet++/interface/jetalgos/fastjet-jets.cc b/previous/v2.5/generators/nlojet++/interface/jetalgos/fastjet-jets.cc similarity index 100% rename from v2.5/generators/nlojet++/interface/jetalgos/fastjet-jets.cc rename to previous/v2.5/generators/nlojet++/interface/jetalgos/fastjet-jets.cc diff --git a/v2.5/generators/nlojet++/interface/jetalgos/fj-jets.cc b/previous/v2.5/generators/nlojet++/interface/jetalgos/fj-jets.cc similarity index 100% rename from v2.5/generators/nlojet++/interface/jetalgos/fj-jets.cc rename to previous/v2.5/generators/nlojet++/interface/jetalgos/fj-jets.cc diff --git a/v2.5/generators/nlojet++/interface/jetalgos/kt-e.cc b/previous/v2.5/generators/nlojet++/interface/jetalgos/kt-e.cc similarity index 100% rename from v2.5/generators/nlojet++/interface/jetalgos/kt-e.cc rename to previous/v2.5/generators/nlojet++/interface/jetalgos/kt-e.cc diff --git a/v2.5/generators/nlojet++/interface/tools/Makefile.am b/previous/v2.5/generators/nlojet++/interface/tools/Makefile.am similarity index 100% rename from v2.5/generators/nlojet++/interface/tools/Makefile.am rename to previous/v2.5/generators/nlojet++/interface/tools/Makefile.am diff --git a/v2.5/generators/nlojet++/interface/tools/fnlo_int_hhc_nlojet.cc b/previous/v2.5/generators/nlojet++/interface/tools/fnlo_int_hhc_nlojet.cc similarity index 100% rename from v2.5/generators/nlojet++/interface/tools/fnlo_int_hhc_nlojet.cc rename to previous/v2.5/generators/nlojet++/interface/tools/fnlo_int_hhc_nlojet.cc diff --git a/v2.5/generators/nlojet++/interface/tools/pdf-hhc-dummy.cc b/previous/v2.5/generators/nlojet++/interface/tools/pdf-hhc-dummy.cc similarity index 100% rename from v2.5/generators/nlojet++/interface/tools/pdf-hhc-dummy.cc rename to previous/v2.5/generators/nlojet++/interface/tools/pdf-hhc-dummy.cc diff --git a/v2.5/generators/nlojet++/m4.tar.gz b/previous/v2.5/generators/nlojet++/m4.tar.gz similarity index 100% rename from v2.5/generators/nlojet++/m4.tar.gz rename to previous/v2.5/generators/nlojet++/m4.tar.gz diff --git a/v2.5/generators/nlojet++/m4/ax_check_zlib.m4 b/previous/v2.5/generators/nlojet++/m4/ax_check_zlib.m4 similarity index 100% rename from v2.5/generators/nlojet++/m4/ax_check_zlib.m4 rename to previous/v2.5/generators/nlojet++/m4/ax_check_zlib.m4 diff --git a/v2.5/generators/nlojet++/m4/ax_cxx_compile_stdcxx.m4 b/previous/v2.5/generators/nlojet++/m4/ax_cxx_compile_stdcxx.m4 similarity index 100% rename from v2.5/generators/nlojet++/m4/ax_cxx_compile_stdcxx.m4 rename to previous/v2.5/generators/nlojet++/m4/ax_cxx_compile_stdcxx.m4 diff --git a/v2.5/generators/nlojet++/m4/ax_cxx_compile_stdcxx_11.m4 b/previous/v2.5/generators/nlojet++/m4/ax_cxx_compile_stdcxx_11.m4 similarity index 100% rename from v2.5/generators/nlojet++/m4/ax_cxx_compile_stdcxx_11.m4 rename to previous/v2.5/generators/nlojet++/m4/ax_cxx_compile_stdcxx_11.m4 diff --git a/v2.5/generators/nlojet++/m4/ax_cxx_compile_stdcxx_17.m4 b/previous/v2.5/generators/nlojet++/m4/ax_cxx_compile_stdcxx_17.m4 similarity index 100% rename from v2.5/generators/nlojet++/m4/ax_cxx_compile_stdcxx_17.m4 rename to previous/v2.5/generators/nlojet++/m4/ax_cxx_compile_stdcxx_17.m4 diff --git a/v2.5/generators/nlojet++/m4/ax_prog_doxygen.m4 b/previous/v2.5/generators/nlojet++/m4/ax_prog_doxygen.m4 similarity index 100% rename from v2.5/generators/nlojet++/m4/ax_prog_doxygen.m4 rename to previous/v2.5/generators/nlojet++/m4/ax_prog_doxygen.m4 diff --git a/v2.5/generators/nlojet++/m4/ax_python_devel.m4 b/previous/v2.5/generators/nlojet++/m4/ax_python_devel.m4 similarity index 100% rename from v2.5/generators/nlojet++/m4/ax_python_devel.m4 rename to previous/v2.5/generators/nlojet++/m4/ax_python_devel.m4 diff --git a/v2.5/generators/nlojet++/m4/ax_require_defined.m4 b/previous/v2.5/generators/nlojet++/m4/ax_require_defined.m4 similarity index 100% rename from v2.5/generators/nlojet++/m4/ax_require_defined.m4 rename to previous/v2.5/generators/nlojet++/m4/ax_require_defined.m4 diff --git a/v2.5/generators/nlojet++/mygitcl b/previous/v2.5/generators/nlojet++/mygitcl similarity index 100% rename from v2.5/generators/nlojet++/mygitcl rename to previous/v2.5/generators/nlojet++/mygitcl diff --git a/v2.5/generators/nlojet++/patches/nlojet++-4.1.3/nlo-core/bits/nlo-basic_user.h b/previous/v2.5/generators/nlojet++/patches/nlojet++-4.1.3/nlo-core/bits/nlo-basic_user.h similarity index 100% rename from v2.5/generators/nlojet++/patches/nlojet++-4.1.3/nlo-core/bits/nlo-basic_user.h rename to previous/v2.5/generators/nlojet++/patches/nlojet++-4.1.3/nlo-core/bits/nlo-basic_user.h diff --git a/v2.5/generators/nlojet++/patches/nlojet++-4.1.3/nlo-core/bits/nlo-process_i1f0.h b/previous/v2.5/generators/nlojet++/patches/nlojet++-4.1.3/nlo-core/bits/nlo-process_i1f0.h similarity index 100% rename from v2.5/generators/nlojet++/patches/nlojet++-4.1.3/nlo-core/bits/nlo-process_i1f0.h rename to previous/v2.5/generators/nlojet++/patches/nlojet++-4.1.3/nlo-core/bits/nlo-process_i1f0.h diff --git a/v2.5/generators/nlojet++/patches/nlojet++-4.1.3/nlo-core/bits/nlo-process_i2f0.h b/previous/v2.5/generators/nlojet++/patches/nlojet++-4.1.3/nlo-core/bits/nlo-process_i2f0.h similarity index 100% rename from v2.5/generators/nlojet++/patches/nlojet++-4.1.3/nlo-core/bits/nlo-process_i2f0.h rename to previous/v2.5/generators/nlojet++/patches/nlojet++-4.1.3/nlo-core/bits/nlo-process_i2f0.h diff --git a/v2.5/generators/nlojet++/patches/nlojet++-4.1.3/nlo-core/split.cc b/previous/v2.5/generators/nlojet++/patches/nlojet++-4.1.3/nlo-core/split.cc similarity index 100% rename from v2.5/generators/nlojet++/patches/nlojet++-4.1.3/nlo-core/split.cc rename to previous/v2.5/generators/nlojet++/patches/nlojet++-4.1.3/nlo-core/split.cc diff --git a/v2.5/generators/nlojet++/patches/nlojet++-4.1.3/proc-dis/bits/dis-process.h b/previous/v2.5/generators/nlojet++/patches/nlojet++-4.1.3/proc-dis/bits/dis-process.h similarity index 100% rename from v2.5/generators/nlojet++/patches/nlojet++-4.1.3/proc-dis/bits/dis-process.h rename to previous/v2.5/generators/nlojet++/patches/nlojet++-4.1.3/proc-dis/bits/dis-process.h diff --git a/v2.5/generators/nlojet++/patches/nlojet++-4.1.3/proc-hhc/bits/hhc-process.h b/previous/v2.5/generators/nlojet++/patches/nlojet++-4.1.3/proc-hhc/bits/hhc-process.h similarity index 100% rename from v2.5/generators/nlojet++/patches/nlojet++-4.1.3/proc-hhc/bits/hhc-process.h rename to previous/v2.5/generators/nlojet++/patches/nlojet++-4.1.3/proc-hhc/bits/hhc-process.h diff --git a/v2.5/generators/nlojet++/patches/nlojet++-4.1.3/proc-hhc/hhc2jet.cc b/previous/v2.5/generators/nlojet++/patches/nlojet++-4.1.3/proc-hhc/hhc2jet.cc similarity index 100% rename from v2.5/generators/nlojet++/patches/nlojet++-4.1.3/proc-hhc/hhc2jet.cc rename to previous/v2.5/generators/nlojet++/patches/nlojet++-4.1.3/proc-hhc/hhc2jet.cc diff --git a/v2.5/generators/nlojet++/patches/nlojet++-4.1.3/proc-hhc/hhc3jet.cc b/previous/v2.5/generators/nlojet++/patches/nlojet++-4.1.3/proc-hhc/hhc3jet.cc similarity index 100% rename from v2.5/generators/nlojet++/patches/nlojet++-4.1.3/proc-hhc/hhc3jet.cc rename to previous/v2.5/generators/nlojet++/patches/nlojet++-4.1.3/proc-hhc/hhc3jet.cc diff --git a/v2.5/generators/nlojet++/patches/nlojet++-4.1.3/proc-hhc/hhc4jet.cc b/previous/v2.5/generators/nlojet++/patches/nlojet++-4.1.3/proc-hhc/hhc4jet.cc similarity index 100% rename from v2.5/generators/nlojet++/patches/nlojet++-4.1.3/proc-hhc/hhc4jet.cc rename to previous/v2.5/generators/nlojet++/patches/nlojet++-4.1.3/proc-hhc/hhc4jet.cc diff --git a/v2.5/generators/nlojet++/patches/nlojet++-4.1.3/src/main_calc.cc b/previous/v2.5/generators/nlojet++/patches/nlojet++-4.1.3/src/main_calc.cc similarity index 100% rename from v2.5/generators/nlojet++/patches/nlojet++-4.1.3/src/main_calc.cc rename to previous/v2.5/generators/nlojet++/patches/nlojet++-4.1.3/src/main_calc.cc diff --git a/v2.5/generators/nlojet++/patches/nlojet++.patch b/previous/v2.5/generators/nlojet++/patches/nlojet++.patch similarity index 100% rename from v2.5/generators/nlojet++/patches/nlojet++.patch rename to previous/v2.5/generators/nlojet++/patches/nlojet++.patch diff --git a/v2.5/generators/sherpa/ATLAS_2012_I1082936/MCgrid_ATLAS_2012_I1082936.str b/previous/v2.5/generators/sherpa/ATLAS_2012_I1082936/MCgrid_ATLAS_2012_I1082936.str similarity index 100% rename from v2.5/generators/sherpa/ATLAS_2012_I1082936/MCgrid_ATLAS_2012_I1082936.str rename to previous/v2.5/generators/sherpa/ATLAS_2012_I1082936/MCgrid_ATLAS_2012_I1082936.str diff --git a/v2.5/generators/sherpa/ATLAS_2012_I1082936/Makefile b/previous/v2.5/generators/sherpa/ATLAS_2012_I1082936/Makefile similarity index 100% rename from v2.5/generators/sherpa/ATLAS_2012_I1082936/Makefile rename to previous/v2.5/generators/sherpa/ATLAS_2012_I1082936/Makefile diff --git a/v2.5/generators/sherpa/ATLAS_2012_I1082936/Process/Comix.db b/previous/v2.5/generators/sherpa/ATLAS_2012_I1082936/Process/Comix.db similarity index 100% rename from v2.5/generators/sherpa/ATLAS_2012_I1082936/Process/Comix.db rename to previous/v2.5/generators/sherpa/ATLAS_2012_I1082936/Process/Comix.db diff --git a/v2.5/generators/sherpa/ATLAS_2012_I1082936/Results.db b/previous/v2.5/generators/sherpa/ATLAS_2012_I1082936/Results.db similarity index 100% rename from v2.5/generators/sherpa/ATLAS_2012_I1082936/Results.db rename to previous/v2.5/generators/sherpa/ATLAS_2012_I1082936/Results.db diff --git a/v2.5/generators/sherpa/ATLAS_2012_I1082936/Run_prod.dat b/previous/v2.5/generators/sherpa/ATLAS_2012_I1082936/Run_prod.dat similarity index 100% rename from v2.5/generators/sherpa/ATLAS_2012_I1082936/Run_prod.dat rename to previous/v2.5/generators/sherpa/ATLAS_2012_I1082936/Run_prod.dat diff --git a/v2.5/generators/sherpa/ATLAS_2012_I1082936/analysis/MCgrid_ATLAS_2012_I1082936.cc b/previous/v2.5/generators/sherpa/ATLAS_2012_I1082936/analysis/MCgrid_ATLAS_2012_I1082936.cc similarity index 100% rename from v2.5/generators/sherpa/ATLAS_2012_I1082936/analysis/MCgrid_ATLAS_2012_I1082936.cc rename to previous/v2.5/generators/sherpa/ATLAS_2012_I1082936/analysis/MCgrid_ATLAS_2012_I1082936.cc diff --git a/v2.5/generators/sherpa/ATLAS_2012_I1082936/analysis/MCgrid_ATLAS_2012_I1082936.cc.orig b/previous/v2.5/generators/sherpa/ATLAS_2012_I1082936/analysis/MCgrid_ATLAS_2012_I1082936.cc.orig similarity index 100% rename from v2.5/generators/sherpa/ATLAS_2012_I1082936/analysis/MCgrid_ATLAS_2012_I1082936.cc.orig rename to previous/v2.5/generators/sherpa/ATLAS_2012_I1082936/analysis/MCgrid_ATLAS_2012_I1082936.cc.orig diff --git a/v2.5/generators/sherpa/ATLAS_2012_I1082936/analysis/MCgrid_ATLAS_2012_I1082936.info b/previous/v2.5/generators/sherpa/ATLAS_2012_I1082936/analysis/MCgrid_ATLAS_2012_I1082936.info similarity index 100% rename from v2.5/generators/sherpa/ATLAS_2012_I1082936/analysis/MCgrid_ATLAS_2012_I1082936.info rename to previous/v2.5/generators/sherpa/ATLAS_2012_I1082936/analysis/MCgrid_ATLAS_2012_I1082936.info diff --git a/v2.5/generators/sherpa/ATLAS_2012_I1082936/analysis/MCgrid_ATLAS_2012_I1082936.plot b/previous/v2.5/generators/sherpa/ATLAS_2012_I1082936/analysis/MCgrid_ATLAS_2012_I1082936.plot similarity index 100% rename from v2.5/generators/sherpa/ATLAS_2012_I1082936/analysis/MCgrid_ATLAS_2012_I1082936.plot rename to previous/v2.5/generators/sherpa/ATLAS_2012_I1082936/analysis/MCgrid_ATLAS_2012_I1082936.plot diff --git a/v2.5/generators/sherpa/ATLAS_2012_I1082936/analysis/MCgrid_ATLAS_2012_I1082936.yoda b/previous/v2.5/generators/sherpa/ATLAS_2012_I1082936/analysis/MCgrid_ATLAS_2012_I1082936.yoda similarity index 100% rename from v2.5/generators/sherpa/ATLAS_2012_I1082936/analysis/MCgrid_ATLAS_2012_I1082936.yoda rename to previous/v2.5/generators/sherpa/ATLAS_2012_I1082936/analysis/MCgrid_ATLAS_2012_I1082936.yoda diff --git a/v2.5/generators/sherpa/ATLAS_2012_I1082936/analysis/templates/MCgrid_ATLAS_2012_I1082936.cc b/previous/v2.5/generators/sherpa/ATLAS_2012_I1082936/analysis/templates/MCgrid_ATLAS_2012_I1082936.cc similarity index 100% rename from v2.5/generators/sherpa/ATLAS_2012_I1082936/analysis/templates/MCgrid_ATLAS_2012_I1082936.cc rename to previous/v2.5/generators/sherpa/ATLAS_2012_I1082936/analysis/templates/MCgrid_ATLAS_2012_I1082936.cc diff --git a/v2.5/generators/sherpa/ATLAS_2012_I1082936/analysis/templates/MCgrid_ATLAS_2012_I1082936.info b/previous/v2.5/generators/sherpa/ATLAS_2012_I1082936/analysis/templates/MCgrid_ATLAS_2012_I1082936.info similarity index 100% rename from v2.5/generators/sherpa/ATLAS_2012_I1082936/analysis/templates/MCgrid_ATLAS_2012_I1082936.info rename to previous/v2.5/generators/sherpa/ATLAS_2012_I1082936/analysis/templates/MCgrid_ATLAS_2012_I1082936.info diff --git a/v2.5/generators/sherpa/ATLAS_2012_I1082936/analysis/templates/MCgrid_ATLAS_2012_I1082936.plot b/previous/v2.5/generators/sherpa/ATLAS_2012_I1082936/analysis/templates/MCgrid_ATLAS_2012_I1082936.plot similarity index 100% rename from v2.5/generators/sherpa/ATLAS_2012_I1082936/analysis/templates/MCgrid_ATLAS_2012_I1082936.plot rename to previous/v2.5/generators/sherpa/ATLAS_2012_I1082936/analysis/templates/MCgrid_ATLAS_2012_I1082936.plot diff --git a/v2.5/generators/sherpa/ATLAS_2012_I1082936/analysis/templates/MCgrid_ATLAS_2012_I1082936.yoda b/previous/v2.5/generators/sherpa/ATLAS_2012_I1082936/analysis/templates/MCgrid_ATLAS_2012_I1082936.yoda similarity index 100% rename from v2.5/generators/sherpa/ATLAS_2012_I1082936/analysis/templates/MCgrid_ATLAS_2012_I1082936.yoda rename to previous/v2.5/generators/sherpa/ATLAS_2012_I1082936/analysis/templates/MCgrid_ATLAS_2012_I1082936.yoda diff --git a/v2.5/generators/sherpa/ATLAS_2012_I1082936/basic.str b/previous/v2.5/generators/sherpa/ATLAS_2012_I1082936/basic.str similarity index 100% rename from v2.5/generators/sherpa/ATLAS_2012_I1082936/basic.str rename to previous/v2.5/generators/sherpa/ATLAS_2012_I1082936/basic.str diff --git a/v2.5/generators/sherpa/ATLAS_2012_I1082936/mcgrid/MCgrid_ATLAS_2012_I1082936/phasespace/d04-x01-y01.txt b/previous/v2.5/generators/sherpa/ATLAS_2012_I1082936/mcgrid/MCgrid_ATLAS_2012_I1082936/phasespace/d04-x01-y01.txt similarity index 100% rename from v2.5/generators/sherpa/ATLAS_2012_I1082936/mcgrid/MCgrid_ATLAS_2012_I1082936/phasespace/d04-x01-y01.txt rename to previous/v2.5/generators/sherpa/ATLAS_2012_I1082936/mcgrid/MCgrid_ATLAS_2012_I1082936/phasespace/d04-x01-y01.txt diff --git a/v2.5/generators/sherpa/ATLAS_2012_I1082936/mcgrid/basic.str.evtcount b/previous/v2.5/generators/sherpa/ATLAS_2012_I1082936/mcgrid/basic.str.evtcount similarity index 100% rename from v2.5/generators/sherpa/ATLAS_2012_I1082936/mcgrid/basic.str.evtcount rename to previous/v2.5/generators/sherpa/ATLAS_2012_I1082936/mcgrid/basic.str.evtcount diff --git a/v2.5/generators/sherpa/ATLAS_2012_I1082936/run_steps.csh b/previous/v2.5/generators/sherpa/ATLAS_2012_I1082936/run_steps.csh similarity index 100% rename from v2.5/generators/sherpa/ATLAS_2012_I1082936/run_steps.csh rename to previous/v2.5/generators/sherpa/ATLAS_2012_I1082936/run_steps.csh diff --git a/v2.5/toolkit/.gitignore b/previous/v2.5/toolkit/.gitignore similarity index 100% rename from v2.5/toolkit/.gitignore rename to previous/v2.5/toolkit/.gitignore diff --git a/v2.5/toolkit/AUTHORS b/previous/v2.5/toolkit/AUTHORS similarity index 100% rename from v2.5/toolkit/AUTHORS rename to previous/v2.5/toolkit/AUTHORS diff --git a/v2.5/toolkit/COPYING b/previous/v2.5/toolkit/COPYING similarity index 100% rename from v2.5/toolkit/COPYING rename to previous/v2.5/toolkit/COPYING diff --git a/v2.5/toolkit/ChangeLog b/previous/v2.5/toolkit/ChangeLog similarity index 100% rename from v2.5/toolkit/ChangeLog rename to previous/v2.5/toolkit/ChangeLog diff --git a/v2.5/toolkit/Makefile.am b/previous/v2.5/toolkit/Makefile.am similarity index 100% rename from v2.5/toolkit/Makefile.am rename to previous/v2.5/toolkit/Makefile.am diff --git a/v2.5/toolkit/NEWS b/previous/v2.5/toolkit/NEWS similarity index 100% rename from v2.5/toolkit/NEWS rename to previous/v2.5/toolkit/NEWS diff --git a/v2.5/toolkit/README b/previous/v2.5/toolkit/README similarity index 100% rename from v2.5/toolkit/README rename to previous/v2.5/toolkit/README diff --git a/v2.5/toolkit/TODO b/previous/v2.5/toolkit/TODO similarity index 100% rename from v2.5/toolkit/TODO rename to previous/v2.5/toolkit/TODO diff --git a/v2.5/toolkit/aminclude.am b/previous/v2.5/toolkit/aminclude.am similarity index 100% rename from v2.5/toolkit/aminclude.am rename to previous/v2.5/toolkit/aminclude.am diff --git a/v2.5/toolkit/check/.gitignore b/previous/v2.5/toolkit/check/.gitignore similarity index 100% rename from v2.5/toolkit/check/.gitignore rename to previous/v2.5/toolkit/check/.gitignore diff --git a/v2.5/toolkit/check/Makefile.am b/previous/v2.5/toolkit/check/Makefile.am similarity index 100% rename from v2.5/toolkit/check/Makefile.am rename to previous/v2.5/toolkit/check/Makefile.am diff --git a/v2.5/toolkit/check/fnlo-tk-cattest.pl.in b/previous/v2.5/toolkit/check/fnlo-tk-cattest.pl.in similarity index 100% rename from v2.5/toolkit/check/fnlo-tk-cattest.pl.in rename to previous/v2.5/toolkit/check/fnlo-tk-cattest.pl.in diff --git a/v2.5/toolkit/check/fnlo-tk-cppnormtest.pl.in b/previous/v2.5/toolkit/check/fnlo-tk-cppnormtest.pl.in similarity index 100% rename from v2.5/toolkit/check/fnlo-tk-cppnormtest.pl.in rename to previous/v2.5/toolkit/check/fnlo-tk-cppnormtest.pl.in diff --git a/v2.5/toolkit/check/fnlo-tk-cppscalestest.pl.in b/previous/v2.5/toolkit/check/fnlo-tk-cppscalestest.pl.in similarity index 100% rename from v2.5/toolkit/check/fnlo-tk-cppscalestest.pl.in rename to previous/v2.5/toolkit/check/fnlo-tk-cppscalestest.pl.in diff --git a/v2.5/toolkit/check/fnlo-tk-cpptest1.pl.in b/previous/v2.5/toolkit/check/fnlo-tk-cpptest1.pl.in similarity index 100% rename from v2.5/toolkit/check/fnlo-tk-cpptest1.pl.in rename to previous/v2.5/toolkit/check/fnlo-tk-cpptest1.pl.in diff --git a/v2.5/toolkit/check/fnlo-tk-cpptest2.pl.in b/previous/v2.5/toolkit/check/fnlo-tk-cpptest2.pl.in similarity index 100% rename from v2.5/toolkit/check/fnlo-tk-cpptest2.pl.in rename to previous/v2.5/toolkit/check/fnlo-tk-cpptest2.pl.in diff --git a/v2.5/toolkit/check/fnlo-tk-erasetest.pl.in b/previous/v2.5/toolkit/check/fnlo-tk-erasetest.pl.in similarity index 100% rename from v2.5/toolkit/check/fnlo-tk-erasetest.pl.in rename to previous/v2.5/toolkit/check/fnlo-tk-erasetest.pl.in diff --git a/v2.5/toolkit/check/fnlo-tk-erasetest2.pl.in b/previous/v2.5/toolkit/check/fnlo-tk-erasetest2.pl.in similarity index 100% rename from v2.5/toolkit/check/fnlo-tk-erasetest2.pl.in rename to previous/v2.5/toolkit/check/fnlo-tk-erasetest2.pl.in diff --git a/v2.5/toolkit/check/fnlo-tk-hoppetastest1.pl.in b/previous/v2.5/toolkit/check/fnlo-tk-hoppetastest1.pl.in similarity index 100% rename from v2.5/toolkit/check/fnlo-tk-hoppetastest1.pl.in rename to previous/v2.5/toolkit/check/fnlo-tk-hoppetastest1.pl.in diff --git a/v2.5/toolkit/check/fnlo-tk-hoppetastest2.pl.in b/previous/v2.5/toolkit/check/fnlo-tk-hoppetastest2.pl.in similarity index 100% rename from v2.5/toolkit/check/fnlo-tk-hoppetastest2.pl.in rename to previous/v2.5/toolkit/check/fnlo-tk-hoppetastest2.pl.in diff --git a/v2.5/toolkit/check/fnlo-tk-lhapdftest.pl.in b/previous/v2.5/toolkit/check/fnlo-tk-lhapdftest.pl.in similarity index 100% rename from v2.5/toolkit/check/fnlo-tk-lhapdftest.pl.in rename to previous/v2.5/toolkit/check/fnlo-tk-lhapdftest.pl.in diff --git a/v2.5/toolkit/check/fnlo-tk-mergetest.pl.in b/previous/v2.5/toolkit/check/fnlo-tk-mergetest.pl.in similarity index 100% rename from v2.5/toolkit/check/fnlo-tk-mergetest.pl.in rename to previous/v2.5/toolkit/check/fnlo-tk-mergetest.pl.in diff --git a/v2.5/toolkit/check/fnlo-tk-qcdnumastest1.pl.in b/previous/v2.5/toolkit/check/fnlo-tk-qcdnumastest1.pl.in similarity index 100% rename from v2.5/toolkit/check/fnlo-tk-qcdnumastest1.pl.in rename to previous/v2.5/toolkit/check/fnlo-tk-qcdnumastest1.pl.in diff --git a/v2.5/toolkit/check/fnlo-tk-qcdnumastest2.pl.in b/previous/v2.5/toolkit/check/fnlo-tk-qcdnumastest2.pl.in similarity index 100% rename from v2.5/toolkit/check/fnlo-tk-qcdnumastest2.pl.in rename to previous/v2.5/toolkit/check/fnlo-tk-qcdnumastest2.pl.in diff --git a/v2.5/toolkit/check/fnlo-tk-rundecastest1.pl.in b/previous/v2.5/toolkit/check/fnlo-tk-rundecastest1.pl.in similarity index 100% rename from v2.5/toolkit/check/fnlo-tk-rundecastest1.pl.in rename to previous/v2.5/toolkit/check/fnlo-tk-rundecastest1.pl.in diff --git a/v2.5/toolkit/check/fnlo-tk-rundecastest2.pl.in b/previous/v2.5/toolkit/check/fnlo-tk-rundecastest2.pl.in similarity index 100% rename from v2.5/toolkit/check/fnlo-tk-rundecastest2.pl.in rename to previous/v2.5/toolkit/check/fnlo-tk-rundecastest2.pl.in diff --git a/v2.5/toolkit/check/fnlo-tk-stattest.pl.in b/previous/v2.5/toolkit/check/fnlo-tk-stattest.pl.in similarity index 100% rename from v2.5/toolkit/check/fnlo-tk-stattest.pl.in rename to previous/v2.5/toolkit/check/fnlo-tk-stattest.pl.in diff --git a/v2.5/toolkit/check/fnlo-tk-zipapp.pl.in b/previous/v2.5/toolkit/check/fnlo-tk-zipapp.pl.in similarity index 100% rename from v2.5/toolkit/check/fnlo-tk-zipapp.pl.in rename to previous/v2.5/toolkit/check/fnlo-tk-zipapp.pl.in diff --git a/v2.5/toolkit/check/fnlo-tk-ziptest.pl.in b/previous/v2.5/toolkit/check/fnlo-tk-ziptest.pl.in similarity index 100% rename from v2.5/toolkit/check/fnlo-tk-ziptest.pl.in rename to previous/v2.5/toolkit/check/fnlo-tk-ziptest.pl.in diff --git a/v2.5/toolkit/configure.ac b/previous/v2.5/toolkit/configure.ac similarity index 100% rename from v2.5/toolkit/configure.ac rename to previous/v2.5/toolkit/configure.ac diff --git a/v2.5/toolkit/data/.gitignore b/previous/v2.5/toolkit/data/.gitignore similarity index 100% rename from v2.5/toolkit/data/.gitignore rename to previous/v2.5/toolkit/data/.gitignore diff --git a/v2.5/toolkit/data/Makefile.am b/previous/v2.5/toolkit/data/Makefile.am similarity index 100% rename from v2.5/toolkit/data/Makefile.am rename to previous/v2.5/toolkit/data/Makefile.am diff --git a/v2.5/toolkit/data/check/InclusiveNJetEvents_fnl5662i_v23_fix_0-0-2.tab.gz b/previous/v2.5/toolkit/data/check/InclusiveNJetEvents_fnl5662i_v23_fix_0-0-2.tab.gz similarity index 100% rename from v2.5/toolkit/data/check/InclusiveNJetEvents_fnl5662i_v23_fix_0-0-2.tab.gz rename to previous/v2.5/toolkit/data/check/InclusiveNJetEvents_fnl5662i_v23_fix_0-0-2.tab.gz diff --git a/v2.5/toolkit/data/check/InclusiveNJetEvents_fnl5662i_v23_fix_2-2-2.tab.gz b/previous/v2.5/toolkit/data/check/InclusiveNJetEvents_fnl5662i_v23_fix_2-2-2.tab.gz similarity index 100% rename from v2.5/toolkit/data/check/InclusiveNJetEvents_fnl5662i_v23_fix_2-2-2.tab.gz rename to previous/v2.5/toolkit/data/check/InclusiveNJetEvents_fnl5662i_v23_fix_2-2-2.tab.gz diff --git a/v2.5/toolkit/data/check/InclusiveNJetEvents_fnl5662i_v23_fix_2-2.tab.gz b/previous/v2.5/toolkit/data/check/InclusiveNJetEvents_fnl5662i_v23_fix_2-2.tab.gz similarity index 100% rename from v2.5/toolkit/data/check/InclusiveNJetEvents_fnl5662i_v23_fix_2-2.tab.gz rename to previous/v2.5/toolkit/data/check/InclusiveNJetEvents_fnl5662i_v23_fix_2-2.tab.gz diff --git a/v2.5/toolkit/data/check/InclusiveNJetEvents_fnl5662i_v23_fix_norm_1-12.tab.gz b/previous/v2.5/toolkit/data/check/InclusiveNJetEvents_fnl5662i_v23_fix_norm_1-12.tab.gz similarity index 100% rename from v2.5/toolkit/data/check/InclusiveNJetEvents_fnl5662i_v23_fix_norm_1-12.tab.gz rename to previous/v2.5/toolkit/data/check/InclusiveNJetEvents_fnl5662i_v23_fix_norm_1-12.tab.gz diff --git a/v2.5/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_0000.tab.gz b/previous/v2.5/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_0000.tab.gz similarity index 100% rename from v2.5/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_0000.tab.gz rename to previous/v2.5/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_0000.tab.gz diff --git a/v2.5/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_0001.tab.gz b/previous/v2.5/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_0001.tab.gz similarity index 100% rename from v2.5/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_0001.tab.gz rename to previous/v2.5/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_0001.tab.gz diff --git a/v2.5/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_0002.tab.gz b/previous/v2.5/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_0002.tab.gz similarity index 100% rename from v2.5/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_0002.tab.gz rename to previous/v2.5/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_0002.tab.gz diff --git a/v2.5/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_stat_0000.tab.gz b/previous/v2.5/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_stat_0000.tab.gz similarity index 100% rename from v2.5/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_stat_0000.tab.gz rename to previous/v2.5/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_stat_0000.tab.gz diff --git a/v2.5/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_stat_0001.tab.gz b/previous/v2.5/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_stat_0001.tab.gz similarity index 100% rename from v2.5/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_stat_0001.tab.gz rename to previous/v2.5/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_stat_0001.tab.gz diff --git a/v2.5/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_stat_0002.tab.gz b/previous/v2.5/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_stat_0002.tab.gz similarity index 100% rename from v2.5/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_stat_0002.tab.gz rename to previous/v2.5/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_stat_0002.tab.gz diff --git a/v2.5/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_0100.tab.gz b/previous/v2.5/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_0100.tab.gz similarity index 100% rename from v2.5/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_0100.tab.gz rename to previous/v2.5/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_0100.tab.gz diff --git a/v2.5/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_0101.tab.gz b/previous/v2.5/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_0101.tab.gz similarity index 100% rename from v2.5/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_0101.tab.gz rename to previous/v2.5/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_0101.tab.gz diff --git a/v2.5/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_0102.tab.gz b/previous/v2.5/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_0102.tab.gz similarity index 100% rename from v2.5/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_0102.tab.gz rename to previous/v2.5/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_0102.tab.gz diff --git a/v2.5/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_stat_0100.tab.gz b/previous/v2.5/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_stat_0100.tab.gz similarity index 100% rename from v2.5/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_stat_0100.tab.gz rename to previous/v2.5/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_stat_0100.tab.gz diff --git a/v2.5/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_stat_0101.tab.gz b/previous/v2.5/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_stat_0101.tab.gz similarity index 100% rename from v2.5/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_stat_0101.tab.gz rename to previous/v2.5/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_stat_0101.tab.gz diff --git a/v2.5/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_stat_0102.tab.gz b/previous/v2.5/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_stat_0102.tab.gz similarity index 100% rename from v2.5/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_stat_0102.tab.gz rename to previous/v2.5/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_stat_0102.tab.gz diff --git a/v2.5/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix.tab.gz b/previous/v2.5/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix.tab.gz similarity index 100% rename from v2.5/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix.tab.gz rename to previous/v2.5/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix.tab.gz diff --git a/v2.5/toolkit/data/check/Makefile.am b/previous/v2.5/toolkit/data/check/Makefile.am similarity index 100% rename from v2.5/toolkit/data/check/Makefile.am rename to previous/v2.5/toolkit/data/check/Makefile.am diff --git a/v2.5/toolkit/data/check/NJetEvents_0-0-2.tab.gz b/previous/v2.5/toolkit/data/check/NJetEvents_0-0-2.tab.gz similarity index 100% rename from v2.5/toolkit/data/check/NJetEvents_0-0-2.tab.gz rename to previous/v2.5/toolkit/data/check/NJetEvents_0-0-2.tab.gz diff --git a/v2.5/toolkit/data/check/NJetEvents_2-2-2.tab.gz b/previous/v2.5/toolkit/data/check/NJetEvents_2-2-2.tab.gz similarity index 100% rename from v2.5/toolkit/data/check/NJetEvents_2-2-2.tab.gz rename to previous/v2.5/toolkit/data/check/NJetEvents_2-2-2.tab.gz diff --git a/v2.5/toolkit/data/check/NJetEvents_2-2.tab.gz b/previous/v2.5/toolkit/data/check/NJetEvents_2-2.tab.gz similarity index 100% rename from v2.5/toolkit/data/check/NJetEvents_2-2.tab.gz rename to previous/v2.5/toolkit/data/check/NJetEvents_2-2.tab.gz diff --git a/v2.5/toolkit/data/check/NJetEvents_norm_1-12.tab.gz b/previous/v2.5/toolkit/data/check/NJetEvents_norm_1-12.tab.gz similarity index 100% rename from v2.5/toolkit/data/check/NJetEvents_norm_1-12.tab.gz rename to previous/v2.5/toolkit/data/check/NJetEvents_norm_1-12.tab.gz diff --git a/v2.5/toolkit/data/check/NJets.tab.gz b/previous/v2.5/toolkit/data/check/NJets.tab.gz similarity index 100% rename from v2.5/toolkit/data/check/NJets.tab.gz rename to previous/v2.5/toolkit/data/check/NJets.tab.gz diff --git a/v2.5/toolkit/data/check/NJets_born-2jet_0000.tab.gz b/previous/v2.5/toolkit/data/check/NJets_born-2jet_0000.tab.gz similarity index 100% rename from v2.5/toolkit/data/check/NJets_born-2jet_0000.tab.gz rename to previous/v2.5/toolkit/data/check/NJets_born-2jet_0000.tab.gz diff --git a/v2.5/toolkit/data/check/NJets_born-2jet_0001.tab.gz b/previous/v2.5/toolkit/data/check/NJets_born-2jet_0001.tab.gz similarity index 100% rename from v2.5/toolkit/data/check/NJets_born-2jet_0001.tab.gz rename to previous/v2.5/toolkit/data/check/NJets_born-2jet_0001.tab.gz diff --git a/v2.5/toolkit/data/check/NJets_born-2jet_0002.tab.gz b/previous/v2.5/toolkit/data/check/NJets_born-2jet_0002.tab.gz similarity index 100% rename from v2.5/toolkit/data/check/NJets_born-2jet_0002.tab.gz rename to previous/v2.5/toolkit/data/check/NJets_born-2jet_0002.tab.gz diff --git a/v2.5/toolkit/data/check/NJets_born-2jet_stat_0000.tab.gz b/previous/v2.5/toolkit/data/check/NJets_born-2jet_stat_0000.tab.gz similarity index 100% rename from v2.5/toolkit/data/check/NJets_born-2jet_stat_0000.tab.gz rename to previous/v2.5/toolkit/data/check/NJets_born-2jet_stat_0000.tab.gz diff --git a/v2.5/toolkit/data/check/NJets_born-2jet_stat_0001.tab.gz b/previous/v2.5/toolkit/data/check/NJets_born-2jet_stat_0001.tab.gz similarity index 100% rename from v2.5/toolkit/data/check/NJets_born-2jet_stat_0001.tab.gz rename to previous/v2.5/toolkit/data/check/NJets_born-2jet_stat_0001.tab.gz diff --git a/v2.5/toolkit/data/check/NJets_born-2jet_stat_0002.tab.gz b/previous/v2.5/toolkit/data/check/NJets_born-2jet_stat_0002.tab.gz similarity index 100% rename from v2.5/toolkit/data/check/NJets_born-2jet_stat_0002.tab.gz rename to previous/v2.5/toolkit/data/check/NJets_born-2jet_stat_0002.tab.gz diff --git a/v2.5/toolkit/data/check/NJets_nlo-2jet_0100.tab.gz b/previous/v2.5/toolkit/data/check/NJets_nlo-2jet_0100.tab.gz similarity index 100% rename from v2.5/toolkit/data/check/NJets_nlo-2jet_0100.tab.gz rename to previous/v2.5/toolkit/data/check/NJets_nlo-2jet_0100.tab.gz diff --git a/v2.5/toolkit/data/check/NJets_nlo-2jet_0101.tab.gz b/previous/v2.5/toolkit/data/check/NJets_nlo-2jet_0101.tab.gz similarity index 100% rename from v2.5/toolkit/data/check/NJets_nlo-2jet_0101.tab.gz rename to previous/v2.5/toolkit/data/check/NJets_nlo-2jet_0101.tab.gz diff --git a/v2.5/toolkit/data/check/NJets_nlo-2jet_0102.tab.gz b/previous/v2.5/toolkit/data/check/NJets_nlo-2jet_0102.tab.gz similarity index 100% rename from v2.5/toolkit/data/check/NJets_nlo-2jet_0102.tab.gz rename to previous/v2.5/toolkit/data/check/NJets_nlo-2jet_0102.tab.gz diff --git a/v2.5/toolkit/data/check/NJets_nlo-2jet_stat_0100.tab.gz b/previous/v2.5/toolkit/data/check/NJets_nlo-2jet_stat_0100.tab.gz similarity index 100% rename from v2.5/toolkit/data/check/NJets_nlo-2jet_stat_0100.tab.gz rename to previous/v2.5/toolkit/data/check/NJets_nlo-2jet_stat_0100.tab.gz diff --git a/v2.5/toolkit/data/check/NJets_nlo-2jet_stat_0101.tab.gz b/previous/v2.5/toolkit/data/check/NJets_nlo-2jet_stat_0101.tab.gz similarity index 100% rename from v2.5/toolkit/data/check/NJets_nlo-2jet_stat_0101.tab.gz rename to previous/v2.5/toolkit/data/check/NJets_nlo-2jet_stat_0101.tab.gz diff --git a/v2.5/toolkit/data/check/NJets_nlo-2jet_stat_0102.tab.gz b/previous/v2.5/toolkit/data/check/NJets_nlo-2jet_stat_0102.tab.gz similarity index 100% rename from v2.5/toolkit/data/check/NJets_nlo-2jet_stat_0102.tab.gz rename to previous/v2.5/toolkit/data/check/NJets_nlo-2jet_stat_0102.tab.gz diff --git a/v2.5/toolkit/data/check/SteerModify_EraseBins.str b/previous/v2.5/toolkit/data/check/SteerModify_EraseBins.str similarity index 100% rename from v2.5/toolkit/data/check/SteerModify_EraseBins.str rename to previous/v2.5/toolkit/data/check/SteerModify_EraseBins.str diff --git a/v2.5/toolkit/data/check/SteerModify_EraseBins2.str b/previous/v2.5/toolkit/data/check/SteerModify_EraseBins2.str similarity index 100% rename from v2.5/toolkit/data/check/SteerModify_EraseBins2.str rename to previous/v2.5/toolkit/data/check/SteerModify_EraseBins2.str diff --git a/v2.5/toolkit/data/check/fnl1014_I902309_2-2.tab.gz b/previous/v2.5/toolkit/data/check/fnl1014_I902309_2-2.tab.gz similarity index 100% rename from v2.5/toolkit/data/check/fnl1014_I902309_2-2.tab.gz rename to previous/v2.5/toolkit/data/check/fnl1014_I902309_2-2.tab.gz diff --git a/v2.5/toolkit/data/check/fnl1014_I902309_2.tab.gz b/previous/v2.5/toolkit/data/check/fnl1014_I902309_2.tab.gz similarity index 100% rename from v2.5/toolkit/data/check/fnl1014_I902309_2.tab.gz rename to previous/v2.5/toolkit/data/check/fnl1014_I902309_2.tab.gz diff --git a/v2.5/toolkit/data/modify/Makefile.am b/previous/v2.5/toolkit/data/modify/Makefile.am similarity index 100% rename from v2.5/toolkit/data/modify/Makefile.am rename to previous/v2.5/toolkit/data/modify/Makefile.am diff --git a/v2.5/toolkit/data/modify/SteerModify.str b/previous/v2.5/toolkit/data/modify/SteerModify.str similarity index 100% rename from v2.5/toolkit/data/modify/SteerModify.str rename to previous/v2.5/toolkit/data/modify/SteerModify.str diff --git a/v2.5/toolkit/doc/Makefile.am b/previous/v2.5/toolkit/doc/Makefile.am similarity index 100% rename from v2.5/toolkit/doc/Makefile.am rename to previous/v2.5/toolkit/doc/Makefile.am diff --git a/v2.5/toolkit/doc/fig/Makefile.am b/previous/v2.5/toolkit/doc/fig/Makefile.am similarity index 100% rename from v2.5/toolkit/doc/fig/Makefile.am rename to previous/v2.5/toolkit/doc/fig/Makefile.am diff --git a/v2.5/toolkit/doc/fig/fastNLO_logo_01b_323x80.gif b/previous/v2.5/toolkit/doc/fig/fastNLO_logo_01b_323x80.gif similarity index 100% rename from v2.5/toolkit/doc/fig/fastNLO_logo_01b_323x80.gif rename to previous/v2.5/toolkit/doc/fig/fastNLO_logo_01b_323x80.gif diff --git a/v2.5/toolkit/doc/fig/fastNLO_logo_01c_280x69.gif b/previous/v2.5/toolkit/doc/fig/fastNLO_logo_01c_280x69.gif similarity index 100% rename from v2.5/toolkit/doc/fig/fastNLO_logo_01c_280x69.gif rename to previous/v2.5/toolkit/doc/fig/fastNLO_logo_01c_280x69.gif diff --git a/v2.5/toolkit/doc/fig/fastNLO_logo_01d_260x64.gif b/previous/v2.5/toolkit/doc/fig/fastNLO_logo_01d_260x64.gif similarity index 100% rename from v2.5/toolkit/doc/fig/fastNLO_logo_01d_260x64.gif rename to previous/v2.5/toolkit/doc/fig/fastNLO_logo_01d_260x64.gif diff --git a/v2.5/toolkit/doc/fig/fastNLO_logo_200x50.png b/previous/v2.5/toolkit/doc/fig/fastNLO_logo_200x50.png similarity index 100% rename from v2.5/toolkit/doc/fig/fastNLO_logo_200x50.png rename to previous/v2.5/toolkit/doc/fig/fastNLO_logo_200x50.png diff --git a/v2.5/toolkit/doc/fig/fastNLO_logo_646x161.eps b/previous/v2.5/toolkit/doc/fig/fastNLO_logo_646x161.eps similarity index 100% rename from v2.5/toolkit/doc/fig/fastNLO_logo_646x161.eps rename to previous/v2.5/toolkit/doc/fig/fastNLO_logo_646x161.eps diff --git a/v2.5/toolkit/doc/fig/fastNLO_logo_646x161.png b/previous/v2.5/toolkit/doc/fig/fastNLO_logo_646x161.png similarity index 100% rename from v2.5/toolkit/doc/fig/fastNLO_logo_646x161.png rename to previous/v2.5/toolkit/doc/fig/fastNLO_logo_646x161.png diff --git a/v2.5/toolkit/doc/paper/JHEP-author-manual.pdf b/previous/v2.5/toolkit/doc/paper/JHEP-author-manual.pdf similarity index 100% rename from v2.5/toolkit/doc/paper/JHEP-author-manual.pdf rename to previous/v2.5/toolkit/doc/paper/JHEP-author-manual.pdf diff --git a/v2.5/toolkit/doc/paper/JHEP-policy.pdf b/previous/v2.5/toolkit/doc/paper/JHEP-policy.pdf similarity index 100% rename from v2.5/toolkit/doc/paper/JHEP-policy.pdf rename to previous/v2.5/toolkit/doc/paper/JHEP-policy.pdf diff --git a/v2.5/toolkit/doc/paper/JHEP.bst b/previous/v2.5/toolkit/doc/paper/JHEP.bst similarity index 100% rename from v2.5/toolkit/doc/paper/JHEP.bst rename to previous/v2.5/toolkit/doc/paper/JHEP.bst diff --git a/v2.5/toolkit/doc/paper/Makefile.am b/previous/v2.5/toolkit/doc/paper/Makefile.am similarity index 100% rename from v2.5/toolkit/doc/paper/Makefile.am rename to previous/v2.5/toolkit/doc/paper/Makefile.am diff --git a/v2.5/toolkit/doc/paper/example/img1.pdf b/previous/v2.5/toolkit/doc/paper/example/img1.pdf similarity index 100% rename from v2.5/toolkit/doc/paper/example/img1.pdf rename to previous/v2.5/toolkit/doc/paper/example/img1.pdf diff --git a/v2.5/toolkit/doc/paper/example/img2.pdf b/previous/v2.5/toolkit/doc/paper/example/img2.pdf similarity index 100% rename from v2.5/toolkit/doc/paper/example/img2.pdf rename to previous/v2.5/toolkit/doc/paper/example/img2.pdf diff --git a/v2.5/toolkit/doc/paper/example/jhepexample.pdf b/previous/v2.5/toolkit/doc/paper/example/jhepexample.pdf similarity index 100% rename from v2.5/toolkit/doc/paper/example/jhepexample.pdf rename to previous/v2.5/toolkit/doc/paper/example/jhepexample.pdf diff --git a/v2.5/toolkit/doc/paper/example/jhepexample.tex b/previous/v2.5/toolkit/doc/paper/example/jhepexample.tex similarity index 100% rename from v2.5/toolkit/doc/paper/example/jhepexample.tex rename to previous/v2.5/toolkit/doc/paper/example/jhepexample.tex diff --git a/v2.5/toolkit/doc/paper/example/jheppub.sty b/previous/v2.5/toolkit/doc/paper/example/jheppub.sty similarity index 100% rename from v2.5/toolkit/doc/paper/example/jheppub.sty rename to previous/v2.5/toolkit/doc/paper/example/jheppub.sty diff --git a/v2.5/toolkit/doc/paper/fnlo-old-paper-draft.pdf b/previous/v2.5/toolkit/doc/paper/fnlo-old-paper-draft.pdf similarity index 100% rename from v2.5/toolkit/doc/paper/fnlo-old-paper-draft.pdf rename to previous/v2.5/toolkit/doc/paper/fnlo-old-paper-draft.pdf diff --git a/v2.5/toolkit/doc/paper/fnlo-paper.tex b/previous/v2.5/toolkit/doc/paper/fnlo-paper.tex similarity index 100% rename from v2.5/toolkit/doc/paper/fnlo-paper.tex rename to previous/v2.5/toolkit/doc/paper/fnlo-paper.tex diff --git a/v2.5/toolkit/doc/paper/jheppub.sty b/previous/v2.5/toolkit/doc/paper/jheppub.sty similarity index 100% rename from v2.5/toolkit/doc/paper/jheppub.sty rename to previous/v2.5/toolkit/doc/paper/jheppub.sty diff --git a/v2.5/toolkit/doc/paper/jheppub.sty.orig b/previous/v2.5/toolkit/doc/paper/jheppub.sty.orig similarity index 100% rename from v2.5/toolkit/doc/paper/jheppub.sty.orig rename to previous/v2.5/toolkit/doc/paper/jheppub.sty.orig diff --git a/v2.5/toolkit/doxygen.cfg b/previous/v2.5/toolkit/doxygen.cfg similarity index 100% rename from v2.5/toolkit/doxygen.cfg rename to previous/v2.5/toolkit/doxygen.cfg diff --git a/v2.5/toolkit/fastnlotoolkit/Alphas.cc b/previous/v2.5/toolkit/fastnlotoolkit/Alphas.cc similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/Alphas.cc rename to previous/v2.5/toolkit/fastnlotoolkit/Alphas.cc diff --git a/v2.5/toolkit/fastnlotoolkit/CRunDec.cc b/previous/v2.5/toolkit/fastnlotoolkit/CRunDec.cc similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/CRunDec.cc rename to previous/v2.5/toolkit/fastnlotoolkit/CRunDec.cc diff --git a/v2.5/toolkit/fastnlotoolkit/HoppetInterface.cc b/previous/v2.5/toolkit/fastnlotoolkit/HoppetInterface.cc similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/HoppetInterface.cc rename to previous/v2.5/toolkit/fastnlotoolkit/HoppetInterface.cc diff --git a/v2.5/toolkit/fastnlotoolkit/Makefile.am b/previous/v2.5/toolkit/fastnlotoolkit/Makefile.am similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/Makefile.am rename to previous/v2.5/toolkit/fastnlotoolkit/Makefile.am diff --git a/v2.5/toolkit/fastnlotoolkit/fastNLOAlphas.cc b/previous/v2.5/toolkit/fastnlotoolkit/fastNLOAlphas.cc similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/fastNLOAlphas.cc rename to previous/v2.5/toolkit/fastnlotoolkit/fastNLOAlphas.cc diff --git a/v2.5/toolkit/fastnlotoolkit/fastNLOCRunDec.cc b/previous/v2.5/toolkit/fastnlotoolkit/fastNLOCRunDec.cc similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/fastNLOCRunDec.cc rename to previous/v2.5/toolkit/fastnlotoolkit/fastNLOCRunDec.cc diff --git a/v2.5/toolkit/fastnlotoolkit/fastNLOCoeffAddBase.cc b/previous/v2.5/toolkit/fastnlotoolkit/fastNLOCoeffAddBase.cc similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/fastNLOCoeffAddBase.cc rename to previous/v2.5/toolkit/fastnlotoolkit/fastNLOCoeffAddBase.cc diff --git a/v2.5/toolkit/fastnlotoolkit/fastNLOCoeffAddFix.cc b/previous/v2.5/toolkit/fastnlotoolkit/fastNLOCoeffAddFix.cc similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/fastNLOCoeffAddFix.cc rename to previous/v2.5/toolkit/fastnlotoolkit/fastNLOCoeffAddFix.cc diff --git a/v2.5/toolkit/fastnlotoolkit/fastNLOCoeffAddFlex.cc b/previous/v2.5/toolkit/fastnlotoolkit/fastNLOCoeffAddFlex.cc similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/fastNLOCoeffAddFlex.cc rename to previous/v2.5/toolkit/fastnlotoolkit/fastNLOCoeffAddFlex.cc diff --git a/v2.5/toolkit/fastnlotoolkit/fastNLOCoeffBase.cc b/previous/v2.5/toolkit/fastnlotoolkit/fastNLOCoeffBase.cc similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/fastNLOCoeffBase.cc rename to previous/v2.5/toolkit/fastnlotoolkit/fastNLOCoeffBase.cc diff --git a/v2.5/toolkit/fastnlotoolkit/fastNLOCoeffData.cc b/previous/v2.5/toolkit/fastnlotoolkit/fastNLOCoeffData.cc similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/fastNLOCoeffData.cc rename to previous/v2.5/toolkit/fastnlotoolkit/fastNLOCoeffData.cc diff --git a/v2.5/toolkit/fastnlotoolkit/fastNLOCoeffMult.cc b/previous/v2.5/toolkit/fastnlotoolkit/fastNLOCoeffMult.cc similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/fastNLOCoeffMult.cc rename to previous/v2.5/toolkit/fastnlotoolkit/fastNLOCoeffMult.cc diff --git a/v2.5/toolkit/fastnlotoolkit/fastNLOCoefficients.cc b/previous/v2.5/toolkit/fastnlotoolkit/fastNLOCoefficients.cc similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/fastNLOCoefficients.cc rename to previous/v2.5/toolkit/fastnlotoolkit/fastNLOCoefficients.cc diff --git a/v2.5/toolkit/fastnlotoolkit/fastNLOCreate.cc b/previous/v2.5/toolkit/fastnlotoolkit/fastNLOCreate.cc similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/fastNLOCreate.cc rename to previous/v2.5/toolkit/fastnlotoolkit/fastNLOCreate.cc diff --git a/v2.5/toolkit/fastnlotoolkit/fastNLODiffReader.cc b/previous/v2.5/toolkit/fastnlotoolkit/fastNLODiffReader.cc similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/fastNLODiffReader.cc rename to previous/v2.5/toolkit/fastnlotoolkit/fastNLODiffReader.cc diff --git a/v2.5/toolkit/fastnlotoolkit/fastNLODiffUser.cc b/previous/v2.5/toolkit/fastnlotoolkit/fastNLODiffUser.cc similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/fastNLODiffUser.cc rename to previous/v2.5/toolkit/fastnlotoolkit/fastNLODiffUser.cc diff --git a/v2.5/toolkit/fastnlotoolkit/fastNLOHoppet.cc b/previous/v2.5/toolkit/fastnlotoolkit/fastNLOHoppet.cc similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/fastNLOHoppet.cc rename to previous/v2.5/toolkit/fastnlotoolkit/fastNLOHoppet.cc diff --git a/v2.5/toolkit/fastnlotoolkit/fastNLOHoppetAs.cc b/previous/v2.5/toolkit/fastnlotoolkit/fastNLOHoppetAs.cc similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/fastNLOHoppetAs.cc rename to previous/v2.5/toolkit/fastnlotoolkit/fastNLOHoppetAs.cc diff --git a/v2.5/toolkit/fastnlotoolkit/fastNLOInterpolBase.cc b/previous/v2.5/toolkit/fastnlotoolkit/fastNLOInterpolBase.cc similarity index 97% rename from v2.5/toolkit/fastnlotoolkit/fastNLOInterpolBase.cc rename to previous/v2.5/toolkit/fastnlotoolkit/fastNLOInterpolBase.cc index 91ce9b43799a3e6870fa91e57626f30b69c1f3b6..618d9d8e7715c94754f9e1a628977e5dafc3ff7c 100644 --- a/v2.5/toolkit/fastnlotoolkit/fastNLOInterpolBase.cc +++ b/previous/v2.5/toolkit/fastnlotoolkit/fastNLOInterpolBase.cc @@ -42,27 +42,27 @@ fastNLOInterpolBase::fastNLOInterpolBase(double density, fastNLOGrid::GridType t break; case fastNLOGrid::kLogLog025: valMaxH = Function_loglog025(fvalmax); - fvalmin = Function_loglog025_inv(valMaxH - valMinOffsetH); + fvalmin = Function_loglog025_inv(valMaxH + valMinOffsetH); break; case fastNLOGrid::kLog10: valMaxH = Function_log10(fvalmax); - fvalmin = Function_log10_inv(valMaxH - valMinOffsetH); + fvalmin = Function_log10_inv(valMaxH + valMinOffsetH); break; case fastNLOGrid::kSqrtLog10: valMaxH = Function_sqrtlog10(fvalmax); - fvalmin = Function_sqrtlog10_inv(valMaxH - valMinOffsetH); + fvalmin = Function_sqrtlog10_inv(valMaxH + valMinOffsetH); break; case fastNLOGrid::kLogLog: valMaxH = Function_loglog(fvalmax); - fvalmin = Function_loglog_inv(valMaxH - valMinOffsetH); + fvalmin = Function_loglog_inv(valMaxH + valMinOffsetH); break; case fastNLOGrid::k3rdrtLog10: valMaxH = Function_3rdrtlog10(fvalmax); - fvalmin = Function_3rdrtlog10_inv(valMaxH - valMinOffsetH); + fvalmin = Function_3rdrtlog10_inv(valMaxH + valMinOffsetH); break; case fastNLOGrid::k4thrtLog10: valMaxH = Function_4thrtlog10(fvalmax); - fvalmin = Function_4thrtlog10_inv(valMaxH - valMinOffsetH); + fvalmin = Function_4thrtlog10_inv(valMaxH + valMinOffsetH); break; default: error["MakeGridFromHGrid"]<<"Unknown grid type."<<endl; @@ -182,7 +182,7 @@ int fastNLOInterpolBase::FindLargestPossibleNode(double x, bool canExtend = fals if (canExtend && fExtendLow) { bool gridExtended = false; while ( x < fgrid[1] ) { - double newxH = fHgrid[0] - (fHgrid[1] - fHgrid[0]); + const double newxH = fHgrid[0] - (fHgrid[1] - fHgrid[0]); fHgrid.insert(fHgrid.begin(), newxH); switch (fdm) { diff --git a/v2.5/toolkit/fastnlotoolkit/fastNLOInterpolCatmullRom.cc b/previous/v2.5/toolkit/fastnlotoolkit/fastNLOInterpolCatmullRom.cc similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/fastNLOInterpolCatmullRom.cc rename to previous/v2.5/toolkit/fastnlotoolkit/fastNLOInterpolCatmullRom.cc diff --git a/v2.5/toolkit/fastnlotoolkit/fastNLOInterpolLagrange.cc b/previous/v2.5/toolkit/fastnlotoolkit/fastNLOInterpolLagrange.cc similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/fastNLOInterpolLagrange.cc rename to previous/v2.5/toolkit/fastnlotoolkit/fastNLOInterpolLagrange.cc diff --git a/v2.5/toolkit/fastnlotoolkit/fastNLOInterpolLinear.cc b/previous/v2.5/toolkit/fastnlotoolkit/fastNLOInterpolLinear.cc similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/fastNLOInterpolLinear.cc rename to previous/v2.5/toolkit/fastnlotoolkit/fastNLOInterpolLinear.cc diff --git a/v2.5/toolkit/fastnlotoolkit/fastNLOInterpolOneNode.cc b/previous/v2.5/toolkit/fastnlotoolkit/fastNLOInterpolOneNode.cc similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/fastNLOInterpolOneNode.cc rename to previous/v2.5/toolkit/fastnlotoolkit/fastNLOInterpolOneNode.cc diff --git a/v2.5/toolkit/fastnlotoolkit/fastNLOLHAPDF.cc b/previous/v2.5/toolkit/fastnlotoolkit/fastNLOLHAPDF.cc similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/fastNLOLHAPDF.cc rename to previous/v2.5/toolkit/fastnlotoolkit/fastNLOLHAPDF.cc diff --git a/v2.5/toolkit/fastnlotoolkit/fastNLOPDFLinearCombinations.cc b/previous/v2.5/toolkit/fastnlotoolkit/fastNLOPDFLinearCombinations.cc similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/fastNLOPDFLinearCombinations.cc rename to previous/v2.5/toolkit/fastnlotoolkit/fastNLOPDFLinearCombinations.cc diff --git a/v2.5/toolkit/fastnlotoolkit/fastNLOQCDNUMAS.cc b/previous/v2.5/toolkit/fastnlotoolkit/fastNLOQCDNUMAS.cc similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/fastNLOQCDNUMAS.cc rename to previous/v2.5/toolkit/fastnlotoolkit/fastNLOQCDNUMAS.cc diff --git a/v2.5/toolkit/fastnlotoolkit/fastNLOReader.cc b/previous/v2.5/toolkit/fastnlotoolkit/fastNLOReader.cc similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/fastNLOReader.cc rename to previous/v2.5/toolkit/fastnlotoolkit/fastNLOReader.cc diff --git a/v2.5/toolkit/fastnlotoolkit/fastNLOTable.cc b/previous/v2.5/toolkit/fastnlotoolkit/fastNLOTable.cc similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/fastNLOTable.cc rename to previous/v2.5/toolkit/fastnlotoolkit/fastNLOTable.cc diff --git a/v2.5/toolkit/fastnlotoolkit/fastNLOTools.cc b/previous/v2.5/toolkit/fastnlotoolkit/fastNLOTools.cc similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/fastNLOTools.cc rename to previous/v2.5/toolkit/fastnlotoolkit/fastNLOTools.cc diff --git a/v2.5/toolkit/fastnlotoolkit/fastNLOUserBlock.cc b/previous/v2.5/toolkit/fastnlotoolkit/fastNLOUserBlock.cc similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/fastNLOUserBlock.cc rename to previous/v2.5/toolkit/fastnlotoolkit/fastNLOUserBlock.cc diff --git a/v2.5/toolkit/fastnlotoolkit/include/Makefile.am b/previous/v2.5/toolkit/fastnlotoolkit/include/Makefile.am similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/include/Makefile.am rename to previous/v2.5/toolkit/fastnlotoolkit/include/Makefile.am diff --git a/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/.gitignore b/previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/.gitignore similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/include/fastnlotk/.gitignore rename to previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/.gitignore diff --git a/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/Alphas.h b/previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/Alphas.h similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/include/fastnlotk/Alphas.h rename to previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/Alphas.h diff --git a/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/CRunDec.h b/previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/CRunDec.h similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/include/fastnlotk/CRunDec.h rename to previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/CRunDec.h diff --git a/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/HoppetInterface.h b/previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/HoppetInterface.h similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/include/fastnlotk/HoppetInterface.h rename to previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/HoppetInterface.h diff --git a/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/Makefile.am b/previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/Makefile.am similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/include/fastnlotk/Makefile.am rename to previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/Makefile.am diff --git a/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOAlphas.h b/previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOAlphas.h similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOAlphas.h rename to previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOAlphas.h diff --git a/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCRunDec.h b/previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCRunDec.h similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCRunDec.h rename to previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCRunDec.h diff --git a/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffAddBase.h b/previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffAddBase.h similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffAddBase.h rename to previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffAddBase.h diff --git a/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffAddFix.h b/previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffAddFix.h similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffAddFix.h rename to previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffAddFix.h diff --git a/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffAddFlex.h b/previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffAddFlex.h similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffAddFlex.h rename to previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffAddFlex.h diff --git a/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffBase.h b/previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffBase.h similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffBase.h rename to previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffBase.h diff --git a/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffData.h b/previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffData.h similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffData.h rename to previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffData.h diff --git a/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffMult.h b/previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffMult.h similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffMult.h rename to previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffMult.h diff --git a/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoefficients.h b/previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoefficients.h similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoefficients.h rename to previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoefficients.h diff --git a/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOConstants.h.in b/previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOConstants.h.in similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOConstants.h.in rename to previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOConstants.h.in diff --git a/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCreate.h b/previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCreate.h similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCreate.h rename to previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCreate.h diff --git a/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLODiffH12006FitB.h b/previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLODiffH12006FitB.h similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLODiffH12006FitB.h rename to previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLODiffH12006FitB.h diff --git a/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLODiffReader.h b/previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLODiffReader.h similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLODiffReader.h rename to previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLODiffReader.h diff --git a/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLODiffUser.h b/previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLODiffUser.h similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLODiffUser.h rename to previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLODiffUser.h diff --git a/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOEvent.h b/previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOEvent.h similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOEvent.h rename to previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOEvent.h diff --git a/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOHoppet.h b/previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOHoppet.h similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOHoppet.h rename to previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOHoppet.h diff --git a/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOHoppetAs.h b/previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOHoppetAs.h similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOHoppetAs.h rename to previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOHoppetAs.h diff --git a/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOInterpolBase.h b/previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOInterpolBase.h similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOInterpolBase.h rename to previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOInterpolBase.h diff --git a/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOInterpolCatmullRom.h b/previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOInterpolCatmullRom.h similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOInterpolCatmullRom.h rename to previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOInterpolCatmullRom.h diff --git a/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOInterpolLagrange.h b/previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOInterpolLagrange.h similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOInterpolLagrange.h rename to previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOInterpolLagrange.h diff --git a/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOInterpolLinear.h b/previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOInterpolLinear.h similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOInterpolLinear.h rename to previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOInterpolLinear.h diff --git a/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOInterpolOneNode.h b/previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOInterpolOneNode.h similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOInterpolOneNode.h rename to previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOInterpolOneNode.h diff --git a/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOLHAPDF.h b/previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOLHAPDF.h similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOLHAPDF.h rename to previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOLHAPDF.h diff --git a/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOPDFLinearCombinations.h b/previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOPDFLinearCombinations.h similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOPDFLinearCombinations.h rename to previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOPDFLinearCombinations.h diff --git a/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOQCDNUMAS.h b/previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOQCDNUMAS.h similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOQCDNUMAS.h rename to previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOQCDNUMAS.h diff --git a/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOReader.h b/previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOReader.h similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOReader.h rename to previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOReader.h diff --git a/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOTable.h b/previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOTable.h similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOTable.h rename to previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOTable.h diff --git a/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOTableConstants.h b/previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOTableConstants.h similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOTableConstants.h rename to previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOTableConstants.h diff --git a/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOTools.h b/previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOTools.h similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOTools.h rename to previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOTools.h diff --git a/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOUserBlock.h b/previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOUserBlock.h similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOUserBlock.h rename to previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOUserBlock.h diff --git a/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/read_steer.h b/previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/read_steer.h similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/include/fastnlotk/read_steer.h rename to previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/read_steer.h diff --git a/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/speaker.h b/previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/speaker.h similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/include/fastnlotk/speaker.h rename to previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/speaker.h diff --git a/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/zstr.hpp b/previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/zstr.hpp similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/include/fastnlotk/zstr.hpp rename to previous/v2.5/toolkit/fastnlotoolkit/include/fastnlotk/zstr.hpp diff --git a/v2.5/toolkit/fastnlotoolkit/read_steer.cc b/previous/v2.5/toolkit/fastnlotoolkit/read_steer.cc similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/read_steer.cc rename to previous/v2.5/toolkit/fastnlotoolkit/read_steer.cc diff --git a/v2.5/toolkit/fastnlotoolkit/speaker.cc b/previous/v2.5/toolkit/fastnlotoolkit/speaker.cc similarity index 100% rename from v2.5/toolkit/fastnlotoolkit/speaker.cc rename to previous/v2.5/toolkit/fastnlotoolkit/speaker.cc diff --git a/v2.5/toolkit/fortranext/.gitignore b/previous/v2.5/toolkit/fortranext/.gitignore similarity index 100% rename from v2.5/toolkit/fortranext/.gitignore rename to previous/v2.5/toolkit/fortranext/.gitignore diff --git a/v2.5/toolkit/fortranext/Makefile.Fred b/previous/v2.5/toolkit/fortranext/Makefile.Fred similarity index 100% rename from v2.5/toolkit/fortranext/Makefile.Fred rename to previous/v2.5/toolkit/fortranext/Makefile.Fred diff --git a/v2.5/toolkit/fortranext/Makefile.am b/previous/v2.5/toolkit/fortranext/Makefile.am similarity index 100% rename from v2.5/toolkit/fortranext/Makefile.am rename to previous/v2.5/toolkit/fortranext/Makefile.am diff --git a/v2.5/toolkit/fortranext/README b/previous/v2.5/toolkit/fortranext/README similarity index 100% rename from v2.5/toolkit/fortranext/README rename to previous/v2.5/toolkit/fortranext/README diff --git a/v2.5/toolkit/fortranext/fastNLOFI_cc.cc b/previous/v2.5/toolkit/fortranext/fastNLOFI_cc.cc similarity index 100% rename from v2.5/toolkit/fortranext/fastNLOFI_cc.cc rename to previous/v2.5/toolkit/fortranext/fastNLOFI_cc.cc diff --git a/v2.5/toolkit/fortranext/fastNLOFI_f.f b/previous/v2.5/toolkit/fortranext/fastNLOFI_f.f similarity index 100% rename from v2.5/toolkit/fortranext/fastNLOFI_f.f rename to previous/v2.5/toolkit/fortranext/fastNLOFI_f.f diff --git a/v2.5/toolkit/git_commits_and_tags b/previous/v2.5/toolkit/git_commits_and_tags similarity index 100% rename from v2.5/toolkit/git_commits_and_tags rename to previous/v2.5/toolkit/git_commits_and_tags diff --git a/v2.5/toolkit/m4.tar.gz b/previous/v2.5/toolkit/m4.tar.gz similarity index 100% rename from v2.5/toolkit/m4.tar.gz rename to previous/v2.5/toolkit/m4.tar.gz diff --git a/v2.5/toolkit/m4/ax_check_zlib.m4 b/previous/v2.5/toolkit/m4/ax_check_zlib.m4 similarity index 100% rename from v2.5/toolkit/m4/ax_check_zlib.m4 rename to previous/v2.5/toolkit/m4/ax_check_zlib.m4 diff --git a/v2.5/toolkit/m4/ax_cxx_compile_stdcxx.m4 b/previous/v2.5/toolkit/m4/ax_cxx_compile_stdcxx.m4 similarity index 100% rename from v2.5/toolkit/m4/ax_cxx_compile_stdcxx.m4 rename to previous/v2.5/toolkit/m4/ax_cxx_compile_stdcxx.m4 diff --git a/v2.5/toolkit/m4/ax_cxx_compile_stdcxx_11.m4 b/previous/v2.5/toolkit/m4/ax_cxx_compile_stdcxx_11.m4 similarity index 100% rename from v2.5/toolkit/m4/ax_cxx_compile_stdcxx_11.m4 rename to previous/v2.5/toolkit/m4/ax_cxx_compile_stdcxx_11.m4 diff --git a/v2.5/toolkit/m4/ax_cxx_compile_stdcxx_17.m4 b/previous/v2.5/toolkit/m4/ax_cxx_compile_stdcxx_17.m4 similarity index 100% rename from v2.5/toolkit/m4/ax_cxx_compile_stdcxx_17.m4 rename to previous/v2.5/toolkit/m4/ax_cxx_compile_stdcxx_17.m4 diff --git a/v2.5/toolkit/m4/ax_prog_doxygen.m4 b/previous/v2.5/toolkit/m4/ax_prog_doxygen.m4 similarity index 100% rename from v2.5/toolkit/m4/ax_prog_doxygen.m4 rename to previous/v2.5/toolkit/m4/ax_prog_doxygen.m4 diff --git a/v2.5/toolkit/m4/ax_python_devel.m4 b/previous/v2.5/toolkit/m4/ax_python_devel.m4 similarity index 100% rename from v2.5/toolkit/m4/ax_python_devel.m4 rename to previous/v2.5/toolkit/m4/ax_python_devel.m4 diff --git a/v2.5/toolkit/m4/ax_require_defined.m4 b/previous/v2.5/toolkit/m4/ax_require_defined.m4 similarity index 100% rename from v2.5/toolkit/m4/ax_require_defined.m4 rename to previous/v2.5/toolkit/m4/ax_require_defined.m4 diff --git a/v2.5/toolkit/mydistconfig b/previous/v2.5/toolkit/mydistconfig similarity index 100% rename from v2.5/toolkit/mydistconfig rename to previous/v2.5/toolkit/mydistconfig diff --git a/v2.5/toolkit/myfullconfig b/previous/v2.5/toolkit/myfullconfig similarity index 100% rename from v2.5/toolkit/myfullconfig rename to previous/v2.5/toolkit/myfullconfig diff --git a/v2.5/toolkit/mygitcl b/previous/v2.5/toolkit/mygitcl similarity index 100% rename from v2.5/toolkit/mygitcl rename to previous/v2.5/toolkit/mygitcl diff --git a/v2.5/toolkit/mygittag b/previous/v2.5/toolkit/mygittag similarity index 100% rename from v2.5/toolkit/mygittag rename to previous/v2.5/toolkit/mygittag diff --git a/v2.5/toolkit/pyext/.gitignore b/previous/v2.5/toolkit/pyext/.gitignore similarity index 100% rename from v2.5/toolkit/pyext/.gitignore rename to previous/v2.5/toolkit/pyext/.gitignore diff --git a/v2.5/toolkit/pyext/Makefile.am b/previous/v2.5/toolkit/pyext/Makefile.am similarity index 100% rename from v2.5/toolkit/pyext/Makefile.am rename to previous/v2.5/toolkit/pyext/Makefile.am diff --git a/v2.5/toolkit/pyext/fastnlo.i b/previous/v2.5/toolkit/pyext/fastnlo.i similarity index 100% rename from v2.5/toolkit/pyext/fastnlo.i rename to previous/v2.5/toolkit/pyext/fastnlo.i diff --git a/v2.5/toolkit/src/.gitignore b/previous/v2.5/toolkit/src/.gitignore similarity index 100% rename from v2.5/toolkit/src/.gitignore rename to previous/v2.5/toolkit/src/.gitignore diff --git a/v2.5/toolkit/src/Makefile.am b/previous/v2.5/toolkit/src/Makefile.am similarity index 100% rename from v2.5/toolkit/src/Makefile.am rename to previous/v2.5/toolkit/src/Makefile.am diff --git a/v2.5/toolkit/src/fnlo-py-print.py b/previous/v2.5/toolkit/src/fnlo-py-print.py similarity index 100% rename from v2.5/toolkit/src/fnlo-py-print.py rename to previous/v2.5/toolkit/src/fnlo-py-print.py diff --git a/tools/fnlosrc_install.csh b/tools/fnlosrc_install.csh index d9ba66dd2933029e854ebb3471c8d851d07e9be7..73293a540e433680b4bc17906657ea49cf901fe1 100755 --- a/tools/fnlosrc_install.csh +++ b/tools/fnlosrc_install.csh @@ -241,7 +241,8 @@ if ( $#argv > 5 && $6 != "_" ) then # NNLOJET modules1 production version # set revision=rev5918 # NNLOJET modules2 production version - set revision=modules2_rev6591 +# set revision=modules2_rev6591 + set revision=rev7902 endif echo "NNLOJET usage: $tab$tab $withnnlojet" # With interface to Sherpa via MCGrid? @@ -776,8 +777,10 @@ if ( $withoptional ) then # fastNLO comes already with alpha_s evolutions from GRV or CRunDec, or # uses the one from the PDFs in LHAPDF # +# set arc="hoppet-1.1.5" # set arc="hoppet-1.2.0" # if ( ! -e ${arc}_installed ) then +# tar xzf ${arc}-patched.tar.gz # Need patched version on newer systems like Ubuntu 16.04 # tar xzf ${arc}.tar.gz # cd ${arc} # ./configure --prefix=${base} @@ -808,7 +811,7 @@ if ( $withoptional ) then # cd .. # touch ${arc}_installed # endif -#endif +endif # # #============================================================================== @@ -827,7 +830,8 @@ if ( ! $mpnnlo ) then # set arc="fastnlo_toolkit-2.5.0-2856" # set arc="fastnlo_toolkit-2.5.1-2890" # set arc="fastnlo_toolkit-2.5.1-3022" - set arc="fastnlo_toolkit-2.5.1-3034" +# set arc="fastnlo_toolkit-2.5.1-3034" + set arc="fastnlo_toolkit-2.6.0-3055" set rev="" if ( ! -e ${arc}_installed ) then tar xzf ${arc}${rev}.tar.gz @@ -841,6 +845,7 @@ if ( ! $mpnnlo ) then # HOPPET-1.2.0 leads to unresolved references with fastNLO interface to NLOJet++. # ./configure --prefix=${base} --enable-fortranext --with-yoda --with-hoppet --with-qcdnum ${rootoptpath} ${pyextopt} ./configure --prefix=${base} --with-yoda ${rootoptpath} ${pyextopt} +# ./configure --prefix=${base} --with-yoda --with-hoppet --with-qcdnum ${rootoptpath} ${pyextopt} # Doxygen does not work giving TeX compile error and not producing refman.tex # ./configure --prefix=${base} --enable-fortranext --with-yoda --with-hoppet --with-qcdnum ${rootoptpath} ${pyextopt} --disable-doxygen-doc else @@ -877,7 +882,8 @@ if ( ! $mpnnlo ) then # set arc="fastnlo_interface_nlojet-2.5.0-2819" # set arc="fastnlo_interface_nlojet-2.5.0-2858" # set arc="fastnlo_interface_nlojet-2.5.1-2888" - set arc="fastnlo_interface_nlojet-2.5.1-3030" +# set arc="fastnlo_interface_nlojet-2.5.1-3030" + set arc="fastnlo_interface_nlojet-2.6.0-3055" if ( ! -e ${arc}_installed ) then tar xzf ${arc}.tar.gz cd ${arc} @@ -915,12 +921,16 @@ if ( $withnnlojet ) then # nnlo-bridge to NNLOJet: #------------------------------------------------------------------------------ if ( ! $mpnnlo ) then -# set arc="nnlo-bridge-0.0.40"# updated scale settings for jetpt scale -# +# Updated scale settings for jetpt scale +# set arc="nnlo-bridge-0.0.40" # NNLOJET modules1 production version # set arc="nnlo-bridge-0.0.46" # NNLOJET modules2 production candidate - set arc="nnlo-bridge-1.0.1" +# set arc="nnlo-bridge-1.0.0" +# NNLOJET interface update with rev7902 + set arc="nnlo-bridge-1.0.2" +# NNLOJET modules2 APPLfast2 test +# set arc="nnlo-bridge-2.0.3" if ( ! -e ${arc}_installed ) then tar xzf ${arc}.tar.gz cd ${arc} @@ -956,7 +966,7 @@ if ( $withnnlojet ) then # Fixed makefile for gcc11 of revision 5918, or bridge updates for revision 6591 # Patches required? # set rev="_multicore" - set rev="_newcombine" # Has newer nnlojet-combine python code +# set rev="_newcombine" # Has newer nnlojet-combine python code tar xzf ${arc}${rev}.tar.gz cd ${arc}/driver # Skip depend for now for modules 2 revisions diff --git a/tools/plotting/fastnnlo_statunc.py b/tools/plotting/fastnnlo_statunc.py index 4b4bf3fa60d49f145a68db710f9aa4a33e771242..11709f7f9b8ca6185f2bd5481ab8580e54e5e520 100755 --- a/tools/plotting/fastnnlo_statunc.py +++ b/tools/plotting/fastnnlo_statunc.py @@ -1,5 +1,5 @@ #!/usr/bin/env python3 -#-*- coding:utf-8 -*- +# -*- coding:utf-8 -*- # ######################################################################## # @@ -9,10 +9,13 @@ # ######################################################################## # -# python2 compatibility -from __future__ import absolute_import -from __future__ import division -from __future__ import print_function +# fastNLO for direct evaluation of interpolation grids +# ATTENTION: fastNLO python extension is required for Python 3! +from fastnlo import SetGlobalVerbosity +from fastnlo import fastNLOLHAPDF +import fastnlo +import numpy as np +import matplotlib.pyplot as plt import argparse import glob import os @@ -22,7 +25,8 @@ import sys import timeit import matplotlib as mpl import matplotlib.gridspec as gridspec -from matplotlib.ticker import (FormatStrFormatter, LogFormatter, NullFormatter, ScalarFormatter, AutoMinorLocator, MultipleLocator) +from matplotlib.ticker import (FormatStrFormatter, LogFormatter, + NullFormatter, ScalarFormatter, AutoMinorLocator, MultipleLocator) from matplotlib import cm # We do not want any interactive plotting! Figures are saved to files instead. # This also avoids the ANNOYANCE of frequently missing Tkinter/tkinter (python2/3) GUI backends! @@ -56,20 +60,17 @@ else: useagg = True try: mpl.use(backend, force=True) - print('[fastnnlo_statunc]: Warning! Could not import cairo backend :-( Using agg instead for raster plots only!') + print( + '[fastnnlo_statunc]: Warning! Could not import cairo backend :-( Using agg instead for raster plots only!') except: useagg = False print('[fastnnlo_statunc]: Can not use agg backend :-(') - raise ImportError('[fastnnlo_statunc]: Neither cairo nor agg backend found :-( Cannot produce any plots. Good bye!') + raise ImportError( + '[fastnnlo_statunc]: Neither cairo nor agg backend found :-( Cannot produce any plots. Good bye!') mpl.use('agg') -import matplotlib.pyplot as plt # numpy -import numpy as np # fastNLO for direct evaluation of interpolation grids # ATTENTION: fastNLO python extension is required for Python 3! -import fastnlo -from fastnlo import fastNLOLHAPDF -from fastnlo import SetGlobalVerbosity #import warnings #warnings.filterwarnings("error") diff --git a/tools/plotting/fnlo-py-scaleunc.py b/tools/plotting/fnlo-py-scaleunc.py new file mode 100755 index 0000000000000000000000000000000000000000..e3efcfa113c977b388908943e0c40a96029bae2d --- /dev/null +++ b/tools/plotting/fnlo-py-scaleunc.py @@ -0,0 +1,662 @@ +#!/usr/bin/env python3 +# -*- coding:utf-8 -*- +# +######################################################################## +# +# Plot the scale uncertainty +# +# Created by B. Schillinger, 09.10.2018 +# Modified by K. Rabbertz, 31.10.2018, 07.03.2020 +# Simplified, standardised, and prepared for python3 by K. Rabbertz, 06/07 2024 +# +######################################################################## +# +# fastNLO for direct evaluation of interpolation grids +# ATTENTION: fastNLO python extension is required for Python 3! +from fastnlo import SetGlobalVerbosity +from fastnlo import fastNLOLHAPDF +import fastnlo +import matplotlib.pyplot as plt +import argparse +import glob +import os +import re +import numpy as np +import string +import sys +import timeit +import matplotlib as mpl +import matplotlib.gridspec as gridspec +from matplotlib.ticker import (FormatStrFormatter, LogFormatter, NullFormatter, ScalarFormatter, AutoMinorLocator, MultipleLocator) +from matplotlib.pyplot import cm +# import warnings +# warnings.filterwarnings("error") + + +# We do not want any interactive plotting! Figures are saved to files instead. +# This also avoids the ANNOYANCE of frequently missing Tkinter/tkinter (python2/3) GUI backends! +# To produce scalable graphics for publication use eps, pdf, or svg as file format. +# For this to work we try the Cairo backend, which can do all of these plus the raster format png. +# If this is not usable, we fall back to the Agg backend capable only of png for nice web plots. +#ngbackends = mpl.rcsetup.non_interactive_bk +#print('[fnlo-py-scaleunc]: Non GUI backends are: ', ngbackends) +# 1st try cairo +backend = 'cairo' +usecairo = True +try: + import cairocffi as cairo +except ImportError: + try: + import cairo + except ImportError: + usecairo = False + else: + if cairo.version_info < (1, 11, 0): + # Introduced create_for_data for Py3. + usecairo = False +if usecairo: + mpl.use('cairo') +else: + backend = 'agg' + useagg = True + try: + mpl.use(backend, force=True) + print('[fnlo-py-scaleunc]: Warning! Could not import cairo backend :-( Using agg instead for raster plots only!') + except: + useagg = False + print('[fnlo-py-scaleunc]: Can not use agg backend :-(') + raise ImportError('[fnlo-py-scaleunc]: Neither cairo nor agg backend found :-( Cannot produce any plots. Good bye!') + mpl.use('agg') + + +# Redefine ScalarFormatter +class ScalarFormatterForceFormat(ScalarFormatter): + # Override function that finds format to use. + def _set_format(self, vmin, vmax): + self.format = "%1.2f" # Give format here + + +# Action class to allow comma-separated (or empty) list in options +class SplitArgs(argparse.Action): + def __call__(self, parser, namespace, values, option_string=None): + if values: + setattr(namespace, self.dest, values[0].split(',')) + else: + setattr(namespace, self.dest, ['']) + + +# Some global definitions +_fntrans = str.maketrans({'[': '', ']': '', '(': '', ')': '', ',': ''}) # Filename translation table +_sntrans = str.maketrans({'[': '', ']': '', '(': '', ')': '', ',': '', '/': '÷'}) # Scalename translation table +_formats = {'eps': 0, 'pdf': 1, 'png': 2, 'svg': 3} +_text_to_order = {'LO': 0, 'NLO': 1, 'NNLO': 2} +_order_to_text = {0: 'LO', 1: 'NLO', 2: 'NNLO'} +_order_color = {'LO': 'g', 'NLO': 'b', 'NNLO': 'r'} +_order_symbol = {'LO': '^', 'NLO': 's', 'NNLO': 'o'} +_colors = ['tab:orange', 'tab:green', 'tab:purple', 'tab:blue', 'tab:brown'] +_symbols = ['s', 'X', 'o', '^', 'v'] +_hatches = ['', '//', '\\', '|', '-'] +_scale_to_text = {0: 'kScale1', 1: 'kScale2', 2: 'kQuadraticSum', 3: 'kQuadraticMean', 4: 'kQuadraticSumOver4', + 5: 'kLinearMean', 6: 'kLinearSum', 7: 'kScaleMax', 8: 'kScaleMin', 9: 'kProd', + 10: 'kS2plusS1half', 11: 'kPow4Sum', 12: 'kWgtAvg', 13: 'kS2plusS1fourth', 14: 'kExpProd2', 15: 'kExtern'} +_pdfbasenames = ['ABM11', 'ABMP15', 'ABMP16', 'CJ12', 'CJ15', 'CT10', 'CT14', 'HERAPDF20', 'JR14', + 'MMHT2014', 'MSTW2008', 'NNPDF23', 'NNPDF30', 'NNPDF31'] +_debug = False + +##################################################################################### + + +# Function plotting cross sections for a list of orders into one figure including scale uncertainties +# The ratio is done always with respect to the first order appearing in the order_list +# given e.g. via '-o NLO,NNLO', i.e. the first evaluated cross section, here NLO, +# that is stored in xs_all[0]. +def plotting(x_axis, xmin, xmax, xs_all, rel_scale_unc, abs_scale_unc, dxsr_cn, nostat, xlabel, ylabel, title, tablename, order_list, given_filename, scale_name, nice_scale_name, pdfset, variation_type, formats): + if variation_type == 'Scale uncertainty (2P)': + vartype = '2P' + elif variation_type == 'Scale uncertainty (6P)': + vartype = '6P' + + pdfnicename = 'Undefined' + for pdfn in _pdfbasenames: + if pdfn in pdfset: + pdfnicename = pdfn + + gs = gridspec.GridSpec(3, 3, hspace=0) + fig = plt.figure(figsize=(7, 7)) + ax1 = plt.subplot(gs[:-1, :]) + ax1.set_autoscalex_on(False) + plt.setp(ax1.get_xticklabels(), visible=False) + + # For plotting various results, max = 3, 'next to each other', handling via shift from bincenter + if len(order_list) == 1: + shift_list = [1.00] + elif len(order_list) == 2: + shift_list = [0.98, 1.02] + elif len(order_list) == 3: + shift_list = [0.96, 1.00, 1.04] + else: + print('[fnlo-py-scaleunc]: Too many orders to plot simultaneously. Aborted!') + print('[fnlo-py-scaleunc]: Current maximum is 3. The order list is', order_list) + sys.exit(1) + + # Upper subplot setup + # + # Set limits on x axis on coupled axis from lower plot + # ax1.set_xlim(left=xmin, right=xmax) + # TODO: 'minor_thresholds' needs matplotlib > 1.5.0 + # axfmt = LogFormatter(labelOnlyBase=False, minor_thresholds=(2, 0.4)) + # ax1.get_xaxis().set_minor_formatter(axfmt) + # ax1.get_xaxis().set_minor_formatter(NullFormatter()) + # ax1.set_xscale('log', nonposx='clip') # Will become nonpositive= in matplotlib 3.3.x + # ax1.set_yscale('log', nonposy='clip') # Will become nonpositive= in matplotlib 3.3.x + ax1.set_xscale('log', nonpositive='clip') + ax1.set_yscale('log', nonpositive='clip') + # Set label on x axis on coupled axis from lower plot + # ax1.set_xlabel(r'%s' %xlabel, horizontalalignment='right', x=1.0, verticalalignment='top', y=1.0) + ax1.set_ylabel(r'%s' % ylabel, horizontalalignment='right', x=1.0, + verticalalignment='top', y=1.0, rotation=90, labelpad=24) + # TODO: Commented out for now, since loc attribute not defined in prehistoric Centos7 matplotlib version 1.2.0 + ax1.set_title('%s' % title, loc='left') + # ax1.set_title('%s' % title) + ax1.text(0.03, 0.15, 'PDF set: %s' % pdfnicename, horizontalalignment='left', + verticalalignment='bottom', transform=ax1.transAxes) + ax1.text(0.03, 0.08, 'Scale: %s' % nice_scale_name, horizontalalignment='left', + verticalalignment='bottom', transform=ax1.transAxes) + ax1.text(0.03, 0.03, '%s' % variation_type, horizontalalignment='left', + verticalalignment='bottom', transform=ax1.transAxes) + + # Only for publication + # H1 + # ax1.text(0.35, 0.90, r'$30 < Q^2 < 42\,\mathrm{GeV}^2$', + # horizontalalignment='left', verticalalignment='bottom', transform=ax1.transAxes) + # ZEUS + # ax1.text(0.35, 0.90, r'$500 < Q^2 < 1000\,\mathrm{GeV}^2$', + # horizontalalignment='left', verticalalignment='bottom', transform=ax1.transAxes) + + # Plot all x section results in order_list + xs_index = -1 + for order_item, shift in zip(order_list, shift_list): + xs_index += 1 + yerror = 0*xs_all[xs_index, :] + if not nostat: + yerror = np.multiply( + xs_all[xs_index, :], dxsr_cn[xs_index, :]) + else: + yerror = abs(abs_scale_unc[xs_index]) + ax1.errorbar(x_axis*shift, xs_all[xs_index], yerr=yerror, elinewidth=1, linewidth=0.0, + ms=6, marker=_order_symbol[order_item], color=_order_color[order_item], label=order_item) + ax1.fill_between(x_axis*shift, xs_all[xs_index] + xs_all[xs_index]*rel_scale_unc[xs_index, 2, :], + xs_all[xs_index] + xs_all[xs_index]*rel_scale_unc[xs_index, 1, :], color=_order_color[order_item], hatch=_hatches[xs_index], alpha=0.30) + ax1.legend(fontsize=10, numpoints=1) + + # Lower subplot setup + # + ax2 = plt.subplot(gs[2, :], sharex=ax1) + # Set common x axis bounds for both + ax2.set_xlim(left=xmin, right=xmax) + # ax2.set_xbound(lower=xmin, upper=xmax) + # ax2.set_yscale('linear', nonposy='clip') # Will become nonpositive= in matplotlib 3.3.x + ax2.set_yscale('linear') + ax2.set_xlabel(r'%s' % xlabel, horizontalalignment='right', x=1.0, verticalalignment='top', y=1.0) + ax2.set_ylabel(r'Ratio to %s' % order_list[0], horizontalalignment='center', x=1.0, verticalalignment='top', y=0.5, rotation=90, labelpad=24) + # ax2.legend(fontsize=10, numpoints=1) + # ax1.set_xticklabels([]) + # ax1.set_xticks([]) + # ax1.get_xaxis().set_visible(False) + ax2.axhline(y=1, xmin=0, xmax=1, color='k', linestyle='dotted', linewidth=1.6, alpha=0.2) + + # Ratio subplot with relative scale uncertainties; denominator in ratio = first order in order_list + xs_index = -1 + ordernames = '' + for item in order_list: + xs_index += 1 + # Do not show error bars + yerror = 0*xs_all[xs_index, :] + mymarker = _order_symbol[item] + mymksize = 4 + if nostat: + # Error bars = scale uncertainty + # yerror = abs(abs_scale_unc[xs_index]) + # mymksize = 4 + # No error bars, only small symbols + yerror = 1*yerror + # mymarker = '.' + else: + # Error bars = statistical uncertainty if known + yerror = np.multiply( + xs_all[xs_index, :], dxsr_cn[xs_index, :]) + ordernames += '_%s' % item + ax2.errorbar(x_axis, xs_all[xs_index]/xs_all[0], yerr=yerror/xs_all[0], barsabove=True, elinewidth=1, linewidth=0.0, + ms=mymksize, marker=mymarker, color=_order_color[item], label=item) + ax2.fill_between(x_axis, (xs_all[xs_index]*(1+rel_scale_unc[xs_index, 2, :])/xs_all[0]), + (xs_all[xs_index]*(1+rel_scale_unc[xs_index, 1, :])/xs_all[0]), color=_order_color[item], hatch=_hatches[xs_index], alpha=0.30) + + fig.tight_layout() + + if given_filename is not None: + filename = '%s.scaleunc-%s.%s.%s' % (given_filename, + vartype, ordernames[1:], scale_name.translate(_sntrans)) + else: + filename = '%s.scaleunc-%s.%s.%s.%s' % ( + tablename, vartype, ordernames[1:], pdfset, scale_name.translate(_sntrans)) + if not nostat: + filename = filename+'.stat' + + # Do not use characters defined in _fntrans for filenames + filename = filename.translate(_fntrans) + + for fmt in formats: + figname = '%s.%s' % (filename, fmt) + fig.savefig(figname) + print('[fnlo-py-scaleunc]: Plot saved as:', figname) +# print(plt.get_fignums()) + plt.close(fig) + + +##################################################################################### + + +def main(): + + # Start timer + # just for measuring wall clock time - not necessary + start_time = timeit.default_timer() + + # Define arguments & options + parser = argparse.ArgumentParser(epilog='', formatter_class=argparse.ArgumentDefaultsHelpFormatter) + # Positional arguments + parser.add_argument('table', type=str, nargs='+', + help='Filename glob of fastNLO tables to be evaluated. This must be specified!') + + # Optional arguments + parser.add_argument('-a', '--asymmetric', action="store_true", + help='If -a is chosen, use asymmetric (6P) scale variations; otherwise use symmetric ones (2P).') + parser.add_argument('-d', '--datfiles', required=False, nargs='?', type=str, action=SplitArgs, + help='Comma-separated or empty list of NNLOJET dat files with statistical uncertainties for each order to show. If empty, dat files matching to table name are used. If not set, statistical uncertainties are ignored.') + parser.add_argument('-f', '--filename', default=None, type=str, + help='Output filename (optional).') + parser.add_argument('--format', required=False, nargs=1, type=str, action=SplitArgs, + help='Comma-separated list of plot formats to use: eps, pdf, png, svg. If nothing is chosen, png is used.') + parser.add_argument('-m', '--member', default=0, type=int, + help='Member of PDFset, default is 0.') + parser.add_argument('-o', '--order', required=False, nargs=1, type=str, action=SplitArgs, + help='Comma-separated list of orders to show: LO, NLO, and/or NNLO. If nothing is chosen, show all orders available in table.') + parser.add_argument('-p', '--pdfset', default='CT14nlo', type=str, + help='PDFset to evaluate fastNLO table.') + parser.add_argument('-s', '--scale', default=0, required=False, nargs='?', type=int, + choices=list(range(16)), metavar='[0-15]', + help='For flexible-scale tables define central scale choice for MuR and MuF by selection enum fastNLO::ScaleFunctionalForm ("0"=kScale1, "1"=kScale2, "2"=kQuadraticSum), ...') + parser.add_argument('--scalename', default=None, type=str, + help='Replace default scale name by given string.') + parser.add_argument('--title', default=None, type=str, + help='Replace table name as default title by given string.') + parser.add_argument('-v', '--verbose', action="store_true", + help="Increase output verbosity.") + parser.add_argument('--xlabel', default=None, type=str, + help='Replace x axis default label by given string.') + parser.add_argument('--ylabel', default=None, type=str, + help='Replace y axis default label by given string.') + + # Print header + print("\n###########################################################################################") + print("# fnlo-py-scaleunc:") + print("# Plot the scale uncertainty") + print("###########################################################################################\n") + + # Parse arguments + args = vars(parser.parse_args()) + + # List of table names + files = args['table'] + print('\n') + print('[fnlo-py-scaleunc]: Analysing table list:') + for file in files: + print('[fnlo-py-scaleunc]: ', file) + + # PDF set name + pdfset = os.path.basename(args['pdfset']) + print('[fnlo-py-scaleunc]: Using PDF set', pdfset) + + # Orders to be shown + iorders = [] + iordmin = _text_to_order['LO'] + iordmax = _text_to_order['NNLO'] + if args['order'] is None: + print('[fnlo-py-scaleunc]: Evaluate table up to highest available order.') + else: + for ord in args['order']: + if ord in _text_to_order: + iorders.append(_text_to_order[ord]) + else: + print('[fnlo-py-scaleunc]: Illegal order specified, aborted!') + print('[fnlo-py-scaleunc]: Order list:', args['order']) + exit(1) + iordmin = min(iorders) + iordmax = max(iorders) + print('[fnlo-py-scaleunc]: Evaluate table up to order(s)', args['order']) + + # Check existence of NNLOJET dat file for each order if desired + datfilenames = [] + nostat = False + if args['datfiles'] is None: + nostat = True + print('[fnlo-py-scaleunc]: No statistical uncertainties requested.') + elif args['datfiles'][0] == '': + print('[fnlo-py-scaleunc]: Automatic filename matching is used to load statistical uncertainties from NNLOJET.') + elif args['datfiles'][0] == '0': + print('[fnlo-py-scaleunc]: Get statistical uncertainties from within fastNLO table.') + else: + for datfile in args['datfiles']: + lstat = os.path.isfile(datfile) + if lstat: + datfilenames.append(datfile) + else: + print('[fnlo-py-scaleunc]: Given file ', datfile, + 'for statistical uncertainties not found, aborted!') + exit(1) + + # Type of scale variation (symmetric vs asymmetric) + if args['asymmetric']: + scale_var_type = fastnlo.kAsymmetricSixPoint + variation_type = 'Scale uncertainty (6P)' + else: + scale_var_type = fastnlo.kSymmetricTwoPoint + variation_type = 'Scale uncertainty (2P)' + + # Scale choice + scale_choice = args['scale'] + + # Scale name + nice_scale_name = args['scalename'] + + # Given filename + given_filename = args['filename'] + + # Plot formats to use + formats = args['format'] + if formats is None: + formats = ['png'] + for fmt in formats: + if fmt not in _formats: + print('[fnlo-py-scaleunc]: Illegal format specified, aborted!') + print('[fnlo-py-scaleunc]: Format list:', args['format']) + exit(1) + elif fmt != 'png' and not usecairo: + print('[fnlo-py-scaleunc]: Vector format plots not possible without cairo backend, aborted!') + print('[fnlo-py-scaleunc]: Format list:', args['format']) + exit(1) + + # Plot labelling + nice_title = args['title'] + nice_xlabel = args['xlabel'] + nice_ylabel = args['ylabel'] + + # Verbosity + verb = args['verbose'] + if verb: + print('[fnlo-py-scaleunc]: Using matplotlib version ', mpl.__version__) + print(' from location ', mpl.__file__) + + # Loop over table list + for table in files: + # Table name + tablepath = os.path.split(table)[0] + if not tablepath: + tablepath = '.' + tablename = os.path.split(table)[1] + if tablename.endswith('.tab.gz'): + tablename = tablename.replace('.tab.gz', '', 1) + elif tablename.endswith('.tab'): + tablename = tablename.replace('.tab', '', 1) + else: + print('[fnlo-py-scaleunc]: Error! Wrong extension for table: ', table) + exit(1) + print('[fnlo-py-scaleunc]: Analysing table: ', table) + + ###################### Start EVALUATION with fastNLO library ################################################### + # SetGlobalVerbosity(0) # Does not work since changed to default in the following call + # Take the general information (bin_bounds, labels, order_existence, etc.) from given pdfset. + fnlo = fastnlo.fastNLOLHAPDF(table, args['pdfset'], args['member']) + + # Get labeling for the x-axis + # Dimensionality of the table: + ndim = fnlo.GetNumDiffBin() + if verb: + print('\n') + print('[fnlo-py-scaleunc]: Table Dimensions: ', ndim) + + # Labels of all the dimensions: + labels = fnlo.GetDimLabels() + if verb: + print('[fnlo-py-scaleunc]: Labels:', labels) + + # x label of first dimension from table: + xlabel = fnlo.GetDimLabel(0) + if verb: + print('[fnlo-py-scaleunc]: x-label:', xlabel) + + # Generic y label + ylabel = '$\sigma \pm \Delta\sigma(\mu_R,\mu_F)$' + + # Creating x-axis + bin_bounds = np.array(fnlo.GetObsBinsBounds(0)) + # bin_bounds = np.array(fnlo.GetDim1BinBounds(0)) Mods needed for 2D tables ... + if verb: + print('[fnlo-py-scaleunc]: bin_bounds.T: \n', bin_bounds.T, '\n') + print('[fnlo-py-scaleunc]: bin_bounds.flatten()', + bin_bounds.flatten(), '\n') + + x_axis = (bin_bounds.T[0]+bin_bounds.T[1]) / 2. # this is a list of bin centers + xmin = 0.95*min(bin_bounds.ravel()) + xmax = 1.05*max(bin_bounds.ravel()) + if verb: + print('[fnlo-py-scaleunc]: xmin=%s, xmax=%s. \n' % (xmin, xmax)) + + # Preparing x-errors (via bin_bounds) --> x_errors[0, :] are initially negative (positive via -1*), x_errors[1, :] positive + x_errors = np.array( + [-1*(bin_bounds.T[0]-x_axis), bin_bounds.T[1]-x_axis]) + if verb: + print('[fnlo-py-scaleunc]: \n x_errors: ', x_errors, '\n') + + # Check existence of orders in table + lflex = fnlo.GetIsFlexibleScaleTable() + scale_name = 'scale1' + o_existence = [False, False, False] + cnt_order = -1 + max_order = 0 + for i in range(3): + o_existence[i] = fnlo.SetContributionON( + fastnlo.kFixedOrder, i, True) + if o_existence[i]: + max_order = i + if not lflex: + if scale_choice != 0: + print( + '[fnlo-py-scaleunc]: Invalid choice of scale = ', scale_choice, ' Aborted!') + print( + '[fnlo-py-scaleunc]: For fixed-scale tables only the default=0 is allowed.') + exit(1) + else: + scale_name = fnlo.GetScaleDescription(i, 0) + else: + if scale_choice < 2: + scale_name = fnlo.GetScaleDescription(i, scale_choice) + else: + scl0 = fnlo.GetScaleDescription(i, 0) + scl1 = fnlo.GetScaleDescription(i, 1) + scale_name = _scale_to_text[scale_choice] + \ + '_'+scl0+'_'+scl1 + if cnt_order == i-1: + cnt_order += 1 + if verb: + print('[fnlo-py-scaleunc]: Table has continuous orders up to', + cnt_order, 'and a maximal order of', max_order) + + # If previously undefined set iordmax to maximum found in table + if args['order'] is None: + iordmax = max_order + + if iordmax > cnt_order: + print('[fnlo-py-scaleunc]: Invalid choice of orders. Aborted!') + print('[fnlo-py-scaleunc]: Highest order requested is', + _order_to_text[iordmax], 'but continuous orders are available only up to', _order_to_text[cnt_order]) + exit(1) + + order_list = [] + if args['order'] is None: + for iord in range(cnt_order+1): + order_list.append(_order_to_text[iord]) + else: + order_list = args['order'] + + print('[fnlo-py-scaleunc]: List of requested orders:', order_list) + + # Read in statistical uncertainty for each order if requested + dxsr_cn = [] + sep = '.' + if not nostat: + if args['datfiles'][0] == '': + for order in order_list: + parts = tablename.split(sep) + parts[1] = order + datfile = tablepath + '/' + sep.join(parts) + '.dat' + datfilenames.append(datfile) + + lstat = (len(datfilenames) > 0) + if lstat and len(datfilenames) != len(order_list): + print('[fnlo-py-scaleunc]: Mismatch between no. of requested orders and no. of filenames for statistical uncertainties, aborted!') + exit(1) + + dxsr = [] + for fname in datfilenames: + print( + '[fnlo-py-scaleunc]: Taking statistical uncertainties from', fname) + cols = np.loadtxt(fname, usecols=list(range(3, 5))) + xs_dat = np.array(cols[:, 0]) + dxs_dat = np.array(cols[:, 1]) + dxsr_dat = np.divide(dxs_dat, xs_dat, out=np.ones_like( + dxs_dat), where=xs_dat != 0) + dxsr.append(dxsr_dat) + dxsr_cn = abs(np.array(dxsr)) + # Empty list for use with next table in automatic mode + if args['datfiles'][0] == '': + datfilenames = [] + + # For flexible-scale tables set scale to user choice (default is 0) + + if lflex: + print( + '[fnlo-py-scaleunc]: Setting requested scale choice for flexible-scale table:', scale_choice) + fnlo.SetMuRFunctionalForm(scale_choice) + fnlo.SetMuFFunctionalForm(scale_choice) + else: + if scale_choice == 0: + print( + '[fnlo-py-scaleunc]: Evaluating fixed-scale table. Scale choice must be', scale_choice) + else: + print( + '[fnlo-py-scaleunc]: No scale choice possible for fixed-scale table. Aborted!') + print('[fnlo-py-scaleunc]: scale_choice = ', scale_choice) + exit(1) + + # Now evaluate fastNLO table having a look at scale uncertainties + xs_list = [] # will contain total cross section for selected orders out of LO, NLO, NNLO + # list for relative scale uncertainties (low, high) for selected orders + rel_unc_list = [] + for n in order_list: + for j in range(0, max_order+1): + if j <= _text_to_order[n]: + fnlo.SetContributionON(fastnlo.kFixedOrder, j, True) + else: + fnlo.SetContributionON(fastnlo.kFixedOrder, j, False) + if verb: + print('[fnlo-py-scaleunc]: \n') + print('[fnlo-py-scaleunc]: Calculate XS for order: %s' % n, '\n') + print( + '[fnlo-py-scaleunc]: ---- ---- ---- ---- ---- ---- ---- ----') + fnlo.CalcCrossSection() + xs_list.append(fnlo.GetCrossSection()) + + ### Get scale uncertainties ### + if verb: + print('[fnlo-py-scaleunc]: Used scale factor MuF: ', + fnlo.GetScaleFactorMuF()) + print('[fnlo-py-scaleunc]: Used scale factor MuR: ', + fnlo.GetScaleFactorMuR(), '\n') + print('[fnlo-py-scaleunc]: Calculate scale uncertainties \n') + # RELATIVE scale uncertainty with chosen type of scale variation (symmetric or asymmetric) + # Up to NLO, it is possible to use HOPPET with fixed-scale tables + # fnlo.UseHoppetScaleVariations(True) + # Calculate this already for all accessible orders in any case + rel_scale_unc_item = np.array(fnlo.GetScaleUncertaintyVec(scale_var_type)) + rel_unc_list.append(rel_scale_unc_item) + if verb: + print('[fnlo-py-scaleunc]: \n') + print('[fnlo-py-scaleunc]: Relative scale uncertainty in %s: \n' % n) + # 3 entries: central value (xs), unc_low, unc_high + print(rel_scale_unc_item, '\n') + print( + '---------------------------------------------------------------------------------------') + print( + '---------------------------------------------------------------------------------------') + + xs_all = np.array(xs_list) + rel_scale_unc = np.array(rel_unc_list) + ########## + # structure of rel_scale_unc: + # rel_scale_unc[0,:,:] means LO, rel_scale_unc[1,:,:] means NLO, and rel_scale_unc[2,:,:] in NNLO + # rel_scale_unc[0,0,:] means xs in LO + # rel_scale_unc[0,1,:] means rel. uncertainty upwards (in LO) + # rel_scale_unc[0,2,:] means rel. uncertainty downwards (in LO) + ######### + + if verb: + print('[fnlo-py-scaleunc]: Cross section xs_all uses ', order_list) + + if verb: + print(xs_all, '\n \n') + + # ABSOLUTE scale uncertainty + # length of axis 0 in xs_all equals number of orders + num_orders = np.size(xs_all, 0) + abs_scale_unc = np.empty([num_orders, 2, len(x_axis)]) + for k in range(0, len(xs_all)): + abs_scale_unc[k, 0, :] = rel_scale_unc[k, 2, :] * \ + xs_all[k] # absolute uncertainties downwards (low) + abs_scale_unc[k, 1, :] = rel_scale_unc[k, 1, :] * \ + xs_all[k] # absolute uncertainties upwards (high) + + if verb: + print( + '[fnlo-py-scaleunc]: Absolute Scale uncertainties downwards, upwards (order by order): \n') + print(abs_scale_unc, '\n') + + ############################## Do the plotting #################################################### + + if nice_title is None: + title = tablename + else: + title = nice_title + if nice_scale_name is None: + nice_scale_name = scale_name + if nice_xlabel is not None: + xlabel = nice_xlabel + if nice_ylabel is not None: + ylabel = nice_ylabel + + # Without statistical uncertainties create zero array of proper dimensions here + if len(dxsr_cn) == 0: + dxsr_cn = np.zeros((xs_all.shape[0], xs_all.shape[1])) + if _debug: + print('dxsr_cn', dxsr_cn) + + plotting(x_axis, xmin, xmax, xs_all, rel_scale_unc, abs_scale_unc, dxsr_cn, nostat, xlabel, ylabel, title, tablename, + order_list, given_filename, scale_name, nice_scale_name, pdfset, variation_type, formats) + + stop_time = timeit.default_timer() + timediff = stop_time-start_time + print('fnlo-py-scaleunc: Elapsed time: %s sec = %s min' % (timediff, round(timediff/60, 2))) + + +if __name__ == '__main__': + main() diff --git a/tools/plotting/fnlo-py-subprocs.py b/tools/plotting/fnlo-py-subprocs.py new file mode 100755 index 0000000000000000000000000000000000000000..5d569b35ac8a26d75d64d345316988d097d5b5dd --- /dev/null +++ b/tools/plotting/fnlo-py-subprocs.py @@ -0,0 +1,449 @@ +#!/usr/bin/env python3 +# -*- coding:utf-8 -*- +# +######################################################################## +# +# Plot the subprocess decomposition +# +# Created by B. Schillinger, 01.06.2018 +# Modified by K. Rabbertz, 15.04.2019 +# Simplified, standardised, and prepared for python3 by K. Rabbertz, 06/07 2024 +# +######################################################################## +# +# fastNLO for direct evaluation of interpolation grids +# ATTENTION: fastNLO python extension is required for Python 3! +from fastnlo import SetGlobalVerbosity +from fastnlo import fastNLOLHAPDF +import fastnlo +import matplotlib.pyplot as plt +import argparse +import os +import re +import numpy as np +import timeit +import matplotlib as mpl +import matplotlib.gridspec as gridspec +from matplotlib.ticker import (FormatStrFormatter, LogFormatter, NullFormatter, ScalarFormatter, AutoMinorLocator, MultipleLocator) +from matplotlib.pyplot import cm +# import warnings +# warnings.filterwarnings("error") + + +# We do not want any interactive plotting! Figures are saved to files instead. +# This also avoids the ANNOYANCE of frequently missing Tkinter/tkinter (python2/3) GUI backends! +# To produce scalable graphics for publication use eps, pdf, or svg as file format. +# For this to work we try the Cairo backend, which can do all of these plus the raster format png. +# If this is not usable, we fall back to the Agg backend capable only of png for nice web plots. +#ngbackends = mpl.rcsetup.non_interactive_bk +#print('[fastnnlo_scaleunc]: Non GUI backends are: ', ngbackends) +# 1st try cairo +backend = 'cairo' +usecairo = True +try: + import cairocffi as cairo +except ImportError: + try: + import cairo + except ImportError: + usecairo = False + else: + if cairo.version_info < (1, 11, 0): + # Introduced create_for_data for Py3. + usecairo = False +if usecairo: + mpl.use('cairo') +else: + backend = 'agg' + useagg = True + try: + mpl.use(backend, force=True) + print('[fnlo-py-subprocs]: Warning! Could not import cairo backend :-( Using agg instead for raster plots only!') + except: + useagg = False + print('[fnlo-py-subprocs]: Can not use agg backend :-(') + raise ImportError('[fnlo-py-subprocs]: Neither cairo nor agg backend found :-( Cannot produce any plots. Good bye!') + mpl.use('agg') + + +# Redefine ScalarFormatter +class ScalarFormatterForceFormat(ScalarFormatter): + # Override function that finds format to use. + def _set_format(self, vmin, vmax): + self.format = "%1.2f" # Give format here + + +# Action class to allow comma-separated (or empty) list in options +class SplitArgs(argparse.Action): + def __call__(self, parser, namespace, values, option_string=None): + if values: + setattr(namespace, self.dest, values[0].split(',')) + else: + setattr(namespace, self.dest, ['']) + + +# Some global definitions +_fntrans = str.maketrans({'[': '', ']': '', '(': '', ')': '', ',': ''}) # Filename translation table +_formats = {'eps': 0, 'pdf': 1, 'png': 2, 'svg': 3} +_text_to_order = {'LO': 0, 'NLO': 1, 'NNLO': 2} +_order_to_text = {0: 'LO', 1: 'NLO', 2: 'NNLO'} + +# Some process dictionaries +_process_color = {"gg": "red", "gq": "orange", "gaq": "yellow", + "qq": "green", "qaq": "blue", "aqaq": "purple"} +_process_names = { + "gg": "Gluon-Gluon", + "gq": "Gluon-Quark", + "gaq": "Gluon-Antiquark", + "qq": "Quark-Quark", + "qaq": "Quark-Antiquark", + "aqaq": "Antiquark-Antiquark", +} +_process_texnames = { + "gg": r"$\mathrm{gg}$", + "gq": r"$\mathrm{gq}$", + "gaq": r"$\mathrm{g\overline{q}}$", + "qq": r"$\mathrm{qq}$", + "qaq": r"$\mathrm{q\overline{q}}$", + "qaq": r"$\mathrm{q\overline{q}}$", + "aqaq": r"$\mathrm{\overline{q}\overline{q}}$", +} + +##################################################################################### + + +def main(): + + # Start timer + # just for measuring wall clock time - not necessary + start_time = timeit.default_timer() + + # Define arguments & options + parser = argparse.ArgumentParser(epilog='', formatter_class=argparse.ArgumentDefaultsHelpFormatter) + # Positional arguments + parser.add_argument('tabfile', type=argparse.FileType('r'), + help='fastNLO table to be evaluated including path and extension .tab or tab.gz.') + + # Optional arguments + parser.add_argument('-s', '--subprocs', required=False, nargs=1, type=str, action=SplitArgs, + default=['gg', 'gq', 'gaq', 'qq', 'qaq', 'aqaq'], + choices=['gg', 'gq', 'gaq', 'qq', 'qaq', 'aqaq'], + help='Subprocesses to be compared.\n' + 'Options: gg, gq, gaq, qq, qaq, aqaq (TODO: q=q, q!q, uu, uau, auau, etc.)\n' + 'See SelectProcesses() in fastNLOReader.cc for more information.') + + parser.add_argument('-o', '--order', required=False, nargs='?', type=str, default='NNLO', choices=['LO', 'NLO', 'NNLO'], + help='Order to which the subprocess contributions are calculated.') + + parser.add_argument('-n', '--norm-order', required=False, nargs='?', type=str, default='SAME', choices=['LO', 'NLO', 'NNLO', 'SAME'], + help='Normalisation order to which the subprocesses contributions are normalised.') + + parser.add_argument('-p', '--pdfset', default='CT18NNLO', + help='PDFset to use with fastNLO table.') + + parser.add_argument('-m', '--member', default=0, type=int, + help='Member of PDFset to use, default is 0.') + + parser.add_argument('-v', '--verbosity', type=int, default=1, choices=[-1000, 0, 1, 2, 1000], + help='Set verbosity of fastNLO. \n' + 'Choices are -1000 (DEBUG), 0 (INFO), 1 (WARNING), 2 (ERROR), 1000 (SILENT)') + # Options for plotting details + parser.add_argument('--filename', default=None, type=str, + help='Replace default filename derived from table name and orders by given string.') + parser.add_argument('--format', required=False, nargs=1, type=str, action=SplitArgs, + help='Comma-separated list of plot formats to use: eps, pdf, png, svg. If nothing is chosen, png is used.') + parser.add_argument('--title', default=None, type=str, + help='Replace table name as default title by given string.') + parser.add_argument('--legtitle', default=None, type=str, + help='Replace order & PDF set as default title by given string.') + parser.add_argument('--xlabel', default=None, type=str, + help='Replace default x axis label from table by given string, e.g. \'$p_\mathrm{T}$ [GeV]\'') + parser.add_argument('--ylabel', default='Subprocess decomposition', type=str, + help='Replace y axis label by given string.') + parser.add_argument('--xmin', default=None, type=float, + help='Replace default x axis minimum from table by given number.') + parser.add_argument('--xmax', default=None, type=float, + help='Replace default x axis maximum from table by given number.') + parser.add_argument('--ymin', default=None, type=float, + help='Replace default y axis minimum from table by given number.') + parser.add_argument('--ymax', default=None, type=float, + help='Replace default y axis maximum from table by given number.') + + # Print header + print("\n###########################################################################################") + print("# fnlo_py_subprocs:") + print("# Plot the subprocess decomposition") + print("###########################################################################################\n") + + # Parse arguments + args = vars(parser.parse_args()) + + # Table and table name + table = args['tabfile'].name + tabbase = os.path.basename(table) + # Eliminate extensions tab and gz + tabname = re.sub('.gz$', '', tabbase) + tabname = re.sub('.tab$', '', tabname) + print('[fnlo-py-subprocs]: Going to read table {}.'.format(tabbase)) + + # PDF set + pdfset_ = os.path.basename(args['pdfset']) + pdfname = os.path.splitext(pdfset_)[0] + print('[fnlo-py-subprocs]: Using PDF set {}.'.format(pdfname)) + + # Subprocesses to investigate + print('[fnlo-py-subprocs]: Subprocesses that will be investigated: ') + print('[fnlo-py-subprocs]: ', args['subprocs']) + + # Set subprocess and normalisation orders + order = args['order'] + norm_order = args['norm_order'] + if norm_order == 'SAME': + norm_order = order + print('[fnlo-py-subprocs]: The chosen subprocess order is: {}'.format(order)) + print('[fnlo-py-subprocs]: The chosen normalisation order is: {}'.format(norm_order)) + + # Plot formats to use + formats = args['format'] + if formats is None: + formats = ['png'] + for fmt in formats: + if fmt not in _formats.keys(): + print('[fnlo-py-subprocs]: Illegal format specified, aborted!') + print('[fnlo-py-subprocs]: Format list:', args['format']) + exit(1) + + # Verbosity + ldebug = False + if args['verbosity'] < 1: + ldebug = True + + ###################### Start EVALUATION with fastNLO library ################################################### + print('[fnlo-py-subprocs]: Starting table evaluation.') + SetGlobalVerbosity(args['verbosity']) + fnlo = fastnlo.fastNLOLHAPDF(table, args['pdfset'], args['member']) + + # Get info from table + # Get dimensionality of table: + ndim = fnlo.GetNumDiffBin() + if ndim > 1: + print('[fnlo-py-subprocs]: Error! Script only tested for use with 1-dim. grids, but ndim = {}. Aborted!'.format(ndim)) + + # Determine maximum of subsequent orders available in table + max_iorder = -1 + o_existence = [] + for i in range(_text_to_order['NNLO']+1): + o_existence.append(fnlo.SetContributionON(fastnlo.kFixedOrder, i, True)) + if o_existence[i]: + max_iorder = max_iorder + 1 + else: + break + print('[fnlo-py-subprocs]: Maximum subsequent order found in table is: {}, corresponding to {}.'.format(max_iorder, _order_to_text[max_iorder])) + if max_iorder < _text_to_order[order] or max_iorder < _text_to_order[norm_order]: + print('[fnlo-py-subprocs]: Error! Maximum subsequent order available smaller than requested order. Aborted!') + print('[fnlo-py-subprocs]: Requested: {}, found in table: {} vs. {}'.format(max_iorder, _text_to_order[order], _text_to_order[norm_order])) + exit(1) + + # Get labels of all dimensions in table + labels = fnlo.GetDimLabels() + # Get x label from first dimension: + xlabel = fnlo.GetDimLabel(0) + if args['xlabel'] is not None: + xlabel = args['xlabel'] + print("[fnlo-py-subprocs]: x-axis label: {}".format(xlabel)) + # y label + ylabel = args['ylabel'] + print("[fnlo-py-subprocs]: y-axis label: {}".format(ylabel)) + # Plot title + title = tabname + if args['title'] is not None: + title = args['title'] + print("[fnlo-py-subprocs]: Plot title: {}".format(title)) + + # Get bin bounds in x + bin_bounds = np.array(fnlo.GetObsBinsBounds(0)) + xlow = bin_bounds[0][0] + xhig = bin_bounds[-1][1] + + # Set x axis limits + if args['xmin'] is not None: + xlow = args['xmin'] + if args['xmax'] is not None: + xhig = args['xmax'] + print("[fnlo-py-subprocs]: x-axis minimum: {}".format(xlow)) + print("[fnlo-py-subprocs]: x-axis maximum: {}".format(xhig)) + + # Set y axis limits (ylow, yhig might be None, i.e. unset!) + ylow = args['ymin'] + yhig = args['ymax'] + + # Evaluate cross section for normalisation + print("[fnlo-py-subprocs]: Normalisation order: {}".format(norm_order)) + for j in range(0, max_iorder+1): + fnlo.SetContributionON(fastnlo.kFixedOrder, j, j <= _text_to_order[norm_order]) + fnlo.CalcCrossSection() + xs_all_oneplot = np.array(fnlo.GetCrossSection()) + if ldebug: + print("[fnlo-py-subprocs]: The normalisation cross section is:") + print("[fnlo-py-subprocs]: ", xs_all_oneplot) + + print("[fnlo-py-subprocs]: Subprocess Order: {}".format(order)) + for l in range(0, max_iorder+1): + fnlo.SetContributionON(fastnlo.kFixedOrder, l, l <= _text_to_order[order]) + xs_subproc_list = [] + for i in range(0, len(args['subprocs'])): + subproc_name = args['subprocs'][i] + print('[fnlo-py-subprocs]: Selected subprocess: {}'.format(subproc_name)) + fnlo.SelectProcesses(subproc_name, True) + fnlo.CalcCrossSection() + xs_subproc = np.array(fnlo.GetCrossSection()) + xs_subproc_list.append(xs_subproc) + xs_sub_oneplot = np.array(xs_subproc_list) + + # Calculate fraction of subprocess at order on total cross sectio at norm_order + fractions_sub_oneplot = [] + for k in range(0, len(args['subprocs'])): + fractions_sub_oneplot.append(np.divide(xs_sub_oneplot[k, :], xs_all_oneplot[:])) + fractions_oneplot = np.array(fractions_sub_oneplot) + + # Checking whether contribution is positive or negative + pos_contr = np.array(fractions_oneplot) + neg_contr = np.array(fractions_oneplot) + + # Go through 'fractions' = subprocess after subprocess + for i in range(0, len(args['subprocs'])): + for j in range(0, len(bin_bounds)): # Check the different bins + if (fractions_oneplot[i, j] < 0): + pos_contr[i, j] = 0.0 + else: + neg_contr[i, j] = 0.0 + if ldebug: + print('[fnlo-py-subprocs]: Positive contributions of {} in {} on total xs in {}:'.format(args['subprocs'][i], order, norm_order)) + print('[fnlo-py-subprocs]: ', pos_contr[i, :], '\n') + print('[fnlo-py-subprocs]: Negative contributions of {} in {} on total xs in {}:'.format(args['subprocs'][i], order, norm_order)) + print('[fnlo-py-subprocs]: ', neg_contr[i, :], '\n') + + if ldebug: + print('[fnlo-py-subprocs]: Summary of positive and negative contributions of the subprocesses:\n') + print('[fnlo-py-subprocs]: Positive:', pos_contr, '\n') + print('[fnlo-py-subprocs]: Negative:', neg_contr, '\n') + + # Create stackplot that compares the contribution of the subprocesses to the total cross section + plt.close() + + fig = plt.figure(figsize=(8, 7)) + ax0 = fig.add_subplot(111) + # Number of bins via bin_bounds variable + # For tracking the current 'height' of stackplot, in order to staple and not overlap the values for each subprocess + y0_pos = np.zeros([len(bin_bounds)]) + # Same as above for the negative contributions, plotted below x-axis + y0_neg = np.zeros([len(bin_bounds)]) + patches = [] # Needed later for legend + + # Go through fractions, subproc by subproc + for i in range(0, len(args['subprocs'])): + cl = _process_color[args['subprocs'][i]] + lb = _process_texnames[args['subprocs'][i]] + + # Positive contributions + ax0.fill_between(bin_bounds.flatten(), steppify_bin(y0_pos), steppify_bin(y0_pos+pos_contr[i, :]), facecolor=cl, alpha=0.75) + # Calculate new height of stackplot + y0_pos += pos_contr[i, :] + + # Negative contributions + ax0.fill_between(bin_bounds.flatten(), steppify_bin(y0_neg), steppify_bin(y0_neg+neg_contr[i, :]), facecolor=cl, hatch='X', alpha=0.75) + # Calculate new height below x-axis + y0_neg += neg_contr[i, :] + + # Patch for subprocess i (for the legend) + patches.append(mpl.patches.Rectangle((0, 0), 0, 0, color=cl, label=lb, alpha=0.75)) + + # Derive y-axis limits from content, if not set otherwise + if ylow is None: + ylow = np.amin(y0_neg) + if yhig is None: + yhig = np.amax(y0_pos) + print("[fnlo-py-subprocs]: y-axis minimum: {}".format(ylow)) + print("[fnlo-py-subprocs]: y-axis maximum: {}".format(yhig)) + + # Set axes limits + ax0.set_xlim(xlow, xhig) + ax0.set_ylim(ylow, yhig) + ax0.set_xscale('log', nonpositive='clip') + # ax0.autoscale(enable=True, axis='x', tight=True) + + for i in range(len(args['subprocs'])-1, -1, -1): + ax0.add_patch(patches[i]) + + # Dotted line at xs_sub/xs = 1 = 100% + plt.axhline(y=1, xmin=0, xmax=1, color='k', linestyle='dotted') + # Dotted line at xs_sub/xs = 0 = 0% + plt.axhline(y=0, xmin=0, xmax=1, color='k', linestyle='-') + + plt.title(label=title, fontsize=16, loc='center') + ax0.set_xlabel(xlabel, fontsize=16, loc='right') + ax0.set_ylabel(ylabel, fontsize=16, loc='top') + plt.xticks(fontsize=16) + plt.yticks(fontsize=16) + # TODO: ticks & labels + # ax0.get_xaxis().set_major_locator(mpl.ticker.LogLocator(subs=(1.0, 2.0, 4.0, 7.0))) + # ax0.get_xaxis().set_major_formatter(mpl.ticker.LogFormatter()) + legtitle = '{} / {}'.format(order, norm_order) + if order == norm_order: + legtitle = '{}'.format(order) + legtitle = legtitle+'\n'+args['pdfset'] + if args['legtitle'] is not None: + legtitle = args['legtitle'] + plt.legend(title=legtitle, loc='best') # reverse=True requires matplotlib 3.7 + + plt.tight_layout() + fig.tight_layout() + + # Naming of the plots + figname = tabname + if args['filename'] is not None: + figname = args['filename'] + figname = figname + '_' + order + '-vs-' + norm_order + + # Store in all requested formats + for fmt in formats: + filename = '%s.%s' % (figname, fmt) + # ban characters defined in _fntrans for filenames (parentheses and commas) + filename = filename.translate(_fntrans) + fig.savefig(filename, bbox_inches='tight') + print('[fnlo-py-subprocs]: Plot saved as:', filename) + plt.close(fig) + + stop_time = timeit.default_timer() + timediff = stop_time-start_time + print('fnlo-py-subprocs: Elapsed time: %s sec = %s min' % (timediff, round(timediff/60, 2))) + + +################################################## +# function to make better uncertainty plot (shaded) +# could maybe be replaced by .flatten() ?? + + +def steppify_bin(arr, isx=False): + """ + Produce stepped array of arr, needed for example for stepped fill_betweens. + Pass all x bin edges to produce stepped x arr and all y bincontents to produce + stepped bincontents representation + steppify_bin([1,2,3], True) + -> [1,2,2,3] + steppify_bin([5,6]) + -> [5,5,6,6] + """ + if isx: + # newarr = np.array(zip(arr[:-1], arr[1:])).ravel() + newarr = np.array(list(zip(arr[:-1], arr[1:]))).flatten() + else: + # newarr = np.array(zip(arr, arr)).ravel() + newarr = np.array(list(zip(arr, arr))).flatten() + return newarr + + +################################################# + +if __name__ == '__main__': + main() diff --git a/tools/plotting/sp_contrib_flexible.py b/tools/plotting/sp_contrib_flexible.py deleted file mode 100755 index f126d2553b767475c772f3bde60a45abd979cc51..0000000000000000000000000000000000000000 --- a/tools/plotting/sp_contrib_flexible.py +++ /dev/null @@ -1,822 +0,0 @@ -#! /usr/bin/env python - -############################################################### -#Script for comparing the contribution of several subprocesses -#to the total cross section. -#Either (per default) as stackplot or for single process (-e). -# -#Choice of specific orders for subprocess (-o) and normalisation -#(-n) is possible here. -#If no specific order is chosen --> all 5 plots are produced. -# -#General script, not customized for any certain tables. -############################################################### - - -import argparse -import shutil -import numpy as np -import os -import time, datetime -import matplotlib -matplotlib.use('Agg') # -import matplotlib.pyplot as plt -import matplotlib.gridspec as gridspec -from matplotlib.pyplot import cm -import sys - -import matplotlib.style -matplotlib.style.use('classic') #to produce plots that look like they used to in matplotlib 1.x - -import fastnlo - - - -def main(): - - parser = argparse.ArgumentParser() - - #make it possible to use different options when running - parser.add_argument('-t','--table', default='table.tab', required=True, - help='FastNLO tables that shall be evaluated.') - parser.add_argument('-p', '--pdfset', default='CT14nlo', - help='PDFset(s) to evaluate fastNLO tables.') - parser.add_argument('-m', '--member', default=0, type=int, - help='Member of PDFset, default is 0.') - - parser.add_argument('-s', '--subproc', default=['all'], type=str, nargs='*', - help='Subprocesses that shall be compared. \n' - 'Options: gg, gq, gaq, qq, q=q, q!q, uu, auu, auau, etc. \n' - 'See SelectProcesses() in fastNLOReader.cc for more information.') - - parser.add_argument('-e', '--extraplot', default=False, const=True, type=bool, nargs='?', - help='Produces extra single-process-plots if option -e is chosen. \n' - 'Otherwise stackplot (containing all chosen processes) per default.') - - parser.add_argument('-f', '--filename', type=str, #default='stackplot.png', - help='Optional name for output file. \n' - 'If nothing is chosen: string containing tablename and orders.') - - parser.add_argument('-x', '--xaxis', default='x quantity', type=str, - help='Set label for x-axis. Default is \'x quantity\'.') - - #parser.add_argument('-c', '--constyaxis', default=False, const=True, type=bool, nargs='?', - # help='Set constant limits for y-axis from -0.4 to 1.2. \n' - # 'Otherwise (per default) y-axis will be flexibly adjusted to the data.') - - parser.add_argument('-c', '--constyaxis', default=None, type=float, nargs='*', #nargs=2 - help='Set constant limits for y-axis by giving lower and upper limit. \n' - 'Otherwise (per default) -c sets y-axis from -0.2 to 1.2. \n' - 'Without -c, y-axis will be flexibly adjusted to the data.') - - - #flexible choice of order for the subprocess contribution (-o) and normalisation (-n) - #(NLO to NLO+LO for instance) - parser.add_argument('-o', '--order', type=int, - help='Order in which the (single) subprocess contributions to XS are calculated. \n' - 'Type 0 for LO, 1 for NLO, 2 for NNLO, etc. ' - 'If nothing is chosen order=normorder. ' - 'If normorder is not chosen either, all five plots are produced.') - - parser.add_argument('-n', '--normorder', type=int, - help='Normalisation order in which the XS with all subprocesses included is calculated. \n' - 'Type 0 for LO, 1 for NLO, 2 for NNLO, etc. ' - 'If nothing is chosen normorder=order. ' - 'If order is not chosen either, all five plots are produced.') - - -################# TAKING CARE OF THE INPUT ################################# - #parse arguments - args = vars(parser.parse_args()) - namesp = parser.parse_args() #later used for checking if -c is set or not - - #table name - table_ = os.path.basename(args['table']) - tablename = os.path.splitext(table_)[0] - tablename = os.path.splitext(tablename)[0] #because yb tables have .tab.gz ending (getting rid of both here) - print('\n') - print('Table: ', tablename, '\n') - - #pdfset name - pdfset_ = os.path.basename(args['pdfset']) - pdfname = os.path.splitext(pdfset_)[0] - print('PDF Set: ', pdfname, '\n') - - #Which subprocesses are evaluated? - print('Subprocesses that are investigated: ') - print(args['subproc']) - - - #handling of subprocess order and normalisation order: - - #for labeling purposes - print('subprocess order: ', args['order']) - print('normalisation order: ', args['normorder']) - - #subprocess order (either chosen or per default all combinations) - sp_order_all = ['LO', 'NLO', 'NNLO'] - if (args['order'] is not None) and (args['order'] in range(0,3)): - sp_order = sp_order_all[args['order']] - elif (args['order'] is None) and (args['normorder'] is not None): - sp_order = sp_order_all[args['normorder']] - print("Set subprocess order to chosen normalisation order.") - else: - print("No certain (or valid) subprocess order given.") - sp_order = sp_order_all #in case of no specification --> sp_order is array, will produce all 5 plots - - #normalisation order (as above) - norm_order_all = ['LO', 'NLO', 'NNLO'] - if (args['normorder'] is not None) and (args['normorder'] in range(0,3)): - norm_order = norm_order_all[args['normorder']] - elif (args['normorder'] is None) and (args['order'] is not None): - norm_order = norm_order_all[args['order']] - print("Set normalisation order to chosen subprocess order.") - else: - print("No certain (or valid) normalisation order given.") - norm_order = norm_order_all #watch out! here norm_order becomes an array - - - -############################ EVALUATING #################################### - fnlo = fastnlo.fastNLOLHAPDF(args['table'], args['pdfset'], args['member']) - - #dictionary with settings for the different orders (when switching them on/off) - b_order = { "LO": [True, False, False], "NLO": [True, True, False], "NNLO": [True, True, True] } - - ''' - if (norm_order < sp_order): - print("Choice of orders not reasonable.") #depends on purpose of the plot. (maybe useful for kfactors if args['subproc']='all') - else: - #usual plotting - ''' - - #labeling of the x-axis - #get dimensionality of table: - ndim = fnlo.GetNumDiffBin() - print("\n", "Dimensions: ", ndim) - #if (ndim > 1): - - #get labels of all the dimensions: - labels = fnlo.GetDimLabels() - print("Labels: ", labels) - - #get label of first dimension: - xlabel = fnlo.GetDimLabel(0) - print("x-label: ", xlabel) - - - - - print("\n") - #check whether all 5 plots are needed or just one certain --> evaluate accordingly - if isinstance(norm_order, list) and isinstance(sp_order, list): #actually one condition to check should be enough in both cases - #produce all 5 plots (this also happens if both input orders were invalid...) - print('Start table evaluation for creating 5 plots. \n') - - #cross section with every process included - xs_all_list = [] - for n in norm_order: - print("\n", "n: ", n) - for j in range(0,3): - fnlo.SetContributionON(fastnlo.kFixedOrder, j, b_order[n][j]); - #for order, setting in sorted(b_order.iteritems()): - # index = 0 - # for j in setting: - # fnlo.SetContributionON(fastnlo.kFixedOrder, index, j) - # index+=1 - - fnlo.CalcCrossSection() - xs_all_list.append(fnlo.GetCrossSection()) - xs_all = np.array(xs_all_list) - print('\n') - print('Cross section with all subprocesses xs_all: \n') - print(xs_all, '\n \n') - - #cross section of single processes - xs_sub_list = [] - for s in sp_order: #go through lo, nlo, nnlo - print("\n", "Subprocess order s: ", s) - xs_subproc_list = [] #will be emptied after each iteration - for l in range(0,3): #go through the settings for this order s - fnlo.SetContributionON(fastnlo.kFixedOrder, l, b_order[s][l]) - - for i in range(0, len(args['subproc'])): - subproc_name = args['subproc'][i] - print('Selected subprocess: %s' %subproc_name) - fnlo.SelectProcesses(subproc_name, True) #optional second argument: symmetric==True per default - fnlo.CalcCrossSection() - xs_subproc = np.array(fnlo.GetCrossSection()) - xs_subproc_list.append(xs_subproc) #append xs of chosen subprocess in that certain order - print('XS for subprocess %s: \n' %args['subproc'][i]) - print(xs_subproc, '\n \n') #should be one line in xs_sub[k,i,:] - #all selected processes in lo or nlo or nnlo - xs_sub_list.append(np.array(xs_subproc_list)) - xs_sub = np.array(xs_sub_list) - print("XS of the selected processes in different pTZ-regions, in LO, NLO and NNLO: ") - print("From outmost level to innermost: order, subprocess, pTZ-bin. \n") - print(xs_sub, '\n \n') - - - #### Investigating the fractions #### - #Now, check all five combinations of lo, nlo, nnlo that shall be plotted - #How much do the selected subprocesses contribute to the total xs? - - #Three plots where subprocess is of same order as normalisation is - fractions_eq_order = [] - for i in range(0,3): - fractions_eq_order.append(np.divide(xs_sub[i,:],xs_all[i])) - fractions_eq = np.array(fractions_eq_order) - print('fractions, equal order of subprocess and normalisation: \n', fractions_eq, '\n') - - ''' - #output for checking what has been calculated - for n in range(0, 3): - for i in range(0, len(fractions_eq[0,:])): - print('fraction of %s on total XS, both in %s: ' %(args['subproc'][i], sp_order_all[n])) - print(fractions_eq[n,i,:], '\n \n') - ''' - - #make the two additional plots for (LO to NNLO) and (NLO to NNLO) - fractions_diff_order = [] - for s in range(0,2): #s is current subprocess order (LO, NLO) - fractions_diff_order.append(np.divide(xs_sub[s,:,:], xs_all[2,:])) - fractions_diff = np.array(fractions_diff_order) - print('fractions, different order for subprocess/normalisation: LO/NNLO, NLO/NNLO: ') - print(fractions_diff, '\n') - - #combine these arrays to 'fractions'-array (5 outmost indices, one for each plot) - fractions = np.append(fractions_eq, fractions_diff, axis=0) - print("------------------------------------------------------------------") - print('Fractions for all the plots to be produced, first index indicates:') - print('LO/LO, NLO/NLO, NNLO/NNLO, LO/NNLO, NLO/NNLO') - print(fractions, '\n') - print("------------------------------------------------------------------ \n") - - - #checking whether contribution is positive or negative - #(process all 5 "lines" of fractions-array) - pos_contr = np.array(fractions) - neg_contr = np.array(fractions) - bin_bounds = np.array(fnlo.GetObsBinsBounds(0)) - - for p in range(0, len(fractions[:,0,0])): #should be range(0,6), as there are 5 plots - for i in range(0, len(args['subproc'])): #go through 'fractions' (second index line by line) = subprocess after subprocess - for j in range(0, len(bin_bounds)): #check the different pTZ bins - if (fractions[p,i,j] < 0): - pos_contr[p,i,j] = 0.0 - else: - neg_contr[p,i,j] = 0.0 - #print('Positive contributions of %s on total XS in plot %s: \n' %(args['subproc'][i], p)) - #print(pos_contr[p,i,:], '\n') - #print('Negative contributions of %s on total XS in plot %s: \n' %(args['subproc'][i], p)) - #print(neg_contr[p,i,:], '\n \n') - - print('Summary of positive and negative contributions of the subprocesses for the 5 plots: \n') - print('pos_contr: \n', pos_contr, '\n') - print('neg_contr: \n', neg_contr, '\n') - - ############################ Five-Plots-PLOTTING ############################################ - #Bins for x-axis (according to first pdf (0)) - bin_bounds = np.array(fnlo.GetObsBinsBounds(0)) - #print(bin_bounds.T) #bin_bounds.T[0] = lower bounds, bin_bounds.T[1] upper bounds - print('bin bounds:', bin_bounds.flatten()) - - #for naming the plots afterwards and give correct label to y-axis: - plots_order = np.array([["LO", "LO"], ["NLO", "NLO"], ["NNLO", "NNLO"], ["LO", "NNLO"], ["NLO", "NNLO"]], dtype=str) - print('The five plots will contain: ') - print(plots_order, '\n') - - #Check whether comparison-plot or single-plot is required: - print('Single plots for each process?: ', args['extraplot']) - if (args['extraplot']==False): #stackplot that compares the contribution of the subprocesses to the total XS - plt.close() - - for p in range(0, 5): #p is index that says which plot 0 to 5 is produced - #plt.close('all') - fig0 = plt.figure(figsize=(8,7)) - ax0 = fig0.add_subplot(111) - #number of bins via bin_bounds variable - y0_pos = np.zeros([len(bin_bounds)]) #for tracking the current 'height' of stackplot, in order to staple and not overlap the values for each subprocess - y0_neg = np.zeros([len(bin_bounds)]) #same as above for the negative contributions, plotted below x-axis - print('- - - -') - print('Start plotting of plot %s \n' %p) - color = iter(cm.rainbow(np.linspace(0,1,len(args['subproc'])))) - patches = [] #later needed for legend - - for i in range(0, len(args['subproc'])): #go through fractions, subproc by subproc - c = next(color) - #positive contributions - ax0.fill_between(bin_bounds.flatten(), steppify_bin(y0_pos), steppify_bin(y0_pos+pos_contr[p, i]), #label=labeling[args['subproc'][i]], - facecolor=c, alpha=0.4) - y0_pos += pos_contr[p, i] #calculate new height of stackplot - - #negative contributions - ax0.fill_between(bin_bounds.flatten(), steppify_bin(y0_neg), steppify_bin(y0_neg+neg_contr[p, i]), #label=labeling[args['subproc'][i]], - facecolor=c, hatch='X', alpha=0.4) - y0_neg += neg_contr[p, i] #new 'height' below x-axis - - #patch for subprocess i (for the legend) ##labeling happens here - patches.append(matplotlib.patches.Rectangle((0, 0), 0, 0, color=c, - label=args['subproc'][i], alpha=0.4)) - ax0.add_patch(patches[i]) - - #get limits for axes: - xlim = ax0.get_xlim() - ylim = ax0.get_ylim() - - print('xlim:', xlim) - print('ylim:', ylim, '\n') - - xmin_ = xlim[0] - xmax_ = xlim[1] - #ymin = ylim[0] - #ymax = ylim[1] - ymin_ = np.amin(y0_neg)+0.3*np.amin(y0_neg) - ymax_ = np.amax(y0_pos)+0.1*np.amax(y0_pos) - - #settings for the whole stackplot - ax0.set_xscale('log', nonposx='clip') - - - ''' - if args['constyaxis']==True: - ax0.axis([0, xmax, -0.20, 1.20]) - elif args['constyaxis']==False: - ax0.set_xlim(xmin_, xmax_) ## - ax0.set_ylim(ymin_, ymax_) ##set axis limit according to data - ''' - - #print("namesp", namesp, "\n") - - if (args['constyaxis'] is not None): #take limits that user has chosen - if (len(args['constyaxis'])==2): - ylow = args['constyaxis'][0] - yhigh = args['constyaxis'][1] - if ylow < yhigh: - ax0.axis([0, xmax_, ylow, yhigh]) - else: - print(" # ERROR! when trying to set y-limits.") - print("Check choice of y-limits. First value should be lower than second.") - print("Syntax: -c <lower ylimit> <higher ylimit>.") - break - elif (len(args['constyaxis'])==0): #set constant y-axis - ax0.axis([0, xmax_, -0.20, 1.20]) - else: - print(" # ERROR! when trying to set y-limits.") - print("Something went wrong. Check input after -c.") - print("Possible: no value, two values or don't use -c at all for flexible axis. \n" - break - elif (args['constyaxis'] is None): #use flexible y-axis - ax0.set_xlim(xmin_, xmax_) ## - ax0.set_ylim(ymin_, ymax_) ##set axis limit according to data - - - ax0.autoscale(enable=True, axis='x', tight=True) - plt.axhline(y=1, xmin=0, xmax=1, color='k', linestyle='dotted') #dotted line at xs_sub/xs=1=100% - plt.axhline(y=0, xmin=0, xmax=1, color='k', linestyle='-') #line at xs_sub/xs_tot=0 - - plt.title(x=0.5, y=1.06, s='%s' %(table_), fontsize=22) - - ax0.set_xlabel('%s' %xlabel, fontsize=16, horizontalalignment='right') - ax0.xaxis.set_label_coords(1.0, -0.04) - ax0.set_ylabel(r'$\frac{\mathrm{XS_{sp, %s}}}{\mathrm{XS_{tot, %s}}}$' %(plots_order[p,0], plots_order[p,1]), rotation=0, fontsize=24) - ax0.yaxis.set_label_coords(-0.16, 0.9) - - ax0.text(0.96, 0.03, args['pdfset']+', %s to %s' %(plots_order[p,0], plots_order[p,1]), alpha=0.6, transform=ax0.transAxes, fontsize=14, verticalalignment='bottom', horizontalalignment='right') - plt.legend(bbox_to_anchor=(1.02, 1), loc='upper left') #'upper left' refers to the legend box - - plt.tight_layout() - fig0.tight_layout() - - #naming of the plots - if args['filename'] is not None: - stackplotname = '%s_%s.png' %(args['filename'], plots_order[p,0]+'_'+plots_order[p,1]) - else: - stackplotname = '%s.stackplot_%s.png' %(tablename, plots_order[p,0]+'_'+plots_order[p,1]) - fig0.savefig(stackplotname, bbox_inches='tight') - - print('Stackplot for subprocess comparison saved as: %s' %(stackplotname), '\n \n') - - - else: - print("----------------------------------------------------------") - print("Create individual plot for each single subprocess \n") - - #individual plot for each subproc (NumberOfPlots = 5*NumberOfSubprocesses) - #create folder for saving the plots, will be overwritten in case it already exists (avoid countless folders while testing) - current_dir = os.getcwd() - - if args['filename'] is not None: - prename = args['filename'] - else: prename = tablename - - final_dir = os.path.join(current_dir, r'%s_subproc' %(prename)) - - if os.path.exists(final_dir): - shutil.rmtree(final_dir) #remove final_dir if it already exists - os.makedirs(final_dir) - - #loop where single plot for each of the selected subprocesses is created - - #plot the subprocess contributions for each chosen process individually - #do this for all the five combinations: LO/LO, NLO/NLO, NNLO/NNLO, LO/NNLO, NLO/NNLO - for p in range(0, 5): #p is index that says which plot 0 to 5 is produced - #plt.close('all') - color = iter(cm.rainbow(np.linspace(0,1,len(args['subproc'])))) - fig0 = plt.figure(figsize=(8,7)) - ax0 = fig0.add_subplot(111) - - for i in range(0, len(args['subproc'])): - c = next(color) - plt.close() - fig0 = plt.figure(figsize=(8, 7)) - ax0 = fig0.add_subplot(111) - - #plot the fractions - y0 = np.zeros([len(bin_bounds)]) - - ax0.fill_between(bin_bounds.flatten(), steppify_bin(y0), steppify_bin(pos_contr[p,i]), - facecolor=c, alpha=0.4) - ax0.fill_between(bin_bounds.flatten(), steppify_bin(y0), steppify_bin(neg_contr[p,i]), - facecolor=c, hatch='X', alpha=0.4) - - #get limits for axes: - xlim = ax0.get_xlim() - ylim = ax0.get_ylim() - - - ax0.set_xscale('log', nonposx='clip') - - xmin_ = xlim[0] - xmax_ = xlim[1] - ymin_ = ylim[0]+0.3*ylim[0] - ymax_ = ylim[1]+0.1*ylim[1] - - if (args['constyaxis'] is not None): #take limits that user has chosen - if (len(args['constyaxis'])==2): - ylow = args['constyaxis'][0] - yhigh = args['constyaxis'][1] - if ylow < yhigh: - ax0.axis([0, xmax_, ylow, yhigh]) - else: - print(" # ERROR! when trying to set y-limits.") - print("Check choice of y-limits. First value should be lower than second.") - print("Syntax: -c <lower ylimit> <higher ylimit>.") - break - elif (len(args['constyaxis'])==0): #set constant y-axis - ax0.axis([0, xmax_, -0.20, 1.20]) - else: - print(" # ERROR! when trying to set y-limits.") - print("Something went wrong. Check input after -c.") - print("Possible: no value, two values or don't use -c at all for flexible axis. \n") - break - elif (args['constyaxis'] is None): #use flexible y-axis - ax0.set_xlim(xmin_, xmax_) ## - ax0.set_ylim(ymin_, ymax_) ##set axis limit according to data - - - #ax0.axis([bin_bounds.flatten()[0], xlim[1], ylim[0]-0.1*ylim[0], ylim[1]+0.1*ylim[1]]) #leave y-limits fixed for better comparison between the subprocess-plots - ax0.autoscale(enable=True, axis='x', tight=True) - plt.axhline(y=1, xmin=0, xmax=1, color='k', linestyle='dotted') - plt.axhline(y=0, xmin=0, xmax=1, color='k', linestyle='-') - - - titlename = args['subproc'][i] - - plt.title(x=0.5, y=1.01, s=titlename, fontsize=20) - ax0.set_xlabel('%s' %xlabel, fontsize=16, horizontalalignment='right') - ax0.xaxis.set_label_coords(1.0, -0.04) - ax0.set_ylabel(r'$\frac{\mathrm{XS_{sp, %s}}}{\mathrm{XS_{tot, %s}}}$' %(plots_order[p,0], plots_order[p,1]), rotation=0, fontsize=24) - ax0.yaxis.set_label_coords(-0.16, 0.9) - ax0.text(0.96, 0.03, args['pdfset']+', %s to %s' %(plots_order[p,0], plots_order[p,1]), transform=ax0.transAxes, alpha=0.6, fontsize=14, verticalalignment='bottom', horizontalalignment='right') - ax0.text(0.96, 0.08, '%s' %table_, transform=ax0.transAxes, alpha=0.6, fontsize=14, verticalalignment='bottom', horizontalalignment='right') - - #plt.legend() #location parameter loc='upper right' - - plt.tight_layout() - fig0.tight_layout() - plotname = '%s_%s_singlefrac_%s_%s.png' %(tablename, args['subproc'][i], plots_order[p,0], plots_order[p,1]) - - #save the plots - fig0.savefig(os.path.join(final_dir,plotname)) - print('Plot saved in %s' %(final_dir)) - print('fraction plot saved as: %s' %(plotname), "\n \n") - - - - elif isinstance(norm_order, str) and isinstance(sp_order, str): - #produce only demanded plot for chosen orders - print('Start table evaluation for creating 1 plot. \n') - - print("Normalisation Order: ", norm_order) - for j in range(0,3): - fnlo.SetContributionON(fastnlo.kFixedOrder, j, b_order[norm_order][j]) - fnlo.CalcCrossSection() - xs_all_oneplot = np.array(fnlo.GetCrossSection()) - print("\n","Cross Section with all subprocesses included in %s: \n" %norm_order) - print(xs_all_oneplot, "\n \n") - - print("Subprocess Order: ", sp_order) - for l in range(0,3): - fnlo.SetContributionON(fastnlo.kFixedOrder, l, b_order[sp_order][l]) - xs_subproc_list = [] - for i in range(0, len(args['subproc'])): #go through subprocesses - subproc_name = args['subproc'][i] - print('Selected subprocess: %s' %subproc_name) - fnlo.SelectProcesses(subproc_name, True) #optional second argument: symmetric==True per default - fnlo.CalcCrossSection() - xs_subproc = np.array(fnlo.GetCrossSection()) - xs_subproc_list.append(xs_subproc) - print("XS for subprocess %s in %s: \n" %(subproc_name, sp_order) - print(xs_subproc, '\n \n') - xs_sub_oneplot = np.array(xs_subproc_list) - print("XS of the selected processes in different pTZ-regions in %s: " %sp_order) - print(xs_sub_oneplot, "\n \n") - - #calculate fraction of subprocess in sp_order on total XS in norm_order - fractions_sub_oneplot = [] - for k in range(0, len(args['subproc'])): - fractions_sub_oneplot.append(np.divide(xs_sub_oneplot[k,:], xs_all_oneplot[:])) - fractions_oneplot = np.array(fractions_sub_oneplot) - print("--------------------------------------------------------------") - print("Fractions for subprocesses in %s to total XS in %s" %(sp_order, norm_order)) - print(fractions_oneplot, "\n") - print("--------------------------------------------------------------") - - #checking whether contribution is positive or negative - pos_contr = np.array(fractions_oneplot) - neg_contr = np.array(fractions_oneplot) - bin_bounds = np.array(fnlo.GetObsBinsBounds(0)) - - for i in range(0, len(args['subproc'])): #go through 'fractions' = subprocess after subprocess - for j in range(0, len(bin_bounds)): #check the different pTZ bins - if (fractions_oneplot[i,j] < 0): - pos_contr[i,j] = 0.0 - else: - neg_contr[i,j] = 0.0 - print('Positive contributions of %s in %s on total XS in %s: \n' %(args['subproc'][i], sp_order, norm_order)) - print(pos_contr[i,:], '\n') - print('Negative contributions of %s in %s on total XS in %s: \n' %(args['subproc'][i], sp_order, norm_order)) - print(neg_contr[i,:], '\n \n') - - print('Summary of positive and negative contributions of the subprocesses: \n') - print("positive: \n", pos_contr, '\n') - print("negative: \n", neg_contr, '\n') - - - ######################## One-Plot-PLOTTING ######################################### - #Bins for x-axis (according to first pdf (0)) - bin_bounds = np.array(fnlo.GetObsBinsBounds(0)) - print('bin bounds:', bin_bounds.flatten()) - - #Check whether comparison-plot or single-plot is required: - print('Single plots for each process?: ', args['extraplot']) - if (args['extraplot']==False): #stackplot that compares the contribution of the subprocesses to the total XS - plt.close() - - fig0 = plt.figure(figsize=(8,7)) - ax0 = fig0.add_subplot(111) - #number of bins via bin_bounds variable - y0_pos = np.zeros([len(bin_bounds)]) #for tracking the current 'height' of stackplot, in order to staple and not overlap the values for each subprocess - y0_neg = np.zeros([len(bin_bounds)]) #same as above for the negative contributions, plotted below x-axis - - color = iter(cm.rainbow(np.linspace(0,1,len(args['subproc'])))) - patches = [] #later needed for legend - - for i in range(0, len(args['subproc'])): #go through fractions, subproc by subproc - c = next(color) - #positive contributions - ax0.fill_between(bin_bounds.flatten(), steppify_bin(y0_pos), steppify_bin(y0_pos+pos_contr[i,:]), #label=labeling[args['subproc'][i]], - facecolor=c, alpha=0.4) - y0_pos += pos_contr[i, :] #calculate new height of stackplot - - #negative contributions - ax0.fill_between(bin_bounds.flatten(), steppify_bin(y0_neg), steppify_bin(y0_neg+neg_contr[i, :]), #label=labeling[args['subproc'][i]], - facecolor=c, hatch='X', alpha=0.4) - y0_neg += neg_contr[i, :] #new 'height' below x-axis - - #patch for subprocess i (for the legend) ##labeling happens here - patches.append(matplotlib.patches.Rectangle((0, 0), 0, 0, color=c, - label=args['subproc'][i], alpha=0.4)) - ax0.add_patch(patches[i]) - - #get limits for axes: - xlim = ax0.get_xlim() - ylim = ax0.get_ylim() - - print('xlim:', xlim) - print('ylim:', ylim, '\n') - - xmin_ = xlim[0] - xmax_ = xlim[1] - ymin_ = np.amin(y0_neg)+0.3*np.amin(y0_neg) - ymax_ = np.amax(y0_pos)+0.1*np.amax(y0_pos) - - - if (args['constyaxis'] is not None): #take limits that user has chosen - if (len(args['constyaxis'])==2): - ylow = args['constyaxis'][0] - yhigh = args['constyaxis'][1] - if ylow < yhigh: - ax0.axis([0, xmax_, ylow, yhigh]) - else: - print(" # ERROR! when trying to set y-limits.") - print("Check choice of y-limits. First value should be lower than second.") - print("Syntax: -c <lower ylimit> <higher ylimit>.") - break - elif (len(args['constyaxis'])==0): #set constant y-axis - ax0.axis([0, xmax_, -0.20, 1.20]) - else: - print(" # ERROR! when trying to set y-limits.") - print("Something went wrong. Check input after -c.") - print("Possible: no value, two values or don't use -c at all for flexible axis. \n") - break - elif (args['constyaxis'] is None): #use flexible y-axis - ax0.set_xlim(xmin_, xmax_) ## - ax0.set_ylim(ymin_, ymax_) ##set axis limit according to data - - ax0.set_xscale('log', nonposx='clip') - ax0.autoscale(enable=True, axis='x', tight=True) - - plt.axhline(y=1, xmin=0, xmax=1, color='k', linestyle='dotted') #dotted line at xs_sub/xs=1=100% - plt.axhline(y=0, xmin=0, xmax=1, color='k', linestyle='-') #line at xs_sub/xs_tot=0 - - plt.title(x=0.5, y=1.06, s='%s' %(table_), fontsize=22) - - #ax0.set_xlabel('x quantity', fontsize=20) - ax0.set_xlabel('%s' %xlabel, fontsize=16, horizontalalignment='right') - ax0.xaxis.set_label_coords(1.0, -0.04) - ax0.set_ylabel(r'$\frac{\mathrm{XS_{sp, %s}}}{\mathrm{XS_{tot, %s}}}$' %(sp_order, norm_order), rotation=0, fontsize=24) - ax0.yaxis.set_label_coords(-0.16, 0.9) - - ax0.text(0.96, 0.03, args['pdfset']+', %s to %s' %(sp_order, norm_order), alpha=0.6, transform=ax0.transAxes, fontsize=14, verticalalignment='bottom', horizontalalignment='right') - plt.legend(bbox_to_anchor=(1.02, 1), loc='upper left') #'upper left' refers to the legend box - - plt.tight_layout() - fig0.tight_layout() - - #naming of the plots - if args['filename'] is not None: - stackplotname = '%s_%s.png' %(args['filename'], sp_order+'_'+norm_order) - else: - stackplotname = '%s.stackplot_%s.png' %(tablename, sp_order+'_'+norm_order) - fig0.savefig(stackplotname, bbox_inches='tight') - - print('Stackplot for subprocess comparison saved as: %s' %(stackplotname)) - - - - else: - print("\n") - print("----------------------------------------------------------") - print("Create individual plot for each single subprocess \n") - - #individual plot for each subproc - #create folder for saving the plots, will be overwritten in case it already exists (avoid countless folders while testing) - current_dir = os.getcwd() - - if args['filename'] is not None: - prename = args['filename'] - else: prename = tablename - - final_dir = os.path.join(current_dir, r'%s_sp_%s_%s' %(prename, sp_order, norm_order)) - - if os.path.exists(final_dir): - shutil.rmtree(final_dir) #remove final_dir if it already exists - os.makedirs(final_dir) - - #loop where single plot for each of the selected subprocesses is created - #start the plot - color = iter(cm.rainbow(np.linspace(0,1,len(args['subproc'])))) - - for i in range(0, len(args['subproc'])): - c = next(color) - plt.close() - fig0 = plt.figure(figsize=(8, 7)) - ax0 = fig0.add_subplot(111) - - #plot the fractions - y0 = np.zeros([len(bin_bounds)]) - - ax0.fill_between(bin_bounds.flatten(), steppify_bin(y0), steppify_bin(pos_contr[i]), - facecolor=c, alpha=0.4) - ax0.fill_between(bin_bounds.flatten(), steppify_bin(y0), steppify_bin(neg_contr[i]), - facecolor=c, hatch='X', alpha=0.4) - - #get limits for axes: - xlim = ax0.get_xlim() - ylim = ax0.get_ylim() - - ax0.set_xscale('log', nonposx='clip') - - xmin_ = xlim[0] - xmax_ = xlim[1] - ymin_ = ylim[0]+0.3*ylim[0] - ymax_ = ylim[1]+0.1*ylim[1] - - if (args['constyaxis'] is not None): #take limits that user has chosen - if (len(args['constyaxis'])==2): - ylow = args['constyaxis'][0] - yhigh = args['constyaxis'][1] - if ylow < yhigh: - ax0.axis([0, xmax_, ylow, yhigh]) - else: - print(" # ERROR! when trying to set y-limits.") - print("Check choice of y-limits. First value should be lower than second.") - print("Syntax: -c <lower ylimit> <higher ylimit>.") - break - elif (len(args['constyaxis'])==0): #set constant y-axis - ax0.axis([0, xmax_, -0.20, 1.20]) - else: - print(" # ERROR! when trying to set y-limits.") - print("Something went wrong. Check input after -c.") - print("Possible: no value, two values or don't use -c at all for flexible axis. \n") - break - elif (args['constyaxis'] is None): #use flexible y-axis - ax0.set_xlim(xmin_, xmax_) ## - ax0.set_ylim(ymin_, ymax_) ##set axis limit according to data - - ax0.autoscale(enable=True, axis='x', tight=True) - plt.axhline(y=1, xmin=0, xmax=1, color='k', linestyle='dotted') - plt.axhline(y=0, xmin=0, xmax=1, color='k', linestyle='-') - - - titlename = args['subproc'][i] - - plt.title(x=0.5, y=1.01, s=titlename, fontsize=20) - ax0.set_xlabel('%s' %xlabel, fontsize=16, horizontalalignment='right') - ax0.xaxis.set_label_coords(1.0, -0.04) - ax0.set_ylabel(r'$\frac{\mathrm{XS_{sp, %s}}}{\mathrm{XS_{tot, %s}}}$' %(sp_order, norm_order), rotation=0, fontsize=24) - ax0.yaxis.set_label_coords(-0.16, 0.9) - ax0.text(0.96, 0.03, args['pdfset']+', %s to %s' %(sp_order, norm_order), transform=ax0.transAxes, alpha=0.6, fontsize=14, verticalalignment='bottom', horizontalalignment='right') - ax0.text(0.96, 0.08, '%s' %table_, transform=ax0.transAxes, alpha=0.6, fontsize=14, verticalalignment='bottom', horizontalalignment='right') - - #plt.legend() #location parameter loc='upper right' - - plt.tight_layout() - fig0.tight_layout() - plotname = '%s_%s_singlefrac_%s_%s.png' %(tablename, args['subproc'][i], sp_order, norm_order) - - #save the plots - fig0.savefig(os.path.join(final_dir,plotname)) - print('Plot saved in %s' %(final_dir)) - print('fraction plot saved as: %s' %(plotname), "\n \n") - - - - else: - print("Something went wrong. Check choice of order(s). \n") - - - - - - - -""" #other alternative possibility to switch orders on/off - for order, setting in sorted(b_order.iteritems()): #go through tuples in b_order, evaluate - print("\n", "order: ", order) - print("setting: ", setting) - index=0 - for j in setting: - print("index", index) - print("j", j) - fnlo.SetContributionON(fastnlo.kFixedOrder,index,j); - index+=1 -""" - - - - - - - - - - - - -################################################## -##function to make better uncertainty plot (shaded) -##could maybe be replaced by .flatten() ?? -def steppify_bin(arr, isx=False): - """ - Produce stepped array of arr, needed for example for stepped fill_betweens. - Pass all x bin edges to produce stepped x arr and all y bincontents to produce - stepped bincontents representation - steppify_bin([1,2,3], True) - -> [1,2,2,3] - steppify_bin([5,6]) - -> [5,5,6,6] - """ - if isx: - newarr = np.array(zip(arr[:-1], arr[1:])).ravel() - else: - newarr = np.array(zip(arr, arr)).ravel() - return newarr - - -################################################# - -if __name__ == '__main__': - main() diff --git a/tools/plotting/yb_ystar/compare_spLO_xstot.py b/tools/plotting/yb_ystar/compare_spLO_xstot.py deleted file mode 100755 index 391809fb9c6fc03e418a68fda881d913c127d641..0000000000000000000000000000000000000000 --- a/tools/plotting/yb_ystar/compare_spLO_xstot.py +++ /dev/null @@ -1,377 +0,0 @@ -#! /usr/bin/env python - -#################################################### -# -#Here, the contributions of subprocesses in LO are -#compared to the total cross section in LO+NLO. -# -#################################################### - -import argparse -import numpy as np -import os -import time, datetime -import matplotlib -import matplotlib.pyplot as plt -import matplotlib.gridspec as gridspec - -import fastnlo - - - -def main(): - - parser = argparse.ArgumentParser() - - #make it possible to use different options when running - parser.add_argument('-t','--table', default='table.tab', required=True, - help='FastNLO tables that shall be evaluated.') - parser.add_argument('-p', '--pdfset', default='CT14nlo', - help='PDFset(s) to evaluate fastNLO tables.') - parser.add_argument('-m', '--member', default=0, type=int, - help='Member of PDFset, default is 0.') - - parser.add_argument('-s', '--subproc', default=['gg'], type=str, nargs='*', - help='Subprocesses that shall be compared. \n' - 'Options: gg, gq, qiqi, qiai, qiqj, qiaj') - parser.add_argument('-c', '--compare', default=False, const=True, type=bool, nargs='?', - help='Stackplot if option -c is chosen. Otherwise single-process-plots.') - #help='Stackplot if True. Single-Process-Plot if False.') - - - - #Dictionary for how the subprocesses are called - processes = {"gg":"Gluon-Gluon", - "gq":"Gluon-Quark/Antiquark", - "qiqi":"Quark-Quark and $\mathrm{\overline{q_i} \; \overline{q_i}}$ (same flavor)", - "qiai":"Quark-Antiquark (same flavor)", - "qiqj":"Quark-Quark and $\mathrm{\overline{q_i} \; \overline{q_j}}}$ (different flavors)", - "qiaj":"Quark-Antiquark (different flavors)"} - - #shorter for labeling the stackplot - labeling = {"gg":r"$\mathrm{gg}$", - "gq":r"$\mathrm{gq} \ & \ \mathrm{g\overline{q}}$", - "qiqi":r"$\mathrm{q_i q_i} \ & \ \mathrm{\overline{q_i} \; \overline{q_i}}$", - "qiai":r"$\mathrm{q_i} \; \mathrm{\overline{q_i}}$", - "qiqj":r"$\mathrm{q_i q_j} \ & \ \mathrm{\overline{q_i} \; \overline{q_j}}$", - "qiaj":r"$\mathrm{q_i} \; \mathrm{\overline{q_j}}$"} - - - #parse arguments - args = vars(parser.parse_args()) - - #table name - table_ = os.path.basename(args['table']) - tablename = os.path.splitext(table_)[0] - tablename = os.path.splitext(tablename)[0] #because yb tables have .tab.gz ending (getting rid of both here) - print '\n' - print 'Table: ', tablename, '\n' - - #pdfset name - pdfset_ = os.path.basename(args['pdfset']) - pdfname = os.path.splitext(pdfset_)[0] - print 'PDF Set: ', pdfname, '\n' - - - #checks for investigated phase space region --> mainly for plot-labeling - - #range of y_boost - def yb(): - if 'yb0' in args['table']: - yb_range = r'$\mathrm{0.0 \leq \/ y_b < 0.5}$' - info_yb = r'0 <= yb < 0.5' - elif 'yb1' in args['table']: - yb_range = r'$\mathrm{0.5 \leq \/ y_b < 1.0}$' - info_yb = r'0.5 <= yb < 1.0' - elif 'yb2' in args['table']: - yb_range = r'$\mathrm{1.0 \leq \/ y_b < 1.5}$' - info_yb = r'1.0 <= yb < 1.5' - elif 'yb3' in args['table']: - yb_range = r'$\mathrm{1.5 \leq \/ y_b < 2.0}$' - info_yb = r'1.5 <= yb < 2.0' - elif 'yb4' in args['table']: - yb_range = r'$\mathrm{2.0 \leq \/ y_b < 2.5}$' - info_yb = r'2.0 <= yb < 2.5' - else: - print 'No info about range of yb.' - yb_range = '' - info_yb = '' - return yb_range, info_yb #yb_range is in correct format for labeling - - - #range of ystar - def ystar(): - if 'ystar0' in args['table']: - ystar_range = r'$\mathrm{0.0 \leq \/ y^{\ast} < 0.5}$' - info_ystar = r'0 <= ystar < 0.5' - elif 'ystar1' in args['table']: - ystar_range = r'$\mathrm{0.5 \leq \/ y^{\ast} < 1.0}$' - info_ystar = r'0.5 <= ystar < 1.0' - elif 'ystar2' in args['table']: - ystar_range = r'$\mathrm{1.0 \leq \/ y^{\ast} < 1.5}$' - info_ystar = r'1.0 <= ystar < 1.5' - elif 'ystar3' in args['table']: - ystar_range = r'$\mathrm{1.5 \leq \/ y^{\ast} < 2.0}$' - info_ystar = r'1.5 <= ystar < 2.0' - elif 'ystar4' in args['table']: - ystar_range = r'$\mathrm{2.0 \leq \/ y^{\ast} < 2.5}$' - info_ystar = r'2.0 <= ystar < 2.5' - else: - print 'No info about range of ystar.' - ystar_range = '' - info_ystar = '' - return ystar_range, info_ystar - - - - #show information about phase space region - yb_range = yb()[0] - ystar_range = ystar()[0] - - info_yb = yb()[1] - info_ystar = ystar()[1] - - print 'Phase Space Region:' - print '%s' %info_yb - print '%s' %info_ystar - - - - #Which subprocesses are evaluated? - print 'Subprocesses that are investigated: \n' - print args['subproc'] - - - ######## EVALUATING ######## - fnlo = fastnlo.fastNLOLHAPDF(args['table'], args['pdfset'], args['member']) - fnlo.SetContributionON(fastnlo.kFixedOrder,0,True); - fnlo.SetContributionON(fastnlo.kFixedOrder,1,True); - - - #cross section with every process included (for LO+NLO) - fnlo.CalcCrossSection() - xs_all = np.array(fnlo.GetCrossSection()) - print 'Cross section with all subprocesses xs_all: \n' - print xs_all, '\n \n' - - #cross section of single processes in LO (only LO-contribution considered, no NLO!) - fnlo.SetContributionON(fastnlo.kFixedOrder, 0, True); #switch LO on - fnlo.SetContributionON(fastnlo.kFixedOrder, 1, False); #switch NLO off - xs_subproc_list = [] - for i in range(0, len(args['subproc'])): - subproc_name = args['subproc'][i] - print 'Selected subprocess: %s' %subproc_name - fnlo.SelectProcesses(subproc_name) - fnlo.CalcCrossSection() - xs_subproc = np.array(fnlo.GetCrossSection()) - xs_subproc_list.append(xs_subproc) - print 'XS for subprocess %s: \n' %args['subproc'][i] - print xs_subproc, '\n \n' - xs_sub = np.array(xs_subproc_list) #Array with xs for selected processes in certain pTZ-bins - print 'XS of the selected processes in different pTZ-regions: \n' - print xs_sub, '\n \n' - - #how much do the selected subprocesses contribute to the total xs? - fractions = np.divide(xs_sub,xs_all) - print 'fractions: \n', fractions, '\n' - - for i in range(0, len(fractions)): - print 'fraction of %s in LO on total XS: ' %args['subproc'][i] - print fractions[i,:], '\n \n' - - - #checking whether contribution is positive or negative - pos_contr = np.array(fractions) - neg_contr = np.array(fractions) - bin_bounds = np.array(fnlo.GetObsBinsBounds(0)) - - for i in range(0, len(args['subproc'])): #go through 'fractions' line by line = subprocess after subprocess - for j in range(0, len(bin_bounds)): #check the different pTZ bins - if (fractions[i,j] < 0): - pos_contr[i,j] = 0.0 - else: - neg_contr[i,j] = 0.0 - print 'Positive LO contributions of %s on total XS: \n' %args['subproc'][i] - print pos_contr[i,:], '\n' - print 'Negative LO contributions of %s on total XS: \n' %args['subproc'][i] - print neg_contr[i,:], '\n \n' - - print 'Summary of positive and negative LO contributions of the subprocesses: \n' - print pos_contr, '\n' - print neg_contr, '\n' - - - - ######## PLOTTING ######## - #Bins for x-axis (according to first pdf (0)) - bin_bounds = np.array(fnlo.GetObsBinsBounds(0)) - #print bin_bounds.T #bin_bounds.T[0] = lower bounds, bin_bounds.T[1] upper bounds - #print bin_bounds.flatten() - - - #dictionary for using specific color per process - process_color = {"gg":"g", - "gq":"r", - "qiqi":"y", - "qiai":"c", - "qiqj":"m", - "qiaj":"b"} - - #Check whether comparison-plot or single-plot is required: - print args['compare'] - if (args['compare']==True): #stackplot that compares the contribution of the subprocesses to the total XS - plt.close() - fig0 = plt.figure(figsize=(8,7)) - ax0 = fig0.add_subplot(111) - - patches = [] #later needed for legend - #number of bins via bin_bounds variable - y0_pos = np.zeros([len(bin_bounds)]) #for tracking the current 'height' of stackplot, in order to staple and not overlap the values for each subprocess - y0_neg = np.zeros([len(bin_bounds)]) #same as above for the negative contributions, plotted below x-axis - - for i in range(0, len(args['subproc'])): #go through fractions, subproc by subproc - - #positive contributions - ax0.fill_between(bin_bounds.flatten(), steppify_bin(y0_pos), steppify_bin(y0_pos+pos_contr[i]), #label=labeling[args['subproc'][i]], - facecolor=process_color[args['subproc'][i]], alpha=0.4) - y0_pos += pos_contr[i] #calculate new height of stackplot - - #negative contributions - ax0.fill_between(bin_bounds.flatten(), steppify_bin(y0_neg), steppify_bin(y0_neg+neg_contr[i]), #label=labeling[args['subproc'][i]], - facecolor=process_color[args['subproc'][i]], hatch='X', alpha=0.4) - y0_neg += neg_contr[i] #new 'height' below x-axis - - #patch for subprocess i (for the legend) ##labeling happens here - patches.append(matplotlib.patches.Rectangle((0, 0), 0, 0, color=process_color[args['subproc'][i]], - label=labeling[args['subproc'][i]], alpha=0.4)) - ax0.add_patch(patches[i]) - - #settings for the whole stackplot - ax0.set_xscale('log', nonposx='clip') - ax0.axis([30, 1000, -0.20, 1.20]) - plt.axhline(y=1, xmin=0, xmax=1, color='k', linestyle='dotted') #dotted line at xs_sub/xs=1=100% - plt.axhline(y=0, xmin=0, xmax=1, color='k', linestyle='-') #line at xs_sub/xs_tot=0 - - #use phasespace region as title - title_phasespace = yb_range + ", " + ystar_range - plt.title(x=0.5, y=1.01, s='%s' %(title_phasespace), fontsize=22) - - ax0.set_xlabel('$\mathrm{p_{T,Z}} \ \mathrm{[GeV]}$', fontsize=20) - ax0.xaxis.set_label_coords(0.9, -0.05) - ax0.set_ylabel(r'$\frac{\mathrm{XS_{sp,LO}}}{\mathrm{XS_{tot,LO+NLO}}}$', rotation=0, fontsize=22) - ax0.yaxis.set_label_coords(-0.16, 0.9) - ax0.text(0.96, 0.03, args['pdfset'], transform=ax0.transAxes, fontsize=14, verticalalignment='bottom', horizontalalignment='right') - plt.legend() - - plt.tight_layout() - fig0.tight_layout() - - #make string with the subprocess names - processnames = "" - for i in range(0, len(args['subproc'])): - processnames += ("_"+args['subproc'][i]) - stackplotname = 'compare_spLO_xstot%s_%s_%s.png' %(processnames, tablename, args['pdfset']) - fig0.savefig(stackplotname) - - print 'Stackplot for subprocess comparison saved as: %s' %(stackplotname) - - - - - else: #individual plot for each subproc - #create folder for saving the plots - current_dir = os.getcwd() - - final_dir = os.path.join(current_dir, r'single_spLO_plots_%s' %tablename) - now = datetime.datetime.now() - nowstr = 'single_spLO_xstot_plots_%s_' %(tablename) - nowstr += now.strftime('%Y-%m-%d_%H-%M-%S') - final_dir_date = os.path.join(current_dir, nowstr) - - #check if directory already exists, if so: include datetime to name - if not os.path.exists(final_dir): - os.makedirs(final_dir) - else: - os.makedirs(final_dir_date) - - #loop where single plot for each of the selected subprocesses is created - #start the plot - for i in range(0, len(args['subproc'])): - plt.close() - fig0 = plt.figure(figsize=(8, 7)) - ax0 = fig0.add_subplot(111) - - #plot the fractions - y0 = np.zeros([len(bin_bounds)]) - ax0.fill_between(bin_bounds.flatten(), steppify_bin(y0), steppify_bin(fractions[i]), - facecolor=process_color[args['subproc'][i]], alpha=0.4) #improve labeling? - - - - #info about phase space region included as text (see below) - ax0.set_xscale('log', nonposx='clip') - ax0.axis([30, 1000, -0.4, 1.2]) - plt.axhline(y=1, xmin=0, xmax=1, color='k', linestyle='dotted') - plt.axhline(y=0, xmin=0, xmax=1, color='k', linestyle='-') - - titlename = processes[args['subproc'][i]] - - plt.title(x=0.5, y=1.01, s=titlename, fontsize=20) - ax0.set_xlabel('$\mathrm{p_{T,Z}} \ \mathrm{[GeV]}$', fontsize=20) - ax0.xaxis.set_label_coords(0.9, -0.05) - ax0.set_ylabel(r'$\frac{\mathrm{XS_{sp,LO}}}{\mathrm{XS_{tot,LO+NLO}}}$', rotation=0, fontsize=22) - ax0.yaxis.set_label_coords(-0.16, 0.9) - ax0.text(0.96, 0.03, args['pdfset'], transform=ax0.transAxes, fontsize=14, verticalalignment='bottom', horizontalalignment='right') - ax0.text(0.96, 0.94, yb_range, transform=ax0.transAxes, fontsize=16, verticalalignment='bottom', horizontalalignment='right') - ax0.text(0.96, 0.88, ystar_range, transform=ax0.transAxes, fontsize=16, verticalalignment='bottom', horizontalalignment='right') - plt.legend() #location parameter loc='upper right' - - plt.tight_layout() - fig0.tight_layout() - plotname = '%s_LOfrac_xstot_%s_%s.png' %(args['subproc'][i], tablename, args['pdfset']) - - - #save the plots - if os.path.exists(final_dir_date): - fig0.savefig(os.path.join(final_dir_date,plotname)) - print 'Plot saved in %s' %(final_dir_date) - else: - fig0.savefig(os.path.join(final_dir,plotname)) - print 'Plot saved in %s' %(final_dir) - - print '\n' - print 'fraction plot saved as: %s' %(plotname) - - - - - -################################################## -##function to make better uncertainty plot (shaded) -##could maybe be replaced by .flatten() ?? -def steppify_bin(arr, isx=False): - """ - Produce stepped array of arr, needed for example for stepped fill_betweens. - Pass all x bin edges to produce stepped x arr and all y bincontents to produce - stepped bincontents representation - steppify_bin([1,2,3], True) - -> [1,2,2,3] - steppify_bin([5,6]) - -> [5,5,6,6] - """ - if isx: - newarr = np.array(zip(arr[:-1], arr[1:])).ravel() - else: - newarr = np.array(zip(arr, arr)).ravel() - return newarr - - -################################################# - -if __name__ == '__main__': - main() - - - - - diff --git a/tools/plotting/yb_ystar/compare_spNLO_xstot.py b/tools/plotting/yb_ystar/compare_spNLO_xstot.py deleted file mode 100755 index 57ac466807aca031ec3495c0b5e4829feb8022f2..0000000000000000000000000000000000000000 --- a/tools/plotting/yb_ystar/compare_spNLO_xstot.py +++ /dev/null @@ -1,377 +0,0 @@ -#! /usr/bin/env python - -################################## -#Here, the contribution of subprocesses in NLO are -#compared to the total cross section in LO+NLO. -#Six available subprocess categories. -################################## - -import argparse -import numpy as np -import os -import time, datetime -import matplotlib -import matplotlib.pyplot as plt -import matplotlib.gridspec as gridspec - -import fastnlo - - - -def main(): - - parser = argparse.ArgumentParser() - - #make it possible to use different options when running - parser.add_argument('-t','--table', default='table.tab', required=True, - help='FastNLO tables that shall be evaluated.') - parser.add_argument('-p', '--pdfset', default='CT14nlo', - help='PDFset(s) to evaluate fastNLO tables.') - parser.add_argument('-m', '--member', default=0, type=int, - help='Member of PDFset, default is 0.') - - parser.add_argument('-s', '--subproc', default=['gg'], type=str, nargs='*', - help='Subprocesses that shall be compared. \n' - 'Options: gg, gq, qiqi, qiai, qiqj, qiaj') - parser.add_argument('-c', '--compare', default=False, const=True, type=bool, nargs='?', - help='Stackplot if option -c is chosen. Otherwise single-process-plots.') - #help='Stackplot if True. Single-Process-Plot if False.') - - - - #Dictionary for how the subprocesses are called - processes = {"gg":"Gluon-Gluon", - "gq":"Gluon-Quark/Antiquark", - "qiqi":"Quark-Quark and $\mathrm{\overline{q_i} \; \overline{q_i}}$ (same flavor)", - "qiai":"Quark-Antiquark (same flavor)", - "qiqj":"Quark-Quark and $\mathrm{\overline{q_i} \; \overline{q_j}}}$ (different flavors)", - "qiaj":"Quark-Antiquark (different flavors)"} - - #shorter for labeling the stackplot - labeling = {"gg":r"$\mathrm{gg}$", - "gq":r"$\mathrm{gq} \ & \ \mathrm{g\overline{q}}$", - "qiqi":r"$\mathrm{q_i q_i} \ & \ \mathrm{\overline{q_i} \; \overline{q_i}}$", - "qiai":r"$\mathrm{q_i} \; \mathrm{\overline{q_i}}$", - "qiqj":r"$\mathrm{q_i q_j} \ & \ \mathrm{\overline{q_i} \; \overline{q_j}}$", - "qiaj":r"$\mathrm{q_i} \; \mathrm{\overline{q_j}}$"} - - - #parse arguments - args = vars(parser.parse_args()) - - #table name - table_ = os.path.basename(args['table']) - tablename = os.path.splitext(table_)[0] - tablename = os.path.splitext(tablename)[0] #because yb tables have .tab.gz ending (getting rid of both here) - print '\n' - print 'Table: ', tablename, '\n' - - #pdfset name - pdfset_ = os.path.basename(args['pdfset']) - pdfname = os.path.splitext(pdfset_)[0] - print 'PDF Set: ', pdfname, '\n' - - - #checks for investigated phase space region --> mainly for plot-labeling - - #range of y_boost - def yb(): - if 'yb0' in args['table']: - yb_range = r'$\mathrm{0.0 \leq \/ y_b < 0.5}$' - info_yb = r'0 <= yb < 0.5' - elif 'yb1' in args['table']: - yb_range = r'$\mathrm{0.5 \leq \/ y_b < 1.0}$' - info_yb = r'0.5 <= yb < 1.0' - elif 'yb2' in args['table']: - yb_range = r'$\mathrm{1.0 \leq \/ y_b < 1.5}$' - info_yb = r'1.0 <= yb < 1.5' - elif 'yb3' in args['table']: - yb_range = r'$\mathrm{1.5 \leq \/ y_b < 2.0}$' - info_yb = r'1.5 <= yb < 2.0' - elif 'yb4' in args['table']: - yb_range = r'$\mathrm{2.0 \leq \/ y_b < 2.5}$' - info_yb = r'2.0 <= yb < 2.5' - else: - print 'No info about range of yb.' - yb_range = '' - info_yb = '' - return yb_range, info_yb #yb_range is in correct format for labeling - - - #range of ystar - def ystar(): - if 'ystar0' in args['table']: - ystar_range = r'$\mathrm{0.0 \leq \/ y^{\ast} < 0.5}$' - info_ystar = r'0 <= ystar < 0.5' - elif 'ystar1' in args['table']: - ystar_range = r'$\mathrm{0.5 \leq \/ y^{\ast} < 1.0}$' - info_ystar = r'0.5 <= ystar < 1.0' - elif 'ystar2' in args['table']: - ystar_range = r'$\mathrm{1.0 \leq \/ y^{\ast} < 1.5}$' - info_ystar = r'1.0 <= ystar < 1.5' - elif 'ystar3' in args['table']: - ystar_range = r'$\mathrm{1.5 \leq \/ y^{\ast} < 2.0}$' - info_ystar = r'1.5 <= ystar < 2.0' - elif 'ystar4' in args['table']: - ystar_range = r'$\mathrm{2.0 \leq \/ y^{\ast} < 2.5}$' - info_ystar = r'2.0 <= ystar < 2.5' - else: - print 'No info about range of ystar.' - ystar_range = '' - info_ystar = '' - return ystar_range, info_ystar - - - - #show information about phase space region - yb_range = yb()[0] - ystar_range = ystar()[0] - - info_yb = yb()[1] - info_ystar = ystar()[1] - - print 'Phase Space Region:' - print '%s' %info_yb - print '%s' %info_ystar - - - - #Which subprocesses are evaluated? - print 'Subprocesses that are investigated: \n' - print args['subproc'] - - - ######## EVALUATING ######## - fnlo = fastnlo.fastNLOLHAPDF(args['table'], args['pdfset'], args['member']) - fnlo.SetContributionON(fastnlo.kFixedOrder,0,True); - fnlo.SetContributionON(fastnlo.kFixedOrder,1,True); - - - #cross section with every process included (for LO+NLO) - fnlo.CalcCrossSection() - xs_all = np.array(fnlo.GetCrossSection()) - print 'Cross section with all subprocesses xs_all: \n' - print xs_all, '\n \n' - - #cross section of single processes in NLO (no LO-contribution considered!) - fnlo.SetContributionON(fastnlo.kFixedOrder, 1, True); #switch NLO on - fnlo.SetContributionON(fastnlo.kFixedOrder, 0, False); #switch LO off - xs_subproc_list = [] - for i in range(0, len(args['subproc'])): - subproc_name = args['subproc'][i] - print 'Selected subprocess: %s' %subproc_name - fnlo.SelectProcesses(subproc_name) - fnlo.CalcCrossSection() - xs_subproc = np.array(fnlo.GetCrossSection()) - xs_subproc_list.append(xs_subproc) - print 'XS for subprocess %s: \n' %args['subproc'][i] - print xs_subproc, '\n \n' - xs_sub = np.array(xs_subproc_list) #Array with xs for selected processes in certain pTZ-bins - print 'XS of the selected processes in different pTZ-regions: \n' - print xs_sub, '\n \n' - - #how much do the selected subprocesses contribute to the total xs? - fractions = np.divide(xs_sub,xs_all) - print 'fractions: \n', fractions, '\n' - - for i in range(0, len(fractions)): - print 'fraction of %s in NLO on total XS: ' %args['subproc'][i] - print fractions[i,:], '\n \n' - - - #checking whether contribution is positive or negative - pos_contr = np.array(fractions) - neg_contr = np.array(fractions) - bin_bounds = np.array(fnlo.GetObsBinsBounds(0)) - - for i in range(0, len(args['subproc'])): #go through 'fractions' line by line = subprocess after subprocess - for j in range(0, len(bin_bounds)): #check the different pTZ bins - if (fractions[i,j] < 0): - pos_contr[i,j] = 0.0 - else: - neg_contr[i,j] = 0.0 - print 'Positive NLO contributions of %s on total XS: \n' %args['subproc'][i] - print pos_contr[i,:], '\n' - print 'Negative NLO contributions of %s on total XS: \n' %args['subproc'][i] - print neg_contr[i,:], '\n \n' - - print 'Summary of positive and negative NLO contributions of the subprocesses: \n' - print pos_contr, '\n' - print neg_contr, '\n' - - - - ######## PLOTTING ######## - #Bins for x-axis (according to first pdf (0)) - bin_bounds = np.array(fnlo.GetObsBinsBounds(0)) - #print bin_bounds.T #bin_bounds.T[0] = lower bounds, bin_bounds.T[1] upper bounds - #print bin_bounds.flatten() - - - #dictionary for using specific color per process - process_color = {"gg":"g", - "gq":"r", - "qiqi":"y", - "qiai":"c", - "qiqj":"m", - "qiaj":"b"} - - #Check whether comparison-plot or single-plot is required: - print args['compare'] - if (args['compare']==True): #stackplot that compares the contribution of the subprocesses to the total XS - plt.close() - fig0 = plt.figure(figsize=(8,7)) - ax0 = fig0.add_subplot(111) - - patches = [] #later needed for legend - #number of bins via bin_bounds variable - y0_pos = np.zeros([len(bin_bounds)]) #for tracking the current 'height' of stackplot, in order to staple and not overlap the values for each subprocess - y0_neg = np.zeros([len(bin_bounds)]) #same as above for the negative contributions, plotted below x-axis - - for i in range(0, len(args['subproc'])): #go through fractions, subproc by subproc - - #positive contributions - ax0.fill_between(bin_bounds.flatten(), steppify_bin(y0_pos), steppify_bin(y0_pos+pos_contr[i]), #label=labeling[args['subproc'][i]], - facecolor=process_color[args['subproc'][i]], alpha=0.4) - y0_pos += pos_contr[i] #calculate new height of stackplot - - #negative contributions - ax0.fill_between(bin_bounds.flatten(), steppify_bin(y0_neg), steppify_bin(y0_neg+neg_contr[i]), #label=labeling[args['subproc'][i]], - facecolor=process_color[args['subproc'][i]], hatch='X', alpha=0.4) - y0_neg += neg_contr[i] #new 'height' below x-axis - - #patch for subprocess i (for the legend) ##labeling happens here - patches.append(matplotlib.patches.Rectangle((0, 0), 0, 0, color=process_color[args['subproc'][i]], - label=labeling[args['subproc'][i]], alpha=0.4)) - ax0.add_patch(patches[i]) - - #settings for the whole stackplot - ax0.set_xscale('log', nonposx='clip') - ax0.axis([30, 1000, -0.20, 1.20]) - plt.axhline(y=1, xmin=0, xmax=1, color='k', linestyle='dotted') #dotted line at xs_sub/xs=1=100% - plt.axhline(y=0, xmin=0, xmax=1, color='k', linestyle='-') #line at xs_sub/xs_tot=0 - - #use phasespace region as title - title_phasespace = yb_range + ", " + ystar_range - plt.title(x=0.5, y=1.01, s='%s' %(title_phasespace), fontsize=22) - - ax0.set_xlabel('$\mathrm{p_{T,Z}} \ \mathrm{[GeV]}$', fontsize=20) - ax0.xaxis.set_label_coords(0.9, -0.05) - ax0.set_ylabel(r'$\frac{\mathrm{XS_{sp,NLO}}}{\mathrm{XS_{tot,LO+NLO}}}$', rotation=0, fontsize=22) - ax0.yaxis.set_label_coords(-0.16, 0.9) - ax0.text(0.96, 0.03, args['pdfset'], transform=ax0.transAxes, fontsize=14, verticalalignment='bottom', horizontalalignment='right') - plt.legend() - - plt.tight_layout() - fig0.tight_layout() - - #make string with the subprocess names - processnames = "" - for i in range(0, len(args['subproc'])): - processnames += ("_"+args['subproc'][i]) - stackplotname = 'compare_spNLO_xstot%s_%s_%s.png' %(processnames, tablename, args['pdfset']) - fig0.savefig(stackplotname) - - print 'Stackplot for subprocess comparison saved as: %s' %(stackplotname) - - - - - else: #individual plot for each subproc - #create folder for saving the plots - current_dir = os.getcwd() - - final_dir = os.path.join(current_dir, r'single_spNLO_plots_%s' %tablename) - now = datetime.datetime.now() - nowstr = 'single_spNLO_xstot_plots_%s_' %(tablename) - nowstr += now.strftime('%Y-%m-%d_%H-%M-%S') - final_dir_date = os.path.join(current_dir, nowstr) - - #check if directory already exists, if so: include datetime to name - if not os.path.exists(final_dir): - os.makedirs(final_dir) - else: - os.makedirs(final_dir_date) - - #loop where single plot for each of the selected subprocesses is created - #start the plot - for i in range(0, len(args['subproc'])): - plt.close() - fig0 = plt.figure(figsize=(8, 7)) - ax0 = fig0.add_subplot(111) - - #plot the fractions - y0 = np.zeros([len(bin_bounds)]) - ax0.fill_between(bin_bounds.flatten(), steppify_bin(y0), steppify_bin(fractions[i]), - facecolor=process_color[args['subproc'][i]], alpha=0.4) #improve labeling? - - - - #info about phase space region included as text (see below) - ax0.set_xscale('log', nonposx='clip') - ax0.axis([30, 1000, -0.4, 1.2]) - plt.axhline(y=1, xmin=0, xmax=1, color='k', linestyle='dotted') - plt.axhline(y=0, xmin=0, xmax=1, color='k', linestyle='-') - - titlename = processes[args['subproc'][i]] - - plt.title(x=0.5, y=1.01, s=titlename, fontsize=20) - ax0.set_xlabel('$\mathrm{p_{T,Z}} \ \mathrm{[GeV]}$', fontsize=20) - ax0.xaxis.set_label_coords(0.9, -0.05) - ax0.set_ylabel(r'$\frac{\mathrm{XS_{sp,NLO}}}{\mathrm{XS_{tot,LO+NLO}}}$', rotation=0, fontsize=22) - ax0.yaxis.set_label_coords(-0.16, 0.9) - #ax0.set_ylabel('$\mathrm{XS_{sp,NLO}} / \mathrm{XS_{tot,LO+NLO}}$', fontsize=20) - ax0.text(0.96, 0.03, args['pdfset'], transform=ax0.transAxes, fontsize=14, verticalalignment='bottom', horizontalalignment='right') - ax0.text(0.96, 0.94, yb_range, transform=ax0.transAxes, fontsize=16, verticalalignment='bottom', horizontalalignment='right') - ax0.text(0.96, 0.88, ystar_range, transform=ax0.transAxes, fontsize=16, verticalalignment='bottom', horizontalalignment='right') - plt.legend() #location parameter loc='upper right' - - plt.tight_layout() - fig0.tight_layout() - plotname = '%s_NLOfrac_xstot_%s_%s.png' %(args['subproc'][i], tablename, args['pdfset']) - - - #save the plots - if os.path.exists(final_dir_date): - fig0.savefig(os.path.join(final_dir_date,plotname)) - print 'Plot saved in %s' %(final_dir_date) - else: - fig0.savefig(os.path.join(final_dir,plotname)) - print 'Plot saved in %s' %(final_dir) - - print '\n' - print 'fraction plot saved as: %s' %(plotname) - - - - - -################################################## -##function to make better uncertainty plot (shaded) -##could maybe be replaced by .flatten() ?? -def steppify_bin(arr, isx=False): - """ - Produce stepped array of arr, needed for example for stepped fill_betweens. - Pass all x bin edges to produce stepped x arr and all y bincontents to produce - stepped bincontents representation - steppify_bin([1,2,3], True) - -> [1,2,2,3] - steppify_bin([5,6]) - -> [5,5,6,6] - """ - if isx: - newarr = np.array(zip(arr[:-1], arr[1:])).ravel() - else: - newarr = np.array(zip(arr, arr)).ravel() - return newarr - - -################################################# - -if __name__ == '__main__': - main() - - - - - diff --git a/tools/plotting/yb_ystar/kfactor_ybystar.py b/tools/plotting/yb_ystar/kfactor_ybystar.py deleted file mode 100755 index 3d04b301fdc5062a00dd78f3abbb9a025fb54513..0000000000000000000000000000000000000000 --- a/tools/plotting/yb_ystar/kfactor_ybystar.py +++ /dev/null @@ -1,294 +0,0 @@ -#! /usr/bin/env python - -###################################################################### -#Looking at the k-factor -#(total cross section in NLO to total xs in LO) -# -#Comparison of multiple tables that have been chosen. -#No distinction between different subprocesses (always include ALL). -###################################################################### - -import argparse -import numpy as np -import os -import time, datetime -import matplotlib -import matplotlib.pyplot as plt -import matplotlib.gridspec as gridspec -from matplotlib.pyplot import cm - -import fastnlo - - -def main(): - - parser = argparse.ArgumentParser() - - #make it possible to use different options when running - parser.add_argument('-t','--table', default=['table.tab'], required=True, type=str, nargs='*', - help='FastNLO tables that shall be evaluated.') - parser.add_argument('-p', '--pdfset', default='CT14nlo', - help='PDFset(s) to evaluate fastNLO tables.') - parser.add_argument('-m', '--member', default=0, type=int, - help='Member of PDFset, default is 0.') - - - - #parse arguments - args = vars(parser.parse_args()) - - #table name - table_names = [] - for i in range(0, len(args['table'])): - table_ = os.path.basename(args['table'][i]) - tablename = os.path.splitext(table_)[0] - tablename = os.path.splitext(tablename)[0] #because yb tables have .tab.gz ending (getting rid of both here) - table_names.append(table_) - tables = np.array(table_names) - print '\n' - print 'Tables: ', tables, '\n' - - #pdfset name - pdfset_ = os.path.basename(args['pdfset']) - pdfname = os.path.splitext(pdfset_)[0] - print 'PDF Set: ', pdfname, '\n' - - - #checks for investigated phase space region --> mainly for plot-labeling - #range of y_boost - def yb(table): - if 'yb0' in table: - yb_range = r'$\mathrm{0.0 \leq \/ y_b < 0.5}$' - info_yb = r'0 <= yb < 0.5' - elif 'yb1' in table: - yb_range = r'$\mathrm{0.5 \leq \/ y_b < 1.0}$' - info_yb = r'0.5 <= yb < 1.0' - elif 'yb2' in table: - yb_range = r'$\mathrm{1.0 \leq \/ y_b < 1.5}$' - info_yb = r'1.0 <= yb < 1.5' - elif 'yb3' in table: - yb_range = r'$\mathrm{1.5 \leq \/ y_b < 2.0}$' - info_yb = r'1.5 <= yb < 2.0' - elif 'yb4' in table: - yb_range = r'$\mathrm{2.0 \leq \/ y_b < 2.5}$' - info_yb = r'2.0 <= yb < 2.5' - else: - print 'No info about range of yb.' - yb_range = '' - info_yb = '' - return yb_range, info_yb #yb_range is in correct format for labeling - - - #range of ystar - def ystar(table): - if 'ystar0' in table: - ystar_range = r'$\mathrm{0.0 \leq \/ y^{\ast} < 0.5}$' - info_ystar = r'0 <= ystar < 0.5' - elif 'ystar1' in table: - ystar_range = r'$\mathrm{0.5 \leq \/ y^{\ast} < 1.0}$' - info_ystar = r'0.5 <= ystar < 1.0' - elif 'ystar2' in table: - ystar_range = r'$\mathrm{1.0 \leq \/ y^{\ast} < 1.5}$' - info_ystar = r'1.0 <= ystar < 1.5' - elif 'ystar3' in table: - ystar_range = r'$\mathrm{1.5 \leq \/ y^{\ast} < 2.0}$' - info_ystar = r'1.5 <= ystar < 2.0' - elif 'ystar4' in table: - ystar_range = r'$\mathrm{2.0 \leq \/ y^{\ast} < 2.5}$' - info_ystar = r'2.0 <= ystar < 2.5' - else: - print 'No info about range of ystar.' - ystar_range = '' - info_ystar = '' - return ystar_range, info_ystar - - - - - ######## EVALUATING ######## - - fractions_list = [] - binbounds_list = [[] for i in range(len(args['table']))] - #binbounds_array = np.array( - for i in range(0, len(args['table'])): - tab = tables[i] - print 'Selected table: %s' %tab - #show information about phase space region - yb_range = yb(tab)[0] - ystar_range = ystar(tab)[0] - info_yb = yb(tab)[1] - info_ystar = ystar(tab)[1] - - print 'Phase Space Region:' - print '%s' %info_yb - print '%s' %info_ystar, '\n' - - #Evaluate selected table: - fnlo = fastnlo.fastNLOLHAPDF(args['table'][i], args['pdfset'], args['member']) - - ####leading order cross section################################################## - fnlo.SetContributionON(fastnlo.kFixedOrder,0,True); #Switch LO on - fnlo.SetContributionON(fastnlo.kFixedOrder,1,False); #Switch NLO off - - #cross section with every process included (only Leading Order) - fnlo.CalcCrossSection() - xs_lo = np.array(fnlo.GetCrossSection()) - print '\n' - print 'Cross section in Leading Order with all subprocesses xs_lo: \n' - print xs_lo, '\n \n' - - ###next-to-leading order cross section (LO+NLO):################################# - fnlo.SetContributionON(fastnlo.kFixedOrder, 0, True); #switch LO on! - fnlo.SetContributionON(fastnlo.kFixedOrder, 1, True); #switch NLO on - - #cross section with every process included (Next-to-Leading Order) - fnlo.CalcCrossSection() - xs_nlo = np.array(fnlo.GetCrossSection()) - print '\n' - print 'Cross section in Next-to-Leading Order with all subprocesses xs_nlo: \n' - print xs_nlo, '\n \n' - - #XS in NLO compared to XS in LO - #alternative could be: first calculate all the nlo and lo XS for each table, then divide - #here it is the other way round: first k-factors for each table, then put them into one list - fraction = np.divide(xs_nlo,xs_lo) #nlo/lo for one table (in pTZ bins) - fractions_list.append(fraction) #collect k-factor for all the tables in this list - obs_binbounds = np.array(fnlo.GetObsBinsBounds(0)) #must be done for each table, as binbounds may differ - #obs_binbounds = fnlo.GetObsBinBounds(0) #leave it as a list - binbounds_list[i]= obs_binbounds - fractions = np.array(fractions_list) - binbounds = np.array(binbounds_list) - print 'k-factors for the selected tables: \n' - print 'fractions: \n', fractions, '\n' - - #print 'binbounds:', binbounds - - #NOTE: fractions and binbounds sometimes are arrays of lists that differ in length - - - - ######## PLOTTING ######## - #taking care of the directory - current_dir = os.getcwd() - - final_dir = os.path.join(current_dir, r'kfactor_plots_%s' %pdfname) - now = datetime.datetime.now() - nowstr = 'kfactor_plots_%s' %(pdfname) - nowstr += now.strftime('_%Y-%m-%d_%H-%M-%S') - final_dir_date = os.path.join(current_dir, nowstr) - - #check if final directory already exists, if so: include datetime to name - if not os.path.exists(final_dir): - os.makedirs(final_dir) - else: - os.makedirs(final_dir_date) - - - plt.close() - fig0 = plt.figure(figsize=(8,7)) - ax0 = fig0.add_subplot(111) - - - color = iter(cm.rainbow(np.linspace(0,1,len(args['table'])))) - #print 'color:', color - - - ymin = -0.20 - ymax = 1.20 - xmin = 30 - xmax = 1000 - for i in range(0, len(args['table'])): #go through fractions, line by line = table by table - bin_bounds = binbounds[i][:] -# print 'x',bin_bounds - fraction = fractions[i][:] -# print 'y',fraction - - #plot the k-factors in each pTZ bin for table i: - c = next(color) #use the iterator for choosing the linecolor fractions[i,:] - ax0.plot(bin_bounds.flatten(), steppify_bin(fraction), - label=yb(args['table'][i])[0] + ", " + ystar(args['table'][i])[0], - color=c, alpha=1.0) - - #check current limits of y-axis: - ylim = ax0.get_ylim() -# if (ylim[0]-0.05 < ymin): -# ymin = ylim[0]-0.05 -# if (ylim[1]+0.05 > ymax): -# ymax = ylim[1]+0.05 - - #check current limits of x-axis: - xlim = ax0.get_xlim() -# if (xlim[0]-0.05 < xmin): -# xmin = ylim[0]-0.05 -# if (xlim[1]+0.05 > xmax): -# xmax = xlim[1]+0.05 - - - #settings for the whole plot - ax0.set_xscale('log', nonposx='clip') -# ax0.axis([xmin, xmax, ymin, ymax]) - ax0.axis([xlim[0], xlim[1], ylim[0]-0.05, ylim[1]+0.05]) #flexible axes - plt.axhline(y=1, xmin=0, xmax=1, color='k', linestyle='dotted') - plt.axhline(y=0, xmin=0, xmax=1, color='k', linestyle='dotted') - - - #plt.title(x=0.5, y=1.01, s='k-factor', fontsize=22) - ax0.set_xlabel('$\mathrm{p_{T,Z}} \ \mathrm{[GeV]}$', fontsize=18) - ax0.xaxis.set_label_coords(0.9, -0.05) - ax0.set_ylabel(r'$\frac{\mathrm{XS_{tot,NLO}}}{\mathrm{XS_{tot,LO}}}$', rotation=0, fontsize=24) - ax0.yaxis.set_label_coords(-0.14, 0.9) - - ax0.text(0.96, 0.03, args['pdfset'], transform=ax0.transAxes, fontsize=14, verticalalignment='bottom', horizontalalignment='right') - #plt.legend(loc="best", fancybox=True, framealpha=0.5) - plt.legend(bbox_to_anchor=(1.02,1), loc='upper left') #'upper left' refers to the legend box - - plt.tight_layout() - fig0.tight_layout() - - figname = 'kfactors_%s.png' %(pdfname) - #save the plot - if os.path.exists(final_dir_date): - fig0.savefig(os.path.join(final_dir_date,figname), bbox_inches='tight') - print 'Plot saved in %s' %(final_dir_date) - else: - fig0.savefig(os.path.join(final_dir,figname), bbox_inches='tight') - print 'Plot saved in %s' %(final_dir) - print '\n' - - print 'k-factor plot saved as: %s' %(figname) - - - - - - - -################################################## -##function to make better uncertainty plot (shaded) -##could maybe be replaced by .flatten() ?? -def steppify_bin(arr, isx=False): - """ - Produce stepped array of arr, needed for example for stepped fill_betweens. - Pass all x bin edges to produce stepped x arr and all y bincontents to produce - stepped bincontents representation - steppify_bin([1,2,3], True) - -> [1,2,2,3] - steppify_bin([5,6]) - -> [5,5,6,6] - """ - if isx: - newarr = np.array(zip(arr[:-1], arr[1:])).ravel() - else: - newarr = np.array(zip(arr, arr)).ravel() - return newarr - - -################################################# - -if __name__ == '__main__': - main() - - - - - diff --git a/tools/plotting/yb_ystar/subproc_contrib_ybystar.py b/tools/plotting/yb_ystar/subproc_contrib_ybystar.py deleted file mode 100755 index 7b5e33ac304e685d4412b6565b70b6fed91eed8b..0000000000000000000000000000000000000000 --- a/tools/plotting/yb_ystar/subproc_contrib_ybystar.py +++ /dev/null @@ -1,381 +0,0 @@ -#! /usr/bin/env python - -############################################################### -#Script for comparing the contribution of several subprocesses -#to the total cross section. -#Either as stackplot ('-c') or (per default) for single process. -# -#Customized for yb-ystar-tables. -#Six available subprocess categories. -############################################################### - - -import argparse -import numpy as np -import os -import time, datetime -import matplotlib -import matplotlib.pyplot as plt -import matplotlib.gridspec as gridspec - -import fastnlo - - - -def main(): - - parser = argparse.ArgumentParser() - - #make it possible to use different options when running - parser.add_argument('-t','--table', default='table.tab', required=True, - help='FastNLO tables that shall be evaluated.') - parser.add_argument('-p', '--pdfset', default='CT14nlo', - help='PDFset(s) to evaluate fastNLO tables.') - parser.add_argument('-m', '--member', default=0, type=int, - help='Member of PDFset, default is 0.') - - parser.add_argument('-s', '--subproc', default=['gg'], type=str, nargs='*', - help='Subprocesses that shall be compared. \n' - 'Options: gg, gq, qiqi, qiai, qiqj, qiaj') - parser.add_argument('-c', '--compare', default=False, const=True, type=bool, nargs='?', - help='Stackplot if option -c is chosen. Otherwise single-process-plots.') - #help='Stackplot if True. Single-Process-Plot if False.') - - - - - #Dictionary for how the subprocesses are called - processes = {"gg":"Gluon-Gluon", - "gq":"Gluon-Quark/Antiquark", - "qiqi":"Quark-Quark and $\mathrm{\overline{q_i} \; \overline{q_i}}$ (same flavor)", - "qiai":"Quark-Antiquark (same flavor)", - "qiqj":"Quark-Quark and $\mathrm{\overline{q_i} \; \overline{q_j}}}$ (different flavors)", - "qiaj":"Quark-Antiquark (different flavors)"} - - #shorter for labeling the stackplot - labeling = {"gg":r"$\mathrm{gg}$", - "gq":r"$\mathrm{gq} \ & \ \mathrm{g\overline{q}}$", - "qiqi":r"$\mathrm{q_i q_i} \ & \ \mathrm{\overline{q_i} \; \overline{q_i}}$", - "qiai":r"$\mathrm{q_i} \; \mathrm{\overline{q_i}}$", - "qiqj":r"$\mathrm{q_i q_j} \ & \ \mathrm{\overline{q_i} \; \overline{q_j}}$", - "qiaj":r"$\mathrm{q_i} \; \mathrm{\overline{q_j}}$"} - - - #parse arguments - args = vars(parser.parse_args()) - - #table name - table_ = os.path.basename(args['table']) - tablename = os.path.splitext(table_)[0] - tablename = os.path.splitext(tablename)[0] #because yb tables have .tab.gz ending (getting rid of both here) - print '\n' - print 'Table: ', tablename, '\n' - - #pdfset name - pdfset_ = os.path.basename(args['pdfset']) - pdfname = os.path.splitext(pdfset_)[0] - print 'PDF Set: ', pdfname, '\n' - - #checks for investigated phase space region --> mainly for plot-labeling - #range of y_boost - def yb(): - if 'yb0' in args['table']: - yb_range = r'$\mathrm{0.0 \leq \/ y_b < 0.5}$' - info_yb = r'0 <= yb < 0.5' - elif 'yb1' in args['table']: - yb_range = r'$\mathrm{0.5 \leq \/ y_b < 1.0}$' - info_yb = r'0.5 <= yb < 1.0' - elif 'yb2' in args['table']: - yb_range = r'$\mathrm{1.0 \leq \/ y_b < 1.5}$' - info_yb = r'1.0 <= yb < 1.5' - elif 'yb3' in args['table']: - yb_range = r'$\mathrm{1.5 \leq \/ y_b < 2.0}$' - info_yb = r'1.5 <= yb < 2.0' - elif 'yb4' in args['table']: - yb_range = r'$\mathrm{2.0 \leq \/ y_b < 2.5}$' - info_yb = r'2.0 <= yb < 2.5' - else: - print 'No info about range of yb.' - yb_range = '' - info_yb = '' - return yb_range, info_yb #yb_range is in correct format for labeling - - - #range of ystar - def ystar(): - if 'ystar0' in args['table']: - ystar_range = r'$\mathrm{0.0 \leq \/ y^{\ast} < 0.5}$' - info_ystar = r'0 <= ystar < 0.5' - elif 'ystar1' in args['table']: - ystar_range = r'$\mathrm{0.5 \leq \/ y^{\ast} < 1.0}$' - info_ystar = r'0.5 <= ystar < 1.0' - elif 'ystar2' in args['table']: - ystar_range = r'$\mathrm{1.0 \leq \/ y^{\ast} < 1.5}$' - info_ystar = r'1.0 <= ystar < 1.5' - elif 'ystar3' in args['table']: - ystar_range = r'$\mathrm{1.5 \leq \/ y^{\ast} < 2.0}$' - info_ystar = r'1.5 <= ystar < 2.0' - elif 'ystar4' in args['table']: - ystar_range = r'$\mathrm{2.0 \leq \/ y^{\ast} < 2.5}$' - info_ystar = r'2.0 <= ystar < 2.5' - else: - print 'No info about range of ystar.' - ystar_range = '' - info_ystar = '' - return ystar_range, info_ystar - - - - #show information about phase space region - # - yb_range = yb()[0] - ystar_range = ystar()[0] - - info_yb = yb()[1] - info_ystar = ystar()[1] - - print 'Phase Space Region:' - print '%s' %info_yb - print '%s' %info_ystar, '\n' - - - - - #Which subprocesses are evaluated? - print 'Subprocesses that are investigated: ' - print args['subproc'] - - - ######## EVALUATING ######## - fnlo = fastnlo.fastNLOLHAPDF(args['table'], args['pdfset'], args['member']) - fnlo.SetContributionON(fastnlo.kFixedOrder,1,True); - - - #cross section with every process included - fnlo.CalcCrossSection() - xs_all = np.array(fnlo.GetCrossSection()) - print '\n' - print 'Cross section with all subprocesses xs_all: \n' - print xs_all, '\n \n' - - #cross section of single processes - xs_subproc_list = [] - for i in range(0, len(args['subproc'])): - subproc_name = args['subproc'][i] - print 'Selected subprocess: %s' %subproc_name - fnlo.SelectProcesses(subproc_name) - fnlo.CalcCrossSection() - xs_subproc = np.array(fnlo.GetCrossSection()) - xs_subproc_list.append(xs_subproc) - print 'XS for subprocess %s: \n' %args['subproc'][i] - print xs_subproc, '\n \n' - xs_sub = np.array(xs_subproc_list) #Array with xs for selected processes in certain pTZ-bins - print 'XS of the selected processes in different pTZ-regions: \n' - print xs_sub, '\n \n' - - #how much do the selected subprocesses contribute to the total xs? - fractions = np.divide(xs_sub,xs_all) - print 'fractions: \n', fractions, '\n' - - for i in range(0, len(fractions)): - print 'fraction of %s on total XS: ' %args['subproc'][i] - print fractions[i,:], '\n \n' - - - #checking whether contribution is positive or negative - pos_contr = np.array(fractions) - neg_contr = np.array(fractions) - bin_bounds = np.array(fnlo.GetObsBinsBounds(0)) - - for i in range(0, len(args['subproc'])): #go through 'fractions' line by line = subprocess after subprocess - for j in range(0, len(bin_bounds)): #check the different pTZ bins - if (fractions[i,j] < 0): - pos_contr[i,j] = 0.0 - else: - neg_contr[i,j] = 0.0 - print 'Positive contributions of %s on total XS: \n' %args['subproc'][i] - print pos_contr[i,:], '\n' - print 'Negative contributions of %s on total XS: \n' %args['subproc'][i] - print neg_contr[i,:], '\n \n' - - print 'Summary of positive and negative contributions of the subprocesses: \n' - print pos_contr, '\n' - print neg_contr, '\n' - - - - ######## PLOTTING ######## - #Bins for x-axis (according to first pdf (0)) - bin_bounds = np.array(fnlo.GetObsBinsBounds(0)) - #print bin_bounds.T #bin_bounds.T[0] = lower bounds, bin_bounds.T[1] upper bounds - #print bin_bounds.flatten() - - - #dictionary for using specific color per process - process_color = {"gg":"g", - "gq":"r", - "qiqi":"y", - "qiai":"c", - "qiqj":"m", - "qiaj":"b"} - - #Check whether comparison-plot or single-plot is required: - print args['compare'] - if (args['compare']==True): #stackplot that compares the contribution of the subprocesses to the total XS - plt.close() - fig0 = plt.figure(figsize=(8,7)) - ax0 = fig0.add_subplot(111) - - patches = [] #later needed for legend - #number of bins via bin_bounds variable - y0_pos = np.zeros([len(bin_bounds)]) #for tracking the current 'height' of stackplot, in order to staple and not overlap the values for each subprocess - y0_neg = np.zeros([len(bin_bounds)]) #same as above for the negative contributions, plotted below x-axis - - for i in range(0, len(args['subproc'])): #go through fractions, subproc by subproc - - #positive contributions - ax0.fill_between(bin_bounds.flatten(), steppify_bin(y0_pos), steppify_bin(y0_pos+pos_contr[i]), #label=labeling[args['subproc'][i]], - facecolor=process_color[args['subproc'][i]], alpha=0.4) - y0_pos += pos_contr[i] #calculate new height of stackplot - - #negative contributions - ax0.fill_between(bin_bounds.flatten(), steppify_bin(y0_neg), steppify_bin(y0_neg+neg_contr[i]), #label=labeling[args['subproc'][i]], - facecolor=process_color[args['subproc'][i]], hatch='X', alpha=0.4) - y0_neg += neg_contr[i] #new 'height' below x-axis - - #patch for subprocess i (for the legend) ##labeling happens here - patches.append(matplotlib.patches.Rectangle((0, 0), 0, 0, color=process_color[args['subproc'][i]], - label=labeling[args['subproc'][i]], alpha=0.4)) - ax0.add_patch(patches[i]) - - #settings for the whole stackplot - ax0.set_xscale('log', nonposx='clip') - ax0.axis([30, 1000, -0.20, 1.20]) - plt.axhline(y=1, xmin=0, xmax=1, color='k', linestyle='dotted') #dotted line at xs_sub/xs=1=100% - plt.axhline(y=0, xmin=0, xmax=1, color='k', linestyle='-') #line at xs_sub/xs_tot=0 - - #use phasespace region as title - title_phasespace = yb_range + ", " + ystar_range - - plt.title(x=0.5, y=1.01, s='%s' %(title_phasespace), fontsize=22) - - ax0.set_xlabel('$\mathrm{p_{T,Z}} \ \mathrm{[GeV]}$', fontsize=20) - ax0.xaxis.set_label_coords(0.9, -0.05) - ax0.set_ylabel(r'$\frac{\mathrm{XS_{subproc}}}{\mathrm{XS_{total}}}$', rotation=0, fontsize=24) - ax0.yaxis.set_label_coords(-0.16, 0.9) - - ax0.text(0.96, 0.03, args['pdfset']+', NLO', transform=ax0.transAxes, fontsize=14, verticalalignment='bottom', horizontalalignment='right') - plt.legend() - - plt.tight_layout() - fig0.tight_layout() - - #make string with the subprocess names - processnames = "" - for i in range(0, len(args['subproc'])): - processnames += ("_"+args['subproc'][i]) - stackplotname = 'compare%s_%s_%s.png' %(processnames, tablename, args['pdfset']) - fig0.savefig(stackplotname) - - print 'Stackplot for subprocess comparison saved as: %s' %(stackplotname) - - - - - else: #individual plot for each subproc - #create folder for saving the plots - current_dir = os.getcwd() - - final_dir = os.path.join(current_dir, r'single_subproc_plots_%s' %tablename) - now = datetime.datetime.now() - nowstr = 'single_subproc_plots_%s_' %(tablename) - nowstr += now.strftime('%Y-%m-%d_%H-%M-%S') - final_dir_date = os.path.join(current_dir, nowstr) - - #check if directory already exists, if so: include datetime to name - if not os.path.exists(final_dir): - os.makedirs(final_dir) - else: - os.makedirs(final_dir_date) - - #loop where single plot for each of the selected subprocesses is created - #start the plot - for i in range(0, len(args['subproc'])): - plt.close() - fig0 = plt.figure(figsize=(8, 7)) - ax0 = fig0.add_subplot(111) - - #plot the fractions - y0 = np.zeros([len(bin_bounds)]) - ax0.fill_between(bin_bounds.flatten(), steppify_bin(y0), steppify_bin(fractions[i]), - facecolor=process_color[args['subproc'][i]], alpha=0.4) #improve labeling? - - - #info about phase space region included as text (see below) - ax0.set_xscale('log', nonposx='clip') - ax0.axis([30, 1000, -0.4, 1.2]) - plt.axhline(y=1, xmin=0, xmax=1, color='k', linestyle='dotted') - plt.axhline(y=0, xmin=0, xmax=1, color='k', linestyle='-') - - titlename = processes[args['subproc'][i]] - - plt.title(x=0.5, y=1.01, s=titlename, fontsize=20) - ax0.set_xlabel('$\mathrm{p_{T,Z}} \ \mathrm{[GeV]}$', fontsize=20) - #ax0.xaxis.set_label_coords(0.9, -0.05) - ax0.set_ylabel('$\mathrm{XS_{subproc}} / \mathrm{XS_{total}}$', fontsize=20) - ax0.text(0.96, 0.03, args['pdfset'], transform=ax0.transAxes, fontsize=14, verticalalignment='bottom', horizontalalignment='right') - ax0.text(-0.12, 0.98, 'NLO', transform=ax0.transAxes, fontsize=16, rotation=90, verticalalignment='top', horizontalalignment='left') #manually added 'NLO' to y-label - ax0.text(0.96, 0.94, yb_range, transform=ax0.transAxes, fontsize=16, verticalalignment='bottom', horizontalalignment='right') - ax0.text(0.96, 0.88, ystar_range, transform=ax0.transAxes, fontsize=16, verticalalignment='bottom', horizontalalignment='right') - - plt.legend() #location parameter loc='upper right' - - plt.tight_layout() - fig0.tight_layout() - plotname = '%s_frac_%s_%s.png' %(args['subproc'][i], tablename, args['pdfset']) - - - #save the plots - if os.path.exists(final_dir_date): - fig0.savefig(os.path.join(final_dir_date,plotname)) - print 'Plot saved in %s' %(final_dir_date) - else: - fig0.savefig(os.path.join(final_dir,plotname)) - print 'Plot saved in %s' %(final_dir) - - print '\n' - print 'fraction plot saved as: %s' %(plotname) - - - - - -################################################## -##function to make better uncertainty plot (shaded) -##could maybe be replaced by .flatten() ?? -def steppify_bin(arr, isx=False): - """ - Produce stepped array of arr, needed for example for stepped fill_betweens. - Pass all x bin edges to produce stepped x arr and all y bincontents to produce - stepped bincontents representation - steppify_bin([1,2,3], True) - -> [1,2,2,3] - steppify_bin([5,6]) - -> [5,5,6,6] - """ - if isx: - newarr = np.array(zip(arr[:-1], arr[1:])).ravel() - else: - newarr = np.array(zip(arr, arr)).ravel() - return newarr - - -################################################# - -if __name__ == '__main__': - main() - - - - - diff --git a/v2.5/generators/nlojet++/interface/check/fnlo-compare-tables.py b/v2.5/generators/nlojet++/interface/check/fnlo-compare-tables.py deleted file mode 100755 index f00bbcce311eacc3896cb96c5bc29274fc0b88aa..0000000000000000000000000000000000000000 --- a/v2.5/generators/nlojet++/interface/check/fnlo-compare-tables.py +++ /dev/null @@ -1,66 +0,0 @@ -#!/usr/bin/env python3 - -import sys -import os - -try: - import fastnlo as fnlo -except ModuleNotFoundError: - print("fastNLO Python extension not found") - sys.exit(77) - -LIBDIR = os.environ["LIBDIR"] -DATADIR = f"{os.path.dirname(os.path.abspath(__file__))}/../data/check/" - -TYPES = ["fix", "flex"] -NAMES = ["NodesPerBin", "NodeDensity"] -SEEDS = [1000, 2000] - -# fnlo.SetGlobalVerbosity(fnlo.DEBUG) - -os.system("rm -rf output") -os.system(f"ln -sf {DATADIR}InclusiveNJets_InclusiveJets_fix.wrm") -os.system(f"ln -sf {DATADIR}InclusiveNJets_InclusiveJets_flex.wrm") - - -def generate_table(vartype: str, name: str, seed: int): - os.system(f"ln -sf {DATADIR}{vartype}_{name}.str InclusiveNJets.str") - print("Asserting that steering file InclusiveNJets.str exists") - assert os.path.exists("InclusiveNJets.str") - os.system( - "nlojet++ " - "--calculate " - "-c born " - f"-s {seed} " - f"--name {vartype}_{name}_{seed:06d} " - f" -u {LIBDIR}/fastnlo_interface_nlojet/libInclusiveNJets.la " - "--max-event 10000 " - "--save-after 10000 " - ) - expected_outfile = "output/run-hhc-born-2jet.tab.gz" - print(f"Asserting that there is a table under {expected_outfile}") - assert os.path.exists(expected_outfile) - os.system(f"mv {expected_outfile} output/{vartype}_{name}_{seed:06d}.tab.gz") - - -for vartype in TYPES: - for steering_file in NAMES: - for seed in SEEDS: - generate_table(vartype, steering_file, seed) - os.system(f"fnlo-tk-merge2 output/{vartype}_{steering_file}_??????.tab.gz " - f"output/{vartype}_{steering_file}_merged.tab.gz") - - for seed in SEEDS: - filename_0 = f"output/{vartype}_{NAMES[0]}_{seed:06d}.tab.gz" - filename_1 = f"output/{vartype}_{NAMES[1]}_{seed:06d}.tab.gz" - table_0 = fnlo.fastNLOTable(filename_0) - table_1 = fnlo.fastNLOTable(filename_1) - print(f"Asserting equal: {filename_0} <-> {filename_1}") - assert table_0.IsEquivalent(table_1, 1e-8) - - filename_0 = f"output/{vartype}_{NAMES[0]}_merged.tab.gz" - filename_1 = f"output/{vartype}_{NAMES[1]}_merged.tab.gz" - table_0_merged = fnlo.fastNLOTable(filename_0) - table_1_merged = fnlo.fastNLOTable(filename_1) - print(f"Asserting equal: {filename_0} <-> {filename_1}") - assert table_0_merged.IsEquivalent(table_1_merged, 1e-8) diff --git a/v2.6/README b/v2.6/README new file mode 100644 index 0000000000000000000000000000000000000000..751211bbfdcdf25325b7e1caef8f13c6522ac71f --- /dev/null +++ b/v2.6/README @@ -0,0 +1,12 @@ +# fastNLO: +# ======== +# This directory contains two kinds of projects: +# +# 1. The fastNLO toolkit to create and evaluate fastNLO interpolation grids: toolkit +# 2. Interfaces of particular pQCD programs to fill fastNLO interpolations grids: +# a) difftop (Not yet started) +# b) NLOJet++ (Releases available) +# c) Sherpa (In development) +# +# Please read the respective README files for more details. +# diff --git a/v2.6/generators/difftop/interface/fnlttbar000.str b/v2.6/generators/difftop/interface/fnlttbar000.str new file mode 100644 index 0000000000000000000000000000000000000000..0e614ad34c97ceb9fb5d6cc1f79e21d725c7112f --- /dev/null +++ b/v2.6/generators/difftop/interface/fnlttbar000.str @@ -0,0 +1,246 @@ +! -------------------------------------------------------------- ! +! +! A steering file for creating a fastNLO table with +! ttbar cross section program by Marco Guzzi +! +! -------------------------------------------------------------- ! + + + +! -------------------------------------------------------------- ! +! +! Generator and process specific variables. +! ( A change of these variable partly requires new coding. ) +! +! -------------------------------------------------------------- ! +OutputPrecision 8 ! Number of decimal values in output table +FlexibleScaleTable true ! currently only flexible scale tables implemented. +ApplyPDFReweighting true ! Apply reweighting of pdfs for an optimized interpolation. (true) +NPDF 2 ! number of PDFs involved (only 2 is implemented) +PDF1 2212 ! PDF of first hadron (following PDG convention). Must agree with values from nlojet-module. +PDF2 2212 ! PDF of second hadron (following PDG convention). Must agree with values from nlojet-module. +NPDFDim 1 ! Internal way to store PDF linear combinations. Use 1 for hadron-hadron collisions (half-matrix storage) +UnitsOfCoefficients 12 ! Units of coeffients as passed to fastNLO (negative power of 10: pb->12, fb->15) + +! number of subprocesses of the considered process. +! Since the calculation order is obtained from generator, only the necessary variable is used. +NSubProcessesLO 2 ! Flexible scale tables store 7 number of processes in LO, although only 6 are required. +NSubProcessesNLO 2 +NSubProcessesNNLO 2 +AsymmetricProcesses {{ ! specify processes that need to to be exchanged in half-matrix notation, when xmin>xmax + ProcID AsymProcID +}} + +IPDFdef1 3 ! Define PDF linear combinations corresponding to partonic subprocesses (hadron-hadron: 3) +IPDFdef2 2 ! Flag to define PDF linear combinations (dependent on IPDFdef1. Use 1 for jet-production in pp/ppbar) +IPDFdef3LO 0 ! Unique identifier (dependent on IPDFdef1, IPDFdef2) for specifying the PDF linear combinations. +IPDFdef3NLO 0 ! Unique identifier (dependent on IPDFdef1, IPDFdef2) for specifying the PDF linear combinations. +IPDFdef3NNLO 0 ! Unique identifier (dependent on IPDFdef1, IPDFdef2) for specifying the PDF linear combinations. + +! Descritption of used generator code. Include also citations here! +! Embrace each single line in quotation marks. +CodeDescription { + "ttbar cross section @ NNLO" + "M. Guzzi, S. Moch" + "to be published" +} +! -------------------------------------------------------------- ! + + + + +! -------------------------------------------------------------- ! +! Variables which are obtained and superseeded from NLOJET++, but may be +! useful for other generators. +! -------------------------------------------------------------- ! + +! ------------------------------- +! Center of mass energy +CenterOfMassEnergy 7000 + +! ------------------------------- +! Order of alpha_s of the leading-order process (is obtained from nlojet) +LeadingOrder 2 + +! ------------------------------- +! Order of alpha_s of the calculation (should be superseeded with value from generator) +OrderInAlphasOfCalculation 4 + +! ------------------------------- +! Specify filename of output fastNLO table +OutputFilename testttbar000.tab + +! -------------------------------------------------------------- ! + + + + + + +! -------------------------------------------------------------- ! +! Choose interpolation kernel and distance measure +! +! Currently implemented interpolation kernels +! - CatmulRom +! +! Currently implemented distance measures +! - linear +! - loglog025 eq. to (log(log(4*x))) +! - log10 +! - sqrtlog10 eq. to sqrt(log_10(x)) +! -------------------------------------------------------------- ! +X_Kernel "CatmulRom" +X_DistanceMeasure "sqrtlog10" +X_NNodes 6 +X_NoOfNodesPerMagnitude true + +Mu1_Kernel "CatmulRom" +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 5 + +Mu2_Kernel "CatmulRom" +Mu2_DistanceMeasure linear +Mu2_NNodes 4 + + + + + +! -------------------------------------------------------------- ! +! +! Scenario specific variables +! +! -------------------------------------------------------------- ! + + +! ------------------------------- +! Unit in barns of the publication +! (negative power of 10) +! pb: 12 +! fb: 15 +! ------------------------------- +PublicationUnits 12 + + + + +! ------------------------------- +! Description of scenario +! (Write each line of description in quotation marks) +! ------------------------------- +ScenarioName fnlttbar000 + +ScenarioDescription { +"Test scenario for first implementation of" +"ttbar cross section up to NNLO." +"Double-differential bin integrated cross sections." +"generator by Marco Guzzi" +"fastNLO by Daniel Britzger" +} + + + +! ------------------------------- +! Specify if binning is read from this file +! ------------------------------- +ReadBinningFromSteering true + + +! ------------------------------- +! How many differential dimensions +! are measured. +! Number must be consistent with DimensionLabels, and DimensionIsDifferential, ... +! - 1: read in 'SingleDiffBinning' +! - 2: read in 'DoubleDifferentialBinning' +! - 3: read in 'TripleDifferentialBinning' +! ------------------------------- +DifferentialDimension 2 + + +! ------------------------------- +! Labels for the measurement dimension +! ------------------------------- +DimensionLabels { +"y" +"p_T" +} + +! If flexible-scale table: specify name of the variable of the two scales. +! If standard table is demanded, only 'ScaleDescriptionScale1' is required. +ScaleDescriptionScale1 "p_T" +ScaleDescriptionScale2 "y" + + +! -------------------------------- +! Binning +! - - - - - - - - - - - - - - - - +! Use either 'SingleDiffBinning' or +! 'DoubleDifferentialBinning' according to +! specification of 'DifferentialDimension' +! (Triple-differential, and non-differential measurements not yet implemented) +! -------------------------------- + +! Example !! +SingleDiffBinning { + 7 11 18 30 50 100 +} + +! Example !! +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension ----" + 0 1 0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 + 1 2.0 0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 + 2.0 3.0 0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 + 3.0 4.0 0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 + 4.0 5.0 0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 +}} + + +! ------------------------------- +! Is this a differential measurement in dimension X? +! Specify flag for each dimension. +! - 0: NO +! - 1: YES +! - 2: Divide Cross Section by bin width of that dimension +! ------------------------------- +DimensionIsDifferential { + 0 0 +} + + +! -------------------------------- +! Calculate bin width from lower and upper bin boundary +! - if 'false': +! specify a table of the width of every bin: +! BinWidth { x1 x2 x3 ... } +! - if 'true': +! Specify a multiplicative factor for bin width (useful for |y|-measurements) +! +! If the measurement is not divided by the bin width, then specify +! 'CalculateBinWidth true' and use 'DimensionIsDifferential' equal '0' for each dimension. +! -------------------------------- + +CalculateBinWidth true +BinWidthFactor 1. + + + +! ----------------------------------------------------------! +! Include automatically generated warm-up +! by convention it must be: +! <steerfile>_<ScenarioName>_warmup.txt +! with +! - <steerfile> name if this file, without .str and .steer +! - <ScenarioName> as given above +! +! If no Warmup file found, fastNLO seeks for warmup file +! by itsself. +! It is also possible to copy the warmup values directly +! into this file (in order to keep information together). +! +! Ignore 'error' message from 'read_steer'. +! ----------------------------------------------------------! +#include:fnlttbar000_${ScenarioName}_warmup.txt + + + diff --git a/v2.6/generators/difftop/interface/fnlttbar100.str b/v2.6/generators/difftop/interface/fnlttbar100.str new file mode 100644 index 0000000000000000000000000000000000000000..57433e885564174a0621774cc3307b074cd6b255 --- /dev/null +++ b/v2.6/generators/difftop/interface/fnlttbar100.str @@ -0,0 +1,250 @@ +! -------------------------------------------------------------- ! +! +! A steering file for creating a fastNLO table with +! ttbar cross section program by Marco Guzzi +! +! This file will calculate truly differential double-differential cross sections +! +! -------------------------------------------------------------- ! + + + +! -------------------------------------------------------------- ! +! +! Generator and process specific variables. +! ( A change of these variable partly requires new coding. ) +! +! -------------------------------------------------------------- ! +OutputPrecision 8 ! Number of decimal values in output table +FlexibleScaleTable true ! currently only flexible scale tables implemented. +ApplyPDFReweighting true ! Apply reweighting of pdfs for an optimized interpolation. (true) +NPDF 2 ! number of PDFs involved (only 2 is implemented) +PDF1 2212 ! PDF of first hadron (following PDG convention). Must agree with values from nlojet-module. +PDF2 2212 ! PDF of second hadron (following PDG convention). Must agree with values from nlojet-module. +NPDFDim 1 ! Internal way to store PDF linear combinations. Use 1 for hadron-hadron collisions (half-matrix storage) +UnitsOfCoefficients 12 ! Units of coeffients as passed to fastNLO (negative power of 10: pb->12, fb->15) + +! number of subprocesses of the considered process. +! Since the calculation order is obtained from generator, only the necessary variable is used. +NSubProcessesLO 2 ! Flexible scale tables store 7 number of processes in LO, although only 6 are required. +NSubProcessesNLO 2 +NSubProcessesNNLO 2 +AsymmetricProcesses {{ ! specify processes that need to to be exchanged in half-matrix notation, when xmin>xmax + ProcID AsymProcID +}} + +IPDFdef1 3 ! Define PDF linear combinations corresponding to partonic subprocesses (hadron-hadron: 3) +IPDFdef2 2 ! Flag to define PDF linear combinations (dependent on IPDFdef1. Use 1 for jet-production in pp/ppbar) +IPDFdef3LO 0 ! Unique identifier (dependent on IPDFdef1, IPDFdef2) for specifying the PDF linear combinations. +IPDFdef3NLO 0 ! Unique identifier (dependent on IPDFdef1, IPDFdef2) for specifying the PDF linear combinations. +IPDFdef3NNLO 0 ! Unique identifier (dependent on IPDFdef1, IPDFdef2) for specifying the PDF linear combinations. + +! Descritption of used generator code. Include also citations here! +! Embrace each single line in quotation marks. +CodeDescription { + "ttbar cross section @ NNLO" + "M. Guzzi, S. Moch" + "to be published" +} +! -------------------------------------------------------------- ! + + + + +! -------------------------------------------------------------- ! +! Variables which are obtained and superseeded from NLOJET++, but may be +! useful for other generators. +! -------------------------------------------------------------- ! + +! ------------------------------- +! Center of mass energy +CenterOfMassEnergy 7000 + +! ------------------------------- +! Order of alpha_s of the leading-order process (is obtained from nlojet) +LeadingOrder 2 + +! ------------------------------- +! Order of alpha_s of the calculation (should be superseeded with value from generator) +OrderInAlphasOfCalculation 4 + +! ------------------------------- +! Specify filename of output fastNLO table +OutputFilename testttbar001.tab + +! -------------------------------------------------------------- ! + + + + + + +! -------------------------------------------------------------- ! +! Choose interpolation kernel and distance measure +! +! Currently implemented interpolation kernels +! - CatmulRom +! +! Currently implemented distance measures +! - linear +! - loglog025 eq. to (log(log(4*x))) +! - log10 +! - sqrtlog10 eq. to sqrt(log_10(x)) +! -------------------------------------------------------------- ! +X_Kernel "CatmulRom" +X_DistanceMeasure "sqrtlog10" +X_NNodes 6 +X_NoOfNodesPerMagnitude true + +Mu1_Kernel "CatmulRom" +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 5 + +Mu2_Kernel "CatmulRom" +Mu2_DistanceMeasure linear +Mu2_NNodes 4 + + + + + +! -------------------------------------------------------------- ! +! +! Scenario specific variables +! +! -------------------------------------------------------------- ! + + +! ------------------------------- +! Unit in barns of the publication +! (negative power of 10) +! pb: 12 +! fb: 15 +! ------------------------------- +PublicationUnits 12 + + + + +! ------------------------------- +! Description of scenario +! (Write each line of description in quotation marks) +! ------------------------------- +ScenarioName fnlttbar100 + +ScenarioDescription { +"Test scenario for first implementation of" +"ttbar cross section up to NNLO." +"Double-differential bin integrated cross sections." +"generator by Marco Guzzi" +"fastNLO by Daniel Britzger" +} + + + +! ------------------------------- +! Specify if binning is read from this file +! ------------------------------- +ReadBinningFromSteering true + + +! ------------------------------- +! How many differential dimensions +! are measured. +! Number must be consistent with DimensionLabels, and DimensionIsDifferential, ... +! - 1: read in 'SingleDiffBinning' +! - 2: read in 'DoubleDifferentialBinning' +! - 3: read in 'TripleDifferentialBinning' +! ------------------------------- +DifferentialDimension 2 + + +! ------------------------------- +! Labels for the measurement dimension +! ------------------------------- +DimensionLabels { +"y" +"p_T" +} + +! If flexible-scale table: specify name of the variable of the two scales. +! If standard table is demanded, only 'ScaleDescriptionScale1' is required. +ScaleDescriptionScale1 "p_T" +ScaleDescriptionScale2 "y" + + +! -------------------------------- +! Binning +! - - - - - - - - - - - - - - - - +! Use either 'SingleDiffBinning' or +! 'DoubleDifferentialBinning' according to +! specification of 'DifferentialDimension' +! (Triple-differential, and non-differential measurements not yet implemented) +! -------------------------------- + +! Example !! +SingleDiffBinning { + 7 11 18 30 50 100 +} + +! +! '1stDimUp' is not being used for truly differential cross sections +! +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension ----" + 0 0 0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 + 1 1.0 0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 + 2.0 2.0 0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 + 3.0 3.0 0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 + 4.0 4.0 0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 +}} + + +! ------------------------------- +! Is this a differential measurement in dimension X? +! Specify flag for each dimension. +! - 0: NO +! - 1: YES +! - 2: Divide Cross Section by bin width of that dimension +! ------------------------------- +DimensionIsDifferential { + 1 1 +} + + +! -------------------------------- +! Calculate bin width from lower and upper bin boundary +! - if 'false': +! specify a table of the width of every bin: +! BinWidth { x1 x2 x3 ... } +! - if 'true': +! Specify a multiplicative factor for bin width (useful for |y|-measurements) +! +! If the measurement is not divided by the bin width, then specify +! 'CalculateBinWidth true' and use 'DimensionIsDifferential' equal '0' for each dimension. +! -------------------------------- + +CalculateBinWidth true +BinWidthFactor 1. + + + +! ----------------------------------------------------------! +! Include automatically generated warm-up +! by convention it must be: +! <steerfile>_<ScenarioName>_warmup.txt +! with +! - <steerfile> name if this file, without .str and .steer +! - <ScenarioName> as given above +! +! If no Warmup file found, fastNLO seeks for warmup file +! by itsself. +! It is also possible to copy the warmup values directly +! into this file (in order to keep information together). +! +! Ignore 'error' message from 'read_steer'. +! ----------------------------------------------------------! +#include:fnlttbar100_${ScenarioName}_warmup.txt + + + diff --git a/v2.6/generators/nlojet++/.gitignore b/v2.6/generators/nlojet++/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..1397c5e02c93a2d8047c8f693e803aa9707200cd --- /dev/null +++ b/v2.6/generators/nlojet++/.gitignore @@ -0,0 +1,29 @@ +# Files to be usually ignored in projects managed with autotools +INSTALL +GITREV +compile +config.guess +config.h +config.h.in +config.log +config.status +config.sub +configure +depcomp +install-sh +libtool +ltmain.sh +missing +py-compile +stamp-h1 +test-driver +Makefile +doc/doxygen +# These m4 macros normally should be reinstalled from the development machine +# using autoreconf -i +aclocal.m4 +m4/libtool.m4 +m4/ltoptions.m4 +m4/ltsugar.m4 +m4/ltversion.m4 +m4/lt~obsolete.m4 diff --git a/v2.6/generators/nlojet++/AUTHORS b/v2.6/generators/nlojet++/AUTHORS new file mode 120000 index 0000000000000000000000000000000000000000..dee1493ed62324fb1f97f8bbb969a3cb8cfca1cf --- /dev/null +++ b/v2.6/generators/nlojet++/AUTHORS @@ -0,0 +1 @@ +../../toolkit/AUTHORS \ No newline at end of file diff --git a/v2.6/generators/nlojet++/COPYING b/v2.6/generators/nlojet++/COPYING new file mode 120000 index 0000000000000000000000000000000000000000..ddef0b012dd7ea137c64a1dc090ea7698e9551d8 --- /dev/null +++ b/v2.6/generators/nlojet++/COPYING @@ -0,0 +1 @@ +../../toolkit/COPYING \ No newline at end of file diff --git a/v2.6/generators/nlojet++/ChangeLog b/v2.6/generators/nlojet++/ChangeLog new file mode 100644 index 0000000000000000000000000000000000000000..629b6a9af3a8bc7b6be9fafd3a6dccf309ed5192 --- /dev/null +++ b/v2.6/generators/nlojet++/ChangeLog @@ -0,0 +1,1456 @@ +2024-06-12 Public release of fastNLO interface to NLOJet++ package version 2.5.1, tag 3030 + =============================================================================== + +2024-06-12 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + Update NEWS, ChangeLog + + 2024-06-12 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.5/generators/nlojet++/configure.ac: Require full C++17 + functionality also for nlojet++ interface + + +2023-07-12 Release of fastNLO interface to NLOJet++ package version 2.5.1, tag 2888 + ======================================================================== + +2023-07-12 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.5/generators/nlojet++/ChangeLog, + v2.5/generators/nlojet++/NEWS, + v2.5/generators/nlojet++/configure.ac: Nlojet++ interface version + 2.5.1; update NEWS and CL + +2023-07-12 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.5/generators/nlojet++/configure.ac, + v2.5/generators/nlojet++/interface/check/Makefile.am: For makefile + portability remove commands from Makefile.am and use AC_SUBST + variables from configure.ac instead + +2023-07-12 JohannesGaessler <johannesg@5d6.de> + + * v2.5/generators/nlojet++/interface/check/Makefile.am, + v2.5/generators/nlojet++/interface/check/fnlo-compare-tables.py, + v2.5/generators/nlojet++/interface/check/fnlo-nj-lotest.pl.in, + v2.5/generators/nlojet++/interface/check/fnlo-nj-nlotest.pl.in, + v2.5/generators/nlojet++/interface/{check/input => + data/check}/InclusiveNJets_InclusiveJets_fix.wrm, + v2.5/generators/nlojet++/interface/{check/input => + data/check}/InclusiveNJets_InclusiveJets_flex.wrm, + v2.5/generators/nlojet++/interface/data/check/Makefile.am, + v2.5/generators/nlojet++/interface/{ => + data}/check/compare-table-helper.py, + v2.5/generators/nlojet++/interface/{check/input => + data/check}/fix_NodeDensity.str, + v2.5/generators/nlojet++/interface/{check/input => + data/check}/fix_NodesPerBin.str, + v2.5/generators/nlojet++/interface/{check/input => + data/check}/flex_NodeDensity.str, + v2.5/generators/nlojet++/interface/{check/input => + data/check}/flex_NodesPerBin.str: Fixed NLOJet++ distcheck paths + +2023-07-11 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.5/generators/nlojet++/README + inconsistency; drop all LHAPDF5 stuff; by default no doxygen use + +2023-07-11 JohannesGaessler <johannesg@5d6.de> + + * v2.5/generators/nlojet++/interface/check/compare-table-helper.py, + v2.5/generators/nlojet++/interface/check/fnlo-compare-tables.py, + v2.5/generators/nlojet++/interface/check/fnlo-nj-lotest.pl.in, + v2.5/generators/nlojet++/interface/check/fnlo-nj-nlotest.pl.in: Skip + nlojet++ checks if no Python extension + +2023-07-11 JohannesGaessler <johannesg@5d6.de> + + * v2.5/generators/nlojet++/interface/check/Makefile.am, + v2.5/generators/nlojet++/interface/check/fnlo-compare-tables.py, + v2.5/generators/nlojet++/interface/check/{ => + input}/InclusiveNJets_InclusiveJets_fix.wrm, + v2.5/generators/nlojet++/interface/check/{ => + input}/InclusiveNJets_InclusiveJets_flex.wrm, + v2.5/generators/nlojet++/interface/check/{ => + input}/fix_NodeDensity.str, + v2.5/generators/nlojet++/interface/check/{ => + input}/fix_NodesPerBin.str, + v2.5/generators/nlojet++/interface/check/{ => + input}/flex_NodeDensity.str, + v2.5/generators/nlojet++/interface/check/{ => + input}/flex_NodesPerBin.str: Fixed nlojet++ make check PYTHONPATH, + make clean + +2023-07-10 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * : Merge bin_density into master + +2023-07-02 JohannesGaessler <johannesg@5d6.de> + + * test/.gitignore, test/InclusiveNJets_InclusiveJets_fix.wrm, + test/InclusiveNJets_InclusiveJets_flex.wrm, test/compare_tables.py, + test/fix_NodeDensity.str, test/fix_NodesPerBin.str, + test/flex_NodeDensity.str, test/flex_NodesPerBin.str: Added + NodesPerBin <-> BinDensity test files + +2023-02-12 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.5/generators/nlojet++/ChangeLog, v2.5/generators/nlojet++/NEWS: + Updated ChangeLog and NEWS + +2023-02-12 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.5/generators/nlojet++/mygitcl: Add command for updating + ChangeLog + +2023-02-12 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.5/generators/nlojet++/mygitcl: Add command for updating + ChangeLog + +2023-02-10 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.5/generators/nlojet++/interface/hadron/Makefile.am: Comment out + work-in-progress version (new) + +2023-02-10 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.5/generators/nlojet++/interface/hadron/InclusiveNJetDiffs.cc, + v2.5/generators/nlojet++/interface/hadron/InclusiveNJetEvents.cc, + v2.5/generators/nlojet++/interface/hadron/InclusiveNJetPairs.cc, + v2.5/generators/nlojet++/interface/hadron/InclusiveNJets.cc, + v2.5/generators/nlojet++/interface/hadron/InclusiveNJets_new.cc: + Implementation of HT_parton as scale + +2023-02-10 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.5/generators/nlojet++/configure.ac, + v2.5/generators/nlojet++/m4/ax_check_zlib.m4, + v2.5/generators/nlojet++/m4/ax_cxx_compile_stdcxx.m4, + v2.5/generators/nlojet++/m4/libtool.m4, + v2.5/generators/nlojet++/m4/ltoptions.m4, + v2.5/generators/nlojet++/m4/ltversion.m4: autotools update + +2022-07-21 Release of fastNLO interface to NLOJet++, package version 2.5.0, revision 2845 + ============================================================================== + +2022-07-21 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.5/generators/nlojet++/Makefile.am, + v2.5/generators/nlojet++/configure.ac, + v2.5/generators/nlojet++/m4/libtool.m4, + v2.5/generators/nlojet++/m4/ltoptions.m4, + v2.5/generators/nlojet++/m4/ltsugar.m4, + v2.5/generators/nlojet++/m4/ltversion.m4, + v2.5/generators/nlojet++/m4/lt~obsolete.m4, + +2021-05-26 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + Version cleanup ... + +2021-05-26 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + Version cleanup ... + +2021-05-26 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.3/generators/nlojet++/configure.ac + +2021-05-10 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * : Merge in development from master + +2020-09-07 Prerelease of fastNLO interface to NLOJet++, package version 2.3.1pre, revision 2771 + ==================================================================================== + +2020-09-07 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * + v2.3/generators/nlojet++/interface/include/fnlo_int_nlojet/fnlo_int + _hhc_nlojet.h, + v2.3/generators/nlojet++/interface/tools/fnlo_int_hhc_nlojet.cc + +2019-03-08 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * + v2.0/generators/nlojet++/interface/data/InclusiveNJetDiffs/fnl2342e + -2332e_I1298810_v23_fix.str, + v2.0/generators/nlojet++/interface/data/InclusiveNJetDiffs/fnl2342e + -2332e_y0_I1298810_v23_fix.str, + v2.0/generators/nlojet++/interface/hadron/InclusiveNJetDiffs.cc: Add + choice of min,ave,max to x sect difference scenario; impact very + small + +2019-02-03 Prerelease of fastNLO interface to NLOJet++, package version 2.3.1pre, revision 2657 + ==================================================================================== + +2019-02-03 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/generators/nlojet++/configure.ac: Fix some autotools issues + +2019-02-01 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/generators/nlojet++/interface/check/InclusiveNJets.str, + v2.0/generators/nlojet++/interface/check/InclusiveNJets_fnr0001midp + HT_I723509_v23_fix_warmup.txt, + v2.0/generators/nlojet++/interface/check/fnlo-nj-lotest.pl.in, + v2.0/generators/nlojet++/interface/check/fnlo-nj-nlotest.pl.in, + v2.0/generators/nlojet++/interface/check/fnr0001midpHT_I723509_v23_ + fix.str, v2.0/generators/nlojet++/interface/{ => + data}/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix.wrm, + v2.0/generators/nlojet++/interface/data/check/InclusiveNJets_fnr000 + 1midpHT_I723509_v23_fix_warmup.txt, + v2.0/generators/nlojet++/interface/data/check/warmup.txt: Check + cleanup in nlojet++ interface + +2019-02-01 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/generators/nlojet++/m4/ax_check_zlib.m4, + v2.0/generators/nlojet++/m4/ax_cxx_compile_stdcxx.m4, + v2.0/generators/nlojet++/m4/ax_cxx_compile_stdcxx_11.m4, + v2.0/generators/nlojet++/m4/ax_require_defined.m4: Add new CRunDec3; add fscheme; + some more adaptations to as evolution interface + +2019-01-31 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/generators/nlojet++/interface/hadron/InclusiveNJetDiffs.cc, + v2.0/generators/nlojet++/interface/jetalgos/fastjet-jets.cc, + v2.0/generators/nlojet++/interface/jetalgos/fj-jets.cc: Bugfix in + delta sigma scenarion + + 2019-01-31 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * + v2.0/generators/nlojet++/interface/data/InclusiveNJetDiffs/fnl2342e + -2332e_y0_I1298810_v23_fix.str: Reduced steering file + +2019-01-30 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/generators/nlojet++/interface/hadron/InclusiveNJetDiffs.cc: + Propagate weight for x section diffs; TODO decide which version + +2019-01-30 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * + v2.0/generators/nlojet++/interface/data/InclusiveNJetDiffs/Makefile + .am: Fixes to NLOJet++ cross section diff scenario for Suman + +2019-01-30 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/generators/nlojet++/configure.ac, + v2.0/generators/nlojet++/interface/data/InclusiveNJetDiffs/fnl2342e + -2332e_I1298810_v23_fix.str, + v2.0/generators/nlojet++/interface/data/Makefile.am, + v2.0/generators/nlojet++/interface/hadron/InclusiveNJetDiffs.cc: + Fixes to NLOJet++ cross section diff scenario for Suman + +2019-01-21 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/generators/nlojet++/interface/check/InclusiveNJets.str, + v2.0/generators/nlojet++/interface/check/InclusiveNJets_fnr0001midp + HT_I723509_v23_fix.wrm, + v2.0/generators/nlojet++/interface/check/InclusiveNJets_fnr0001midp + HT_I723509_v23_fix_warmup.txt, + v2.0/generators/nlojet++/interface/check/fnr0001midpHT_I723509_v23_ + fix.str, v2.0/generators/nlojet++/interface/data/Makefile.am: + Additions to NLOJet++ interface + +2019-01-16 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/generators/nlojet++/interface/hadron/InclusiveNJetPairs.cc: + Add lunique switch for jet pairs loop of Panos + +2018-11-26 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * + v2.0/generators/nlojet++/interface/data/InclusiveNJetDiffs/fnl2342e + -2332e_I1298810_v23_fix.str, + v2.0/generators/nlojet++/interface/hadron/InclusiveNJetDiffs.cc: Add + test scenario to calculate x section differences as needed for + radius ratio etc.; only for fix-scale tables for now + +2018-11-26 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/generators/nlojet++/interface/check/Makefile.am, + v2.0/generators/nlojet++/interface/check/fnlo-nj-wrmtest.pl.in, + v2.0/generators/nlojet++/interface/hadron/InclusiveNJetEvents.cc, + v2.0/generators/nlojet++/interface/hadron/InclusiveNJetPairs.cc, + v2.0/generators/nlojet++/interface/hadron/InclusiveNJets.cc: Update + NLOJet++ interface for some changes in toolkit + +2018-03-24 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/generators/nlojet++/configure.ac: SVNREV --> GITREV + +2018-03-24 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/generators/nlojet++/interface/hadron/fastNLOjetpp.cc: SVNREV --> GITREV + +2018-03-24 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/generators/nlojet++/interface/data/.gitignore: More + gitignores + +2018-03-23 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/generators/nlojet++/interface/check/.gitignore: Updated + gitignore settings + +2018-03-23 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/.gitignore, v2.0/generators/nlojet++/.gitignore: Updated gitignore settings + +2018-01-30 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/generators/nlojet++/Makefile.am, + v2.0/generators/nlojet++/configure.ac, v2.0/toolkit/Makefile.am: + Same git adaptations for NLOJet++ interface + +2017-11-14 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * tools/fnlo-run-nlojet.pl, + v2.0/generators/nlojet++/interface/data/dev/fnl5332h_v23_fix.str, + v2.0/generators/nlojet++/interface/data/dev/fnl5362h_v23_fix.str: + Prepare NLOJet++ calcs for Nemo git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2426 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2017-11-07 Prerelease of fastNLO interface to NLOJet++, package version 2.3.1pre, revision 2424 + ==================================================================================== + +2017-11-07 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/generators/nlojet++/interface/check/fnlo-nj-lotest.pl.in, + v2.0/generators/nlojet++/interface/check/fnlo-nj-nlotest.pl.in, + v2.0/generators/nlojet++/interface/check/fnlo-nj-wrmtest.pl.in, + v2.0/generators/nlojet++/interface/data/check/{fnr0001midpHT_I72350 + 9_v23_fix_InclusiveNJets_warmup.txt => + InclusiveNJets_fnr0001midpHT_I723509_v23_fix_warmup.txt}: Fix make + check for NLOJet++ interface git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2424 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2017-11-07 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/generators/nlojet++/interface/data/check/warmup.txt: Fix link git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2423 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2017-11-07 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/generators/nlojet++/interface/data/check/warmup.txt: Fix link git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2422 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2017-11-07 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * + v2.0/generators/nlojet++/interface/data/InclusiveJets/fnl5332g_v23_ + I1459051_fix.str, + v2.0/generators/nlojet++/interface/data/InclusiveJets/fnl5362g_v23_ + I1459051_fix.str, + v2.0/generators/nlojet++/interface/data/dev/fnl5332h_v23_fix.str, + v2.0/generators/nlojet++/interface/data/dev/fnl5362h_v23_fix.str, + v2.0/generators/nlojet++/interface/hadron/InclusiveNJetPairs.cc: + Scenario update for nlojet++ git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2419 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2017-08-17 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * + v2.0/generators/nlojet++/interface/data/RivetAdditions/CMS_2016_I14 + 59051.info, + v2.0/generators/nlojet++/interface/data/RivetAdditions/CMS_2016_I14 + 59051.plot, + v2.0/generators/nlojet++/interface/data/RivetAdditions/CMS_2016_I14 + 59051.yoda: Remove Rivet files now in standard release git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2412 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2017-08-15 Prerelease of fastNLO interface to NLOJet++, package version 2.3.1pre, revision 2411 + ======================================================================================== + +2017-08-15 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/generators/nlojet++/interface/check/fnlo-nj-lotest.pl.in, + v2.0/generators/nlojet++/interface/check/fnlo-nj-nlotest.pl.in, + v2.0/generators/nlojet++/interface/data/check/fnr0001midpHT_I723509 + _v23_fix_InclusiveNJets_warmup.txt: Update checks for newer toolkit + version git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2411 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2017-08-15 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/generators/nlojet++/Makefile.am: Deal with m4 macro issues git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2410 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2017-08-15 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/generators/nlojet++/m4/ax_check_zlib.m4, + v2.0/generators/nlojet++/m4/ax_cxx_compile_stdcxx.m4, + v2.0/generators/nlojet++/m4/ax_cxx_compile_stdcxx_11.m4, + v2.0/generators/nlojet++/m4/ax_prog_doxygen.m4, + v2.0/generators/nlojet++/m4/ax_python_devel.m4, + v2.0/generators/nlojet++/m4/ax_require_defined.m4, + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2409 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2017-06-27 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/generators/nlojet++/configure.ac, + v2.0/generators/nlojet++/interface/data/dev/fnl5932numa_v23_fix.str + , v2.0/generators/nlojet++/interface/hadron/InclusiveNJetPairs.cc, + v2.0/generators/nlojet++/interface/hadron/Makefile.am: Add new test + calc git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2405 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2017-03-07 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * + v2.0/generators/nlojet++/interface/data/RivetAdditions/CMS_2015_I14 + 10826.info, + v2.0/generators/nlojet++/interface/data/RivetAdditions/CMS_2015_I14 + 10826.plot, + v2.0/generators/nlojet++/interface/data/RivetAdditions/CMS_2015_I14 + 10826.yoda, + v2.0/generators/nlojet++/interface/data/RivetAdditions/CMS_2016_I14 + 59051.info, + v2.0/generators/nlojet++/interface/data/RivetAdditions/CMS_2016_I14 + 59051.plot, + v2.0/generators/nlojet++/interface/data/RivetAdditions/CMS_2016_I14 + 59051.yoda, + v2.0/generators/nlojet++/interface/data/RivetAdditions/CMS_2017_I14 + 87277.info, + v2.0/generators/nlojet++/interface/data/RivetAdditions/CMS_2017_I14 + 87277.plot, + v2.0/generators/nlojet++/interface/data/RivetAdditions/CMS_2017_I14 + 87277.yoda: Add my prel. Rivet files for data-table comparisons git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2384 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2016-12-23 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/generators/nlojet++/interface/hadron/InclusiveNJets.cc: Add + OutputCompression to InclusiveNJets.cc; todo for events git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2349 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2016-12-23 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/generators/nlojet++/interface/data/README: Don't forget to do + some steering updates for NLOJet++ git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2348 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2016-10-24 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/generators/nlojet++/Makefile.am, + v2.0/generators/nlojet++/configure.ac, + v2.0/generators/nlojet++/interface/check/Makefile.am, + v2.0/generators/nlojet++/interface/check/{fnlo-nj-lotest.pl => + fnlo-nj-lotest.pl.in}, + v2.0/generators/nlojet++/interface/check/{fnlo-nj-nlotest.pl => + fnlo-nj-nlotest.pl.in}, + v2.0/generators/nlojet++/interface/check/{fnlo-nj-wrmtest.pl => + fnlo-nj-wrmtest.pl.in}, + v2.0/generators/nlojet++/interface/data/check/Makefile.am, + v2.0/generators/nlojet++/interface/data/check/born.tab.gz, + v2.0/generators/nlojet++/interface/data/check/nlo.tab.gz, + v2.0/generators/nlojet++/interface/data/check/{fnr0001midpHT_I72350 + 9_v23_fix.str => steer.str}, + v2.0/generators/nlojet++/interface/data/check/warmup.txt: Finished + check setup for NLOJet++ interface; supports VPATH builds, i.e. also + make distcheck git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2296 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2016-10-23 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/generators/nlojet++/interface/check/Makefile.am, + v2.0/generators/nlojet++/interface/check/fnlo-nj-lotest.pl, + v2.0/generators/nlojet++/interface/check/fnlo-nj-nlotest.pl: Fixes + in perl scripts git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2295 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2016-10-23 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/generators/nlojet++/configure.ac, + v2.0/generators/nlojet++/interface/Makefile.am, + v2.0/generators/nlojet++/interface/check/Makefile.am, + v2.0/generators/nlojet++/interface/check/fnlo-nj-lotest.pl, + v2.0/generators/nlojet++/interface/check/fnlo-nj-nlotest.pl, + v2.0/generators/nlojet++/interface/check/fnlo-nj-wrmtest.pl, + v2.0/generators/nlojet++/interface/data/Makefile.am, + v2.0/generators/nlojet++/interface/data/check/Makefile.am, + v2.0/generators/nlojet++/interface/data/check/fnr0001midpHT_I723509 + _v23_fix.str, + v2.0/generators/nlojet++/interface/data/check/fnr0001midpHT_I723509 + _v23_fix_InclusiveNJets_warmup.txt: Add table production checks to + NLOJet++ interface git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2294 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2016-10-13 Prerelease of fastNLO interface to NLOJet++, package version 2.3.1pre, revision 2272 + ==================================================================================== + +2016-10-11 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/generators/nlojet++/interface/hadron/InclusiveNJetEvents.cc, + v2.0/generators/nlojet++/interface/hadron/InclusiveNJets.cc, + v2.0/generators/nlojet++/interface/tools/fnlo_int_hhc_nlojet.cc: Fix + issue with steering and Gen/ProcConsts changes in Nlojet++ interface git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2271 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2016-09-20 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/generators/nlojet++/interface/data/dev/fnl5662ia_v23_fix.str: + Add test scenario for later concatenation git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2246 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2015-10-21 Georg Sieber <georg.sieber@cern.ch> + + * + v2.0/generators/nlojet++/interface/data/dev/fnl_triplediffjets.str: + steering for 3d jet measurement. git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2196 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2015-10-06 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * + v2.0/generators/sherpa/ATLAS_2012_I1082936/MCgrid_ATLAS_2012_I10829 + 36.str, v2.0/generators/sherpa/ATLAS_2012_I1082936/Makefile, + v2.0/generators/sherpa/ATLAS_2012_I1082936/Run_prod.dat, + v2.0/generators/sherpa/ATLAS_2012_I1082936/analysis/MCgrid_ATLAS_20 + 12_I1082936.cc, + v2.0/generators/sherpa/ATLAS_2012_I1082936/analysis/MCgrid_ATLAS_20 + 12_I1082936.cc.orig, + v2.0/generators/sherpa/ATLAS_2012_I1082936/analysis/MCgrid_ATLAS_20 + 12_I1082936.info, + v2.0/generators/sherpa/ATLAS_2012_I1082936/analysis/MCgrid_ATLAS_20 + 12_I1082936.plot, + v2.0/generators/sherpa/ATLAS_2012_I1082936/analysis/MCgrid_ATLAS_20 + 12_I1082936.yoda, + v2.0/generators/sherpa/ATLAS_2012_I1082936/analysis/templates/MCgri + d_ATLAS_2012_I1082936.cc, + v2.0/generators/sherpa/ATLAS_2012_I1082936/analysis/templates/MCgri + d_ATLAS_2012_I1082936.info, + v2.0/generators/sherpa/ATLAS_2012_I1082936/analysis/templates/MCgri + d_ATLAS_2012_I1082936.plot, + v2.0/generators/sherpa/ATLAS_2012_I1082936/analysis/templates/MCgri + d_ATLAS_2012_I1082936.yoda, + v2.0/generators/sherpa/ATLAS_2012_I1082936/basic.str, + v2.0/generators/sherpa/ATLAS_2012_I1082936/mcgrid/MCgrid_ATLAS_2012 + _I1082936/phasespace/d04-x01-y01.txt, + v2.0/generators/sherpa/ATLAS_2012_I1082936/mcgrid/basic.str.evtcoun + t, v2.0/generators/sherpa/ATLAS_2012_I1082936/run_steps.csh: Add + working example with mcgrid + sherpa git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2189 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2015-09-18 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/generators/nlojet++/interface/hadron/fastNLOjetpp.cc: Fix + some missing std:: in nlojet++ interface git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2177 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2015-08-20 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * + v2.0/generators/nlojet++/interface/data/dev/fnl3732denhta_v23_fix.s + tr, + v2.0/generators/nlojet++/interface/data/dev/fnl3732numhta_v23_fix.s + tr: Updated devel scenarios git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2138 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2015-07-14 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/generators/nlojet++/interface/data/dev/fnl5332g_v23_fix.str, + v2.0/generators/nlojet++/interface/data/dev/fnl5362g_v23_fix.str: + Remove empty bins git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2131 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2015-07-14 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/generators/nlojet++/interface/data/dev/fnl5332g_v23_fix.str, + v2.0/generators/nlojet++/interface/data/dev/fnl5362g_v23_fix.str: + new dev scenarios git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2130 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2015-07-12 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * + v2.0/generators/nlojet++/interface/data/Examples/InclusiveJets_Upda + tedDescription_v23_fix.str, + v2.0/generators/nlojet++/interface/data/Test/fnl2342b_mu2_v23_fix.s + tr: Respect min. number git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2129 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2015-07-11 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * + v2.0/generators/nlojet++/interface/data/Test/fnl2342b_2mu_v23_fix.s + tr, + v2.0/generators/nlojet++/interface/data/Test/fnl2342b_2x_v23_fix.st + r, + v2.0/generators/nlojet++/interface/data/Test/fnl2342b_mu2_v23_fix.s + tr, + v2.0/generators/nlojet++/interface/data/Test/fnl2342b_x2_v23_fix.st + r, + v2.0/generators/nlojet++/interface/data/Test/fnl2342b_xcm_v23_fix.s + tr, + v2.0/generators/nlojet++/interface/data/Test/fnl2342b_xl10_v23_fix. + str, + v2.0/generators/nlojet++/interface/data/Test/fnl2342b_xlin_v23_fix. + str, + v2.0/generators/nlojet++/interface/data/Test/fnl2342b_xll25_v23_fix + .str, + v2.0/generators/nlojet++/interface/data/Test/fnl2342b_xln_v23_fix.s + tr, + v2.0/generators/nlojet++/interface/data/Test/fnl2342b_xon_v23_fix.s + tr, + v2.0/generators/nlojet++/interface/data/Test/fnl2342b_xsl10_v23_fix + .str: Add series of tests for fnlo paper git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2128 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2015-07-10 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * + v2.0/generators/nlojet++/interface/data/dev/fnl3732denht_v23_fix.st + r, + v2.0/generators/nlojet++/interface/data/dev/fnl3732numht_v23_fix.st + r: Dev scenarios git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2127 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2015-06-03 Prerelease of fastNLO interface to NLOJet++, package version 2.3.1pre, revision 2125 + ==================================================================================== + +2015-06-03 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/generators/nlojet++/interface/tools/fnlo_int_hhc_nlojet.cc: + Some comment lines added where nan and inf from NLOjet++ passed + through. git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2123 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2015-06-01 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/generators/nlojet++/interface/data/dev/fnl5332f_v23_fix.str: + Devel scen git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2119 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2015-06-01 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/generators/nlojet++/interface/data/dev/fnl5332f_v23_fix.str: + Devel scenario git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2118 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2015-05-31 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/generators/nlojet++/interface/data/dev/fnl5662i_v23_fix.str, + v2.0/generators/nlojet++/interface/data/dev/fnl5672i_v23_fix.str: + devel scenario git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2117 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2015-05-31 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * + v2.0/generators/nlojet++/interface/data/dev/fnl2522adiff_v23_fix.st + r, v2.0/generators/nlojet++/interface/data/dev/fnl5622i_v23_fix.str: + devel scenario git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2116 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2015-05-31 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/generators/nlojet++/interface/data/dev/fnl3232e_v23_fix.str: + devel scenario git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2115 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2015-05-30 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * + v2.0/generators/nlojet++/interface/data/dev/fnl3732dena_v23_fix.str + , + v2.0/generators/nlojet++/interface/data/dev/fnl3732numa_v23_fix.str: + Devel scenarios git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2114 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2015-05-22 Georg Sieber <georg.sieber@cern.ch> + + * v2.0/generators/nlojet++/interface/hadron/InclusiveNJetEvents.cc: + additional observables for triple diff tables. git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2112 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2015-05-12 Prerelease of fastNLO interface to NLOJet++, package version 2.3.1pre, revision 2111 + ==================================================================================== + +2015-05-12 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/generators/nlojet++/interface/data/Makefile.am: Fix subdir + vars in Makefile.am git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2111 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2015-05-12 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/generators/nlojet++/interface/hadron/InclusiveNJetEvents.cc: + Work on info/debug output; fix bug with central jet pT3 cut + affecting new dijet angular git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2110 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2015-05-12 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/generators/nlojet++/interface/hadron/InclusiveNJets.cc: Work + on info/debug output git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2109 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2015-05-12 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/generators/nlojet++/interface/hadron/InclusiveNJetEvents.cc: + Work on info/debug output git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2108 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2015-05-11 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/generators/nlojet++/interface/hadron/InclusiveNJetEvents.cc: + Add more observables & scales; add debug|info output git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2098 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2015-05-11 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * + v2.0/generators/nlojet++/interface/data/AzimuthalDecorrelation/Make + file.am, + v2.0/generators/nlojet++/interface/data/AzimuthalDecorrelation/fnl2 + 522diffb_I885663_v23_fix.str, + v2.0/generators/nlojet++/interface/data/AzimuthalDecorrelation/fnl2 + 522normb_I885663_v23_fix.str, + v2.0/generators/nlojet++/interface/data/DijetAngular/fnl2622f_I1090 + 423_v23_fix.str, + v2.0/generators/nlojet++/interface/data/DijetAngular/fnl2622f_I1090 + 423_v23_flex.str, + v2.0/generators/nlojet++/interface/data/DijetMass/fnl2412c_I895742_ + v23_fix.str, + v2.0/generators/nlojet++/interface/data/DijetMass/fnl2412c_I895742_ + v23_flex.str, + v2.0/generators/nlojet++/interface/data/DijetMass/fnl2412e_I1208923 + _v23_fix.str, + v2.0/generators/nlojet++/interface/data/DijetMass/fnl2412e_I1208923 + _v23_flex.str, + v2.0/generators/nlojet++/interface/data/DijetMass/fnl2452_I1082936_ + v23_fix.str, + v2.0/generators/nlojet++/interface/data/DijetMass/fnl2452_I1082936_ + v23_fix_ptmax.str, + v2.0/generators/nlojet++/interface/data/DijetMass/fnl2452_I1082936_ + v23_fix_ptmaxexpystar.str, + v2.0/generators/nlojet++/interface/data/DijetMass/fnl2452_I1082936_ + v23_flex_ptmaxexpystar.str, + v2.0/generators/nlojet++/interface/data/DijetMass/fnl2452b_I1268975 + _v23_fix.str, + v2.0/generators/nlojet++/interface/data/DijetMass/fnl2452b_I1268975 + _v23_fix_ptmax.str, + v2.0/generators/nlojet++/interface/data/DijetMass/fnl2452b_I1268975 + _v23_fix_ptmaxexpystar.str, + v2.0/generators/nlojet++/interface/data/DijetMass/fnl2452b_I1268975 + _v23_flex_ptmaxexpystar.str, + v2.0/generators/nlojet++/interface/data/DijetMass/fnl2462_I1082936_ + v23_fix.str, + v2.0/generators/nlojet++/interface/data/DijetMass/fnl2462_I1082936_ + v23_flex_ptmaxexpystar.str, + v2.0/generators/nlojet++/interface/data/DijetMass/fnl2462b_I1268975 + _v23_fix.str, + v2.0/generators/nlojet++/interface/data/DijetMass/fnl2462b_I1268975 + _v23_flex_ptmaxexpystar.str, + v2.0/generators/nlojet++/interface/data/Examples/DijetMass_Example_ + v23_fix.str, + v2.0/generators/nlojet++/interface/data/Examples/InclusiveJets_Exam + ple_v23_fix.str, + v2.0/generators/nlojet++/interface/data/InclusiveJets/fnl2332e_I129 + 8810_v23_fix.str, + v2.0/generators/nlojet++/interface/data/InclusiveJets/fnl2342b_I902 + 309_v23_fix.str, + v2.0/generators/nlojet++/interface/data/InclusiveJets/fnl2342b_I902 + 309_v23_flex.str, + v2.0/generators/nlojet++/interface/data/InclusiveJets/fnl2342e_I129 + 8810_v23_fix.str, + v2.0/generators/nlojet++/interface/data/InclusiveJets/fnl2352_I1082 + 936_v23_fix.str, + v2.0/generators/nlojet++/interface/data/InclusiveJets/fnl2352b_I132 + 5553_v23_fix.str, + v2.0/generators/nlojet++/interface/data/InclusiveJets/fnl2362_I1082 + 936_v23_fix.str, + v2.0/generators/nlojet++/interface/data/InclusiveJets/fnl2362b_I132 + 5553_v23_fix.str, + v2.0/generators/nlojet++/interface/data/InclusiveJets/fnl4352_I1228 + 693_v23_fix.str, + v2.0/generators/nlojet++/interface/data/InclusiveJets/fnl4362_I1228 + 693_v23_fix.str, + v2.0/generators/nlojet++/interface/data/InclusiveJets/fnr0001midpHT + _I723509_v23_fix.str, + v2.0/generators/nlojet++/interface/data/InclusiveJets/fnr0001midpMB + _I723509_v23_fix.str, + v2.0/generators/nlojet++/interface/data/InclusiveJets/fnt2004_I7433 + 42_v23_fix.str, + v2.0/generators/nlojet++/interface/data/InclusiveJets/fnt2007midp_I + 790693_v23_fix.str, + v2.0/generators/nlojet++/interface/data/InclusiveJets/fnt2009midp_I + 779574_v23_fix.str, + v2.0/generators/nlojet++/interface/data/InclusiveNJetEvents/fnl2732 + dena_I1230937_v23_fix.str, + v2.0/generators/nlojet++/interface/data/InclusiveNJetEvents/fnl2732 + numa_I1230937_v23_fix.str, + v2.0/generators/nlojet++/interface/data/Makefile.am: Add option to + avoid warmup binning check; useful for bin borders in pi etc; add + test setups for azim.dec, dijet angular git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2097 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2015-05-06 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/generators/nlojet++/configure.ac, + v2.0/generators/nlojet++/interface/data/Makefile.am: Add R3/2 + scenarios to distribution git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2093 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2015-05-06 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * + v2.0/generators/nlojet++/interface/data/dev/fnl5732dena_v23_fix.str + , + v2.0/generators/nlojet++/interface/data/dev/fnl5732numa_v23_fix.str: + Devel only git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2092 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2015-05-06 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * + v2.0/generators/nlojet++/interface/data/InclusiveNJetEvents/fnl2732 + dena_I1230937_v23_fix.str, + v2.0/generators/nlojet++/interface/data/InclusiveNJetEvents/fnl2732 + numa_I1230937_v23_fix.str: Update/finalize CMS R3/2 scenarios git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2091 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2015-04-23 Prerelease of fastNLO interface to NLOJet++, package version 2.3.1pre, revision 2067 + ==================================================================================== + +2015-04-23 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/generators/nlojet++/ChangeLog, + v2.0/generators/nlojet++/NEWS, + v2.0/generators/nlojet++/configure.ac, v2.0/toolkit/ChangeLog, + v2.0/toolkit/NEWS, v2.0/toolkit/{ToDo_Toolkit.txt => TODO}: Prepare + toolkit prerelease git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2067 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2015-04-21 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/generators/nlojet++/interface/hadron/InclusiveNJets.cc: + Implement prapidity for incl. jets git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2057 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2015-04-21 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * + v2.0/generators/nlojet++/interface/data/Examples/DijetMass_Example_ + v23_fix.str: Finalize dijet mass example str git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2056 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2015-04-21 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/generators/nlojet++/interface/hadron/InclusiveNJetEvents.cc, + v2.0/generators/nlojet++/interface/hadron/InclusiveNJets.cc, + v2.0/generators/nlojet++/interface/hadron/InclusiveNJets_new.cc: + Adaptations to modified toolkit methods git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2055 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2015-04-21 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * + v2.0/generators/nlojet++/interface/data/Examples/{InclusiveDijetEve + nts_Example_v23_fix.str => DijetMass_Example_v23_fix.str}, + v2.0/generators/nlojet++/interface/data/Examples/InclusiveJets_Exam + ple_v23_fix.str, + v2.0/generators/nlojet++/interface/data/Makefile.am: Update example + steers; delimit tarball content git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2054 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2015-04-21 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * + v2.0/generators/nlojet++/interface/data/RivetAdditions/CMS_2011_I89 + 5742.info, + v2.0/generators/nlojet++/interface/data/RivetAdditions/CMS_2011_I89 + 5742.plot, + v2.0/generators/nlojet++/interface/data/RivetAdditions/CMS_2013_I12 + 08923.info, + v2.0/generators/nlojet++/interface/data/RivetAdditions/CMS_2013_I12 + 08923.plot: Adaptations in my Rivet files git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2053 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2015-04-21 rabbertz + + * InclusiveNJets.cc: Implement prapidity for incl. jets + + * DijetMass_Example_v23_fix.str: Finalize dijet mass example str + + * InclusiveNJetEvents.cc, InclusiveNJets.cc, InclusiveNJets_new.cc: + Adaptations to modified toolkit methods + + * DijetMass_Example_v23_fix.str, InclusiveDijetEvents_Example_v23_fix.str, + InclusiveJets_Example_v23_fix.str, Makefile.am: Update example steers; + delimit tarball content + + * CMS_2011_I895742.info, CMS_2011_I895742.plot, CMS_2013_I1208923.info, + CMS_2013_I1208923.plot: Adaptations in my Rivet files + +2015-04-09 rabbertz + + * fnl2452_I1082936_v23_fix.str, fnl2452_I1082936_v23_fix_pt12ave.str, + fnl2452_I1082936_v23_fix_ptmax.str, + fnl2452_I1082936_v23_fix_ptmaxexpystar.str, fnl2452_I1082936_v23_flex.str, + fnl2452_I1082936_v23_flex_ptmaxexpystar.str, + fnl2452b_I1268975_v23_fix.str, fnl2452b_I1268975_v23_fix_ptmax.str, + fnl2452b_I1268975_v23_fix_ptmaxexpystar.str, + fnl2452b_I1268975_v23_flex_ptmaxexpystar.str, + fnl2462_I1082936_v23_fix.str, fnl2462_I1082936_v23_flex_ptmaxexpystar.str, + fnl2462b_I1268975_v23_fix.str, + fnl2462b_I1268975_v23_flex_ptmaxexpystar.str: Clean up and add ATLAS dijet + mass 2014 + + * ATLAS_2013_I1228693.yoda: Add RIVET style data for missing ATLAS analysis + + * fnl2332e_I1298810_v23_fix.str, fnl2332e_v23_fix.str, + fnl2342e_I1298810_v23_fix.str, fnl2342e_v23_fix.str, + fnl2352_I1082936_v23_fix.str, fnl2352_v23_fix.str, + fnl2352b_I1325553_v23_fix.str, fnl2352b_v23_fix.str, + fnl2362_I1082936_v23_fix.str, fnl2362_v23_fix.str, + fnl2362b_I1325553_v23_fix.str, fnl2362b_v23_fix.str, + fnl4352_I1228693_v23_fix.str, fnl4352_v23_fix.str, + fnl4362_I1228693_v23_fix.str, fnl4362_v23_fix.str, + fnr0001midpHT_I723509_v23_fix.str, fnr0001midpHT_v23_fix.str, + fnr0001midpMB_I723509_v23_fix.str, fnr0001midpMB_v23_fix.str, + fnt2004_I743342_v23_fix.str, fnt2004_v23_fix.str, + fnt2007midp_I790693_v23_fix.str, fnt2007midp_v23_fix.str, + fnt2009midp_I779574_v23_fix.str, fnt2009midp_v23_fix.str: Upgrade to final + v23 steering and add missing RIVET_IDs + +2015-04-08 rabbertz + + * InclusiveNJetEvents.cc, fnl2622f_I1090423_v23_fix.str, + fnl2622f_I1090423_v23_flex.str: Implement and add Dijet Angular + + * Makefile.am, fnl2342bv22.cc, fnl2352v22.cc, fnl2380ak57v22.cc, + fnl5002pt12.cc, fnl5350eta0v22.cc, fnl5350eta0v22conee.cc: Clean up + + * fnlo_int_hhc_nlojet.cc, pdf-hhc-dummy.cc: Fix indentation; check + +2015-03-26 sieber + + * fnlo_int_hhc_nlojet.cc: constructor of global variable was not called when + using from different compilation unit (gcc 4.8.1) + +2015-02-15 rabbertz + + * CMS_2011_I895742.plot, CMS_2011_I895742.yoda, CMS_2013_I1208923.info, + CMS_2013_I1208923.plot, CMS_2013_I1208923.yoda: CMS dijet mass 2011 & 2013 + Rivet + + * fnl2412c_I895742_v23_fix.str, fnl2412c_I895742_v23_flex.str: CMS dijet + mass 2011 correction for 2nd scale + + * fnl2412e_I1208923_v23_fix.str, fnl2412e_I1208923_v23_flex.str: CMS dijet + mass 2013 + +2015-02-12 rabbertz + + * Makefile.am: Avoid command line length limits; data install via install + hook for tgz + +2015-02-11 rabbertz + + * Makefile.am, fnl2452_I1082936_v23_fix.str, + fnl2452_I1082936_v23_fix_ptmax.str, fnl5002pt12.str: Small scenario + correction + + * Makefile.am, fnl2452_I1082936_v23_fix_pt12ave.str, + fnl2452_I1082936_v23_fix_ptmax.str, + fnl2452_I1082936_v23_fix_ptmaxexpystar.str, fnl2452_I1082936_v23_flex.str: + Add ATLAS dijet mass scenario for production + + * InclusiveNJetEvents.cc: Addition to scale choices + + * fnl2412c_I895742_v23_fix.str, fnl2412c_I895742_v23_flex.str: make + outputfilename consistent + +2015-02-01 rabbertz + + * Makefile.am: This Makefile.am doesn't work yet for unknown reason + + * InclusiveNJets_new.cc, Makefile.am, fastNLOjetpp.cc, fastNLOjetpp.h: Move + header file to usual place; was not distributed otherwise + +2015-01-30 DanielBritzger + + * pdf-hhc-dummy.cc: adjust isnan + +2015-01-30 stober + + * Makefile.am: changed order of include directories + +2015-01-30 DanielBritzger + + * pdf-hhc-dummy.cc: remove redundant for loop + +2015-01-30 stober + + * InclusiveNJets_new.cc, Makefile.am, cone-e.cc, cone-e.h, cone-et.cc, + cone-et.h, configure.ac, fastNLOjetpp.cc, fastNLOjetpp.h, fastjet-jets.cc, + fastjet-jets.h, fj-jets.cc, fj-jets.h, fnlo_int_hhc_nlojet.cc, + fnlo_int_hhc_nlojet.h, kt-e.cc, kt-e.h, pdf-hhc-dummy.cc, pdf-hhc-dummy.h, + tools: moved implementation code from header files to + libnlojetpptoolsmoved "using namespace ..." from header files to + appropriate cc filesboth these changes will remove "multiple definition" + risksand removes the constraint of having to include headers ina + particular order. + +2015-01-30 rabbertz + + * DijetAngular, DijetMass, Examples, InclusiveJets, InclusiveNJetEvents, + RivetAdditions, dev: Fix some svn ignores + +2015-01-29 DanielBritzger + + * fnlo_int_hhc_nlojet.h: bugfix + +2015-01-27 rabbertz + + * ATLAS_2013_I1228693.info, ATLAS_2013_I1228693.plot, + ATLAS_2013_I1228693.yoda, CMS_2011_I895742.info, CMS_2011_I895742.plot, + CMS_2011_I895742.yoda, Makefile.am, RivetAdditions, configure.ac, + fnl2342b_I902309_v23_flex.str, fnl2342b_v23_flex.str, + fnl2412c_I895742_v23_flex.str: Add test scenarios, also for flex + + * InclusiveNJetEvents.cc, InclusiveNjetEvents.cc, Makefile.am: Update + InclusiveNJetEvents to same level as InclusiveNJets using Fred´s fastjet + setup + + * Makefile.am: Comment out InclusiveNJets_new.cc; doesn´t compile in + current configuration + + * fnlo_int_hhc_nlojet.h: NEW DEFAULT: Always use 7 subprocesses, also for + 2-jet LO + +2015-01-24 rabbertz + + * fnlo_int_hhc_nlojet.h: set 7 LO subprocesses + +2015-01-23 stober + + * InclusiveNJets_new.cc, Makefile.am, fastNLOjetpp.cc, fastNLOjetpp.h: fixed + small issues from refactoring + +2015-01-23 rabbertz + + * fnlo_int_hhc_nlojet.h: Remove superfluous x2>x1 differentiation in + interface + +2015-01-23 stober + + * InclusiveNJets.cc, InclusiveNJets_new.cc: + + * InclusiveNJets.cc, Makefile.am: example + + * fastNLOjetpp.cc, fastNLOjetpp.h: + + * InclusiveNJets.cc: use new fastjet interface + +2015-01-23 rabbertz + + * fnl2732dena_I1230937_v23_fix.str, fnl2732numa_I1230937_v23_fix.str: + steerparm correction + + * fnl2412c_I895742_v23_fix.str: complement fnl2412c with guessed Rivet ID, + correct publunits setting according to HepData + + * InclusiveNJets.cc, InclusiveNjetEvents.cc: Correct njetmin setting to 1 in + InclusiveNJets; adapt some say debug & info settings + +2015-01-22 stober + + * Makefile.am, fastjet-jets.cc, fastjet-jets.h: improved flexibility of + fastjet interface + +2015-01-20 rabbertz + + * fnl2342b_I902309_v23_fix.str, fnl2342b_v23_fix.str, + fnl2412c_I895742_v23_fix.str: Two model steerings + + * DijetAngular, InclusiveNJetEvents, InclusiveNJets.cc, + InclusiveNjetEvents.cc, Makefile.am, configure.ac, fnl2342b_v23_flex.str, + fnl2412c_I895742_v23_fix.str, fnl2412e_I1208923_v23_fix.str, + fnl2622f_I1090423_v23_fix.str, fnl2732dena_I1230937_v23_fix.str, + fnl2732numa_I1230937_v23_fix.str: Unified njets and njetevents scenarios + +2015-01-19 rabbertz + + * InclusiveNjetEvents.cc: further work on inclusive event scenario + +2015-01-18 rabbertz + + * InclusiveNjetEvents.cc, fnl2412c_I895742_v23_fix.str: New setup: + Corrections + + * InclusiveNjetEvents.cc, fnlo_int_hhc_nlojet.h: New setup: Corrections + +2015-01-17 rabbertz + + * DijetMass, Examples, InclusiveDijetEvents_Example_v23_fix.str, + InclusiveJets, InclusiveJets.cc, InclusiveJets_Example_v23_fix.str, + InclusiveNJets.cc, InclusiveNjetEvents.cc, Makefile.am, configure.ac, dev, + fnl2332e_v23_fix.str, fnl2342b_v23_fix.str, fnl2342b_v23_flex.str, + fnl2342e_v23_fix.str, fnl2352_v23_fix.str, fnl2352b_v23_fix.str, + fnl2362_v23_fix.str, fnl2362b_v23_fix.str, fnl2380ak57v22.str, + fnl2412c_I895742_v23_fix.str, fnl4350b_v23_fix.str, fnl4352_v23_fix.str, + fnl4362_v23_fix.str, fnl5002pt12.str, fnl5350c_v23_fix.str, + fnl5350eta0v22.str, fnlo_int_hhc_nlojet.h, fnr0001midpHT_v23_fix.str, + fnr0001midpMB_v23_fix.str, fnt2004_v23_fix.str, fnt2007midp_v23_fix.str, + fnt2009midp_v23_fix.str: Finalized 1st version of new setup for event + cross sections + +2015-01-16 rabbertz + + * InclusiveDijetEvents.cc, InclusiveNjetEvents.cc: Testing + +2015-01-14 rabbertz + + * InclusiveDijetEvents.cc, InclusiveDijetEvents_Example_v23_fix.str, + InclusiveJets.cc, InclusiveJets_Example_v23_fix.str, Makefile.am: Create + dijet example for toolkit with NLOJet++ + +2015-01-05 rabbertz + + * InclusiveJets_Example_v23_fix.str, fnl2332e_v23_fix.str, + fnl2342b_v23_fix.str, fnl2342e_v23_fix.str: CMS 2011 R 0.5 und 0.7 + Szenarios + +2015-01-02 rabbertz + + * fnl4352_v23_fix.str, fnl4362_v23_fix.str: ATLAS incl jets 2.76 TeV + +2014-12-29 rabbertz + + * fnl2352b_v23_fix.str, fnl2362b_v23_fix.str: ATLAS 2011 inclusive jets + + * fnl2352_v23_fix.str, fnl2352v22.str, fnl2362_v23_fix.str: ATLAS 2010 + inclusive jets + +2014-12-23 rabbertz + + * fnt2004_v23_fix.str, fnt2009midp_v23_fix.str: Und noch zwei Tevatron Run + II scenarios + + * fnt2007midp_v23_fix.str: Tevatron scenario fnt2007midp_v23_fix ready + + * fnt2007midp_v23_fix.str: Start adding old Tevatron scenarios for + recalculation + +2014-12-11 rabbertz + + * InclusiveJets.cc: Avoid one more memory leak + +2014-12-10 rabbertz + + * InclusiveJets.cc: Scale table write out timing logarithmically from + starting value 10k resp. --save-after option of NLOJet++ up to max. value + of 10M + + * InclusiveJets.cc: Updated InclusiveJets scenario working with new tests on + steering parameters + +2014-12-09 rabbertz + + * InclusiveJets.cc, fnl2342b_v23_fix.str, fnlo_int_hhc_nlojet.h: Test + Daniels read steer name check + +2014-12-09 DanielBritzger + + * InclusiveJets.cc: potential bugfix if no jets are found + +2014-11-20 rabbertz + + * InclusiveJets.cc, Makefile.am, configure.ac: Save work from laptop ...; + recharge failing + +2014-11-20 stober + + * fj-jets.cc: fix memory leak in fastjet helper + +2014-11-11 Prerelease of fastNLO interface to NLOJet++, package version 2.3.1pre, revision 1903 + ==================================================================================== + +2014-11-11 rabbertz + + * Makefile.am, configure.ac: Use new fnlo-tk-config in NLOJet++ interface + +2014-09-30 rabbertz + + * InclusiveJets.cc: Verbosity set in steering file + +2014-09-29 rabbertz + + * InclusiveJets.cc, Makefile.am, fj-ak.cc, fj-ak.h, fj-cdfmp.cc, fj-cdfmp.h, + fj-d0r2.cc, fj-d0r2.h, fj-kt.cc, fj-kt.h, fj-sc.cc, fj-sc.h: Remove + various old fastjet algorithm files; fj-jets is steerable + + * InclusiveJets.cc, Makefile.am, fj-jets.cc: Updates for use in PDF school + + * fj-jets.cc: Updates for use in PDF school + + * InclusiveJets.cc, Makefile.am, fnl2342b_v23_fix.str: Updates for use in + PDF school + +2014-09-10 rabbertz + + * InclusiveJets.cc, Makefile.am, fj-ak.cc, fj-ak.h, fj-cdfmp.cc, fj-cdfmp.h, + fj-d0r2.cc, fj-d0r2.h, fj-jets.cc, fj-jets.h, fj-kt.cc, fj-kt.h, fj-sc.cc, + fj-sc.h, fnr0001midpHT_v23_fix.str, fnr0001midpMB_v23_fix.str: Implement + use of various fastjet algos; add old STAR 200 GeV scenario + +2014-08-01 rabbertz + + * fnl4350b_v23_fix.str, fnl5350c_v23_fix.str: More tests for v23 + +2014-07-31 rabbertz + + * fnl2342b_v23_fix.str, fnl2342b_v23_flex.str, fnl4352_v23_fix.str: Update + steering files to final version no. v23; add ATLAS scenario 2.76 + + * Makefile.am: Update steering files to final version no. v23 + + * fnl2342b_v22_fix.str, fnl2342b_v22_flex.str, fnl2342b_v23_fix.str, + fnl2342b_v23_flex.str: Update steering files to final version no. v23 + +2014-07-17 rabbertz + + * NEWS, README: Update README etc. + +2014-07-17 First public prerelease of the fastNLO interface to NLOJet++, package version 2.3.1pre, revision 1855 + ===================================================================================================== + +2014-06-29 rabbertz + + * InclusiveJets.cc: Remove automativ _v22 addition to tablename + +2014-06-23 rabbertz + + * Makefile.am: Add missing data files with EXTRA_DIST var + +2014-06-22 rabbertz + + * Makefile.am: Put back correct header include dirs + +2014-06-21 rabbertz + + * .svnignore.autotools, converter, nlojet++, reader, toolkit, userkr, v2.0: + Work on svn ignore settings + + * .svnignore.recursive, Makefile.am, arXiv_1109.1310, bits, blackhat, + common, configure.ac, creator, data, difftop, doc, doxygen, ep, example, + fastnlo, fastnloreader, fastnlotk, fastnlotoolkit, fig, figs, + fnl2342b_v22_fix.str, fnl2342b_v22_flex.str, fnl2352v22.str, + fnl2380ak57v22.str, fnl5002pt12.str, fnl5350eta0v22.str, fnlo_int_nlojet, + generators, hadron, include, interface, jetalgos, mcfm5.1-tools, merger, + modifier, nlo-core, nlojet++-4.1.3, paper, patches, proc-dis, proc-hhc, + processor, pyext, reader_cc, reader_f, src: Work on svn ignore settings; + distribute steering files as data to share; install headers and libs into + pkgdirs + + * .svnignore.autotools, converter, nlojet++, reader, toolkit, userkr, v2.0: + Work on svn ignore settings + + * .svnignore.autotools, converter, m4, nlojet++, reader, set_svnignores, + toolkit, userkr, v2.0: Work on svn ignore settings + + * .svnignore.recursive, arXiv_1109.1310, bits, blackhat, common, creator, + difftop, doc, doxygen, ep, example, fastnlo, fastnloreader, fastnlotk, + fastnlotoolkit, fig, figs, fnlo_int_nlojet, generators, hadron, include, + interface, jetalgos, m4, mcfm5.1-tools, merger, modifier, nlo-core, + nlojet++-4.1.3, paper, patches, proc-dis, proc-hhc, processor, pyext, + reader_cc, reader_f, set_svnignores, src: Work on svn ignore settings + + * .svnignore.autotools, .svnignore.m4, .svnignore.recursive, converter, m4, + nlojet++, reader, toolkit, userkr, v2.0: Set selective svnignore patterns + for autogenerated files; documented in .svnignore files + +2014-05-28 Prerelease of the fastNLO interface to NLOJet++, package version 2.3.1pre, revision 1804 + ======================================================================================== + +2014-05-28 rabbertz + + * InclusiveJets.str, Makefile.am, fnl2342b_v22_fix.str, + fnl2342b_v22_flex.str, fnl2342bv22.str: Small rearrangement in nlojet++ + scenarios + +2014-05-22 rabbertz + + * InclusiveJets.cc: Fix prob with abs(y) + + * InclusiveJets.cc, InclusiveJets.str: Heavily improved example scenario + inclusive jets + + * Makefile.am: Fix for make distcheck + + * Makefile.am: Fix for make distcheck + + * Makefile.am, configure.ac, m4: Trivial updates + + * InclusiveJets.cc, Makefile.am: Some adaptations on v22 inclusive jets + example + +2014-05-21 sieber + + * InclusiveJets.cc: slight changes and reindent the file. These strance + xmin=8e-07 still occur, but only aftera couple of million events in my + case. + +2014-05-21 rabbertz + + * InclusiveJets.cc, InclusiveJets.str: Add work on example scenario with + Georg & Giannis; to be refined + +2014-05-20 First pre-release of fastnlo_interface_nlojet version 2.3.1pre revision 1785 + ============================================================================ + +2014-05-20 rabbertz + + * NEWS, README, fnl2342bv22.cc, fnl5350eta0v22.cc, fnl5350eta0v22conee.cc, + kt-e.cc: First complete version of NLOJet++ interface to fastNLO toolkit. + Versuch 2 + + * Makefile.am, configure.ac, fnl2342bv22.cc, fnl2342bv22.str, + fnl5350eta0v22.cc, fnl5350eta0v22conee.cc, fnlo_int_hhc_nlojet.h, + fnlo_int_nlojet.cc, pdf-hhc-dummy.h: First complete version of NLOJet++ + interface to fastNLO toolkit + +2014-05-19 rabbertz + + * cone-e.cc, cone-et.cc, configure.ac, fj-ak.cc, fj-d0r2.cc, fj-kt.cc, + fj-sc.cc, fnl5350eta0v22.cc, fnl5350eta0v22conee.cc, kt-e.cc: Now the + interface install works also with distributions tarball; puuuh + + * Makefile.am, fastnlo_interface_nlojet, fnlo_int_nlojet: Shorten path + because of tar command limitation to < 99 name length + + * Makefile.am, fnlo_int_nlojet.cc: Shorten path because of tar command + limitation to < 99 name length + + * fastNLOInterfaceToNLOJET.cc, fnlo_int_nlojet.cc: Shorten path because of + tar command limitation to < 99 name length + + * Makefile.am, fastNLOInterfaceToNLOJET.cc: Shorten path because of tar + command limitation to < 99 name length + + * Makefile.am: Working from my and Georgs setup, yes + + * Makefile.am: working maybe now ... + + * Makefile.am: working version? + + * Makefile.am, cone-e.cc, fj-ak.cc, fnl5350eta0v22.cc, + fnl5350eta0v22conee.cc: working version? + + * Makefile.am: libtool libs work; setup not yet completely consistent + + * Makefile.am, cone-e.cc, cone-e.h, cone-et.cc, cone-et.h, configure.ac, + fastNLOInterfaceToNLOJET.cc, fastnlo_interface_nlojet, fastnlojetalgos, + fj-ak.cc, fj-ak.h, fj-d0r2.cc, fj-d0r2.h, fj-kt.cc, fj-kt.h, fj-sc.cc, + fj-sc.h, include, jetalgos, kt-e.cc, kt-e.h, pdf-hhc-dummy.h: libtool libs + work; setup not yet completely consistent + +2014-05-19 sieber + + * nlojet++.patch: added patch file for nlojet++ 4.1.3 with all the necessary + changes for fastNLO + +2014-05-19 rabbertz + + * Makefile.am: Still not working test version + + * Makefile.am: Still not working test version + + * Makefile.am: Still not working test version + + * Makefile.am: Still not working test version + + * fastNLOInterfaceToNLOJET.cc: Still not working test version + + * fnl5350eta0v22conee.cc: Still not working test version + + * Makefile.am, cone-e.cc: Still not working test version + + * Makefile.am, cone-e.h, pdf-hhc-dummy.h: Still not working test version + + * Makefile.am, configure.ac, fastNLOInterfaceToNLOJET.cc, fnl2352v22.cc, + fnl5350eta0v22.cc, include: Still not working test version + +2014-05-16 sieber + + * Makefile.am: add fastjet libs to Makefile + + * Makefile.am, configure.ac: Add TOOLKIT LIBDIR and INCLUDEDIR to + Makefile.am + +2014-05-16 rabbertz + + * Makefile.am, configure.ac, fastNLOInterfaceToNLOJET.cc: Does not work yet + ... grrr + +2014-05-15 rabbertz + + * AUTHORS, COPYING, Makefile.am, NEWS, README, cone-e.cc, cone-e.h, + cone-et.cc, cone-et.h, configure.ac, fastNLOInterfaceToNLOJET.cc, + fastnloja, fastnlojetalgos, fj-ak.cc, fj-ak.h, fj-d0r2.cc, fj-d0r2.h, + fj-kt.cc, fj-kt.h, fj-sc.cc, fj-sc.h, fnl2352v22.cc, fnl2352v22.str, + fnl2380ak57v22.cc, fnl2380ak57v22.str, fnl5002pt12.cc, fnl5002pt12.str, + fnl5350eta0v22.cc, fnl5350eta0v22.str, hadron, include, kt-e.cc, kt-e.h, + pdf-hhc-dummy.h: First nlojet++ interface version + + * bits, configure.ac, dis-process.h, generators, hhc-process.h, hhc2jet.cc, + hhc3jet.cc, hhc4jet.cc, interface, main_calc.cc, nlo-basic_user.h, + nlo-core, nlo-process_i1f0.h, nlo-process_i2f0.h, nlojet++, + nlojet++-4.1.3, patches, proc-dis, proc-hhc, split.cc, src: Start + generator interfaces diff --git a/v2.6/generators/nlojet++/Makefile.am b/v2.6/generators/nlojet++/Makefile.am new file mode 100644 index 0000000000000000000000000000000000000000..26de1f84081d20fb5207c848fb44e50442b2249f --- /dev/null +++ b/v2.6/generators/nlojet++/Makefile.am @@ -0,0 +1,36 @@ +# -*- Automake -*- +# ----------------------------------------------------------------------------- +# +# K. Rabbertz, 15.05.2014 +# +# NLOJet++ interface to fastNLO toolkit +# +# ----------------------------------------------------------------------------- +# Use GNU standards +AUTOMAKE_OPTIONS = gnu + +# Subdirectories +SUBDIRS = interface + +# Provide local m4 macros in dir m4, copy also system-wide macros +ACLOCAL_AMFLAGS = -I m4 --install + +# Add git equivalent of subversion revision number (original svn recipe from Autotools by J. Calcote). +EXTRA_DIST = m4 GITREV +# This gives e.g. fastnlo-2.0.0-643M for svn revision 643 locally modified +distdir = $(PACKAGE)-$(VERSION)-$(GITREV) +# Don't put .git subdirs into distribution package +dist-hook: + rm -rf `find $(distdir) -name .git` + +# Files that are required to build the project but that can be +# recreated IF the necessary autotools etc. are available by: +# "autoreconf -i; ./configure" +# Use "make maintainer-clean" (on a build machine) before git commits, +# but NOT before distribution with "make dist"! +# aclocal.m4 m4/libtool.m4 m4/ltoptions.m4 m4/ltsugar.m4 m4/ltversion.m4 m4/lt~obsolete.m4 \ +MAINTAINERCLEANFILES = INSTALL config.h.in config.guess config.sub configure Makefile.in \ + depcomp install-sh ltmain.sh missing compile \ + aclocal.m4 \ + GITREV test-driver + diff --git a/v2.6/generators/nlojet++/NEWS b/v2.6/generators/nlojet++/NEWS new file mode 100644 index 0000000000000000000000000000000000000000..4c41b451fb7cbc667e4ab56e19a694bd11975518 --- /dev/null +++ b/v2.6/generators/nlojet++/NEWS @@ -0,0 +1,49 @@ +Release Notes for fastnlo_interface_nlojet version 2.5.1 revision 3030 +======================================================================= +- Require full C++17 functionality also for nlojet++ interface + + +Release Notes for fastnlo_interface_nlojet version 2.5.1 revision 2888 +======================================================================= +Major improvement (Johannes Gäßler): +- optional on-the-fly x-binning extension with given bin density +Other: +- LHAPDF5 support removed +- By default NO Doxygen documentation anymore; must be switched on explicitly + + +Release Notes for fastnlo_interface_nlojet version 2.5.0 revision 2858: +======================================================================= +- Implementation of HT_parton as scale +- autotools update + + +TODO: inbetween release notes + + +Release Notes for fastnlo_interface_nlojet version 2.3.1pre revision 2067: +========================================================================== +Updated to work with new toolkit prerelease. +Major simplification in NLOJet++ usage: +- Typical jet analyses are categorized into two classes, InclusiveNJets and + InlusiveNJetsEvent, such that many variations can be made by only adapting + the provided example steering files. No code changes necessary. + InclusiveNJets makes one entry per jet of an event, while InlusiveNJetsEvent + makes only one entry per event. +- Steering files to reproduce calculations for numerous published inclusive jet + or dijet mass cross sections are provided and labelled with a fastNLO indicator + plus the Inspire number of the corresponding publication. + + + +Release Notes for fastnlo_interface_nlojet version 2.3.1pre revision 1855: +========================================================================== +First public prerelease of the NLOJet++ interface to the fastNLO toolkit. +This is a prerelease for testing and numerous things are still in progress. +Proper documentation is missing. +Don't hesitate to contact the authors for any questions or problems. + +Content: + - Library for running jet algorithms from within NLOJet++ libtool libraries + including interface to FastJet + - Example NLOJet++ libtool libraries for filling fastNLO v2 tables diff --git a/v2.6/generators/nlojet++/README b/v2.6/generators/nlojet++/README new file mode 100644 index 0000000000000000000000000000000000000000..e67891fef9beef469d0c5e2e5f88c3dbcb29725f --- /dev/null +++ b/v2.6/generators/nlojet++/README @@ -0,0 +1,134 @@ +# -*-sh-*- +# fastnlo_interface_nlojet-2.3.1pre-1855: +# ======================================= +# This is a prerelease for testing! +# Please contact the authors for any questions, problems, or requests. + + +# Content: +# -------- +# - C++ library for running jet algorithms from within NLOJet++ libtool libraries including interface to FastJet +# - Example NLOJet++ libtool libraries for filling fastNLO v2 tables + + +# Requirements: +# ------------- +# For installation of interface package: Patched version of NLOJet++-4.1.3: nlojet++-4.1.3-patched.tar.gz +# FastJet-3.0.6 for the example scenario: fastjet-3.0.6.tar.gz +# The fastNLO Toolkit 2.3.0pre: fastnlo_toolkit-2.3.1pre-1854.tar.gz +# The fastNLO toolkit requires: LHAPDF version 6 +# +# All these packages are also downloadable from http://fastnlo.hepforge.org/code/v23/code-v23.html + + +# Basic installation of one of these packages in six simple steps: +# ---------------------------------------------------------------- +# 1. Unpack distribution tarball in directory of your choice: +tar xzvf package-v.v.v.tar.gz +# +# 2. Descend into created subdirectory: +cd package-v.v.v + +# 3. Configure the installation: +# (Prepared using the GNU autotools setup, which is NOT required for the installation itself.) +./configure --prefix=/path/to/your/local/installation_directory + +# If the same installation directory or other system-wide known installation directories +# contain already a version of other required packages, these will be found and used +# automatically. +# If not, please specify the path to where PACKAGE is installed, i.e. where +# 'bin/package-executable' or 'lib/package-library can be found: +./configure --prefix=/path/to/your/local/installation_directory --with-package=/path/to/your/package/installation + +# To see all available configure options do: +./configure --help + +# 4. Compile and link the project, use the '-j n' option to specify, +# how many cores, e.g. n=2, should be used in parallel in this step: +make -j n + +# 5. If implemented, run functionality test suite: +#make check + +# 6. Install the products into the configured target directory: +make install + + +# Special installation recommendations for some packages: +# ------------------------------------------------------- +# FastJet: To use all available jet algorithms: +./configure --prefix=/path/to/your/local/installation_directory --bindir=/path/to/your/local/installation_directory/bin + --enable-shared --enable-allplugins + + +# Optional features: +# ------------------ +# fastNLO Toolkit: See the Tooolkit README file! + + +# Usage: +# ------ +# The NLOJet++ interface comes with an example to do inclusive jet cross sections. +# +# The code resides in interface/hadron/InclusiveJets.cc of the distribution tar-ball and +# can be copied and adapted to do other observables. The NLOjet++ libtool library gets installed into +# /path/to/your/local/installation_directory/lib/fastnlo_interface_nlojet/libInclusiveJets.la +# +# For more flexibility in terms of event/jet selection and binning a steering file with name +# InclusiveJets.str is required to be in the directory from where NLOJet++ is run. +# Example steerings reproducing the 2010 CMS inclusive jet analysis like in fnl1014_I902309, +# see http://fastnlo.hepforge.org/scenarios/tables-lhc.html, are installed into +# /path/to/your/local/installation_directory/share/fastnlo_interface_nlojet +# The two example steering files fnl2342b_v22_fix.str and fnl2342b_v22_flex.str both reproduce +# the 2010 CMS inclusive jet analysis using either +# +# - the fastNLO fixed-scale table format that uses internally separate interpolation tables to store +# results for multiple factorization scale factors mu_f, +# +# (This format usually produces smaller tables, but then whatever has been defined to be mu_f, +# e.g. mu_f = pT_jet, can only be varied among the chosen mu_f scale factors. The scale factor +# for the renormalization scale mu_r can be changed arbitrarily. Note: Work in progress allows us +# in the near future the use of the HOPPET package for arbitrary mu_f scale factors also here, +# but at the cost of higher computing times per table evaluation.) +# +# - the fastNLO flexible-scale table format that tabulates all logarithmic scale ratios to the +# renormalization and factorization scales for up to two scale choices, e.g. sqrt(Q^2) and pT_jet +# in deep-inelastic scattering. +# (This format results in larger tables but has the flexibility to select arbitrary scale factors +# for mu_r and mu_f AND to change the functional form of each scale choice! That is mu_r and mu_f +# can be set for example to mu_r = sqrt(Q^2 + pT^2) and mu_f = pT, if Q and pT were the two original +# scale choices.) +# +# See the description in the example steerings for more info on the various options. +# +# In order to run NLOJet++ (Please see also the NLOJet++ documentation!) you can do +bin/nlojet++ --calculate -c[born|nlo] [--max-event=nnnnnnn] [-n taskname] [-s randomseed] + -u lib/fastnlo_interface_nlojet/libInclusiveJets.la +# +# If this is the first call and a sufficient number of events is requested than the scenario produces +# a so-called warmup table, e.g. InclusiveJets_fnl2342b_v22_fix_warmup.txt +# This warmup table is necessary for fastNLO to optimize the interpolation in scales mu_r, mu_f and +# in the fractional parton momentum x, where PDFs are probed. This warmup table should be produced +# in NLO mode (-cnlo) of NLOJet++ and with at least some tenths of millions of events. Mileage +# might vary depending on your scenario. +# +# If a file with corresponding name (InclusiveJets_fnl2342b_v22_fix_warmup.txt) exists already, +# it is used and a fastNLO table is produced. The table can be found in the subdirectory 'output' +# where its name depends on the -n option given to NLOJet++. +# +# Since this is a VERY time consuming step, where some billions(!) of events should be produced for +# statistically reliable results, fastNLO allows the user to produce many LO and NLO tables in parallel. +# Take care to use different random number seeds for each job! +# These tables can afterwards be merged into one using the fnlo-merge program of the toolkit. +# +# Please contact the authors for any questions, problems, or requests. + + +# For developers only: +# -------------------- +# If you have the GNU autotools installed, the project gets automatically reconfigured properly +# if you e.g. add something new to a Makefile.am to be compiled or linked. +# +# The GNU autotools also support incremental installations. If you modify something in or add something +# that requires recompilation or relinking, the install step can be restricted to only install updated files: +make install "INSTALL=/path/to/install-sh -C" diff --git a/v2.6/generators/nlojet++/configure.ac b/v2.6/generators/nlojet++/configure.ac new file mode 100644 index 0000000000000000000000000000000000000000..a6894deac3c356591c27be2761f3a10f5958811d --- /dev/null +++ b/v2.6/generators/nlojet++/configure.ac @@ -0,0 +1,302 @@ +# -*- Autoconf -*- +# ----------------------------------------------------------------------------- +# +# K. Rabbertz, 15.05.2014 +# +# Create distribution and installation package for +# NLOJet++ interface to fastNLO toolkit +# +# ----------------------------------------------------------------------------- +# Process this file with autoconf to produce a configure script. +# Require minimal autoconf version, 2.71 is from 2021 +AC_PREREQ([2.71]) +# Define subproject fastNLO_interface_nlojet +AC_INIT([fastNLO_interface_nlojet],[2.6.0],[Daniel.Britzger@desy.de, Johannes.Gaessler@kit.edu, Klaus.Rabbertz@kit.edu]) +#Suppress verbose output when compiling (use make V=99 for verbose output) +m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) +# Properly include subprojects +AC_CONFIG_AUX_DIR([.]) +# Require minimal automake version, 1.13 is from 2013, switch on warnings +AM_INIT_AUTOMAKE([1.13 tar-ustar -Wall -Wno-override]) +# Require minimal libtool version, 2.4 is from 2011 +LT_PREREQ([2.4]) +# Allow opening precompiled modules at runtime +LT_INIT([dlopen]) +# +# ATTENTION: For conditional compilation etc ... +# AC_DEFINE preprocessor definitions are written to config.h +# which must be included first into all respective source files +AC_CONFIG_SRCDIR([config.h.in]) +AC_CONFIG_HEADERS([config.h]) +AC_CONFIG_MACRO_DIR([m4]) + +# Set default installation directory +AC_PREFIX_DEFAULT(${HOME}/local) + +# Checks for programs. +AC_PROG_AWK +AC_PROG_CXX +AC_PROG_CC +AC_PROG_CPP +AC_PROG_F77([gfortran g77]) +AC_PROG_FC([gfortran g77]) +AC_PROG_INSTALL +AC_PROG_LN_S +AC_PROG_MAKE_SET + +# Checks for sources. + +# Checks for libraries. +AC_F77_LIBRARY_LDFLAGS +AC_CHECK_LIB([g2c], [getenv_]) +AX_CHECK_ZLIB +AM_CONDITIONAL([HAVE_LIBZ],[test "x$HAVE_LIBZ" == "xtrue"]) + +# Checks for header files. + +# Checks for typedefs, structures, compiler characteristics and functionalities. +AC_HEADER_STDBOOL +AC_C_INLINE + +# Require full C++17 functionality, which has been supported by gcc since version 11 +# If the following macro is not found, you might want to install the autoconf-archive +# package and repeat the 'autoreconf -i' step. +AX_CXX_COMPILE_STDCXX_17 + +# Checks for library functions. +AC_FUNC_ERROR_AT_LINE +AC_CHECK_FUNCS([memset pow sqrt strstr]) + +# Announce checks particular for fastNLO_interface_nlojet +AC_MSG_NOTICE([*************************************************]) +AC_MSG_NOTICE([Starting checks particular for $PACKAGE_NAME ...]) +AC_MSG_NOTICE([*************************************************]) + +# NLOJet++ +AC_SUBST([TMPNAM],["NLOJet++"]) +AC_MSG_NOTICE([******************************************]) +AC_MSG_NOTICE([Looking for $TMPNAM installation ...]) +AC_MSG_NOTICE([******************************************]) + +AC_ARG_WITH([nlojet], + [AS_HELP_STRING([--with-nlojet], + [Specify location of $TMPNAM installation. This takes precedence over + an NLOJET environment variable, the prefix path or other methods. + Please note: $TMPNAM is mandatory in order to use $PACKAGE_NAME!])], + [if test "x$withval" = "xno"; then + AC_MSG_ERROR([$PACKAGE_NAME CANNOT be used without $TMPNAM! Configuration aborted!]) + fi + if test "x$withval" != "xyes"; then + AC_SUBST([NLOJET],[$withval]) + AC_MSG_NOTICE([Using given path $NLOJET as location of $TMPNAM installation.]) + fi], + []) + +if test "x$with_nlojet" != "xno"; then + if test "x$NLOJET" = "x"; then + AC_MSG_NOTICE([No $TMPNAM installation path set. Try to find $TMPNAM in prefix path ...]) + AC_PATH_PROG([NLOJETBIN],[nlojet++],[],[$prefix/bin]) + if test "x$NLOJETBIN" = "x"; then + AC_MSG_NOTICE([No $TMPNAM installation found in prefix path. Try to find $TMPNAM in system path ...]) + AC_PATH_PROG([NLOJETBIN],[nlojet++]) + if test "x$NLOJETBIN" = "x"; then + AC_MSG_ERROR([No $TMPNAM installation found. Please install $TMPNAM first. Configuration aborted!]) + fi + fi + else + AC_PATH_PROG([NLOJETBIN],[nlojet++],[],[$NLOJET/bin]) + if test "x$NLOJETBIN" = "x"; then + AC_MSG_ERROR([nlojet++ not found in given path to $TMPNAM! Configuration aborted!]) + fi + fi + AC_MSG_NOTICE([******************************************]) + if test "x$NLOJETBIN" != "x"; then + AC_MSG_NOTICE([$TMPNAM settings:]) + AC_SUBST([NLOJET], [`dirname $NLOJETBIN`]) + AC_SUBST([NLOJETPREFIX], [`dirname $NLOJET`]) + AC_SUBST([NLOJETBINPATH], ["$NLOJETPREFIX/bin"]) + AC_SUBST([NLOJETLIBPATH], ["$NLOJETPREFIX/lib"]) + AC_SUBST([NLOJETINCLUDEPATH],["$NLOJETPREFIX/include/nlo++"]) + AC_MSG_RESULT([Using $NLOJETPREFIX for the $TMPNAM installation path]) + AC_MSG_RESULT([Using $NLOJETBINPATH for the binaries]) + AC_MSG_RESULT([Using $NLOJETLIBPATH for the library]) + AC_MSG_RESULT([Using $NLOJETINCLUDEPATH for the includes]) + else + AC_MSG_ERROR([No $TMPNAM library found. Configuration aborted!]) + fi +else + AC_MSG_NOTICE([******************************************]) + AC_MSG_ERROR([$PACKAGE_NAME CANNOT be used without $TMPNAM! Configuration aborted!]) +fi +AM_CONDITIONAL(HAVE_NLOJET, test "x$NLOJETPREFIX" != "x") + +# fastNLO toolkit +AC_SUBST([TMPNAM],["fastNLO toolkit"]) +AC_MSG_NOTICE([******************************************]) +AC_MSG_NOTICE([Looking for $TMPNAM installation ...]) +AC_MSG_NOTICE([******************************************]) + +AC_ARG_WITH([fnlotoolkit], + [AS_HELP_STRING([--with-fnlotoolkit], + [Specify location of $TMPNAM installation. This takes precedence over + an FNLOTOOLKIT environment variable, the prefix path or other methods. + Please note: $TMPNAM is mandatory in order to use $PACKAGE_NAME!])], + [if test "x$withval" = "xno"; then + AC_MSG_ERROR([$PACKAGE_NAME CANNOT be used without $TMPNAM! Configuration aborted!]) + fi + if test "x$withval" != "xyes"; then + AC_SUBST([FNLOTOOLKIT],[$withval]) + AC_MSG_NOTICE([Using given path $FNLOTOOLKIT as location of $TMPNAM installation.]) + fi], + []) + +if test "x$with_fnlotoolkit" != "xno"; then + if test "x$FNLOTOOLKIT" = "x"; then + AC_MSG_NOTICE([No $TMPNAM installation path set. Try to find $TMPNAM in prefix path ...]) + AC_PATH_PROG([FNLOTOOLKITBIN],[fnlo-tk-config],[],[$prefix/bin]) + if test "x$FNLOTOOLKITBIN" = "x"; then + AC_MSG_NOTICE([No $TMPNAM installation found in prefix path. Try to find $TMPNAM in system path ...]) + AC_PATH_PROG([FNLOTOOLKITBIN],[fnlo-tk-config]) + if test "x$FNLOTOOLKITBIN" = "x"; then + AC_MSG_ERROR([No $TMPNAM installation found. Please install $TMPNAM first. Configuration aborted!]) + fi + fi + else + AC_PATH_PROG([FNLOTOOLKITBIN],[fnlo-tk-config],[],[$FNLOTOOLKIT/bin]) + if test "x$FNLOTOOLKITBIN" = "x"; then + AC_MSG_ERROR([fnlo-tk-config not found in given path to $TMPNAM! Configuration aborted!]) + fi + fi + AC_MSG_NOTICE([******************************************]) + if test "x$FNLOTOOLKITBIN" != "x"; then + AC_MSG_NOTICE([$TMPNAM settings:]) + AC_SUBST([FNLOTOOLKITPREFIX], [`$FNLOTOOLKITBIN --prefix`]) + AC_SUBST([FNLOTOOLKITBINPATH], ["$FNLOTOOLKITPREFIX/bin"]) + AC_SUBST([FNLOTOOLKITLIBPATH], [`$FNLOTOOLKITBIN --libdir`]) + AC_SUBST([FNLOTOOLKITINCLUDEPATH],[`$FNLOTOOLKITBIN --incdir`]) + AC_SUBST([FNLOTOOLKITPYTHONPATH],[`$FNLOTOOLKITBIN --pythondir`]) + AC_MSG_RESULT([Using $FNLOTOOLKITPREFIX for the $TMPNAM installation path]) + AC_MSG_RESULT([Using $FNLOTOOLKITBINPATH for the binaries]) + AC_MSG_RESULT([Using $FNLOTOOLKITLIBPATH for the library]) + AC_MSG_RESULT([Using $FNLOTOOLKITINCLUDEPATH for the includes]) + AC_MSG_RESULT([Using $FNLOTOOLKITPYTHONPATH for python extentions]) + else + AC_MSG_ERROR([No $TMPNAM library found. Configuration aborted!]) + fi +else + AC_MSG_NOTICE([******************************************]) + AC_MSG_ERROR([$PACKAGE_NAME CANNOT be used without $TMPNAM! Configuration aborted!]) +fi +AM_CONDITIONAL(HAVE_FNLOTOOLKIT, test "x$FNLOTOOLKITPREFIX" != "x") + +# FastJet +AC_SUBST([TMPNAM],["FastJet"]) +AC_MSG_NOTICE([******************************************]) +AC_MSG_NOTICE([Looking for $TMPNAM installation ...]) +AC_MSG_NOTICE([******************************************]) + +AC_ARG_WITH([fastjet], + [AS_HELP_STRING([--with-fastjet], + [Specify location of $TMPNAM installation. This takes precedence over + a FASTJET environment variable, the prefix path or other methods. + Please note: $TMPNAM is not required but warmly recommended in order to apply jet algorithms!])], + [if test "x$withval" = "xno"; then + AC_MSG_NOTICE([Building $PACKAGE_NAME without $TMPNAM!]) + else + if test "x$withval" != "xyes"; then + AC_SUBST([FASTJET],[$withval]) + AC_MSG_NOTICE([Using given path $FASTJET as location of $TMPNAM installation.]) + fi + fi], + []) + +if test "x$withval" != "xno"; then + if test "x$FASTJET" = "x"; then + AC_MSG_NOTICE([No $TMPNAM installation path set. Try to find $TMPNAM in prefix path ...]) + AC_PATH_PROG([FASTJETBIN],[fastjet-config],[],[$prefix/bin]) + if test "x$FASTJETBIN" = "x"; then + AC_MSG_NOTICE([No $TMPNAM installation found in prefix path. Try to find $TMPNAM in system path ...]) + AC_PATH_PROG([FASTJETBIN],[fastjet-config]) + if test "x$FASTJETBIN" = "x"; then + AC_MSG_NOTICE([Building $PACKAGE_NAME without $TMPNAM!]) + fi + fi + else + AC_PATH_PROG([FASTJETBIN],[fastjet-config],[],[$FASTJET/bin]) + if test "x$FASTJETBIN" = "x"; then + AC_MSG_ERROR([fastjet-config not found in given path to $TMPNAM! Configuration aborted!]) + fi + fi + AC_MSG_NOTICE([******************************************]) + if test "x$FASTJETBIN" != "x"; then + AC_DEFINE([WITH_FASTJET],[1],[Enable conditional compilation with FASTJET]) + AC_MSG_NOTICE([$TMPNAM settings:]) + AC_SUBST([FASTJETPREFIX], [`$FASTJETBIN --prefix`]) + AC_SUBST([FASTJETVERSION], [`$FASTJETBIN --version`]) + AC_SUBST([FASTJETBINPATH], ["$FASTJETPREFIX/bin"]) + AC_SUBST([FASTJETLIBPATH], ["$FASTJETPREFIX/lib"]) + AC_SUBST([FASTJETINCLUDEPATH],["$FASTJETPREFIX/include"]) + AC_SUBST([FASTJETLIBS],[`$FASTJETBINPATH/fastjet-config --libs`]) + AC_MSG_RESULT([Using $TMPNAM version $FASTJETVERSION]) + AC_MSG_RESULT([Using $FASTJETPREFIX for the $TMPNAM installation path]) + AC_MSG_RESULT([Using $FASTJETBINPATH for the binaries]) + AC_MSG_RESULT([Using $FASTJETLIBPATH for the library]) + AC_MSG_RESULT([Using $FASTJETINCLUDEPATH for the includes]) + AC_MSG_RESULT([Using $FASTJETLIBS for the linker flags]) + else + AC_MSG_NOTICE([No $TMPNAM library found. Building $PACKAGE_NAME without $TMPNAM!]) + fi +else + AC_MSG_NOTICE([******************************************]) + AC_MSG_NOTICE([$TMPNAM support switched off by user. Building $PACKAGE_NAME without $TMPNAM!]) +fi +AM_CONDITIONAL(HAVE_FASTJET, test "x$FASTJETPREFIX" != "x") +AM_CONDITIONAL(HAVE_FASTJETCONFIG, test "x$FASTJETBIN" != "x") + +# Add subversion-like git revision number +GITREV=`sh -c "git describe 2> /dev/null"` +if { test "x$GITREV" = "x"; } ; + then GITREV=`cat $srcdir/GITREV` + else echo $GITREV>$srcdir/GITREV +fi +AC_SUBST(GITREV) +AC_MSG_NOTICE([******************************************]) +AC_MSG_NOTICE([You are using fastNLO git revision number $GITREV.]) +AC_MSG_NOTICE([******************************************]) + +# Define project substitution variables (to be replaced e.g. in config files below) +AC_SUBST([AUTHORS],["D. Britzger, T. Kluge, K. Rabbertz, F. Stober, G. Sieber, M. Wobisch"]) +AC_SUBST([AUTHORSv14],["T. Kluge, K. Rabbertz, M. Wobisch"]) +AC_SUBST([AUTHORSv2],["D. Britzger, K. Rabbertz, F. Stober, M. Wobisch"]) +AC_SUBST([QUOTEv14],["Proc. DIS 2006, 483 (2006), hep-ph/0609285."]) +AC_SUBST([QUOTEv2],["Proc. DIS 2012, 217 (2012), arXiv:1208.3641."]) +AC_SUBST([SUBPROJECT],["toolkit"]) +AC_SUBST([WEBPAGE],["http://projects.hepforge.org/fastnlo"]) +AC_SUBST([YEARS],["2011-`date +%Y`"]) + +# Output +AC_CONFIG_FILES([Makefile + interface/Makefile + interface/check/Makefile + interface/data/Makefile + interface/data/Examples/Makefile + interface/data/InclusiveJets/Makefile + interface/data/DijetMass/Makefile + interface/data/DijetAngular/Makefile + interface/data/AzimuthalDecorrelation/Makefile + interface/data/InclusiveNJetDiffs/Makefile + interface/data/InclusiveNJetEvents/Makefile + interface/data/RivetAdditions/Makefile + interface/data/check/Makefile + interface/hadron/Makefile + interface/include/Makefile + interface/include/fnlo_int_nlojet/Makefile + interface/tools/Makefile + interface/jetalgos/Makefile + ]) + +AC_CONFIG_FILES([interface/check/fnlo-nj-wrmtest.pl],[chmod +x interface/check/fnlo-nj-wrmtest.pl]) +AC_CONFIG_FILES([interface/check/fnlo-nj-lotest.pl],[chmod +x interface/check/fnlo-nj-lotest.pl]) +AC_CONFIG_FILES([interface/check/fnlo-nj-nlotest.pl],[chmod +x interface/check/fnlo-nj-nlotest.pl]) + +AC_OUTPUT diff --git a/v2.6/generators/nlojet++/interface/Makefile.am b/v2.6/generators/nlojet++/interface/Makefile.am new file mode 100644 index 0000000000000000000000000000000000000000..8006385dd18ecebe297f33e02357c1bd3c465aac --- /dev/null +++ b/v2.6/generators/nlojet++/interface/Makefile.am @@ -0,0 +1,19 @@ +# -*- Automake -*- +# ----------------------------------------------------------------------------- +# +# K. Rabbertz, 15.05.2014 +# +# NLOJet++ interface to fastNLO toolkit +# +# ----------------------------------------------------------------------------- +# Use GNU standards +AUTOMAKE_OPTIONS = gnu +# Nothing to do here, just go to subdirectories +SUBDIRS = data include tools jetalgos hadron check +# +# Files that are required to build the project but that can be +# recreated IF the necessary autotools etc. are available by: +# "autoreconf -i; ./configure" +# Use "make maintainer-clean" (on a build machine) before svn commits, +# but NOT before distribution with "make dist"! +MAINTAINERCLEANFILES = Makefile.in diff --git a/v2.6/generators/nlojet++/interface/check/.gitignore b/v2.6/generators/nlojet++/interface/check/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..e10473f033b235a317855e09550eb01b2777b655 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/check/.gitignore @@ -0,0 +1,7 @@ +# Ignore produced tests and test tables +fnlo-nj-*.pl +fnlo-nj-*.trs +*.tab +*.tab.gz +output +InclusiveNJets.str diff --git a/v2.6/generators/nlojet++/interface/check/Makefile.am b/v2.6/generators/nlojet++/interface/check/Makefile.am new file mode 100644 index 0000000000000000000000000000000000000000..ade0ce8c6352c05eaf671449eff2ae105988b7b9 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/check/Makefile.am @@ -0,0 +1,33 @@ +# -*- Automake -*- +# ----------------------------------------------------------------------------- +# +# K. Rabbertz, 20.10.2016 +# +# fastNLO_toolkit +# +# ----------------------------------------------------------------------------- +# Use GNU standards +AUTOMAKE_OPTIONS = gnu + +# +# Targets +# +# perl script targets to check the package (distributed, but not installed) +# +dist_check_SCRIPTS = fnlo-nj-wrmtest.pl fnlo-nj-lotest.pl fnlo-nj-nlotest.pl fnlo-compare-tables.py +TESTS_ENVIRONMENT = LIBDIR=${FNLOTOOLKITLIBPATH} PYTHONPATH=${FNLOTOOLKITPYTHONPATH}:${PYTHONPATH} +TESTS = $(dist_check_SCRIPTS) + +# Additional clean up for check targets +CLEANFILES = *.log *.tab *.str *.txt *.wrm +clean-local: clean-local-check +.PHONY: clean-local-check +clean-local-check: + -rm -rf output + +# Files that are required to build the project but that can be +# recreated IF the necessary autotools etc. are available by: +# "autoreconf -i; ./configure" +# Use "make maintainer-clean" (on a build machine) before svn commits, +# but not for distribution +MAINTAINERCLEANFILES = Makefile.in diff --git a/v2.6/generators/nlojet++/interface/check/fnlo-compare-tables.py b/v2.6/generators/nlojet++/interface/check/fnlo-compare-tables.py new file mode 100755 index 0000000000000000000000000000000000000000..287ca83587134acf287a5efec304491252f2acfd --- /dev/null +++ b/v2.6/generators/nlojet++/interface/check/fnlo-compare-tables.py @@ -0,0 +1,71 @@ +#!/usr/bin/env python3 + +import sys +import os + +try: + import fastnlo as fnlo +except ModuleNotFoundError: + print("fastNLO Python extension not found") + sys.exit(77) + +LIBDIR = os.environ["LIBDIR"] +DATADIR = f"{os.path.dirname(os.path.abspath(__file__))}/../data/check/" + +TABLE_TYPE = ["fix", "flex"] +NODE_COUNTING = ["NodesPerBin", "NodeDensity"] +DISTANCE_MEASURE = ["slx", "lgx"] +SEED = [1000, 2000] + +# fnlo.SetGlobalVerbosity(fnlo.DEBUG) + +os.system("rm -rf output") +os.system(f"ln -sf {DATADIR}InclusiveNJets_InclusiveJets_fix.wrm InclusiveNJets_InclusiveJets_fix_slx.wrm") +os.system(f"ln -sf {DATADIR}InclusiveNJets_InclusiveJets_fix.wrm InclusiveNJets_InclusiveJets_fix_lgx.wrm") +os.system(f"ln -sf {DATADIR}InclusiveNJets_InclusiveJets_flex.wrm InclusiveNJets_InclusiveJets_flex_slx.wrm") +os.system(f"ln -sf {DATADIR}InclusiveNJets_InclusiveJets_flex.wrm InclusiveNJets_InclusiveJets_flex_lgx.wrm") + + +def generate_table(table_type: str, distance_measure: str, node_counting: str, seed: int): + os.system(f"ln -sf {DATADIR}{table_type}_{distance_measure}_{node_counting}.str InclusiveNJets.str") + print(f"Asserting that steering file InclusiveNJets.str -> {DATADIR}{table_type}_{distance_measure}_{node_counting}.str exists") + assert os.path.exists("InclusiveNJets.str") + os.system( + "nlojet++ " + "--calculate " + "-c born " + f"-s {seed} " + f"--name {table_type}_{distance_measure}_{node_counting}_{seed:06d} " + f" -u {LIBDIR}/fastnlo_interface_nlojet/libInclusiveNJets.la " + "--max-event 10000 " + "--save-after 10000 " + ) + expected_outfile = "output/run-hhc-born-2jet.tab.gz" + print(f"Asserting that there is a table under {expected_outfile}") + assert os.path.exists(expected_outfile) + os.system(f"mv {expected_outfile} output/{table_type}_{distance_measure}_{node_counting}_{seed:06d}.tab.gz") + + +for table_type in TABLE_TYPE: + for distance_measure in DISTANCE_MEASURE: + for node_counting in NODE_COUNTING: + for seed in SEED: + generate_table(table_type, distance_measure, node_counting, seed) + os.system( + f"fnlo-tk-merge2 output/{table_type}_{distance_measure}_{node_counting}_??????.tab.gz " + f"output/{table_type}_{distance_measure}_{node_counting}_merged.tab.gz") + + for seed in SEED: + filename_0 = f"output/{table_type}_{distance_measure}_{NODE_COUNTING[0]}_{seed:06d}.tab.gz" + filename_1 = f"output/{table_type}_{distance_measure}_{NODE_COUNTING[1]}_{seed:06d}.tab.gz" + table_0 = fnlo.fastNLOTable(filename_0) + table_1 = fnlo.fastNLOTable(filename_1) + print(f"Asserting equal: {filename_0} <-> {filename_1}") + assert table_0.IsEquivalent(table_1, 1e-8) + + filename_0 = f"output/{table_type}_{distance_measure}_{NODE_COUNTING[0]}_merged.tab.gz" + filename_1 = f"output/{table_type}_{distance_measure}_{NODE_COUNTING[1]}_merged.tab.gz" + table_0_merged = fnlo.fastNLOTable(filename_0) + table_1_merged = fnlo.fastNLOTable(filename_1) + print(f"Asserting equal: {filename_0} <-> {filename_1}") + assert table_0_merged.IsEquivalent(table_1_merged, 1e-8) diff --git a/v2.6/generators/nlojet++/interface/check/fnlo-nj-lotest.pl.in b/v2.6/generators/nlojet++/interface/check/fnlo-nj-lotest.pl.in new file mode 100755 index 0000000000000000000000000000000000000000..96b1ea9387337cf2ce73a039a7f8d56db96e48d1 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/check/fnlo-nj-lotest.pl.in @@ -0,0 +1,83 @@ +#!/usr/bin/env perl +# +# Unit test to produce a LO fastNLO table for a NLOjet++ scenario +# Version: +# +# created by K. Rabbertz: 23.10.2016 +# +#----------------------------------------------------------------------- +# +use Cwd; +use English; +use Getopt::Std; +use strict; +use warnings; + +# Define source dir as required for VPATH builds like in make distcheck +my $src = "@srcdir@"; + +# Remove potentially left-over temporary files +my $tabb = "fnr0001midpHT_I723509_v23_fix"; +my $steer = ${tabb}.".str"; +my $tabl = ${tabb}."-hhc-born-2jet.tab"; +my $tabgz = ${tabl}.".gz"; +my $tabw = "InclusiveNJets_".${tabb}.".wrm"; + +foreach my $file ( $steer, $tabw, $tabl, $tabgz, "InclusiveNJets.str", "lodiff.log" ) { + if ( -e $file || -l $file ) { + system("rm -f $file"); + } +} +if ( -e "output/${tabl}" ) {system("rm -f output/${tabl}");} + +# Prepare test setup +# Copy defaults from data/check storage +my $cmd = "cp -f ${src}/../data/check/steer.str ${steer}"; +print "Executing command: $cmd\n"; +my $ret = system("$cmd"); +if ( $ret ) {die "fnlo-nj-lotest: Copying test steering steer.str failed: $ret, aborted!\n";} +$cmd = "ln -s ${steer} InclusiveNJets.str"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret ) {die "fnlo-nj-lotest: Linking test steering ${steer} failed: $ret, aborted!\n";} +$cmd = "fnlo-tk-config --libdir"; +print "Executing command: $cmd\n"; +my $libdir = `fnlo-tk-config --libdir`; +if ( $ret ) {die "fnlo-nj-lotest: Determining lib dir failed: $ret, aborted!\n";} +chomp $libdir; +$cmd = "cp -f ${src}/../data/check/warmup.txt ${tabw}"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret ) {die "fnlo-nj-lotest: Copying test warmup.txt failed: $ret, aborted!\n";} +$cmd = "cp -f ${src}/../data/check/born.tab.gz ${tabgz}"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-lotest: Copying LO table born.tab.gz failed: $ret, aborted!\n";} +$cmd = "gunzip ${tabgz}"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-lotest: Ungzipping test table ${tabgz} failed: $ret, aborted!\n";} + +# Produce LO table +$cmd = "nlojet++ --calculate -cborn -n fnr0001midpHT_I723509_v23_fix -u ${libdir}/fastnlo_interface_nlojet/libInclusiveNJets.la --max-event=10000 --save-after=1000 -s 12345"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret ) {die "fnlo-nj-lotest: Producing LO table for test scenario failed: $ret, aborted!\n";} +$cmd = "gunzip output/${tabgz}"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-nlotest: Ungzipping test table ${tabgz} failed: $ret, aborted!\n";} + +# Determine difference to default LO table +$cmd = "${src}/../data/check/compare-table-helper.py ./${tabl} output/${tabl} > lodiff.log"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret == 77 ) { + print "fnlo-nj-lotest: Skipping LO production unit test."; + exit 77; +} +if ( $ret ) {die "fnlo-nj-lotest: LO table production unit test failed, results are different!\n";} + +print "fnlo-nj-lotest: LO table production unit test passed.\n"; + +exit 0; diff --git a/v2.6/generators/nlojet++/interface/check/fnlo-nj-nlotest.pl.in b/v2.6/generators/nlojet++/interface/check/fnlo-nj-nlotest.pl.in new file mode 100755 index 0000000000000000000000000000000000000000..3ea7072a76301f117fd5464eafb60a459b45d59e --- /dev/null +++ b/v2.6/generators/nlojet++/interface/check/fnlo-nj-nlotest.pl.in @@ -0,0 +1,83 @@ +#!/usr/bin/env perl +# +# Unit test to produce a NLO fastNLO table for a NLOjet++ scenario +# Version: +# +# created by K. Rabbertz: 23.10.2016 +# +#----------------------------------------------------------------------- +# +use Cwd; +use English; +use Getopt::Std; +use strict; +use warnings; + +# Define source dir as required for VPATH builds like in make distcheck +my $src = "@srcdir@"; + +# Remove potentially left-over temporary files +my $tabb = "fnr0001midpHT_I723509_v23_fix"; +my $steer = ${tabb}.".str"; +my $tabn = ${tabb}."-hhc-nlo-2jet.tab"; +my $tabgz = ${tabn}.".gz"; +my $tabw = "InclusiveNJets_".${tabb}.".wrm"; + +foreach my $file ( $steer, $tabw, $tabn, $tabgz, "InclusiveNJets.str", "nlodiff.log" ) { + if ( -e $file || -l $file ) { + system("rm -f $file"); + } +} +if ( -e "output/${tabn}" ) {system("rm -f output/${tabn}");} + +# Prepare test setup +# Copy defaults from data/check storage +my $cmd = "cp -f ${src}/../data/check/steer.str ${steer}"; +print "Executing command: $cmd\n"; +my $ret = system("$cmd"); +if ( $ret ) {die "fnlo-nj-nlotest: Copying test steering steer.str failed: $ret, aborted!\n";} +$cmd = "ln -s ${steer} InclusiveNJets.str"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret ) {die "fnlo-nj-nlotest: Linking test steering ${steer} failed: $ret, aborted!\n";} +$cmd = "fnlo-tk-config --libdir"; +print "Executing command: $cmd\n"; +my $libdir = `fnlo-tk-config --libdir`; +if ( $ret ) {die "fnlo-nj-nlotest: Determining lib dir failed: $ret, aborted!\n";} +chomp $libdir; +$cmd = "cp -f ${src}/../data/check/warmup.txt ${tabw}"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret ) {die "fnlo-nj-nlotest: Copying test warmup.txt failed: $ret, aborted!\n";} +$cmd = "cp -f ${src}/../data/check/nlo.tab.gz ${tabgz}"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-nlotest: Copying NLO table nlo.tab.gz failed: $ret, aborted!\n";} +$cmd = "gunzip ${tabgz}"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-nlotest: Ungzipping test table ${tabgz} failed: $ret, aborted!\n";} + +# Produce NLO table +$cmd = "nlojet++ --calculate -cnlo -n fnr0001midpHT_I723509_v23_fix -u ${libdir}/fastnlo_interface_nlojet/libInclusiveNJets.la --max-event=10000 --save-after=1000 -s 12345"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret ) {die "fnlo-nj-nlotest: Producing NLO table for test scenario failed: $ret, aborted!\n";} +$cmd = "gunzip output/${tabgz}"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-nlotest: Ungzipping test table ${tabgz} failed: $ret, aborted!\n";} + +# Determine difference to default NLO table +$cmd = "${src}/../data/check/compare-table-helper.py ./${tabn} output/${tabn} > lodiff.log"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret == 77 ) { + print "fnlo-nj-lotest: Skipping LO production unit test."; + exit 77; +} +if ( $ret ) {die "fnlo-nj-lotest: NLO table production unit test failed, results are different!\n";} + +print "fnlo-nj-nlotest: NLO table production unit test passed.\n"; + +exit 0; diff --git a/v2.6/generators/nlojet++/interface/check/fnlo-nj-wrmtest.pl.in b/v2.6/generators/nlojet++/interface/check/fnlo-nj-wrmtest.pl.in new file mode 100644 index 0000000000000000000000000000000000000000..ab5fff89b059de91fe1f6c448eabf2b9157096fe --- /dev/null +++ b/v2.6/generators/nlojet++/interface/check/fnlo-nj-wrmtest.pl.in @@ -0,0 +1,69 @@ +#!/usr/bin/env perl +# +# Unit test to produce a warmup file for a NLOjet++ scenario +# Version: +# +# created by K. Rabbertz: 23.10.2016 +# +#----------------------------------------------------------------------- +# +use Cwd; +use English; +use Getopt::Std; +use strict; +use warnings; + +# Define source dir as required for VPATH builds like in make distcheck +my $src = "@srcdir@"; + +# Remove potentially left-over temporary files +my $tabb = "fnr0001midpHT_I723509_v23_fix"; +my $steer = ${tabb}.".str"; +my $tabw = "InclusiveNJets_".${tabb}.".wrm"; + +foreach my $file ( $steer, $tabw, "InclusiveNJets.str", "wrmdiff.log" ) { + if ( -e $file || -l $file ) { + system("rm -f $file"); + } +} + +# Prepare test setup +# Copy defaults from data/check storage +my $cmd = "cp -f ${src}/../data/check/steer.str ${steer}"; +print "Executing command: $cmd\n"; +my $ret = system("$cmd"); +if ( $ret ) {die "fnlo-nj-wrmtest: Copying test steering steer.str failed: $ret, aborted!\n";} +$cmd = "ln -s ${steer} InclusiveNJets.str"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret ) {die "fnlo-nj-wrmtest: Linking test steering ${steer} failed: $ret, aborted!\n";} +$cmd = "fnlo-tk-config --libdir"; +print "Executing command: $cmd\n"; +my $libdir = `fnlo-tk-config --libdir`; +if ( $ret ) {die "fnlo-nj-wrmtest: Determining lib dir failed: $ret, aborted!\n";} +chomp $libdir; + +# Produce warmup file +$cmd = "nlojet++ --calculate -cnlo -n fnr0001midpHT_I723509_v23_fix -u ${libdir}/fastnlo_interface_nlojet/libInclusiveNJets.la --max-event=10000 --save-after=1000 -s 12345"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret ) {die "fnlo-nj-wrmtest: Producing warmup table for test scenario failed: $ret, aborted!\n";} + +# Determine difference to default warmup table +$cmd = "diff ${src}/../data/check/warmup.txt ${tabw} > wrmdiff.log"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret ) {die "fnlo-nj-wrmtest: Result comparison with 'diff' failed: $ret, aborted!\n";} + +# The diff.log must be empty +if ( ! -z "wrmdiff.log" ) { + print "fnlo-nj-wrmtest: Warmup test table differs from default:\n"; + $cmd = "cat wrmdiff.log"; + print "Executing command: $cmd\n"; + $ret = system("$cmd"); + die "fnlo-nj-wrmtest: Warmup table production unit test failed, please fix!\n"; +} + +print "fnlo-nj-wrmtest: Warmup table production unit test passed.\n"; + +exit 0; diff --git a/v2.6/generators/nlojet++/interface/data/.gitignore b/v2.6/generators/nlojet++/interface/data/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..4ccb68f6c24d8744f176e5e1d797375b2ffe4862 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/.gitignore @@ -0,0 +1,2 @@ +# Ignore temporary files +Steering.tar.gz diff --git a/v2.6/generators/nlojet++/interface/data/AzimuthalDecorrelation/Makefile.am b/v2.6/generators/nlojet++/interface/data/AzimuthalDecorrelation/Makefile.am new file mode 100644 index 0000000000000000000000000000000000000000..571eb28232d3952da7f88012f03a75fee8ca616f --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/AzimuthalDecorrelation/Makefile.am @@ -0,0 +1,17 @@ +# -*- Automake -*- +# ----------------------------------------------------------------------------- +# +# K. Rabbertz, 17.01.2015 +# +# NLOJet++ interface to fastNLO toolkit +# +# ----------------------------------------------------------------------------- +# Use GNU standards +AUTOMAKE_OPTIONS = gnu + +# Files that are required to build the project but that can be +# recreated IF the necessary autotools etc. are available by: +# "autoreconf -i; ./configure" +# Use "make maintainer-clean" (on a build machine) before svn commits, +# but NOT before distribution with "make dist"! +MAINTAINERCLEANFILES = Makefile.in diff --git a/v2.6/generators/nlojet++/interface/data/AzimuthalDecorrelation/fnl2522diffb_I885663_v23_fix.str b/v2.6/generators/nlojet++/interface/data/AzimuthalDecorrelation/fnl2522diffb_I885663_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..74a973ea51f03728fcf9c953f4de2207571313d2 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/AzimuthalDecorrelation/fnl2522diffb_I885663_v23_fix.str @@ -0,0 +1,171 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl2522diffb_I885663_v23_fix +ScenarioDescription { + "dsigma-dijet_dDeltaPhi_1,2_[nb]" + "CMS_Collaboration" + "Azimuthal_Decorrelation" + "anti-kT_R=0.5" + "CMS-PAS-QCD-10-026, arXiv:1101:5029, Phys. Rev. Lett. 106 (2011) 122003." + "RIVET_ID=CMS_2011_S8950903/D01-x01-y01,SPIRES_ID=8950903,INSPIRE_RECORD=885663" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 9 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.5 # Jet size parameter: Required for all jets +ptjmin 30. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 5.0 # Maximal jet rapidity +Njetmin 2 # Minimal number of jets required to be in preselected phase space +ycjjmax 1.1 # Maximal jet rapidity for leading two jets and further central jets + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 3 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "pT_max_[GeV]" # This defines the observables to be calculated! + "DeltaPhi_1,2" +} +DimensionIsDifferential { # Specify for each dimension whether + 0 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 1. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "pT_max_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "<pT_1,2>_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 80. 110. 1.5707963 1.6493361 1.7278760 1.8064158 1.8849556 1.9634954 2.0420352 2.1205750 2.1991149 2.2776547 2.3561945 2.4347343 2.5132741 2.5918139 2.6703538 2.7488936 2.8274334 2.9059732 2.9845130 3.0630528 3.1415927 + 110. 140. 1.5707963 1.6493361 1.7278760 1.8064158 1.8849556 1.9634954 2.0420352 2.1205750 2.1991149 2.2776547 2.3561945 2.4347343 2.5132741 2.5918139 2.6703538 2.7488936 2.8274334 2.9059732 2.9845130 3.0630528 3.1415927 + 140. 200. 1.5707963 1.6493361 1.7278760 1.8064158 1.8849556 1.9634954 2.0420352 2.1205750 2.1991149 2.2776547 2.3561945 2.4347343 2.5132741 2.5918139 2.6703538 2.7488936 2.8274334 2.9059732 2.9845130 3.0630528 3.1415927 + 200. 300. 1.5707963 1.6493361 1.7278760 1.8064158 1.8849556 1.9634954 2.0420352 2.1205750 2.1991149 2.2776547 2.3561945 2.4347343 2.5132741 2.5918139 2.6703538 2.7488936 2.8274334 2.9059732 2.9845130 3.0630528 3.1415927 + 300. 1000. 1.5707963 1.6493361 1.7278760 1.8064158 1.8849556 1.9634954 2.0420352 2.1205750 2.1991149 2.2776547 2.3561945 2.4347343 2.5132741 2.5918139 2.6703538 2.7488936 2.8274334 2.9059732 2.9845130 3.0630528 3.1415927 +}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 7000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJetEvents.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck true # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 20 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/AzimuthalDecorrelation/fnl2522normb_I885663_v23_fix.str b/v2.6/generators/nlojet++/interface/data/AzimuthalDecorrelation/fnl2522normb_I885663_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..33ea8fc3112c2e346d4a6db684376a0914080f86 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/AzimuthalDecorrelation/fnl2522normb_I885663_v23_fix.str @@ -0,0 +1,165 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl2522normb_I885663_v23_fix +ScenarioDescription { + "sigma-dijet_pT_max_[nb]" + "CMS_Collaboration" + "Azimuthal_Decorrelation" + "anti-kT_R=0.5" + "CMS-PAS-QCD-10-026, arXiv:1101:5029, Phys. Rev. Lett. 106 (2011) 122003." + "RIVET_ID=CMS_2011_S8950903/D01-x01-y01,SPIRES_ID=8950903,INSPIRE_RECORD=885663" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 9 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.5 # Jet size parameter: Required for all jets +ptjmin 30. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 5.0 # Maximal jet rapidity +Njetmin 2 # Minimal number of jets required to be in preselected phase space +ycjjmax 1.1 # Maximal jet rapidity for leading two jets and further central jets + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 1 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "pT_max_[GeV]" # This defines the observables to be calculated! +} +DimensionIsDifferential { # Specify for each dimension whether + 0 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 1. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "pT_max_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "<pT_1,2>_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +SingleDifferentialBinning { + 80. 110. 140. 200. 300. 1000. +} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 7000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJetEvents.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 20 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/DijetAngular/Makefile.am b/v2.6/generators/nlojet++/interface/data/DijetAngular/Makefile.am new file mode 100644 index 0000000000000000000000000000000000000000..571eb28232d3952da7f88012f03a75fee8ca616f --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/DijetAngular/Makefile.am @@ -0,0 +1,17 @@ +# -*- Automake -*- +# ----------------------------------------------------------------------------- +# +# K. Rabbertz, 17.01.2015 +# +# NLOJet++ interface to fastNLO toolkit +# +# ----------------------------------------------------------------------------- +# Use GNU standards +AUTOMAKE_OPTIONS = gnu + +# Files that are required to build the project but that can be +# recreated IF the necessary autotools etc. are available by: +# "autoreconf -i; ./configure" +# Use "make maintainer-clean" (on a build machine) before svn commits, +# but NOT before distribution with "make dist"! +MAINTAINERCLEANFILES = Makefile.in diff --git a/v2.6/generators/nlojet++/interface/data/DijetAngular/fnl2622f_I1090423_v23_fix.str b/v2.6/generators/nlojet++/interface/data/DijetAngular/fnl2622f_I1090423_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..730b78d03c21c793e3b7bae81bd89744055b1c42 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/DijetAngular/fnl2622f_I1090423_v23_fix.str @@ -0,0 +1,177 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl2622f_I1090423_v23_fix +ScenarioDescription { + "d2sigma-dijet_dChi_dMjj_[pb_GeV]" + "CMS_Collaboration" + "Dijet_Chi" + "anti-kT_R=0.5" + "CMS-PAPER-EXO-11-017, arXiv:1202.5535, JHEP 05 (2012) 055." + "RIVET_ID=CMS_2012_I1090423/D01-x01-y01,SPIRES_ID=9389105,INSPIRE_RECORD=1090423" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.5 # Jet size parameter: Required for all jets +ptjmin 1. # Minimal jet pT (minimum set in fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 5.0 # Maximal jet rapidity +Njetmin 2 # Minimal number of jets required to be in preselected phase space +ycjjmax 2.5 # Maximal jet rapidity for leading two jets +yboostmax 1.11 # Maximal |yb| = |y1+y2|/2 +ystarmax 1.5 # Maximal y* = |y1-y2|/2 + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "Mjj_[GeV]" # This defines the observables to be calculated! + "Chi" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 1. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "<pT_1,2>_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "Mjj/2_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 400. 600. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 12. 14. 16. + 600. 800. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 12. 14. 16. + 800. 1000. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 12. 14. 16. + 1000. 1200. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 12. 14. 16. + 1200. 1500. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 12. 14. 16. + 1500. 1900. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 12. 14. 16. + 1900. 2400. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 12. 14. 16. + 2400. 3000. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 12. 14. 16. + 3000. 4000. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 12. 14. 16. +}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 7000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJetEvents.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/DijetAngular/fnl2622f_I1090423_v23_flex.str b/v2.6/generators/nlojet++/interface/data/DijetAngular/fnl2622f_I1090423_v23_flex.str new file mode 100644 index 0000000000000000000000000000000000000000..330bb4c31506aad6657123d1e4baf296f0120b51 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/DijetAngular/fnl2622f_I1090423_v23_flex.str @@ -0,0 +1,177 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl2622f_I1090423_v23_flex +ScenarioDescription { + "d2sigma-dijet_dChi_dMjj_[pb_GeV]" + "CMS_Collaboration" + "Dijet_Chi" + "anti-kT_R=0.5" + "CMS-PAPER-EXO-11-017, arXiv:1202.5535, JHEP 05 (2012) 055." + "RIVET_ID=CMS_2012_I1090423/D01-x01-y01,SPIRES_ID=9389105,INSPIRE_RECORD=1090423" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.5 # Jet size parameter: Required for all jets +ptjmin 1. # Minimal jet pT (minimum set in fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 5.0 # Maximal jet rapidity +Njetmin 2 # Minimal number of jets required to be in preselected phase space +ycjjmax 2.5 # Maximal jet rapidity for leading two jets +yboostmax 1.11 # Maximal |yb| = |y1+y2|/2 +ystarmax 1.5 # Maximal y* = |y1-y2|/2 + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "Mjj_[GeV]" # This defines the observables to be calculated! + "Chi" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 1. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "<pT_1,2>_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "Mjj/2_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 400. 600. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 12. 14. 16. + 600. 800. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 12. 14. 16. + 800. 1000. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 12. 14. 16. + 1000. 1200. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 12. 14. 16. + 1200. 1500. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 12. 14. 16. + 1500. 1900. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 12. 14. 16. + 1900. 2400. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 12. 14. 16. + 2400. 3000. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 12. 14. 16. + 3000. 4000. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 12. 14. 16. +}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 7000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJetEvents.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable true # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/DijetMass/Makefile.am b/v2.6/generators/nlojet++/interface/data/DijetMass/Makefile.am new file mode 100644 index 0000000000000000000000000000000000000000..571eb28232d3952da7f88012f03a75fee8ca616f --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/DijetMass/Makefile.am @@ -0,0 +1,17 @@ +# -*- Automake -*- +# ----------------------------------------------------------------------------- +# +# K. Rabbertz, 17.01.2015 +# +# NLOJet++ interface to fastNLO toolkit +# +# ----------------------------------------------------------------------------- +# Use GNU standards +AUTOMAKE_OPTIONS = gnu + +# Files that are required to build the project but that can be +# recreated IF the necessary autotools etc. are available by: +# "autoreconf -i; ./configure" +# Use "make maintainer-clean" (on a build machine) before svn commits, +# but NOT before distribution with "make dist"! +MAINTAINERCLEANFILES = Makefile.in diff --git a/v2.6/generators/nlojet++/interface/data/DijetMass/fnl2412c_I895742_v23_fix.str b/v2.6/generators/nlojet++/interface/data/DijetMass/fnl2412c_I895742_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..0816a167c83f1e257d3072cd1ef461ee64ecfa77 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/DijetMass/fnl2412c_I895742_v23_fix.str @@ -0,0 +1,171 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl2412c_I895742_v23_fix +ScenarioDescription { + "d2sigma-dijet_dMjj_dy_max_[fb_GeV]" + "CMS_Collaboration" + "Dijet_Mass" + "anti-kT_R=0.7" + "CMS-PAPER-QCD-10-025, arXiv:1104.1693, Phys. Lett. B 700 (2011) 187." + "RIVET_ID=CMS_2011_I895742/D01-x01-y01,SPIRES_ID=9029460,INSPIRE_RECORD=895742" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 15 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.7 # Jet size parameter: Required for all jets +ptjmin 30. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 3.0 # Maximal jet rapidity +Njetmin 2 # Minimal number of jets required to be in preselected phase space +ptj1min 60. # Minimal jet pT for leading jet + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "|y_max|" # This defines the observables to be calculated! + "Mjj_[GeV]" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 2. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "<pT_1,2>_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "Mjj/2_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.5 156. 176. 197. 220. 244. 270. 296. 325. 354. 386. 419. 453. 489. 526. 565. 606. 649. 693. 740. 788. 838. 890. 944. 1000. 1118. 1246. 1383. 1530. 1687. 1856. 2037. 2332. 2659. + 0.5 1.0 197. 220. 244. 270. 296. 325. 354. 386. 419. 453. 489. 526. 565. 606. 649. 693. 740. 788. 838. 890. 944. 1000. 1118. 1246. 1383. 1530. 1687. 1856. 2037. 2332. 2659. 3019. + 1.0 1.5 386. 419. 453. 489. 526. 565. 606. 649. 693. 740. 788. 838. 890. 944. 1000. 1118. 1246. 1383. 1530. 1687. 1856. 2037. 2332. 2659. 3019. + 1.5 2.0 565. 606. 649. 693. 740. 788. 838. 890. 944. 1000. 1118. 1246. 1383. 1530. 1687. 1856. 2037. 2332. 2659. 3019. 3854. + 2.0 2.5 649. 693. 740. 788. 838. 890. 944. 1000. 1118. 1246. 1383. 1530. 1687. 1856. 2037. 2332. 2659. 3019. 3854. +}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 7000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJetEvents.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/DijetMass/fnl2412c_I895742_v23_flex.str b/v2.6/generators/nlojet++/interface/data/DijetMass/fnl2412c_I895742_v23_flex.str new file mode 100644 index 0000000000000000000000000000000000000000..c0184f52eef5c833cba4dfb839b5b2da24aff859 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/DijetMass/fnl2412c_I895742_v23_flex.str @@ -0,0 +1,171 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl2412c_I895742_v23_flex +ScenarioDescription { + "d2sigma-dijet_dMjj_dy_max_[fb_GeV]" + "CMS_Collaboration" + "Dijet_Mass" + "anti-kT_R=0.7" + "CMS-PAPER-QCD-10-025, arXiv:1104.1693, Phys. Lett. B 700 (2011) 187." + "RIVET_ID=CMS_2011_I895742/D01-x01-y01,SPIRES_ID=9029460,INSPIRE_RECORD=895742" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 15 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.7 # Jet size parameter: Required for all jets +ptjmin 30. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 3.0 # Maximal jet rapidity +Njetmin 2 # Minimal number of jets required to be in preselected phase space +ptj1min 60. # Minimal jet pT for leading jet + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "|y_max|" # This defines the observables to be calculated! + "Mjj_[GeV]" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 2. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "<pT_1,2>_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "Mjj/2_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.5 156. 176. 197. 220. 244. 270. 296. 325. 354. 386. 419. 453. 489. 526. 565. 606. 649. 693. 740. 788. 838. 890. 944. 1000. 1118. 1246. 1383. 1530. 1687. 1856. 2037. 2332. 2659. + 0.5 1.0 197. 220. 244. 270. 296. 325. 354. 386. 419. 453. 489. 526. 565. 606. 649. 693. 740. 788. 838. 890. 944. 1000. 1118. 1246. 1383. 1530. 1687. 1856. 2037. 2332. 2659. 3019. + 1.0 1.5 386. 419. 453. 489. 526. 565. 606. 649. 693. 740. 788. 838. 890. 944. 1000. 1118. 1246. 1383. 1530. 1687. 1856. 2037. 2332. 2659. 3019. + 1.5 2.0 565. 606. 649. 693. 740. 788. 838. 890. 944. 1000. 1118. 1246. 1383. 1530. 1687. 1856. 2037. 2332. 2659. 3019. 3854. + 2.0 2.5 649. 693. 740. 788. 838. 890. 944. 1000. 1118. 1246. 1383. 1530. 1687. 1856. 2037. 2332. 2659. 3019. 3854. +}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 7000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJetEvents.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable true # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/DijetMass/fnl2412e_I1208923_v23_fix.str b/v2.6/generators/nlojet++/interface/data/DijetMass/fnl2412e_I1208923_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..abc2da041d3f90ae711744c8e1cb3e3230c8d751 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/DijetMass/fnl2412e_I1208923_v23_fix.str @@ -0,0 +1,171 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl2412e_I1208923_v23_fix +ScenarioDescription { + "d2sigma-dijet_dMjj_dy_max_[pb_GeV]" + "CMS_Collaboration" + "Dijet_Mass" + "anti-kT_R=0.7" + "CMS-PAPER-QCD-11-004, arXiv:1212.6660, Phys. Rev. D 87 (2013) 112002." + "RIVET_ID=CMS_2013_I1208923/D06-x01-y01,SPIRES_ID=9901922,INSPIRE_RECORD=1208923" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.7 # Jet size parameter: Required for all jets +ptjmin 30. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 3.0 # Maximal jet rapidity +Njetmin 2 # Minimal number of jets required to be in preselected phase space +ptj1min 60. # Minimal jet pT for leading jet + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "|y_max|" # This defines the observables to be calculated! + "Mjj_[GeV]" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 2. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "<pT_1,2>_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "Mjj/2_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.5 197. 296. 419. 565. 740. 944. 1181. 1455. 1770. 2132. 2546. 3019. 3416. 4010. + 0.5 1.0 270. 386. 526. 693. 890. 1118. 1383. 1687. 2037. 2438. 2895. 3416. 4010. + 1.0 1.5 419. 565. 740. 944. 1181. 1455. 1770. 2132. 2546. 3147. 3854. 4509. + 1.5 2.0 565. 740. 944. 1181. 1455. 1770. 2132. 2546. 3019. 3558. 5058. + 2.0 2.5 1000. 1246. 1530. 1856. 2231. 2659. 3147. 3704. 5058. +}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 7000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJetEvents.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/DijetMass/fnl2412e_I1208923_v23_flex.str b/v2.6/generators/nlojet++/interface/data/DijetMass/fnl2412e_I1208923_v23_flex.str new file mode 100644 index 0000000000000000000000000000000000000000..8750672f00ed44cb0991215b39b1b206b5c260e0 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/DijetMass/fnl2412e_I1208923_v23_flex.str @@ -0,0 +1,171 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl2412e_I1208923_v23_flex +ScenarioDescription { + "d2sigma-dijet_dMjj_dy_max_[pb_GeV]" + "CMS_Collaboration" + "Dijet_Mass" + "anti-kT_R=0.7" + "CMS-PAPER-QCD-11-004, arXiv:1212.6660, Phys. Rev. D 87 (2013) 112002." + "RIVET_ID=CMS_2013_I1208923/D06-x01-y01,SPIRES_ID=9901922,INSPIRE_RECORD=1208923" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.7 # Jet size parameter: Required for all jets +ptjmin 30. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 3.0 # Maximal jet rapidity +Njetmin 2 # Minimal number of jets required to be in preselected phase space +ptj1min 60. # Minimal jet pT for leading jet + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "|y_max|" # This defines the observables to be calculated! + "Mjj_[GeV]" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 2. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "<pT_1,2>_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "Mjj/2_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.5 197. 296. 419. 565. 740. 944. 1181. 1455. 1770. 2132. 2546. 3019. 3416. 4010. + 0.5 1.0 270. 386. 526. 693. 890. 1118. 1383. 1687. 2037. 2438. 2895. 3416. 4010. + 1.0 1.5 419. 565. 740. 944. 1181. 1455. 1770. 2132. 2546. 3147. 3854. 4509. + 1.5 2.0 565. 740. 944. 1181. 1455. 1770. 2132. 2546. 3019. 3558. 5058. + 2.0 2.5 1000. 1246. 1530. 1856. 2231. 2659. 3147. 3704. 5058. +}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 7000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJetEvents.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable true # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/DijetMass/fnl2452_I1082936_v23_fix.str b/v2.6/generators/nlojet++/interface/data/DijetMass/fnl2452_I1082936_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..9516dffaf49ef83d9475369618d3f33a99d5f87c --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/DijetMass/fnl2452_I1082936_v23_fix.str @@ -0,0 +1,175 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl2452_I1082936_v23_fix +ScenarioDescription { + "d2sigma-dijet_dm12_dy*_[pb_TeV]" + "ATLAS_Collaboration" + "Dijet_Mass" + "anti-kT_R=0.6" + "ATLAS-STDM-2011-02, arXiv:1112.6297, Phys. Rev. D 86 (2012) 014022." + "RIVET_ID=ATLAS_2012_I1082936/d02-x01-Y01,SPIRES_ID=9320911,INSPIRE_RECORD=1082936" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.6 # Jet size parameter: Required for all jets +ptjmin 20. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 4.4 # Maximal jet rapidity +Njetmin 2 # Minimal number of jets required to be in preselected phase space +ptj1min 30. # Minimal jet pT for leading jet + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "y_star" # This defines the observables to be calculated! + "Mjj_[TeV]" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 1. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "<pT_1,2>_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "exp(0.3*y_star)"# Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.5 0.07 0.11 0.16 0.21 0.26 0.31 0.37 0.44 0.51 0.59 0.67 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.94 2.78 + 0.5 1.0 0.11 0.16 0.21 0.26 0.31 0.37 0.44 0.51 0.59 0.67 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.76 2.12 3.31 + 1.0 1.5 0.16 0.21 0.26 0.31 0.37 0.44 0.51 0.59 0.67 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.76 1.94 2.12 2.55 3.61 + 1.5 2.0 0.26 0.31 0.37 0.44 0.51 0.59 0.67 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.76 1.94 2.12 2.33 2.78 3.93 + 2.0 2.5 0.37 0.44 0.51 0.59 0.67 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.76 1.94 2.12 2.33 2.55 3.04 4.27 + 2.5 3.0 0.67 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.76 1.94 2.12 2.33 2.55 2.78 3.31 4.64 + 3.0 3.5 1.18 1.31 1.45 1.60 1.76 1.94 2.12 2.33 2.55 2.78 3.04 3.61 5.04 + 3.5 4.0 1.76 1.94 2.12 2.33 2.55 2.78 3.04 3.31 3.93 5.47 + 4.0 4.4 2.55 3.04 4.27 +}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 7000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJetEvents.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/DijetMass/fnl2452_I1082936_v23_fix_ptmax.str b/v2.6/generators/nlojet++/interface/data/DijetMass/fnl2452_I1082936_v23_fix_ptmax.str new file mode 100644 index 0000000000000000000000000000000000000000..131d531f2a52052bd5ca8509dcebe7664701f57b --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/DijetMass/fnl2452_I1082936_v23_fix_ptmax.str @@ -0,0 +1,175 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl2452_I1082936_v23_fix_ptmax +ScenarioDescription { + "d2sigma-dijet_dm12_dy*_[pb_TeV]" + "ATLAS_Collaboration" + "Dijet_Mass" + "anti-kT_R=0.6" + "ATLAS-STDM-2011-02, arXiv:1112.6297, Phys. Rev. D 86 (2012) 014022." + "RIVET_ID=ATLAS_2012_I1082936/d02-x01-Y01,SPIRES_ID=9320911,INSPIRE_RECORD=1082936" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.6 # Jet size parameter: Required for all jets +ptjmin 20. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 4.4 # Maximal jet rapidity +Njetmin 2 # Minimal number of jets required to be in preselected phase space +ptj1min 30. # Minimal jet pT for leading jet + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "y_star" # This defines the observables to be calculated! + "Mjj_[TeV]" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 1. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "pT_max_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "exp(0.3*y_star)"# Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.5 0.07 0.11 0.16 0.21 0.26 0.31 0.37 0.44 0.51 0.59 0.67 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.94 2.78 + 0.5 1.0 0.11 0.16 0.21 0.26 0.31 0.37 0.44 0.51 0.59 0.67 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.76 2.12 3.31 + 1.0 1.5 0.16 0.21 0.26 0.31 0.37 0.44 0.51 0.59 0.67 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.76 1.94 2.12 2.55 3.61 + 1.5 2.0 0.26 0.31 0.37 0.44 0.51 0.59 0.67 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.76 1.94 2.12 2.33 2.78 3.93 + 2.0 2.5 0.37 0.44 0.51 0.59 0.67 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.76 1.94 2.12 2.33 2.55 3.04 4.27 + 2.5 3.0 0.67 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.76 1.94 2.12 2.33 2.55 2.78 3.31 4.64 + 3.0 3.5 1.18 1.31 1.45 1.60 1.76 1.94 2.12 2.33 2.55 2.78 3.04 3.61 5.04 + 3.5 4.0 1.76 1.94 2.12 2.33 2.55 2.78 3.04 3.31 3.93 5.47 + 4.0 4.4 2.55 3.04 4.27 +}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 7000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJetEvents.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/DijetMass/fnl2452_I1082936_v23_fix_ptmaxexpystar.str b/v2.6/generators/nlojet++/interface/data/DijetMass/fnl2452_I1082936_v23_fix_ptmaxexpystar.str new file mode 100644 index 0000000000000000000000000000000000000000..3f8e3d72676baa573d11a214efd5736f13cdd012 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/DijetMass/fnl2452_I1082936_v23_fix_ptmaxexpystar.str @@ -0,0 +1,175 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl2452_I1082936_v23_fix_ptmaxexpystar +ScenarioDescription { + "d2sigma-dijet_dm12_dy*_[pb_TeV]" + "ATLAS_Collaboration" + "Dijet_Mass" + "anti-kT_R=0.6" + "ATLAS-STDM-2011-02, arXiv:1112.6297, Phys. Rev. D 86 (2012) 014022." + "RIVET_ID=ATLAS_2012_I1082936/d02-x01-Y01,SPIRES_ID=9320911,INSPIRE_RECORD=1082936" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.6 # Jet size parameter: Required for all jets +ptjmin 20. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 4.4 # Maximal jet rapidity +Njetmin 2 # Minimal number of jets required to be in preselected phase space +ptj1min 30. # Minimal jet pT for leading jet + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "y_star" # This defines the observables to be calculated! + "Mjj_[TeV]" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 1. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "pT_max*exp(0.3*y_star)_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "exp(0.3*y_star)"# Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.5 0.07 0.11 0.16 0.21 0.26 0.31 0.37 0.44 0.51 0.59 0.67 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.94 2.78 + 0.5 1.0 0.11 0.16 0.21 0.26 0.31 0.37 0.44 0.51 0.59 0.67 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.76 2.12 3.31 + 1.0 1.5 0.16 0.21 0.26 0.31 0.37 0.44 0.51 0.59 0.67 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.76 1.94 2.12 2.55 3.61 + 1.5 2.0 0.26 0.31 0.37 0.44 0.51 0.59 0.67 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.76 1.94 2.12 2.33 2.78 3.93 + 2.0 2.5 0.37 0.44 0.51 0.59 0.67 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.76 1.94 2.12 2.33 2.55 3.04 4.27 + 2.5 3.0 0.67 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.76 1.94 2.12 2.33 2.55 2.78 3.31 4.64 + 3.0 3.5 1.18 1.31 1.45 1.60 1.76 1.94 2.12 2.33 2.55 2.78 3.04 3.61 5.04 + 3.5 4.0 1.76 1.94 2.12 2.33 2.55 2.78 3.04 3.31 3.93 5.47 + 4.0 4.4 2.55 3.04 4.27 +}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 7000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJetEvents.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/DijetMass/fnl2452_I1082936_v23_flex_ptmaxexpystar.str b/v2.6/generators/nlojet++/interface/data/DijetMass/fnl2452_I1082936_v23_flex_ptmaxexpystar.str new file mode 100644 index 0000000000000000000000000000000000000000..1cb9d83a372733401455c0db009003ebdb6b7954 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/DijetMass/fnl2452_I1082936_v23_flex_ptmaxexpystar.str @@ -0,0 +1,175 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl2452_I1082936_v23_flex_ptmaxexpystar +ScenarioDescription { + "d2sigma-dijet_dm12_dy*_[pb_TeV]" + "ATLAS_Collaboration" + "Dijet_Mass" + "anti-kT_R=0.6" + "ATLAS-STDM-2011-02, arXiv:1112.6297, Phys. Rev. D 86 (2012) 014022." + "RIVET_ID=ATLAS_2012_I1082936/d02-x01-Y01,SPIRES_ID=9320911,INSPIRE_RECORD=1082936" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.6 # Jet size parameter: Required for all jets +ptjmin 20. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 4.4 # Maximal jet rapidity +Njetmin 2 # Minimal number of jets required to be in preselected phase space +ptj1min 30. # Minimal jet pT for leading jet + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "y_star" # This defines the observables to be calculated! + "Mjj_[TeV]" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 1. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "pT_max_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "exp(0.3*y_star)"# Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.5 0.07 0.11 0.16 0.21 0.26 0.31 0.37 0.44 0.51 0.59 0.67 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.94 2.78 + 0.5 1.0 0.11 0.16 0.21 0.26 0.31 0.37 0.44 0.51 0.59 0.67 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.76 2.12 3.31 + 1.0 1.5 0.16 0.21 0.26 0.31 0.37 0.44 0.51 0.59 0.67 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.76 1.94 2.12 2.55 3.61 + 1.5 2.0 0.26 0.31 0.37 0.44 0.51 0.59 0.67 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.76 1.94 2.12 2.33 2.78 3.93 + 2.0 2.5 0.37 0.44 0.51 0.59 0.67 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.76 1.94 2.12 2.33 2.55 3.04 4.27 + 2.5 3.0 0.67 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.76 1.94 2.12 2.33 2.55 2.78 3.31 4.64 + 3.0 3.5 1.18 1.31 1.45 1.60 1.76 1.94 2.12 2.33 2.55 2.78 3.04 3.61 5.04 + 3.5 4.0 1.76 1.94 2.12 2.33 2.55 2.78 3.04 3.31 3.93 5.47 + 4.0 4.4 2.55 3.04 4.27 +}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 7000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJetEvents.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable true # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/DijetMass/fnl2452b_I1268975_v23_fix.str b/v2.6/generators/nlojet++/interface/data/DijetMass/fnl2452b_I1268975_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..4b0f41cd34612ec9dbc8b06fd14f398eb6b90509 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/DijetMass/fnl2452b_I1268975_v23_fix.str @@ -0,0 +1,172 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl2452b_I1268975_v23_fix +ScenarioDescription { + "d2sigma-dijet_dm12_dy*_[pb_TeV]" + "ATLAS_Collaboration" + "Dijet_Mass" + "anti-kT_R=0.6" + "ATLAS-STDM-2012-03, arXiv:1312.3524, JHEP 05 (2014) 059." + "RIVET_ID=ATLAS_2014_I1268975/d02-x01-Y01,INSPIRE_RECORD=1268975" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.6 # Jet size parameter: Required for all jets +ptjmin 50. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 3.0 # Maximal jet rapidity +Njetmin 2 # Minimal number of jets required to be in preselected phase space +ptj1min 100. # Minimal jet pT for leading jet + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "y_star" # This defines the observables to be calculated! + "Mjj_[TeV]" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 1. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "<pT_1,2>_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "exp(0.3*y_star)"# Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.5 0.26 0.31 0.37 0.44 0.51 0.59 0.67 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.76 1.94 2.12 2.33 2.55 2.78 4.27 + 0.5 1.0 0.31 0.37 0.44 0.51 0.59 0.67 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.76 1.94 2.12 2.33 2.55 2.78 3.04 4.27 + 1.0 1.5 0.51 0.59 0.67 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.76 1.94 2.12 2.33 2.55 2.78 3.04 3.31 4.64 + 1.5 2.0 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.76 1.94 2.12 2.33 2.55 2.78 3.04 3.31 3.61 4.64 + 2.0 2.5 1.31 1.45 1.60 1.76 2.12 2.55 3.04 3.61 5.04 + 2.5 3.0 2.12 2.55 3.04 3.93 5.04 +}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 7000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJetEvents.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/DijetMass/fnl2452b_I1268975_v23_fix_ptmax.str b/v2.6/generators/nlojet++/interface/data/DijetMass/fnl2452b_I1268975_v23_fix_ptmax.str new file mode 100644 index 0000000000000000000000000000000000000000..5f38df958a7ed615f3c5f173294ac5d12dc79215 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/DijetMass/fnl2452b_I1268975_v23_fix_ptmax.str @@ -0,0 +1,172 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl2452b_I1268975_v23_fix_ptmax +ScenarioDescription { + "d2sigma-dijet_dm12_dy*_[pb_TeV]" + "ATLAS_Collaboration" + "Dijet_Mass" + "anti-kT_R=0.6" + "ATLAS-STDM-2012-03, arXiv:1312.3524, JHEP 05 (2014) 059." + "RIVET_ID=ATLAS_2014_I1268975/d02-x01-Y01,INSPIRE_RECORD=1268975" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.6 # Jet size parameter: Required for all jets +ptjmin 50. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 3.0 # Maximal jet rapidity +Njetmin 2 # Minimal number of jets required to be in preselected phase space +ptj1min 100. # Minimal jet pT for leading jet + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "y_star" # This defines the observables to be calculated! + "Mjj_[TeV]" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 1. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "pT_max_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "exp(0.3*y_star)"# Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.5 0.26 0.31 0.37 0.44 0.51 0.59 0.67 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.76 1.94 2.12 2.33 2.55 2.78 4.27 + 0.5 1.0 0.31 0.37 0.44 0.51 0.59 0.67 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.76 1.94 2.12 2.33 2.55 2.78 3.04 4.27 + 1.0 1.5 0.51 0.59 0.67 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.76 1.94 2.12 2.33 2.55 2.78 3.04 3.31 4.64 + 1.5 2.0 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.76 1.94 2.12 2.33 2.55 2.78 3.04 3.31 3.61 4.64 + 2.0 2.5 1.31 1.45 1.60 1.76 2.12 2.55 3.04 3.61 5.04 + 2.5 3.0 2.12 2.55 3.04 3.93 5.04 +}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 7000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJetEvents.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/DijetMass/fnl2452b_I1268975_v23_fix_ptmaxexpystar.str b/v2.6/generators/nlojet++/interface/data/DijetMass/fnl2452b_I1268975_v23_fix_ptmaxexpystar.str new file mode 100644 index 0000000000000000000000000000000000000000..2b109c9c280b4ee8b8fe850d6f39f8a1af4d16b0 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/DijetMass/fnl2452b_I1268975_v23_fix_ptmaxexpystar.str @@ -0,0 +1,172 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl2452b_I1268975_v23_fix_ptmaxexpystar +ScenarioDescription { + "d2sigma-dijet_dm12_dy*_[pb_TeV]" + "ATLAS_Collaboration" + "Dijet_Mass" + "anti-kT_R=0.6" + "ATLAS-STDM-2012-03, arXiv:1312.3524, JHEP 05 (2014) 059." + "RIVET_ID=ATLAS_2014_I1268975/d02-x01-Y01,INSPIRE_RECORD=1268975" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.6 # Jet size parameter: Required for all jets +ptjmin 50. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 3.0 # Maximal jet rapidity +Njetmin 2 # Minimal number of jets required to be in preselected phase space +ptj1min 100. # Minimal jet pT for leading jet + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "y_star" # This defines the observables to be calculated! + "Mjj_[TeV]" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 1. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "pT_max*exp(0.3*y_star)_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "exp(0.3*y_star)"# Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.5 0.26 0.31 0.37 0.44 0.51 0.59 0.67 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.76 1.94 2.12 2.33 2.55 2.78 4.27 + 0.5 1.0 0.31 0.37 0.44 0.51 0.59 0.67 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.76 1.94 2.12 2.33 2.55 2.78 3.04 4.27 + 1.0 1.5 0.51 0.59 0.67 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.76 1.94 2.12 2.33 2.55 2.78 3.04 3.31 4.64 + 1.5 2.0 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.76 1.94 2.12 2.33 2.55 2.78 3.04 3.31 3.61 4.64 + 2.0 2.5 1.31 1.45 1.60 1.76 2.12 2.55 3.04 3.61 5.04 + 2.5 3.0 2.12 2.55 3.04 3.93 5.04 +}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 7000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJetEvents.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/DijetMass/fnl2452b_I1268975_v23_flex_ptmaxexpystar.str b/v2.6/generators/nlojet++/interface/data/DijetMass/fnl2452b_I1268975_v23_flex_ptmaxexpystar.str new file mode 100644 index 0000000000000000000000000000000000000000..f8f4871acfc63b74e7a6cc50e920112357a966a1 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/DijetMass/fnl2452b_I1268975_v23_flex_ptmaxexpystar.str @@ -0,0 +1,172 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl2452b_I1268975_v23_flex_ptmaxexpystar +ScenarioDescription { + "d2sigma-dijet_dm12_dy*_[pb_TeV]" + "ATLAS_Collaboration" + "Dijet_Mass" + "anti-kT_R=0.6" + "ATLAS-STDM-2012-03, arXiv:1312.3524, JHEP 05 (2014) 059." + "RIVET_ID=ATLAS_2014_I1268975/d02-x01-Y01,INSPIRE_RECORD=1268975" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.6 # Jet size parameter: Required for all jets +ptjmin 50. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 3.0 # Maximal jet rapidity +Njetmin 2 # Minimal number of jets required to be in preselected phase space +ptj1min 100. # Minimal jet pT for leading jet + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "y_star" # This defines the observables to be calculated! + "Mjj_[TeV]" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 1. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "pT_max_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "exp(0.3*y_star)"# Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.5 0.26 0.31 0.37 0.44 0.51 0.59 0.67 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.76 1.94 2.12 2.33 2.55 2.78 4.27 + 0.5 1.0 0.31 0.37 0.44 0.51 0.59 0.67 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.76 1.94 2.12 2.33 2.55 2.78 3.04 4.27 + 1.0 1.5 0.51 0.59 0.67 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.76 1.94 2.12 2.33 2.55 2.78 3.04 3.31 4.64 + 1.5 2.0 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.76 1.94 2.12 2.33 2.55 2.78 3.04 3.31 3.61 4.64 + 2.0 2.5 1.31 1.45 1.60 1.76 2.12 2.55 3.04 3.61 5.04 + 2.5 3.0 2.12 2.55 3.04 3.93 5.04 +}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 7000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJetEvents.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable true # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/DijetMass/fnl2462_I1082936_v23_fix.str b/v2.6/generators/nlojet++/interface/data/DijetMass/fnl2462_I1082936_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..52c84728e33a95816aee7cb6a767bdf9e10fe651 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/DijetMass/fnl2462_I1082936_v23_fix.str @@ -0,0 +1,175 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl2462_I1082936_v23_fix +ScenarioDescription { + "d2sigma-dijet_dm12_dy*_[pb_TeV]" + "ATLAS_Collaboration" + "Dijet_Mass" + "anti-kT_R=0.4" + "ATLAS-STDM-2011-02, arXiv:1112.6297, Phys. Rev. D 86 (2012) 014022." + "RIVET_ID=ATLAS_2012_I1082936/d01-x01-Y01,SPIRES_ID=9320911,INSPIRE_RECORD=1082936" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.6 # Jet size parameter: Required for all jets +ptjmin 20. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 4.4 # Maximal jet rapidity +Njetmin 2 # Minimal number of jets required to be in preselected phase space +ptj1min 30. # Minimal jet pT for leading jet + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "y_star" # This defines the observables to be calculated! + "Mjj_[TeV]" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 1. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "<pT_1,2>_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "exp(0.3*y_star)"# Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.5 0.07 0.11 0.16 0.21 0.26 0.31 0.37 0.44 0.51 0.59 0.67 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.94 2.78 + 0.5 1.0 0.11 0.16 0.21 0.26 0.31 0.37 0.44 0.51 0.59 0.67 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.76 2.12 3.31 + 1.0 1.5 0.16 0.21 0.26 0.31 0.37 0.44 0.51 0.59 0.67 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.76 1.94 2.12 2.55 3.61 + 1.5 2.0 0.26 0.31 0.37 0.44 0.51 0.59 0.67 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.76 1.94 2.12 2.33 2.78 3.93 + 2.0 2.5 0.37 0.44 0.51 0.59 0.67 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.76 1.94 2.12 2.33 2.55 3.04 4.27 + 2.5 3.0 0.67 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.76 1.94 2.12 2.33 2.55 2.78 3.31 4.64 + 3.0 3.5 1.18 1.31 1.45 1.60 1.76 1.94 2.12 2.33 2.55 2.78 3.04 3.61 5.04 + 3.5 4.0 1.76 1.94 2.12 2.33 2.55 2.78 3.04 3.31 3.93 5.47 + 4.0 4.4 2.55 3.04 4.27 +}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 7000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJetEvents.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/DijetMass/fnl2462_I1082936_v23_flex_ptmaxexpystar.str b/v2.6/generators/nlojet++/interface/data/DijetMass/fnl2462_I1082936_v23_flex_ptmaxexpystar.str new file mode 100644 index 0000000000000000000000000000000000000000..41f1750817617ebbf253ed5464c50881f63b89fb --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/DijetMass/fnl2462_I1082936_v23_flex_ptmaxexpystar.str @@ -0,0 +1,175 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl2462_I1082936_v23_flex_ptmaxexpystar +ScenarioDescription { + "d2sigma-dijet_dm12_dy*_[pb_TeV]" + "ATLAS_Collaboration" + "Dijet_Mass" + "anti-kT_R=0.4" + "ATLAS-STDM-2011-02, arXiv:1112.6297, Phys. Rev. D 86 (2012) 014022." + "RIVET_ID=ATLAS_2012_I1082936/d01-x01-Y01,SPIRES_ID=9320911,INSPIRE_RECORD=1082936" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.6 # Jet size parameter: Required for all jets +ptjmin 20. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 4.4 # Maximal jet rapidity +Njetmin 2 # Minimal number of jets required to be in preselected phase space +ptj1min 30. # Minimal jet pT for leading jet + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "y_star" # This defines the observables to be calculated! + "Mjj_[TeV]" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 1. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "pT_max_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "exp(0.3*y_star)"# Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.5 0.07 0.11 0.16 0.21 0.26 0.31 0.37 0.44 0.51 0.59 0.67 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.94 2.78 + 0.5 1.0 0.11 0.16 0.21 0.26 0.31 0.37 0.44 0.51 0.59 0.67 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.76 2.12 3.31 + 1.0 1.5 0.16 0.21 0.26 0.31 0.37 0.44 0.51 0.59 0.67 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.76 1.94 2.12 2.55 3.61 + 1.5 2.0 0.26 0.31 0.37 0.44 0.51 0.59 0.67 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.76 1.94 2.12 2.33 2.78 3.93 + 2.0 2.5 0.37 0.44 0.51 0.59 0.67 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.76 1.94 2.12 2.33 2.55 3.04 4.27 + 2.5 3.0 0.67 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.76 1.94 2.12 2.33 2.55 2.78 3.31 4.64 + 3.0 3.5 1.18 1.31 1.45 1.60 1.76 1.94 2.12 2.33 2.55 2.78 3.04 3.61 5.04 + 3.5 4.0 1.76 1.94 2.12 2.33 2.55 2.78 3.04 3.31 3.93 5.47 + 4.0 4.4 2.55 3.04 4.27 +}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 7000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJetEvents.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable true # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/DijetMass/fnl2462b_I1268975_v23_fix.str b/v2.6/generators/nlojet++/interface/data/DijetMass/fnl2462b_I1268975_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..ea57a1d010354f11450ac22d6a37bf412a5c322c --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/DijetMass/fnl2462b_I1268975_v23_fix.str @@ -0,0 +1,172 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl2462b_I1268975_v23_fix +ScenarioDescription { + "d2sigma-dijet_dm12_dy*_[pb_TeV]" + "ATLAS_Collaboration" + "Dijet_Mass" + "anti-kT_R=0.4" + "ATLAS-STDM-2012-03, arXiv:1312.3524, JHEP 05 (2014) 059." + "RIVET_ID=ATLAS_2014_I1268975/d01-x01-Y01,INSPIRE_RECORD=1268975" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.6 # Jet size parameter: Required for all jets +ptjmin 50. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 3.0 # Maximal jet rapidity +Njetmin 2 # Minimal number of jets required to be in preselected phase space +ptj1min 100. # Minimal jet pT for leading jet + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "y_star" # This defines the observables to be calculated! + "Mjj_[TeV]" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 1. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "<pT_1,2>_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "exp(0.3*y_star)"# Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.5 0.26 0.31 0.37 0.44 0.51 0.59 0.67 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.76 1.94 2.12 2.33 2.55 2.78 4.27 + 0.5 1.0 0.31 0.37 0.44 0.51 0.59 0.67 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.76 1.94 2.12 2.33 2.55 2.78 3.04 4.27 + 1.0 1.5 0.51 0.59 0.67 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.76 1.94 2.12 2.33 2.55 2.78 3.04 3.31 4.64 + 1.5 2.0 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.76 1.94 2.12 2.33 2.55 2.78 3.04 3.31 3.61 4.64 + 2.0 2.5 1.31 1.45 1.60 1.76 2.12 2.55 3.04 3.61 5.04 + 2.5 3.0 2.12 2.55 3.04 3.93 5.04 +}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 7000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJetEvents.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/DijetMass/fnl2462b_I1268975_v23_flex_ptmaxexpystar.str b/v2.6/generators/nlojet++/interface/data/DijetMass/fnl2462b_I1268975_v23_flex_ptmaxexpystar.str new file mode 100644 index 0000000000000000000000000000000000000000..948107684da355dcfb0adefd6aad57514cc32564 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/DijetMass/fnl2462b_I1268975_v23_flex_ptmaxexpystar.str @@ -0,0 +1,172 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl2462b_I1268975_v23_flex_ptmaxexpystar +ScenarioDescription { + "d2sigma-dijet_dm12_dy*_[pb_TeV]" + "ATLAS_Collaboration" + "Dijet_Mass" + "anti-kT_R=0.4" + "ATLAS-STDM-2012-03, arXiv:1312.3524, JHEP 05 (2014) 059." + "RIVET_ID=ATLAS_2014_I1268975/d01-x01-Y01,INSPIRE_RECORD=1268975" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.6 # Jet size parameter: Required for all jets +ptjmin 50. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 3.0 # Maximal jet rapidity +Njetmin 2 # Minimal number of jets required to be in preselected phase space +ptj1min 100. # Minimal jet pT for leading jet + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "y_star" # This defines the observables to be calculated! + "Mjj_[TeV]" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 1. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "pT_max_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "exp(0.3*y_star)"# Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.5 0.26 0.31 0.37 0.44 0.51 0.59 0.67 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.76 1.94 2.12 2.33 2.55 2.78 4.27 + 0.5 1.0 0.31 0.37 0.44 0.51 0.59 0.67 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.76 1.94 2.12 2.33 2.55 2.78 3.04 4.27 + 1.0 1.5 0.51 0.59 0.67 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.76 1.94 2.12 2.33 2.55 2.78 3.04 3.31 4.64 + 1.5 2.0 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.76 1.94 2.12 2.33 2.55 2.78 3.04 3.31 3.61 4.64 + 2.0 2.5 1.31 1.45 1.60 1.76 2.12 2.55 3.04 3.61 5.04 + 2.5 3.0 2.12 2.55 3.04 3.93 5.04 +}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 7000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJetEvents.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable true # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/Examples/DijetMass_Example_v23_fix.str b/v2.6/generators/nlojet++/interface/data/Examples/DijetMass_Example_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..7b5be432740eadec7ece7963778ca0bd3c9d42a7 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/Examples/DijetMass_Example_v23_fix.str @@ -0,0 +1,209 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName DijetMass_Example_v23_fix +ScenarioDescription { + "d2sigma-dijet_dm12_dy*_[pb_TeV]" + "ATLAS_Collaboration" + "Dijet_Mass" + "anti-kT_R=0.6" + "ATLAS-STDM-2012-03, arXiv:1312.3524, JHEP 05 (2014) 059." + "RIVET_ID=ATLAS_2014_I1268975/d02-x01-Y01,INSPIRE_RECORD=1268975" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.6 # Jet size parameter: Required for all jets +#OvThr 0.5 # Overlap threshold: Required for cone jets (Normally 10: 0.75; 11,12: 0.50) +# # Overall jet phase space +ptjmin 50. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 3.0 # Maximal jet rapidity +# Use either rapidity or pseudorapidity but not both! If both are set, only rapidity cuts are applied. +#etajmin 0.0 # Minimal jet pseudorapidity +#etajmax 3.0 # Maximal jet pseudorapidity +Njetmin 2 # Minimal number of jets required to be in preselected phase space +ptj1min 100. # Minimal jet pT for leading jet +#ptj2min 50. # Minimal jet pT for 2nd leading jet +#ptj3min 50. # Minimal jet pT for 3rd leading jet +#ycjjmax 3.0 # Maximal jet rapidity for leading two jets and further central jets +#Ncjetmin 3 # Minimal number of central jets +#yboostmax 3.0 # Maximal y_boost = 0.5 * |y1 + y2| +#ystarmax 3.0 # Maximal y_star = 0.5 * |y1 - y2| +#obs0min x.y # +#obs0max x.y # By default these values are derived from the binning in these +#obs1min x.y # observables and are set automatically. If required the min/max +#obs1max x.y # values for each of the maximally three observables can be set +#obs2min x.y # by hand. +#obs2max x.y # + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "y_star" # This defines the observables to be calculated! + "Mjj_[TeV]" # Implemented observables are: "|y_max|", "y_star", "Mjj_[GeV]", "Mjj_[TeV]", "<pT_1,2>_[GeV]", + # "Chi", "HT/2_[GeV]", "pT_max_[GeV]", "DeltaPhi_1,2" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 1. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "<pT_1,2>_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "exp(0.3*y_star)"# Specify 2nd scale name and unit (ONLY for flexible-scale tables) + # Implemented scales are: "pT_max_[GeV]", "<pT_1,2>_[GeV]", "<pT_1,2,3>_[GeV]", "Mjj/2_[GeV]", + # "pT_max*exp(0.3*y_star)_[GeV]", "exp(0.3*y_star)", "HT/2_[GeV]" + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +# Example for SingleDifferentialBinning: +#SingleDifferentialBinning { +# 7. 11. 18. 30. 50. 100. +#} + +# Example for DoubleDifferentialBinning: +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.5 0.26 0.31 0.37 0.44 0.51 0.59 0.67 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.76 1.94 2.12 2.33 2.55 2.78 4.27 + 0.5 1.0 0.31 0.37 0.44 0.51 0.59 0.67 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.76 1.94 2.12 2.33 2.55 2.78 3.04 4.27 + 1.0 1.5 0.51 0.59 0.67 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.76 1.94 2.12 2.33 2.55 2.78 3.04 3.31 4.64 + 1.5 2.0 0.76 0.85 0.95 1.06 1.18 1.31 1.45 1.60 1.76 1.94 2.12 2.33 2.55 2.78 3.04 3.31 3.61 4.64 + 2.0 2.5 1.31 1.45 1.60 1.76 2.12 2.55 3.04 3.61 5.04 + 2.5 3.0 2.12 2.55 3.04 3.93 5.04 +}} + +# Example for TripleDifferentialBinning: +#TripleDifferentialBinning {{ +# 1stDimLo 1stDimUp 2ndDimLo 2ndDimUp "----- Array of bin-grid for 3rd dimension -----" +# 100. 150. -1.0 0.0 7. 11. 18. 30. 50. +# 150. 200. -1.0 0.0 7. 11. 18. 30. 50. +# 200. 400. 0.0 1.5 7. 11. 18. 30. 50. +# 400. 700. 0.0 1.5 7. 11. 18. 30. 50. +# 700. 5000. 1.5 2.5 7. 11. 18. 30. 50. +# 5000. 15000. 1.5 2.5 7. 11. 18. 30. 50. +#}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 7000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJetEvents.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/Examples/InclusiveJets_Example_v23_fix.str b/v2.6/generators/nlojet++/interface/data/Examples/InclusiveJets_Example_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..c69d3385a4378dbb912e20051cc11090a36c6ef8 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/Examples/InclusiveJets_Example_v23_fix.str @@ -0,0 +1,201 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName InclusiveJets_Example_v23_fix +ScenarioDescription { + "d2sigma-jet_dpT_dy_[pb_GeV]" + "CMS_Collaboration" + "Inclusive_Jet_pT" + "anti-kT_R=0.5" + "CMS-PAPER-QCD-10-011, arXiv:1106.0208, Phys. Rev. Lett. 107 (2011) 132001." + "RIVET_ID=CMS_2011_S9086218/D01-x01-y01,SPIRES_ID=9086218,INSPIRE_RECORD=902309" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.5 # Jet size parameter: Required for all jets +#OvThr 0.5 # Overlap threshold: Required for cone jets (Normally 10: 0.75; 11,12: 0.50) +# # Overall jet phase space +ptjmin 18. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 3.0 # Maximal jet rapidity +# Use either rapidity or pseudorapidity but not both! If both are set, only rapidity cuts are applied. +#etajmin 0.0 # Minimal jet pseudorapidity +#etajmax 3.0 # Maximal jet pseudorapidity +#Njetmin 1 # Minimal number of jets required to be in preselected phase space +# # (Normally one, i.e. single-jet inclusive) +#obs0min x.y # +#obs0max x.y # By default these values are derived from the binning in these +#obs1min x.y # observables and are set automatically. If required the min/max +#obs1max x.y # values for each of the maximally three observables can be set +#obs2min x.y # by hand. +#obs2max x.y # + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "|y|" # This defines the observables to be calculated! + "pT_[GeV]" # Implemented observables are: "|y|", "pT_[GeV]", "phi" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 2. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "pT_jet_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + # Implemented scales are: "pT_jet_[GeV]", "pT_max_[GeV]" + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +# Example for SingleDifferentialBinning: +#SingleDifferentialBinning { +# 7. 11. 18. 30. 50. 100. +#} + +# Example for DoubleDifferentialBinning: +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 846. 1684. + 0.5 1.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 790. 1684. + 1.0 1.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 1410. + 1.5 2.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 1032. + 2.0 2.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 737. + 2.5 3.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 468. +}} + +# Example for TripleDifferentialBinning: +#TripleDifferentialBinning {{ +# 1stDimLo 1stDimUp 2ndDimLo 2ndDimUp "----- Array of bin-grid for 3rd dimension -----" +# 100. 150. -1.0 0.0 7. 11. 18. 30. 50. +# 150. 200. -1.0 0.0 7. 11. 18. 30. 50. +# 200. 400. 0.0 1.5 7. 11. 18. 30. 50. +# 400. 700. 0.0 1.5 7. 11. 18. 30. 50. +# 700. 5000. 1.5 2.5 7. 11. 18. 30. 50. +# 5000. 15000. 1.5 2.5 7. 11. 18. 30. 50. +#}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 7000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJets.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/Examples/InclusiveJets_UpdatedDescription_v23_fix.str b/v2.6/generators/nlojet++/interface/data/Examples/InclusiveJets_UpdatedDescription_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..69fb39f3ab470fb22d994aabce0393693c0891f2 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/Examples/InclusiveJets_UpdatedDescription_v23_fix.str @@ -0,0 +1,201 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName InclusiveJets_Example_v23_fix +ScenarioDescription { + "d2sigma-jet_dpT_dy_[pb_GeV]" + "CMS_Collaboration" + "Inclusive_Jet_pT" + "anti-kT_R=0.5" + "CMS-PAPER-QCD-10-011, arXiv:1106.0208, Phys. Rev. Lett. 107 (2011) 132001." + "RIVET_ID=CMS_2011_S9086218/D01-x01-y01,SPIRES_ID=9086218,INSPIRE_RECORD=902309" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.5 # Jet size parameter: Required for all jets +#OvThr 0.5 # Overlap threshold: Required for cone jets (Normally 10: 0.75; 11,12: 0.50) +# # Overall jet phase space +ptjmin 18. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 3.0 # Maximal jet rapidity +# Use either rapidity or pseudorapidity but not both! If both are set, only rapidity cuts are applied. +#etajmin 0.0 # Minimal jet pseudorapidity +#etajmax 3.0 # Maximal jet pseudorapidity +#Njetmin 1 # Minimal number of jets required to be in preselected phase space +# # (Normally one, i.e. single-jet inclusive) +#obs0min x.y # +#obs0max x.y # By default these values are derived from the binning in these +#obs1min x.y # observables and are set automatically. If required the min/max +#obs1max x.y # values for each of the maximally three observables can be set +#obs2min x.y # by hand. +#obs2max x.y # + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "|y|" # This defines the observables to be calculated! + "pT_[GeV]" # Implemented observables are: "|y|", "pT_[GeV]", "phi" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 2. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "pT_jet_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + # Implemented scales are: "pT_jet_[GeV]", "pT_max_[GeV]" + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +# Example for SingleDifferentialBinning: +#SingleDifferentialBinning { +# 7. 11. 18. 30. 50. 100. +#} + +# Example for DoubleDifferentialBinning: +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 846. 1684. + 0.5 1.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 790. 1684. + 1.0 1.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 1410. + 1.5 2.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 1032. + 2.0 2.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 737. + 2.5 3.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 468. +}} + +# Example for TripleDifferentialBinning: +#TripleDifferentialBinning {{ +# 1stDimLo 1stDimUp 2ndDimLo 2ndDimUp "----- Array of bin-grid for 3rd dimension -----" +# 100. 150. -1.0 0.0 7. 11. 18. 30. 50. +# 150. 200. -1.0 0.0 7. 11. 18. 30. 50. +# 200. 400. 0.0 1.5 7. 11. 18. 30. 50. +# 400. 700. 0.0 1.5 7. 11. 18. 30. 50. +# 700. 5000. 1.5 2.5 7. 11. 18. 30. 50. +# 5000. 15000. 1.5 2.5 7. 11. 18. 30. 50. +#}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 7000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJets.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels Min. no. of Nodes +# OneNode 1 +# Linear 2 +# Catmull 4 +# Lagrange 4 +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/Examples/Makefile.am b/v2.6/generators/nlojet++/interface/data/Examples/Makefile.am new file mode 100644 index 0000000000000000000000000000000000000000..571eb28232d3952da7f88012f03a75fee8ca616f --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/Examples/Makefile.am @@ -0,0 +1,17 @@ +# -*- Automake -*- +# ----------------------------------------------------------------------------- +# +# K. Rabbertz, 17.01.2015 +# +# NLOJet++ interface to fastNLO toolkit +# +# ----------------------------------------------------------------------------- +# Use GNU standards +AUTOMAKE_OPTIONS = gnu + +# Files that are required to build the project but that can be +# recreated IF the necessary autotools etc. are available by: +# "autoreconf -i; ./configure" +# Use "make maintainer-clean" (on a build machine) before svn commits, +# but NOT before distribution with "make dist"! +MAINTAINERCLEANFILES = Makefile.in diff --git a/v2.6/generators/nlojet++/interface/data/InclusiveJets/Makefile.am b/v2.6/generators/nlojet++/interface/data/InclusiveJets/Makefile.am new file mode 100644 index 0000000000000000000000000000000000000000..571eb28232d3952da7f88012f03a75fee8ca616f --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/InclusiveJets/Makefile.am @@ -0,0 +1,17 @@ +# -*- Automake -*- +# ----------------------------------------------------------------------------- +# +# K. Rabbertz, 17.01.2015 +# +# NLOJet++ interface to fastNLO toolkit +# +# ----------------------------------------------------------------------------- +# Use GNU standards +AUTOMAKE_OPTIONS = gnu + +# Files that are required to build the project but that can be +# recreated IF the necessary autotools etc. are available by: +# "autoreconf -i; ./configure" +# Use "make maintainer-clean" (on a build machine) before svn commits, +# but NOT before distribution with "make dist"! +MAINTAINERCLEANFILES = Makefile.in diff --git a/v2.6/generators/nlojet++/interface/data/InclusiveJets/fnl2332e_I1298810_v23_fix.str b/v2.6/generators/nlojet++/interface/data/InclusiveJets/fnl2332e_I1298810_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..035ca07d33bcd999832dca628acdd519aa61a0f1 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/InclusiveJets/fnl2332e_I1298810_v23_fix.str @@ -0,0 +1,170 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl2332e_I1298810_v23_fix +ScenarioDescription { + "d2sigma-jet_dpT_dy_[pb_GeV]" + "CMS_Collaboration" + "Inclusive_Jet_pT" + "anti-kT_R=0.7" + "CMS-PAPER-SMP-13-002, arXiv:1406.0324, Phys. Rev. D 90 (2014) 072006." + "RIVET_ID=CMS_2014_I1298810/D07-x01-y01,INSPIRE_RECORD=1298810" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.7 # Jet size parameter: Required for all jets +ptjmin 56. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 3.0 # Maximal jet rapidity + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "|y|" # This defines the observables to be calculated! + "pT_[GeV]" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 2. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "pT_jet_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.5 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 790. 846. 905. 967. 1032. 1101. 1172. 1248. 1327. + 0.5 1.0 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 790. 846. 905. 967. 1032. 1101. 1172. 1248. 1327. + 1.0 1.5 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 790. 846. 905. 967. 1032. 1101. + 1.5 2.0 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 790. 846. + 2.0 2.5 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. + 2.5 3.0 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. +}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 7000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJets.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/InclusiveJets/fnl2342b_I902309_v23_fix.str b/v2.6/generators/nlojet++/interface/data/InclusiveJets/fnl2342b_I902309_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..f578103c9d939c2457a65f26be46208870212607 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/InclusiveJets/fnl2342b_I902309_v23_fix.str @@ -0,0 +1,170 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl2342b_I902309_v23_fix +ScenarioDescription { + "d2sigma-jet_dpT_dy_[pb_GeV]" + "CMS_Collaboration" + "Inclusive_Jet_pT" + "anti-kT_R=0.5" + "CMS-PAPER-QCD-10-011, arXiv:1106.0208, Phys. Rev. Lett. 107 (2011) 132001." + "RIVET_ID=CMS_2011_S9086218/D01-x01-y01,SPIRES_ID=9086218,INSPIRE_RECORD=902309" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.5 # Jet size parameter: Required for all jets +ptjmin 18. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 3.0 # Maximal jet rapidity + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "|y|" # This defines the observables to be calculated! + "pT_[GeV]" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 2. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "pT_jet_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 846. 1684. + 0.5 1.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 790. 1684. + 1.0 1.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 1410. + 1.5 2.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 1032. + 2.0 2.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 737. + 2.5 3.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 468. +}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 7000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJets.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/InclusiveJets/fnl2342b_I902309_v23_flex.str b/v2.6/generators/nlojet++/interface/data/InclusiveJets/fnl2342b_I902309_v23_flex.str new file mode 100644 index 0000000000000000000000000000000000000000..2a516348590a3a69515d48d86b17591541976ce1 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/InclusiveJets/fnl2342b_I902309_v23_flex.str @@ -0,0 +1,170 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl2342b_I902309_v23_flex +ScenarioDescription { + "d2sigma-jet_dpT_dy_[pb_GeV]" + "CMS_Collaboration" + "Inclusive_Jet_pT" + "anti-kT_R=0.5" + "CMS-PAPER-QCD-10-011, arXiv:1106.0208, Phys. Rev. Lett. 107 (2011) 132001." + "RIVET_ID=CMS_2011_S9086218/D01-x01-y01,SPIRES_ID=9086218,INSPIRE_RECORD=902309" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.5 # Jet size parameter: Required for all jets +ptjmin 18. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 3.0 # Maximal jet rapidity + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "|y|" # This defines the observables to be calculated! + "pT_[GeV]" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 2. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "pT_jet_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 846. 1684. + 0.5 1.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 790. 1684. + 1.0 1.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 1410. + 1.5 2.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 1032. + 2.0 2.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 737. + 2.5 3.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 468. +}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 7000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJets.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable true # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/InclusiveJets/fnl2342e_I1298810_v23_fix.str b/v2.6/generators/nlojet++/interface/data/InclusiveJets/fnl2342e_I1298810_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..22d24cf70d8392c61ff3521d5928e7b5299e484d --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/InclusiveJets/fnl2342e_I1298810_v23_fix.str @@ -0,0 +1,170 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl2342e_I1298810_v23_fix +ScenarioDescription { + "d2sigma-jet_dpT_dy_[pb_GeV]" + "CMS_Collaboration" + "Inclusive_Jet_pT" + "anti-kT_R=0.5" + "CMS-PAPER-SMP-13-002, arXiv:1406.0324, Phys. Rev. D 90 (2014) 072006." + "RIVET_ID=CMS_2014_I1298810/D01-x01-y01,INSPIRE_RECORD=1298810" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.5 # Jet size parameter: Required for all jets +ptjmin 56. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 3.0 # Maximal jet rapidity + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "|y|" # This defines the observables to be calculated! + "pT_[GeV]" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 2. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "pT_jet_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.5 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 790. 846. 905. 967. 1032. 1101. 1172. 1248. 1327. + 0.5 1.0 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 790. 846. 905. 967. 1032. 1101. 1172. 1248. 1327. + 1.0 1.5 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 790. 846. 905. 967. 1032. 1101. + 1.5 2.0 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 790. 846. + 2.0 2.5 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. + 2.5 3.0 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. +}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 7000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJets.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/InclusiveJets/fnl2352_I1082936_v23_fix.str b/v2.6/generators/nlojet++/interface/data/InclusiveJets/fnl2352_I1082936_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..c8fb099dbd5df0782ffe012bdefb850506e1554b --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/InclusiveJets/fnl2352_I1082936_v23_fix.str @@ -0,0 +1,171 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl2352_I1082936_v23_fix +ScenarioDescription { + "d2sigma-jet_dpT_dy_[pb_GeV]" + "ATLAS_Collaboration" + "Inclusive_Jet_pT" + "anti-kT_R=0.6" + "ATLAS-STDM-2011-02, arXiv:1112.6297, Phys. Rev. D 86 (2012) 014022." + "RIVET_ID=ATLAS_2012_I1082936/d02-x01-Y01,SPIRES_ID=9320911,INSPIRE_RECORD=1082936" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.6 # Jet size parameter: Required for all jets +ptjmin 20. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 4.4 # Maximal jet rapidity + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "|y|" # This defines the observables to be calculated! + "pT_[GeV]" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 2. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "pT_jet_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.3 20. 30. 45. 60. 80. 110. 160. 210. 260. 310. 400. 500. 600. 800. 1000. 1200. 1500. + 0.3 0.8 20. 30. 45. 60. 80. 110. 160. 210. 260. 310. 400. 500. 600. 800. 1000. 1200. 1500. + 0.8 1.2 20. 30. 45. 60. 80. 110. 160. 210. 260. 310. 400. 500. 600. 800. 1000. 1200. 1500. + 1.2 2.1 20. 30. 45. 60. 80. 110. 160. 210. 260. 310. 400. 500. 600. 800. 1000. 1200. + 2.1 2.8 20. 30. 45. 60. 80. 110. 160. 210. 260. 310. 400. 500. 600. + 2.8 3.6 20. 30. 45. 60. 80. 110. 160. 210. 260. 310. + 3.6 4.4 20. 30. 45. 60. 80. 110. 160. +}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 7000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJets.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/InclusiveJets/fnl2352b_I1325553_v23_fix.str b/v2.6/generators/nlojet++/interface/data/InclusiveJets/fnl2352b_I1325553_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..a91d7395d2b1d9acc18007b0b1837f30842b66be --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/InclusiveJets/fnl2352b_I1325553_v23_fix.str @@ -0,0 +1,170 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl2352b_I1325553_v23_fix +ScenarioDescription { + "d2sigma-jet_dpT_dy_[pb_GeV]" + "ATLAS_Collaboration" + "Inclusive_Jet_pT" + "anti-kT_R=0.6" + "ATLAS-STDM-2013-11, arXiv:1410.8857, JHEP 02 (2015) 153." + "RIVET_ID=ATLAS_2014_I1325553/d02-x01-Y01,INSPIRE_RECORD=1325553" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.6 # Jet size parameter: Required for all jets +ptjmin 100. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 3.0 # Maximal jet rapidity + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "|y|" # This defines the observables to be calculated! + "pT_[GeV]" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 2. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "pT_jet_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.5 100. 116. 134. 152. 172. 194. 216. 240. 264. 290. 318. 346. 376. 408. 442. 478. 516. 556. 598. 642. 688. 736. 786. 838. 894. 952. 1012. 1076. 1162. 1310. 1530. 1992. + 0.5 1.0 100. 116. 134. 152. 172. 194. 216. 240. 264. 290. 318. 346. 376. 408. 442. 478. 516. 556. 598. 642. 688. 736. 786. 838. 894. 952. 1012. 1162. 1310. 1992. + 1.0 1.5 100. 116. 134. 152. 172. 194. 216. 240. 264. 290. 318. 346. 376. 408. 442. 478. 516. 556. 598. 642. 688. 736. 786. 838. 894. 1012. 1992. + 1.5 2.0 100. 116. 134. 152. 172. 194. 216. 240. 264. 290. 318. 346. 376. 408. 442. 478. 516. 556. 598. 642. 688. 736. 894. 1992. + 2.0 2.5 100. 116. 134. 152. 172. 194. 216. 240. 264. 290. 318. 346. 376. 408. 442. 478. 516. 556. 642. 894. + 2.5 3.0 100. 116. 134. 152. 172. 194. 216. 240. 264. 290. 318. 376. 478. +}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 7000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJets.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/InclusiveJets/fnl2362_I1082936_v23_fix.str b/v2.6/generators/nlojet++/interface/data/InclusiveJets/fnl2362_I1082936_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..528084ad3d75c8fab546d26b19ce8647e35ae209 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/InclusiveJets/fnl2362_I1082936_v23_fix.str @@ -0,0 +1,171 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl2362_I1082936_v23_fix +ScenarioDescription { + "d2sigma-jet_dpT_dy_[pb_GeV]" + "ATLAS_Collaboration" + "Inclusive_Jet_pT" + "anti-kT_R=0.4" + "ATLAS-STDM-2011-02, arXiv:1112.6297, Phys. Rev. D 86 (2012) 014022." + "RIVET_ID=ATLAS_2012_I1082936/d01-x01-Y01,SPIRES_ID=9320911,INSPIRE_RECORD=1082936" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.4 # Jet size parameter: Required for all jets +ptjmin 20. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 4.4 # Maximal jet rapidity + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "|y|" # This defines the observables to be calculated! + "pT_[GeV]" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 2. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "pT_jet_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.3 20. 30. 45. 60. 80. 110. 160. 210. 260. 310. 400. 500. 600. 800. 1000. 1200. 1500. + 0.3 0.8 20. 30. 45. 60. 80. 110. 160. 210. 260. 310. 400. 500. 600. 800. 1000. 1200. 1500. + 0.8 1.2 20. 30. 45. 60. 80. 110. 160. 210. 260. 310. 400. 500. 600. 800. 1000. 1200. 1500. + 1.2 2.1 20. 30. 45. 60. 80. 110. 160. 210. 260. 310. 400. 500. 600. 800. 1000. 1200. + 2.1 2.8 20. 30. 45. 60. 80. 110. 160. 210. 260. 310. 400. 500. 600. + 2.8 3.6 20. 30. 45. 60. 80. 110. 160. 210. 260. 310. + 3.6 4.4 20. 30. 45. 60. 80. 110. 160. +}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 7000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJets.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/InclusiveJets/fnl2362b_I1325553_v23_fix.str b/v2.6/generators/nlojet++/interface/data/InclusiveJets/fnl2362b_I1325553_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..bb889844d15766b3e6343c28273df53452715910 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/InclusiveJets/fnl2362b_I1325553_v23_fix.str @@ -0,0 +1,170 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl2362b_I1325553_v23_fix +ScenarioDescription { + "d2sigma-jet_dpT_dy_[pb_GeV]" + "ATLAS_Collaboration" + "Inclusive_Jet_pT" + "anti-kT_R=0.4" + "ATLAS-STDM-2013-11, arXiv:1410.8857, JHEP 02 (2015) 153." + "RIVET_ID=ATLAS_2014_I1325553/d01-x01-Y01,INSPIRE_RECORD=1325553" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.4 # Jet size parameter: Required for all jets +ptjmin 100. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 3.0 # Maximal jet rapidity + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "|y|" # This defines the observables to be calculated! + "pT_[GeV]" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 2. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "pT_jet_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.5 100. 116. 134. 152. 172. 194. 216. 240. 264. 290. 318. 346. 376. 408. 442. 478. 516. 556. 598. 642. 688. 736. 786. 838. 894. 952. 1012. 1076. 1162. 1310. 1530. 1992. + 0.5 1.0 100. 116. 134. 152. 172. 194. 216. 240. 264. 290. 318. 346. 376. 408. 442. 478. 516. 556. 598. 642. 688. 736. 786. 838. 894. 952. 1012. 1162. 1310. 1992. + 1.0 1.5 100. 116. 134. 152. 172. 194. 216. 240. 264. 290. 318. 346. 376. 408. 442. 478. 516. 556. 598. 642. 688. 736. 786. 838. 894. 1012. 1992. + 1.5 2.0 100. 116. 134. 152. 172. 194. 216. 240. 264. 290. 318. 346. 376. 408. 442. 478. 516. 556. 598. 642. 688. 736. 894. 1992. + 2.0 2.5 100. 116. 134. 152. 172. 194. 216. 240. 264. 290. 318. 346. 376. 408. 442. 478. 516. 556. 642. 894. + 2.5 3.0 100. 116. 134. 152. 172. 194. 216. 240. 264. 290. 318. 376. 478. +}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 7000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJets.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/InclusiveJets/fnl4352_I1228693_v23_fix.str b/v2.6/generators/nlojet++/interface/data/InclusiveJets/fnl4352_I1228693_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..5553f65224b1760d5c393cca69d56bb7222a4dac --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/InclusiveJets/fnl4352_I1228693_v23_fix.str @@ -0,0 +1,171 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl4352_I1228693_v23_fix +ScenarioDescription { + "d2sigma-jet_dpT_dy_[nb_GeV]" + "ATLAS_Collaboration" + "Inclusive_Jet_pT" + "anti-kT_R=0.6" + "ATLAS-STDM-2012-08, arXiv:1304.4739, Eur. Phys. J. C 73 (2013) 2509." + "RIVET_ID=ATLAS_2013_I1228693/D08-x01-y01,INSPIRE_RECORD=1228693" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 9 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.6 # Jet size parameter: Required for all jets +ptjmin 20. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 4.4 # Maximal jet rapidity + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "|y|" # This defines the observables to be calculated! + "pT_[GeV]" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 2. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "pT_jet_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.3 20. 30. 45. 60. 80. 110. 160. 210. 260. 310. 400. 500. + 0.3 0.8 20. 30. 45. 60. 80. 110. 160. 210. 260. 310. 400. 500. + 0.8 1.2 20. 30. 45. 60. 80. 110. 160. 210. 260. 310. 400. + 1.2 2.1 20. 30. 45. 60. 80. 110. 160. 210. 260. 310. 400. + 2.1 2.8 20. 30. 45. 60. 80. 110. 160. 210. 260. + 2.8 3.6 20. 30. 45. 60. 80. 110. 160. + 3.6 4.4 20. 30. 45. 60. +}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 2760. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJets.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/InclusiveJets/fnl4362_I1228693_v23_fix.str b/v2.6/generators/nlojet++/interface/data/InclusiveJets/fnl4362_I1228693_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..41178cf56b030be0fd5d3df2d0158ac2d5804a5d --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/InclusiveJets/fnl4362_I1228693_v23_fix.str @@ -0,0 +1,171 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl4362_I1228693_v23_fix +ScenarioDescription { + "d2sigma-jet_dpT_dy_[nb_GeV]" + "ATLAS_Collaboration" + "Inclusive_Jet_pT" + "anti-kT_R=0.4" + "ATLAS-STDM-2012-08, arXiv:1304.4739, Eur. Phys. J. C 73 (2013) 2509." + "RIVET_ID=ATLAS_2013_I1228693/D01-x01-y01,INSPIRE_RECORD=1228693" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 9 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.4 # Jet size parameter: Required for all jets +ptjmin 20. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 4.4 # Maximal jet rapidity + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "|y|" # This defines the observables to be calculated! + "pT_[GeV]" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 2. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "pT_jet_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.3 20. 30. 45. 60. 80. 110. 160. 210. 260. 310. 400. 500. + 0.3 0.8 20. 30. 45. 60. 80. 110. 160. 210. 260. 310. 400. 500. + 0.8 1.2 20. 30. 45. 60. 80. 110. 160. 210. 260. 310. 400. + 1.2 2.1 20. 30. 45. 60. 80. 110. 160. 210. 260. 310. 400. + 2.1 2.8 20. 30. 45. 60. 80. 110. 160. 210. 260. + 2.8 3.6 20. 30. 45. 60. 80. 110. 160. + 3.6 4.4 20. 30. 45. 60. +}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 2760. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJets.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/InclusiveJets/fnl5332g_v23_I1459051_fix.str b/v2.6/generators/nlojet++/interface/data/InclusiveJets/fnl5332g_v23_I1459051_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..8542031b4ef335df9f192e50ceefd9fa64bd1ae1 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/InclusiveJets/fnl5332g_v23_I1459051_fix.str @@ -0,0 +1,172 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl5332g_v23_fix +ScenarioDescription { + "d2sigma-jet_dpT_dy_[pb_GeV]" + "CMS_Collaboration" + "Inclusive_Jet_pT" + "anti-kT_R=0.7" + "CMS-PAPER-SMP-15-007, arXiv:1605.04436, Eur. Phys. J. C76, 451 (2016)." + "RIVET_ID=CMS_2016_I1459051/D01-x01-y01,INSPIRE_RECORD=1459051" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.7 # Jet size parameter: Required for all jets +ptjmin 114. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 4.7 # Maximal jet rapidity + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "|y|" # This defines the observables to be calculated! + "pT_[GeV]" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 2. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "pT_jet_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.5 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 790. 846. 905. 967. 1032. 1101. 1172. 1248. 1327. 1410. 1497. 1588. 1684. 1784. 1890. 2000. + 0.5 1.0 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 790. 846. 905. 967. 1032. 1101. 1172. 1248. 1327. 1410. 1497. 1588. 1684. 1784. + 1.0 1.5 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 790. 846. 905. 967. 1032. 1101. 1172. 1248. 1327. 1410. + 1.5 2.0 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 790. 846. 905. 967. 1032. 1101. 1172. 1248. + 2.0 2.5 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 790. 846. 905. 967. 1032. + 2.5 3.0 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 790. + 3.2 4.7 114. 133. 153. 174. 196. 220. +}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 13000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +# OutputFilename InclusiveNJets.tab # Filename of fastNLO output table; overwritten from NLOJet++ and cmdline arg +# # e.g. scenname-hhc-born|nlo-2|3jet.tab +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +OutputCompression true # Write gzipped output table +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/InclusiveJets/fnl5362g_v23_I1459051_fix.str b/v2.6/generators/nlojet++/interface/data/InclusiveJets/fnl5362g_v23_I1459051_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..7635bd4b35071e84e2c92fd6bde69c848d399fdb --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/InclusiveJets/fnl5362g_v23_I1459051_fix.str @@ -0,0 +1,172 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl5362g_v23_fix +ScenarioDescription { + "d2sigma-jet_dpT_dy_[pb_GeV]" + "CMS_Collaboration" + "Inclusive_Jet_pT" + "anti-kT_R=0.4" + "CMS-PAPER-SMP-15-007, arXiv:1605.04436, Eur. Phys. J. C76, 451 (2016)." + "RIVET_ID=CMS_2016_I1459051/D08-x01-y01,INSPIRE_RECORD=1459051" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.4 # Jet size parameter: Required for all jets +ptjmin 114. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 4.7 # Maximal jet rapidity + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "|y|" # This defines the observables to be calculated! + "pT_[GeV]" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 2. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "pT_jet_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.5 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 790. 846. 905. 967. 1032. 1101. 1172. 1248. 1327. 1410. 1497. 1588. 1684. 1784. 1890. 2000. + 0.5 1.0 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 790. 846. 905. 967. 1032. 1101. 1172. 1248. 1327. 1410. 1497. 1588. 1684. 1784. + 1.0 1.5 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 790. 846. 905. 967. 1032. 1101. 1172. 1248. 1327. 1410. + 1.5 2.0 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 790. 846. 905. 967. 1032. 1101. 1172. 1248. + 2.0 2.5 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 790. 846. 905. 967. 1032. + 2.5 3.0 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 790. + 3.2 4.7 114. 133. 153. 174. 196. 220. +}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 13000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +# OutputFilename InclusiveNJets.tab # Filename of fastNLO output table; overwritten from NLOJet++ and cmdline arg +# # e.g. scenname-hhc-born|nlo-2|3jet.tab +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +OutputCompression true # Write gzipped output table +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/InclusiveJets/fnr0001midpHT_I723509_v23_fix.str b/v2.6/generators/nlojet++/interface/data/InclusiveJets/fnr0001midpHT_I723509_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..37659288f7a5010b794175c39264691db0c03d0c --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/InclusiveJets/fnr0001midpHT_I723509_v23_fix.str @@ -0,0 +1,166 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnr0001midpHT_I723509_v23_fix +ScenarioDescription { + "d2sigma-jet_dpT_deta_[pb_GeV]" + "STAR_Collaboration" + "Inclusive_Jet_pT" + "MP_R=0.4,OvThr=0.5" + "arXiv:hep-ex/0608030, Phys. Rev. Lett. 97 (2006) 252001." + "RIVET_ID=STAR_2006_S6870392/D02-x01-y01,SPIRES_ID=6870392,INSPIRE_RECORD=723509" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 11 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.4 # Jet size parameter: Required for all jets +OvThr 0.5 # Overlap threshold: Required for cone jets (Normally 10: 0.75; 11,12: 0.50) +ptjmin 7.6 # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +etajmin 0.2 # Minimal jet pseudorapidity +etajmax 0.8 # Maximal jet pseudorapidity + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "|eta|" # This defines the observables to be calculated! + "pT_[GeV]" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 12.566 # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y|; here it is 2 x 2Pi +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "pT_jet_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.2 0.8 7.6 9.3 11.4 14.1 17.3 21.3 26.2 32.2 39.6 48.7 +}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 200. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJets.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/InclusiveJets/fnr0001midpMB_I723509_v23_fix.str b/v2.6/generators/nlojet++/interface/data/InclusiveJets/fnr0001midpMB_I723509_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..f87663535a9e012af080eefdfed7cae973705bce --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/InclusiveJets/fnr0001midpMB_I723509_v23_fix.str @@ -0,0 +1,166 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnr0001midpMB_I723509_v23_fix +ScenarioDescription { + "d2sigma-jet_dpT_deta_[pb_GeV]" + "STAR_Collaboration" + "Inclusive_Jet_pT" + "MP_R=0.4,OvThr=0.5" + "arXiv:hep-ex/0608030, Phys. Rev. Lett. 97 (2006) 252001." + "RIVET_ID=STAR_2006_S6870392/D01-x01-y01,SPIRES_ID=6870392,INSPIRE_RECORD=723509" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 11 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.4 # Jet size parameter: Required for all jets +OvThr 0.5 # Overlap threshold: Required for cone jets (Normally 10: 0.75; 11,12: 0.50) +ptjmin 5.0 # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +etajmin 0.2 # Minimal jet pseudorapidity +etajmax 0.8 # Maximal jet pseudorapidity + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "|eta|" # This defines the observables to be calculated! + "pT_[GeV]" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 12.566 # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y|; here it is 2 x 2Pi +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "pT_jet_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.2 0.8 5.0 6.2 7.6 9.3 11.4 14.1 +}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 200. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJets.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/InclusiveJets/fnt2004_I743342_v23_fix.str b/v2.6/generators/nlojet++/interface/data/InclusiveJets/fnt2004_I743342_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..454813e13c3792a3fa563f14327a3018df5b6e98 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/InclusiveJets/fnt2004_I743342_v23_fix.str @@ -0,0 +1,169 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnt2004_I743342_v23_fix +ScenarioDescription { + "d2sigma-jet_dpT_dy_[nb_GeV]" + "CDF_Collaboration" + "Inclusive_Jet_pT" + "kT_R=0.7" + "FERMILAB-PUB-07-026-E, arXiv:hep-ex/0701051, Phys. Rev. D 75 (2007) 092006." + "RIVET_ID=CDF_2007_S7057202/D01-x01-y01,SPIRES_ID=7057202,INSPIRE_RECORD=743342" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 9 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 0 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.7 # Jet size parameter: Required for all jets +ptjmin 54. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 2.1 # Maximal jet rapidity + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "|y|" # This defines the observables to be calculated! + "pT_[GeV]" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 2. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "pT_jet_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.1 54. 62. 72. 83. 96. 110. 127. 146. 169. 195. 224. 259. 298. 344. 396. 457. 527. 700. + 0.1 0.7 54. 62. 72. 83. 96. 110. 127. 146. 169. 195. 224. 259. 298. 344. 396. 457. 527. 700. + 0.7 1.1 54. 62. 72. 83. 96. 110. 127. 146. 169. 195. 224. 259. 298. 344. 396. 457. 527. + 1.1 1.6 54. 62. 72. 83. 96. 110. 127. 146. 169. 195. 224. 259. 298. 344. 396. + 1.6 2.1 54. 62. 72. 83. 96. 110. 127. 146. 169. 195. 224. 259. 298. +}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 1960. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 -2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJets.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/InclusiveJets/fnt2007midp_I790693_v23_fix.str b/v2.6/generators/nlojet++/interface/data/InclusiveJets/fnt2007midp_I790693_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..74109fd117e40d071861d84329293c0008e47ecd --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/InclusiveJets/fnt2007midp_I790693_v23_fix.str @@ -0,0 +1,170 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnt2007midp_I790693_v23_fix +ScenarioDescription { + "d2sigma-jet_dpT_dy_[nb_GeV]" + "CDF_Collaboration" + "Inclusive_Jet_pT" + "MP_R=0.7,OvThr=0.75" + "FERMILAB-PUB-08-243-E, arXiv:0807.2204, Phys. Rev. D 78 (2008) 052006." + "RIVET_ID=CDF_2008_S7828950/D01-x01-y01,SPIRES_ID=7828950,INSPIRE_RECORD=790693" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 9 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 11 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.7 # Jet size parameter: Required for all jets +OvThr 0.75 # Overlap threshold: Required for cone jets (Normally 10: 0.75; 11,12: 0.50) +ptjmin 62. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 2.1 # Maximal jet rapidity + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "|y|" # This defines the observables to be calculated! + "pT_[GeV]" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 2. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "pT_jet_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.1 62. 72. 83. 96. 110. 127. 146. 169. 195. 224. 259. 298. 344. 396. 457. 527. 700. + 0.1 0.7 62. 72. 83. 96. 110. 127. 146. 169. 195. 224. 259. 298. 344. 396. 457. 527. 700. + 0.7 1.1 62. 72. 83. 96. 110. 127. 146. 169. 195. 224. 259. 298. 344. 396. 457. 527. + 1.1 1.6 62. 72. 83. 96. 110. 127. 146. 169. 195. 224. 259. 298. 344. 396. 457. + 1.6 2.1 62. 72. 83. 96. 110. 127. 146. 169. 195. 224. 259. 298. +}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 1960. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 -2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJets.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/InclusiveJets/fnt2009midp_I779574_v23_fix.str b/v2.6/generators/nlojet++/interface/data/InclusiveJets/fnt2009midp_I779574_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..82aeb48d47949967b1c6d56af935dcede64f3bde --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/InclusiveJets/fnt2009midp_I779574_v23_fix.str @@ -0,0 +1,171 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnt2009midp_I779574_v23_fix +ScenarioDescription { + "d2sigma-jet_dpT_dy_[pb_GeV]" + "D0_Collaboration" + "Inclusive_Jet_pT" + "MP_R=0.7,OvThr=0.5" + "FERMILAB-PUB-08-034-E, arXiv:0802.2400, Phys. Rev. Lett. 101 (2008) 062001." + "RIVET_ID=D0_2008_S7662670/D01-x01-y01,SPIRES_ID=7662670,INSPIRE_RECORD=779574" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 12 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.7 # Jet size parameter: Required for all jets +OvThr 0.5 # Overlap threshold: Required for cone jets (Normally 10: 0.75; 11,12: 0.50) +ptjmin 50. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 2.4 # Maximal jet rapidity + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "|y|" # This defines the observables to be calculated! + "pT_[GeV]" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 2. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "pT_jet_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.4 50. 60. 70. 80. 90. 100. 110. 120. 130. 145. 160. 180. 200. 220. 240. 265. 295. 325. 360. 400. 445. 490. 540. 665. + 0.4 0.8 50. 60. 70. 80. 90. 100. 110. 120. 130. 145. 160. 180. 200. 220. 240. 265. 295. 325. 360. 400. 445. 495. 635. + 0.8 1.2 50. 60. 70. 80. 90. 100. 110. 125. 140. 155. 170. 190. 210. 230. 250. 270. 300. 335. 375. 415. 520. + 1.2 1.6 50. 60. 70. 80. 90. 100. 110. 125. 140. 155. 170. 190. 215. 240. 265. 290. 325. 415. + 1.6 2.0 50. 60. 70. 80. 90. 100. 110. 125. 140. 160. 175. 190. 210. 235. 260. 320. + 2.0 2.4 50. 60. 70. 80. 90. 100. 110. 120. 130. 145. 160. 175. 200. 230. +}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 1960. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 -2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJets.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/InclusiveNJetDiffs/Makefile.am b/v2.6/generators/nlojet++/interface/data/InclusiveNJetDiffs/Makefile.am new file mode 100644 index 0000000000000000000000000000000000000000..571eb28232d3952da7f88012f03a75fee8ca616f --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/InclusiveNJetDiffs/Makefile.am @@ -0,0 +1,17 @@ +# -*- Automake -*- +# ----------------------------------------------------------------------------- +# +# K. Rabbertz, 17.01.2015 +# +# NLOJet++ interface to fastNLO toolkit +# +# ----------------------------------------------------------------------------- +# Use GNU standards +AUTOMAKE_OPTIONS = gnu + +# Files that are required to build the project but that can be +# recreated IF the necessary autotools etc. are available by: +# "autoreconf -i; ./configure" +# Use "make maintainer-clean" (on a build machine) before svn commits, +# but NOT before distribution with "make dist"! +MAINTAINERCLEANFILES = Makefile.in diff --git a/v2.6/generators/nlojet++/interface/data/InclusiveNJetDiffs/fnl2342e-2332e_I1298810_v23_fix.str b/v2.6/generators/nlojet++/interface/data/InclusiveNJetDiffs/fnl2342e-2332e_I1298810_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..54782506f98996014d4b24c8bae6413fbc1c6599 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/InclusiveNJetDiffs/fnl2342e-2332e_I1298810_v23_fix.str @@ -0,0 +1,178 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl2342e-2332e_v23_fix +ScenarioDescription { + "d2sigma-jet_ak5-ak7_dpT_dy_[pb_GeV]" + "CMS_Collaboration" + "Inclusive_jet_pT" + "anti-kT_R=0.5-0.7" + "CMS-PAPER-SMP-13-002, arXiv:1406.0324, Phys. Rev. D 90 (2014) 072006." + "RIVET_ID=CMS_2014_I1298810/D07-x01-y01,INSPIRE_RECORD=1298810" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +#JetAlgo2 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.7 # Jet size parameter: Required for all jets +Rjet2 0.5 # Jet size parameter: Required for all jets +ptjmin 56. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 3.0 # Maximal jet rapidity +Njetmin 3 # Minimal number of jets required to be in preselected phase space + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 3 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "|y|" # This defines the observables to be calculated! + "pT_[GeV]" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 2. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # + # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) + # Here, multiple jets per event can fall into the same obsbin. In that case: +# ScaleDescriptionScale1 "pT_jet_min_[GeV]"# - take the minimum pT of all jets within same bin +ScaleDescriptionScale1 "pT_jet_ave_[GeV]"# - take the average pT of all jets within same bin +# ScaleDescriptionScale1 "pT_jet_max_[GeV]"# - take the maximum pT of all jets within same bin +# ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.5 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 790. 846. 905. 967. 1032. 1101. 1172. 1248. 1327. + 0.5 1.0 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 790. 846. 905. 967. 1032. 1101. 1172. 1248. 1327. + 1.0 1.5 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 790. 846. 905. 967. 1032. 1101. + 1.5 2.0 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 790. 846. + 2.0 2.5 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. + 2.5 3.0 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. +}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 7000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveJetDiffs.tab.gz # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +OutputCompression true # (def.=true) Write out fastNLO table/grid in gzipped format (requires zlib) +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/InclusiveNJetDiffs/fnl2342e-2332e_y0_I1298810_v23_fix.str b/v2.6/generators/nlojet++/interface/data/InclusiveNJetDiffs/fnl2342e-2332e_y0_I1298810_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..d3b4042469e229c7aaf9f5208cb979e51d6d3772 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/InclusiveNJetDiffs/fnl2342e-2332e_y0_I1298810_v23_fix.str @@ -0,0 +1,173 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl2342e-2332e_v23_fix +ScenarioDescription { + "d2sigma-jet_ak5-ak7_dpT_dy_[pb_GeV]" + "CMS_Collaboration" + "Inclusive_jet_pT" + "anti-kT_R=0.5-0.7" + "CMS-PAPER-SMP-13-002, arXiv:1406.0324, Phys. Rev. D 90 (2014) 072006." + "RIVET_ID=CMS_2014_I1298810/D07-x01-y01,INSPIRE_RECORD=1298810" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +#JetAlgo2 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.7 # Jet size parameter: Required for all jets +Rjet2 0.5 # Jet size parameter: Required for all jets +ptjmin 56. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 3.0 # Maximal jet rapidity +Njetmin 3 # Minimal number of jets required to be in preselected phase space + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 3 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "|y|" # This defines the observables to be calculated! + "pT_[GeV]" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 2. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # + # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) + # Here, multiple jets per event can fall into the same obsbin. In that case: +# ScaleDescriptionScale1 "pT_jet_min_[GeV]"# - take the minimum pT of all jets within same bin +ScaleDescriptionScale1 "pT_jet_ave_[GeV]"# - take the average pT of all jets within same bin +# ScaleDescriptionScale1 "pT_jet_max_[GeV]"# - take the maximum pT of all jets within same bin +# ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.5 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 790. 846. 905. 967. 1032. 1101. 1172. 1248. 1327. +}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 7000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveJetDiffs.tab.gz # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +OutputCompression true # (def.=true) Write out fastNLO table/grid in gzipped format (requires zlib) +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/InclusiveNJetEvents/Makefile.am b/v2.6/generators/nlojet++/interface/data/InclusiveNJetEvents/Makefile.am new file mode 100644 index 0000000000000000000000000000000000000000..571eb28232d3952da7f88012f03a75fee8ca616f --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/InclusiveNJetEvents/Makefile.am @@ -0,0 +1,17 @@ +# -*- Automake -*- +# ----------------------------------------------------------------------------- +# +# K. Rabbertz, 17.01.2015 +# +# NLOJet++ interface to fastNLO toolkit +# +# ----------------------------------------------------------------------------- +# Use GNU standards +AUTOMAKE_OPTIONS = gnu + +# Files that are required to build the project but that can be +# recreated IF the necessary autotools etc. are available by: +# "autoreconf -i; ./configure" +# Use "make maintainer-clean" (on a build machine) before svn commits, +# but NOT before distribution with "make dist"! +MAINTAINERCLEANFILES = Makefile.in diff --git a/v2.6/generators/nlojet++/interface/data/InclusiveNJetEvents/fnl2732dena_I1230937_v23_fix.str b/v2.6/generators/nlojet++/interface/data/InclusiveNJetEvents/fnl2732dena_I1230937_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..21713e9052cfa24685da8d980cf937c5f7c44beb --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/InclusiveNJetEvents/fnl2732dena_I1230937_v23_fix.str @@ -0,0 +1,165 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl2732dena_I1230937_v23_fix +ScenarioDescription { + "dsigma-jet2+_d<pT_1,2>_[pb_GeV]" + "CMS_Collaboration" + "Inclusive_Dijet_pT" + "anti-kT_R=0.7" + "CMS-PAPER-QCD-11-003, arXiv:1304.7498, Eur. Phys. J. C 73 (2013) 2604." + "RIVET_ID=CMS_2013_I1230937/D01-x01-y01,INSPIRE_RECORD=1230937" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.7 # Jet size parameter: Required for all jets +ptjmin 150. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 5.0 # Maximal jet rapidity +Njetmin 2 # Minimal number of jets required to be in preselected phase space +ycjjmax 2.5 # Maximal jet rapidity for leading two jets and further central jets + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 1 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "<pT_1,2>_[GeV]" # This defines the observables to be calculated! +} +DimensionIsDifferential { # Specify for each dimension whether + 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 1. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "<pT_1,2>_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +SingleDifferentialBinning { + 250. 275. 300. 330. 360. 390. 420. 450. 480. 510. 540. 570. 600. 640. 680. 720. 760. 800. 850. 900. 950. 1000. 1060. 1120. 1180. 1250. 1320. 1390. +} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 7000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJetEvents.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/InclusiveNJetEvents/fnl2732numa_I1230937_v23_fix.str b/v2.6/generators/nlojet++/interface/data/InclusiveNJetEvents/fnl2732numa_I1230937_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..4315cf6b83dc299163433318ed8a07acad3a8089 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/InclusiveNJetEvents/fnl2732numa_I1230937_v23_fix.str @@ -0,0 +1,166 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl2732numa_I1230937_v23_fix +ScenarioDescription { + "dsigma-jet3+_d<pT_1,2>_[pb_GeV]" + "CMS_Collaboration" + "Inclusive_3jet_pT" + "anti-kT_R=0.7" + "CMS-PAPER-QCD-11-003, arXiv:1304.7498, Eur. Phys. J. C 73 (2013) 2604." + "RIVET_ID=CMS_2013_I1230937/D01-x01-y01,INSPIRE_RECORD=1230937" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.7 # Jet size parameter: Required for all jets +ptjmin 150. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 5.0 # Maximal jet rapidity +Njetmin 3 # Minimal number of jets required to be in preselected phase space +ycjjmax 2.5 # Maximal jet rapidity for leading two jets and further central jets +Ncjetmin 3 # Minimal number of central jets + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 3 # Number of jets for the LO process +DifferentialDimension 1 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "<pT_1,2>_[GeV]" # This defines the observables to be calculated! +} +DimensionIsDifferential { # Specify for each dimension whether + 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 1. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "<pT_1,2>_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +SingleDifferentialBinning { + 250. 275. 300. 330. 360. 390. 420. 450. 480. 510. 540. 570. 600. 640. 680. 720. 760. 800. 850. 900. 950. 1000. 1060. 1120. 1180. 1250. 1320. 1390. +} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 7000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJetEvents.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/Makefile.am b/v2.6/generators/nlojet++/interface/data/Makefile.am new file mode 100644 index 0000000000000000000000000000000000000000..6b4bcb1d0218aa0e68da05ee4eb38cfc1608af72 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/Makefile.am @@ -0,0 +1,58 @@ +# -*- Automake -*- +# ----------------------------------------------------------------------------- +# +# K. Rabbertz, 12.02.2015 +# +# NLOJet++ interface to fastNLO toolkit +# +# ----------------------------------------------------------------------------- +# Use GNU standards +AUTOMAKE_OPTIONS = gnu + +# Subdirectories +SUBDIRS = AzimuthalDecorrelation DijetAngular DijetMass Examples InclusiveJets InclusiveNJetDiffs InclusiveNJetEvents RivetAdditions check +#SUBDIRS = Examples InclusiveJets DijetMass RivetAdditions + +# Install all data files from gzipped tar archive to avoid limits in command line length! +FIRST = RivetAdditions +MYDIRS = Examples InclusiveJets DijetMass DijetAngular AzimuthalDecorrelation InclusiveNJetEvents InclusiveNJetDiffs +ARCHIVE = Steering +TAR = $(ARCHIVE).tar +TARGZ = $(TAR).gz +# and distribute ... +pkgdata_DATA = $(TARGZ) +EXTRA_DIST = $(TARGZ) + +# Create archive +$(TARGZ): + tar cf $(TAR) $(FIRST)/*.info $(FIRST)/*.plot $(FIRST)/*.yoda; \ + for i in $(MYDIRS); do \ + echo $$i; \ + tar rf $(TAR) $$i/*.str; \ + done; \ + gzip $(TAR) + +# Install archive hook +install-data-hook: + mv $(TARGZ) $(DESTDIR)$(pkgdatadir); \ + cd $(DESTDIR)$(pkgdatadir); \ + tar xfz $(TARGZ); \ + rm -f $(TARGZ); + +# Uninstall archive hook +uninstall-local: + cd $(DESTDIR)$(pkgdatadir); \ + for i in $(FIRST) $(MYDIRS); do \ + rm -f $$i/*.info $$i/*.plot $$i/*.yoda $$i/*.str; \ + rmdir $$i; \ + done + +# Built by make --> delete with make clean +MOSTLYCLEANFILES = $(TARGZ) + +# Files that are required to build the project but that can be +# recreated IF the necessary autotools etc. are available by: +# "autoreconf -i; ./configure" +# Use "make maintainer-clean" (on a build machine) before svn commits, +# but NOT before distribution with "make dist"! +MAINTAINERCLEANFILES = Makefile.in diff --git a/v2.6/generators/nlojet++/interface/data/README b/v2.6/generators/nlojet++/interface/data/README new file mode 100644 index 0000000000000000000000000000000000000000..02f7f354cbc174dd0de94bb6dd2cc37760d05976 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/README @@ -0,0 +1,2 @@ +Add and check new steering after OutputFilename: +OutputCompression true # Write gzipped output table diff --git a/v2.6/generators/nlojet++/interface/data/RivetAdditions/ATLAS_2013_I1228693.info b/v2.6/generators/nlojet++/interface/data/RivetAdditions/ATLAS_2013_I1228693.info new file mode 100644 index 0000000000000000000000000000000000000000..66cd05b2cb60e4e6165dc3886ade4a4e79a70174 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/RivetAdditions/ATLAS_2013_I1228693.info @@ -0,0 +1,45 @@ +Name: ATLAS_2013_I1228693 +Year: 2013 +Summary: Measurement of the inclusive jet cross section in pp collisions at sqrt(s) = 2.76 TeV and comparison to the inclusive jet cross section at sqrt(s) = 7 TeV using the ATLAS detector +Experiment: ATLAS +Collider: LHC 2.76 TeV +InspireID: 1228693 +Status: UNVALIDATED +Authors: + - Klaus Rabbertz <klaus.rabbertz@cern.ch> +References: + - EPJC (2013) 73 2509 +RunInfo: + pp QCD jet production with a minimum jet pT of 20 GeV at 2.76 TeV. +NumEvents: 10000000 +Beams: [p+, p+] +Energies: [2760] +PtCuts: [20] +Description: +This paper reports the measurement of inclusive jet cross sections in proton-proton collisions at a +centre-of-mass energy of 2.76 TeV using a data sample of integrated luminosity of 0.20 pb-1 collected in 2011. +Jets are identified using the anti-kt algorithm with two radius parameters (0.4 and 0.6). The cross sections are +presented as a function of the jet transverse momentum and rapidity covering jets from 20-430 GeV in transverse momentum +and |rapidity| < 4.4. The data are also compared with previous ATLAS 7 TeV cross sections as functions of PT and XT. +The main tables below show the results correlated and uncorrelated systematic errors individually combined, as presented +in the plots in the paper. The first table below gives access to the complete tables with the various sources of +systematic error individually presented. Correlations over the rapidity bins and to the 7 TeV data are shown in table 1 +of the paper and repeated below. +NeedCrossSection: yes +BibKey: Aad:2010wv +BibTeX: '@ARTICLE{Aad:2013lpa, + author = {Aad, Georges and others}, + title = {Measurement of the inclusive jet cross section in $pp$ collisions at $\sqrt{s}$=2.76 {TeV} and comparison to the inclusive jet cross section at $\sqrt{s}$=7 {TeV} using the {ATLAS} detector}, + journal = {Eur. Phys. J. C}, + year = {2013}, + volume = {73}, + pages = {2509}, + archiveprefix = {arXiv}, + collaboration = {ATLAS}, + doi = {10.1140/epjc/s10052-013-2509-4}, + eprint = {1304.4739}, + primaryclass = {hep-ex}, + reportnumber = {CERN-PH-EP-2013-036}, + slaccitation = {%%CITATION = ARXIV:1304.4739;%%} +} +' diff --git a/v2.6/generators/nlojet++/interface/data/RivetAdditions/ATLAS_2013_I1228693.plot b/v2.6/generators/nlojet++/interface/data/RivetAdditions/ATLAS_2013_I1228693.plot new file mode 100644 index 0000000000000000000000000000000000000000..386b5be02eeff4e5bf178e151f0426d7822a89f1 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/RivetAdditions/ATLAS_2013_I1228693.plot @@ -0,0 +1,69 @@ +# BEGIN PLOT /ATLAS_2013_I1228693/d08-x01-y01 +Title=Inclusive jet $p_T$ spectrum for $|y|<0.3$. anti-kT, $R=0.6$. +XLabel=$p_{T}$ [GeV] +YLabel=$\mathrm{d}^{2}\sigma/\mathrm{d}p_{T}\,\mathrm{d}y$ [nb/GeV] +LogY=1 +RatioPlotYMin=0.0 +RatioPlotYMax=2.0 +FullRange=1 +# END PLOT + +# BEGIN PLOT /ATLAS_2013_I1228693/d09-x01-y01 +Title=Inclusive jet $p_T$ spectrum for $0.3<|y|<0.8$. anti-kT, $R=0.6$. +XLabel=$p_{T}$ [GeV] +YLabel=$\mathrm{d}^{2}\sigma/\mathrm{d}p_{T}\,\mathrm{d}y$ [nb/GeV] +LogY=1 +RatioPlotYMin=0.0 +RatioPlotYMax=2.0 +FullRange=1 +# END PLOT + +# BEGIN PLOT /ATLAS_2013_I1228693/d10-x01-y01 +Title=Inclusive jet $p_T$ spectrum for $0.8<|y|<1.2$. anti-kT, $R=0.6$. +XLabel=$p_{T}$ [GeV] +YLabel=$\mathrm{d}^{2}\sigma/\mathrm{d}p_{T}\,\mathrm{d}y$ [nb/GeV] +LogY=1 +RatioPlotYMin=0.0 +RatioPlotYMax=2.0 +FullRange=1 +# END PLOT + +# BEGIN PLOT /ATLAS_2013_I1228693/d11-x01-y01 +Title=Inclusive jet $p_T$ spectrum for $1.2<|y|<2.1$. anti-kT, $R=0.6$. +XLabel=$p_{T}$ [GeV] +YLabel=$\mathrm{d}^{2}\sigma/\mathrm{d}p_{T}\,\mathrm{d}y$ [nb/GeV] +LogY=1 +RatioPlotYMin=0.0 +RatioPlotYMax=2.0 +FullRange=1 +# END PLOT + +# BEGIN PLOT /ATLAS_2013_I1228693/d12-x01-y01 +Title=Inclusive jet $p_T$ spectrum for $2.1<|y|<2.8$. anti-kT, $R=0.6$. +XLabel=$p_{T}$ [GeV] +YLabel=$\mathrm{d}^{2}\sigma/\mathrm{d}p_{T}\,\mathrm{d}y$ [nb/GeV] +LogY=1 +RatioPlotYMin=0.0 +RatioPlotYMax=2.0 +FullRange=1 +# END PLOT + +# BEGIN PLOT /ATLAS_2013_I1228693/d13-x01-y01 +Title=Inclusive jet $p_T$ spectrum for $2.8<|y|<3.6$. anti-kT, $R=0.6$. +XLabel=$p_{T}$ [GeV] +YLabel=$\mathrm{d}^{2}\sigma/\mathrm{d}p_{T}\,\mathrm{d}y$ [nb/GeV] +LogY=1 +RatioPlotYMin=0.0 +RatioPlotYMax=2.0 +FullRange=1 +# END PLOT + +# BEGIN PLOT /ATLAS_2013_I1228693/d14-x01-y01 +Title=Inclusive jet $p_T$ spectrum for $3.6<|y|<4.4$. anti-kT, $R=0.6$. +XLabel=$p_{T}$ [GeV] +YLabel=$\mathrm{d}^{2}\sigma/\mathrm{d}p_{T}\,\mathrm{d}y$ [nb/GeV] +LogY=1 +RatioPlotYMin=0.0 +RatioPlotYMax=2.0 +FullRange=1 +# END PLOT diff --git a/v2.6/generators/nlojet++/interface/data/RivetAdditions/ATLAS_2013_I1228693.yoda b/v2.6/generators/nlojet++/interface/data/RivetAdditions/ATLAS_2013_I1228693.yoda new file mode 100644 index 0000000000000000000000000000000000000000..b0f77978d260fb9877443827ad48cd9ca4673ca1 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/RivetAdditions/ATLAS_2013_I1228693.yoda @@ -0,0 +1,201 @@ +# BEGIN YODA_SCATTER2D /REF/ATLAS_2013_I1228693/d01-x01-y01 +Path=/REF/ATLAS_2013_I1228693/d01-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +25.0 5.0 5.0 1308.0 272.19241152243757 301.7555716514941 +37.5 7.5 7.5 194.5 31.892923620452237 39.098080184326186 +52.5 7.5 7.5 33.17 3.87048277902796 4.4488192113172 +70.0 10.0 10.0 7.315 0.8106303984487938 0.8193208192956225 +95.0 15.0 15.0 1.378 0.1671792871213417 0.17792050615361907 +135.0 25.0 25.0 0.1987 0.022605913083660212 0.021999778295110156 +185.0 25.0 25.0 0.02552 0.003930968956604975 0.0038616609001537153 +235.0 25.0 25.0 0.004231 9.96426370746946E-4 0.001012867113120611 +285.0 25.0 25.0 0.001196 4.965768955630538E-4 4.969872048323176E-4 +355.0 45.0 45.0 4.272E-4 2.056172136129152E-4 2.074232811907323E-4 +450.0 50.0 50.0 7.04E-5 8.183641724286811E-5 8.19979840813663E-5 +# END YODA_SCATTER2D + +# BEGIN YODA_SCATTER2D /REF/ATLAS_2013_I1228693/d02-x01-y01 +Path=/REF/ATLAS_2013_I1228693/d02-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +25.0 5.0 5.0 1304.0 263.01473117679166 293.29009568221016 +37.5 7.5 7.5 188.7 36.55058112812435 36.64410674591618 +52.5 7.5 7.5 30.68 3.8285751349367563 4.136197679216021 +70.0 10.0 10.0 6.991 0.7852483400354311 0.7672245868546447 +95.0 15.0 15.0 1.357 0.15308674199227706 0.15952762948270122 +135.0 25.0 25.0 0.186 0.02314999966479481 0.023893240296786872 +185.0 25.0 25.0 0.02128 0.003286602825484089 0.003138771145630086 +235.0 25.0 25.0 0.003343 7.609908304663401E-4 8.01329372913941E-4 +285.0 25.0 25.0 9.73E-4 3.4148714126562655E-4 3.491118711952517E-4 +355.0 45.0 45.0 3.594E-4 1.6970624440437778E-4 1.7279916493515934E-4 +450.0 50.0 50.0 8.8E-5 7.144063519538442E-5 7.136557643233886E-5 +# END YODA_SCATTER2D + +# BEGIN YODA_SCATTER2D /REF/ATLAS_2013_I1228693/d03-x01-y01 +Path=/REF/ATLAS_2013_I1228693/d03-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +25.0 5.0 5.0 1144.0 276.3797931739583 293.03063696753617 +37.5 7.5 7.5 159.9 28.748757135778927 30.675222001250457 +52.5 7.5 7.5 26.9 4.190160942123822 4.240535657909268 +70.0 10.0 10.0 5.937 0.8428794257631693 0.8540914632294133 +95.0 15.0 15.0 1.159 0.14548769625174496 0.14789244191185025 +135.0 25.0 25.0 0.1508 0.019261121487597753 0.022203316981063884 +185.0 25.0 25.0 0.01714 0.00311033153023918 0.0029607781065523974 +235.0 25.0 25.0 0.002282 6.115257598767202E-4 6.211629569748989E-4 +285.0 25.0 25.0 6.512E-4 2.988189915584242E-4 3.005458661763186E-4 +355.0 45.0 45.0 5.24E-5 6.60237573376493E-5 6.618643730345969E-5 +# END YODA_SCATTER2D + +# BEGIN YODA_SCATTER2D /REF/ATLAS_2013_I1228693/d04-x01-y01 +Path=/REF/ATLAS_2013_I1228693/d04-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +25.0 5.0 5.0 946.2 259.1569080797963 298.74087461975006 +37.5 7.5 7.5 127.0 28.49446729542421 32.71542924997317 +52.5 7.5 7.5 20.07 3.0428688216148916 3.6834481443441 +70.0 10.0 10.0 4.185 0.5469468387341223 0.5486107225886585 +95.0 15.0 15.0 0.7174 0.10111637843792667 0.10218455822669098 +135.0 25.0 25.0 0.08204 0.011869373569700466 0.012914380742951013 +185.0 25.0 25.0 0.009146 0.0018072016939500802 0.001835341518211202 +235.0 25.0 25.0 9.061E-4 2.8741493428278655E-4 2.9003366491985874E-4 +285.0 25.0 25.0 8.94E-5 7.19068536440081E-5 7.32977182789751E-5 +355.0 45.0 45.0 2.38E-5 2.9942971443629303E-5 2.9933121007071746E-5 +# END YODA_SCATTER2D + +# BEGIN YODA_SCATTER2D /REF/ATLAS_2013_I1228693/d05-x01-y01 +Path=/REF/ATLAS_2013_I1228693/d05-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +25.0 5.0 5.0 625.1 222.33836026451758 261.6552716497499 +37.5 7.5 7.5 77.9 21.231151599018364 27.801832268287644 +52.5 7.5 7.5 10.31 2.012142506808352 2.4383200133140854 +70.0 10.0 10.0 1.804 0.30375144303696733 0.3260125491682797 +95.0 15.0 15.0 0.2169 0.04079570152612649 0.04600962332039353 +135.0 25.0 25.0 0.01123 0.002658772879269119 0.002787760135338046 +185.0 25.0 25.0 5.265E-4 2.789337174330131E-4 2.652406097773161E-4 +235.0 25.0 25.0 6.26E-5 7.646778668896335E-5 7.724557939745162E-5 +# END YODA_SCATTER2D + +# BEGIN YODA_SCATTER2D /REF/ATLAS_2013_I1228693/d06-x01-y01 +Path=/REF/ATLAS_2013_I1228693/d06-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +25.0 5.0 5.0 313.3 137.56594512382196 169.14554883986867 +37.5 7.5 7.5 28.21 11.247253414607542 15.751176967211087 +52.5 7.5 7.5 2.254 0.7678519222307645 1.0566718584204844 +70.0 10.0 10.0 0.1774 0.061483902030212756 0.06403922054740203 +95.0 15.0 15.0 0.004533 0.0019907261857206276 0.0013986475822594482 +135.0 25.0 25.0 1.507E-4 1.2813367353315717E-4 1.2801053849035126E-4 +# END YODA_SCATTER2D + +# BEGIN YODA_SCATTER2D /REF/ATLAS_2013_I1228693/d07-x01-y01 +Path=/REF/ATLAS_2013_I1228693/d07-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +25.0 5.0 5.0 46.51 36.07992827810394 59.294977173106254 +37.5 7.5 7.5 1.33 1.1816768578528567 2.9831118592530186 +52.5 7.5 7.5 0.009127 0.01872806455628573 0.01934364746205225 +# END YODA_SCATTER2D + +# BEGIN YODA_SCATTER2D /REF/ATLAS_2013_I1228693/d08-x01-y01 +Path=/REF/ATLAS_2013_I1228693/d08-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +25.0 5.0 5.0 2542.0 673.3946080423573 794.4123766886818 +37.5 7.5 7.5 300.4 67.10204457890086 67.04238874980514 +52.5 7.5 7.5 47.42 5.503376513705018 6.065255280737655 +70.0 10.0 10.0 10.08 1.2040301562735047 1.1880318104832044 +95.0 15.0 15.0 1.836 0.20305396369004966 0.22008272222961983 +135.0 25.0 25.0 0.2553 0.026445740682055022 0.025640916677786698 +185.0 25.0 25.0 0.03188 0.004879077513661779 0.004930867346373861 +235.0 25.0 25.0 0.005418 0.001191300299077676 0.001250831636493865 +285.0 25.0 25.0 0.001592 5.808576226539512E-4 5.846781202678957E-4 +355.0 45.0 45.0 4.135E-4 2.0387998980687144E-4 2.054700806007106E-4 +450.0 50.0 50.0 6.75E-5 8.181605918155677E-5 8.202947046641226E-5 +# END YODA_SCATTER2D + +# BEGIN YODA_SCATTER2D /REF/ATLAS_2013_I1228693/d09-x01-y01 +Path=/REF/ATLAS_2013_I1228693/d09-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +25.0 5.0 5.0 2446.0 579.0198148095452 692.5495135141458 +37.5 7.5 7.5 302.5 58.70236779083106 63.062167091787295 +52.5 7.5 7.5 45.26 5.961523774853539 6.17603837232639 +70.0 10.0 10.0 9.701 1.0706182000441098 1.080244138371364 +95.0 15.0 15.0 1.791 0.20219810970451726 0.20308494829536233 +135.0 25.0 25.0 0.2374 0.028037864658757444 0.028478383676971555 +185.0 25.0 25.0 0.02827 0.003976246601479465 0.004086071320173572 +235.0 25.0 25.0 0.00364 7.887523886746714E-4 8.068384949467892E-4 +285.0 25.0 25.0 0.001182 3.9177095345852274E-4 4.0088047110773556E-4 +355.0 45.0 45.0 3.585E-4 1.735997854725129E-4 1.756531800768278E-4 +450.0 50.0 50.0 1.351E-4 8.967011505621035E-5 9.022853538229468E-5 +# END YODA_SCATTER2D + +# BEGIN YODA_SCATTER2D /REF/ATLAS_2013_I1228693/d10-x01-y01 +Path=/REF/ATLAS_2013_I1228693/d10-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +25.0 5.0 5.0 2275.0 548.5283538079414 609.3592065286697 +37.5 7.5 7.5 255.7 56.93740862907004 56.988233651413516 +52.5 7.5 7.5 39.77 6.036196480251864 5.898763837301846 +70.0 10.0 10.0 8.237 1.007590835614636 1.0035036055442201 +95.0 15.0 15.0 1.505 0.1671403970917863 0.18037216232625808 +135.0 25.0 25.0 0.1959 0.024390989704495384 0.025266239997791515 +185.0 25.0 25.0 0.02073 0.0031277366019697057 0.003277520516263018 +235.0 25.0 25.0 0.002537 6.53429603768432E-4 6.842973777005507E-4 +285.0 25.0 25.0 7.773E-4 3.3852078955830776E-4 3.417940038708274E-4 +355.0 45.0 45.0 1.077E-4 9.279342562068985E-5 9.269596349895771E-5 +# END YODA_SCATTER2D + +# BEGIN YODA_SCATTER2D /REF/ATLAS_2013_I1228693/d11-x01-y01 +Path=/REF/ATLAS_2013_I1228693/d11-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +25.0 5.0 5.0 1775.0 552.490669745879 633.3484799510062 +37.5 7.5 7.5 206.7 50.171791598120144 55.30078006351899 +52.5 7.5 7.5 28.38 4.816805062407654 4.991535361442609 +70.0 10.0 10.0 5.732 0.7048794011451321 0.7972220891671279 +95.0 15.0 15.0 0.9314 0.12204340018969645 0.12444633340967502 +135.0 25.0 25.0 0.1041 0.015829294155394295 0.015543005028951127 +185.0 25.0 25.0 0.01057 0.0020098762585246386 0.002065966731086684 +235.0 25.0 25.0 0.001331 3.747403967363006E-4 3.9953746852063824E-4 +285.0 25.0 25.0 8.75E-5 7.25367316002727E-5 7.355775231068443E-5 +355.0 45.0 45.0 2.25E-5 2.8996599477352516E-5 2.9043700806930583E-5 +# END YODA_SCATTER2D + +# BEGIN YODA_SCATTER2D /REF/ATLAS_2013_I1228693/d12-x01-y01 +Path=/REF/ATLAS_2013_I1228693/d12-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +25.0 5.0 5.0 1154.0 437.2076388765412 522.7469697618533 +37.5 7.5 7.5 122.5 34.16871750958762 38.55908703940616 +52.5 7.5 7.5 14.39 3.0956699670249086 3.1085294520317803 +70.0 10.0 10.0 2.422 0.3733706055826035 0.42540056539257215 +95.0 15.0 15.0 0.2803 0.04673081033230646 0.05332776561642162 +135.0 25.0 25.0 0.01515 0.0033775136953682365 0.003756662380890782 +185.0 25.0 25.0 6.44E-4 2.7475120919784866E-4 2.867033103248025E-4 +235.0 25.0 25.0 6.3E-5 7.74685381010898E-5 8.083401161002713E-5 +# END YODA_SCATTER2D + +# BEGIN YODA_SCATTER2D /REF/ATLAS_2013_I1228693/d13-x01-y01 +Path=/REF/ATLAS_2013_I1228693/d13-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +25.0 5.0 5.0 558.3 252.86908411374708 305.7717713578714 +37.5 7.5 7.5 44.0 17.298591466359337 22.225133466415897 +52.5 7.5 7.5 3.267 1.074841411184236 1.462594158863849 +70.0 10.0 10.0 0.2558 0.08096690281135868 0.08791115112476916 +95.0 15.0 15.0 0.00753 0.0026978446337363464 0.0023487895090997407 +135.0 25.0 25.0 1.268E-4 1.2367072535380392E-4 1.0843273586175717E-4 +# END YODA_SCATTER2D + +# BEGIN YODA_SCATTER2D /REF/ATLAS_2013_I1228693/d14-x01-y01 +Path=/REF/ATLAS_2013_I1228693/d14-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +25.0 5.0 5.0 87.29 60.02493533702639 95.07337164611486 +37.5 7.5 7.5 2.22 1.5752065183118056 3.7766014657413876 +52.5 7.5 7.5 0.01433 0.017901598144271506 0.018400531569017678 +# END YODA_SCATTER2D diff --git a/v2.6/generators/nlojet++/interface/data/RivetAdditions/CMS_2011_I895742.info b/v2.6/generators/nlojet++/interface/data/RivetAdditions/CMS_2011_I895742.info new file mode 100644 index 0000000000000000000000000000000000000000..b4a9017fa17aaa2b74322aa32695cfa76adbbdcf --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/RivetAdditions/CMS_2011_I895742.info @@ -0,0 +1,39 @@ +Name: CMS_2011_I895742 +Year: 2011 +Summary: Measurement of the differential dijet production cross section in proton-proton collisions at √s=7 TeV +Experiment: CMS +Collider: LHC 7.0 TeV +InspireID: 895742 +Status: UNVALIDATED +Authors: + - Klaus Rabbertz <klaus.rabbertz@cern.ch> +References: + - Phys. Lett. B 700 (2011) 187. +RunInfo: + pp QCD dijet production with a minimum jet pT of 30 GeV at 7 TeV. +NumEvents: 10000000 +Beams: [p+, p+] +Energies: [7000] +PtCuts: [30] +Description: + 'A measurement of the double-differential inclusive dijet production cross section in proton-proton collisions + at sqrt(s)=7 TeV is presented as a function of the dijet invariant mass and jet rapidity. The data correspond + to an integrated luminosity of 36 inverse picobarns, recorded with the CMS detector at the LHC. The measurement + covers the dijet mass range 0.2 TeV to 3.5 TeV and jet rapidities up to |y|=2.5. It is found to be in + good agreement with next-to-leading-order QCD predictions.' +NeedCrossSection: yes +BibKey: Chatrchyan:2011qta +BibTeX: '@ARTICLE{Chatrchyan:2011qta, + author = {Chatrchyan, Serguei and others}, + title = {Measurement of the differential dijet production cross section in proton-proton collisions at $\sqrt{s}=7$ {TeV}}, + journal = {Phys. Lett. B}, + year = {2011}, + volume = {700}, + pages = {187}, + archiveprefix = {arXiv}, + collaboration = {CMS}, + doi = {10.1016/j.physletb.2011.05.027}, + eprint = {1104.1693}, + primaryclass = {hep-ex}, + slaccitation = {%%CITATION = ARXIV:1104.1693;%%} +}' diff --git a/v2.6/generators/nlojet++/interface/data/RivetAdditions/CMS_2011_I895742.plot b/v2.6/generators/nlojet++/interface/data/RivetAdditions/CMS_2011_I895742.plot new file mode 100644 index 0000000000000000000000000000000000000000..d3e2e1b21323459e37314eb7f2a5a20b8556332a --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/RivetAdditions/CMS_2011_I895742.plot @@ -0,0 +1,36 @@ +# BEGIN PLOT /CMS_2011_I895742/d.* +XLabel=$M_\mathrm{jj}$ [GeV] +YLabel=$\mathrm{d}^{2}\sigma/\mathrm{d}M_\mathrm{jj}\,\mathrm{d}y_\mathrm{max}$ [fb/GeV] +FullRange=1 +LogY=1 +LogX=1 + +# BEGIN PLOT /CMS_2011_I895742/d01-x01-y01 +Title=Dijet mass, $|y_\mathrm{max}| < 0.5$, anti-$k_\mathrm{T}$ $R=0.7$. +RatioPlotYMin=0.0 +RatioPlotYMax=2.0 +# END PLOT + +# BEGIN PLOT /CMS_2011_I895742/d02-x01-y01 +Title=Dijet mass, $0.5 \leq |y_\mathrm{max}| < 1.0$, anti-$k_\mathrm{T}$ $R=0.7$. +RatioPlotYMin=0.0 +RatioPlotYMax=2.0 +# END PLOT + +# BEGIN PLOT /CMS_2011_I895742/d03-x01-y01 +Title=Dijet mass, $1.0 \leq |y_\mathrm{max}| < 1.5$, anti-$k_\mathrm{T}$ $R=0.7$. +RatioPlotYMin=0.0 +RatioPlotYMax=2.0 +# END PLOT + +# BEGIN PLOT /CMS_2011_I895742/d04-x01-y01 +Title=Dijet mass, $1.5 \leq |y_\mathrm{max}| < 2.0$, anti-$k_\mathrm{T}$ $R=0.7$. +RatioPlotYMin=0.0 +RatioPlotYMax=2.0 +# END PLOT + +# BEGIN PLOT /CMS_2011_I895742/d05-x01-y01 +Title=Dijet mass, $2.0 \leq |y_\mathrm{max}| < 2.5$, anti-$k_\mathrm{T}$ $R=0.7$. +RatioPlotYMin=0.0 +RatioPlotYMax=2.0 +# END PLOT diff --git a/v2.6/generators/nlojet++/interface/data/RivetAdditions/CMS_2011_I895742.yoda b/v2.6/generators/nlojet++/interface/data/RivetAdditions/CMS_2011_I895742.yoda new file mode 100644 index 0000000000000000000000000000000000000000..c3fce490fb7787eedb781b473976ea3b7a7d86e8 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/RivetAdditions/CMS_2011_I895742.yoda @@ -0,0 +1,154 @@ +# BEGIN YODA_SCATTER2D /REF/CMS_2011_I895742/d01-x01-y01 +Path=/REF/CMS_2011_I895742/d01-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +165.0 9.0 11.0 1320000.0 132796.1987407772 145924.19401867533 +186.0 10.0 11.0 726000.0 73308.02750040407 87710.89610761026 +208.0 11.0 12.0 412000.0 45922.755318033785 49993.106084739324 +231.0 11.0 13.0 235000.0 25902.288026350103 28247.938420352024 +256.0 12.0 14.0 139000.0 15341.091910291132 16726.846714189738 +282.0 12.0 14.0 81800.0 9016.200683214633 10649.404995585435 +310.0 14.0 15.0 50800.0 5606.672439156759 6619.807235864198 +339.0 14.0 15.0 31800.0 3515.4464922680872 4148.772835429773 +369.0 15.0 17.0 20400.0 2462.3230982143673 2665.2270147212603 +402.0 16.0 17.0 12800.0 1542.4398335105327 1797.5229177954868 +435.0 16.0 18.0 8220.0 993.0903113010419 1156.539686478592 +470.0 17.0 19.0 5420.0 656.1558644102788 763.7393523971382 +507.0 18.0 19.0 3650.0 477.24360655748967 513.9246661719984 +545.0 19.0 20.0 2440.0 319.9006570796628 368.34303359775924 +585.0 20.0 21.0 1580.0 208.06266459891359 239.31132944346786 +627.0 21.0 22.0 1050.0 139.00112409617412 170.03841477736728 +670.0 21.0 23.0 735.0 105.08443854824556 119.64933138133283 +716.0 23.0 24.0 505.0 72.7550609923461 82.71061373850395 +763.0 23.0 25.0 362.0 52.70799559839095 63.390324308998444 +812.0 24.0 26.0 245.0 38.58574996031566 43.414110609339915 +863.0 25.0 27.0 177.0 28.27848519634671 33.473128864807364 +916.0 26.0 28.0 113.0 18.61038301594032 21.90685043542316 +971.0 27.0 29.0 79.4 14.168173021247306 16.526838687419925 +1055.0 55.0 63.0 47.6 8.31298261756874 10.167364456927864 +1178.0 60.0 68.0 27.2 5.2193532779454594 6.303361592039601 +1310.0 64.0 73.0 11.4 2.5312107774738952 3.035484145898311 +1452.0 69.0 78.0 6.24 1.5908940882409488 1.9899632961439264 +1604.0 74.0 83.0 2.48 0.8135004855560934 1.0812913760869454 +1766.0 79.0 90.0 0.985 0.44966086109422504 0.6521860470755257 +1941.0 85.0 96.0 0.459 0.2694060216476239 0.4674143739766675 +2170.0 133.0 162.0 0.469 0.23327741296576485 0.3565633996921164 +2479.0 147.0 180.0 0.0845 0.07429275368432645 0.19726723625579592 +# END YODA_SCATTER2D + +# BEGIN YODA_SCATTER2D /REF/CMS_2011_I895742/d02-x01-y01 +Path=/REF/CMS_2011_I895742/d02-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +208.0 11.0 12.0 1740000.0 191905.51425115432 209386.42649417368 +231.0 11.0 13.0 1020000.0 112759.6044689764 122913.17423287057 +256.0 12.0 14.0 600000.0 66532.39812301974 72488.34389058698 +282.0 12.0 14.0 364000.0 40515.34208173491 44168.666540886195 +310.0 14.0 15.0 222000.0 24469.395497232865 28901.808178728195 +339.0 14.0 15.0 138000.0 15220.09250957431 17982.940916324005 +369.0 15.0 17.0 86400.0 10403.937716076543 11265.181756190177 +402.0 16.0 17.0 54200.0 6518.437309662493 7059.328931279517 +435.0 16.0 18.0 35500.0 4274.766075471265 4982.662440904461 +470.0 17.0 19.0 23400.0 2819.7728206364427 3288.0122627508554 +507.0 18.0 19.0 15300.0 1841.156508828079 2146.4215079988367 +545.0 19.0 20.0 10100.0 1317.6920011899595 1519.0682045253925 +585.0 20.0 21.0 6900.0 901.4738432145439 1038.8797283612766 +627.0 21.0 22.0 4600.0 602.5122073452122 693.9142310112973 +670.0 21.0 23.0 3150.0 411.8677700427651 505.92569612542906 +716.0 23.0 24.0 2140.0 301.8007031138264 344.3272635153946 +763.0 23.0 25.0 1480.0 209.30360723121808 238.64282934963708 +812.0 24.0 26.0 1040.0 147.55177531971614 178.55318983429 +863.0 25.0 27.0 742.0 113.08868712652031 127.8395157062166 +916.0 26.0 28.0 501.0 76.84105363671166 91.68299999999999 +971.0 27.0 29.0 337.0 52.146870816953154 62.139729642154066 +1055.0 55.0 63.0 208.0 34.02310367970565 40.18493249963225 +1178.0 60.0 68.0 99.4 17.53191715814332 20.46795408339583 +1310.0 64.0 73.0 53.8 10.224972725635995 12.341795047723 +1452.0 69.0 78.0 27.3 5.660324355547127 6.742602613234745 +1604.0 74.0 83.0 9.7 2.3138109257240527 2.8280116689999706 +1766.0 79.0 90.0 5.73 1.5481607474677817 1.9253141068407515 +1941.0 85.0 96.0 3.66 1.115549747882182 1.4292756906909179 +2170.0 133.0 162.0 1.12 0.42041046609236554 0.5636838830408406 +2479.0 147.0 180.0 0.252 0.15328561576351515 0.26345753357989216 +2819.0 160.0 200.0 0.0762 0.06778374415743056 0.17888183305187816 +# END YODA_SCATTER2D + +# BEGIN YODA_SCATTER2D /REF/CMS_2011_I895742/d03-x01-y01 +Path=/REF/CMS_2011_I895742/d03-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +402.0 16.0 17.0 184000.0 22448.0 24291.484598517236 +435.0 16.0 18.0 121000.0 14883.0 16090.725403163153 +470.0 17.0 19.0 77700.0 9670.138820616796 11194.194532881766 +507.0 18.0 19.0 52600.0 6343.4814920515055 7391.001923961324 +545.0 19.0 20.0 35600.0 4305.245637591425 5012.525511157026 +585.0 20.0 21.0 23100.0 3031.649491613435 3489.8588280903286 +627.0 21.0 22.0 16000.0 2106.963692140897 2423.405867781953 +670.0 21.0 23.0 10400.0 1362.2015122587406 1568.849565764672 +716.0 23.0 24.0 7200.0 944.92971167172 1160.0940651516153 +763.0 23.0 25.0 4980.0 705.7557889241858 804.2969809715811 +812.0 24.0 26.0 3350.0 477.0192973035787 543.5781475556206 +863.0 25.0 27.0 2340.0 330.92597359530424 400.8236265491344 +916.0 26.0 28.0 1650.0 250.64798024320882 283.5168645777531 +971.0 27.0 29.0 1180.0 180.05732864840576 215.13895137794086 +1055.0 55.0 63.0 661.0 107.14726406213087 126.76043032429324 +1178.0 60.0 68.0 322.0 52.19579278064469 64.98419527854446 +1310.0 64.0 73.0 157.0 27.281884172468736 33.47783417427119 +1452.0 69.0 78.0 78.6 14.662850540055299 17.750553173352092 +1603.0 73.0 84.0 38.0 7.668471555662184 9.532548242731322 +1766.0 79.0 90.0 17.5 3.882318894681373 4.9404579747225865 +1941.0 85.0 96.0 8.32 2.126081541239658 2.6428280609982937 +2170.0 133.0 162.0 3.33 0.9524032864286012 1.2284947252634013 +2478.0 146.0 181.0 1.83 0.6116143637947036 0.797888394451254 +2819.0 160.0 200.0 0.451 0.2228232126597227 0.3277439062743959 +# END YODA_SCATTER2D + +# BEGIN YODA_SCATTER2D /REF/CMS_2011_I895742/d04-x01-y01 +Path=/REF/CMS_2011_I895742/d04-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +585.0 20.0 21.0 66800.0 8279.158691557977 9593.18704915108 +627.0 21.0 22.0 45200.0 5675.975489728616 6568.945717540982 +670.0 21.0 23.0 30500.0 3908.8817134827705 4504.200511744565 +716.0 23.0 24.0 20200.0 2648.357898774257 3049.397245358499 +763.0 23.0 25.0 14700.0 1933.483126380988 2224.5136547119687 +812.0 24.0 26.0 10400.0 1372.9969555683654 1579.8418148662859 +863.0 25.0 27.0 6920.0 920.2299156189175 1124.0261463151114 +916.0 26.0 28.0 4770.0 675.2709596154717 769.7455871260323 +971.0 27.0 29.0 3410.0 484.36406307652516 551.7038567927544 +1055.0 55.0 63.0 2040.0 288.79512738271745 349.69194214336704 +1178.0 60.0 68.0 1040.0 157.3805578843842 188.35201087325828 +1310.0 64.0 73.0 520.0 84.37630947132021 99.79259291149819 +1452.0 69.0 78.0 260.0 45.18019034931128 55.486704713832125 +1604.0 74.0 83.0 145.0 26.975066728369736 32.713491100767584 +1766.0 79.0 90.0 63.1 12.413391503130804 15.50887096116284 +1941.0 85.0 96.0 32.4 7.151818386955866 8.749739826989144 +2170.0 133.0 162.0 11.8 2.9101058468722405 3.608350476325713 +2479.0 147.0 180.0 4.37 1.2904455354643993 1.6420969155320888 +2820.0 161.0 199.0 1.52 0.5532883515853194 0.7546612485082297 +3344.0 325.0 510.0 0.131 0.07782105691906271 0.12535680157055698 +# END YODA_SCATTER2D + +# BEGIN YODA_SCATTER2D /REF/CMS_2011_I895742/d05-x01-y01 +Path=/REF/CMS_2011_I895742/d05-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +670.0 21.0 23.0 100000.0 13238.202294873727 15206.90632574555 +716.0 23.0 24.0 67000.0 8924.088132688965 10249.029222321498 +763.0 23.0 25.0 46300.0 6233.328264258188 7142.215849440564 +812.0 24.0 26.0 32900.0 4484.669464966175 5124.802068372983 +863.0 25.0 27.0 23100.0 3201.1632948039373 3872.2656158894883 +916.0 26.0 28.0 15200.0 2145.5164786130167 2449.0874708756323 +971.0 27.0 29.0 11100.0 1571.3852519353743 1792.7101383101508 +1055.0 55.0 63.0 6410.0 905.6266140634339 1032.8059663363686 +1178.0 60.0 68.0 3260.0 464.2038534954229 560.6441809204837 +1310.0 64.0 73.0 1590.0 241.05155133290472 288.52695697282775 +1452.0 69.0 78.0 839.0 136.57930480127655 153.2432983232872 +1604.0 74.0 83.0 401.0 66.3336910174611 78.20630943856129 +1766.0 79.0 90.0 180.0 31.477363294914014 38.54858752276146 +1941.0 85.0 96.0 89.6 16.89049122317051 20.40855136848277 +2170.0 133.0 162.0 37.5 7.567570614140314 9.396275858019495 +2479.0 147.0 180.0 9.44 2.2584299877569816 2.7179987932300484 +2819.0 160.0 200.0 3.52 1.0262475334927728 1.275484033612338 +3338.0 319.0 516.0 0.329 0.14192832733460928 0.19547141223207037 +# END YODA_SCATTER2D diff --git a/v2.6/generators/nlojet++/interface/data/RivetAdditions/CMS_2013_I1208923.info b/v2.6/generators/nlojet++/interface/data/RivetAdditions/CMS_2013_I1208923.info new file mode 100644 index 0000000000000000000000000000000000000000..0673e8aa54435c26300a40b49b2556d1a8514356 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/RivetAdditions/CMS_2013_I1208923.info @@ -0,0 +1,41 @@ +Name: CMS_2013_I1208923 +Year: 2013 +Summary: Measurements of differential jet cross sections in proton-proton collisions at √s=7 TeV with the CMS detector +Experiment: CMS +Collider: LHC 7.0 TeV +InspireID: 1208923 +Status: UNVALIDATED +Authors: + - Klaus Rabbertz <klaus.rabbertz@cern.ch> +References: + - Phys. Rev. D 87 (2013) 112002. +RunInfo: + pp QCD inclusive jet and dijet production with a minimum jet pT of 30 GeV at 7 TeV. +NumEvents: 10000000 +Beams: [p+, p+] +Energies: [7000] +PtCuts: [30] +Description: + 'Measurements of the differential cross sections for inclusive jet and dijet production in proton-proton collisions + at a centre-of-mass energy of 7 TeV. Using a data sample of integrated luminosity of 5 fb-1, inclusive jet PT + cross sections up to a PT of 2 TeV in five intervals of |rapidity| from 0 to 2.5 are presented as well as + the invariant mass distributions of dijets up to a mass of 5 TeV in the 5 intervals of |rapidity|. Jets are + reconstructed using the anti-kt algorithm with distance parameter R=0.7. The cross sections are fully corrected + for detector effects.' +NeedCrossSection: yes +BibKey: Chatrchyan:2012bja +BibTeX: '@ARTICLE{Chatrchyan:2012bja, + author = {Chatrchyan, Serguei and others}, + title = {Measurements of differential jet cross sections in proton-proton collisions at $\sqrt{s}=7$ {TeV} with the {CMS} detector}, + journal = {Phys. Rev. D}, + year = {2013}, + volume = {87}, + pages = {112002}, + archiveprefix = {arXiv}, + collaboration = {CMS}, + doi = {10.1103/PhysRevD.87.112002}, + eprint = {1212.6660}, + primaryclass = {hep-ex}, + reportnumber = {CMS-QCD-11-004, CMS-PH-EP-2012-343}, + slaccitation = {%%CITATION = ARXIV:1212.6660;%%} +}' diff --git a/v2.6/generators/nlojet++/interface/data/RivetAdditions/CMS_2013_I1208923.plot b/v2.6/generators/nlojet++/interface/data/RivetAdditions/CMS_2013_I1208923.plot new file mode 100644 index 0000000000000000000000000000000000000000..abdfde0bc9cbae09cdd47d51c1f7846e2aa69e5d --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/RivetAdditions/CMS_2013_I1208923.plot @@ -0,0 +1,74 @@ +# BEGIN PLOT /CMS_2013_I1208923/d.* +FullRange=1 +LogY=1 +LogX=1 + +# BEGIN PLOT /CMS_2013_I1208923/d01-x01-y01 +Title=Inclusive jets, $|y| < 0.5$, anti-$k_\mathrm{T}$ $R=0.7$ +XLabel=$p_\mathrm{T}$ [GeV] +YLabel=d$^2\sigma$/d$p_\mathrm{T}$d$y$ [pb/GeV] +# END PLOT + +# BEGIN PLOT /CMS_2013_I1208923/d02-x01-y01 +Title=Inclusive jets, $0.5 \leq |y| < 1.0$, anti-$k_\mathrm{T}$ $R=0.7$ +XLabel=$p_\mathrm{T}$ [GeV] +YLabel=d$^2\sigma$/d$p_\mathrm{T}$d$y$ [pb/GeV] +# END PLOT + +# BEGIN PLOT /CMS_2013_I1208923/d03-x01-y01 +Title=Inclusive jets, $1.0 \leq |y| < 1.5$, anti-$k_\mathrm{T}$ $R=0.7$ +XLabel=$p_\mathrm{T}$ [GeV] +YLabel=d$^2\sigma$/d$p_\mathrm{T}$d$y$ [pb/GeV] +# END PLOT + +# BEGIN PLOT /CMS_2013_I1208923/d04-x01-y01 +Title=Inclusive jets, $1.5 \leq |y| < 2.0$, anti-$k_\mathrm{T}$ $R=0.7$ +XLabel=$p_\mathrm{T}$ [GeV] +YLabel=d$^2\sigma$/d$p_\mathrm{T}$d$y$ [pb/GeV] +# END PLOT + +# BEGIN PLOT /CMS_2013_I1208923/d05-x01-y01 +Title=Inclusive jets, $2.0 \leq |y| < 2.5$, anti-$k_\mathrm{T}$ $R=0.7$ +XLabel=$p_\mathrm{T}$ [GeV] +YLabel=d$^2\sigma$/d$p_\mathrm{T}$d$y$ [pb/GeV] +# END PLOT + +# BEGIN PLOT /CMS_2013_I1208923/d06-x01-y01 +Title=Dijet mass, $|y_\mathrm{max}| < 0.5$, anti-$k_\mathrm{T}$ $R=0.7$ +XLabel=$M_\mathrm{jj}$ [GeV] +YLabel=$\mathrm{d}^{2}\sigma/\mathrm{d}M_\mathrm{jj}\,\mathrm{d}y_\mathrm{max}$ [pb/GeV] +RatioPlotYMin=0.0 +RatioPlotYMax=2.0 +# END PLOT + +# BEGIN PLOT /CMS_2013_I1208923/d07-x01-y01 +Title=Dijet mass, $0.5 \leq |y_\mathrm{max}| < 1.0$, anti-$k_\mathrm{T}$ $R=0.7$ +XLabel=$M_\mathrm{jj}$ [GeV] +YLabel=$\mathrm{d}^{2}\sigma/\mathrm{d}M_\mathrm{jj}\,\mathrm{d}y_\mathrm{max}$ [pb/GeV] +RatioPlotYMin=0.0 +RatioPlotYMax=2.0 +# END PLOT + +# BEGIN PLOT /CMS_2013_I1208923/d08-x01-y01 +Title=Dijet mass, $1.0 \leq |y_\mathrm{max}| < 1.5$, anti-$k_\mathrm{T}$ $R=0.7$ +XLabel=$M_\mathrm{jj}$ [GeV] +YLabel=$\mathrm{d}^{2}\sigma/\mathrm{d}M_\mathrm{jj}\,\mathrm{d}y_\mathrm{max}$ [pb/GeV] +RatioPlotYMin=0.0 +RatioPlotYMax=2.0 +# END PLOT + +# BEGIN PLOT /CMS_2013_I1208923/d09-x01-y01 +Title=Dijet mass, $1.5 \leq |y_\mathrm{max}| < 2.0$, anti-$k_\mathrm{T}$ $R=0.7$ +XLabel=$M_\mathrm{jj}$ [GeV] +YLabel=$\mathrm{d}^{2}\sigma/\mathrm{d}M_\mathrm{jj}\,\mathrm{d}y_\mathrm{max}$ [pb/GeV] +RatioPlotYMin=0.0 +RatioPlotYMax=2.0 +# END PLOT + +# BEGIN PLOT /CMS_2013_I1208923/d10-x01-y01 +Title=Dijet mass, $2.0 \leq |y_\mathrm{max}| < 2.5$, anti-$k_\mathrm{T}$ $R=0.7$ +XLabel=$M_\mathrm{jj}$ [GeV] +YLabel=$\mathrm{d}^{2}\sigma/\mathrm{d}M_\mathrm{jj}\,\mathrm{d}y_\mathrm{max}$ [pb/GeV] +RatioPlotYMin=0.0 +RatioPlotYMax=2.0 +# END PLOT diff --git a/v2.6/generators/nlojet++/interface/data/RivetAdditions/CMS_2013_I1208923.yoda b/v2.6/generators/nlojet++/interface/data/RivetAdditions/CMS_2013_I1208923.yoda new file mode 100644 index 0000000000000000000000000000000000000000..3ad1bd8a8fe3d6ac09f3f902d87e8bcad07551b7 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/RivetAdditions/CMS_2013_I1208923.yoda @@ -0,0 +1,246 @@ +# BEGIN YODA_SCATTER2D /REF/CMS_2013_I1208923/d01-x01-y01 +Path=/REF/CMS_2013_I1208923/d01-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +123.5 9.5 9.5 2950.0 79.1580697086532 79.1580697086532 +143.0 10.0 10.0 1341.0 36.05551275463989 36.05551275463989 +163.5 10.5 10.5 640.1 16.84042754801671 16.367040050051813 +185.0 11.0 11.0 311.4 6.5306967469022785 6.5306967469022785 +208.0 12.0 12.0 160.9 3.312099032335839 3.312099032335839 +232.5 12.5 12.5 85.4 1.7280335644888383 1.7280335644888383 +258.5 13.5 13.5 45.94 0.9526804291051643 0.9526804291051643 +286.0 14.0 14.0 24.98 0.5448853090330111 0.5448853090330111 +315.0 15.0 15.0 13.93 0.223606797749979 0.223606797749979 +346.0 16.0 16.0 7.82 0.11988744721612851 0.12589678312014171 +378.5 16.5 16.5 4.493 0.06397655820689326 0.06397655820689326 +412.5 17.5 17.5 2.625 0.03577708763999663 0.03577708763999663 +449.0 19.0 19.0 1.52 0.020248456731316585 0.021095023109728987 +487.5 19.5 19.5 0.8747 0.011881077392223315 0.011881077392223315 +527.5 20.5 20.5 0.5164 0.005608029957123981 0.006074537019394977 +570.0 22.0 22.0 0.3078 0.003443835071544513 0.003443835071544513 +615.0 23.0 23.0 0.1811 0.0020124611797498106 0.0020124611797498106 +662.0 24.0 24.0 0.1074 0.0012806248474865698 0.0013601470508735444 +711.5 25.5 25.5 0.06392 7.723341245859853E-4 7.723341245859853E-4 +763.5 26.5 26.5 0.03758 5.080354318352215E-4 5.32634959423431E-4 +818.0 28.0 28.0 0.02215 3.4132096331752025E-4 3.5227829907617076E-4 +875.5 29.5 29.5 0.01309 2.4166091947189146E-4 2.4166091947189146E-4 +936.0 31.0 31.0 0.007516 1.733032025093593E-4 1.7557049866079438E-4 +999.5 32.5 32.5 0.004209 1.2539936203984452E-4 1.266491215919005E-4 +1066.5 34.5 34.5 0.002324 8.944271909999159E-5 8.944271909999159E-5 +1136.5 35.5 35.5 0.001469 6.972087205421343E-5 6.972087205421343E-5 +1210.0 38.0 38.0 8.029E-4 5.0827158094861055E-5 5.0908938311459605E-5 +1287.5 39.5 39.5 3.381E-4 3.1164242329952446E-5 3.119246703933499E-5 +1368.5 41.5 41.5 1.793E-4 2.2626754075651242E-5 2.2637358503146962E-5 +1453.5 43.5 43.5 9.499E-5 1.5870239443688305E-5 1.5870239443688305E-5 +1542.5 45.5 45.5 4.333E-5 9.403595057210832E-6 9.403595057210832E-6 +1686.0 98.0 98.0 1.627E-5 4.600695599580568E-6 4.601086828130936E-6 +1950.0 166.0 166.0 2.053E-6 1.4880336017711428E-6 1.4880336017711428E-6 +# END YODA_SCATTER2D + +# BEGIN YODA_SCATTER2D /REF/CMS_2013_I1208923/d02-x01-y01 +Path=/REF/CMS_2013_I1208923/d02-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +123.5 9.5 9.5 2810.0 75.13321502504735 75.13321502504735 +143.0 10.0 10.0 1234.0 33.015148038438355 33.015148038438355 +163.5 10.5 10.5 576.6 15.109268678529746 15.109268678529746 +185.0 11.0 11.0 286.0 5.993329625508679 5.993329625508679 +208.0 12.0 12.0 146.0 3.0528675044947495 3.0528675044947495 +232.5 12.5 12.5 76.07 1.5786703265723343 1.5786703265723343 +258.5 13.5 13.5 40.55 0.8645229898620395 0.8645229898620395 +286.0 14.0 14.0 22.22 0.4883646178829912 0.4883646178829912 +315.0 15.0 15.0 12.42 0.1972308292331602 0.1972308292331602 +346.0 16.0 16.0 6.966 0.11650321883965267 0.11650321883965267 +378.5 16.5 16.5 3.942 0.056364882684167804 0.056364882684167804 +412.5 17.5 17.5 2.269 0.031384709652950434 0.03312099032335839 +449.0 19.0 19.0 1.303 0.018867962264113206 0.018867962264113206 +487.5 19.5 19.5 0.7474 0.010589145385724006 0.010589145385724006 +527.5 20.5 20.5 0.4242 0.00499799959983992 0.00499799959983992 +570.0 22.0 22.0 0.2449 0.0029546573405388314 0.0029546573405388314 +615.0 23.0 23.0 0.1428 0.0016643316977093237 0.0016643316977093237 +662.0 24.0 24.0 0.08285 0.0010125709851659783 0.0010125709851659783 +711.5 25.5 25.5 0.04771 6.444377394287209E-4 6.444377394287209E-4 +763.5 26.5 26.5 0.02762 4.14004830889689E-4 4.14004830889689E-4 +818.0 28.0 28.0 0.0155 2.8653097563788803E-4 2.8653097563788803E-4 +875.5 29.5 29.5 0.008333 1.8738729946290384E-4 1.8738729946290384E-4 +936.0 31.0 31.0 0.004376 1.278827588066507E-4 1.278827588066507E-4 +999.5 32.5 32.5 0.002396 9.100549433962765E-5 9.100549433962765E-5 +1066.5 34.5 34.5 0.001426 6.789698078707183E-5 6.789698078707183E-5 +1136.5 35.5 35.5 7.655E-4 4.8501546367100504E-5 4.8501546367100504E-5 +1210.0 38.0 38.0 3.218E-4 3.0287456149369822E-5 3.0287456149369822E-5 +1287.5 39.5 39.5 1.292E-4 1.8122361876973984E-5 1.8122361876973984E-5 +1368.5 41.5 41.5 7.129E-5 1.476846640650274E-5 1.476846640650274E-5 +1597.0 187.0 187.0 1.531E-5 3.181273329973393E-6 3.181273329973393E-6 +# END YODA_SCATTER2D + +# BEGIN YODA_SCATTER2D /REF/CMS_2013_I1208923/d03-x01-y01 +Path=/REF/CMS_2013_I1208923/d03-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +123.5 9.5 9.5 2346.0 63.52952069707436 69.77822009767804 +143.0 10.0 10.0 1033.0 29.410882339705484 31.064449134018133 +163.5 10.5 10.5 475.7 13.189389675038036 13.884163640637487 +185.0 11.0 11.0 230.3 5.142956348249516 5.322593352868505 +208.0 12.0 12.0 116.9 2.6076809620810595 2.692582403567252 +232.5 12.5 12.5 61.07 1.3542894816101911 1.4034600101178516 +258.5 13.5 13.5 31.91 0.7224956747275377 0.7451845409024531 +286.0 14.0 14.0 16.56 0.3969886648255842 0.4103656905736638 +315.0 15.0 15.0 9.079 0.15880806024884253 0.16658031096140985 +346.0 16.0 16.0 4.99 0.08746427842267951 0.08746427842267951 +378.5 16.5 16.5 2.748 0.042485291572496 0.042485291572496 +412.5 17.5 17.5 1.524 0.02418677324489565 0.0233238075793812 +449.0 19.0 19.0 0.8352 0.013231024147812595 0.013231024147812595 +487.5 19.5 19.5 0.4588 0.00756042326857432 0.00717007670809734 +527.5 20.5 20.5 0.2547 0.003361547262794322 0.003361547262794322 +570.0 22.0 22.0 0.1396 0.0018788294228055935 0.0017000000000000001 +615.0 23.0 23.0 0.07495 0.001016070863670443 0.001016070863670443 +662.0 24.0 24.0 0.04001 5.946427498927402E-4 5.65685424949238E-4 +711.5 25.5 25.5 0.0211 3.420526275297414E-4 3.420526275297414E-4 +763.5 26.5 26.5 0.01064 2.1954498400100151E-4 2.147091055358389E-4 +818.0 28.0 28.0 0.005301 1.4317122615944866E-4 1.413966053340744E-4 +875.5 29.5 29.5 0.002644 9.604686356149274E-5 9.604686356149274E-5 +936.0 31.0 31.0 0.001278 6.413267497929585E-5 6.378871373526824E-5 +999.5 32.5 32.5 5.419E-4 3.990200496215698E-5 3.9832775449370834E-5 +1066.5 34.5 34.5 2.633E-4 2.7006850982667344E-5 2.698184574857695E-5 +1136.5 35.5 35.5 1.416E-4 2.2526872841120226E-5 2.2522211259110417E-5 +1428.0 256.0 256.0 8.804E-6 2.122905556071678E-6 2.122905556071678E-6 +# END YODA_SCATTER2D + +# BEGIN YODA_SCATTER2D /REF/CMS_2013_I1208923/d04-x01-y01 +Path=/REF/CMS_2013_I1208923/d04-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +123.5 9.5 9.5 1813.0 53.53503525729669 53.53503525729669 +143.0 10.0 10.0 792.7 24.775189202102975 24.775189202102975 +163.5 10.5 10.5 355.0 11.59655121145938 11.59655121145938 +185.0 11.0 11.0 167.5 4.304648650006177 4.304648650006177 +208.0 12.0 12.0 82.78 2.1366328650472455 2.1366328650472455 +232.5 12.5 12.5 40.37 1.064048871058092 1.064048871058092 +258.5 13.5 13.5 21.18 0.5800000000000001 0.5800000000000001 +286.0 14.0 14.0 10.57 0.3301514803843836 0.3301514803843836 +315.0 15.0 15.0 5.547 0.11543396380615195 0.11543396380615195 +346.0 16.0 16.0 2.806 0.06184658438426491 0.06184658438426491 +378.5 16.5 16.5 1.427 0.028017851452243798 0.028017851452243798 +412.5 17.5 17.5 0.7427 0.015352524222420234 0.015352524222420234 +449.0 19.0 19.0 0.3663 0.007778174593052022 0.007778174593052022 +487.5 19.5 19.5 0.1841 0.004640043103248072 0.004640043103248072 +527.5 20.5 20.5 0.08613 0.001439618004888797 0.001439618004888797 +570.0 22.0 22.0 0.03938 7.500666637039671E-4 7.500666637039671E-4 +615.0 23.0 23.0 0.018 3.860051813123756E-4 3.860051813123756E-4 +662.0 24.0 24.0 0.008217 2.3124445939308471E-4 2.3124445939308471E-4 +711.5 25.5 25.5 0.003605 1.4106027080648895E-4 1.4106027080648895E-4 +763.5 26.5 26.5 0.001452 8.472307831990053E-5 8.472307831990053E-5 +818.0 28.0 28.0 5.105E-4 4.789008248061388E-5 4.789008248061388E-5 +875.5 29.5 29.5 1.82E-4 2.7886914494077683E-5 2.7886914494077683E-5 +936.0 31.0 31.0 7.258E-5 1.6928913136997305E-5 1.6928913136997305E-5 +1107.5 140.5 140.5 1.045E-5 3.1219385003551885E-6 3.1219385003551885E-6 +# END YODA_SCATTER2D + +# BEGIN YODA_SCATTER2D /REF/CMS_2013_I1208923/d05-x01-y01 +Path=/REF/CMS_2013_I1208923/d05-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +123.5 9.5 9.5 1221.0 40.0 40.0 +143.0 10.0 10.0 507.8 17.960512242138307 17.960512242138307 +163.5 10.5 10.5 223.6 8.73212459828649 8.605230967266365 +185.0 11.0 11.0 100.7 3.0 3.0 +208.0 12.0 12.0 44.05 1.4101418368376992 1.3729530217745982 +232.5 12.5 12.5 20.52 0.6789698078707181 0.6789698078707181 +258.5 13.5 13.5 9.395 0.3624044701711059 0.35711342735887147 +286.0 14.0 14.0 4.053 0.19377564346429096 0.19188798815975952 +315.0 15.0 15.0 1.792 0.056586217403180435 0.054451813560247926 +346.0 16.0 16.0 0.7782 0.026466015944981217 0.025956309444911462 +378.5 16.5 16.5 0.3184 0.01063014581273465 0.010435037134576953 +412.5 17.5 17.5 0.1221 0.004743416490252569 0.004579301256742124 +449.0 19.0 19.0 0.04641 0.002222813532440362 0.002205651831092115 +487.5 19.5 19.5 0.01616 0.0011036756769993619 0.001094805918873295 +527.5 20.5 20.5 0.005314 2.214158982548453E-4 2.1606017680266765E-4 +570.0 22.0 22.0 0.001634 1.0846658471621571E-4 1.0756393447619884E-4 +615.0 23.0 23.0 3.233E-4 4.2941821107167774E-5 4.283654981438164E-5 +662.0 24.0 24.0 9.167E-5 2.308265582639918E-5 2.306908320675098E-5 +795.5 109.5 109.5 7.92E-6 3.4486213187301385E-6 3.447966647170474E-6 +# END YODA_SCATTER2D + +# BEGIN YODA_SCATTER2D /REF/CMS_2013_I1208923/d06-x01-y01 +Path=/REF/CMS_2013_I1208923/d06-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +246.5 49.5 49.5 195.0 11.933147112141038 14.767870530310049 +357.5 61.5 61.5 25.9 1.559134375222354 1.8250753409106155 +492.0 73.0 73.0 4.81 0.2720073528417936 0.31216662217476104 +652.5 87.5 87.5 0.888 0.04329457240809753 0.0510099009997079 +842.0 102.0 102.0 0.202 0.01000199980003999 0.011672617529928752 +1062.5 118.5 118.5 0.0497 0.0026129676614914314 0.003046325655605454 +1318.0 137.0 137.0 0.0129 7.102112361825881E-4 8.287339742040265E-4 +1612.5 157.5 157.5 0.00322 1.9821705274773914E-4 2.3213142829009602E-4 +1951.0 181.0 181.0 8.8E-4 6.444610151126288E-5 7.46625742926133E-5 +2339.0 207.0 207.0 1.72E-4 1.728843544106869E-5 1.9469976887505543E-5 +2782.5 236.5 236.5 4.02E-5 6.090779917219141E-6 6.633400334669995E-6 +3217.5 198.5 198.5 5.41E-6 2.1214042519048556E-6 2.1679531821513123E-6 +3713.0 297.0 297.0 1.14E-6 7.498353152526227E-7 7.584945616153092E-7 +# END YODA_SCATTER2D + +# BEGIN YODA_SCATTER2D /REF/CMS_2013_I1208923/d07-x01-y01 +Path=/REF/CMS_2013_I1208923/d07-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +328.0 58.0 58.0 182.0 10.501904589168575 12.649505919204909 +456.0 70.0 70.0 29.8 1.6623477373882998 1.9420092687729378 +609.5 83.5 83.5 5.63 0.30679146011582525 0.35415392133929563 +791.5 98.5 98.5 1.27 0.06296824596572466 0.073824115301167 +1004.0 114.0 114.0 0.298 0.015190786681406596 0.017762882648939615 +1250.5 132.5 132.5 0.0752 0.004157078300922416 0.004848504924200862 +1535.0 152.0 152.0 0.0183 0.0010778682665335314 0.0012666885963013956 +1862.0 175.0 175.0 0.00423 2.8398591514369157E-4 3.360431519909311E-4 +2237.5 200.5 200.5 9.63E-4 7.739179543078194E-5 9.110021953870363E-5 +2666.5 228.5 228.5 1.77E-4 1.8999210509913302E-5 2.201181500921721E-5 +3155.5 260.5 260.5 2.2E-5 4.271627324568472E-6 4.644491360741239E-6 +3713.0 297.0 297.0 3.57E-6 1.3713001130314253E-6 1.4324276596044913E-6 +# END YODA_SCATTER2D + +# BEGIN YODA_SCATTER2D /REF/CMS_2013_I1208923/d08-x01-y01 +Path=/REF/CMS_2013_I1208923/d08-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +492.0 73.0 73.0 65.3 4.01721296423279 4.662745972064101 +652.5 87.5 87.5 12.0 0.7793587107359486 0.8819297024139735 +842.0 102.0 102.0 2.78 0.1742641672863357 0.19594131774590065 +1062.5 118.5 118.5 0.704 0.057733265973786724 0.06237980442418844 +1318.0 137.0 137.0 0.152 0.00917605579756357 0.010594810050208545 +1612.5 157.5 157.5 0.0369 0.0023749736840647305 0.0027679956647364895 +1951.0 181.0 181.0 0.00908 6.860502897018556E-4 7.920404030098465E-4 +2339.0 207.0 207.0 0.00184 1.4699659860010366E-4 1.751713446885649E-4 +2846.5 300.5 300.5 2.49E-4 2.5548581173912577E-5 3.0442404635639415E-5 +3500.5 353.5 353.5 2.23E-5 4.004722212588533E-6 4.526300917968225E-6 +4181.5 327.5 327.5 1.51E-6 8.596516736446222E-7 8.850451965860274E-7 +# END YODA_SCATTER2D + +# BEGIN YODA_SCATTER2D /REF/CMS_2013_I1208923/d09-x01-y01 +Path=/REF/CMS_2013_I1208923/d09-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +652.5 87.5 87.5 42.2 3.2413731658048874 3.7775256451809827 +842.0 102.0 102.0 8.61 0.7394186905941721 0.8338878821520312 +1062.5 118.5 118.5 2.03 0.1945584745005984 0.21270872102478547 +1318.0 137.0 137.0 0.564 0.05863147618813635 0.0641290105958294 +1612.5 157.5 157.5 0.102 0.017039072744724108 0.017715812146215596 +1951.0 181.0 181.0 0.0281 0.0026882894189428344 0.0031212337304341695 +2339.0 207.0 207.0 0.0063 6.533926843790035E-4 7.649065302375187E-4 +2782.5 236.5 236.5 0.0013 1.8260887163552597E-4 2.0977368757782753E-4 +3288.5 269.5 269.5 1.35E-4 3.453143495425581E-5 3.750226659816711E-5 +4308.0 750.0 750.0 4.48E-6 1.4780054127099807E-6 1.8860540819393278E-6 +# END YODA_SCATTER2D + +# BEGIN YODA_SCATTER2D /REF/CMS_2013_I1208923/d10-x01-y01 +Path=/REF/CMS_2013_I1208923/d10-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +1123.0 123.0 123.0 4.98 0.6880356095435759 0.8039060890427439 +1388.0 142.0 142.0 1.18 0.20089051744669284 0.22553491969094275 +1693.0 163.0 163.0 0.304 0.054736185471769956 0.06044145928086118 +2043.5 187.5 187.5 0.0627 0.01446245138280506 0.015768639763784318 +2445.0 214.0 214.0 0.0077 0.0035874503480884585 0.0036569522829810073 +2903.0 244.0 244.0 0.00247 0.001067946159691583 0.001119933033712284 +3425.5 278.5 278.5 6.28E-4 2.0611889772653065E-4 2.3343093196918015E-4 +4381.0 677.0 677.0 1.21E-5 1.3451799136175057E-5 1.524101046518898E-5 +# END YODA_SCATTER2D diff --git a/v2.6/generators/nlojet++/interface/data/RivetAdditions/CMS_2015_I1410826.info b/v2.6/generators/nlojet++/interface/data/RivetAdditions/CMS_2015_I1410826.info new file mode 100644 index 0000000000000000000000000000000000000000..d1f306d571a4be4785466b7c49fd5b2930cf7cb6 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/RivetAdditions/CMS_2015_I1410826.info @@ -0,0 +1,45 @@ +Name: CMS_2015_I1410826 +Year: 2015 +Summary: <Insert short CMS_2015_I1410826 description> +Experiment: CMS +Collider: LHC +InspireID: 1410826 +Status: UNVALIDATED +Authors: + - Your Name <terence.libeiro@cern.ch> +#References: +# - <Example: Phys.Lett.B639:151-158,2006, Erratum-ibid.B658:285-289,2008> +# - <Example: doi:10.1016/j.physletb.2006.04.048> +# - <Example: arXiv:hep-ex/0511054 (plus erratum)> +RunInfo: + <Insert event types (not gen-specific), energy, any kinematic + efficiency cut(s) that may be needed; essentially any details needed to set + up a generator to reproduce the data.> +NumEvents: 1000000 +NeedCrossSection: no +#Beams: <Insert beam pair(s), e.g. [p-, p+] or [[p-, e-], [p-, e+]]> +#Energies: <Insert list of run energies or beam energy pairs in GeV, +# e.g. [1960] or [[8.0, 3.5]] or [630, 1800]. Order pairs to match "Beams"> +#PtCuts: <Insert list of kinematic pT cuts in GeV, e.g. [0, 20]> +#NeedCrossSection: True +Description: + '<Insert a fairly long description, including what is measured + and if possible what it is useful for in terms of MC validation + and tuning. Use LaTeX for maths like $\pT > 50\;\GeV$. + Use single quotes around the block if required (see http://www.yaml.org)>' +BibKey: Khachatryan:2015luy +BibTeX: '@article{Khachatryan:2015luy, + author = "Khachatryan, Vardan and others", + title = "{Measurement of the inclusive jet cross section in pp + collisions at sqrt(s) = 2.76 TeV}", + collaboration = "CMS", + year = "2015", + eprint = "1512.06212", + archivePrefix = "arXiv", + primaryClass = "hep-ex", + reportNumber = "CMS-SMP-14-017, CERN-PH-EP-2015-299", + SLACcitation = "%%CITATION = ARXIV:1512.06212;%%" +}' +ToDo: + - Implement the analysis, test it, remove this ToDo, and mark as VALIDATED :-) + diff --git a/v2.6/generators/nlojet++/interface/data/RivetAdditions/CMS_2015_I1410826.plot b/v2.6/generators/nlojet++/interface/data/RivetAdditions/CMS_2015_I1410826.plot new file mode 100644 index 0000000000000000000000000000000000000000..4218661df37edc34c0dbca12fe6568e60583c950 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/RivetAdditions/CMS_2015_I1410826.plot @@ -0,0 +1,54 @@ +# BEGIN PLOT /CMS_2015_I1410826/d01-x01-y01 +Title= $|y|~<~0.5$ +XLabel= Jet $\mathrm{p_T}$ (GeV) +YLabel= $\frac{\mathrm{d^2}\sigma}{\mathrm{dp_Tdy}}$ (pb/GeV) +YLabelSep=6 +LogX=1 +RatioPlotYMax=3 +RatioPlotYMin=0.1 +# END PLOT +# BEGIN PLOT /CMS_2015_I1410826/d02-x01-y01 +Title= $0.5~<|y|~<~1.0$ +XLabel= Jet $\mathrm{p_T}$ (GeV) +YLabel= $\frac{\mathrm{d^2}\sigma}{\mathrm{dp_Tdy}}$ (pb/GeV) +YLabelSep=6 +LogX=1 +RatioPlotYMax=3 +RatioPlotYMin=0.1 +# END PLOT +# BEGIN PLOT /CMS_2015_I1410826/d03-x01-y01 +Title= $1.0~<|y|~<~1.5$ +XLabel= Jet $\mathrm{p_T}$ (GeV) +YLabel= $\frac{\mathrm{d^2}\sigma}{\mathrm{dp_Tdy}}$ (pb/GeV) +YLabelSep=6 +LogX=1 +RatioPlotYMax=3 +RatioPlotYMin=0.1 +# END PLOT +# BEGIN PLOT /CMS_2015_I1410826/d04-x01-y01 +Title= $1.5~<|y|~<~2.0$ +XLabel= Jet $\mathrm{p_T}$ (GeV) +YLabel= $\frac{\mathrm{d^2}\sigma}{\mathrm{dp_Tdy}}$ (pb/GeV) +YLabelSep=6 +LogX=1 +RatioPlotYMax=3 +RatioPlotYMin=0.1 +# END PLOT +# BEGIN PLOT /CMS_2015_I1410826/d05-x01-y01 +Title= $2.0~<|y|~<~2.5$ +XLabel= Jet $\mathrm{p_T}$ (GeV) +YLabel= $\frac{\mathrm{d^2}\sigma}{\mathrm{dp_Tdy}}$ (pb/GeV) +YLabelSep=6 +LogX=1 +RatioPlotYMax=3 +RatioPlotYMin=0.1 +# END PLOT +# BEGIN PLOT /CMS_2015_I1410826/d06-x01-y01 +Title= $2.5~<|y|~<~3.0$ +XLabel= Jet $\mathrm{p_T}$ (GeV) +YLabel= $\frac{\mathrm{d^2}\sigma}{\mathrm{dp_Tdy}}$ (pb/GeV) +YLabelSep=6 +LogX=1 +RatioPlotYMax=3 +RatioPlotYMin=0.1 +# END PLOT diff --git a/v2.6/generators/nlojet++/interface/data/RivetAdditions/CMS_2015_I1410826.yoda b/v2.6/generators/nlojet++/interface/data/RivetAdditions/CMS_2015_I1410826.yoda new file mode 100644 index 0000000000000000000000000000000000000000..e146def5ba6ebfe20879d7e54ff0596445eab25d --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/RivetAdditions/CMS_2015_I1410826.yoda @@ -0,0 +1,123 @@ +# BEGIN YODA_SCATTER2D /REF/CMS_2015_I1410826/d01-x01-y01 +Path=/REF/CMS_2015_I1410826/d01-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +79.0 5.0 5.0 5351.0 343.7144351056557 343.7144351056557 +90.5 6.5 6.5 2443.0 144.9802141673132 144.9802141673132 +105.5 8.5 8.5 989.7 66.18122106005602 66.18122106005602 +123.5 9.5 9.5 388.3 23.52564099020471 23.52564099020471 +143.0 10.0 10.0 163.3 10.05422199874262 10.05422199874262 +163.5 10.5 10.5 69.02 3.879105527051307 3.879105527051307 +185.0 11.0 11.0 30.05 1.8454878596186972 1.8454878596186972 +208.0 12.0 12.0 13.59 0.7985809977704202 0.7985809977704202 +232.5 12.5 12.5 6.602 0.42925801099105887 0.42925801099105887 +258.5 13.5 13.5 3.175 0.23182348888755858 0.23182348888755858 +286.0 14.0 14.0 1.612 0.13900518731327977 0.13900518731327977 +315.0 15.0 15.0 0.7651 0.08338860893431428 0.08338860893431428 +346.0 16.0 16.0 0.3296 0.049953530405768116 0.049953530405768116 +378.5 16.5 16.5 0.1153 0.026285856957687342 0.026285856957687342 +412.5 17.5 17.5 0.08143 0.021809514918952232 0.021809514918952232 +449.0 19.0 19.0 0.04753 0.016674669891784965 0.016674669891784965 +487.5 19.5 19.5 0.01269 0.007601692656902145 0.007601692656902145 +527.5 20.5 20.5 0.01041 0.006450209488070911 0.006450209488070911 +570.0 22.0 22.0 0.00569 0.005354536995856879 0.005354536995856879 +# END YODA_SCATTER2D + + +# BEGIN YODA_SCATTER2D /REF/CMS_2015_I1410826/d02-x01-y01 +Path=/REF/CMS_2015_I1410826/d02-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +79.0 5.0 5.0 4850.0 350.42529246616886 350.42529246616886 +90.5 6.5 6.5 2242.0 152.72468333573326 152.72468333573326 +105.5 8.5 8.5 907.9 56.836849217739015 56.836849217739015 +123.5 9.5 9.5 349.8 21.1343683132475 21.1343683132475 +143.0 10.0 10.0 136.9 8.057519035038018 8.057519035038018 +163.5 10.5 10.5 57.74 3.5998768034475845 3.5998768034475845 +185.0 11.0 11.0 25.19 1.4629616673036927 1.4629616673036927 +208.0 12.0 12.0 11.32 0.7254885250643183 0.7254885250643183 +232.5 12.5 12.5 5.156 0.35411484012958283 0.35411484012958283 +258.5 13.5 13.5 2.22 0.17316633622040978 0.17316633622040978 +286.0 14.0 14.0 1.074 0.10633812580631652 0.10633812580631652 +315.0 15.0 15.0 0.4928 0.06365743947096834 0.06365743947096834 +346.0 16.0 16.0 0.2216 0.03996325437198527 0.03996325437198527 +378.5 16.5 16.5 0.1164 0.026861957784197338 0.026861957784197338 +412.5 17.5 17.5 0.06058 0.018859476901547403 0.018859476901547403 +449.0 19.0 19.0 0.03135 0.012461283280625636 0.012461283280625636 +487.5 19.5 19.5 0.01621 0.009231530750639354 0.009231530750639354 +527.5 20.5 20.5 0.001814 0.002515614247057764 0.002515614247057764 +# END YODA_SCATTER2D + + +# BEGIN YODA_SCATTER2D /REF/CMS_2015_I1410826/d03-x01-y01 +Path=/REF/CMS_2015_I1410826/d03-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +79.0 5.0 5.0 4083.0 295.9916383954114 295.9916383954114 +90.5 6.5 6.5 1826.0 131.51204659650006 131.51204659650006 +105.5 8.5 8.5 727.7 49.83554253743005 49.83554253743005 +123.5 9.5 9.5 270.5 18.192161059093557 18.192161059093557 +143.0 10.0 10.0 100.8 6.5334808486747695 6.5334808486747695 +163.5 10.5 10.5 40.58 2.615621409913904 2.615621409913904 +185.0 11.0 11.0 17.11 1.1678994648513201 1.1678994648513201 +208.0 12.0 12.0 7.023 0.4962687276063242 0.4962687276063242 +232.5 12.5 12.5 2.867 0.2261067004756825 0.2261067004756825 +258.5 13.5 13.5 1.148 0.11350562320872036 0.11350562320872036 +286.0 14.0 14.0 0.5279 0.06812727060436224 0.06812727060436224 +315.0 15.0 15.0 0.2099 0.03878660206824001 0.03878660206824001 +346.0 16.0 16.0 0.05949 0.019012653050008564 0.019012653050008564 +378.5 16.5 16.5 0.01696 0.00936874148431901 0.00936874148431901 +412.5 17.5 17.5 0.01195 0.006386333771421598 0.006386333771421598 +449.0 19.0 19.0 0.008823 0.006702492446843935 0.006702492446843935 +# END YODA_SCATTER2D + + +# BEGIN YODA_SCATTER2D /REF/CMS_2015_I1410826/d04-x01-y01 +Path=/REF/CMS_2015_I1410826/d04-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +79.0 5.0 5.0 2821.0 246.12543732820467 246.12543732820467 +90.5 6.5 6.5 1233.0 109.90378701391505 109.90378701391505 +105.5 8.5 8.5 467.8 42.88114032998656 42.88114032998656 +123.5 9.5 9.5 161.3 15.107291252901693 15.107291252901693 +143.0 10.0 10.0 57.02 4.43165307757726 4.43165307757726 +163.5 10.5 10.5 19.82 1.8387280930034218 1.8387280930034218 +185.0 11.0 11.0 7.202 0.7132317785965513 0.7132317785965513 +208.0 12.0 12.0 2.458 0.2494028869119201 0.2494028869119201 +232.5 12.5 12.5 0.848 0.11096892628118918 0.11096892628118918 +258.5 13.5 13.5 0.2989 0.055413581367747745 0.055413581367747745 +286.0 14.0 14.0 0.05812 0.02186685674714132 0.02186685674714132 +315.0 15.0 15.0 0.00773 0.006596206503741374 0.006596206503741374 +346.0 16.0 16.0 0.001685 0.0032968168905779405 0.0032968168905779405 +# END YODA_SCATTER2D + + +# BEGIN YODA_SCATTER2D /REF/CMS_2015_I1410826/d05-x01-y01 +Path=/REF/CMS_2015_I1410826/d05-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +79.0 5.0 5.0 1719.0 173.03555964020805 173.03555964020805 +90.5 6.5 6.5 680.5 75.52268003719148 75.52268003719148 +105.5 8.5 8.5 212.2 22.484020014223436 22.484020014223436 +123.5 9.5 9.5 57.43 6.553587796009145 6.553587796009145 +143.0 10.0 10.0 19.26 4.007759723336717 4.007759723336717 +163.5 10.5 10.5 4.613 1.1889395106564504 1.1889395106564504 +185.0 11.0 11.0 0.6116 0.12420096336180328 0.12420096336180328 +208.0 12.0 12.0 0.07946 0.0277008248974647 0.0277008248974647 +232.5 12.5 12.5 0.03053 0.020313371064399923 0.020313371064399923 +# END YODA_SCATTER2D + + +# BEGIN YODA_SCATTER2D /REF/CMS_2015_I1410826/d06-x01-y01 +Path=/REF/CMS_2015_I1410826/d06-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +79.0 5.0 5.0 418.5 85.06484776333876 85.06484776333876 +90.5 6.5 6.5 126.8 26.87183841868658 26.87183841868658 +105.5 8.5 8.5 27.66 5.315675111404007 5.315675111404007 +123.5 9.5 9.5 3.966 0.929653295589275 0.929653295589275 +143.0 10.0 10.0 0.4041 0.17395739248448167 0.17395739248448167 +163.5 10.5 10.5 0.01425 0.013560069653213437 0.013560069653213437 +# END YODA_SCATTER2D + + diff --git a/v2.6/generators/nlojet++/interface/data/RivetAdditions/CMS_2017_I1487277.info b/v2.6/generators/nlojet++/interface/data/RivetAdditions/CMS_2017_I1487277.info new file mode 100644 index 0000000000000000000000000000000000000000..efe22278558f53104534256b1bf05d301a188e3a --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/RivetAdditions/CMS_2017_I1487277.info @@ -0,0 +1,45 @@ +Name: CMS_2017_I1487277 +Year: 2017 +Summary: <Insert short CMS_2017_I1487277 description> +Experiment: CMS +Collider: LHC +InspireID: 1487277 +Status: UNVALIDATED +Authors: + - Your Name <klaus.rabbertz@cern.ch> +#References: +# - arXiv:1609.05331 +RunInfo: + <Insert event types (not gen-specific), energy, any kinematic + efficiency cut(s) that may be needed; essentially any details needed to set + up a generator to reproduce the data.> +NumEvents: NN +NeedCrossSection: no +#Beams: <Insert beam pair(s), e.g. [p-, p+] or [[p-, e-], [p-, e+]]> +#Energies: <Insert list of run energies or beam energy pairs in GeV, +# e.g. [1960] or [[8.0, 3.5]] or [630, 1800]. Order pairs to match "Beams"> +#PtCuts: <Insert list of kinematic pT cuts in GeV, e.g. [0, 20]> +#NeedCrossSection: True +Description: + '<Insert a fairly long description, including what is measured + and if possible what it is useful for in terms of MC validation + and tuning. Use LaTeX for maths like $\pT > 50\;\GeV$. + Use single quotes around the block if required (see http://www.yaml.org)>' +BibKey: Khachatryan:2016mlc +BibTeX: +'@article{Khachatryan:2016mlc, + author = "Khachatryan, Vardan and others", + title = "{Measurement and QCD analysis of double-differential + inclusive jet cross-sections in pp collisions at $\sqrt{s} + = $ 8 TeV and ratios to 2.76 and 7 TeV}", + collaboration = "CMS", + journal = "Submitted to: JHEP", + year = "2016", + eprint = "1609.05331", + archivePrefix = "arXiv", + primaryClass = "hep-ex", + reportNumber = "CMS-SMP-14-001, CERN-EP-2016-196", + SLACcitation = "%%CITATION = ARXIV:1609.05331;%%" +}' +ToDo: + - Implement the analysis, test it, remove this ToDo, and mark as VALIDATED :-) diff --git a/v2.6/generators/nlojet++/interface/data/RivetAdditions/CMS_2017_I1487277.plot b/v2.6/generators/nlojet++/interface/data/RivetAdditions/CMS_2017_I1487277.plot new file mode 100644 index 0000000000000000000000000000000000000000..400c7db5fe50b06f9ea3a49932f01051580dbbef --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/RivetAdditions/CMS_2017_I1487277.plot @@ -0,0 +1,77 @@ +# BEGIN PLOT /CMS_2017_I1487277/d01-x01-y01 +Title=$|y| < 0.5$ +XLabel=Jet $p_\mathrm{T}$ [GeV] +YLabel=$\frac{\mathrm{d^2}\sigma}{\mathrm{d}p_\mathrm{T}\mathrm{d}y}$ [pb/GeV] +FullRange=1 +LogY=1 +LogX=1 +LegendYPos=0.9 +RatioPlotYMax=2 +RatioPlotYMin=0.1 +# END PLOT +# BEGIN PLOT /CMS_2017_I1487277/d02-x01-y01 +Title= $0.5 < |y| < 1.0$ +XLabel= Jet $p_\mathrm{T}$ [GeV] +YLabel= $\frac{\mathrm{d^2}\sigma}{\mathrm{d}p_\mathrm{T}\mathrm{d}y}$ [pb/GeV] +FullRange=1 +LogY=1 +LogX=1 +LegendYPos=0.9 +RatioPlotYMax=2 +RatioPlotYMin=0.1 +# END PLOT +# BEGIN PLOT /CMS_2017_I1487277/d03-x01-y01 +Title= $1.0 < |y| < 1.5$ +XLabel= Jet $p_\mathrm{T}$ [GeV] +YLabel= $\frac{\mathrm{d^2}\sigma}{\mathrm{d}p_\mathrm{T}\mathrm{d}y}$ [pb/GeV] +FullRange=1 +LogY=1 +LogX=1 +LegendYPos=0.9 +RatioPlotYMax=2 +RatioPlotYMin=0.1 +# END PLOT +# BEGIN PLOT /CMS_2017_I1487277/d04-x01-y01 +Title= $1.5 < |y| < 2.0$ +XLabel= Jet $p_\mathrm{T}$ [GeV] +YLabel= $\frac{\mathrm{d^2}\sigma}{\mathrm{d}p_\mathrm{T}\mathrm{d}y}$ [pb/GeV] +FullRange=1 +LogY=1 +LogX=1 +LegendYPos=0.9 +RatioPlotYMax=2 +RatioPlotYMin=0.1 +# END PLOT +# BEGIN PLOT /CMS_2017_I1487277/d05-x01-y01 +Title= $2.0 < |y| < 2.5$ +XLabel= Jet $p_\mathrm{T}$ [GeV] +YLabel= $\frac{\mathrm{d^2}\sigma}{\mathrm{d}p_\mathrm{T}\mathrm{d}y}$ [pb/GeV] +FullRange=1 +LogY=1 +LogX=1 +LegendYPos=0.9 +RatioPlotYMax=2 +RatioPlotYMin=0.1 +# END PLOT +# BEGIN PLOT /CMS_2017_I1487277/d06-x01-y01 +Title= $2.5 < |y| < 3.0$ +XLabel= Jet $p_\mathrm{T}$ [GeV] +YLabel= $\frac{\mathrm{d^2}\sigma}{\mathrm{d}p_\mathrm{T}\mathrm{d}y}$ [pb/GeV] +FullRange=1 +LogY=1 +LogX=1 +LegendYPos=0.9 +RatioPlotYMax=2 +RatioPlotYMin=0.1 +# END PLOT +# BEGIN PLOT /CMS_2017_I1487277/d07-x01-y01 +Title= $3.2 < |y| < 4.7$ +XLabel= Jet $p_\mathrm{T}$ [GeV] +YLabel= $\frac{\mathrm{d^2}\sigma}{\mathrm{d}p_\mathrm{T}\mathrm{d}y}$ [pb/GeV] +FullRange=1 +LogY=1 +LogX=1 +LegendYPos=0.9 +RatioPlotYMax=2 +RatioPlotYMin=0.1 +# END PLOT diff --git a/v2.6/generators/nlojet++/interface/data/RivetAdditions/CMS_2017_I1487277.yoda b/v2.6/generators/nlojet++/interface/data/RivetAdditions/CMS_2017_I1487277.yoda new file mode 100644 index 0000000000000000000000000000000000000000..ae4ce0f40c9d54ca49b48d5c88fe4188d7494d37 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/RivetAdditions/CMS_2017_I1487277.yoda @@ -0,0 +1,290 @@ +# BEGIN YODA_SCATTER2D /REF/CMS_2017_I1487277/d01-x01-y01 +IsRef=1 +Path=/REF/CMS_2017_I1487277/d01-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +2.250000e+01 1.500000e+00 1.500000e+00 2.184000e+07 2.863824e+06 3.154056e+06 +2.600000e+01 2.000000e+00 2.000000e+00 1.083000e+07 1.325984e+06 1.316779e+06 +3.000000e+01 2.000000e+00 2.000000e+00 5.235000e+06 6.108169e+05 6.030710e+05 +3.450000e+01 2.500000e+00 2.500000e+00 2.625000e+06 3.021368e+05 3.019147e+05 +4.000000e+01 3.000000e+00 3.000000e+00 1.214000e+06 1.431979e+05 1.412476e+05 +4.600000e+01 3.000000e+00 3.000000e+00 5.481000e+05 6.160591e+04 6.173996e+04 +5.250000e+01 3.500000e+00 3.500000e+00 3.118000e+05 3.592008e+04 3.599283e+04 +6.000000e+01 4.000000e+00 4.000000e+00 1.662000e+05 1.949294e+04 2.035488e+04 +6.900000e+01 5.000000e+00 5.000000e+00 8.244000e+04 9.225372e+03 9.619828e+03 +7.900000e+01 5.000000e+00 5.000000e+00 3.753560e+04 2.380178e+03 2.423637e+03 +9.050000e+01 6.500000e+00 6.500000e+00 1.897700e+04 1.156100e+03 1.175730e+03 +1.055000e+02 8.500000e+00 8.500000e+00 8.640290e+03 5.041483e+02 5.118929e+02 +1.235000e+02 9.500000e+00 9.500000e+00 3.818060e+03 2.151042e+02 2.181159e+02 +1.430000e+02 1.000000e+01 1.000000e+01 1.698030e+03 8.843704e+01 8.965438e+01 +1.635000e+02 1.050000e+01 1.050000e+01 8.227680e+02 4.105903e+01 4.158812e+01 +1.850000e+02 1.100000e+01 1.100000e+01 4.042380e+02 1.947701e+01 1.971363e+01 +2.080000e+02 1.200000e+01 1.200000e+01 2.075410e+02 9.727380e+00 9.835957e+00 +2.325000e+02 1.250000e+01 1.250000e+01 1.100720e+02 4.851027e+00 4.903810e+00 +2.585000e+02 1.350000e+01 1.350000e+01 6.198610e+01 2.642238e+00 2.668674e+00 +2.860000e+02 1.400000e+01 1.400000e+01 3.404810e+01 1.410131e+00 1.422794e+00 +3.150000e+02 1.500000e+01 1.500000e+01 1.918990e+01 7.693968e-01 7.753038e-01 +3.460000e+02 1.600000e+01 1.600000e+01 1.103190e+01 4.318496e-01 4.345902e-01 +3.785000e+02 1.650000e+01 1.650000e+01 6.455580e+00 2.479144e-01 2.490161e-01 +4.125000e+02 1.750000e+01 1.750000e+01 3.763220e+00 1.413802e-01 1.417203e-01 +4.490000e+02 1.900000e+01 1.900000e+01 2.239220e+00 8.304734e-02 8.306337e-02 +4.875000e+02 1.950000e+01 1.950000e+01 1.325280e+00 4.878275e-02 4.867734e-02 +5.275000e+02 2.050000e+01 2.050000e+01 7.949740e-01 2.889180e-02 2.875329e-02 +5.700000e+02 2.200000e+01 2.200000e+01 4.883790e-01 1.772489e-02 1.759442e-02 +6.150000e+02 2.300000e+01 2.300000e+01 2.950680e-01 1.074783e-02 1.064188e-02 +6.620000e+02 2.400000e+01 2.400000e+01 1.784500e-01 6.555285e-03 6.475230e-03 +7.115000e+02 2.550000e+01 2.550000e+01 1.089610e-01 4.057029e-03 4.000167e-03 +7.635000e+02 2.650000e+01 2.650000e+01 6.597010e-02 2.503366e-03 2.464923e-03 +8.180000e+02 2.800000e+01 2.800000e+01 3.989360e-02 1.551028e-03 1.525979e-03 +8.755000e+02 2.950000e+01 2.950000e+01 2.427380e-02 9.724439e-04 9.570086e-04 +9.360000e+02 3.100000e+01 3.100000e+01 1.461160e-02 6.069528e-04 5.979143e-04 +9.995000e+02 3.250000e+01 3.250000e+01 8.737530e-03 3.788431e-04 3.740790e-04 +1.066500e+03 3.450000e+01 3.450000e+01 5.113140e-03 2.350992e-04 2.329322e-04 +1.136500e+03 3.550000e+01 3.550000e+01 2.996930e-03 1.469714e-04 1.462260e-04 +1.210000e+03 3.800000e+01 3.800000e+01 1.755620e-03 9.264995e-05 9.263414e-05 +1.287500e+03 3.950000e+01 3.950000e+01 1.008850e-03 5.838167e-05 5.867445e-05 +1.368500e+03 4.150000e+01 4.150000e+01 6.106070e-04 3.903924e-05 3.943386e-05 +1.453500e+03 4.350000e+01 4.350000e+01 3.154070e-04 2.336843e-05 2.368771e-05 +1.542500e+03 4.550000e+01 4.550000e+01 1.834990e-04 1.574894e-05 1.600832e-05 +1.686000e+03 9.800000e+01 9.800000e+01 7.203840e-05 6.733462e-06 6.903382e-06 +1.950000e+03 1.660000e+02 1.660000e+02 1.509410e-05 2.052290e-06 2.109541e-06 +2.308000e+03 1.920000e+02 1.920000e+02 7.229090e-07 3.479858e-07 3.498518e-07 +# END YODA_SCATTER2D +# BEGIN YODA_SCATTER2D /REF/CMS_2017_I1487277/d02-x01-y01 +IsRef=1 +Path=/REF/CMS_2017_I1487277/d02-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +2.250000e+01 1.500000e+00 1.500000e+00 2.118000e+07 2.597185e+06 2.921767e+06 +2.600000e+01 2.000000e+00 2.000000e+00 1.062000e+07 1.317994e+06 1.344364e+06 +3.000000e+01 2.000000e+00 2.000000e+00 5.149000e+06 6.072499e+05 6.130239e+05 +3.450000e+01 2.500000e+00 2.500000e+00 2.538000e+06 2.926286e+05 2.936978e+05 +4.000000e+01 3.000000e+00 3.000000e+00 1.216000e+06 1.380179e+05 1.395155e+05 +4.600000e+01 3.000000e+00 3.000000e+00 5.788000e+05 6.373418e+04 6.510749e+04 +5.250000e+01 3.500000e+00 3.500000e+00 3.300000e+05 3.646621e+04 3.728367e+04 +6.000000e+01 4.000000e+00 4.000000e+00 1.668000e+05 1.839740e+04 1.885224e+04 +6.900000e+01 5.000000e+00 5.000000e+00 8.397000e+04 8.490316e+03 8.735014e+03 +7.900000e+01 5.000000e+00 5.000000e+00 3.594330e+04 2.430308e+03 2.218085e+03 +9.050000e+01 6.500000e+00 6.500000e+00 1.777220e+04 1.150753e+03 1.074084e+03 +1.055000e+02 8.500000e+00 8.500000e+00 8.101540e+03 5.007064e+02 4.794410e+02 +1.235000e+02 9.500000e+00 9.500000e+00 3.589340e+03 2.137154e+02 2.099039e+02 +1.430000e+02 1.000000e+01 1.000000e+01 1.568040e+03 8.538627e+01 8.571146e+01 +1.635000e+02 1.050000e+01 1.050000e+01 7.430460e+02 3.857324e+01 3.948943e+01 +1.850000e+02 1.100000e+01 1.100000e+01 3.821840e+02 1.903890e+01 1.981799e+01 +2.080000e+02 1.200000e+01 1.200000e+01 1.969590e+02 9.501971e+00 1.002255e+01 +2.325000e+02 1.250000e+01 1.250000e+01 1.015520e+02 4.550357e+00 4.875504e+00 +2.585000e+02 1.350000e+01 1.350000e+01 5.682890e+01 2.443347e+00 2.645939e+00 +2.860000e+02 1.400000e+01 1.400000e+01 3.127660e+01 1.296276e+00 1.414730e+00 +3.150000e+02 1.500000e+01 1.500000e+01 1.742990e+01 6.921306e-01 7.606885e-01 +3.460000e+02 1.600000e+01 1.600000e+01 1.001540e+01 3.847966e-01 4.244919e-01 +3.785000e+02 1.650000e+01 1.650000e+01 5.802610e+00 2.168546e-01 2.395275e-01 +4.125000e+02 1.750000e+01 1.750000e+01 3.341890e+00 1.208558e-01 1.335570e-01 +4.490000e+02 1.900000e+01 1.900000e+01 1.947950e+00 6.897222e-02 7.600117e-02 +4.875000e+02 1.950000e+01 1.950000e+01 1.143670e+00 3.994370e-02 4.376070e-02 +5.275000e+02 2.050000e+01 2.050000e+01 6.953640e-01 2.373804e-02 2.586172e-02 +5.700000e+02 2.200000e+01 2.200000e+01 4.136650e-01 1.404666e-02 1.515243e-02 +6.150000e+02 2.300000e+01 2.300000e+01 2.449630e-01 8.340126e-03 8.886456e-03 +6.620000e+02 2.400000e+01 2.400000e+01 1.463840e-01 5.040934e-03 5.291943e-03 +7.115000e+02 2.550000e+01 2.550000e+01 8.742160e-02 3.074500e-03 3.172846e-03 +7.635000e+02 2.650000e+01 2.650000e+01 5.088820e-02 1.847072e-03 1.870682e-03 +8.180000e+02 2.800000e+01 2.800000e+01 3.034710e-02 1.148830e-03 1.140343e-03 +8.755000e+02 2.950000e+01 2.950000e+01 1.768740e-02 7.064777e-04 6.869873e-04 +9.360000e+02 3.100000e+01 3.100000e+01 1.024450e-02 4.369317e-04 4.164950e-04 +9.995000e+02 3.250000e+01 3.250000e+01 5.943970e-03 2.738699e-04 2.564984e-04 +1.066500e+03 3.450000e+01 3.450000e+01 3.383080e-03 1.704450e-04 1.573925e-04 +1.136500e+03 3.550000e+01 3.550000e+01 1.907640e-03 1.066495e-04 9.766409e-05 +1.210000e+03 3.800000e+01 3.800000e+01 1.088100e-03 6.810007e-05 6.217542e-05 +1.287500e+03 3.950000e+01 3.950000e+01 5.959220e-04 4.264053e-05 3.912062e-05 +1.368500e+03 4.150000e+01 4.150000e+01 3.063530e-04 2.571756e-05 2.389097e-05 +1.453500e+03 4.350000e+01 4.350000e+01 1.635410e-04 1.632547e-05 1.540376e-05 +1.542500e+03 4.550000e+01 4.550000e+01 7.804370e-05 9.753619e-06 9.385498e-06 +1.686000e+03 9.800000e+01 9.800000e+01 2.379580e-05 3.585416e-06 3.508098e-06 +1.950000e+03 1.660000e+02 1.660000e+02 3.162430e-06 8.654556e-07 8.731030e-07 +2.308000e+03 1.920000e+02 1.920000e+02 1.169200e-07 1.381390e-07 1.388261e-07 +# END YODA_SCATTER2D +# BEGIN YODA_SCATTER2D /REF/CMS_2017_I1487277/d03-x01-y01 +IsRef=1 +Path=/REF/CMS_2017_I1487277/d03-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +2.250000e+01 1.500000e+00 1.500000e+00 1.826000e+07 2.821380e+06 2.963775e+06 +2.600000e+01 2.000000e+00 2.000000e+00 8.942000e+06 1.302258e+06 1.344449e+06 +3.000000e+01 2.000000e+00 2.000000e+00 4.199000e+06 5.707498e+05 6.056914e+05 +3.450000e+01 2.500000e+00 2.500000e+00 2.035000e+06 2.795479e+05 2.955627e+05 +4.000000e+01 3.000000e+00 3.000000e+00 9.675000e+05 1.264850e+05 1.369155e+05 +4.600000e+01 3.000000e+00 3.000000e+00 4.399000e+05 5.508986e+04 6.001027e+04 +5.250000e+01 3.500000e+00 3.500000e+00 2.347000e+05 3.161518e+04 3.042988e+04 +6.000000e+01 4.000000e+00 4.000000e+00 1.195000e+05 1.616466e+04 1.641067e+04 +6.900000e+01 5.000000e+00 5.000000e+00 6.264000e+04 8.569763e+03 8.791876e+03 +7.900000e+01 5.000000e+00 5.000000e+00 3.299230e+04 2.375278e+03 2.472409e+03 +9.050000e+01 6.500000e+00 6.500000e+00 1.653200e+04 1.143405e+03 1.187273e+03 +1.055000e+02 8.500000e+00 8.500000e+00 7.371510e+03 4.880964e+02 5.053697e+02 +1.235000e+02 9.500000e+00 9.500000e+00 3.124160e+03 2.001611e+02 2.064822e+02 +1.430000e+02 1.000000e+01 1.000000e+01 1.392550e+03 8.174994e+01 8.430328e+01 +1.635000e+02 1.050000e+01 1.050000e+01 6.588270e+02 3.691669e+01 3.794965e+01 +1.850000e+02 1.100000e+01 1.100000e+01 3.282170e+02 1.767003e+01 1.808946e+01 +2.080000e+02 1.200000e+01 1.200000e+01 1.650710e+02 8.609842e+00 8.768515e+00 +2.325000e+02 1.250000e+01 1.250000e+01 8.611060e+01 4.172213e+00 4.225803e+00 +2.585000e+02 1.350000e+01 1.350000e+01 4.634530e+01 2.154864e+00 2.163985e+00 +2.860000e+02 1.400000e+01 1.400000e+01 2.536690e+01 1.136489e+00 1.129348e+00 +3.150000e+02 1.500000e+01 1.500000e+01 1.385340e+01 5.943461e-01 5.830582e-01 +3.460000e+02 1.600000e+01 1.600000e+01 7.749780e+00 3.216535e-01 3.107604e-01 +3.785000e+02 1.650000e+01 1.650000e+01 4.366500e+00 1.764001e-01 1.676508e-01 +4.125000e+02 1.750000e+01 1.750000e+01 2.470150e+00 9.654894e-02 9.006425e-02 +4.490000e+02 1.900000e+01 1.900000e+01 1.402110e+00 5.376323e-02 4.925079e-02 +4.875000e+02 1.950000e+01 1.950000e+01 8.104610e-01 3.074921e-02 2.772944e-02 +5.275000e+02 2.050000e+01 2.050000e+01 4.563560e-01 1.695059e-02 1.503190e-02 +5.700000e+02 2.200000e+01 2.200000e+01 2.602600e-01 9.661827e-03 8.496997e-03 +6.150000e+02 2.300000e+01 2.300000e+01 1.471830e-01 5.511751e-03 4.843224e-03 +6.620000e+02 2.400000e+01 2.400000e+01 8.267580e-02 3.154738e-03 2.794111e-03 +7.115000e+02 2.550000e+01 2.550000e+01 4.611630e-02 1.812646e-03 1.632785e-03 +7.635000e+02 2.650000e+01 2.650000e+01 2.560410e-02 1.049563e-03 9.695043e-04 +8.180000e+02 2.800000e+01 2.800000e+01 1.382520e-02 5.990546e-04 5.711157e-04 +8.755000e+02 2.950000e+01 2.950000e+01 7.394490e-03 3.442258e-04 3.400285e-04 +9.360000e+02 3.100000e+01 3.100000e+01 3.747160e-03 1.915513e-04 1.959796e-04 +9.995000e+02 3.250000e+01 3.250000e+01 1.994960e-03 1.144725e-04 1.206384e-04 +1.066500e+03 3.450000e+01 3.450000e+01 9.518100e-04 6.363662e-05 6.828507e-05 +1.136500e+03 3.550000e+01 3.550000e+01 4.546500e-04 3.684158e-05 3.959905e-05 +1.210000e+03 3.800000e+01 3.800000e+01 2.173970e-04 2.202073e-05 2.335282e-05 +1.287500e+03 3.950000e+01 3.950000e+01 1.039300e-04 1.364512e-05 1.409002e-05 +1.368500e+03 4.150000e+01 4.150000e+01 4.554970e-05 8.105575e-06 8.094606e-06 +1.453500e+03 4.350000e+01 4.350000e+01 1.754880e-05 4.500688e-06 4.366941e-06 +1.542500e+03 4.550000e+01 4.550000e+01 5.857860e-06 2.328302e-06 2.229635e-06 +1.686000e+03 9.800000e+01 9.800000e+01 6.692350e-07 5.011305e-07 4.774734e-07 +1.950000e+03 1.660000e+02 1.660000e+02 8.620700e-08 8.884729e-08 7.341849e-08 +# END YODA_SCATTER2D +# BEGIN YODA_SCATTER2D /REF/CMS_2017_I1487277/d04-x01-y01 +IsRef=1 +Path=/REF/CMS_2017_I1487277/d04-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +2.250000e+01 1.500000e+00 1.500000e+00 1.597000e+07 2.997945e+06 2.857431e+06 +2.600000e+01 2.000000e+00 2.000000e+00 7.800000e+06 1.313677e+06 1.333499e+06 +3.000000e+01 2.000000e+00 2.000000e+00 3.690000e+06 5.876342e+05 6.053929e+05 +3.450000e+01 2.500000e+00 2.500000e+00 1.836000e+06 2.847137e+05 2.879182e+05 +4.000000e+01 3.000000e+00 3.000000e+00 8.603000e+05 1.280996e+05 1.328815e+05 +4.600000e+01 3.000000e+00 3.000000e+00 3.801000e+05 5.376152e+04 5.649570e+04 +5.250000e+01 3.500000e+00 3.500000e+00 2.008000e+05 2.976615e+04 2.997375e+04 +6.000000e+01 4.000000e+00 4.000000e+00 9.311000e+04 1.397995e+04 1.421543e+04 +6.900000e+01 5.000000e+00 5.000000e+00 4.611000e+04 6.620106e+03 6.720679e+03 +7.900000e+01 5.000000e+00 5.000000e+00 2.430040e+04 1.833436e+03 1.877777e+03 +9.050000e+01 6.500000e+00 6.500000e+00 1.246450e+04 8.994598e+02 9.217454e+02 +1.055000e+02 8.500000e+00 8.500000e+00 5.424600e+03 3.737064e+02 3.826195e+02 +1.235000e+02 9.500000e+00 9.500000e+00 2.346840e+03 1.564992e+02 1.596752e+02 +1.430000e+02 1.000000e+01 1.000000e+01 1.028460e+03 6.252109e+01 6.357946e+01 +1.635000e+02 1.050000e+01 1.050000e+01 4.736510e+02 2.758448e+01 2.783965e+01 +1.850000e+02 1.100000e+01 1.100000e+01 2.328650e+02 1.312527e+01 1.311850e+01 +2.080000e+02 1.200000e+01 1.200000e+01 1.168900e+02 6.454092e+00 6.380114e+00 +2.325000e+02 1.250000e+01 1.250000e+01 5.930410e+01 3.049673e+00 2.971232e+00 +2.585000e+02 1.350000e+01 1.350000e+01 3.093200e+01 1.545068e+00 1.484113e+00 +2.860000e+02 1.400000e+01 1.400000e+01 1.640240e+01 8.009869e-01 7.591859e-01 +3.150000e+02 1.500000e+01 1.500000e+01 8.687940e+00 4.116357e-01 3.853918e-01 +3.460000e+02 1.600000e+01 1.600000e+01 4.565430e+00 2.127629e-01 1.978450e-01 +3.785000e+02 1.650000e+01 1.650000e+01 2.466260e+00 1.138871e-01 1.059221e-01 +4.125000e+02 1.750000e+01 1.750000e+01 1.322880e+00 5.999491e-02 5.613602e-02 +4.490000e+02 1.900000e+01 1.900000e+01 6.957270e-01 3.157030e-02 3.003657e-02 +4.875000e+02 1.950000e+01 1.950000e+01 3.592650e-01 1.652962e-02 1.611196e-02 +5.275000e+02 2.050000e+01 2.050000e+01 1.866470e-01 8.568130e-03 8.581774e-03 +5.700000e+02 2.200000e+01 2.200000e+01 9.394250e-02 4.460694e-03 4.587319e-03 +6.150000e+02 2.300000e+01 2.300000e+01 4.629710e-02 2.325452e-03 2.433291e-03 +6.620000e+02 2.400000e+01 2.400000e+01 2.237880e-02 1.220434e-03 1.279001e-03 +7.115000e+02 2.550000e+01 2.550000e+01 1.034590e-02 6.308006e-04 6.489392e-04 +7.635000e+02 2.650000e+01 2.650000e+01 4.686070e-03 3.290207e-04 3.255781e-04 +8.180000e+02 2.800000e+01 2.800000e+01 2.006150e-03 1.666665e-04 1.562335e-04 +8.755000e+02 2.950000e+01 2.950000e+01 8.039360e-04 8.126822e-05 7.173261e-05 +9.360000e+02 3.100000e+01 3.100000e+01 3.326100e-04 4.180372e-05 3.492670e-05 +9.995000e+02 3.250000e+01 3.250000e+01 1.007440e-04 1.686998e-05 1.391309e-05 +1.066500e+03 3.450000e+01 3.450000e+01 3.769670e-05 8.604762e-06 7.187268e-06 +1.136500e+03 3.550000e+01 3.550000e+01 1.446120e-05 4.627989e-06 3.989722e-06 +1.210000e+03 3.800000e+01 3.800000e+01 3.499980e-06 1.907747e-06 1.766086e-06 +1.287500e+03 3.950000e+01 3.950000e+01 5.140210e-07 4.209178e-07 3.993120e-07 +1.368500e+03 4.150000e+01 4.150000e+01 1.939700e-07 1.588491e-07 1.460777e-07 +# END YODA_SCATTER2D +# BEGIN YODA_SCATTER2D /REF/CMS_2017_I1487277/d05-x01-y01 +IsRef=1 +Path=/REF/CMS_2017_I1487277/d05-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +2.250000e+01 1.500000e+00 1.500000e+00 1.283000e+07 2.594793e+06 2.887594e+06 +2.600000e+01 2.000000e+00 2.000000e+00 6.459000e+06 1.195123e+06 1.183829e+06 +3.000000e+01 2.000000e+00 2.000000e+00 3.116000e+06 5.148111e+05 4.892226e+05 +3.450000e+01 2.500000e+00 2.500000e+00 1.481000e+06 2.294311e+05 2.267093e+05 +4.000000e+01 3.000000e+00 3.000000e+00 6.815000e+05 1.037008e+05 1.028814e+05 +4.600000e+01 3.000000e+00 3.000000e+00 3.063000e+05 4.588608e+04 4.686168e+04 +5.250000e+01 3.500000e+00 3.500000e+00 1.381000e+05 2.286385e+04 2.340540e+04 +6.000000e+01 4.000000e+00 4.000000e+00 6.567000e+04 1.182695e+04 1.229594e+04 +6.900000e+01 5.000000e+00 5.000000e+00 4.298000e+04 7.242080e+03 7.767436e+03 +7.900000e+01 5.000000e+00 5.000000e+00 1.859160e+04 1.393908e+03 1.348480e+03 +9.050000e+01 6.500000e+00 6.500000e+00 9.301100e+03 6.621720e+02 6.437558e+02 +1.055000e+02 8.500000e+00 8.500000e+00 4.001310e+03 2.704319e+02 2.648400e+02 +1.235000e+02 9.500000e+00 9.500000e+00 1.599390e+03 1.054494e+02 1.042764e+02 +1.430000e+02 1.000000e+01 1.000000e+01 6.999550e+02 4.082707e+01 4.073396e+01 +1.635000e+02 1.050000e+01 1.050000e+01 3.112940e+02 1.736934e+01 1.752449e+01 +1.850000e+02 1.100000e+01 1.100000e+01 1.446300e+02 7.855495e+00 8.012665e+00 +2.080000e+02 1.200000e+01 1.200000e+01 6.763900e+01 3.663994e+00 3.773758e+00 +2.325000e+02 1.250000e+01 1.250000e+01 3.251010e+01 1.600994e+00 1.676460e+00 +2.585000e+02 1.350000e+01 1.350000e+01 1.548660e+01 7.496441e-01 7.943103e-01 +2.860000e+02 1.400000e+01 1.400000e+01 7.428850e+00 3.590347e-01 3.841274e-01 +3.150000e+02 1.500000e+01 1.500000e+01 3.467190e+00 1.646319e-01 1.782430e-01 +3.460000e+02 1.600000e+01 1.600000e+01 1.601760e+00 7.726829e-02 8.428819e-02 +3.785000e+02 1.650000e+01 1.650000e+01 7.334700e-01 3.668527e-02 4.022125e-02 +4.125000e+02 1.750000e+01 1.750000e+01 3.153260e-01 1.588194e-02 1.763285e-02 +4.490000e+02 1.900000e+01 1.900000e+01 1.337520e-01 7.127657e-03 7.979088e-03 +4.875000e+02 1.950000e+01 1.950000e+01 5.202840e-02 3.044076e-03 3.432384e-03 +5.275000e+02 2.050000e+01 2.050000e+01 2.033030e-02 1.157882e-03 1.366772e-03 +5.700000e+02 2.200000e+01 2.200000e+01 7.143640e-03 4.378882e-04 5.357739e-04 +6.150000e+02 2.300000e+01 2.300000e+01 2.329840e-03 1.582147e-04 2.015373e-04 +6.620000e+02 2.400000e+01 2.400000e+01 6.938090e-04 5.557079e-05 7.259181e-05 +7.115000e+02 2.550000e+01 2.550000e+01 1.818030e-04 1.963027e-05 2.500765e-05 +7.635000e+02 2.650000e+01 2.650000e+01 4.300220e-05 7.627440e-06 8.931388e-06 +8.180000e+02 2.800000e+01 2.800000e+01 5.830160e-06 2.474464e-06 2.599908e-06 +8.755000e+02 2.950000e+01 2.950000e+01 7.634170e-07 8.427396e-07 8.530254e-07 +# END YODA_SCATTER2D +# BEGIN YODA_SCATTER2D /REF/CMS_2017_I1487277/d06-x01-y01 +IsRef=1 +Path=/REF/CMS_2017_I1487277/d06-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +2.250000e+01 1.500000e+00 1.500000e+00 9.178000e+06 4.136662e+06 3.484489e+06 +2.600000e+01 2.000000e+00 2.000000e+00 4.412000e+06 1.387844e+06 1.304583e+06 +3.000000e+01 2.000000e+00 2.000000e+00 2.014000e+06 4.883713e+05 4.609405e+05 +3.450000e+01 2.500000e+00 2.500000e+00 9.783000e+05 2.019538e+05 1.966597e+05 +4.000000e+01 3.000000e+00 3.000000e+00 4.864000e+05 9.241495e+04 9.027037e+04 +4.600000e+01 3.000000e+00 3.000000e+00 2.251000e+05 4.052609e+04 3.918221e+04 +5.250000e+01 3.500000e+00 3.500000e+00 1.196000e+05 2.137368e+04 2.170788e+04 +6.000000e+01 4.000000e+00 4.000000e+00 6.317000e+04 1.192811e+04 1.196072e+04 +6.900000e+01 5.000000e+00 5.000000e+00 2.932000e+04 5.637131e+03 5.722869e+03 +7.900000e+01 5.000000e+00 5.000000e+00 1.249260e+04 1.445614e+03 1.357156e+03 +9.050000e+01 6.500000e+00 6.500000e+00 5.885760e+03 6.145129e+02 5.830410e+02 +1.055000e+02 8.500000e+00 8.500000e+00 2.481030e+03 2.333988e+02 2.253984e+02 +1.235000e+02 9.500000e+00 9.500000e+00 9.576690e+02 8.492703e+01 8.403385e+01 +1.430000e+02 1.000000e+01 1.000000e+01 3.703460e+02 2.867810e+01 2.911502e+01 +1.635000e+02 1.050000e+01 1.050000e+01 1.509260e+02 1.148730e+01 1.194298e+01 +1.850000e+02 1.100000e+01 1.100000e+01 6.157160e+01 4.768798e+00 5.043836e+00 +2.080000e+02 1.200000e+01 1.200000e+01 2.452170e+01 2.010095e+00 2.144796e+00 +2.325000e+02 1.250000e+01 1.250000e+01 9.317540e+00 7.609103e-01 8.232290e-01 +2.585000e+02 1.350000e+01 1.350000e+01 3.570070e+00 3.153272e-01 3.411914e-01 +2.860000e+02 1.400000e+01 1.400000e+01 1.263430e+00 1.209197e-01 1.305795e-01 +3.150000e+02 1.500000e+01 1.500000e+01 4.245950e-01 4.366654e-02 4.704389e-02 +3.460000e+02 1.600000e+01 1.600000e+01 1.370020e-01 1.572242e-02 1.679252e-02 +3.785000e+02 1.650000e+01 1.650000e+01 3.838800e-02 5.244989e-03 5.513985e-03 +4.125000e+02 1.750000e+01 1.750000e+01 9.497640e-03 1.390735e-03 1.453943e-03 +4.490000e+02 1.900000e+01 1.900000e+01 1.985740e-03 4.058675e-04 4.149043e-04 +4.875000e+02 1.950000e+01 1.950000e+01 3.913170e-04 1.390297e-04 1.398793e-04 +5.275000e+02 2.050000e+01 2.050000e+01 3.864420e-05 1.137005e-05 1.142788e-05 +# END YODA_SCATTER2D +# BEGIN YODA_SCATTER2D /REF/CMS_2017_I1487277/d07-x01-y01 +IsRef=1 +Path=/REF/CMS_2017_I1487277/d07-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +2.250000e+01 1.500000e+00 1.500000e+00 4.574000e+06 1.085817e+06 1.025402e+06 +2.600000e+01 2.000000e+00 2.000000e+00 2.027000e+06 4.496152e+05 4.320314e+05 +3.000000e+01 2.000000e+00 2.000000e+00 9.050000e+05 1.766989e+05 1.808345e+05 +3.450000e+01 2.500000e+00 2.500000e+00 4.219000e+05 7.908164e+04 8.476309e+04 +4.000000e+01 3.000000e+00 3.000000e+00 1.747000e+05 3.256299e+04 3.452127e+04 +4.600000e+01 3.000000e+00 3.000000e+00 6.317000e+04 1.157275e+04 1.247001e+04 +5.250000e+01 3.500000e+00 3.500000e+00 2.625000e+04 5.331068e+03 5.691973e+03 +6.000000e+01 4.000000e+00 4.000000e+00 1.113000e+04 2.535391e+03 2.677307e+03 +6.900000e+01 5.000000e+00 5.000000e+00 5.922000e+03 1.348501e+03 1.452967e+03 +# END YODA_SCATTER2D diff --git a/v2.6/generators/nlojet++/interface/data/RivetAdditions/Makefile.am b/v2.6/generators/nlojet++/interface/data/RivetAdditions/Makefile.am new file mode 100644 index 0000000000000000000000000000000000000000..2fe08fb1932b2957d316e9c4f72f0da51be29742 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/RivetAdditions/Makefile.am @@ -0,0 +1,18 @@ +# -*- Automake -*- +# ----------------------------------------------------------------------------- +# +# K. Rabbertz, 27.01.2015 +# +# Additions to provide fastNLO vs. data comparisons even though +# Rivet analysis not available +# +# ----------------------------------------------------------------------------- +# Use GNU standards +AUTOMAKE_OPTIONS = gnu + +# Files that are required to build the project but that can be +# recreated IF the necessary autotools etc. are available by: +# "autoreconf -i; ./configure" +# Use "make maintainer-clean" (on a build machine) before svn commits, +# but NOT before distribution with "make dist"! +MAINTAINERCLEANFILES = Makefile.in diff --git a/v2.6/generators/nlojet++/interface/data/Test/fnl2342b_2mu_v23_fix.str b/v2.6/generators/nlojet++/interface/data/Test/fnl2342b_2mu_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..92f6abb978392e3f1479533ddffbef8db62a16ef --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/Test/fnl2342b_2mu_v23_fix.str @@ -0,0 +1,170 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl2342b_2mu_v23_fix +ScenarioDescription { + "d2sigma-jet_dpT_dy_[pb_GeV]" + "CMS_Collaboration" + "Inclusive_Jet_pT" + "anti-kT_R=0.5" + "CMS-PAPER-QCD-10-011, arXiv:1106.0208, Phys. Rev. Lett. 107 (2011) 132001." + "RIVET_ID=CMS_2011_S9086218/D01-x01-y01,SPIRES_ID=9086218,INSPIRE_RECORD=902309" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.5 # Jet size parameter: Required for all jets +ptjmin 18. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 3.0 # Maximal jet rapidity + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "|y|" # This defines the observables to be calculated! + "pT_[GeV]" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 2. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "pT_jet_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 846. 1684. + 0.5 1.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 790. 1684. + 1.0 1.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 1410. + 1.5 2.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 1032. + 2.0 2.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 737. + 2.5 3.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 468. +}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 7000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJets.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 12 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/Test/fnl2342b_2x_v23_fix.str b/v2.6/generators/nlojet++/interface/data/Test/fnl2342b_2x_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..77b3e8ca9a0118330dec09c9c1f72fda3b4b3083 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/Test/fnl2342b_2x_v23_fix.str @@ -0,0 +1,170 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl2342b_2x_v23_fix +ScenarioDescription { + "d2sigma-jet_dpT_dy_[pb_GeV]" + "CMS_Collaboration" + "Inclusive_Jet_pT" + "anti-kT_R=0.5" + "CMS-PAPER-QCD-10-011, arXiv:1106.0208, Phys. Rev. Lett. 107 (2011) 132001." + "RIVET_ID=CMS_2011_S9086218/D01-x01-y01,SPIRES_ID=9086218,INSPIRE_RECORD=902309" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.5 # Jet size parameter: Required for all jets +ptjmin 18. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 3.0 # Maximal jet rapidity + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "|y|" # This defines the observables to be calculated! + "pT_[GeV]" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 2. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "pT_jet_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 846. 1684. + 0.5 1.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 790. 1684. + 1.0 1.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 1410. + 1.5 2.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 1032. + 2.0 2.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 737. + 2.5 3.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 468. +}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 7000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJets.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 32 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/Test/fnl2342b_mu2_v23_fix.str b/v2.6/generators/nlojet++/interface/data/Test/fnl2342b_mu2_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..caa63ebb29615c988ed8b3c8d7b3bdc13be3f6e1 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/Test/fnl2342b_mu2_v23_fix.str @@ -0,0 +1,170 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl2342b_mu2_v23_fix +ScenarioDescription { + "d2sigma-jet_dpT_dy_[pb_GeV]" + "CMS_Collaboration" + "Inclusive_Jet_pT" + "anti-kT_R=0.5" + "CMS-PAPER-QCD-10-011, arXiv:1106.0208, Phys. Rev. Lett. 107 (2011) 132001." + "RIVET_ID=CMS_2011_S9086218/D01-x01-y01,SPIRES_ID=9086218,INSPIRE_RECORD=902309" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.5 # Jet size parameter: Required for all jets +ptjmin 18. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 3.0 # Maximal jet rapidity + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "|y|" # This defines the observables to be calculated! + "pT_[GeV]" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 2. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "pT_jet_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 846. 1684. + 0.5 1.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 790. 1684. + 1.0 1.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 1410. + 1.5 2.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 1032. + 2.0 2.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 737. + 2.5 3.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 468. +}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 7000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJets.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 4 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/Test/fnl2342b_x2_v23_fix.str b/v2.6/generators/nlojet++/interface/data/Test/fnl2342b_x2_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..8a542aa9082e91e175f379c7e46471c3ab668f36 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/Test/fnl2342b_x2_v23_fix.str @@ -0,0 +1,170 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl2342b_x2_v23_fix +ScenarioDescription { + "d2sigma-jet_dpT_dy_[pb_GeV]" + "CMS_Collaboration" + "Inclusive_Jet_pT" + "anti-kT_R=0.5" + "CMS-PAPER-QCD-10-011, arXiv:1106.0208, Phys. Rev. Lett. 107 (2011) 132001." + "RIVET_ID=CMS_2011_S9086218/D01-x01-y01,SPIRES_ID=9086218,INSPIRE_RECORD=902309" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.5 # Jet size parameter: Required for all jets +ptjmin 18. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 3.0 # Maximal jet rapidity + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "|y|" # This defines the observables to be calculated! + "pT_[GeV]" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 2. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "pT_jet_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 846. 1684. + 0.5 1.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 790. 1684. + 1.0 1.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 1410. + 1.5 2.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 1032. + 2.0 2.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 737. + 2.5 3.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 468. +}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 7000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJets.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 8 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/Test/fnl2342b_xcm_v23_fix.str b/v2.6/generators/nlojet++/interface/data/Test/fnl2342b_xcm_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..cf099b78f56100d25fb60db363fe042c7f38743d --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/Test/fnl2342b_xcm_v23_fix.str @@ -0,0 +1,170 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl2342b_xcm_v23_fix +ScenarioDescription { + "d2sigma-jet_dpT_dy_[pb_GeV]" + "CMS_Collaboration" + "Inclusive_Jet_pT" + "anti-kT_R=0.5" + "CMS-PAPER-QCD-10-011, arXiv:1106.0208, Phys. Rev. Lett. 107 (2011) 132001." + "RIVET_ID=CMS_2011_S9086218/D01-x01-y01,SPIRES_ID=9086218,INSPIRE_RECORD=902309" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.5 # Jet size parameter: Required for all jets +ptjmin 18. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 3.0 # Maximal jet rapidity + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "|y|" # This defines the observables to be calculated! + "pT_[GeV]" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 2. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "pT_jet_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 846. 1684. + 0.5 1.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 790. 1684. + 1.0 1.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 1410. + 1.5 2.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 1032. + 2.0 2.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 737. + 2.5 3.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 468. +}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 7000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJets.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Catmull +X_DistanceMeasure "sqrtlog10" +X_NNodes 16 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/Test/fnl2342b_xl10_v23_fix.str b/v2.6/generators/nlojet++/interface/data/Test/fnl2342b_xl10_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..aeb327d768757fdcc53b8106b8065bc8130fec49 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/Test/fnl2342b_xl10_v23_fix.str @@ -0,0 +1,170 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl2342b_xl10_v23_fix +ScenarioDescription { + "d2sigma-jet_dpT_dy_[pb_GeV]" + "CMS_Collaboration" + "Inclusive_Jet_pT" + "anti-kT_R=0.5" + "CMS-PAPER-QCD-10-011, arXiv:1106.0208, Phys. Rev. Lett. 107 (2011) 132001." + "RIVET_ID=CMS_2011_S9086218/D01-x01-y01,SPIRES_ID=9086218,INSPIRE_RECORD=902309" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.5 # Jet size parameter: Required for all jets +ptjmin 18. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 3.0 # Maximal jet rapidity + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "|y|" # This defines the observables to be calculated! + "pT_[GeV]" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 2. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "pT_jet_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 846. 1684. + 0.5 1.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 790. 1684. + 1.0 1.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 1410. + 1.5 2.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 1032. + 2.0 2.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 737. + 2.5 3.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 468. +}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 7000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJets.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "log10" +X_NNodes 16 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/Test/fnl2342b_xlin_v23_fix.str b/v2.6/generators/nlojet++/interface/data/Test/fnl2342b_xlin_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..28981ea164e22e5194d234f68262c47e5b834bea --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/Test/fnl2342b_xlin_v23_fix.str @@ -0,0 +1,170 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl2342b_xlin_v23_fix +ScenarioDescription { + "d2sigma-jet_dpT_dy_[pb_GeV]" + "CMS_Collaboration" + "Inclusive_Jet_pT" + "anti-kT_R=0.5" + "CMS-PAPER-QCD-10-011, arXiv:1106.0208, Phys. Rev. Lett. 107 (2011) 132001." + "RIVET_ID=CMS_2011_S9086218/D01-x01-y01,SPIRES_ID=9086218,INSPIRE_RECORD=902309" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.5 # Jet size parameter: Required for all jets +ptjmin 18. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 3.0 # Maximal jet rapidity + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "|y|" # This defines the observables to be calculated! + "pT_[GeV]" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 2. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "pT_jet_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 846. 1684. + 0.5 1.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 790. 1684. + 1.0 1.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 1410. + 1.5 2.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 1032. + 2.0 2.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 737. + 2.5 3.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 468. +}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 7000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJets.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "linear" +X_NNodes 16 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/Test/fnl2342b_xll25_v23_fix.str b/v2.6/generators/nlojet++/interface/data/Test/fnl2342b_xll25_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..127f5cab988ca795d2f7f7d75b562f3367cd58dc --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/Test/fnl2342b_xll25_v23_fix.str @@ -0,0 +1,170 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl2342b_xll25_v23_fix +ScenarioDescription { + "d2sigma-jet_dpT_dy_[pb_GeV]" + "CMS_Collaboration" + "Inclusive_Jet_pT" + "anti-kT_R=0.5" + "CMS-PAPER-QCD-10-011, arXiv:1106.0208, Phys. Rev. Lett. 107 (2011) 132001." + "RIVET_ID=CMS_2011_S9086218/D01-x01-y01,SPIRES_ID=9086218,INSPIRE_RECORD=902309" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.5 # Jet size parameter: Required for all jets +ptjmin 18. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 3.0 # Maximal jet rapidity + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "|y|" # This defines the observables to be calculated! + "pT_[GeV]" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 2. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "pT_jet_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 846. 1684. + 0.5 1.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 790. 1684. + 1.0 1.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 1410. + 1.5 2.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 1032. + 2.0 2.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 737. + 2.5 3.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 468. +}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 7000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJets.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "loglog025" +X_NNodes 16 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/Test/fnl2342b_xln_v23_fix.str b/v2.6/generators/nlojet++/interface/data/Test/fnl2342b_xln_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..cd0264984c6f8a0b80cdfadf1d60ae2e50e1a7a8 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/Test/fnl2342b_xln_v23_fix.str @@ -0,0 +1,170 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl2342b_xln_v23_fix +ScenarioDescription { + "d2sigma-jet_dpT_dy_[pb_GeV]" + "CMS_Collaboration" + "Inclusive_Jet_pT" + "anti-kT_R=0.5" + "CMS-PAPER-QCD-10-011, arXiv:1106.0208, Phys. Rev. Lett. 107 (2011) 132001." + "RIVET_ID=CMS_2011_S9086218/D01-x01-y01,SPIRES_ID=9086218,INSPIRE_RECORD=902309" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.5 # Jet size parameter: Required for all jets +ptjmin 18. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 3.0 # Maximal jet rapidity + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "|y|" # This defines the observables to be calculated! + "pT_[GeV]" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 2. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "pT_jet_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 846. 1684. + 0.5 1.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 790. 1684. + 1.0 1.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 1410. + 1.5 2.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 1032. + 2.0 2.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 737. + 2.5 3.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 468. +}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 7000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJets.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Linear +X_DistanceMeasure "sqrtlog10" +X_NNodes 16 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/Test/fnl2342b_xon_v23_fix.str b/v2.6/generators/nlojet++/interface/data/Test/fnl2342b_xon_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..bbe781843c04a7ecd2e6c2cd549d987177f776df --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/Test/fnl2342b_xon_v23_fix.str @@ -0,0 +1,170 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl2342b_xon_v23_fix +ScenarioDescription { + "d2sigma-jet_dpT_dy_[pb_GeV]" + "CMS_Collaboration" + "Inclusive_Jet_pT" + "anti-kT_R=0.5" + "CMS-PAPER-QCD-10-011, arXiv:1106.0208, Phys. Rev. Lett. 107 (2011) 132001." + "RIVET_ID=CMS_2011_S9086218/D01-x01-y01,SPIRES_ID=9086218,INSPIRE_RECORD=902309" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.5 # Jet size parameter: Required for all jets +ptjmin 18. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 3.0 # Maximal jet rapidity + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "|y|" # This defines the observables to be calculated! + "pT_[GeV]" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 2. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "pT_jet_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 846. 1684. + 0.5 1.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 790. 1684. + 1.0 1.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 1410. + 1.5 2.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 1032. + 2.0 2.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 737. + 2.5 3.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 468. +}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 7000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJets.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel OneNode +X_DistanceMeasure "sqrtlog10" +X_NNodes 16 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/Test/fnl2342b_xsl10_v23_fix.str b/v2.6/generators/nlojet++/interface/data/Test/fnl2342b_xsl10_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..00d921ca1fad3f54e2c2d516425aa76c6a26b39b --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/Test/fnl2342b_xsl10_v23_fix.str @@ -0,0 +1,170 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl2342b_xsl10_v23_fix +ScenarioDescription { + "d2sigma-jet_dpT_dy_[pb_GeV]" + "CMS_Collaboration" + "Inclusive_Jet_pT" + "anti-kT_R=0.5" + "CMS-PAPER-QCD-10-011, arXiv:1106.0208, Phys. Rev. Lett. 107 (2011) 132001." + "RIVET_ID=CMS_2011_S9086218/D01-x01-y01,SPIRES_ID=9086218,INSPIRE_RECORD=902309" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.5 # Jet size parameter: Required for all jets +ptjmin 18. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 3.0 # Maximal jet rapidity + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "|y|" # This defines the observables to be calculated! + "pT_[GeV]" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 2. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "pT_jet_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 846. 1684. + 0.5 1.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 790. 1684. + 1.0 1.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 1410. + 1.5 2.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 1032. + 2.0 2.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 737. + 2.5 3.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 468. +}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 7000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJets.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 16 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/check/InclusiveNJets_InclusiveJets_fix.wrm b/v2.6/generators/nlojet++/interface/data/check/InclusiveNJets_InclusiveJets_fix.wrm new file mode 100644 index 0000000000000000000000000000000000000000..5d3bc43e838a590b6ef2c2e0383ad6c85ecc4b58 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/check/InclusiveNJets_InclusiveJets_fix.wrm @@ -0,0 +1,386 @@ +# --- Use emacs in sh mode -*-sh-*- # +# This is a automatically generated file by fastNLO and holds the values of the warmup run. +# The values are valid for the scenario InclusiveJets_Example_v23_fix_ref +# and if calculated with the steerfile: InclusiveNJets +# but only if no serious changes have been performed since its creation. +# +# Delete this file, if you want fastNLO to calculate a new one. +# +# This file has been calculated using: +# 1e+09 contributions. +# 12962320896 entries. +# ( Mind: contributions != events. And contributions are not necessarily in phase space region. +# Please check by eye for reasonability of the values. +# Number of events per bin are listed below. + +Warmup.OrderInAlphasOfWarmupRunWas 2 +Warmup.CheckScaleLimitsAgainstBins true +Warmup.ScaleDescriptionScale1 "pT_jet_[GeV]" +Warmup.DifferentialDimension 2 +Warmup.DimensionLabels { + "|y|" "pT_[GeV]" +} +Warmup.DimensionIsDifferential { + "2" "2" +} + +Warmup.Values {{ + ObsBin x_min x_max pT_jet_[GeV]_min pT_jet_[GeV]_max + 0 1.0e-09 1.00e+00 18.000000 21.000000 + 1 1.0e-09 1.00e+00 21.000000 24.000000 + 2 1.0e-09 1.00e+00 24.000000 28.000000 + 3 1.0e-09 1.00e+00 28.000000 32.000000 + 4 1.0e-09 1.00e+00 32.000000 37.000000 + 5 1.0e-09 1.00e+00 37.000000 43.000000 + 6 1.0e-09 1.00e+00 43.000000 49.000000 + 7 1.0e-09 1.00e+00 49.000000 56.000000 + 8 1.0e-09 1.00e+00 56.000000 64.000000 + 9 1.0e-09 1.00e+00 64.000000 74.000000 + 10 1.0e-09 1.00e+00 74.000000 84.000000 + 11 1.0e-09 1.00e+00 84.000000 97.000000 + 12 1.0e-09 1.00e+00 97.000000 114.000000 + 13 1.0e-09 1.00e+00 114.000000 133.000000 + 14 1.0e-09 1.00e+00 133.000000 153.000000 + 15 1.0e-09 1.00e+00 153.000000 174.000000 + 16 1.0e-09 1.00e+00 174.000000 196.000000 + 17 1.0e-09 1.00e+00 196.000000 220.000000 + 18 1.0e-09 1.00e+00 220.000000 245.000000 + 19 1.0e-09 1.00e+00 245.000000 272.000000 + 20 1.0e-09 1.00e+00 272.000000 300.000000 + 21 1.0e-09 1.00e+00 300.000000 330.000000 + 22 1.0e-09 1.00e+00 330.000000 362.000000 + 23 1.0e-09 1.00e+00 362.000000 395.000000 + 24 1.0e-09 1.00e+00 395.000000 430.000000 + 25 1.0e-09 1.00e+00 430.000000 468.000000 + 26 1.0e-09 1.00e+00 468.000000 507.000000 + 27 1.0e-09 1.00e+00 507.000000 548.000000 + 28 1.0e-09 1.00e+00 548.000000 592.000000 + 29 1.0e-09 1.00e+00 592.000000 638.000000 + 30 1.0e-09 1.00e+00 638.000000 686.000000 + 31 1.0e-09 1.00e+00 686.000000 737.000000 + 32 1.0e-09 1.00e+00 737.000000 846.000000 + 33 1.0e-09 1.00e+00 846.000000 1684.000000 + 34 1.0e-09 1.00e+00 18.000000 21.000000 + 35 1.0e-09 1.00e+00 21.000000 24.000000 + 36 1.0e-09 1.00e+00 24.000000 28.000000 + 37 1.0e-09 1.00e+00 28.000000 32.000000 + 38 1.0e-09 1.00e+00 32.000000 37.000000 + 39 1.0e-09 1.00e+00 37.000000 43.000000 + 40 1.0e-09 1.00e+00 43.000000 49.000000 + 41 1.0e-09 1.00e+00 49.000000 56.000000 + 42 1.0e-09 1.00e+00 56.000000 64.000000 + 43 1.0e-09 1.00e+00 64.000000 74.000000 + 44 1.0e-09 1.00e+00 74.000000 84.000000 + 45 1.0e-09 1.00e+00 84.000000 97.000000 + 46 1.0e-09 1.00e+00 97.000000 114.000000 + 47 1.0e-09 1.00e+00 114.000000 133.000000 + 48 1.0e-09 1.00e+00 133.000000 153.000000 + 49 1.0e-09 1.00e+00 153.000000 174.000000 + 50 1.0e-09 1.00e+00 174.000000 196.000000 + 51 1.0e-09 1.00e+00 196.000000 220.000000 + 52 1.0e-09 1.00e+00 220.000000 245.000000 + 53 1.0e-09 1.00e+00 245.000000 272.000000 + 54 1.0e-09 1.00e+00 272.000000 300.000000 + 55 1.0e-09 1.00e+00 300.000000 330.000000 + 56 1.0e-09 1.00e+00 330.000000 362.000000 + 57 1.0e-09 1.00e+00 362.000000 395.000000 + 58 1.0e-09 1.00e+00 395.000000 430.000000 + 59 1.0e-09 1.00e+00 430.000000 468.000000 + 60 1.0e-09 1.00e+00 468.000000 507.000000 + 61 1.0e-09 1.00e+00 507.000000 548.000000 + 62 1.0e-09 1.00e+00 548.000000 592.000000 + 63 1.0e-09 1.00e+00 592.000000 638.000000 + 64 1.0e-09 1.00e+00 638.000000 686.000000 + 65 1.0e-09 1.00e+00 686.000000 790.000000 + 66 1.0e-09 1.00e+00 790.000000 1684.000000 + 67 1.0e-09 1.00e+00 18.000000 21.000000 + 68 1.0e-09 1.00e+00 21.000000 24.000000 + 69 1.0e-09 1.00e+00 24.000000 28.000000 + 70 1.0e-09 1.00e+00 28.000000 32.000000 + 71 1.0e-09 1.00e+00 32.000000 37.000000 + 72 1.0e-09 1.00e+00 37.000000 43.000000 + 73 1.0e-09 1.00e+00 43.000000 49.000000 + 74 1.0e-09 1.00e+00 49.000000 56.000000 + 75 1.0e-09 1.00e+00 56.000000 64.000000 + 76 1.0e-09 1.00e+00 64.000000 74.000000 + 77 1.0e-09 1.00e+00 74.000000 84.000000 + 78 1.0e-09 1.00e+00 84.000000 97.000000 + 79 1.0e-09 1.00e+00 97.000000 114.000000 + 80 1.0e-09 1.00e+00 114.000000 133.000000 + 81 1.0e-09 1.00e+00 133.000000 153.000000 + 82 1.0e-09 1.00e+00 153.000000 174.000000 + 83 1.0e-09 1.00e+00 174.000000 196.000000 + 84 1.0e-09 1.00e+00 196.000000 220.000000 + 85 1.0e-09 1.00e+00 220.000000 245.000000 + 86 1.0e-09 1.00e+00 245.000000 272.000000 + 87 1.0e-09 1.00e+00 272.000000 300.000000 + 88 1.0e-09 1.00e+00 300.000000 330.000000 + 89 1.0e-09 1.00e+00 330.000000 362.000000 + 90 1.0e-09 1.00e+00 362.000000 395.000000 + 91 1.0e-09 1.00e+00 395.000000 430.000000 + 92 1.0e-09 1.00e+00 430.000000 468.000000 + 93 1.0e-09 1.00e+00 468.000000 507.000000 + 94 1.0e-09 1.00e+00 507.000000 548.000000 + 95 1.0e-09 1.00e+00 548.000000 592.000000 + 96 1.0e-09 1.00e+00 592.000000 638.000000 + 97 1.0e-09 1.00e+00 638.000000 686.000000 + 98 1.0e-09 1.00e+00 686.000000 1410.000000 + 99 1.0e-09 1.00e+00 18.000000 21.000000 + 100 1.0e-09 1.00e+00 21.000000 24.000000 + 101 1.0e-09 1.00e+00 24.000000 28.000000 + 102 1.0e-09 1.00e+00 28.000000 32.000000 + 103 1.0e-09 1.00e+00 32.000000 37.000000 + 104 1.0e-09 1.00e+00 37.000000 43.000000 + 105 1.0e-09 1.00e+00 43.000000 49.000000 + 106 1.0e-09 1.00e+00 49.000000 56.000000 + 107 1.0e-09 1.00e+00 56.000000 64.000000 + 108 1.0e-09 1.00e+00 64.000000 74.000000 + 109 1.0e-09 1.00e+00 74.000000 84.000000 + 110 1.0e-09 1.00e+00 84.000000 97.000000 + 111 1.0e-09 1.00e+00 97.000000 114.000000 + 112 1.0e-09 1.00e+00 114.000000 133.000000 + 113 1.0e-09 1.00e+00 133.000000 153.000000 + 114 1.0e-09 1.00e+00 153.000000 174.000000 + 115 1.0e-09 1.00e+00 174.000000 196.000000 + 116 1.0e-09 1.00e+00 196.000000 220.000000 + 117 1.0e-09 1.00e+00 220.000000 245.000000 + 118 1.0e-09 1.00e+00 245.000000 272.000000 + 119 1.0e-09 1.00e+00 272.000000 300.000000 + 120 1.0e-09 1.00e+00 300.000000 330.000000 + 121 1.0e-09 1.00e+00 330.000000 362.000000 + 122 1.0e-09 1.00e+00 362.000000 395.000000 + 123 1.0e-09 1.00e+00 395.000000 430.000000 + 124 1.0e-09 1.00e+00 430.000000 468.000000 + 125 1.0e-09 1.00e+00 468.000000 507.000000 + 126 1.0e-09 1.00e+00 507.000000 548.000000 + 127 1.0e-09 1.00e+00 548.000000 1032.000000 + 128 1.0e-09 1.00e+00 18.000000 21.000000 + 129 1.0e-09 1.00e+00 21.000000 24.000000 + 130 1.0e-09 1.00e+00 24.000000 28.000000 + 131 1.0e-09 1.00e+00 28.000000 32.000000 + 132 1.0e-09 1.00e+00 32.000000 37.000000 + 133 1.0e-09 1.00e+00 37.000000 43.000000 + 134 1.0e-09 1.00e+00 43.000000 49.000000 + 135 1.0e-09 1.00e+00 49.000000 56.000000 + 136 1.0e-09 1.00e+00 56.000000 64.000000 + 137 1.0e-09 1.00e+00 64.000000 74.000000 + 138 1.0e-09 1.00e+00 74.000000 84.000000 + 139 1.0e-09 1.00e+00 84.000000 97.000000 + 140 1.0e-09 1.00e+00 97.000000 114.000000 + 141 1.0e-09 1.00e+00 114.000000 133.000000 + 142 1.0e-09 1.00e+00 133.000000 153.000000 + 143 1.0e-09 1.00e+00 153.000000 174.000000 + 144 1.0e-09 1.00e+00 174.000000 196.000000 + 145 1.0e-09 1.00e+00 196.000000 220.000000 + 146 1.0e-09 1.00e+00 220.000000 245.000000 + 147 1.0e-09 1.00e+00 245.000000 272.000000 + 148 1.0e-09 1.00e+00 272.000000 300.000000 + 149 1.0e-09 1.00e+00 300.000000 330.000000 + 150 1.0e-09 1.00e+00 330.000000 362.000000 + 151 1.0e-09 1.00e+00 362.000000 395.000000 + 152 1.0e-09 1.00e+00 395.000000 430.000000 + 153 1.0e-09 1.00e+00 430.000000 737.000000 + 154 1.0e-09 1.00e+00 18.000000 21.000000 + 155 1.0e-09 1.00e+00 21.000000 24.000000 + 156 1.0e-09 1.00e+00 24.000000 28.000000 + 157 1.0e-09 1.00e+00 28.000000 32.000000 + 158 1.0e-09 1.00e+00 32.000000 37.000000 + 159 1.0e-09 1.00e+00 37.000000 43.000000 + 160 1.0e-09 1.00e+00 43.000000 49.000000 + 161 1.0e-09 1.00e+00 49.000000 56.000000 + 162 1.0e-09 1.00e+00 56.000000 64.000000 + 163 1.0e-09 1.00e+00 64.000000 74.000000 + 164 1.0e-09 1.00e+00 74.000000 84.000000 + 165 1.0e-09 1.00e+00 84.000000 97.000000 + 166 1.0e-09 1.00e+00 97.000000 114.000000 + 167 1.0e-09 1.00e+00 114.000000 133.000000 + 168 1.0e-09 1.00e+00 133.000000 153.000000 + 169 1.0e-09 1.00e+00 153.000000 174.000000 + 170 1.0e-09 1.00e+00 174.000000 196.000000 + 171 1.0e-09 1.00e+00 196.000000 220.000000 + 172 1.0e-09 1.00e+00 220.000000 245.000000 + 173 1.0e-09 1.00e+00 245.000000 272.000000 + 174 1.0e-09 1.00e+00 272.000000 300.000000 + 175 1.0e-09 1.00e+00 300.000000 468.000000 +}} + + +Warmup.Binning {{ + ObsBin |y|_Lo |y|_Up pT_[GeV]_Lo pT_[GeV]_Up BinSize EventCount + 0 0.00000 0.500000 18.0000 21.0000 3.00000 3244885 + 1 0.00000 0.500000 21.0000 24.0000 3.00000 3509086 + 2 0.00000 0.500000 24.0000 28.0000 4.00000 5089791 + 3 0.00000 0.500000 28.0000 32.0000 4.00000 5578139 + 4 0.00000 0.500000 32.0000 37.0000 5.00000 13849486 + 5 0.00000 0.500000 37.0000 43.0000 6.00000 42220087 + 6 0.00000 0.500000 43.0000 49.0000 6.00000 63797111 + 7 0.00000 0.500000 49.0000 56.0000 7.00000 89607455 + 8 0.00000 0.500000 56.0000 64.0000 8.00000 111378666 + 9 0.00000 0.500000 64.0000 74.0000 10.0000 142213393 + 10 0.00000 0.500000 74.0000 84.0000 10.0000 138600203 + 11 0.00000 0.500000 84.0000 97.0000 13.0000 168761621 + 12 0.00000 0.500000 97.0000 114.000 17.0000 196475552 + 13 0.00000 0.500000 114.000 133.000 19.0000 187801775 + 14 0.00000 0.500000 133.000 153.000 20.0000 169574713 + 15 0.00000 0.500000 153.000 174.000 21.0000 154746214 + 16 0.00000 0.500000 174.000 196.000 22.0000 142317245 + 17 0.00000 0.500000 196.000 220.000 24.0000 137085599 + 18 0.00000 0.500000 220.000 245.000 25.0000 126718578 + 19 0.00000 0.500000 245.000 272.000 27.0000 122031084 + 20 0.00000 0.500000 272.000 300.000 28.0000 113359687 + 21 0.00000 0.500000 300.000 330.000 30.0000 109234608 + 22 0.00000 0.500000 330.000 362.000 32.0000 104985678 + 23 0.00000 0.500000 362.000 395.000 33.0000 97925128 + 24 0.00000 0.500000 395.000 430.000 35.0000 94194296 + 25 0.00000 0.500000 430.000 468.000 38.0000 92800792 + 26 0.00000 0.500000 468.000 507.000 39.0000 86523591 + 27 0.00000 0.500000 507.000 548.000 41.0000 82887126 + 28 0.00000 0.500000 548.000 592.000 44.0000 81112535 + 29 0.00000 0.500000 592.000 638.000 46.0000 77302834 + 30 0.00000 0.500000 638.000 686.000 48.0000 73685892 + 31 0.00000 0.500000 686.000 737.000 51.0000 71466808 + 32 0.00000 0.500000 737.000 846.000 109.000 133404502 + 33 0.00000 0.500000 846.000 1684.00 838.000 555151128 + 34 0.500000 1.00000 18.0000 21.0000 3.00000 3652418 + 35 0.500000 1.00000 21.0000 24.0000 3.00000 4121614 + 36 0.500000 1.00000 24.0000 28.0000 4.00000 10869243 + 37 0.500000 1.00000 28.0000 32.0000 4.00000 21632310 + 38 0.500000 1.00000 32.0000 37.0000 5.00000 39926467 + 39 0.500000 1.00000 37.0000 43.0000 6.00000 54958708 + 40 0.500000 1.00000 43.0000 49.0000 6.00000 55178704 + 41 0.500000 1.00000 49.0000 56.0000 7.00000 63711732 + 42 0.500000 1.00000 56.0000 64.0000 8.00000 72031890 + 43 0.500000 1.00000 64.0000 74.0000 10.0000 89189226 + 44 0.500000 1.00000 74.0000 84.0000 10.0000 88320155 + 45 0.500000 1.00000 84.0000 97.0000 13.0000 113800743 + 46 0.500000 1.00000 97.0000 114.000 17.0000 147458304 + 47 0.500000 1.00000 114.000 133.000 19.0000 161287756 + 48 0.500000 1.00000 133.000 153.000 20.0000 159145063 + 49 0.500000 1.00000 153.000 174.000 21.0000 151362484 + 50 0.500000 1.00000 174.000 196.000 22.0000 140190638 + 51 0.500000 1.00000 196.000 220.000 24.0000 134795983 + 52 0.500000 1.00000 220.000 245.000 25.0000 124324263 + 53 0.500000 1.00000 245.000 272.000 27.0000 119533099 + 54 0.500000 1.00000 272.000 300.000 28.0000 110665919 + 55 0.500000 1.00000 300.000 330.000 30.0000 106354192 + 56 0.500000 1.00000 330.000 362.000 32.0000 101883684 + 57 0.500000 1.00000 362.000 395.000 33.0000 94775793 + 58 0.500000 1.00000 395.000 430.000 35.0000 90787466 + 59 0.500000 1.00000 430.000 468.000 38.0000 89137881 + 60 0.500000 1.00000 468.000 507.000 39.0000 82816426 + 61 0.500000 1.00000 507.000 548.000 41.0000 78978655 + 62 0.500000 1.00000 548.000 592.000 44.0000 76859111 + 63 0.500000 1.00000 592.000 638.000 46.0000 72925993 + 64 0.500000 1.00000 638.000 686.000 48.0000 69029065 + 65 0.500000 1.00000 686.000 790.000 104.000 129318756 + 66 0.500000 1.00000 790.000 1684.00 894.000 534602418 + 67 1.00000 1.50000 18.0000 21.0000 3.00000 11359250 + 68 1.00000 1.50000 21.0000 24.0000 3.00000 16241652 + 69 1.00000 1.50000 24.0000 28.0000 4.00000 24808483 + 70 1.00000 1.50000 28.0000 32.0000 4.00000 24478552 + 71 1.00000 1.50000 32.0000 37.0000 5.00000 30146578 + 72 1.00000 1.50000 37.0000 43.0000 6.00000 35559468 + 73 1.00000 1.50000 43.0000 49.0000 6.00000 35040411 + 74 1.00000 1.50000 49.0000 56.0000 7.00000 40339229 + 75 1.00000 1.50000 56.0000 64.0000 8.00000 45514427 + 76 1.00000 1.50000 64.0000 74.0000 10.0000 56121821 + 77 1.00000 1.50000 74.0000 84.0000 10.0000 55474552 + 78 1.00000 1.50000 84.0000 97.0000 13.0000 71379882 + 79 1.00000 1.50000 97.0000 114.000 17.0000 92203391 + 80 1.00000 1.50000 114.000 133.000 19.0000 101887345 + 81 1.00000 1.50000 133.000 153.000 20.0000 106140790 + 82 1.00000 1.50000 153.000 174.000 21.0000 110465635 + 83 1.00000 1.50000 174.000 196.000 22.0000 114440872 + 84 1.00000 1.50000 196.000 220.000 24.0000 120024289 + 85 1.00000 1.50000 220.000 245.000 25.0000 116193861 + 86 1.00000 1.50000 245.000 272.000 27.0000 113484315 + 87 1.00000 1.50000 272.000 300.000 28.0000 104595897 + 88 1.00000 1.50000 300.000 330.000 30.0000 99818012 + 89 1.00000 1.50000 330.000 362.000 32.0000 94984358 + 90 1.00000 1.50000 362.000 395.000 33.0000 87580339 + 91 1.00000 1.50000 395.000 430.000 35.0000 83217708 + 92 1.00000 1.50000 430.000 468.000 38.0000 80954958 + 93 1.00000 1.50000 468.000 507.000 39.0000 74328961 + 94 1.00000 1.50000 507.000 548.000 41.0000 70068754 + 95 1.00000 1.50000 548.000 592.000 44.0000 67359915 + 96 1.00000 1.50000 592.000 638.000 46.0000 62922713 + 97 1.00000 1.50000 638.000 686.000 48.0000 58677829 + 98 1.00000 1.50000 686.000 1410.00 724.000 412025222 + 99 1.50000 2.00000 18.0000 21.0000 3.00000 12728744 + 100 1.50000 2.00000 21.0000 24.0000 3.00000 12423418 + 101 1.50000 2.00000 24.0000 28.0000 4.00000 16214380 + 102 1.50000 2.00000 28.0000 32.0000 4.00000 15861020 + 103 1.50000 2.00000 32.0000 37.0000 5.00000 19408144 + 104 1.50000 2.00000 37.0000 43.0000 6.00000 22853397 + 105 1.50000 2.00000 43.0000 49.0000 6.00000 22425802 + 106 1.50000 2.00000 49.0000 56.0000 7.00000 25707941 + 107 1.50000 2.00000 56.0000 64.0000 8.00000 28978887 + 108 1.50000 2.00000 64.0000 74.0000 10.0000 35647619 + 109 1.50000 2.00000 74.0000 84.0000 10.0000 35133084 + 110 1.50000 2.00000 84.0000 97.0000 13.0000 45000130 + 111 1.50000 2.00000 97.0000 114.000 17.0000 57979131 + 112 1.50000 2.00000 114.000 133.000 19.0000 63884730 + 113 1.50000 2.00000 133.000 153.000 20.0000 66388812 + 114 1.50000 2.00000 153.000 174.000 21.0000 68976530 + 115 1.50000 2.00000 174.000 196.000 22.0000 71512518 + 116 1.50000 2.00000 196.000 220.000 24.0000 77389235 + 117 1.50000 2.00000 220.000 245.000 25.0000 79905868 + 118 1.50000 2.00000 245.000 272.000 27.0000 85600669 + 119 1.50000 2.00000 272.000 300.000 28.0000 86526419 + 120 1.50000 2.00000 300.000 330.000 30.0000 86624748 + 121 1.50000 2.00000 330.000 362.000 32.0000 82373851 + 122 1.50000 2.00000 362.000 395.000 33.0000 74632103 + 123 1.50000 2.00000 395.000 430.000 35.0000 69485661 + 124 1.50000 2.00000 430.000 468.000 38.0000 66043047 + 125 1.50000 2.00000 468.000 507.000 39.0000 59062346 + 126 1.50000 2.00000 507.000 548.000 41.0000 53929043 + 127 1.50000 2.00000 548.000 1032.00 484.000 277256812 + 128 2.00000 2.50000 18.0000 21.0000 3.00000 8446858 + 129 2.00000 2.50000 21.0000 24.0000 3.00000 8203545 + 130 2.00000 2.50000 24.0000 28.0000 4.00000 10645292 + 131 2.00000 2.50000 28.0000 32.0000 4.00000 10380489 + 132 2.00000 2.50000 32.0000 37.0000 5.00000 12652584 + 133 2.00000 2.50000 37.0000 43.0000 6.00000 14817859 + 134 2.00000 2.50000 43.0000 49.0000 6.00000 14486416 + 135 2.00000 2.50000 49.0000 56.0000 7.00000 16570393 + 136 2.00000 2.50000 56.0000 64.0000 8.00000 18575046 + 137 2.00000 2.50000 64.0000 74.0000 10.0000 22788563 + 138 2.00000 2.50000 74.0000 84.0000 10.0000 22357286 + 139 2.00000 2.50000 84.0000 97.0000 13.0000 28559405 + 140 2.00000 2.50000 97.0000 114.000 17.0000 36634892 + 141 2.00000 2.50000 114.000 133.000 19.0000 40209204 + 142 2.00000 2.50000 133.000 153.000 20.0000 41636119 + 143 2.00000 2.50000 153.000 174.000 21.0000 43092427 + 144 2.00000 2.50000 174.000 196.000 22.0000 44605666 + 145 2.00000 2.50000 196.000 220.000 24.0000 48055329 + 146 2.00000 2.50000 220.000 245.000 25.0000 49464863 + 147 2.00000 2.50000 245.000 272.000 27.0000 52872778 + 148 2.00000 2.50000 272.000 300.000 28.0000 54323871 + 149 2.00000 2.50000 300.000 330.000 30.0000 57670655 + 150 2.00000 2.50000 330.000 362.000 32.0000 59613575 + 151 2.00000 2.50000 362.000 395.000 33.0000 52548181 + 152 2.00000 2.50000 395.000 430.000 35.0000 46075141 + 153 2.00000 2.50000 430.000 737.000 307.000 151430405 + 154 2.50000 3.00000 18.0000 21.0000 3.00000 5656238 + 155 2.50000 3.00000 21.0000 24.0000 3.00000 5485445 + 156 2.50000 3.00000 24.0000 28.0000 4.00000 7081781 + 157 2.50000 3.00000 28.0000 32.0000 4.00000 6863745 + 158 2.50000 3.00000 32.0000 37.0000 5.00000 8337637 + 159 2.50000 3.00000 37.0000 43.0000 6.00000 9712710 + 160 2.50000 3.00000 43.0000 49.0000 6.00000 9449307 + 161 2.50000 3.00000 49.0000 56.0000 7.00000 10749788 + 162 2.50000 3.00000 56.0000 64.0000 8.00000 11987227 + 163 2.50000 3.00000 64.0000 74.0000 10.0000 14638834 + 164 2.50000 3.00000 74.0000 84.0000 10.0000 14286650 + 165 2.50000 3.00000 84.0000 97.0000 13.0000 18191222 + 166 2.50000 3.00000 97.0000 114.000 17.0000 23206827 + 167 2.50000 3.00000 114.000 133.000 19.0000 25287087 + 168 2.50000 3.00000 133.000 153.000 20.0000 26054749 + 169 2.50000 3.00000 153.000 174.000 21.0000 26825953 + 170 2.50000 3.00000 174.000 196.000 22.0000 27583745 + 171 2.50000 3.00000 196.000 220.000 24.0000 29590589 + 172 2.50000 3.00000 220.000 245.000 25.0000 30301929 + 173 2.50000 3.00000 245.000 272.000 27.0000 32195240 + 174 2.50000 3.00000 272.000 300.000 28.0000 32609430 + 175 2.50000 3.00000 300.000 468.000 168.000 89452916 +}} diff --git a/v2.6/generators/nlojet++/interface/data/check/InclusiveNJets_InclusiveJets_flex.wrm b/v2.6/generators/nlojet++/interface/data/check/InclusiveNJets_InclusiveJets_flex.wrm new file mode 100644 index 0000000000000000000000000000000000000000..7c489b9b4009e8fca7d5d9d54c6e97a89f0a26d5 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/check/InclusiveNJets_InclusiveJets_flex.wrm @@ -0,0 +1,387 @@ +# --- Use emacs in sh mode -*-sh-*- # +# This is a automatically generated file by fastNLO and holds the values of the warmup run. +# The values are valid for the scenario InclusiveJets_flex +# and if calculated with the steerfile: InclusiveNJets +# but only if no serious changes have been performed since its creation. +# +# Delete this file, if you want fastNLO to calculate a new one. +# +# This file has been calculated using: +# 100000 contributions. +# 1296561 entries. +# ( Mind: contributions != events. And contributions are not necessarily in phase space region. +# Please check by eye for reasonability of the values. +# Number of events per bin are listed below. + +Warmup.OrderInAlphasOfWarmupRunWas 2 +Warmup.CheckScaleLimitsAgainstBins true +Warmup.ScaleDescriptionScale1 "pT_jet_[GeV]" +Warmup.ScaleDescriptionScale2 "pT_max_[GeV]" +Warmup.DifferentialDimension 2 +Warmup.DimensionLabels { + "|y|" "pT_[GeV]" +} +Warmup.DimensionIsDifferential { + "2" "2" +} + +Warmup.Values {{ + ObsBin x_min x_max pT_jet_[GeV]_min pT_jet_[GeV]_max pT_max_[GeV]_min pT_max_[GeV]_max + 0 1.0e-09 1.00e+00 18.000000 21.000000 18.000000 21.000000 + 1 1.0e-09 1.00e+00 21.000000 24.000000 21.000000 24.000000 + 2 1.0e-09 1.00e+00 24.000000 28.000000 24.000000 28.000000 + 3 1.0e-09 1.00e+00 28.000000 32.000000 28.000000 32.000000 + 4 1.0e-09 1.00e+00 32.000000 37.000000 32.000000 37.000000 + 5 1.0e-09 1.00e+00 37.000000 43.000000 37.000000 43.000000 + 6 1.0e-09 1.00e+00 43.000000 49.000000 43.000000 49.000000 + 7 1.0e-09 1.00e+00 49.000000 56.000000 49.000000 56.000000 + 8 1.0e-09 1.00e+00 56.000000 64.000000 56.000000 64.000000 + 9 1.0e-09 1.00e+00 64.000000 74.000000 64.000000 74.000000 + 10 1.0e-09 1.00e+00 74.000000 84.000000 74.000000 84.000000 + 11 1.0e-09 1.00e+00 84.000000 97.000000 84.000000 97.000000 + 12 1.0e-09 1.00e+00 97.000000 114.000000 97.000000 114.000000 + 13 1.0e-09 1.00e+00 114.000000 133.000000 114.000000 133.000000 + 14 1.0e-09 1.00e+00 133.000000 153.000000 133.000000 153.000000 + 15 1.0e-09 1.00e+00 153.000000 174.000000 153.000000 174.000000 + 16 1.0e-09 1.00e+00 174.000000 196.000000 174.000000 196.000000 + 17 1.0e-09 1.00e+00 196.000000 220.000000 196.000000 220.000000 + 18 1.0e-09 1.00e+00 220.000000 245.000000 220.000000 245.000000 + 19 1.0e-09 1.00e+00 245.000000 272.000000 245.000000 272.000000 + 20 1.0e-09 1.00e+00 272.000000 300.000000 272.000000 300.000000 + 21 1.0e-09 1.00e+00 300.000000 330.000000 300.000000 330.000000 + 22 1.0e-09 1.00e+00 330.000000 362.000000 330.000000 362.000000 + 23 1.0e-09 1.00e+00 362.000000 395.000000 362.000000 395.000000 + 24 1.0e-09 1.00e+00 395.000000 430.000000 395.000000 430.000000 + 25 1.0e-09 1.00e+00 430.000000 468.000000 430.000000 468.000000 + 26 1.0e-09 1.00e+00 468.000000 507.000000 468.000000 507.000000 + 27 1.0e-09 1.00e+00 507.000000 548.000000 507.000000 548.000000 + 28 1.0e-09 1.00e+00 548.000000 592.000000 548.000000 592.000000 + 29 1.0e-09 1.00e+00 592.000000 638.000000 592.000000 638.000000 + 30 1.0e-09 1.00e+00 638.000000 686.000000 638.000000 686.000000 + 31 1.0e-09 1.00e+00 686.000000 737.000000 686.000000 737.000000 + 32 1.0e-09 1.00e+00 737.000000 846.000000 737.000000 846.000000 + 33 1.0e-09 1.00e+00 846.000000 1684.000000 846.000000 1684.000000 + 34 1.0e-09 1.00e+00 18.000000 21.000000 18.000000 21.000000 + 35 1.0e-09 1.00e+00 21.000000 24.000000 21.000000 24.000000 + 36 1.0e-09 1.00e+00 24.000000 28.000000 24.000000 28.000000 + 37 1.0e-09 1.00e+00 28.000000 32.000000 28.000000 32.000000 + 38 1.0e-09 1.00e+00 32.000000 37.000000 32.000000 37.000000 + 39 1.0e-09 1.00e+00 37.000000 43.000000 37.000000 43.000000 + 40 1.0e-09 1.00e+00 43.000000 49.000000 43.000000 49.000000 + 41 1.0e-09 1.00e+00 49.000000 56.000000 49.000000 56.000000 + 42 1.0e-09 1.00e+00 56.000000 64.000000 56.000000 64.000000 + 43 1.0e-09 1.00e+00 64.000000 74.000000 64.000000 74.000000 + 44 1.0e-09 1.00e+00 74.000000 84.000000 74.000000 84.000000 + 45 1.0e-09 1.00e+00 84.000000 97.000000 84.000000 97.000000 + 46 1.0e-09 1.00e+00 97.000000 114.000000 97.000000 114.000000 + 47 1.0e-09 1.00e+00 114.000000 133.000000 114.000000 133.000000 + 48 1.0e-09 1.00e+00 133.000000 153.000000 133.000000 153.000000 + 49 1.0e-09 1.00e+00 153.000000 174.000000 153.000000 174.000000 + 50 1.0e-09 1.00e+00 174.000000 196.000000 174.000000 196.000000 + 51 1.0e-09 1.00e+00 196.000000 220.000000 196.000000 220.000000 + 52 1.0e-09 1.00e+00 220.000000 245.000000 220.000000 245.000000 + 53 1.0e-09 1.00e+00 245.000000 272.000000 245.000000 272.000000 + 54 1.0e-09 1.00e+00 272.000000 300.000000 272.000000 300.000000 + 55 1.0e-09 1.00e+00 300.000000 330.000000 300.000000 330.000000 + 56 1.0e-09 1.00e+00 330.000000 362.000000 330.000000 362.000000 + 57 1.0e-09 1.00e+00 362.000000 395.000000 362.000000 395.000000 + 58 1.0e-09 1.00e+00 395.000000 430.000000 395.000000 430.000000 + 59 1.0e-09 1.00e+00 430.000000 468.000000 430.000000 468.000000 + 60 1.0e-09 1.00e+00 468.000000 507.000000 468.000000 507.000000 + 61 1.0e-09 1.00e+00 507.000000 548.000000 507.000000 548.000000 + 62 1.0e-09 1.00e+00 548.000000 592.000000 548.000000 592.000000 + 63 1.0e-09 1.00e+00 592.000000 638.000000 592.000000 638.000000 + 64 1.0e-09 1.00e+00 638.000000 686.000000 638.000000 686.000000 + 65 1.0e-09 1.00e+00 686.000000 790.000000 686.000000 790.000000 + 66 1.0e-09 1.00e+00 790.000000 1684.000000 790.000000 1684.000000 + 67 1.0e-09 1.00e+00 18.000000 21.000000 18.000000 21.000000 + 68 1.0e-09 1.00e+00 21.000000 24.000000 21.000000 24.000000 + 69 1.0e-09 1.00e+00 24.000000 28.000000 24.000000 28.000000 + 70 1.0e-09 1.00e+00 28.000000 32.000000 28.000000 32.000000 + 71 1.0e-09 1.00e+00 32.000000 37.000000 32.000000 37.000000 + 72 1.0e-09 1.00e+00 37.000000 43.000000 37.000000 43.000000 + 73 1.0e-09 1.00e+00 43.000000 49.000000 43.000000 49.000000 + 74 1.0e-09 1.00e+00 49.000000 56.000000 49.000000 56.000000 + 75 1.0e-09 1.00e+00 56.000000 64.000000 56.000000 64.000000 + 76 1.0e-09 1.00e+00 64.000000 74.000000 64.000000 74.000000 + 77 1.0e-09 1.00e+00 74.000000 84.000000 74.000000 84.000000 + 78 1.0e-09 1.00e+00 84.000000 97.000000 84.000000 97.000000 + 79 1.0e-09 1.00e+00 97.000000 114.000000 97.000000 114.000000 + 80 1.0e-09 1.00e+00 114.000000 133.000000 114.000000 133.000000 + 81 1.0e-09 1.00e+00 133.000000 153.000000 133.000000 153.000000 + 82 1.0e-09 1.00e+00 153.000000 174.000000 153.000000 174.000000 + 83 1.0e-09 1.00e+00 174.000000 196.000000 174.000000 196.000000 + 84 1.0e-09 1.00e+00 196.000000 220.000000 196.000000 220.000000 + 85 1.0e-09 1.00e+00 220.000000 245.000000 220.000000 245.000000 + 86 1.0e-09 1.00e+00 245.000000 272.000000 245.000000 272.000000 + 87 1.0e-09 1.00e+00 272.000000 300.000000 272.000000 300.000000 + 88 1.0e-09 1.00e+00 300.000000 330.000000 300.000000 330.000000 + 89 1.0e-09 1.00e+00 330.000000 362.000000 330.000000 362.000000 + 90 1.0e-09 1.00e+00 362.000000 395.000000 362.000000 395.000000 + 91 1.0e-09 1.00e+00 395.000000 430.000000 395.000000 430.000000 + 92 1.0e-09 1.00e+00 430.000000 468.000000 430.000000 468.000000 + 93 1.0e-09 1.00e+00 468.000000 507.000000 468.000000 507.000000 + 94 1.0e-09 1.00e+00 507.000000 548.000000 507.000000 548.000000 + 95 1.0e-09 1.00e+00 548.000000 592.000000 548.000000 592.000000 + 96 1.0e-09 1.00e+00 592.000000 638.000000 592.000000 638.000000 + 97 1.0e-09 1.00e+00 638.000000 686.000000 638.000000 686.000000 + 98 1.0e-09 1.00e+00 686.000000 1410.000000 686.000000 1410.000000 + 99 1.0e-09 1.00e+00 18.000000 21.000000 18.000000 21.000000 + 100 1.0e-09 1.00e+00 21.000000 24.000000 21.000000 24.000000 + 101 1.0e-09 1.00e+00 24.000000 28.000000 24.000000 28.000000 + 102 1.0e-09 1.00e+00 28.000000 32.000000 28.000000 32.000000 + 103 1.0e-09 1.00e+00 32.000000 37.000000 32.000000 37.000000 + 104 1.0e-09 1.00e+00 37.000000 43.000000 37.000000 43.000000 + 105 1.0e-09 1.00e+00 43.000000 49.000000 43.000000 49.000000 + 106 1.0e-09 1.00e+00 49.000000 56.000000 49.000000 56.000000 + 107 1.0e-09 1.00e+00 56.000000 64.000000 56.000000 64.000000 + 108 1.0e-09 1.00e+00 64.000000 74.000000 64.000000 74.000000 + 109 1.0e-09 1.00e+00 74.000000 84.000000 74.000000 84.000000 + 110 1.0e-09 1.00e+00 84.000000 97.000000 84.000000 97.000000 + 111 1.0e-09 1.00e+00 97.000000 114.000000 97.000000 114.000000 + 112 1.0e-09 1.00e+00 114.000000 133.000000 114.000000 133.000000 + 113 1.0e-09 1.00e+00 133.000000 153.000000 133.000000 153.000000 + 114 1.0e-09 1.00e+00 153.000000 174.000000 153.000000 174.000000 + 115 1.0e-09 1.00e+00 174.000000 196.000000 174.000000 196.000000 + 116 1.0e-09 1.00e+00 196.000000 220.000000 196.000000 220.000000 + 117 1.0e-09 1.00e+00 220.000000 245.000000 220.000000 245.000000 + 118 1.0e-09 1.00e+00 245.000000 272.000000 245.000000 272.000000 + 119 1.0e-09 1.00e+00 272.000000 300.000000 272.000000 300.000000 + 120 1.0e-09 1.00e+00 300.000000 330.000000 300.000000 330.000000 + 121 1.0e-09 1.00e+00 330.000000 362.000000 330.000000 362.000000 + 122 1.0e-09 1.00e+00 362.000000 395.000000 362.000000 395.000000 + 123 1.0e-09 1.00e+00 395.000000 430.000000 395.000000 430.000000 + 124 1.0e-09 1.00e+00 430.000000 468.000000 430.000000 468.000000 + 125 1.0e-09 1.00e+00 468.000000 507.000000 468.000000 507.000000 + 126 1.0e-09 1.00e+00 507.000000 548.000000 507.000000 548.000000 + 127 1.0e-09 1.00e+00 548.000000 1032.000000 548.000000 1032.000000 + 128 1.0e-09 1.00e+00 18.000000 21.000000 18.000000 21.000000 + 129 1.0e-09 1.00e+00 21.000000 24.000000 21.000000 24.000000 + 130 1.0e-09 1.00e+00 24.000000 28.000000 24.000000 28.000000 + 131 1.0e-09 1.00e+00 28.000000 32.000000 28.000000 32.000000 + 132 1.0e-09 1.00e+00 32.000000 37.000000 32.000000 37.000000 + 133 1.0e-09 1.00e+00 37.000000 43.000000 37.000000 43.000000 + 134 1.0e-09 1.00e+00 43.000000 49.000000 43.000000 49.000000 + 135 1.0e-09 1.00e+00 49.000000 56.000000 49.000000 56.000000 + 136 1.0e-09 1.00e+00 56.000000 64.000000 56.000000 64.000000 + 137 1.0e-09 1.00e+00 64.000000 74.000000 64.000000 74.000000 + 138 1.0e-09 1.00e+00 74.000000 84.000000 74.000000 84.000000 + 139 1.0e-09 1.00e+00 84.000000 97.000000 84.000000 97.000000 + 140 1.0e-09 1.00e+00 97.000000 114.000000 97.000000 114.000000 + 141 1.0e-09 1.00e+00 114.000000 133.000000 114.000000 133.000000 + 142 1.0e-09 1.00e+00 133.000000 153.000000 133.000000 153.000000 + 143 1.0e-09 1.00e+00 153.000000 174.000000 153.000000 174.000000 + 144 1.0e-09 1.00e+00 174.000000 196.000000 174.000000 196.000000 + 145 1.0e-09 1.00e+00 196.000000 220.000000 196.000000 220.000000 + 146 1.0e-09 1.00e+00 220.000000 245.000000 220.000000 245.000000 + 147 1.0e-09 1.00e+00 245.000000 272.000000 245.000000 272.000000 + 148 1.0e-09 1.00e+00 272.000000 300.000000 272.000000 300.000000 + 149 1.0e-09 1.00e+00 300.000000 330.000000 300.000000 330.000000 + 150 1.0e-09 1.00e+00 330.000000 362.000000 330.000000 362.000000 + 151 1.0e-09 1.00e+00 362.000000 395.000000 362.000000 395.000000 + 152 1.0e-09 1.00e+00 395.000000 430.000000 395.000000 430.000000 + 153 1.0e-09 1.00e+00 430.000000 737.000000 430.000000 737.000000 + 154 1.0e-09 1.00e+00 18.000000 21.000000 18.000000 21.000000 + 155 1.0e-09 1.00e+00 21.000000 24.000000 21.000000 24.000000 + 156 1.0e-09 1.00e+00 24.000000 28.000000 24.000000 28.000000 + 157 1.0e-09 1.00e+00 28.000000 32.000000 28.000000 32.000000 + 158 1.0e-09 1.00e+00 32.000000 37.000000 32.000000 37.000000 + 159 1.0e-09 1.00e+00 37.000000 43.000000 37.000000 43.000000 + 160 1.0e-09 1.00e+00 43.000000 49.000000 43.000000 49.000000 + 161 1.0e-09 1.00e+00 49.000000 56.000000 49.000000 56.000000 + 162 1.0e-09 1.00e+00 56.000000 64.000000 56.000000 64.000000 + 163 1.0e-09 1.00e+00 64.000000 74.000000 64.000000 74.000000 + 164 1.0e-09 1.00e+00 74.000000 84.000000 74.000000 84.000000 + 165 1.0e-09 1.00e+00 84.000000 97.000000 84.000000 97.000000 + 166 1.0e-09 1.00e+00 97.000000 114.000000 97.000000 114.000000 + 167 1.0e-09 1.00e+00 114.000000 133.000000 114.000000 133.000000 + 168 1.0e-09 1.00e+00 133.000000 153.000000 133.000000 153.000000 + 169 1.0e-09 1.00e+00 153.000000 174.000000 153.000000 174.000000 + 170 1.0e-09 1.00e+00 174.000000 196.000000 174.000000 196.000000 + 171 1.0e-09 1.00e+00 196.000000 220.000000 196.000000 220.000000 + 172 1.0e-09 1.00e+00 220.000000 245.000000 220.000000 245.000000 + 173 1.0e-09 1.00e+00 245.000000 272.000000 245.000000 272.000000 + 174 1.0e-09 1.00e+00 272.000000 300.000000 272.000000 300.000000 + 175 1.0e-09 1.00e+00 300.000000 468.000000 300.000000 468.000000 +}} + + +Warmup.Binning {{ + ObsBin |y|_Lo |y|_Up pT_[GeV]_Lo pT_[GeV]_Up BinSize EventCount + 0 0.00000 0.500000 18.0000 21.0000 3.00000 308 + 1 0.00000 0.500000 21.0000 24.0000 3.00000 399 + 2 0.00000 0.500000 24.0000 28.0000 4.00000 511 + 3 0.00000 0.500000 28.0000 32.0000 4.00000 609 + 4 0.00000 0.500000 32.0000 37.0000 5.00000 1463 + 5 0.00000 0.500000 37.0000 43.0000 6.00000 4291 + 6 0.00000 0.500000 43.0000 49.0000 6.00000 6615 + 7 0.00000 0.500000 49.0000 56.0000 7.00000 9079 + 8 0.00000 0.500000 56.0000 64.0000 8.00000 10969 + 9 0.00000 0.500000 64.0000 74.0000 10.0000 14035 + 10 0.00000 0.500000 74.0000 84.0000 10.0000 12929 + 11 0.00000 0.500000 84.0000 97.0000 13.0000 16940 + 12 0.00000 0.500000 97.0000 114.000 17.0000 19691 + 13 0.00000 0.500000 114.000 133.000 19.0000 18921 + 14 0.00000 0.500000 133.000 153.000 20.0000 17773 + 15 0.00000 0.500000 153.000 174.000 21.0000 16065 + 16 0.00000 0.500000 174.000 196.000 22.0000 14035 + 17 0.00000 0.500000 196.000 220.000 24.0000 14273 + 18 0.00000 0.500000 220.000 245.000 25.0000 12579 + 19 0.00000 0.500000 245.000 272.000 27.0000 12159 + 20 0.00000 0.500000 272.000 300.000 28.0000 11200 + 21 0.00000 0.500000 300.000 330.000 30.0000 10556 + 22 0.00000 0.500000 330.000 362.000 32.0000 9506 + 23 0.00000 0.500000 362.000 395.000 33.0000 10388 + 24 0.00000 0.500000 395.000 430.000 35.0000 9324 + 25 0.00000 0.500000 430.000 468.000 38.0000 8883 + 26 0.00000 0.500000 468.000 507.000 39.0000 8106 + 27 0.00000 0.500000 507.000 548.000 41.0000 8358 + 28 0.00000 0.500000 548.000 592.000 44.0000 7973 + 29 0.00000 0.500000 592.000 638.000 46.0000 7665 + 30 0.00000 0.500000 638.000 686.000 48.0000 7630 + 31 0.00000 0.500000 686.000 737.000 51.0000 7413 + 32 0.00000 0.500000 737.000 846.000 109.000 14644 + 33 0.00000 0.500000 846.000 1684.00 838.000 56553 + 34 0.500000 1.00000 18.0000 21.0000 3.00000 364 + 35 0.500000 1.00000 21.0000 24.0000 3.00000 385 + 36 0.500000 1.00000 24.0000 28.0000 4.00000 994 + 37 0.500000 1.00000 28.0000 32.0000 4.00000 2114 + 38 0.500000 1.00000 32.0000 37.0000 5.00000 3801 + 39 0.500000 1.00000 37.0000 43.0000 6.00000 5705 + 40 0.500000 1.00000 43.0000 49.0000 6.00000 5264 + 41 0.500000 1.00000 49.0000 56.0000 7.00000 6468 + 42 0.500000 1.00000 56.0000 64.0000 8.00000 7175 + 43 0.500000 1.00000 64.0000 74.0000 10.0000 8778 + 44 0.500000 1.00000 74.0000 84.0000 10.0000 8519 + 45 0.500000 1.00000 84.0000 97.0000 13.0000 11802 + 46 0.500000 1.00000 97.0000 114.000 17.0000 14868 + 47 0.500000 1.00000 114.000 133.000 19.0000 16394 + 48 0.500000 1.00000 133.000 153.000 20.0000 16247 + 49 0.500000 1.00000 153.000 174.000 21.0000 15547 + 50 0.500000 1.00000 174.000 196.000 22.0000 14203 + 51 0.500000 1.00000 196.000 220.000 24.0000 14105 + 52 0.500000 1.00000 220.000 245.000 25.0000 11788 + 53 0.500000 1.00000 245.000 272.000 27.0000 12047 + 54 0.500000 1.00000 272.000 300.000 28.0000 10794 + 55 0.500000 1.00000 300.000 330.000 30.0000 10227 + 56 0.500000 1.00000 330.000 362.000 32.0000 9842 + 57 0.500000 1.00000 362.000 395.000 33.0000 9366 + 58 0.500000 1.00000 395.000 430.000 35.0000 9303 + 59 0.500000 1.00000 430.000 468.000 38.0000 9205 + 60 0.500000 1.00000 468.000 507.000 39.0000 7644 + 61 0.500000 1.00000 507.000 548.000 41.0000 8162 + 62 0.500000 1.00000 548.000 592.000 44.0000 7805 + 63 0.500000 1.00000 592.000 638.000 46.0000 7504 + 64 0.500000 1.00000 638.000 686.000 48.0000 6853 + 65 0.500000 1.00000 686.000 790.000 104.000 13265 + 66 0.500000 1.00000 790.000 1684.00 894.000 53438 + 67 1.00000 1.50000 18.0000 21.0000 3.00000 1148 + 68 1.00000 1.50000 21.0000 24.0000 3.00000 1617 + 69 1.00000 1.50000 24.0000 28.0000 4.00000 2345 + 70 1.00000 1.50000 28.0000 32.0000 4.00000 2338 + 71 1.00000 1.50000 32.0000 37.0000 5.00000 2758 + 72 1.00000 1.50000 37.0000 43.0000 6.00000 3661 + 73 1.00000 1.50000 43.0000 49.0000 6.00000 3395 + 74 1.00000 1.50000 49.0000 56.0000 7.00000 4151 + 75 1.00000 1.50000 56.0000 64.0000 8.00000 4613 + 76 1.00000 1.50000 64.0000 74.0000 10.0000 5411 + 77 1.00000 1.50000 74.0000 84.0000 10.0000 5418 + 78 1.00000 1.50000 84.0000 97.0000 13.0000 7252 + 79 1.00000 1.50000 97.0000 114.000 17.0000 9149 + 80 1.00000 1.50000 114.000 133.000 19.0000 10311 + 81 1.00000 1.50000 133.000 153.000 20.0000 10822 + 82 1.00000 1.50000 153.000 174.000 21.0000 10920 + 83 1.00000 1.50000 174.000 196.000 22.0000 11760 + 84 1.00000 1.50000 196.000 220.000 24.0000 12467 + 85 1.00000 1.50000 220.000 245.000 25.0000 11557 + 86 1.00000 1.50000 245.000 272.000 27.0000 11571 + 87 1.00000 1.50000 272.000 300.000 28.0000 9898 + 88 1.00000 1.50000 300.000 330.000 30.0000 10136 + 89 1.00000 1.50000 330.000 362.000 32.0000 9618 + 90 1.00000 1.50000 362.000 395.000 33.0000 8505 + 91 1.00000 1.50000 395.000 430.000 35.0000 8043 + 92 1.00000 1.50000 430.000 468.000 38.0000 8302 + 93 1.00000 1.50000 468.000 507.000 39.0000 6783 + 94 1.00000 1.50000 507.000 548.000 41.0000 6825 + 95 1.00000 1.50000 548.000 592.000 44.0000 6867 + 96 1.00000 1.50000 592.000 638.000 46.0000 6496 + 97 1.00000 1.50000 638.000 686.000 48.0000 5929 + 98 1.00000 1.50000 686.000 1410.00 724.000 41097 + 99 1.50000 2.00000 18.0000 21.0000 3.00000 1267 + 100 1.50000 2.00000 21.0000 24.0000 3.00000 1274 + 101 1.50000 2.00000 24.0000 28.0000 4.00000 1498 + 102 1.50000 2.00000 28.0000 32.0000 4.00000 1547 + 103 1.50000 2.00000 32.0000 37.0000 5.00000 1869 + 104 1.50000 2.00000 37.0000 43.0000 6.00000 2527 + 105 1.50000 2.00000 43.0000 49.0000 6.00000 2359 + 106 1.50000 2.00000 49.0000 56.0000 7.00000 2478 + 107 1.50000 2.00000 56.0000 64.0000 8.00000 2870 + 108 1.50000 2.00000 64.0000 74.0000 10.0000 3514 + 109 1.50000 2.00000 74.0000 84.0000 10.0000 3507 + 110 1.50000 2.00000 84.0000 97.0000 13.0000 4480 + 111 1.50000 2.00000 97.0000 114.000 17.0000 5866 + 112 1.50000 2.00000 114.000 133.000 19.0000 6685 + 113 1.50000 2.00000 133.000 153.000 20.0000 6545 + 114 1.50000 2.00000 153.000 174.000 21.0000 6867 + 115 1.50000 2.00000 174.000 196.000 22.0000 6363 + 116 1.50000 2.00000 196.000 220.000 24.0000 7707 + 117 1.50000 2.00000 220.000 245.000 25.0000 7287 + 118 1.50000 2.00000 245.000 272.000 27.0000 8673 + 119 1.50000 2.00000 272.000 300.000 28.0000 8316 + 120 1.50000 2.00000 300.000 330.000 30.0000 8743 + 121 1.50000 2.00000 330.000 362.000 32.0000 7875 + 122 1.50000 2.00000 362.000 395.000 33.0000 7511 + 123 1.50000 2.00000 395.000 430.000 35.0000 6720 + 124 1.50000 2.00000 430.000 468.000 38.0000 6419 + 125 1.50000 2.00000 468.000 507.000 39.0000 5586 + 126 1.50000 2.00000 507.000 548.000 41.0000 5355 + 127 1.50000 2.00000 548.000 1032.00 484.000 28231 + 128 2.00000 2.50000 18.0000 21.0000 3.00000 854 + 129 2.00000 2.50000 21.0000 24.0000 3.00000 861 + 130 2.00000 2.50000 24.0000 28.0000 4.00000 1218 + 131 2.00000 2.50000 28.0000 32.0000 4.00000 875 + 132 2.00000 2.50000 32.0000 37.0000 5.00000 1211 + 133 2.00000 2.50000 37.0000 43.0000 6.00000 1498 + 134 2.00000 2.50000 43.0000 49.0000 6.00000 1470 + 135 2.00000 2.50000 49.0000 56.0000 7.00000 1631 + 136 2.00000 2.50000 56.0000 64.0000 8.00000 1673 + 137 2.00000 2.50000 64.0000 74.0000 10.0000 2310 + 138 2.00000 2.50000 74.0000 84.0000 10.0000 2205 + 139 2.00000 2.50000 84.0000 97.0000 13.0000 2961 + 140 2.00000 2.50000 97.0000 114.000 17.0000 3619 + 141 2.00000 2.50000 114.000 133.000 19.0000 4032 + 142 2.00000 2.50000 133.000 153.000 20.0000 4326 + 143 2.00000 2.50000 153.000 174.000 21.0000 4585 + 144 2.00000 2.50000 174.000 196.000 22.0000 4571 + 145 2.00000 2.50000 196.000 220.000 24.0000 4592 + 146 2.00000 2.50000 220.000 245.000 25.0000 5327 + 147 2.00000 2.50000 245.000 272.000 27.0000 5509 + 148 2.00000 2.50000 272.000 300.000 28.0000 5124 + 149 2.00000 2.50000 300.000 330.000 30.0000 5747 + 150 2.00000 2.50000 330.000 362.000 32.0000 5733 + 151 2.00000 2.50000 362.000 395.000 33.0000 5362 + 152 2.00000 2.50000 395.000 430.000 35.0000 4802 + 153 2.00000 2.50000 430.000 737.000 307.000 14854 + 154 2.50000 3.00000 18.0000 21.0000 3.00000 504 + 155 2.50000 3.00000 21.0000 24.0000 3.00000 427 + 156 2.50000 3.00000 24.0000 28.0000 4.00000 602 + 157 2.50000 3.00000 28.0000 32.0000 4.00000 672 + 158 2.50000 3.00000 32.0000 37.0000 5.00000 854 + 159 2.50000 3.00000 37.0000 43.0000 6.00000 917 + 160 2.50000 3.00000 43.0000 49.0000 6.00000 910 + 161 2.50000 3.00000 49.0000 56.0000 7.00000 1211 + 162 2.50000 3.00000 56.0000 64.0000 8.00000 1211 + 163 2.50000 3.00000 64.0000 74.0000 10.0000 1449 + 164 2.50000 3.00000 74.0000 84.0000 10.0000 1470 + 165 2.50000 3.00000 84.0000 97.0000 13.0000 1841 + 166 2.50000 3.00000 97.0000 114.000 17.0000 2282 + 167 2.50000 3.00000 114.000 133.000 19.0000 2590 + 168 2.50000 3.00000 133.000 153.000 20.0000 2674 + 169 2.50000 3.00000 153.000 174.000 21.0000 2779 + 170 2.50000 3.00000 174.000 196.000 22.0000 2730 + 171 2.50000 3.00000 196.000 220.000 24.0000 3283 + 172 2.50000 3.00000 220.000 245.000 25.0000 2919 + 173 2.50000 3.00000 245.000 272.000 27.0000 3227 + 174 2.50000 3.00000 272.000 300.000 28.0000 3255 + 175 2.50000 3.00000 300.000 468.000 168.000 8883 +}} diff --git a/v2.6/generators/nlojet++/interface/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix.wrm b/v2.6/generators/nlojet++/interface/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix.wrm new file mode 100644 index 0000000000000000000000000000000000000000..b23fab3106acb747ba84997cefb3a2e10cddaa64 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix.wrm @@ -0,0 +1,52 @@ +# --- Use emacs in sh mode -*-sh-*- # +# This is a automatically generated file by fastNLO and holds the values of the warmup run. +# The values are valid for the scenario fnr0001midpHT_I723509_v23_fix +# and if calculated with the steerfile: InclusiveNJets +# but only if no serious changes have been performed since its creation. +# +# Delete this file, if you want fastNLO to calculate a new one. +# +# This file has been calculated using: +# 10000 contributions. +# 169974 entries. +# ( Mind: contributions != events. And contributions are not necessarily in phase space region. +# Please check by eye for reasonability of the values. +# Number of events per bin are listed below. + +Warmup.OrderInAlphasOfWarmupRunWas 3 +Warmup.CheckScaleLimitsAgainstBins true +Warmup.ScaleDescriptionScale1 "pT_jet_[GeV]" +Warmup.DifferentialDimension 2 +Warmup.DimensionLabels { + "|eta|" "pT_[GeV]" +} +Warmup.DimensionIsDifferential { + "2" "2" +} + +Warmup.Values {{ + ObsBin x_min x_max pT_jet_[GeV]_min pT_jet_[GeV]_max + 0 1.6e-02 1.00e+00 7.600000 9.300000 + 1 2.0e-02 1.00e+00 9.300000 11.400000 + 2 2.8e-02 9.99e-01 11.400000 14.100000 + 3 3.4e-02 1.00e+00 14.100000 17.300000 + 4 4.4e-02 1.00e+00 17.300000 21.300000 + 5 6.8e-02 1.00e+00 21.300000 26.200000 + 6 8.6e-02 1.00e+00 26.200000 32.200000 + 7 8.6e-02 9.99e-01 32.200000 39.600000 + 8 8.6e-02 1.00e+00 39.600000 48.700000 +}} + + +Warmup.Binning {{ + ObsBin |eta|_Lo |eta|_Up pT_[GeV]_Lo pT_[GeV]_Up BinSize EventCount + 0 0.200000 0.800000 7.60000 9.30000 12.8173 21308 + 1 0.200000 0.800000 9.30000 11.4000 15.8332 21672 + 2 0.200000 0.800000 11.4000 14.1000 20.3569 22799 + 3 0.200000 0.800000 14.1000 17.3000 24.1267 22183 + 4 0.200000 0.800000 17.3000 21.3000 30.1584 18620 + 5 0.200000 0.800000 21.3000 26.2000 36.9440 19019 + 6 0.200000 0.800000 26.2000 32.2000 45.2376 16975 + 7 0.200000 0.800000 32.2000 39.6000 55.7930 15323 + 8 0.200000 0.800000 39.6000 48.7000 68.6104 12075 +}} diff --git a/v2.6/generators/nlojet++/interface/data/check/Makefile.am b/v2.6/generators/nlojet++/interface/data/check/Makefile.am new file mode 100644 index 0000000000000000000000000000000000000000..241d2c4f3610d2caf30c52180e74e70d8ab57888 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/check/Makefile.am @@ -0,0 +1,28 @@ +# -*- Automake -*- +# ----------------------------------------------------------------------------- +# +# K. Rabbertz, 20.10.2016 +# +# fastNLO_toolkit +# +# ----------------------------------------------------------------------------- +# Use GNU standards +AUTOMAKE_OPTIONS = gnu + +# Distribute for checks, but do not install +# Link filenames to avoid cmdline lengths > 99 for tar --> error in distribution +# steer.str --> fnr0001midpHT_I723509_v23_fix.str +# warmup.txt --> fnr0001midpHT_I723509_v23_fix_InclusiveNJets_warmup.txt +# born.tab.gz --> fnr0001midpHT_I723509_v23_fix-hhc-born-2jet.tab.gz +# nlo.tab.gz --> fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet.tab.gz +dist_check_DATA = steer.str warmup.txt born.tab.gz nlo.tab.gz compare-table-helper.py \ + InclusiveNJets_InclusiveJets_fix.wrm InclusiveNJets_InclusiveJets_flex.wrm \ + fix_slx_NodeDensity.str fix_slx_NodesPerBin.str flex_slx_NodeDensity.str flex_slx_NodesPerBin.str \ + fix_lgx_NodeDensity.str fix_lgx_NodesPerBin.str flex_lgx_NodeDensity.str flex_lgx_NodesPerBin.str + +# Files that are required to build the project but that can be +# recreated IF the necessary autotools etc. are available by: +# "autoreconf -i; ./configure" +# Use "make maintainer-clean" (on a build machine) before svn commits, +# but NOT before distribution with "make dist"! +MAINTAINERCLEANFILES = Makefile.in diff --git a/v2.6/generators/nlojet++/interface/data/check/born.tab.gz b/v2.6/generators/nlojet++/interface/data/check/born.tab.gz new file mode 120000 index 0000000000000000000000000000000000000000..d4c9eb044bef72a2d210b9fbacfe76293af32b86 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/check/born.tab.gz @@ -0,0 +1 @@ +fnr0001midpHT_I723509_v23_fix-hhc-born-2jet.tab.gz \ No newline at end of file diff --git a/v2.6/generators/nlojet++/interface/data/check/compare-table-helper.py b/v2.6/generators/nlojet++/interface/data/check/compare-table-helper.py new file mode 100755 index 0000000000000000000000000000000000000000..0f40493ba7fb696c7f9f58ab0752c3d68a436cde --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/check/compare-table-helper.py @@ -0,0 +1,18 @@ +#!/usr/bin/env python3 + +import os +import sys + +try: + import fastnlo as fnlo +except ModuleNotFoundError: + print("compare-table-helper: fastNLO Python extension not found") + sys.exit(77) + +LIBDIR = os.environ["LIBDIR"] + +fnlo.SetGlobalVerbosity(fnlo.DEBUG) + +table_1 = fnlo.fastNLOTable(sys.argv[1]) +table_2 = fnlo.fastNLOTable(sys.argv[2]) +assert table_1.IsEquivalent(table_2, 1e-8) diff --git a/v2.6/generators/nlojet++/interface/data/check/fix_lgx_NodeDensity.str b/v2.6/generators/nlojet++/interface/data/check/fix_lgx_NodeDensity.str new file mode 100644 index 0000000000000000000000000000000000000000..3ad062b5e1c5917482f4ffaf3dfb012d54ee29c6 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/check/fix_lgx_NodeDensity.str @@ -0,0 +1,207 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName InclusiveJets_fix_lgx +ScenarioDescription { + "d2sigma-jet_dpT_dy_[pb_GeV]" + "CMS_Collaboration" + "Inclusive_Jet_pT" + "anti-kT_R=0.5" + "CMS-PAPER-QCD-10-011, arXiv:1106.0208, Phys. Rev. Lett. 107 (2011) 132001." + "RIVET_ID=CMS_2011_S9086218/D01-x01-y01,SPIRES_ID=9086218,INSPIRE_RECORD=902309" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.5.0" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.5 # Jet size parameter: Required for all jets +#OvThr 0.5 # Overlap threshold: Required for cone jets (Normally 10: 0.75; 11,12: 0.50) +# # Overall jet phase space +ptjmin 18. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 3.0 # Maximal jet rapidity +# Use either rapidity or pseudorapidity but not both! If both are set, only rapidity cuts are applied. +#etajmin 0.0 # Minimal jet pseudorapidity +#etajmax 3.0 # Maximal jet pseudorapidity +#Njetmin 1 # Minimal number of jets required to be in preselected phase space +# # (Normally one, i.e. single-jet inclusive) +#obs0min x.y # +#obs0max x.y # By default these values are derived from the binning in these +#obs1min x.y # observables and are set automatically. If required the min/max +#obs1max x.y # values for each of the maximally three observables can be set +#obs2min x.y # by hand. +#obs2max x.y # + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "|y|" # This defines the observables to be calculated! + "pT_[GeV]" # Implemented observables are: "|y|", "pT_[GeV]", "phi" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 2. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "pT_jet_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + # Implemented scales are: "pT_jet_[GeV]", "pT_max_[GeV]" + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +# Example for SingleDifferentialBinning: +#SingleDifferentialBinning { +# 7. 11. 18. 30. 50. 100. +#} + +# Example for DoubleDifferentialBinning: +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 846. 1684. + 0.5 1.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 790. 1684. + 1.0 1.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 1410. + 1.5 2.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 1032. + 2.0 2.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 737. + 2.5 3.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 468. +}} + +# Example for TripleDifferentialBinning: +#TripleDifferentialBinning {{ +# 1stDimLo 1stDimUp 2ndDimLo 2ndDimUp "----- Array of bin-grid for 3rd dimension -----" +# 100. 150. -1.0 0.0 7. 11. 18. 30. 50. +# 150. 200. -1.0 0.0 7. 11. 18. 30. 50. +# 200. 400. 0.0 1.5 7. 11. 18. 30. 50. +# 400. 700. 0.0 1.5 7. 11. 18. 30. 50. +# 700. 5000. 1.5 2.5 7. 11. 18. 30. 50. +# 5000. 15000. 1.5 2.5 7. 11. 18. 30. 50. +#}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 7000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). +NPDF 2 +NPDFDim 1 + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +#GlobalVerbosity DEBUG # Global output verbosity of fastNLO toolkit, def.=WARNING, +GlobalVerbosity INFO # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJets.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck true # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "log10" +X_NNodes 1 +X_NoOfNodesPerMagnitude false +X_NNodeCounting "NodeDensity" + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 +Mu1_NNodeCounting "NodesPerDim2" + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 +Mu2_NNodeCounting "NodesPerDim2" diff --git a/v2.6/generators/nlojet++/interface/data/check/fix_lgx_NodesPerBin.str b/v2.6/generators/nlojet++/interface/data/check/fix_lgx_NodesPerBin.str new file mode 100644 index 0000000000000000000000000000000000000000..5bcf8c518f8b4663fac6e8b65e6748e01ab00f4a --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/check/fix_lgx_NodesPerBin.str @@ -0,0 +1,207 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName InclusiveJets_fix_lgx +ScenarioDescription { + "d2sigma-jet_dpT_dy_[pb_GeV]" + "CMS_Collaboration" + "Inclusive_Jet_pT" + "anti-kT_R=0.5" + "CMS-PAPER-QCD-10-011, arXiv:1106.0208, Phys. Rev. Lett. 107 (2011) 132001." + "RIVET_ID=CMS_2011_S9086218/D01-x01-y01,SPIRES_ID=9086218,INSPIRE_RECORD=902309" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.5.0" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.5 # Jet size parameter: Required for all jets +#OvThr 0.5 # Overlap threshold: Required for cone jets (Normally 10: 0.75; 11,12: 0.50) +# # Overall jet phase space +ptjmin 18. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 3.0 # Maximal jet rapidity +# Use either rapidity or pseudorapidity but not both! If both are set, only rapidity cuts are applied. +#etajmin 0.0 # Minimal jet pseudorapidity +#etajmax 3.0 # Maximal jet pseudorapidity +#Njetmin 1 # Minimal number of jets required to be in preselected phase space +# # (Normally one, i.e. single-jet inclusive) +#obs0min x.y # +#obs0max x.y # By default these values are derived from the binning in these +#obs1min x.y # observables and are set automatically. If required the min/max +#obs1max x.y # values for each of the maximally three observables can be set +#obs2min x.y # by hand. +#obs2max x.y # + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "|y|" # This defines the observables to be calculated! + "pT_[GeV]" # Implemented observables are: "|y|", "pT_[GeV]", "phi" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 2. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "pT_jet_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + # Implemented scales are: "pT_jet_[GeV]", "pT_max_[GeV]" + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +# Example for SingleDifferentialBinning: +#SingleDifferentialBinning { +# 7. 11. 18. 30. 50. 100. +#} + +# Example for DoubleDifferentialBinning: +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 846. 1684. + 0.5 1.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 790. 1684. + 1.0 1.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 1410. + 1.5 2.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 1032. + 2.0 2.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 737. + 2.5 3.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 468. +}} + +# Example for TripleDifferentialBinning: +#TripleDifferentialBinning {{ +# 1stDimLo 1stDimUp 2ndDimLo 2ndDimUp "----- Array of bin-grid for 3rd dimension -----" +# 100. 150. -1.0 0.0 7. 11. 18. 30. 50. +# 150. 200. -1.0 0.0 7. 11. 18. 30. 50. +# 200. 400. 0.0 1.5 7. 11. 18. 30. 50. +# 400. 700. 0.0 1.5 7. 11. 18. 30. 50. +# 700. 5000. 1.5 2.5 7. 11. 18. 30. 50. +# 5000. 15000. 1.5 2.5 7. 11. 18. 30. 50. +#}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 7000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). +NPDF 2 +NPDFDim 1 + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +#GlobalVerbosity DEBUG # Global output verbosity of fastNLO toolkit, def.=WARNING, +GlobalVerbosity INFO # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJets.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck true # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "log10" +X_NNodes 9 +X_NoOfNodesPerMagnitude false +X_NNodeCounting "NodesPerBin" + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 +Mu1_NNodeCounting "NodesPerBin" + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 +Mu2_NNodeCounting "NodesPerBin" diff --git a/v2.6/generators/nlojet++/interface/data/check/fix_slx_NodeDensity.str b/v2.6/generators/nlojet++/interface/data/check/fix_slx_NodeDensity.str new file mode 100644 index 0000000000000000000000000000000000000000..623959d051b2af13a177389a2ffbf85258a3801c --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/check/fix_slx_NodeDensity.str @@ -0,0 +1,207 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName InclusiveJets_fix_slx +ScenarioDescription { + "d2sigma-jet_dpT_dy_[pb_GeV]" + "CMS_Collaboration" + "Inclusive_Jet_pT" + "anti-kT_R=0.5" + "CMS-PAPER-QCD-10-011, arXiv:1106.0208, Phys. Rev. Lett. 107 (2011) 132001." + "RIVET_ID=CMS_2011_S9086218/D01-x01-y01,SPIRES_ID=9086218,INSPIRE_RECORD=902309" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.5.0" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.5 # Jet size parameter: Required for all jets +#OvThr 0.5 # Overlap threshold: Required for cone jets (Normally 10: 0.75; 11,12: 0.50) +# # Overall jet phase space +ptjmin 18. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 3.0 # Maximal jet rapidity +# Use either rapidity or pseudorapidity but not both! If both are set, only rapidity cuts are applied. +#etajmin 0.0 # Minimal jet pseudorapidity +#etajmax 3.0 # Maximal jet pseudorapidity +#Njetmin 1 # Minimal number of jets required to be in preselected phase space +# # (Normally one, i.e. single-jet inclusive) +#obs0min x.y # +#obs0max x.y # By default these values are derived from the binning in these +#obs1min x.y # observables and are set automatically. If required the min/max +#obs1max x.y # values for each of the maximally three observables can be set +#obs2min x.y # by hand. +#obs2max x.y # + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "|y|" # This defines the observables to be calculated! + "pT_[GeV]" # Implemented observables are: "|y|", "pT_[GeV]", "phi" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 2. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "pT_jet_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + # Implemented scales are: "pT_jet_[GeV]", "pT_max_[GeV]" + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +# Example for SingleDifferentialBinning: +#SingleDifferentialBinning { +# 7. 11. 18. 30. 50. 100. +#} + +# Example for DoubleDifferentialBinning: +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 846. 1684. + 0.5 1.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 790. 1684. + 1.0 1.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 1410. + 1.5 2.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 1032. + 2.0 2.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 737. + 2.5 3.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 468. +}} + +# Example for TripleDifferentialBinning: +#TripleDifferentialBinning {{ +# 1stDimLo 1stDimUp 2ndDimLo 2ndDimUp "----- Array of bin-grid for 3rd dimension -----" +# 100. 150. -1.0 0.0 7. 11. 18. 30. 50. +# 150. 200. -1.0 0.0 7. 11. 18. 30. 50. +# 200. 400. 0.0 1.5 7. 11. 18. 30. 50. +# 400. 700. 0.0 1.5 7. 11. 18. 30. 50. +# 700. 5000. 1.5 2.5 7. 11. 18. 30. 50. +# 5000. 15000. 1.5 2.5 7. 11. 18. 30. 50. +#}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 7000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). +NPDF 2 +NPDFDim 1 + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +#GlobalVerbosity DEBUG # Global output verbosity of fastNLO toolkit, def.=WARNING, +GlobalVerbosity INFO # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJets.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck true # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 4 +X_NoOfNodesPerMagnitude false +X_NNodeCounting "NodeDensity" + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 +Mu1_NNodeCounting "NodesPerDim2" + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 +Mu2_NNodeCounting "NodesPerDim2" diff --git a/v2.6/generators/nlojet++/interface/data/check/fix_slx_NodesPerBin.str b/v2.6/generators/nlojet++/interface/data/check/fix_slx_NodesPerBin.str new file mode 100644 index 0000000000000000000000000000000000000000..64c24414b53bd36d0cad0a8472b4eec48983fe08 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/check/fix_slx_NodesPerBin.str @@ -0,0 +1,207 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName InclusiveJets_fix_slx +ScenarioDescription { + "d2sigma-jet_dpT_dy_[pb_GeV]" + "CMS_Collaboration" + "Inclusive_Jet_pT" + "anti-kT_R=0.5" + "CMS-PAPER-QCD-10-011, arXiv:1106.0208, Phys. Rev. Lett. 107 (2011) 132001." + "RIVET_ID=CMS_2011_S9086218/D01-x01-y01,SPIRES_ID=9086218,INSPIRE_RECORD=902309" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.5.0" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.5 # Jet size parameter: Required for all jets +#OvThr 0.5 # Overlap threshold: Required for cone jets (Normally 10: 0.75; 11,12: 0.50) +# # Overall jet phase space +ptjmin 18. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 3.0 # Maximal jet rapidity +# Use either rapidity or pseudorapidity but not both! If both are set, only rapidity cuts are applied. +#etajmin 0.0 # Minimal jet pseudorapidity +#etajmax 3.0 # Maximal jet pseudorapidity +#Njetmin 1 # Minimal number of jets required to be in preselected phase space +# # (Normally one, i.e. single-jet inclusive) +#obs0min x.y # +#obs0max x.y # By default these values are derived from the binning in these +#obs1min x.y # observables and are set automatically. If required the min/max +#obs1max x.y # values for each of the maximally three observables can be set +#obs2min x.y # by hand. +#obs2max x.y # + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "|y|" # This defines the observables to be calculated! + "pT_[GeV]" # Implemented observables are: "|y|", "pT_[GeV]", "phi" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 2. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "pT_jet_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + # Implemented scales are: "pT_jet_[GeV]", "pT_max_[GeV]" + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +# Example for SingleDifferentialBinning: +#SingleDifferentialBinning { +# 7. 11. 18. 30. 50. 100. +#} + +# Example for DoubleDifferentialBinning: +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 846. 1684. + 0.5 1.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 790. 1684. + 1.0 1.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 1410. + 1.5 2.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 1032. + 2.0 2.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 737. + 2.5 3.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 468. +}} + +# Example for TripleDifferentialBinning: +#TripleDifferentialBinning {{ +# 1stDimLo 1stDimUp 2ndDimLo 2ndDimUp "----- Array of bin-grid for 3rd dimension -----" +# 100. 150. -1.0 0.0 7. 11. 18. 30. 50. +# 150. 200. -1.0 0.0 7. 11. 18. 30. 50. +# 200. 400. 0.0 1.5 7. 11. 18. 30. 50. +# 400. 700. 0.0 1.5 7. 11. 18. 30. 50. +# 700. 5000. 1.5 2.5 7. 11. 18. 30. 50. +# 5000. 15000. 1.5 2.5 7. 11. 18. 30. 50. +#}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 7000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). +NPDF 2 +NPDFDim 1 + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +#GlobalVerbosity DEBUG # Global output verbosity of fastNLO toolkit, def.=WARNING, +GlobalVerbosity INFO # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJets.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck true # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 12 +X_NoOfNodesPerMagnitude false +X_NNodeCounting "NodesPerBin" + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 +Mu1_NNodeCounting "NodesPerBin" + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 +Mu2_NNodeCounting "NodesPerBin" diff --git a/v2.6/generators/nlojet++/interface/data/check/flex_lgx_NodeDensity.str b/v2.6/generators/nlojet++/interface/data/check/flex_lgx_NodeDensity.str new file mode 100644 index 0000000000000000000000000000000000000000..311bd37abc594ab0adae5d2ec988b6767c6fde8a --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/check/flex_lgx_NodeDensity.str @@ -0,0 +1,207 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName InclusiveJets_flex_lgx +ScenarioDescription { + "d2sigma-jet_dpT_dy_[pb_GeV]" + "CMS_Collaboration" + "Inclusive_Jet_pT" + "anti-kT_R=0.5" + "CMS-PAPER-QCD-10-011, arXiv:1106.0208, Phys. Rev. Lett. 107 (2011) 132001." + "RIVET_ID=CMS_2011_S9086218/D01-x01-y01,SPIRES_ID=9086218,INSPIRE_RECORD=902309" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.5.0" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.5 # Jet size parameter: Required for all jets +#OvThr 0.5 # Overlap threshold: Required for cone jets (Normally 10: 0.75; 11,12: 0.50) +# # Overall jet phase space +ptjmin 18. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 3.0 # Maximal jet rapidity +# Use either rapidity or pseudorapidity but not both! If both are set, only rapidity cuts are applied. +#etajmin 0.0 # Minimal jet pseudorapidity +#etajmax 3.0 # Maximal jet pseudorapidity +#Njetmin 1 # Minimal number of jets required to be in preselected phase space +# # (Normally one, i.e. single-jet inclusive) +#obs0min x.y # +#obs0max x.y # By default these values are derived from the binning in these +#obs1min x.y # observables and are set automatically. If required the min/max +#obs1max x.y # values for each of the maximally three observables can be set +#obs2min x.y # by hand. +#obs2max x.y # + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "|y|" # This defines the observables to be calculated! + "pT_[GeV]" # Implemented observables are: "|y|", "pT_[GeV]", "phi" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 2. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "pT_jet_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + # Implemented scales are: "pT_jet_[GeV]", "pT_max_[GeV]" + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +# Example for SingleDifferentialBinning: +#SingleDifferentialBinning { +# 7. 11. 18. 30. 50. 100. +#} + +# Example for DoubleDifferentialBinning: +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 846. 1684. + 0.5 1.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 790. 1684. + 1.0 1.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 1410. + 1.5 2.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 1032. + 2.0 2.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 737. + 2.5 3.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 468. +}} + +# Example for TripleDifferentialBinning: +#TripleDifferentialBinning {{ +# 1stDimLo 1stDimUp 2ndDimLo 2ndDimUp "----- Array of bin-grid for 3rd dimension -----" +# 100. 150. -1.0 0.0 7. 11. 18. 30. 50. +# 150. 200. -1.0 0.0 7. 11. 18. 30. 50. +# 200. 400. 0.0 1.5 7. 11. 18. 30. 50. +# 400. 700. 0.0 1.5 7. 11. 18. 30. 50. +# 700. 5000. 1.5 2.5 7. 11. 18. 30. 50. +# 5000. 15000. 1.5 2.5 7. 11. 18. 30. 50. +#}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 7000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). +NPDF 2 +NPDFDim 1 + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +#GlobalVerbosity DEBUG # Global output verbosity of fastNLO toolkit, def.=WARNING, +GlobalVerbosity INFO # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJets.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable true # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck true # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "log10" +X_NNodes 1 +X_NoOfNodesPerMagnitude false +X_NNodeCounting "NodeDensity" + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 +Mu1_NNodeCounting "NodesPerDim2" + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 +Mu2_NNodeCounting "NodesPerDim2" diff --git a/v2.6/generators/nlojet++/interface/data/check/flex_lgx_NodesPerBin.str b/v2.6/generators/nlojet++/interface/data/check/flex_lgx_NodesPerBin.str new file mode 100644 index 0000000000000000000000000000000000000000..57f46d833422d7c72eb12bbe1ae7e4251bb709e9 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/check/flex_lgx_NodesPerBin.str @@ -0,0 +1,207 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName InclusiveJets_flex_lgx +ScenarioDescription { + "d2sigma-jet_dpT_dy_[pb_GeV]" + "CMS_Collaboration" + "Inclusive_Jet_pT" + "anti-kT_R=0.5" + "CMS-PAPER-QCD-10-011, arXiv:1106.0208, Phys. Rev. Lett. 107 (2011) 132001." + "RIVET_ID=CMS_2011_S9086218/D01-x01-y01,SPIRES_ID=9086218,INSPIRE_RECORD=902309" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.5.0" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.5 # Jet size parameter: Required for all jets +#OvThr 0.5 # Overlap threshold: Required for cone jets (Normally 10: 0.75; 11,12: 0.50) +# # Overall jet phase space +ptjmin 18. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 3.0 # Maximal jet rapidity +# Use either rapidity or pseudorapidity but not both! If both are set, only rapidity cuts are applied. +#etajmin 0.0 # Minimal jet pseudorapidity +#etajmax 3.0 # Maximal jet pseudorapidity +#Njetmin 1 # Minimal number of jets required to be in preselected phase space +# # (Normally one, i.e. single-jet inclusive) +#obs0min x.y # +#obs0max x.y # By default these values are derived from the binning in these +#obs1min x.y # observables and are set automatically. If required the min/max +#obs1max x.y # values for each of the maximally three observables can be set +#obs2min x.y # by hand. +#obs2max x.y # + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "|y|" # This defines the observables to be calculated! + "pT_[GeV]" # Implemented observables are: "|y|", "pT_[GeV]", "phi" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 2. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "pT_jet_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + # Implemented scales are: "pT_jet_[GeV]", "pT_max_[GeV]" + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +# Example for SingleDifferentialBinning: +#SingleDifferentialBinning { +# 7. 11. 18. 30. 50. 100. +#} + +# Example for DoubleDifferentialBinning: +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 846. 1684. + 0.5 1.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 790. 1684. + 1.0 1.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 1410. + 1.5 2.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 1032. + 2.0 2.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 737. + 2.5 3.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 468. +}} + +# Example for TripleDifferentialBinning: +#TripleDifferentialBinning {{ +# 1stDimLo 1stDimUp 2ndDimLo 2ndDimUp "----- Array of bin-grid for 3rd dimension -----" +# 100. 150. -1.0 0.0 7. 11. 18. 30. 50. +# 150. 200. -1.0 0.0 7. 11. 18. 30. 50. +# 200. 400. 0.0 1.5 7. 11. 18. 30. 50. +# 400. 700. 0.0 1.5 7. 11. 18. 30. 50. +# 700. 5000. 1.5 2.5 7. 11. 18. 30. 50. +# 5000. 15000. 1.5 2.5 7. 11. 18. 30. 50. +#}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 7000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). +NPDF 2 +NPDFDim 1 + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +#GlobalVerbosity DEBUG # Global output verbosity of fastNLO toolkit, def.=WARNING, +GlobalVerbosity INFO # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJets.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable true # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck true # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "log10" +X_NNodes 9 +X_NoOfNodesPerMagnitude false +X_NNodeCounting "NodesPerBin" + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 +Mu1_NNodeCounting "NodesPerBin" + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 +Mu2_NNodeCounting "NodesPerBin" diff --git a/v2.6/generators/nlojet++/interface/data/check/flex_slx_NodeDensity.str b/v2.6/generators/nlojet++/interface/data/check/flex_slx_NodeDensity.str new file mode 100644 index 0000000000000000000000000000000000000000..fd1f5952d4fca922040ab458b7155ea4fb571d6e --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/check/flex_slx_NodeDensity.str @@ -0,0 +1,207 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName InclusiveJets_flex_slx +ScenarioDescription { + "d2sigma-jet_dpT_dy_[pb_GeV]" + "CMS_Collaboration" + "Inclusive_Jet_pT" + "anti-kT_R=0.5" + "CMS-PAPER-QCD-10-011, arXiv:1106.0208, Phys. Rev. Lett. 107 (2011) 132001." + "RIVET_ID=CMS_2011_S9086218/D01-x01-y01,SPIRES_ID=9086218,INSPIRE_RECORD=902309" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.5.0" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.5 # Jet size parameter: Required for all jets +#OvThr 0.5 # Overlap threshold: Required for cone jets (Normally 10: 0.75; 11,12: 0.50) +# # Overall jet phase space +ptjmin 18. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 3.0 # Maximal jet rapidity +# Use either rapidity or pseudorapidity but not both! If both are set, only rapidity cuts are applied. +#etajmin 0.0 # Minimal jet pseudorapidity +#etajmax 3.0 # Maximal jet pseudorapidity +#Njetmin 1 # Minimal number of jets required to be in preselected phase space +# # (Normally one, i.e. single-jet inclusive) +#obs0min x.y # +#obs0max x.y # By default these values are derived from the binning in these +#obs1min x.y # observables and are set automatically. If required the min/max +#obs1max x.y # values for each of the maximally three observables can be set +#obs2min x.y # by hand. +#obs2max x.y # + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "|y|" # This defines the observables to be calculated! + "pT_[GeV]" # Implemented observables are: "|y|", "pT_[GeV]", "phi" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 2. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "pT_jet_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + # Implemented scales are: "pT_jet_[GeV]", "pT_max_[GeV]" + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +# Example for SingleDifferentialBinning: +#SingleDifferentialBinning { +# 7. 11. 18. 30. 50. 100. +#} + +# Example for DoubleDifferentialBinning: +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 846. 1684. + 0.5 1.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 790. 1684. + 1.0 1.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 1410. + 1.5 2.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 1032. + 2.0 2.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 737. + 2.5 3.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 468. +}} + +# Example for TripleDifferentialBinning: +#TripleDifferentialBinning {{ +# 1stDimLo 1stDimUp 2ndDimLo 2ndDimUp "----- Array of bin-grid for 3rd dimension -----" +# 100. 150. -1.0 0.0 7. 11. 18. 30. 50. +# 150. 200. -1.0 0.0 7. 11. 18. 30. 50. +# 200. 400. 0.0 1.5 7. 11. 18. 30. 50. +# 400. 700. 0.0 1.5 7. 11. 18. 30. 50. +# 700. 5000. 1.5 2.5 7. 11. 18. 30. 50. +# 5000. 15000. 1.5 2.5 7. 11. 18. 30. 50. +#}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 7000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). +NPDF 2 +NPDFDim 1 + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +#GlobalVerbosity DEBUG # Global output verbosity of fastNLO toolkit, def.=WARNING, +GlobalVerbosity INFO # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJets.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable true # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck true # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 4 +X_NoOfNodesPerMagnitude false +X_NNodeCounting "NodeDensity" + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 +Mu1_NNodeCounting "NodesPerDim2" + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 +Mu2_NNodeCounting "NodesPerDim2" diff --git a/v2.6/generators/nlojet++/interface/data/check/flex_slx_NodesPerBin.str b/v2.6/generators/nlojet++/interface/data/check/flex_slx_NodesPerBin.str new file mode 100644 index 0000000000000000000000000000000000000000..66bc3485a99c95c431a5b734687f90ccb285383b --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/check/flex_slx_NodesPerBin.str @@ -0,0 +1,207 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName InclusiveJets_flex_slx +ScenarioDescription { + "d2sigma-jet_dpT_dy_[pb_GeV]" + "CMS_Collaboration" + "Inclusive_Jet_pT" + "anti-kT_R=0.5" + "CMS-PAPER-QCD-10-011, arXiv:1106.0208, Phys. Rev. Lett. 107 (2011) 132001." + "RIVET_ID=CMS_2011_S9086218/D01-x01-y01,SPIRES_ID=9086218,INSPIRE_RECORD=902309" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.5.0" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.5 # Jet size parameter: Required for all jets +#OvThr 0.5 # Overlap threshold: Required for cone jets (Normally 10: 0.75; 11,12: 0.50) +# # Overall jet phase space +ptjmin 18. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 3.0 # Maximal jet rapidity +# Use either rapidity or pseudorapidity but not both! If both are set, only rapidity cuts are applied. +#etajmin 0.0 # Minimal jet pseudorapidity +#etajmax 3.0 # Maximal jet pseudorapidity +#Njetmin 1 # Minimal number of jets required to be in preselected phase space +# # (Normally one, i.e. single-jet inclusive) +#obs0min x.y # +#obs0max x.y # By default these values are derived from the binning in these +#obs1min x.y # observables and are set automatically. If required the min/max +#obs1max x.y # values for each of the maximally three observables can be set +#obs2min x.y # by hand. +#obs2max x.y # + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "|y|" # This defines the observables to be calculated! + "pT_[GeV]" # Implemented observables are: "|y|", "pT_[GeV]", "phi" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 2. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "pT_jet_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + # Implemented scales are: "pT_jet_[GeV]", "pT_max_[GeV]" + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +# Example for SingleDifferentialBinning: +#SingleDifferentialBinning { +# 7. 11. 18. 30. 50. 100. +#} + +# Example for DoubleDifferentialBinning: +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 846. 1684. + 0.5 1.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 790. 1684. + 1.0 1.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 1410. + 1.5 2.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 1032. + 2.0 2.5 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 737. + 2.5 3.0 18. 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 468. +}} + +# Example for TripleDifferentialBinning: +#TripleDifferentialBinning {{ +# 1stDimLo 1stDimUp 2ndDimLo 2ndDimUp "----- Array of bin-grid for 3rd dimension -----" +# 100. 150. -1.0 0.0 7. 11. 18. 30. 50. +# 150. 200. -1.0 0.0 7. 11. 18. 30. 50. +# 200. 400. 0.0 1.5 7. 11. 18. 30. 50. +# 400. 700. 0.0 1.5 7. 11. 18. 30. 50. +# 700. 5000. 1.5 2.5 7. 11. 18. 30. 50. +# 5000. 15000. 1.5 2.5 7. 11. 18. 30. 50. +#}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 7000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). +NPDF 2 +NPDFDim 1 + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +#GlobalVerbosity DEBUG # Global output verbosity of fastNLO toolkit, def.=WARNING, +GlobalVerbosity INFO # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJets.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable true # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck true # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 12 +X_NoOfNodesPerMagnitude false +X_NNodeCounting "NodesPerBin" + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 +Mu1_NNodeCounting "NodesPerBin" + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 +Mu2_NNodeCounting "NodesPerBin" diff --git a/v2.6/generators/nlojet++/interface/data/check/fnr0001midpHT_I723509_v23_fix-hhc-born-2jet.tab.gz b/v2.6/generators/nlojet++/interface/data/check/fnr0001midpHT_I723509_v23_fix-hhc-born-2jet.tab.gz new file mode 100644 index 0000000000000000000000000000000000000000..4740c1fb65f8c74d53d89c8e6f523114631e9151 Binary files /dev/null and b/v2.6/generators/nlojet++/interface/data/check/fnr0001midpHT_I723509_v23_fix-hhc-born-2jet.tab.gz differ diff --git a/v2.6/generators/nlojet++/interface/data/check/fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet.tab.gz b/v2.6/generators/nlojet++/interface/data/check/fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet.tab.gz new file mode 100644 index 0000000000000000000000000000000000000000..1d16a8df8e98d32e420a90c7617f31af584332b5 Binary files /dev/null and b/v2.6/generators/nlojet++/interface/data/check/fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet.tab.gz differ diff --git a/v2.6/generators/nlojet++/interface/data/check/nlo.tab.gz b/v2.6/generators/nlojet++/interface/data/check/nlo.tab.gz new file mode 120000 index 0000000000000000000000000000000000000000..e509d35ceee1c0f6cf526cf8de3e6b3052104fab --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/check/nlo.tab.gz @@ -0,0 +1 @@ +fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet.tab.gz \ No newline at end of file diff --git a/v2.6/generators/nlojet++/interface/data/check/steer.str b/v2.6/generators/nlojet++/interface/data/check/steer.str new file mode 120000 index 0000000000000000000000000000000000000000..4aea6a789ca26129e34ba72dbf92ab3e8a915ecc --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/check/steer.str @@ -0,0 +1 @@ +../InclusiveJets/fnr0001midpHT_I723509_v23_fix.str \ No newline at end of file diff --git a/v2.6/generators/nlojet++/interface/data/check/warmup.txt b/v2.6/generators/nlojet++/interface/data/check/warmup.txt new file mode 120000 index 0000000000000000000000000000000000000000..dce09b25bccd414209d49e7e00135b46ce4b047f --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/check/warmup.txt @@ -0,0 +1 @@ +InclusiveNJets_fnr0001midpHT_I723509_v23_fix.wrm \ No newline at end of file diff --git a/v2.6/generators/nlojet++/interface/data/dev/fnl2380ak57v22.cc b/v2.6/generators/nlojet++/interface/data/dev/fnl2380ak57v22.cc new file mode 100644 index 0000000000000000000000000000000000000000..dcfd7278e06d32c3fc22d78abe2d6a89dc60eab2 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/dev/fnl2380ak57v22.cc @@ -0,0 +1,249 @@ +// +// fastNLO v2 creator code for fnl2380ak0507y0: +// CMS LHC Inclusive Jets Scenario, E_cms = 7 TeV +// for fastjet anti-kT algo with R=0.5 and 0.7 in E-scheme +// +// +// ============== fastNLO user: =================================== +// To create your own scenario, it is recommended to take +// this code, make a copy and edit the relevant changes. +// Important: +// Edit only those lines which are labeled as "fastNLO user" +// and refer to the documentation ("fastNLO creator code in +// NLOJet++") for a detailed explanation of the parameters +// and variables. +// If a code fragment is not explicitely labeled as "fastNLO user", +// it is likely that a modification will interfere with +// the fastNLO routines. +// Please keep the order of all statements in inittable +// in order to guarantee a working code. +// +// This file contains the following routines: +// inputfunc (-> user edits) +// psinput (-> user edits) +// userfunc (-> user edits) +// inittable (-> user edits) +// initfunc (don't touch) +// writetable (don't touch) +// end_of_event (don't touch) +// phys_output (don't touch) +// GetEcms (don't touch) +// GetNj (don't touch) +// +// Implementing a new scenario requires to edit: +// - the jet algorithm ("#include" statement and assignment of "jetclus") +// - number of jets (inputfunc) +// - center-of-mass energy (psinput) +// - compute observable, determine bin no. (userfunc) +// - declare all variables for table, define bin boundaries (inittable, etc.) +// +// ================================================================ + +//------ DON'T TOUCH THIS PART! ------ +#include <iostream> +#include <bits/hhc-phasespace.h> +#include <bits/hhc-process.h> +#include <bits/hhc-jetfunc.h> +#include "fastnlotk/fastNLOCreate.h" + +//----- used namespaces ----- +using namespace nlo; +using namespace std; + +//----- declaration of the user defined functions ----- +void inputfunc(unsigned int&, unsigned int&, unsigned int&); +void psinput(phasespace_hhc *, double&); +user_base_hhc * userfunc(); + +//----- array of the symbols symbols ----- +extern "C"{ + struct { + const char *name; + void *address; + } user_defined_functions[] = + { + // process index: hhc for hadron-hadron --> jets + {"procindex", (void *) "hhc"}, + // input function + {"inputfunc", (void *) inputfunc}, + // phase space input function + {"psinput", (void *) psinput}, + // user defined functions + {"userfunc", (void *) userfunc}, + // end of the list + {0, 0} + }; +} +//------ END OF THE DO-NOT-TOUCH-PART ------ + +//------ USER DEFINED PART STARTS HERE ------ +#include <algorithm> + +// --- fastNLO user: include the header file for the jet algorithm +#include "fj-ak.h" +#include "fastNLOInterfaceToNLOJET.cc" + +class UserHHC : public basic_user_set<user0d_hhc, user1h_hhc, user2h_hhc> +{ +public: + // init and user function + void initfunc(unsigned int); + void userfunc(const event_hhc&, const amplitude_hhc&); + virtual void end_of_event(); + virtual void phys_output(const std::basic_string<char>& fname, unsigned long nsave = 10000UL, bool txt = false); + +private: + // --- fastNLO user: define the jet algorithm (consistent with the header file above) + fj_ak jetclus; + + bounded_vector<lorentzvector<double> > pj; // the jet structure + + // --- fastNLO definitions (not for user) + long long int nevents; // No of events calculated so far + unsigned long nwrite; // No of events after to write out the table + double YJMIN; + double YJMAX; + double PTJMIN; + + // --- fastNLO user FYI: use of the -n option of NLOJet++ + // The steering of these flags is encoded in the NLOJet++ run name (option -n name). + // If the name matches "deb", "ref", or "wrm", the respective flag is set to true. + // + fastNLOCreate *ftable; + void InitFastNLO(const std::basic_string<char>& fname); +}; + +user_base_hhc * userfunc() { + return new UserHHC; +} + +void inputfunc(unsigned int& nj, unsigned int& nu, unsigned int& nd) +{ + // --- fastNLO user: select the number of jets of the LO process for your observable, + // e.g. 2 for incl. jets, 3 for 3-jet mass + //nj = 1U; + nj = 2U; + //nj = 3U; + + // --- number of the up and down type flavours (don't touch) + nu = 2U; + nd = 3U; +} + +void psinput(phasespace_hhc *ps, double& s) +{ + // --- fastNLO user: set the total c.m. energy squared in GeV^2 + s = 49000000.; // LHC First Run 7000 GeV + // You can use your own phase generator. + // Here we use the default. + ps = 0; +} + +// --- fastNLO user: modify the jet selection in userfunc (default = cutting in |y| min, |y| max and pt min) +// (the return value must be true for jets to be UNselected) +struct fNLOSelector { + fNLOSelector(double ymin, double ymax, double ptmin): + _ymin (ymin), _ymax (ymax), _ptmin (ptmin){}; + double _ymin, _ymax, _ptmin; + bool operator() (const lorentzvector<double> &a) {return ! (_ymin <= abs(a.rapidity()) && abs(a.rapidity()) < _ymax && _ptmin <= a.perp());}; +}; + +// --- fastNLO user: modify the jet sorting in userfunc (default = descending in jet pt) +struct fNLOSorter { + bool operator() (const lorentzvector<double> &a, const lorentzvector<double> &b) {return (a.perp() > b.perp());}; +}; + +void UserHHC::userfunc(const event_hhc& p, const amplitude_hhc& amp) +{ + + // --- fastNLO user: in this scenario run jet algo with two different jet sizes R + static const double R[] = {0.5, 0.7}; + const vector<double> & scalevars = ftable->GetScaleVariations(); + + //jet size R loop + for (unsigned int i=0; i < sizeof(R)/sizeof(R[0]); i++) { + // --- fastNLO user: set the jet size and run the jet algorithm + pj = jetclus(p,R[i]); + + + // --- select jets in y or eta and ptjmin (failing jets are moved to the end of the jet array pj!) + static fNLOSelector SelJets(YJMIN,YJMAX,PTJMIN); + // --- count number of selected jets left at this stage + size_t njet = std::remove_if(pj.begin(), pj.end(), SelJets) - pj.begin(); + + //jet loop + for (unsigned int j = 1; j <= njet; j++) { + // Get jet quantities + double pt = pj[j].perp(); + // --- preset the renormalization and factorization scale to jet pT + // --- (can get overwritten below with jet pT bin center -> other scenario) + double mu = pt; + //vector<fnloEvent> contribs = UsefulNlojetTools::GetFixedScaleNlojetContribHHC(p,amp,mu); + vector<vector<fnloEvent> > contribs = UsefulNlojetTools::GetFixedScaleNlojetContribHHC(p,amp,mu,scalevars); + // scenario specific quantites + fnloScenario scen; + scen.SetObservableDimI( R[i] , 0 ); + scen.SetObservableDimI( pt , 1 ); + scen.SetObsScale1( mu ); // must be consistent with 'mu' from contribs + ftable->FillAllSubprocesses(contribs,scen); + } // --- end: jet loop + } // --- end: jet size loop +} // --- end: fastNLO user playground + + +//------ DON'T TOUCH THIS PART! ------ +void UserHHC::initfunc(unsigned int) +{ + // --- Initialize event counters + nevents = 0; + // Set some defaults + if (nwrite==0) nwrite = 5000000; +} + +void UserHHC::end_of_event(){ + nevents += 1; + // --- store table + if (( (unsigned long)nevents % nwrite)==0){ + printf ("fastNLO: No. events: %.3G writing table ...\n",(double)nevents); + ftable->SetNumberOfEvents(nevents); + ftable->WriteTable(); + } +} + +void UserHHC::phys_output(const std::basic_string<char>& __file_name, + unsigned long __save, bool __txt) +{ + nwrite = __save; + InitFastNLO(__file_name); +} + +void UserHHC::InitFastNLO(const std::basic_string<char>& __file_name) +{ + // create table and read in steering... + cout<<"\n ---------------------------------------------------------------\n"<<endl; + ftable = new fastNLOCreate("fnl2380ak57v22.str"); + + // obtain relevant variables from nlojet + ftable->SetEcms(UsefulNlojetTools::GetEcms()); + ftable->SetLoOrder(UsefulNlojetTools::GetNj()); + ftable->SetOrderOfAlphasOfCalculation(UsefulNlojetTools::GetOrderOfRun(__file_name)); + + // set filename, which is specified through command line + string tabFilename = __file_name.c_str(); + tabFilename += "_v22.tab"; + ftable->SetFilename(tabFilename); + + // Cuts on jets + // Values are read vom steering file + // smallest |(pseudo-)rapidity| for jets to be considered + YJMIN = DOUBLE(YJMIN); + // largest |(pseudo-)rapidity| for jets to be considered + YJMAX = DOUBLE(YJMAX); + // lowest pT for jets to be considered + PTJMIN = DOUBLE(PTJMIN); + + + // give information to hb. + //ftable->Print(); +} + diff --git a/v2.6/generators/nlojet++/interface/data/dev/fnl2380ak57v22.str b/v2.6/generators/nlojet++/interface/data/dev/fnl2380ak57v22.str new file mode 100644 index 0000000000000000000000000000000000000000..1f36223310d28b2706201b04b00c960c4a06c5d6 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/dev/fnl2380ak57v22.str @@ -0,0 +1,262 @@ +! -------------------------------------------------------------- ! +! +! A steering file for creating a fastNLO table (with nlojet++) +! +! -------------------------------------------------------------- ! + + + +! -------------------------------------------------------------- ! +! +! Generator and process specific variables. +! ( A change of these variable partly requires new coding. ) +! +! -------------------------------------------------------------- ! +OutputPrecision 8 ! Number of decimal values in output table +FlexibleScaleTable false ! currently only flexible scale tables implemented. +ApplyPDFReweighting true ! Apply reweighting of pdfs for an optimized interpolation. (true) +NPDF 2 ! number of PDFs involved (only 2 is implemented) +PDF1 2212 ! PDF of first hadron (following PDG convention). Must agree with values from nlojet-module. +PDF2 2212 ! PDF of second hadron (following PDG convention). Must agree with values from nlojet-module. +NPDFDim 1 ! Internal way to store PDF linear combinations. Use 1 for hadron-hadron collisions (half-matrix storage) +UnitsOfCoefficients 12 ! Units of coeffients as passed to fastNLO (negative power of 10: pb->12, fb->15) + +! number of subprocesses of the considered process. +! Since the calculation order is obtained from generator, only the necessary variable is used. +NSubProcessesLO 6 ! Flexible scale tables store 7 number of processes in LO, although only 6 are required. +NSubProcessesNLO 7 +NSubProcessesNNLO 7 +AsymmetricProcesses {{ ! specify processes that need to to be exchanged in half-matrix notation, when xmin>xmax + ProcID AsymProcID + 5 6 + 6 5 +}} + +IPDFdef1 3 ! Define PDF linear combinations corresponding to partonic subprocesses (hadron-hadron: 3) +IPDFdef2 1 ! Flag to define PDF linear combinations (dependent on IPDFdef1. Use 1 for jet-production in pp/ppbar) +IPDFdef3LO 1 ! Unique identifier (dependent on IPDFdef1, IPDFdef2) for specifying the PDF linear combinations. +IPDFdef3NLO 2 ! Unique identifier (dependent on IPDFdef1, IPDFdef2) for specifying the PDF linear combinations. +IPDFdef3NNLO 2 ! Unique identifier (dependent on IPDFdef1, IPDFdef2) for specifying the PDF linear combinations. + + +! Descritption of used generator code. Include also citations here! +! Embrace each single line in quotation marks. +CodeDescription { + "NLOJet++_4.1.3" + "Z. Nagy, Phys. Rev. Lett. 88, 122003 (2002)," + "Z. Nagy, Phys. Rev. D68, 094002 (2003)." +} +! -------------------------------------------------------------- ! + + + + +! -------------------------------------------------------------- ! +! Variables which are obtained and superseeded from NLOJET++, but may be +! useful for other generators. +! -------------------------------------------------------------- ! + +! ------------------------------- +! Center of mass energy (is obtained from nlojet) +CenterOfMassEnergy + +! ------------------------------- +! Order of alpha_s of the leading-order process (is obtained from nlojet) +LeadingOrder 2 + +! ------------------------------- +! Order of alpha_s of the calculation (is obtained from nlojet) +OrderInAlphasOfCalculation 2 + +! ------------------------------- +! Specify filename of output fastNLO table +OutputFilename test.tab + +! -------------------------------------------------------------- ! + + +! -------------------------------------------------------------- ! +! Cuts applied in scenario code + +! Minimum |y| of the jet +YJMIN 0.0 +! Maximum |y| of the jet +YJMAX 0.5 +! Minimum pT of the jet +PTJMIN 40. +! -------------------------------------------------------------- ! + + + + +! -------------------------------------------------------------- ! +! Choose interpolation kernel and distance measure +! +! Currently implemented interpolation kernels +! - CatmulRom +! +! Currently implemented distance measures +! - linear +! - loglog025 eq. to (log(log(4*x))) +! - log10 +! - sqrtlog10 eq. to sqrt(log_10(x)) +! -------------------------------------------------------------- ! +X_Kernel "CatmulRom" +X_DistanceMeasure "sqrtlog10" +X_NNodes 16 ! +X_NoOfNodesPerMagnitude false ! + +Mu1_Kernel "CatmulRom" +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +! Mu2_Kernel "CatmulRom" ! Scale2 not used for fixed-scale tables +! Mu2_DistanceMeasure loglog025 +! Mu2_NNodes 4 + + + +! -------------------------------------------------------------- ! +! Scale variations (only needed for fixed-scale tables) +! List of scale factors must include factor '1' +! Scale factors will be ordered according to fastNLO convention: +! (1,nmin,...,nmax) +! -------------------------------------------------------------- ! +ScaleVariationFactors { + 0.5 1.0 2.0 +} + + + +! -------------------------------------------------------------- ! +! +! Scenario specific variables +! +! -------------------------------------------------------------- ! + + +! ------------------------------- +! Unit in barns of the publication +! (negative power of 10) +! pb: 12 +! fb: 15 +! ------------------------------- +PublicationUnits 12 + + + + +! ------------------------------- +! Description of scenario +! (Write each line of description in quotation marks) +! ------------------------------- +ScenarioName fnl2380ak0507y0 +ScenarioDescription { + "d2sigma-jet_dpTdy_[pb_GeV]" + "CMS_Collaboration" + "Inclusive_Jet_pT" + "anti-kT_R=0.5,0.7" + "CMS-PAPER-SMP-13-002" + "provided by:" + "fastNLO_2.1.0" + "If you use this table, please cite:" + " D. Britzger, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1208.3641" +} + + + +! ------------------------------- +! Specify if binning is read from this file +! ------------------------------- +ReadBinningFromSteering false + + +! ------------------------------- +! How many differential dimensions +! are measured. +! Number must be consistent with DimensionLabels, and DimensionIsDifferential, ... +! - 1: read in 'SingleDiffBinning' +! - 2: read in 'DoubleDifferentialBinning' +! - 3: read in 'TripleDifferentialBinning' +! ------------------------------- +DifferentialDimension 2 + + +! ------------------------------- +! Labels for the measurement dimension +! ------------------------------- +DimensionLabels { +"R" +"pT_[GeV]" +} + +! If flexible-scale table: specify name of the variable of the two scales. +! If standard table is demanded, only 'ScaleDescriptionScale1' is required. +ScaleDescriptionScale1 "pT_jet_[GeV]" +! ScaleDescriptionScale2 "pT_2 [GeV]" ! scale2 not used for fixed-scale tables + + +! -------------------------------- +! Binning +! - - - - - - - - - - - - - - - - +! Use either 'SingleDiffBinning' or +! 'DoubleDifferentialBinning' according to +! specification of 'DifferentialDimension' +! (Triple-differential, and non-differential measurements not yet implemented) +! -------------------------------- + +! Example !! +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension ----" + 0.4 0.6 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 790. 846. 905. 967. 1032. 1101. 1172. 1248. 1327. + 0.6 0.8 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 790. 846. 905. 967. 1032. 1101. 1172. 1248. 1327. + + }} + +! ------------------------------- +! Is this a differential measurement in dimension X? +! Specify flag for each dimension. +! - 0: NO +! - 1: YES +! - 2: Divide Cross Section by bin width of that dimension +! ------------------------------- +DimensionIsDifferential { + 0 2 +} + + +! -------------------------------- +! Calculate bin width from lower and upper bin boundary +! - if 'false': +! specify a table of the width of every bin: +! BinWidth { x1 x2 x3 ... } +! - if 'true': +! Specify a multiplicative factor for bin width (useful for |y|-measurements) +! +! If the measurement is not divided by the bin width, then specify +! 'CalculateBinWidth true' and use 'DimensionIsDifferential' equal '0' for each dimension. +! -------------------------------- + +CalculateBinWidth true +BinWidthFactor 1. + + + +! ----------------------------------------------------------! +! Include automatically generated warm-up +! by convention it must be: +! <steerfile>_<ScenarioName>_warmup.txt +! with +! - <steerfile> name if this file, without .str and .steer +! - <ScenarioName> as given above +! +! If no Warmup file found, fastNLO seeks for warmup file +! by itsself. +! It is also possible to copy the warmup values directly +! into this file (in order to keep information together). +! +! Ignore 'error' message from 'read_steer'. +! ----------------------------------------------------------! +#include:FastNLOExample_${ScenarioName}_warmup.txt + + diff --git a/v2.6/generators/nlojet++/interface/data/dev/fnl2522adiff_v23_fix.str b/v2.6/generators/nlojet++/interface/data/dev/fnl2522adiff_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..5673a089f9554aa4d3345c82f640532161cb06c7 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/dev/fnl2522adiff_v23_fix.str @@ -0,0 +1,168 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl2522adiff_v23_fix +ScenarioDescription { + "d2sigma-dijet_ddPhi_dpT_max_[pb_GeV]" + "CMS_Collaboration" + "Azimuthal_Decorrelation" + "anti-kT_R=0.7" + "CMS-PAS-SMP-14-015." + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.7 # Jet size parameter: Required for all jets +ptjmin 100. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 5.0 # Maximal jet rapidity +Njetmin 2 # Minimal number of jets required to be in preselected phase space +#ptj1min 60. # Minimal jet pT for leading jet + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "|y_max|" # This defines the observables to be calculated! + "Mjj_[GeV]" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 2. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "<pT_1,2>_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "Mjj/2_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.5 197. 296. 419. 565. 740. 944. 1181. 1455. 1770. 2132. 2546. 3019. 3416. 4010. + 0.5 1.0 270. 386. 526. 693. 890. 1118. 1383. 1687. 2037. 2438. 2895. 3416. 4010. + 1.0 1.5 419. 565. 740. 944. 1181. 1455. 1770. 2132. 2546. 3147. 3854. 4509. + 1.5 2.0 565. 740. 944. 1181. 1455. 1770. 2132. 2546. 3019. 3558. 5058. + 2.0 2.5 1000. 1246. 1530. 1856. 2231. 2659. 3147. 3704. 5058. +}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 7000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJetEvents.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/dev/fnl3232e_v23_fix.str b/v2.6/generators/nlojet++/interface/data/dev/fnl3232e_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..49df229db0935d7b9c11404b039b9c8e4c5343aa --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/dev/fnl3232e_v23_fix.str @@ -0,0 +1,164 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl3232e_v23_fix +ScenarioDescription { + "d2sigma-jet_dpT_dy_[pb_GeV]" + "CMS_Collaboration" + "Forward_Jet_pT" + "anti-kT_R=0.7" + "CMS-PAPER-SMP-14-001." + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.7 # Jet size parameter: Required for all jets +ptjmin 21. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 3.2 # Minimal jet rapidity +yjmax 4.7 # Maximal jet rapidity + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "|y|" # This defines the observables to be calculated! + "pT_[GeV]" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 2. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "pT_jet_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 3.2 4.7 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. +}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 8000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJets.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/dev/fnl3732dena_v23_fix.str b/v2.6/generators/nlojet++/interface/data/dev/fnl3732dena_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..c634d55f4fe5c5e6c3954b835610bb0560303269 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/dev/fnl3732dena_v23_fix.str @@ -0,0 +1,163 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl3732dena_v23_fix +ScenarioDescription { + "dsigma-jet2+_d<pT_1,2>_[pb_GeV]" + "CMS_Collaboration" + "Inclusive_Dijet_pT" + "anti-kT_R=0.7" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.7 # Jet size parameter: Required for all jets +ptjmin 150. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 5.0 # Maximal jet rapidity +Njetmin 2 # Minimal number of jets required to be in preselected phase space +ycjjmax 2.5 # Maximal jet rapidity for leading two jets and further central jets + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 1 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "<pT_1,2>_[GeV]" # This defines the observables to be calculated! +} +DimensionIsDifferential { # Specify for each dimension whether + 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 1. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "<pT_1,2>_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +SingleDifferentialBinning { + 150. 175. 200. 225. 250. 275. 300. 330. 360. 390. 420. 450. 480. 510. 540. 570. 600. 640. 680. 720. 760. 800. 850. 900. 950. 1000. 1060. 1120. 1180. 1250. 1320. 1390. 1460. 1530. 1600. 1680. 1760. 1840. 1920. 2000. +} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 8000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJetEvents.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/dev/fnl3732denht_v23_fix.str b/v2.6/generators/nlojet++/interface/data/dev/fnl3732denht_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..751c0ccf3e5eb09c2e8877bf474599fd564706ba --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/dev/fnl3732denht_v23_fix.str @@ -0,0 +1,163 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl3732denht_v23_fix +ScenarioDescription { + "dsigma-jet2+_dHT/2_[pb_GeV]" + "CMS_Collaboration" + "Inclusive_Dijet_HT" + "anti-kT_R=0.7" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.7 # Jet size parameter: Required for all jets +ptjmin 100. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 5.0 # Maximal jet rapidity +Njetmin 2 # Minimal number of jets required to be in preselected phase space +ycjjmax 2.5 # Maximal jet rapidity for leading two jets and further central jets + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 1 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "HT/2_[GeV]" # This defines the observables to be calculated! +} +DimensionIsDifferential { # Specify for each dimension whether + 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 1. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "HT/2_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +SingleDifferentialBinning { + 150. 175. 200. 225. 250. 275. 300. 330. 360. 390. 420. 450. 480. 510. 540. 570. 600. 640. 680. 720. 760. 800. 850. 900. 950. 1000. 1060. 1120. 1180. 1250. 1320. 1390. 1460. 1530. 1600. 1680. 1760. 1840. 1920. 2000. +} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 8000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJetEvents.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/dev/fnl3732denhta_v23_fix.str b/v2.6/generators/nlojet++/interface/data/dev/fnl3732denhta_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..6253dc59d7e3677f321a6fed6b17b206ef680632 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/dev/fnl3732denhta_v23_fix.str @@ -0,0 +1,163 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl3732denhta_v23_fix +ScenarioDescription { + "dsigma-jet2+_dHT/2_[pb_GeV]" + "CMS_Collaboration" + "Inclusive_Dijet_HT" + "anti-kT_R=0.7" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.7 # Jet size parameter: Required for all jets +ptjmin 150. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 5.0 # Maximal jet rapidity +Njetmin 2 # Minimal number of jets required to be in preselected phase space +ycjjmax 2.5 # Maximal jet rapidity for leading two jets and further central jets + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 1 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "HT/2_[GeV]" # This defines the observables to be calculated! +} +DimensionIsDifferential { # Specify for each dimension whether + 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 1. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "HT/2_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +SingleDifferentialBinning { + 225. 250. 275. 300. 330. 360. 390. 420. 450. 480. 510. 540. 570. 600. 640. 680. 720. 760. 800. 850. 900. 950. 1000. 1060. 1120. 1180. 1250. 1320. 1390. 1460. 1530. 1600. 1680. 1760. 1840. 1920. 2000. +} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 8000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJetEvents.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/dev/fnl3732numa_v23_fix.str b/v2.6/generators/nlojet++/interface/data/dev/fnl3732numa_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..68b46ebf90b53bb7c17b5bdc33b75d6635429de6 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/dev/fnl3732numa_v23_fix.str @@ -0,0 +1,164 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl3732numa_v23_fix +ScenarioDescription { + "dsigma-jet3+_d<pT_1,2>_[pb_GeV]" + "CMS_Collaboration" + "Inclusive_3jet_pT" + "anti-kT_R=0.7" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.7 # Jet size parameter: Required for all jets +ptjmin 150. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 5.0 # Maximal jet rapidity +Njetmin 3 # Minimal number of jets required to be in preselected phase space +ycjjmax 2.5 # Maximal jet rapidity for leading two jets and further central jets +Ncjetmin 3 # Minimal number of central jets + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 3 # Number of jets for the LO process +DifferentialDimension 1 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "<pT_1,2>_[GeV]" # This defines the observables to be calculated! +} +DimensionIsDifferential { # Specify for each dimension whether + 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 1. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "<pT_1,2>_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +SingleDifferentialBinning { + 150. 175. 200. 225. 250. 275. 300. 330. 360. 390. 420. 450. 480. 510. 540. 570. 600. 640. 680. 720. 760. 800. 850. 900. 950. 1000. 1060. 1120. 1180. 1250. 1320. 1390. 1460. 1530. 1600. 1680. 1760. 1840. 1920. 2000. +} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 8000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJetEvents.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/dev/fnl3732numht_v23_fix.str b/v2.6/generators/nlojet++/interface/data/dev/fnl3732numht_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..2ad87238c3b41fa53f9e6eeaa6ef68f05a246ffa --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/dev/fnl3732numht_v23_fix.str @@ -0,0 +1,164 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl3732numht_v23_fix +ScenarioDescription { + "dsigma-jet3+_dHT/2_[pb_GeV]" + "CMS_Collaboration" + "Inclusive_3jet_HT" + "anti-kT_R=0.7" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.7 # Jet size parameter: Required for all jets +ptjmin 100. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 5.0 # Maximal jet rapidity +Njetmin 3 # Minimal number of jets required to be in preselected phase space +ycjjmax 2.5 # Maximal jet rapidity for leading two jets and further central jets +Ncjetmin 3 # Minimal number of central jets + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 3 # Number of jets for the LO process +DifferentialDimension 1 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "HT/2_[GeV]" # This defines the observables to be calculated! +} +DimensionIsDifferential { # Specify for each dimension whether + 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 1. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "HT/2_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +SingleDifferentialBinning { + 150. 175. 200. 225. 250. 275. 300. 330. 360. 390. 420. 450. 480. 510. 540. 570. 600. 640. 680. 720. 760. 800. 850. 900. 950. 1000. 1060. 1120. 1180. 1250. 1320. 1390. 1460. 1530. 1600. 1680. 1760. 1840. 1920. 2000. +} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 8000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJetEvents.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/dev/fnl3732numhta_v23_fix.str b/v2.6/generators/nlojet++/interface/data/dev/fnl3732numhta_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..d6b746b4398e3fed6af82e89c25edd74eac11380 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/dev/fnl3732numhta_v23_fix.str @@ -0,0 +1,164 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl3732numhta_v23_fix +ScenarioDescription { + "dsigma-jet3+_dHT/2_[pb_GeV]" + "CMS_Collaboration" + "Inclusive_3jet_HT" + "anti-kT_R=0.7" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.7 # Jet size parameter: Required for all jets +ptjmin 150. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 5.0 # Maximal jet rapidity +Njetmin 3 # Minimal number of jets required to be in preselected phase space +ycjjmax 2.5 # Maximal jet rapidity for leading two jets and further central jets +Ncjetmin 3 # Minimal number of central jets + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 3 # Number of jets for the LO process +DifferentialDimension 1 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "HT/2_[GeV]" # This defines the observables to be calculated! +} +DimensionIsDifferential { # Specify for each dimension whether + 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 1. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "HT/2_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +SingleDifferentialBinning { + 225. 250. 275. 300. 330. 360. 390. 420. 450. 480. 510. 540. 570. 600. 640. 680. 720. 760. 800. 850. 900. 950. 1000. 1060. 1120. 1180. 1250. 1320. 1390. 1460. 1530. 1600. 1680. 1760. 1840. 1920. 2000. +} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 8000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJetEvents.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/dev/fnl4350b_v23_fix.str b/v2.6/generators/nlojet++/interface/data/dev/fnl4350b_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..36d03af4b5034af1d6933af05d90ced8976d9c83 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/dev/fnl4350b_v23_fix.str @@ -0,0 +1,175 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl4350b_v23_fix +ScenarioDescription { + "d2sigma-jet_dpTdeta_[pb_GeV]" + "CMS_Collaboration" + "Inclusive_Jet_pT" + "anti-kT_R=0.5" + "CMS-HIN" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) +ScaleDescriptionScale1 "pT_jet_[GeV]" # Specify scale name and unit +ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +Rjet 0.5 # Jet size parameter (anti-kT) +ptjmin 22. # Minimal jet pT +#yjmin 0.0 # Minimal jet rapidity +#yjmax 4.4 # Maximal jet rapidity +etajmin 0.0 # Minimal jet pseudorapidity +etajmax 2.0 # Maximal jet pseudorapidity + +# -------------------------------------------------------------------- # +# Observable dimensioning and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +DifferentialDimension 2 +DimensionLabels { # Labels (symbol and unit) for the measurement dimension (from outer to inner "loop") + "|eta|" + "pT_[GeV]" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 2. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +# Example for SingleDifferentialBinning: +#SingleDifferentialBinning { +# 7. 11. 18. 30. 50. 100. +#} + +# Example for DoubleDifferentialBinning: +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 2.0 22. 27. 33. 39. 47. 55. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 790. 967. +}} + +# Example for TripleDifferentialBinning: +#TripleDifferentialBinning {{ +# 1stDimLo 1stDimUp 2ndDimLo 2ndDimUp "----- Array of bin-grid for 3rd dimension -----" +# 100. 150. -1.0 0.0 7. 11. 18. 30. 50. +# 150. 200. -1.0 0.0 7. 11. 18. 30. 50. +# 200. 400. 0.0 1.5 7. 11. 18. 30. 50. +# 400. 700. 0.0 1.5 7. 11. 18. 30. 50. +# 700. 5000. 1.5 2.5 7. 11. 18. 30. 50. +# 5000. 15000. 1.5 2.5 7. 11. 18. 30. 50. +#}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 2760. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveJets.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/dev/fnl5332f_v23_fix.str b/v2.6/generators/nlojet++/interface/data/dev/fnl5332f_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..d16bc2fcb64807c7defa0fd7bbbb7201bfee6762 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/dev/fnl5332f_v23_fix.str @@ -0,0 +1,168 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl5332f_v23_fix +ScenarioDescription { + "d2sigma-jet_dpT_dy_[pb_GeV]" + "CMS_Collaboration" + "Inclusive_Jet_pT" + "anti-kT_R=0.7" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.7 # Jet size parameter: Required for all jets +ptjmin 56. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 3.0 # Maximal jet rapidity + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "|y|" # This defines the observables to be calculated! + "pT_[GeV]" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 2. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "pT_jet_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.5 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 846. 905. 967. 1032. 1101. 1172. 1248. 1327. 1410. 1497. 1588. 1684. 1784. 1890. 2000. 2116. 2238. 2366. 2500. 2640. 2787. 2941. 3103. 3273. 3450. 3637. 3832. 4037. 4252. 4477. 4713. 4961. 5220. 5492. 5777. 6076. 6389. 6717. + 0.5 1.0 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 846. 905. 967. 1032. 1101. 1172. 1248. 1327. 1410. 1497. 1588. 1684. 1784. 1890. 2000. 2116. 2238. 2366. 2500. 2640. 2787. 2941. 3103. 3273. 3450. 3637. 3832. 4037. 4252. 4477. 4713. 4961. 5220. 5492. 5777. + 1.0 1.5 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 846. 905. 967. 1032. 1101. 1172. 1248. 1327. 1410. 1497. 1588. 1684. 1784. 1890. 2000. 2116. 2238. 2366. 2500. 2640. 2787. 2941. 3103. 3273. 3450. 3637. 3832. 4037. 4252. + 1.5 2.0 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 846. 905. 967. 1032. 1101. 1172. 1248. 1327. 1410. 1497. 1588. 1684. 1784. 1890. 2000. 2116. 2238. 2366. 2500. 2640. 2787. + 2.0 2.5 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 846. 905. 967. 1032. 1101. 1172. 1248. 1327. 1410. 1497. 1588. 1684. + 2.5 3.0 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 846. 905. 967. 1032. 1101. +}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 13000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJets.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/dev/fnl5332g_v23_fix.str b/v2.6/generators/nlojet++/interface/data/dev/fnl5332g_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..f0eeafed37f63059ebd87abd8dab8f8b8f803441 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/dev/fnl5332g_v23_fix.str @@ -0,0 +1,170 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl5332g_v23_fix +ScenarioDescription { + "d2sigma-jet_dpT_dy_[pb_GeV]" + "CMS_Collaboration" + "Inclusive_Jet_pT" + "anti-kT_R=0.7" + "CMS-PAS-SMP-15-007." + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.7 # Jet size parameter: Required for all jets +ptjmin 56. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 4.7 # Maximal jet rapidity + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "|y|" # This defines the observables to be calculated! + "pT_[GeV]" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 2. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "pT_jet_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.5 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 790. 846. 905. 967. 1032. 1101. 1172. 1248. 1327. 1410. 1497. 1588. 1684. 1784. 1890. 2000. 2116. 2238. 2366. 2500. 2640. 2787. 2941. 3103. 3273. 3450. 3637. 3832. 4037. 4252. 4477. 4713. 4961. 5220. 5492. 5777. 6076. 6389. 6717. + 0.5 1.0 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 790. 846. 905. 967. 1032. 1101. 1172. 1248. 1327. 1410. 1497. 1588. 1684. 1784. 1890. 2000. 2116. 2238. 2366. 2500. 2640. 2787. 2941. 3103. 3273. 3450. 3637. 3832. 4037. 4252. 4477. 4713. 4961. 5220. 5492. 5777. + 1.0 1.5 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 790. 846. 905. 967. 1032. 1101. 1172. 1248. 1327. 1410. 1497. 1588. 1684. 1784. 1890. 2000. 2116. 2238. 2366. 2500. 2640. 2787. 2941. 3103. 3273. 3450. 3637. 3832. 4037. 4252. + 1.5 2.0 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 790. 846. 905. 967. 1032. 1101. 1172. 1248. 1327. 1410. 1497. 1588. 1684. 1784. 1890. 2000. 2116. 2238. 2366. 2500. 2640. 2787. + 2.0 2.5 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 790. 846. 905. 967. 1032. 1101. 1172. 1248. 1327. 1410. 1497. 1588. 1684. + 2.5 3.0 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 790. 846. 905. 967. 1032. 1101. + 3.2 4.7 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. +}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 13000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJets.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/dev/fnl5332h_v23_fix.str b/v2.6/generators/nlojet++/interface/data/dev/fnl5332h_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..128128b30eb39d02930826a45792f21f9b221fb1 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/dev/fnl5332h_v23_fix.str @@ -0,0 +1,168 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl5332h_v23_fix +ScenarioDescription { + "d2sigma-jet_dpT_dy_[pb_GeV]" + "CMS_Collaboration" + "Inclusive_Jet_pT" + "anti-kT_R=0.7" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.7 # Jet size parameter: Required for all jets +ptjmin 56. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 2.5 # Maximal jet rapidity + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "|y|" # This defines the observables to be calculated! + "pT_[GeV]" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 2. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "pT_jet_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.5 56. 74. 97. 133. 174. 220. 272. 330. 395. 468. 548. 638. 737. 846. 967. 1101. 1248. 1410. 1588. 1784. 2000. 2238. 2500. 2787. 3103. 3450. 3832. + 0.5 1.0 56. 74. 97. 133. 174. 220. 272. 330. 395. 468. 548. 638. 737. 846. 967. 1101. 1248. 1410. 1588. 1784. 2000. 2238. 2500. 2787. 3103. 3450. + 1.0 1.5 56. 74. 97. 133. 174. 220. 272. 330. 395. 468. 548. 638. 737. 846. 967. 1101. 1248. 1410. 1588. 1784. 2000. 2238. 2500. 2787. 3103. + 1.5 2.0 56. 74. 97. 133. 174. 220. 272. 330. 395. 468. 548. 638. 737. 846. 967. 1101. 1248. 1410. 1588. 1784. 2000. 2238. + 2.0 2.5 56. 74. 97. 133. 174. 220. 272. 330. 395. 468. 548. 638. 737. 846. 967. 1101. 1248. 1410. 1588. 1784. +}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 13000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +# OutputFilename InclusiveNJets.tab # Filename of fastNLO output table; overwritten from NLOJet++ and cmdline arg +# # e.g. scenname-hhc-born|nlo-2|3jet.tab +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +OutputCompression true # Write gzipped output table +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/dev/fnl5350c_v23_fix.str b/v2.6/generators/nlojet++/interface/data/dev/fnl5350c_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..fb727c013b0ef206d7c673c43d721795fb10c3cb --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/dev/fnl5350c_v23_fix.str @@ -0,0 +1,179 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl5350c_v23_fix +ScenarioDescription { + "d2sigma-jet_dpTdeta_[pb_GeV]" + "CMS_Collaboration" + "Inclusive_Jet_pT" + "anti-kT_R=0.5" + "CMS-HIN" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) +ScaleDescriptionScale1 "pT_jet_[GeV]" # Specify scale name and unit +ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +Rjet 0.5 # Jet size parameter (anti-kT) +ptjmin 21. # Minimal jet pT +#yjmin 0.0 # Minimal jet rapidity +#yjmax 4.4 # Maximal jet rapidity +etajmin 0.0 # Minimal jet pseudorapidity +etajmax 2.5 # Maximal jet pseudorapidity + +# -------------------------------------------------------------------- # +# Observable dimensioning and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +DifferentialDimension 2 +DimensionLabels { # Labels (symbol and unit) for the measurement dimension (from outer to inner "loop") + "|eta|" + "pT_[GeV]" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 2. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +# Example for SingleDifferentialBinning: +#SingleDifferentialBinning { +# 7. 11. 18. 30. 50. 100. +#} + +# Example for DoubleDifferentialBinning: +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.5 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 1000. + 0.5 1.0 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 1000. + 1.0 1.5 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 1000. + 1.5 2.0 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 1000. + 2.0 2.5 21. 24. 28. 32. 37. 43. 49. 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 1000. +}} + +# Example for TripleDifferentialBinning: +#TripleDifferentialBinning {{ +# 1stDimLo 1stDimUp 2ndDimLo 2ndDimUp "----- Array of bin-grid for 3rd dimension -----" +# 100. 150. -1.0 0.0 7. 11. 18. 30. 50. +# 150. 200. -1.0 0.0 7. 11. 18. 30. 50. +# 200. 400. 0.0 1.5 7. 11. 18. 30. 50. +# 400. 700. 0.0 1.5 7. 11. 18. 30. 50. +# 700. 5000. 1.5 2.5 7. 11. 18. 30. 50. +# 5000. 15000. 1.5 2.5 7. 11. 18. 30. 50. +#}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 5020. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveJets.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/dev/fnl5350eta0v22.str b/v2.6/generators/nlojet++/interface/data/dev/fnl5350eta0v22.str new file mode 100644 index 0000000000000000000000000000000000000000..e80fea1d1be9a7c57a70b07146ec881c27ad1172 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/dev/fnl5350eta0v22.str @@ -0,0 +1,171 @@ +# -*-sh-*- +# -------------------------------------------------------------- # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# -------------------------------------------------------------- # + +# -------------------------------------------------------------- # +# +# General fastNLO settings +# +# -------------------------------------------------------------- # +GlobalVerbosity INFO # Global output verbosity of fastNLO toolkit, def.=INFO + # (and user scenario code if implemented). + # Possible values are: DEBUG,MANUAL,INFO,WARNING,ERROR,SILENT +OutputFilename table.tab # Filename of output fastNLO table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size) or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1,nmin,...,nmax) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now. +#>>AlternativeWarmupFilename.txt # Specify alternative filename to read from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# -------------------------------------------------------------- # +# +# Process specific and therefore partially theory-code +# dependend settings +# +# -------------------------------------------------------------- # +CenterOfMassEnergy 5020. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# -------------------------------------------------------------- # +# +# Scenario specific variables +# +# -------------------------------------------------------------- # + +# ------------------------------- +# Description of scenario +# (Write each line of description in quotation marks) +# ------------------------------- +ScenarioName fnl5350eta0v22 +ScenarioDescription { + "d2sigma-jet_dpTdeta_[pb_GeV]" + "CMS_Collaboration" + "Inclusive_Jet_pT" + "anti-kT_R=0.2,0.3,0.4" + "CMS-PAS-HIN" + "provided by:" + "fastNLO_2.1.0" + "If you use this table, please cite:" + " D. Britzger, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1208.3641" +} +ScaleDescriptionScale1 "pT_jet_[GeV]" # Specify scale name and unit +ScaleDescriptionScale2 "Q_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) +PublicationUnits 12 # Unit which data cross sections are provided (negative power of 10, e.g. 12->pb, 15->fb) + +# ------------------------------- +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels, and DimensionIsDifferential, ... below +# - 1: read in 'SingleDifferentialBinning' +# - 2: read in 'DoubleDifferentialBinning' +# - 3: read in 'TripleDifferentialBinning' +# ------------------------------- +DifferentialDimension 2 +DimensionLabels { # Labels (symbol and unit) for the measurement dimension (from outer to inner "loop") + "R" + "pT_[GeV]" +} +DimensionIsDifferential { # Specify for each dimension whether it is + 2 2 # - 0: No, i.e. there are two bin borders, but NO division by this bin width +} # - 1: Point-wise differential, i.e. only one point is given in this dimension + # - 2: Bin-wise differential, i.e. two bin borders and division by this bin width + +# -------------------------------- +# Binning +# - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with +# 'DifferentialDimension' above +# -------------------------------- + +# Example for SingleDifferentialBinning: +#SingleDifferentialBinning { +# 7 11 18 30 50 100 +#} + +# Example for DoubleDifferentialBinning: +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension ----" + 0.15 0.25 22 27 33 39 47 55 64 74 84 97 114 133 153 174 196 220 245 272 300 330 362 395 430 468 507 548 592 638 790 967 + 0.25 0.35 22 27 33 39 47 55 64 74 84 97 114 133 153 174 196 220 245 272 300 330 362 395 430 468 507 548 592 638 790 967 + 0.35 0.45 22 27 33 39 47 55 64 74 84 97 114 133 153 174 196 220 245 272 300 330 362 395 430 468 507 548 592 638 790 967 +}} + +# Example for TripleDifferentialBinning: +#TripleDifferentialBinning {{ +# 1stDimLo 1stDimUp 2ndDimLo 2ndDimUp "----- Array of bin-grid for 3rd dimension ----" +# 100 150 -1 0. 7 11 18 30 50 +# 150 200 -1. 0. 7 11 18 30 50 +# 200 400 0. 1.5 7 11 18 30 50 +# 400 700 0. 1.5 7 11 18 30 50 +# 700 5000 1.5 2.5 7 11 18 30 50 +# 5000 15000 1.5 2.5 7 11 18 30 50 +#}} + +# -------------------------------- +# Define cross-section normalization +# - - - - - - - - - - - - - - - - +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +# KR: Here we have one |eta| bin to normalize to, 2*0.3, but three jet sizes NOT to normalize to, 10. +BinSizeFactor 6. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +# # If 'CalculateBinSize' is 'false' provide table with bin widths for normalization +#BinSize { x1 x2 x3 ... } + # If the measurement is not divided by the bin width, then specify + # 'CalculateBinSize' 'true' and use 'DimensionIsDifferential' equal '0' for each dimension. + + + +# -------------------------------------------------------------- # +# +# Specific fastNLO settings (normally do not need to be changed) +# +# -------------------------------------------------------------- # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# +# Currently implemented interpolation kernels +# - Catmull +# - Lagrange +# - OneNode +# - Linear +# +# Currently implemented distance measures +# - linear +# - loglog025 eq. to (log(log(4*x))) +# - log10 +# - sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +# Mu2_Kernel "CatmullRom" # Scale2 not used for fixed-scale tables +# Mu2_DistanceMeasure loglog025 +# Mu2_NNodes 4 diff --git a/v2.6/generators/nlojet++/interface/data/dev/fnl5362g_v23_fix.str b/v2.6/generators/nlojet++/interface/data/dev/fnl5362g_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..e2d77a57e31f5a1f147593b104d933efa87c11ff --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/dev/fnl5362g_v23_fix.str @@ -0,0 +1,170 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl5362g_v23_fix +ScenarioDescription { + "d2sigma-jet_dpT_dy_[pb_GeV]" + "CMS_Collaboration" + "Inclusive_Jet_pT" + "anti-kT_R=0.4" + "CMS-PAS-SMP-15-007." + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.4 # Jet size parameter: Required for all jets +ptjmin 56. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 4.7 # Maximal jet rapidity + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "|y|" # This defines the observables to be calculated! + "pT_[GeV]" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 2. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "pT_jet_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.5 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 790. 846. 905. 967. 1032. 1101. 1172. 1248. 1327. 1410. 1497. 1588. 1684. 1784. 1890. 2000. 2116. 2238. 2366. 2500. 2640. 2787. 2941. 3103. 3273. 3450. 3637. 3832. 4037. 4252. 4477. 4713. 4961. 5220. 5492. 5777. 6076. 6389. 6717. + 0.5 1.0 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 790. 846. 905. 967. 1032. 1101. 1172. 1248. 1327. 1410. 1497. 1588. 1684. 1784. 1890. 2000. 2116. 2238. 2366. 2500. 2640. 2787. 2941. 3103. 3273. 3450. 3637. 3832. 4037. 4252. 4477. 4713. 4961. 5220. 5492. 5777. + 1.0 1.5 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 790. 846. 905. 967. 1032. 1101. 1172. 1248. 1327. 1410. 1497. 1588. 1684. 1784. 1890. 2000. 2116. 2238. 2366. 2500. 2640. 2787. 2941. 3103. 3273. 3450. 3637. 3832. 4037. 4252. + 1.5 2.0 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 790. 846. 905. 967. 1032. 1101. 1172. 1248. 1327. 1410. 1497. 1588. 1684. 1784. 1890. 2000. 2116. 2238. 2366. 2500. 2640. 2787. + 2.0 2.5 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 790. 846. 905. 967. 1032. 1101. 1172. 1248. 1327. 1410. 1497. 1588. 1684. + 2.5 3.0 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. 592. 638. 686. 737. 790. 846. 905. 967. 1032. 1101. + 3.2 4.7 56. 64. 74. 84. 97. 114. 133. 153. 174. 196. 220. 245. 272. 300. 330. 362. 395. 430. 468. 507. 548. +}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 13000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJets.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/dev/fnl5362h_v23_fix.str b/v2.6/generators/nlojet++/interface/data/dev/fnl5362h_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..88a11f6e35ed8ea2dd12d3daf1b756324a05076f --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/dev/fnl5362h_v23_fix.str @@ -0,0 +1,168 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl5362h_v23_fix +ScenarioDescription { + "d2sigma-jet_dpT_dy_[pb_GeV]" + "CMS_Collaboration" + "Inclusive_Jet_pT" + "anti-kT_R=0.4" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.4 # Jet size parameter: Required for all jets +ptjmin 56. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 2.5 # Maximal jet rapidity + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "|y|" # This defines the observables to be calculated! + "pT_[GeV]" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 2. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "pT_jet_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 0.0 0.5 56. 74. 97. 133. 174. 220. 272. 330. 395. 468. 548. 638. 737. 846. 967. 1101. 1248. 1410. 1588. 1784. 2000. 2238. 2500. 2787. 3103. 3450. 3832. + 0.5 1.0 56. 74. 97. 133. 174. 220. 272. 330. 395. 468. 548. 638. 737. 846. 967. 1101. 1248. 1410. 1588. 1784. 2000. 2238. 2500. 2787. 3103. 3450. + 1.0 1.5 56. 74. 97. 133. 174. 220. 272. 330. 395. 468. 548. 638. 737. 846. 967. 1101. 1248. 1410. 1588. 1784. 2000. 2238. 2500. 2787. 3103. + 1.5 2.0 56. 74. 97. 133. 174. 220. 272. 330. 395. 468. 548. 638. 737. 846. 967. 1101. 1248. 1410. 1588. 1784. 2000. 2238. + 2.0 2.5 56. 74. 97. 133. 174. 220. 272. 330. 395. 468. 548. 638. 737. 846. 967. 1101. 1248. 1410. 1588. 1784. +}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 13000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +# OutputFilename InclusiveNJets.tab # Filename of fastNLO output table; overwritten from NLOJet++ and cmdline arg +# # e.g. scenname-hhc-born|nlo-2|3jet.tab +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +OutputCompression true # Write gzipped output table +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/dev/fnl5622i_v23_fix.str b/v2.6/generators/nlojet++/interface/data/dev/fnl5622i_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..ddda6457ad482248959c1fac62850653a2cd79d9 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/dev/fnl5622i_v23_fix.str @@ -0,0 +1,173 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl5622i_v23_fix +ScenarioDescription { + "d2sigma-dijet_dChi_dMjj_[pb_GeV]" + "CMS_Collaboration" + "Dijet_Chi" + "anti-kT_R=0.5" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.5 # Jet size parameter: Required for all jets +ptjmin 1. # Minimal jet pT (minimum set in fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 5.0 # Maximal jet rapidity +Njetmin 2 # Minimal number of jets required to be in preselected phase space +ycjjmax 2.5 # Maximal jet rapidity for leading two jets +yboostmax 1.11 # Maximal |yb| = |y1+y2|/2 +ystarmax 1.5 # Maximal y* = |y1-y2|/2 + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "Mjj_[GeV]" # This defines the observables to be calculated! + "Chi" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 1. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "<pT_1,2>_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "Mjj/2_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 1900. 2400. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 12. 14. 16. + 2400. 3000. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 12. 14. 16. + 3000. 3600. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 12. 14. 16. + 3600. 4200. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 12. 14. 16. + 4200. 4800. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 12. 14. 16. + 4800. 5400. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 12. 14. 16. + 5400. 6000. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 12. 14. 16. +}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 13000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJetEvents.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/dev/fnl5662i_v23_fix.str b/v2.6/generators/nlojet++/interface/data/dev/fnl5662i_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..8fad6eb7033a61e730cbdb9607fdc04c326149dd --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/dev/fnl5662i_v23_fix.str @@ -0,0 +1,173 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl5662i_v23_fix +ScenarioDescription { + "d2sigma-dijet_dChi_dMjj_[pb_GeV]" + "CMS_Collaboration" + "Dijet_Chi" + "anti-kT_R=0.4" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.4 # Jet size parameter: Required for all jets +ptjmin 1. # Minimal jet pT (minimum set in fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 5.0 # Maximal jet rapidity +Njetmin 2 # Minimal number of jets required to be in preselected phase space +ycjjmax 2.5 # Maximal jet rapidity for leading two jets +yboostmax 1.11 # Maximal |yb| = |y1+y2|/2 +ystarmax 1.5 # Maximal y* = |y1-y2|/2 + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "Mjj_[GeV]" # This defines the observables to be calculated! + "Chi" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 1. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "<pT_1,2>_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "Mjj/2_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 1900. 2400. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 12. 14. 16. + 2400. 3000. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 12. 14. 16. + 3000. 3600. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 12. 14. 16. + 3600. 4200. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 12. 14. 16. + 4200. 4800. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 12. 14. 16. + 4800. 5400. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 12. 14. 16. + 5400. 6000. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 12. 14. 16. +}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 13000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJetEvents.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/dev/fnl5662ia_v23_fix.str b/v2.6/generators/nlojet++/interface/data/dev/fnl5662ia_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..ccc82747c935f0c7107f11c18709c5a286375748 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/dev/fnl5662ia_v23_fix.str @@ -0,0 +1,168 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl5662ia_v23_fix +ScenarioDescription { + "d2sigma-dijet_dChi_dMjj_[pb_GeV]" + "CMS_Collaboration" + "Dijet_Chi" + "anti-kT_R=0.4" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.4 # Jet size parameter: Required for all jets +ptjmin 1. # Minimal jet pT (minimum set in fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 5.0 # Maximal jet rapidity +Njetmin 2 # Minimal number of jets required to be in preselected phase space +ycjjmax 2.5 # Maximal jet rapidity for leading two jets +yboostmax 1.11 # Maximal |yb| = |y1+y2|/2 +ystarmax 1.5 # Maximal y* = |y1-y2|/2 + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "Mjj_[GeV]" # This defines the observables to be calculated! + "Chi" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 1. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "<pT_1,2>_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "Mjj/2_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 6000. 6600. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 12. 14. 16. + 6600. 13000. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 12. 14. 16. +}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 13000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJetEvents.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/dev/fnl5672i_v23_fix.str b/v2.6/generators/nlojet++/interface/data/dev/fnl5672i_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..02eb959693d47af122d5386d4c5b9695b7d283db --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/dev/fnl5672i_v23_fix.str @@ -0,0 +1,173 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl5672i_v23_fix +ScenarioDescription { + "d2sigma-dijet_dChi_dMjj_[pb_GeV]" + "CMS_Collaboration" + "Dijet_Chi" + "anti-kT_R=0.8" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.8 # Jet size parameter: Required for all jets +ptjmin 1. # Minimal jet pT (minimum set in fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 5.0 # Maximal jet rapidity +Njetmin 2 # Minimal number of jets required to be in preselected phase space +ycjjmax 2.5 # Maximal jet rapidity for leading two jets +yboostmax 1.11 # Maximal |yb| = |y1+y2|/2 +ystarmax 1.5 # Maximal y* = |y1-y2|/2 + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 2 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "Mjj_[GeV]" # This defines the observables to be calculated! + "Chi" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 1. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "<pT_1,2>_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "Mjj/2_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +DoubleDifferentialBinning {{ + 1stDimLo 1stDimUp "----- Array of bin-grid for 2nd dimension -----" + 1900. 2400. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 12. 14. 16. + 2400. 3000. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 12. 14. 16. + 3000. 3600. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 12. 14. 16. + 3600. 4200. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 12. 14. 16. + 4200. 4800. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 12. 14. 16. + 4800. 5400. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 12. 14. 16. + 5400. 6000. 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 12. 14. 16. +}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 13000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJetEvents.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/dev/fnl5732dena_v23_fix.str b/v2.6/generators/nlojet++/interface/data/dev/fnl5732dena_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..e1a9a325b4394ff138128ad04348239b59d6cfc4 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/dev/fnl5732dena_v23_fix.str @@ -0,0 +1,175 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl5732dena_v23_fix +ScenarioDescription { + "dsigma-jet2+_d<pT_1,2>_[pb_GeV]" + "CMS_Collaboration" + "Inclusive_Dijet_pT" + "anti-kT_R=0.7" + "CMS-PAPER-SMP-15-???." + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.7 # Jet size parameter: Required for all jets +ptjmin 150. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 5.0 # Maximal jet rapidity +Njetmin 2 # Minimal number of jets required to be in preselected phase space +ycjjmax 2.5 # Maximal jet rapidity for leading two jets + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 2 # Number of jets for the LO process +DifferentialDimension 1 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "<pT_1,2>_[GeV]" # This defines the observables to be calculated! +} +DimensionIsDifferential { # Specify for each dimension whether + 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 1. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "<pT_1,2>_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +SingleDifferentialBinning { +250, 275, 300, 325, +350, 380, 410, 440, 470, +500, 540, 580, 620, 660, +700, 750, 800, 850, 900, 950, +1000, 1060, 1120, +1180, 1250, 1320, +1390, 1470, 1550, +1630, 1720, 1810, +1900, 2000, 2100, +2200, 2325, +2450, 2600, 2750, 2900, 3050, +3200, 3400, 3600, 3800, +4000, 4250, 4500, 4750, +5000, 5300, 5600, 5900, 6200 +} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 13000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJetEvents.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/dev/fnl5732numa_v23_fix.str b/v2.6/generators/nlojet++/interface/data/dev/fnl5732numa_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..03764e923a209950157a4c59298fe21b07a2c72b --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/dev/fnl5732numa_v23_fix.str @@ -0,0 +1,175 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl5732numa_v23_fix +ScenarioDescription { + "dsigma-jet3+_d<pT_1,2>_[pb_GeV]" + "CMS_Collaboration" + "Inclusive_3jet_pT" + "anti-kT_R=0.7" + "CMS-PAPER-SMP-15-???." + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.7 # Jet size parameter: Required for all jets +ptjmin 150. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 5.0 # Maximal jet rapidity +Njetmin 3 # Minimal number of jets required to be in preselected phase space +ycjjmax 2.5 # Maximal jet rapidity for leading two jets + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 3 # Number of jets for the LO process +DifferentialDimension 1 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "<pT_1,2>_[GeV]" # This defines the observables to be calculated! +} +DimensionIsDifferential { # Specify for each dimension whether + 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 1. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "<pT_1,2>_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +SingleDifferentialBinning { +250, 275, 300, 325, +350, 380, 410, 440, 470, +500, 540, 580, 620, 660, +700, 750, 800, 850, 900, 950, +1000, 1060, 1120, +1180, 1250, 1320, +1390, 1470, 1550, +1630, 1720, 1810, +1900, 2000, 2100, +2200, 2325, +2450, 2600, 2750, 2900, 3050, +3200, 3400, 3600, 3800, +4000, 4250, 4500, 4750, +5000, 5300, 5600, 5900, 6200 +} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 13000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJetEvents.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/dev/fnl5932numa_v23_fix.str b/v2.6/generators/nlojet++/interface/data/dev/fnl5932numa_v23_fix.str new file mode 100644 index 0000000000000000000000000000000000000000..3fd7a29522e72e119b100e5de0787b12089d67ec --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/dev/fnl5932numa_v23_fix.str @@ -0,0 +1,165 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName fnl5932numa_v23_fix +ScenarioDescription { + "dsigma-njet_djet_pT_[pb_GeV]" + "CMS_Collaboration" + "Neighbour_jet_pT" + "anti-kT_R=0.7" + "CMS-PAPER-SMP-17-???." + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + + # -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +JetAlgo 2 # fastjet jet algorithm +# # clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT +# # cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone +Rjet 0.7 # Jet size parameter: Required for all jets +ptjmin 150. # Minimal jet pT (minimum set in interface to fastjet: 1 GeV) +yjmin 0.0 # Minimal jet rapidity +yjmax 2.5 # Maximal jet rapidity +Njetmin 3 # Minimal number of jets required to be in preselected phase space +ptnjmin 150. # Minimal pT of neighbouring jet (default is ptjmin) +djlkmin 1.4 # Minimal distance of neighbouring jet (default is 0) +djlkmax 2.4 # Maximal distance of neighbouring jet (default is +DBL_MAX) +ldphi true # Switch to use jet distance dphi/true or dR/false (default is true) + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +LeadingOrder 3 # Number of jets for the LO process +DifferentialDimension 1 # Dimensionality of binning +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "pT_[GeV]" # This defines the observables to be calculated! +} +DimensionIsDifferential { # Specify for each dimension whether + 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 1. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + # +ScaleDescriptionScale1 "pT_jet_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) +ScaleDescriptionScale2 "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +SingleDifferentialBinning { +150, 200, 250, 300, 400, 500, 1000, 2000, 3000, 4000, 6500 +} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 13000. # Center-of-mass energy in GeV. +# Some examples from the past: 200. # RHIC +# 1800. # TeV Run I +# 1960. # TeV Run II +# 900. # LHC Injection Run +# 2360. # LHC Initial Run +# 2760. # LHC HIpp base Run +# 5020. # LHC HIpp base Run +# 7000. # LHC First Run (2010/2011) +# 8000. # LHC Second Run (2012) +# 13000. # LHC Next Run ? (2015) +# 14000. # LHC Design Run +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename InclusiveNJetPairs.tab.gz # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) + 0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +#>>fastNLO-warmup.txt # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/data/dev/fnl_triplediffjets.str b/v2.6/generators/nlojet++/interface/data/dev/fnl_triplediffjets.str new file mode 100644 index 0000000000000000000000000000000000000000..5e096f5da129271083d1bc0d8d4eeeaf79f3ef9b --- /dev/null +++ b/v2.6/generators/nlojet++/interface/data/dev/fnl_triplediffjets.str @@ -0,0 +1,152 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with NLOJet++) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +ScenarioName TripleDiffJets +ScenarioDescription { + "d3sigma-dpTavg_dyb_dys_[pb_GeV]" + "CMS_Collaboration" + "Triple_Diff_Jets" + "anti-kT_R=0.7" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.3.1" + "If you use this table, please cite:" + " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" + +} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) +ScaleDescriptionScale1 "pTavg_[GeV]" # Specify scale name and unit + +# -------------------------------------------------------------------- # +# Cuts +# -------------------------------------------------------------------- # +# Commented out since they are applied in the scenario code (not steerable) + +# MinJetPt 50. +# MaxJetAbsRap 3.0 +# MinJet1Pt 74. + +# -------------------------------------------------------------------- # +# Observable dimensioning and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Specify, how many differential dimensions are measured. +# Number must be consistent with DimensionLabels and DimensionIsDifferential, see below +# 1 : read in 'SingleDifferentialBinning' +# 2 : read in 'DoubleDifferentialBinning' +# 3 : read in 'TripleDifferentialBinning' +# -------------------------------------------------------------------- # +DifferentialDimension 3 +DimensionLabels { # Labels (symbol and unit) for the measurement dimension (from outer to inner "loop") + "1/2|yboost|" + "1/2|ystar|" + "pTavg_[GeV]" +} +DimensionIsDifferential { # Specify for each dimension whether + 2 2 2 # 0 : the cross section is NOT differential, i.e. there are two bin borders, +} # but NO division (normalization) by bin width + # 1 : the cross section is point-wise differential, i.e. only one point is given + # 2 : the cross section is bin-wise differential, i.e. there are two bin borders + # and division by bin width +CalculateBinSize true # Calculate bin width from lower and upper bin boundaries +BinSizeFactor 1. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Use either 'SingleDifferentialBinning' or +# 'DoubleDifferentialBinning' or +# 'TripleDifferentialBinning' +# in accord with 'DifferentialDimension' above +# -------------------------------------------------------------------- # +TripleDifferentialBinning {{ + 1stDimLo 1stDimUp 2ndDimLo 2ndDimUp "----- Array of bin-grid for 3rd dimension -----" + 0.0 1.0 0.0 1.0 74 84 97 114 133 153 174 196 220 245 272 300 330 362 395 430 468 507 548 592 638 686 737 790 846 905 967 1032 1101 1172 1248 1327 1410 1497 1588 1784 + 0.0 1.0 1.0 2.0 74 84 97 114 133 153 174 196 220 245 272 300 330 362 395 430 468 507 548 592 638 686 737 790 846 905 967 1032 1101 1172 1248 + 0.0 1.0 2.0 3.0 74 84 97 114 133 153 174 196 220 245 272 300 330 362 395 430 468 507 548 + 1.0 2.0 0.0 1.0 74 84 97 114 133 153 174 196 220 245 272 300 330 362 395 430 468 507 548 592 638 686 737 790 846 905 967 1032 + 1.0 2.0 1.0 2.0 74 84 97 114 133 153 174 196 220 245 272 300 330 362 395 430 468 507 548 592 638 686 + 2.0 3.0 0.0 1.0 74 84 97 114 133 153 174 196 220 245 272 300 330 362 395 430 +}} + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +CenterOfMassEnergy 8000. # Center-of-mass energy in GeV. +PDF1 2212 # PDF of 1st hadron (following PDG convention). +PDF2 2212 # PDF of 2nd hadron (following PDG convention). + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +OutputFilename TripleDiffJets.tab # Filename of fastNLO output table +OutputPrecision 8 # Number of decimal digits to store in output table, def.=8. +FlexibleScaleTable false # Create table fully flexible in mu_f (larger size), true, or + # table with fixed number of mu_f scale factors, def.=false. +ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) +0.5 1.0 2.0 # List of scale factors must include factor '1' +} # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +ReadBinningFromSteering true # Specify if binning is read from this file. MUST be true for now! +>>TripleDiffJets_warmup.str # Specify alternative filename to read warm-up results from, def.=SteerFileBasename_${ScenarioName}_warmup.txt + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +ApplyPDFReweighting true # Apply reweighting of pdfs for an optimized interpolation, def.=true. +CheckScaleLimitsAgainstBins true # Set limits for scale nodes to bin borders, if possible + +# -------------------------------------------------------------------- # +# Choose fastNLO interpolation kernels and distance measures +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Currently implemented interpolation kernels +# Catmull +# Lagrange +# OneNode +# Linear +# +# Currently implemented distance measures +# linear +# loglog025 eq. to (log(log(4*x))) +# log10 +# sqrtlog10 eq. to sqrt(log_10(x)) +# -------------------------------------------------------------------- # +X_Kernel Lagrange +X_DistanceMeasure "sqrtlog10" +X_NNodes 15 +X_NoOfNodesPerMagnitude false + +Mu1_Kernel Lagrange +Mu1_DistanceMeasure "loglog025" +Mu1_NNodes 6 + +Mu2_Kernel Lagrange # Scale2 not used for fixed-scale tables +Mu2_DistanceMeasure "loglog025" +Mu2_NNodes 6 diff --git a/v2.6/generators/nlojet++/interface/hadron/InclusiveNJetDiffs.cc b/v2.6/generators/nlojet++/interface/hadron/InclusiveNJetDiffs.cc new file mode 100644 index 0000000000000000000000000000000000000000..108c4e1fee6f99208e5ff2e34af8ceda3e2168c6 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/hadron/InclusiveNJetDiffs.cc @@ -0,0 +1,954 @@ +// +// fastNLO v2.2 creator code for inclusive N jet difference scenarios +// +// ============== fastNLO user: ======================================== +// To create your own scenario, it is recommended to take this +// example code, make a copy, and implement the relevant changes. +// Important: +// Edit only those parts which are clearly indicated as modifiable +// "fastNLO user" code. If a code fragment is not explicitely +// labeled as "fastNLO user", it is likely that a modification will +// interfere with the fastNLO routines. +// +// This file contains the following routines: +// struct fNLOSelector (-> user edits) +// struct fNLOSorter (-> user edits) +// UserHHC::phys_output (called once at the start -> user edits) +// UserHHC::userfunc (called once for each event -> user edits) +// inputfunc (don't touch) +// psinput (don't touch) +// userfunc (don't touch) +// InitfNLO (don't touch) +// UserHHC::initfunc (don't touch) +// UserHHC::end_of_event (don't touch) +// +// If the provided example routine can not be steered flexibly enough, +// feel free to implement the missing parts. +// +// Implementing a new scenario may imply to change: +// - the jet algorithm ("#include" statement and assignment of "jetclus..") +// - the jet observables to compute +// - the scale definition +// +// ===================================================================== + +//------ DON'T TOUCH THIS PART! ------ +#include <cfloat> +#include <iostream> +#include <map> +#include <bits/hhc-phasespace.h> +#include <bits/hhc-process.h> +#include <bits/hhc-jetfunc.h> + +//----- used namespaces ----- +using namespace nlo; +using namespace std; + +//----- fastNLO ----- +#include "fastnlotk/fastNLOCreate.h" +#include "fastnlotk/fastNLOEvent.h" + +//----- declaration of the user defined functions ----- +// --- fastNLO v2.2: interface to NLOJet++: read steering file, set LO of selected process +void inputfunc(unsigned int&, unsigned int&, unsigned int&); +// --- fastNLO v2.2: interface to NLOJet++: set cms energy and phase space generator +void psinput(phasespace_hhc *, double&); +// --- fastNLO v2.2: interface to NLOJet++: user class +user_base_hhc * userfunc(); +// --- dphi +double dphi(double phi2, double phi1); + +//----- array of the symbols symbols ----- +extern "C"{ + struct { + const char *name; + void *address; + } user_defined_functions[] = + { + // process index: hhc for hadron-hadron --> jets + {"procindex", (void *) "hhc"}, + // input function + {"inputfunc", (void *) inputfunc}, + // phase space input function + {"psinput", (void *) psinput}, + // user defined functions + {"userfunc", (void *) userfunc}, + // end of the list + {0, 0} + }; +} + +//------ END OF THE DO-NOT-TOUCH-PART ------ + +//------ USER DEFINED PART STARTS HERE ------ +//#include <algorithm> + +// --- fastNLO v2.2: include header file of interface to NLOJet++ +#include "fnlo_int_nlojet/fnlo_int_hhc_nlojet.h" + +// --- fastNLO user: include header file for the jet algorithm +#include "fnlo_int_nlojet/fastjet-jets.h" + +// --- fastNLO v2.2: define global pointer to fastNLO steering file +fastNLOCreate *ftable = NULL; + +// --- fastNLO v2.2: get some info (order, name) from NLOjet++ command line arguments +void InitfNLO(const std::basic_string<char>& fname); + +// --- fastNLO v2.2: define user class to be used with NLOJet++ +class UserHHC : public basic_user_set<user0d_hhc, user1h_hhc, user2h_hhc> { +public: + // --- fastNLO user: evaluate steering file and define physics output (called once before first event) + virtual void phys_output(const std::basic_string<char>& fname, unsigned long nsave = 10000UL, bool txt = false); + // --- fastNLO v2.2: initialize event counter and storage limit (called once) + void initfunc(unsigned int); + // --- fastNLO user: analyze parton event (called once for each event) + void userfunc(const event_hhc&, const amplitude_hhc&); + // --- fastNLO v2.2: count events and store table (called after each event) + virtual void end_of_event(); + // 'nsave' defines after how many events the accumulated results are stored into a table file. + // The tablefile name is given by 'name-hhc-[born|nlo]-[2jet|3jet].tab', where + // - 'name' is specified via the '-n name' option of NLOJet++ + // - 'born' or 'nlo' are set according to the '-cborn' resp. '-cnlo' options of NLOJet++ + // - '2jet' or '3jet' are set according to the 'LeadingOrder' steering parameter. + // Existing files with the same name are overwritten. + // 'nsave' is initialized with 10000 or, if specified, to the number given via + // the command line option '--save-after=nsave'. In fastNLO this number is logarithmically + // increased after each table storage by factors of 10 up to nwritemax = 10M such that + // at the latest after each 10M events the accumulated results are written on disk. + +private: + // --- fastNLO user: define the jet algorithm(s) (for the choice of included header file above) + fastjet_jets jetclusfj; + fastjet_jets jetclusfj2; + + // --- define the jet structure + bounded_vector<lorentzvector<double> > pj; + bounded_vector<lorentzvector<double> > pj2; + + // --- fastNLO definitions (not for user) + double nevents; // No. of events calculated so far + unsigned long nwrite; // Actual no. of events after which to write out the table + unsigned long nwritemax; // Maximal no. of events after which to write out the table + + // --- fastNLO steering + bool lFlexibleScaleTable; // Fill fixed- or flexible-scale table (default is fixed-scale) + int NDim; // Dimensionality of distributions (no default, must be defined) + vector<string> DimLabel; // Dimension labels (no default, must be defined) + // enum to switch between implemented observables (max. of 3 simultaneously) + enum Obs { PTJETGEV, YJET, ETAJET, PHIJET }; + Obs obsdef[3]; + double obs[3]; + double obs2[3]; + vector<string> ScaleLabel; // Scale labels (Scale1: must be defined; Scale2: only for flex-scale tables) + // enum to switch between implemented scale definitions (max. of 2 simultaneously) + enum Scales { PTMAX, PTJETMIN, PTJETAVE, PTJETMAX, HTP, HTPHALF }; + Scales mudef[2]; + double mu[2]; + int jetalgo; // Define 1st fastjet jet algorithm (no default, must be defined) + int jetalgo2; // Define 2nd fastjet jet algorithm (default equal to 1st) + double jetsize; // Define 1st jet size R (no default, must be defined) + double jetsize2; // Define 2nd jet size R (default equal to 1st) + double overlapthreshold; // Define overlap threshold (default is 0.5) + double overlapthreshold2; // Define overlap threshold (default equal to 1st) + double ptjmin; // Minimal jet pT (no default, must be defined; should be >= minimum of 1 GeV specified in interface to fastjet) + double yetajmin; // Minimal jet (pseudo-)rapidity (no default, must be defined) + double yetajmax; // Maximal jet (pseudo-)rapidity (no default, must be defined) + bool lpseudo; // Switch to use either jet rapidity y or jet eta + bool ldphi; // Switch to use jet distance dphi/true or dR/false (default is true) + int Njetmin; // Minimal number of overall jets in at least one of the two jet collections (default here is 3) + bool lsamejets; // Switch to use same or different second jet algorithm (default is true) + bool lptmax; // True when only ptmax is used as scale + double obsmin[3]; // Minimum in observable in nth dimension (default derived from binning) + double obsmax[3]; // Maximum in observable in nth dimension (default derived from binning) +}; + +// --- fastNLO user: modify the jet selection in UserHHC::userfunc (default = cutting in |y| min, |y| max and pt min) +// (the return value must be true for jets to be UNselected) +struct fNLOSelector { + fNLOSelector(double ymin, double ymax, double ptmin, bool pseudo=false): + _ymin (ymin), _ymax (ymax), _ptmin (ptmin), _pseudo (pseudo){}; + double _ymin, _ymax, _ptmin; + bool _pseudo; + bool operator() (const lorentzvector<double> &a) { + if (!_pseudo) return ! (_ymin <= abs(a.rapidity()) && abs(a.rapidity()) < _ymax && _ptmin <= a.perp()); + else return ! (_ymin <= abs(a.prapidity()) && abs(a.prapidity()) < _ymax && _ptmin <= a.perp()); + }; +}; + +// --- fastNLO user: modify the jet sorting in UserHHC::userfunc (default = descending in jet pt) +struct fNLOSorter { + bool operator() (const lorentzvector<double> &a, const lorentzvector<double> &b) {return (a.perp() > b.perp());}; +}; + +// sign function returning -1, 0, 1 +template <typename T> int sgn(T val) { + return (T(0) < val) - (val < T(0)); +} + +// --- fastNLO user: check and get steering parameters once and store into static vars +static std::map < std::string, bool > SteeringPars; + +// --- fastNLO user: class UserHHC: evaluate steering file and define physics output (called once before first event) +void UserHHC::phys_output(const std::basic_string<char>& __file_name, unsigned long __save, bool __txt) { + + //------ DON'T TOUCH THIS PART! ------ + // cout << " # INIT: [UserHHC::phys_output] ---------- UserHHC::phys_output called ----------" << endl; + say::debug["UserHHC::phys_output"] << "---------- UserHHC::phys_output called ----------" << endl; + say::debug["UserHHC::phys_output"] << "Before: __save = " << __save << ", nwrite = " << nwrite << endl; + nwrite = __save; + InitfNLO(__file_name); + //------ END OF THE DO-NOT-TOUCH-PART ------ + + // --- fastNLO user: + // Here is your playground where you can evaluate the steering file settings. + // ATTENTION: Some settings are mandatory for the correct functioning! + + // get general steering parameters needed here from steering file + say::debug["UserHHC::phys_output"] << "Evaluating steering parameters ..." << endl; + // fixed- or flexible-scale table + SteeringPars["FlexibleScaleTable"] = ftable->TestParameterInSteering("FlexibleScaleTable"); + lFlexibleScaleTable = false; // default + if ( SteeringPars["FlexibleScaleTable"] ) { + ftable->GetParameterFromSteering("FlexibleScaleTable",lFlexibleScaleTable); + } + // dimensionality + SteeringPars["DifferentialDimension"] = ftable->TestParameterInSteering("DifferentialDimension"); + if ( SteeringPars["DifferentialDimension"] ) { + ftable->GetParameterFromSteering("DifferentialDimension",NDim); + } else { + say::error["ScenarioCode"] << "Dimensioning of binning not set, aborted!" << endl; + exit(1); + } + if ( NDim < 1 || 3 < NDim ) { + say::error["ScenarioCode"] << "Only 1- to 3-dimensional binning implemented, aborted!" << endl; + say::error["ScenarioCode"] << "Please implement the requested " << NDim << "-dimensional binning." << endl; + exit(1); + } + // dimension labels + SteeringPars["DimensionLabels"] = ftable->TestParameterInSteering("DimensionLabels"); + DimLabel.resize(NDim); + if ( SteeringPars["DimensionLabels"] ) { + ftable->GetParameterFromSteering("DimensionLabels",DimLabel); + } else { + say::error["ScenarioCode"] << "Dimension labels not set, aborted!" << endl; + exit(1); + } + // define the observables according to the dimension labels + for ( int i = 0; i<NDim; i++ ) { + if ( DimLabel[i] == "|y|" ) { + obsdef[i] = YJET; + } else if ( DimLabel[i] == "|eta|" ) { + obsdef[i] = ETAJET; + } else if ( DimLabel[i] == "pT_[GeV]" ) { + obsdef[i] = PTJETGEV; + } else if ( DimLabel[i] == "phi" ) { + obsdef[i] = PHIJET; + } else { + say::error["ScenarioCode"] << "Unknown observable, i.e. dimension label, aborted!" << endl; + say::error["ScenarioCode"] << "DimLabel[" << i << "] = " << DimLabel[i] << endl; + say::error["ScenarioCode"] << "Please complement this scenario to include the requested observable." << endl; + exit(1); + } + } + // scale descriptions + SteeringPars["ScaleDescriptionScale1"] = ftable->TestParameterInSteering("ScaleDescriptionScale1"); + ScaleLabel.resize(2); + if ( SteeringPars["ScaleDescriptionScale1"] ) { + ftable->GetParameterFromSteering("ScaleDescriptionScale1",ScaleLabel[0]); + } else { + say::error["ScenarioCode"] << "No description of scale 1, aborted!" << endl; + exit(1); + } + SteeringPars["ScaleDescriptionScale2"] = ftable->TestParameterInSteering("ScaleDescriptionScale2"); + ScaleLabel[1] = "pT_max_[GeV]"; // default + if ( SteeringPars["ScaleDescriptionScale2"] ) { + ftable->GetParameterFromSteering("ScaleDescriptionScale2",ScaleLabel[1]); + } else { + ScaleLabel[1] = "-"; + say::warn["ScenarioCode"] << "No description of scale 2, flexible-scale tables not possible!" << endl; + } + // scale descriptions define the scales + lptmax = false; + for ( unsigned int i = 0; i < ScaleLabel.size(); i++ ) { + if ( ScaleLabel[i] == "pT_max_[GeV]" ) { + mudef[i] = PTMAX; + lptmax = true; + } else if ( ScaleLabel[i] == "pT_jet_min_[GeV]" ) { + mudef[i] = PTJETMIN; + } else if ( ScaleLabel[i] == "pT_jet_ave_[GeV]" ) { + mudef[i] = PTJETAVE; + } else if ( ScaleLabel[i] == "pT_jet_max_[GeV]" ) { + mudef[i] = PTJETMAX; + } else if ( ScaleLabel[i] == "HT_part_[GeV]" ) { + mudef[i] = HTP; + } else if ( ScaleLabel[i] == "HT_part/2_[GeV]" ) { + mudef[i] = HTPHALF; + } else { + say::error["ScenarioCode"] << "Unknown scale, i.e. scale description, aborted!" << endl; + say::error["ScenarioCode"] << "ScaleLabel[" << i << "] = " << ScaleLabel[i] << endl; + say::error["ScenarioCode"] << "Please complement this scenario to include the requested scale." << endl; + exit(1); + } + } + + // definition of jet algorithm and jet phase space limits (no defaults) + // + // --- fastNLO user: set the jet algorithm and size via steering file + // fastjet clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT + // fastjet cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone + SteeringPars["JetAlgo"] = ftable->TestParameterInSteering("JetAlgo"); + if ( SteeringPars["JetAlgo"] ) { + ftable->GetParameterFromSteering("JetAlgo",jetalgo); + if ( jetalgo < 0 || (2 < jetalgo && jetalgo < 10) || 12 < jetalgo ) { + say::error["ScenarioCode"] << "Unknown jet algorithm " << jetalgo << ", aborted!" << endl; + exit(1); + } + } else { + say::error["ScenarioCode"] << "No jet algorithm selected, aborted!" << endl; + exit(1); + } + SteeringPars["Rjet"] = ftable->TestParameterInSteering("Rjet"); + if ( SteeringPars["Rjet"] ) { + ftable->GetParameterFromSteering("Rjet",jetsize); + } else { + say::error["ScenarioCode"] << "Jet size R not defined, aborted!" << endl; + exit(1); + } + SteeringPars["OvThr"] = ftable->TestParameterInSteering("OvThr"); + overlapthreshold = 0.5; // default + if ( SteeringPars["OvThr"] ) { + ftable->GetParameterFromSteering("OvThr",overlapthreshold); + } else if ( jetalgo > 9 ) { + say::error["ScenarioCode"] << "Overlap threshold not defined for jet algorithm " << jetalgo << ", aborted!" << endl; + exit(1); + } + // --- fastNLO user: set second jet algorithm and size via steering file if required + lsamejets = true; + SteeringPars["JetAlgo2"] = ftable->TestParameterInSteering("JetAlgo2"); + if ( SteeringPars["JetAlgo2"] ) { + ftable->GetParameterFromSteering("JetAlgo2",jetalgo2); + if ( jetalgo2 < 0 || (2 < jetalgo2 && jetalgo2 < 10) || 12 < jetalgo2 ) { + say::error["ScenarioCode"] << "Unknown jet algorithm " << jetalgo2 << ", aborted!" << endl; + exit(1); + } + lsamejets = false; + } else { + say::info["ScenarioCode"] << "No second jet algorithm selected, using first one!" << endl; + jetalgo2 = jetalgo; + } + SteeringPars["Rjet2"] = ftable->TestParameterInSteering("Rjet2"); + if ( SteeringPars["Rjet2"] ) { + ftable->GetParameterFromSteering("Rjet2",jetsize2); + lsamejets = false; + } else { + say::info["ScenarioCode"] << "Second jet size R not defined, using first one!" << endl; + jetsize2 = jetsize; + } + SteeringPars["OvThr2"] = ftable->TestParameterInSteering("OvThr2"); + overlapthreshold2 = 0.5; // default + if ( SteeringPars["OvThr2"] ) { + ftable->GetParameterFromSteering("OvThr2",overlapthreshold2); + lsamejets = false; + } else if ( jetalgo2 > 9 ) { + say::error["ScenarioCode"] << "Overlap threshold not defined for jet algorithm " << jetalgo2 << ", aborted!" << endl; + exit(1); + } + // --- fastNLO user: declare and initialize overall jet phase space cuts via steering file + // overall lowest pT for jets to be considered + SteeringPars["ptjmin"] = ftable->TestParameterInSteering("ptjmin"); + if ( SteeringPars["ptjmin"] ) { + ftable->GetParameterFromSteering("ptjmin",ptjmin); + } else { + say::error["ScenarioCode"] << "Minimal jet pT (ptjmin) not defined, aborted!" << endl; + exit(1); + } + // overall highest pT for jets not implemented, since uncritical with respect to CPU time consumption + // overall smallest |(pseudo-)rapidity| for jets to be considered, use either y or eta but not both + SteeringPars["yjmin"] = ftable->TestParameterInSteering("yjmin"); + SteeringPars["etajmin"] = ftable->TestParameterInSteering("etajmin"); + if ( SteeringPars["yjmin"] && !SteeringPars["etajmin"] ) { + ftable->GetParameterFromSteering("yjmin",yetajmin); + } else if ( !SteeringPars["yjmin"] && SteeringPars["etajmin"] ) { + ftable->GetParameterFromSteering("etajmin",yetajmin); + } else { + say::error["ScenarioCode"] << "Minimal jet (pseudo)rapidity (yjmin or etajmin) not uniquely defined, aborted!" << endl; + exit(1); + } + // overall largest |(pseudo-)rapidity| for jets to be considered, use either y or eta but not both + SteeringPars["yjmax"] = ftable->TestParameterInSteering("yjmax"); + SteeringPars["etajmax"] = ftable->TestParameterInSteering("etajmax"); + if ( SteeringPars["yjmax"] && !SteeringPars["etajmax"] ) { + ftable->GetParameterFromSteering("yjmax",yetajmax); + } else if ( !SteeringPars["yjmax"] && SteeringPars["etajmax"] ) { + ftable->GetParameterFromSteering("etajmax",yetajmax); + } else { + say::error["ScenarioCode"] << "Maximal jet (pseudo)rapidity (yjmax or etajmax) not uniquely defined, aborted!" << endl; + exit(1); + } + // define logical for decision on cuts in (pseudo-)rapidity, no mixing allowed here + if ( SteeringPars["yjmin"] && SteeringPars["yjmax"] ) { + lpseudo = false; + } else if ( SteeringPars["etajmin"] && SteeringPars["etajmax"] ) { + lpseudo = true; + } else { + say::error["ScenarioCode"] << "Phase space cuts mixed in (pseudo-)rapidity, aborted!" << endl; + say::error["ScenarioCode"] << "Booleans for cut selections are" << + " yjmin " << SteeringPars["yjmin"] << + ", yjmax " << SteeringPars["yjmax"] << + ", etajmin " << SteeringPars["etajmin"] << + ", etajmax " << SteeringPars["etajmax"] << endl; + say::error["ScenarioCode"] << "If you really want to mix, the code needs to be adapted." << endl; + exit(1); + } + // minimal number of overall jets required (for jet algo differences this should be three!) + SteeringPars["Njetmin"] = ftable->TestParameterInSteering("Njetmin"); + Njetmin = 3; + if ( SteeringPars["Njetmin"] ) { + ftable->GetParameterFromSteering("Njetmin",Njetmin); + } + if ( Njetmin < 3 ) { + say::error["ScenarioCode"] << "This is a 3+-jet scenario. At least three jets must be present, aborted!" << endl; + say::error["ScenarioCode"] << "Please correct the Njetmin requirement. Njetmin = " << Njetmin << endl; + exit(1); + } + + // --- fastNLO user: declare and initialize phase space cuts and definitions via steering file + // define logical for decision on cuts in delta Phi or delta R jet-pair distance + SteeringPars["ldphi"] = ftable->TestParameterInSteering("ldphi"); + if ( SteeringPars["ldphi"] ) { + ftable->GetParameterFromSteering("ldphi",ldphi); + } else { + ldphi = true; + } + // overall minimum & maximum for 1st observable, e.g. maximal absolute rapidity |y_max| + SteeringPars["obs0min"] = ftable->TestParameterInSteering("obs0min"); + obsmin[0] = ftable->GetObsBinsLoBoundsMin(0); // by default derived from binning in obs0 + if ( SteeringPars["obs0min"] ) { + ftable->GetParameterFromSteering("obs0min",obsmin[0]); + } + SteeringPars["obs0max"] = ftable->TestParameterInSteering("obs0max"); + obsmax[0] = ftable->GetObsBinsUpBoundsMax(0); // by default derived from binning in obs0 + if ( SteeringPars["obs0max"] ) { + ftable->GetParameterFromSteering("obs0max",obsmax[0]); + } + // overall minimum & maximum for 2nd observable, e.g. dijet mass mjj + obsmin[1] = -DBL_MAX; + obsmax[1] = +DBL_MAX; + if (NDim > 1) { + SteeringPars["obs1min"] = ftable->TestParameterInSteering("obs1min"); + obsmin[1] = ftable->GetObsBinsLoBoundsMin(1); // by default derived from binning in obs1 + if ( SteeringPars["obs1min"] ) { + ftable->GetParameterFromSteering("obs1min",obsmin[1]); + } + SteeringPars["obs1max"] = ftable->TestParameterInSteering("obs1max"); + obsmax[1] = ftable->GetObsBinsUpBoundsMax(1); // by default derived from binning in obs1 + if ( SteeringPars["obs1max"] ) { + ftable->GetParameterFromSteering("obs1max",obsmax[1]); + } + } + // overall minimum & maximum for 3rd observable + obsmin[2] = -DBL_MAX; + obsmax[2] = +DBL_MAX; + if (NDim > 2) { + SteeringPars["obs2min"] = ftable->TestParameterInSteering("obs2min"); + obsmin[2] = ftable->GetObsBinsLoBoundsMin(2); // by default derived from binning in obs2 + if ( SteeringPars["obs2min"] ) { + ftable->GetParameterFromSteering("obs2min",obsmin[2]); + } + SteeringPars["obs2max"] = ftable->TestParameterInSteering("obs2max"); + obsmax[2] = ftable->GetObsBinsUpBoundsMax(2); // by default derived from binning in obs2 + if ( SteeringPars["obs2max"] ) { + ftable->GetParameterFromSteering("obs2max",obsmax[2]); + } + } + jetclusfj.setup(static_cast<fastjet_jets::JetAlgorithm>(jetalgo), jetsize, overlapthreshold); + jetclusfj2.setup(static_cast<fastjet_jets::JetAlgorithm>(jetalgo2), jetsize2, overlapthreshold2); +} + +// --- fastNLO v2.2: class UserHHC: analyze parton event (called once for each event) +void UserHHC::userfunc(const event_hhc& p, const amplitude_hhc& amp) { + if ( say::debug.GetSpeak() ) { + say::debug["UserHHC::userfunc"] << "---------- UserHHC::userfunc called ----------" << endl; + say::debug["ScenarioCode"] << "==================== Start of event ====================" << endl; + } + + // --- fastNLO user: + // Here is your playground where you compute your observables and + // scales for each jet or event. + // The bin number ("obsbin") gets passed to fastNLO's table filling code. + // Usually, pT and E are in GeV, but this may be changed. + // ATTENTION: Scales must always be in GeV! + + // derive partonic HT scale + double htp = 0.; + unsigned int np = p.upper(); + for (unsigned int i = 1; i <= np; i++) { + htp += p[i].perp(); + // --- debug output + if ( say::debug.GetSpeak() ) { + say::debug["ScenarioCode"] << "partonic HT: parton # i, pt, htp: " << i << ", " << p[i].perp() << ", " << htp << endl; + } + } + + // apply the jet algorithm(s) to partonic 4-vector array p of NLOJet++ + pj = jetclusfj(p); + pj2 = pj; + unsigned int nj = pj.upper(); + unsigned int nj2 = nj; + if ( ! lsamejets ) { + pj2 = jetclusfj2(p); + nj2 = pj2.upper(); + } + + // --- check on minimal and maximal no. of jets + // ATTENTION: In principle, without cuts, there should always be two. + // For efficiency reasons though, our interface to the fastjet algorithms + // requires a minimal jet pT of 1 GeV. If this is a problem, the ptmin value + // in fj-jets.cc needs to be changed. + // There should never be more than four jets in NLOJet++ + if ((int)nj < Njetmin && (int)nj2 < Njetmin) { + say::debug["ScenarioCode"] << "This event from NLOJet++ has only two jets with pT > 1 GeV. Skipped!" << endl; + return; + } else if (nj > 4 || nj2 > 4) { + say::error["ScenarioCode"] << "This event from NLOJet++ has more than four jets, which should never happen. Aborted!" << endl; + exit(1); + } + + // --- give some debug output before selection and sorting + if ( say::debug.GetSpeak() ) { + for (unsigned int i=1; i<=nj; i++) { + double pti = pj[i].perp(); + double yi = pj[i].rapidity(); + double etai = pj[i].prapidity(); + say::debug["ScenarioCode"] << "before cuts: jet # i, pt, y, eta: " << i << ", " << pti << ", " << yi << ", " << etai << endl; + } + if ( ! lsamejets ) { + for (unsigned int i=1; i<=nj2; i++) { + double pti = pj2[i].perp(); + double yi = pj2[i].rapidity(); + double etai = pj2[i].prapidity(); + say::debug["ScenarioCode"] << "second algo: jet # i, pt, y, eta: " << i << ", " << pti << ", " << yi << ", " << etai << endl; + } + } + } + + // --- select jets in y (lpseudo = false) or eta (lpseudo = true) and ptjmin + // note: failing jets are not deleted but moved to the end of the jet array pj! + fNLOSelector SelJets (yetajmin,yetajmax,ptjmin,lpseudo); + + // --- count number of selected jets left at this stage + size_t njet = std::remove_if(pj.begin(), pj.end(), SelJets) - pj.begin(); + size_t njet2 = njet; + if ( ! lsamejets ) { + njet2 = std::remove_if(pj2.begin(), pj2.end(), SelJets) - pj2.begin(); + } + + // --- sort selected n jets at beginning of jet array pj, by default decreasing in pt + static fNLOSorter SortJets; + std::sort(pj.begin(), pj.begin() + njet, SortJets); + if ( ! lsamejets ) { + std::sort(pj2.begin(), pj2.begin() + njet2, SortJets); + } else { + pj2 = pj; + } + + // --- give some debug output after selection and sorting + if ( say::debug.GetSpeak() ) { + say::debug["ScenarioCode"] << "# jets before and after phase space cuts: nj, njet = " << nj << ", " << njet << endl; + if ( ! lpseudo ) { + say::debug["ScenarioCode"] << "phase space cuts: yjmin, yjmax, ptjmin: " << yetajmin << ", " << yetajmax << ", " << ptjmin << endl; + } else { + say::debug["ScenarioCode"] << "phase space cuts: etajmin, etajmax, ptjmin: " << yetajmin << ", " << yetajmax << ", " << ptjmin << endl; + } + for (unsigned int i=1; i<=njet; i++) { + double pti = pj[i].perp(); + double yi = pj[i].rapidity(); + double etai = pj[i].prapidity(); + say::debug["ScenarioCode"] << "after cuts: jet # i, pt, y, eta: " << i << ", " << pti << ", " << yi << ", " << etai << endl; + } + if ( ! lsamejets ) { + say::debug["ScenarioCode"] << "# jets2 before and after phase space cuts: nj2, njet2 = " << nj2 << ", " << njet2 << endl; + } + for (unsigned int i=1; i<=njet2; i++) { + double pti = pj2[i].perp(); + double yi = pj2[i].rapidity(); + double etai = pj2[i].prapidity(); + say::debug["ScenarioCode"] << "second algo: jet # i, pt, y, eta: " << i << ", " << pti << ", " << yi << ", " << etai << endl; + } + } + + // ---- fastNLO v2.2 + // Analyze jet in double jet loop + // set one possible scale choice (Attention: Only correct if jets sorted descending in pT) + double ptmax = max(pj[1].perp(),pj2[1].perp()); + int imuscl = -1; + + // 1st jet loop k + map<int,int> count; + map<int,int> acount; + map<int,double> sclmin; + map<int,double> sclave; + map<int,double> sclmax; + map<int,vector <double>> value; + for (unsigned int k = 1; k <= njet; k++) { + vector<double> vobs; + // --- calculate observable of nth dimension + for ( int i = 0; i<NDim; i++ ) { + switch(obsdef[i]) { + case PTJETGEV : + // jet pT + obs[i] = pj[k].perp(); + imuscl = i; + break; + case YJET : + // jet rapidity + obs[i] = abs(pj[k].rapidity()); + break; + case ETAJET : + // jet pseudorapidity + obs[i] = abs(pj[k].prapidity()); + break; + case PHIJET : + // jet azimuthal angle + obs[i] = atan2(pj[k].Y(), pj[k].X()); + break; + default : + say::error["ScenarioCode"] << "Observable not yet implemented, aborted!" << endl; + say::error["ScenarioCode"] << "DimLabel[" << i << "] = " << DimLabel[i] << endl; + say::error["ScenarioCode"] << "Please complement this scenario to include the requested observable." << endl; + exit(1); + } + vobs.push_back(obs[i]); + } + // --- store result in key-value maps with ObsBin number for jet k as key + if ( (! lptmax) && imuscl < 0 ) { + say::error["ScenarioCode"] << "No scale-like observable selected, aborted!" << endl; + say::error["ScenarioCode"] << "imuscl = " << imuscl << endl; + say::error["ScenarioCode"] << "Please complement this scenario to include the requested scale." << endl; + exit(1); + } + int ikey = ftable->GetObsBinNumber( vobs ); + // Outside binning phase space: ikey = -1! + if ( ikey > -1 ) { + count[ikey] += 1; + acount[ikey] += 1; + value[ikey] = vobs; + if ( imuscl > -1 ) { + sclmin[ikey] = (sclmin[ikey] > 0.) ? min(sclmin[ikey],vobs[imuscl]) : vobs[imuscl]; + sclave[ikey] += vobs[imuscl]; + sclmax[ikey] = max(sclmax[ikey],vobs[imuscl]); + } + } + + // --- give some debug output before final selection + if ( say::debug.GetSpeak() ) { + say::debug["ScenarioCode"] << "---------------- Result of first jet loop ----------------" << endl; + for ( int i = 0; i<NDim; i++ ) { + say::debug["ScenarioCode"] << "Obs. min/max values: " << i << " : obsmin = " << obsmin[i] << ", obs = " << obs[i] << ", obsmax = " << obsmax[i] << endl; + } + } + } + + // 2nd jet loop l + for (unsigned int l = 1; l <= njet2; l++) { + vector<double> vobs; + // --- calculate observable of nth dimension + for ( int i = 0; i<NDim; i++ ) { + switch(obsdef[i]) { + case PTJETGEV : + // jet pT + obs2[i] = pj2[l].perp(); + imuscl = i; + break; + case YJET : + // jet rapidity + obs2[i] = abs(pj2[l].rapidity()); + break; + case ETAJET : + // jet pseudorapidity + obs2[i] = abs(pj2[l].prapidity()); + break; + case PHIJET : + // jet azimuthal angle + obs2[i] = atan2(pj2[l].Y(), pj2[l].X()); + break; + default : + say::error["ScenarioCode"] << "Observable not yet implemented, aborted!" << endl; + say::error["ScenarioCode"] << "DimLabel[" << i << "] = " << DimLabel[i] << endl; + say::error["ScenarioCode"] << "Please complement this scenario to include the requested observable." << endl; + exit(1); + } + vobs.push_back(obs2[i]); + } + // --- store result in key-value maps with ObsBin number for jet l as key + if ( (! lptmax) && imuscl < 0 ) { + say::error["ScenarioCode"] << "No scale-like observable selected, aborted!" << endl; + say::error["ScenarioCode"] << "imuscl = " << imuscl << endl; + say::error["ScenarioCode"] << "Please complement this scenario to include the requested scale." << endl; + exit(1); + } + int ikey = ftable->GetObsBinNumber( vobs ); + // Outside binning phase space: ikey = -1! + if ( ikey > -1 ) { + count[ikey] -= 1; + acount[ikey] += 1; + value[ikey] = vobs; + if ( imuscl > -1 ) { + sclmin[ikey] = (sclmin[ikey] > 0.) ? min(sclmin[ikey],vobs[imuscl]) : vobs[imuscl]; + sclave[ikey] += vobs[imuscl]; + sclmax[ikey] = max(sclmax[ikey],vobs[imuscl]); + } + } + + // --- give some debug output before final selection + if ( say::debug.GetSpeak() ) { + say::debug["ScenarioCode"] << "---------------- Result of second jet loop ----------------" << endl; + for ( int i = 0; i<NDim; i++ ) { + say::debug["ScenarioCode"] << "Obs. min/max values: " << i << " : obsmin = " << obsmin[i] << ", obs = " << obs2[i] << ", obsmax = " << obsmax[i] << endl; + } + } + } + + // Fill difference loop + for ( const auto &iPair : count ) { + if ( iPair.second != 0 ) { + for ( unsigned int i = 0; i < value[iPair.first].size(); i++ ) { + obs[i] = value[iPair.first][i]; + } + + // cuts on observable limits + if ( obsmin[0] <= obs[0] && obs[0] < obsmax[0] && + (NDim < 2 || (obsmin[1] <= obs[1] && obs[1] < obsmax[1])) && + (NDim < 3 || (obsmin[2] <= obs[2] && obs[2] < obsmax[2])) ) { + + // --- jet diff observable accepted + if ( say::debug.GetSpeak() ) { + say::debug["ScenarioCode"] << "----------------- Event/jet/jet pair accepted! ------------------" << endl; + } + + // --- set the renormalization and factorization scales + // --- calculate the requested scales + for ( unsigned int i = 0; i < ScaleLabel.size(); i++ ) { + switch(mudef[i]) { + case PTMAX : + // maximal jet pT + mu[i] = ptmax; + break; + case PTJETMIN : + // jet pT (in fact, minimum of all jets in same pT bin) + // if ( (sclmax[iPair.first] - sclmin[iPair.first]) / sclave[iPair.first] * acount[iPair.first] > 1e-6 ) { + // cout << "MIN iPair.first = " << iPair.first << ", sclmin = " << sclmin[iPair.first] <<", sclave = " << sclave[iPair.first]/acount[iPair.first] << ", sclmax = " << sclmax[iPair.first] << endl;} + mu[i] = sclmin[iPair.first]; + break; + case PTJETAVE : + // jet pT (in fact, average of all jets in same pT bin) + // if ( (sclmax[iPair.first] - sclmin[iPair.first]) / sclave[iPair.first] * acount[iPair.first] > 1e-6 ) { + // cout << "AVE iPair.first = " << iPair.first << ", sclmin = " << sclmin[iPair.first] <<", sclave = " << sclave[iPair.first]/acount[iPair.first] << ", sclmax = " << sclmax[iPair.first] << endl;} + mu[i] = sclave[iPair.first]/acount[iPair.first]; + break; + case PTJETMAX : + // jet pT (in fact, maximum of all jets in same pT bin) + // if ( (sclmax[iPair.first] - sclmin[iPair.first]) / sclave[iPair.first] * acount[iPair.first] > 1e-6 ) { + // cout << "MAX iPair.first = " << iPair.first << ", sclmin = " << sclmin[iPair.first] <<", sclave = " << sclave[iPair.first]/acount[iPair.first] << ", sclmax = " << sclmax[iPair.first] << endl;} + mu[i] = sclmax[iPair.first]; + break; + case HTP : + // partonic sum pT + mu[i] = htp; + say::debug["ScenarioCode"] << "HTP scale values: " << i << " : mu[i] = " << mu[i] << endl; + break; + case HTPHALF : + // half partonic sum pT + mu[i] = htp/2.; + say::debug["ScenarioCode"] << "HTPHALF scale values: " << i << " : mu[i] = " << mu[i] << endl; + default : + say::error["ScenarioCode"] << "Scale not yet implemented, aborted!" << endl; + say::error["ScenarioCode"] << "ScaleLabel[" << i << "] = " << ScaleLabel[i] << endl; + say::error["ScenarioCode"] << "Please complement this scenario to include the requested scale." << endl; + exit(1); + } + } + + static vector<double> scalevars; + if ( ! lFlexibleScaleTable ) scalevars = ftable->GetScaleVariations(); + + // get matrix elements + static vector<fnloEvent> contribsflex; + static vector< vector<fnloEvent> > contribsfix; + if (lFlexibleScaleTable) { + contribsflex = UsefulNlojetTools::GetFlexibleScaleNlojetContribHHC(p,amp); + } else { + contribsfix = UsefulNlojetTools::GetFixedScaleNlojetContribHHC(p,amp,mu[0],scalevars); + } + + // set and fill scenario specific quantites + fnloScenario scen; + if ( NDim < 1 || NDim > 3 ) { + say::error["ScenarioCode"] << "Less than 1D(?!) or more than 3D binning not implemented here, aborted!" << endl; + say::error["ScenarioCode"] << "DifferentialDimension NDim = " << NDim << endl; + } + // Instead of multidimensional observables ... + // for ( int i = 0; i<NDim; i++ ) { + // scen.SetObservableDimI( obs[i], i ); + // } + + // ... set directly the known observable bin iPair.first for this type of scenario! + // cout << "AAA Accepted iobs = " << iPair.first << ", mu = " << mu[0] << endl; + scen.SetObsBin(iPair.first); + scen.SetObsScale1(mu[0]); // must be consistent with 'mu' from contribs + + // But we must communicate additional potentially negative weight factor iPair.second! + // This factor is the difference in occurrences of jet algo 1 jets vs. jet algo 2 jets + scen.SetObsWeight((double)iPair.second); + // KR TODO The above would make the extension of FillAllSubprocesses with 3rd argument superfluous + + if (lFlexibleScaleTable && ScaleLabel.size()==2) { + scen.SetObsScale2(mu[1]); + ftable->FillAllSubprocesses(contribsflex,scen,(double)iPair.second); + } else { + ftable->FillAllSubprocesses(contribsfix,scen,(double)iPair.second); + } + } else { + // --- jet-pair observable rejected + if ( say::debug.GetSpeak() ) { + say::debug["ScenarioCode"] << "----------------- Jet-pair observable rejected! ------------------" << endl; + } + } + } // block zero difference + } // end of fill loop + say::debug["ScenarioCode"] << "==================== End of event ====================" << endl; +} + +//------ DON'T TOUCH THIS PART! ------ + +// --- fastNLO v2.2: interface to NLOJet++: read steering file, set LO of selected process +void inputfunc(unsigned int& nj, unsigned int& nu, unsigned int& nd) { + // This is the very first routine called from NLOJet++! + // It seems that it gets called three times. + static int ILOord; // no default + if (!ftable) { + // Switch on debug output even before steering is initialised + // Normally this should be commented out! + // speaker::SetGlobalVerbosity(say::DEBUG); + // The following lines should be printed ONCE. Steering parameters have not yet been read. + cout << " # INIT: [inputfunc] ---------- inputfunc called ----------" << endl; + cout << " # INIT: [inputfunc] ---------- initializing ... ----------" << endl; + // --- read in steering and create fastNLO table accordingly + // --- ftable is a global constant + ftable = new fastNLOCreate(UsefulNlojetTools::GenConsts(),UsefulNlojetTools::ProcConsts_HHC(),"InclusiveNJetDiffs.str"); + if ( ftable->TestParameterInSteering("LeadingOrder") ) { + ftable->GetParameterFromSteering("LeadingOrder",ILOord); + } else { + say::error["ScenarioCode"] << "LO of process not defined, aborted!" << endl; + exit(1); + } + // ftable->SetLoOrder(ILOord); // Not necessary when set via LeadingOrder in steering file + cout << " # INIT: [inputfunc] ---------- LeadingOrder = " << ILOord << " ----------" << endl; + } + + // The following line is printed ONLY, when DEBUG print out has been requested by the steering. + say::debug["inputfunc"] << "---------- inputfunc called ----------" << endl; + + // Set the number of jets for the LO process according to the steering, + // e.g. 2 for hh inclusive jets, 3 for hh 3-jet mass + // nj = 1U; // only useful for DIS + switch(ILOord) { + case 2 : + // hh inclusive jets, hh dijets + nj = 2U; + break; + case 3 : + // hh 3-jets + nj = 3U; + break; + default : + say::error["ScenarioCode"] << "Unknown LO of process defined, aborted!" << endl; + exit(1); + } + + // Set the number of the (massless!) up and down type flavours (usually, you won´t change that) + nu = 2U; + nd = 3U; +} + +// --- fastNLO v2.2: interface to NLOJet++: set cms energy and phase space generator +void psinput(phasespace_hhc *ps, double& s) { + // cout << " # INIT: [psinput] ---------- psinput called ----------" << endl; + say::debug["psinput"] << "---------- psinput called ----------" << endl; + + // --- set the center-of-mass energy squared as read from steering file + s = pow(ftable->GetEcms(),2); + say::debug["psinput"] << "cms energy read from steering: sqrt(s) = " << ftable->GetEcms() << endl; + + // --- in principle alternative phase space generators can be used + // --- we support only the default for now + ps = 0; +} + +// --- fastNLO v2.2: interface to NLOJet++: user class +user_base_hhc * userfunc() { + say::debug["userfunc"] << "---------- userfunc called ----------" << endl; + return new UserHHC; +} + +// --- fastNLO v2.2: get some info (order, name) from NLOjet++ command line arguments +void InitfNLO(const std::basic_string<char>& __file_name) { + say::debug["InitfNLO"] << "---------- InitfNLO called ----------" << endl; + // --- obtain relevant variables from NLOJet++ command line arguments + ftable->SetOrderOfAlphasOfCalculation(UsefulNlojetTools::GetOrderOfRun(__file_name)); + + // --- set fastNLO filename according to NLOJet++ command line arguments + string tabFilename = __file_name.c_str(); + tabFilename += ".tab"; + +#ifdef HAVE_ZLIB + bool lgzip = true; +#else + bool lgzip = false; +#endif + + if ( SteeringPars["OutputCompression"] ) { + ftable->GetParameterFromSteering("OutputCompression",lgzip); + } + // string filename = fScenConsts.OutputFilename; + // if ( lgzip ) tabFilename += ".gz"; + tabFilename += ".gz"; + ftable->SetFilename(tabFilename); +} + +// --- fastNLO v2.2: class UserHHC: initialize event counter and storage limit (called once) +void UserHHC::initfunc(unsigned int) { + say::debug["UserHHC::initfunc"] << "---------- UserHHC::initfunc called ----------" << endl; + nevents = 0; + nwritemax = 10000000; +} + +// --- fastNLO v2.2: class UserHHC: count events and store table (called after each event) +void UserHHC::end_of_event() { + say::debug["UserHHC::end_of_event"] << "---------- UserHHC::end_of_event called ----------" << endl; + // --- count events + nevents += 1; + // --- store table + say::debug["UserHHC::end_of_event"] << " nevents = " << nevents << ", nwrite = " << nwrite << endl; + if (( (unsigned long)nevents % nwrite)==0){ + ftable->SetNumberOfEvents(nevents); + ftable->WriteTable(); + if ( nwrite < nwritemax ) { + nwrite *= 10; + } else { + nwrite = nwritemax; + } + } +} + +// --- define function for azimuthal angular distance in [-Pi,Pi] +double dphi(double phi2, double phi1) { + double delta_phi = phi2-phi1; + if (delta_phi > M_PI) { + delta_phi -= 2*M_PI; + } else if (delta_phi < -M_PI) { + delta_phi += 2*M_PI; + } + return delta_phi; +} diff --git a/v2.6/generators/nlojet++/interface/hadron/InclusiveNJetEvents.cc b/v2.6/generators/nlojet++/interface/hadron/InclusiveNJetEvents.cc new file mode 100644 index 0000000000000000000000000000000000000000..607f1424b4e5a788ae81136f5b599272d0ff9bca --- /dev/null +++ b/v2.6/generators/nlojet++/interface/hadron/InclusiveNJetEvents.cc @@ -0,0 +1,923 @@ +// +// fastNLO v2.2 creator code for inclusive N-jet event scenarios +// +// ============== fastNLO user: ======================================== +// To create your own scenario, it is recommended to take this +// example code, make a copy, and implement the relevant changes. +// Important: +// Edit only those parts which are clearly indicated as modifiable +// "fastNLO user" code. If a code fragment is not explicitely +// labeled as "fastNLO user", it is likely that a modification will +// interfere with the fastNLO routines. +// +// This file contains the following routines: +// struct fNLOSelector (-> user edits) +// struct fNLOSorter (-> user edits) +// UserHHC::phys_output (called once at the start -> user edits) +// UserHHC::userfunc (called once for each event -> user edits) +// inputfunc (don't touch) +// psinput (don't touch) +// userfunc (don't touch) +// InitfNLO (don't touch) +// UserHHC::initfunc (don't touch) +// UserHHC::end_of_event (don't touch) +// +// If the provided example routine can not be steered flexibly enough, +// feel free to implement the missing parts. +// +// Implementing a new scenario may imply to change: +// - the jet algorithm ("#include" statement and assignment of "jetclus..") +// - the jet observables to compute +// - the scale definition +// +// ===================================================================== + +//------ DON'T TOUCH THIS PART! ------ +#include <cfloat> +#include <iostream> +#include <map> +#include <bits/hhc-phasespace.h> +#include <bits/hhc-process.h> +#include <bits/hhc-jetfunc.h> + +//----- used namespaces ----- +using namespace nlo; +using namespace std; + +//----- fastNLO ----- +#include "fastnlotk/fastNLOCreate.h" +#include "fastnlotk/fastNLOEvent.h" + +//----- declaration of the user defined functions ----- +// --- fastNLO v2.2: interface to NLOJet++: read steering file, set LO of selected process +void inputfunc(unsigned int&, unsigned int&, unsigned int&); +// --- fastNLO v2.2: interface to NLOJet++: set cms energy and phase space generator +void psinput(phasespace_hhc *, double&); +// --- fastNLO v2.2: interface to NLOJet++: user class +user_base_hhc * userfunc(); +// --- dphi +double dphi(double phi2, double phi1); + +//----- array of the symbols symbols ----- +extern "C"{ + struct { + const char *name; + void *address; + } user_defined_functions[] = + { + // process index: hhc for hadron-hadron --> jets + {"procindex", (void *) "hhc"}, + // input function + {"inputfunc", (void *) inputfunc}, + // phase space input function + {"psinput", (void *) psinput}, + // user defined functions + {"userfunc", (void *) userfunc}, + // end of the list + {0, 0} + }; +} + +//------ END OF THE DO-NOT-TOUCH-PART ------ + +//------ USER DEFINED PART STARTS HERE ------ +//#include <algorithm> + +// --- fastNLO v2.2: include header file of interface to NLOJet++ +#include "fnlo_int_nlojet/fnlo_int_hhc_nlojet.h" + +// --- fastNLO user: include header file for the jet algorithm +#include "fnlo_int_nlojet/fastjet-jets.h" + +// --- fastNLO v2.2: define global pointer to fastNLO steering file +fastNLOCreate *ftable = NULL; + +// --- fastNLO v2.2: get some info (order, name) from NLOjet++ command line arguments +void InitfNLO(const std::basic_string<char>& fname); + +// --- fastNLO v2.2: define user class to be used with NLOJet++ +class UserHHC : public basic_user_set<user0d_hhc, user1h_hhc, user2h_hhc> { +public: + // --- fastNLO user: evaluate steering file and define physics output (called once before first event) + virtual void phys_output(const std::basic_string<char>& fname, unsigned long nsave = 10000UL, bool txt = false); + // --- fastNLO v2.2: initialize event counter and storage limit (called once) + void initfunc(unsigned int); + // --- fastNLO user: analyze parton event (called once for each event) + void userfunc(const event_hhc&, const amplitude_hhc&); + // --- fastNLO v2.2: count events and store table (called after each event) + virtual void end_of_event(); + // 'nsave' defines after how many events the accumulated results are stored into a table file. + // The tablefile name is given by 'name-hhc-[born|nlo]-[2jet|3jet].tab', where + // - 'name' is specified via the '-n name' option of NLOJet++ + // - 'born' or 'nlo' are set according to the '-cborn' resp. '-cnlo' options of NLOJet++ + // - '2jet' or '3jet' are set according to the 'LeadingOrder' steering parameter. + // Existing files with the same name are overwritten. + // 'nsave' is initialized with 10000 or, if specified, to the number given via + // the command line option '--save-after=nsave'. In fastNLO this number is logarithmically + // increased after each table storage by factors of 10 up to nwritemax = 10M such that + // at the latest after each 10M events the accumulated results are written on disk. + +private: + // --- fastNLO user: define the jet algorithm (for the choice of included header file above) + fastjet_jets jetclusfj; + + // --- define the jet structure + bounded_vector<lorentzvector<double> > pj; + + // --- fastNLO definitions (not for user) + double nevents; // No. of events calculated so far + unsigned long nwrite; // Actual no. of events after which to write out the table + unsigned long nwritemax; // Maximal no. of events after which to write out the table + + // --- fastNLO steering + bool lFlexibleScaleTable; // Fill fixed- or flexible-scale table (default is fixed-scale) + int NDim; // Dimensionality of distributions (no default, must be defined) + vector<string> DimLabel; // Dimension labels (no default, must be defined) + // enum to switch between implemented observables (max. of 3 simultaneously) + enum Obs { YMAX, YSTAR, Y1ABSRAP, Y2SIGN, MJJGEV, MJJTEV, PT12GEV, CHIJJ, HTGEV, HTHALFGEV, PTMAXGEV, DPHI12 }; + Obs obsdef[3]; + double obs[3]; + vector<string> ScaleLabel; // Scale labels (Scale1: no default, must be defined; Scale2: default is "pT_max_[GeV]") + // enum to switch between implemented scale definitions (max. of 2 simultaneously) + // (Njet > 1!) + enum Scales { PTMAX, PT12AVE, PT123AVE, MJJHALF, PTMAXEXPYSTAR, EXPYSTAR, HT, HTHALF, HTP, HTPHALF }; + Scales mudef[2]; + double mu[2]; + int jetalgo; // Define fastjet jet algorithm (no default, must be defined) + double jetsize; // Define jet size R (no default, must be defined) + double overlapthreshold; // Define overlap threshold (default is 0.5) + double ptjmin; // Minimal jet pT (no default, must be defined; should be >= minimum of 1 GeV specified in interface to fastjet) + double yetajmin; // Minimal jet (pseudo-)rapidity (no default, must be defined) + double yetajmax; // Maximal jet (pseudo-)rapidity (no default, must be defined) + bool lpseudo; // Switch to use either jet rapidity y or jet eta + int Njetmin; // Minimal number of jets in phase space (default is 2) + double ptj1min; // Minimal jet pT for leading jet (default is ptjmin) + double ptj2min; // Minimal jet pT for 2nd leading jet (default is ptjmin) + double ptj3min; // Minimal jet pT for 3rd leading jet (default is ptjmin) + double ycjjmax; // Maximal jet rapidity for leading two jets and further central jets (default is no limitation, i.e. DBL_MAX) + int Ncjetmin; // Minimal number of central jets (default is no limitation, i.e. zero) + double yboostmax; // Maximal y_boost = 0.5 * |y1 + y2| (default is no limitation, i.e. DBL_MAX) + double ystarmax; // Maximal y_star = 0.5 * |y1 - y2| (default is no limitation, i.e. DBL_MAX) + double obsmin[3]; // Minimum in observable in nth dimension (default derived from binning) + double obsmax[3]; // Maximum in observable in nth dimension (default derived from binning) +}; + +// --- fastNLO user: modify the jet selection in UserHHC::userfunc (default = cutting in |y| min, |y| max and pt min) +// (the return value must be true for jets to be UNselected) +struct fNLOSelector { + fNLOSelector(double ymin, double ymax, double ptmin, bool pseudo=false): + _ymin (ymin), _ymax (ymax), _ptmin (ptmin), _pseudo (pseudo){}; + double _ymin, _ymax, _ptmin; + bool _pseudo; + bool operator() (const lorentzvector<double> &a) { + if (!_pseudo) return ! (_ymin <= abs(a.rapidity()) && abs(a.rapidity()) < _ymax && _ptmin <= a.perp()); + else return ! (_ymin <= abs(a.prapidity()) && abs(a.prapidity()) < _ymax && _ptmin <= a.perp()); + }; +}; + +// --- fastNLO user: modify the jet sorting in UserHHC::userfunc (default = descending in jet pt) +struct fNLOSorter { + bool operator() (const lorentzvector<double> &a, const lorentzvector<double> &b) {return (a.perp() > b.perp());}; +}; + +// sign function returning -1, 0, 1 +template <typename T> int sgn(T val) { + return (T(0) < val) - (val < T(0)); +} + +// --- fastNLO user: check and get steering parameters once and store into static vars +static std::map < std::string, bool > SteeringPars; + +// --- fastNLO user: class UserHHC: evaluate steering file and define physics output (called once before first event) +void UserHHC::phys_output(const std::basic_string<char>& __file_name, unsigned long __save, bool __txt) { + + //------ DON'T TOUCH THIS PART! ------ + // cout << " # INIT: [UserHHC::phys_output] ---------- UserHHC::phys_output called ----------" << endl; + say::debug["UserHHC::phys_output"] << "---------- UserHHC::phys_output called ----------" << endl; + say::debug["UserHHC::phys_output"] << "Before: __save = " << __save << ", nwrite = " << nwrite << endl; + nwrite = __save; + InitfNLO(__file_name); + //------ END OF THE DO-NOT-TOUCH-PART ------ + + // --- fastNLO user: + // Here is your playground where you can evaluate the steering file settings. + // ATTENTION: Some settings are mandatory for the correct functioning! + + // get general steering parameters needed here from steering file + say::debug["UserHHC::phys_output"] << "Evaluating steering parameters ..." << endl; + // fixed- or flexible-scale table + SteeringPars["FlexibleScaleTable"] = ftable->TestParameterInSteering("FlexibleScaleTable"); + lFlexibleScaleTable = false; // default + if ( SteeringPars["FlexibleScaleTable"] ) { + ftable->GetParameterFromSteering("FlexibleScaleTable",lFlexibleScaleTable); + } + // dimensionality + SteeringPars["DifferentialDimension"] = ftable->TestParameterInSteering("DifferentialDimension"); + if ( SteeringPars["DifferentialDimension"] ) { + ftable->GetParameterFromSteering("DifferentialDimension",NDim); + } else { + say::error["ScenarioCode"] << "Dimensioning of binning not set, aborted!" << endl; + exit(1); + } + if ( NDim < 1 || 3 < NDim ) { + say::error["ScenarioCode"] << "Only 1- to 3-dimensional binning implemented, aborted!" << endl; + say::error["ScenarioCode"] << "Please implement the requested " << NDim << "-dimensional binning." << endl; + exit(1); + } + // dimension labels + SteeringPars["DimensionLabels"] = ftable->TestParameterInSteering("DimensionLabels"); + DimLabel.resize(NDim); + if ( SteeringPars["DimensionLabels"] ) { + ftable->GetParameterFromSteering("DimensionLabels",DimLabel); + } else { + say::error["ScenarioCode"] << "Dimension labels not set, aborted!" << endl; + exit(1); + } + // define the observables according to the dimension labels + for ( int i = 0; i<NDim; i++ ) { + if ( DimLabel[i] == "|y_max|" ) { + obsdef[i] = YMAX; + } else if ( DimLabel[i] == "y_star" ) { + obsdef[i] = YSTAR; + } else if ( DimLabel[i] == "|y_1|" ) { + obsdef[i] = Y1ABSRAP; + } else if ( DimLabel[i] == "y_2s" ) { + obsdef[i] = Y2SIGN; + } else if ( DimLabel[i] == "Mjj_[GeV]" ) { + obsdef[i] = MJJGEV; + } else if ( DimLabel[i] == "Mjj_[TeV]" ) { + obsdef[i] = MJJTEV; + } else if ( DimLabel[i] == "<pT_1,2>_[GeV]" ) { + obsdef[i] = PT12GEV; + } else if ( DimLabel[i] == "Chi" ) { + obsdef[i] = CHIJJ; + } else if ( DimLabel[i] == "HT_[GeV]" ) { + obsdef[i] = HTGEV; + } else if ( DimLabel[i] == "HT/2_[GeV]" ) { + obsdef[i] = HTHALFGEV; + } else if ( DimLabel[i] == "pT_max_[GeV]" ) { + obsdef[i] = PTMAXGEV; + } else if ( DimLabel[i] == "DeltaPhi_1,2" ) { + obsdef[i] = DPHI12; + } else { + say::error["ScenarioCode"] << "Unknown observable, i.e. dimension label, aborted!" << endl; + say::error["ScenarioCode"] << "DimLabel[" << i << "] = " << DimLabel[i] << endl; + say::error["ScenarioCode"] << "Please complement this scenario to include the requested observable." << endl; + exit(1); + } + } + // scale descriptions + SteeringPars["ScaleDescriptionScale1"] = ftable->TestParameterInSteering("ScaleDescriptionScale1"); + ScaleLabel.resize(2); + if ( SteeringPars["ScaleDescriptionScale1"] ) { + ftable->GetParameterFromSteering("ScaleDescriptionScale1",ScaleLabel[0]); + } else { + say::error["ScenarioCode"] << "No description of scale 1, aborted!" << endl; + exit(1); + } + SteeringPars["ScaleDescriptionScale2"] = ftable->TestParameterInSteering("ScaleDescriptionScale2"); + ScaleLabel[1] = "pT_max_[GeV]"; // default + if ( SteeringPars["ScaleDescriptionScale2"] ) { + ftable->GetParameterFromSteering("ScaleDescriptionScale2",ScaleLabel[1]); + } else { + ScaleLabel[1] = "-"; + say::warn["ScenarioCode"] << "No description of scale 2, flexible-scale tables not possible!" << endl; + } + // scale descriptions define the scales + for ( unsigned int i = 0; i < ScaleLabel.size(); i++ ) { + if ( ScaleLabel[i] == "pT_max_[GeV]" ) { + mudef[i] = PTMAX; + } else if ( ScaleLabel[i] == "<pT_1,2>_[GeV]" ) { + mudef[i] = PT12AVE; + } else if ( ScaleLabel[i] == "<pT_1,2,3>_[GeV]" ) { + mudef[i] = PT123AVE; + } else if ( ScaleLabel[i] == "Mjj/2_[GeV]" ) { + mudef[i] = MJJHALF; + } else if ( ScaleLabel[i] == "pT_max*exp(0.3*y_star)_[GeV]" ) { + mudef[i] = PTMAXEXPYSTAR; + } else if ( ScaleLabel[i] == "exp(0.3*y_star)" ) { + mudef[i] = EXPYSTAR; + } else if ( ScaleLabel[i] == "HT_[GeV]" ) { + mudef[i] = HT; + } else if ( ScaleLabel[i] == "HT/2_[GeV]" ) { + mudef[i] = HTHALF; + } else if ( ScaleLabel[i] == "HT_part_[GeV]" ) { + mudef[i] = HTP; + } else if ( ScaleLabel[i] == "HT_part/2_[GeV]" ) { + mudef[i] = HTPHALF; + } else { + say::error["ScenarioCode"] << "Unknown scale, i.e. scale description, aborted!" << endl; + say::error["ScenarioCode"] << "ScaleLabel[" << i << "] = " << ScaleLabel[i] << endl; + say::error["ScenarioCode"] << "Please complement this scenario to include the requested scale." << endl; + exit(1); + } + } + + // definition of jet algorithm and jet phase space limits (no defaults) + // + // --- fastNLO user: set the jet algorithm and size via steering file + // fastjet clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT + // fastjet cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone + SteeringPars["JetAlgo"] = ftable->TestParameterInSteering("JetAlgo"); + if ( SteeringPars["JetAlgo"] ) { + ftable->GetParameterFromSteering("JetAlgo",jetalgo); + if ( jetalgo < 0 || (2 < jetalgo && jetalgo < 10) || 12 < jetalgo ) { + say::error["ScenarioCode"] << "Unknown jet algorithm " << jetalgo << ", aborted!" << endl; + exit(1); + } + } else { + say::error["ScenarioCode"] << "No jet algorithm selected, aborted!" << endl; + exit(1); + } + SteeringPars["Rjet"] = ftable->TestParameterInSteering("Rjet"); + if ( SteeringPars["Rjet"] ) { + ftable->GetParameterFromSteering("Rjet",jetsize); + } else { + say::error["ScenarioCode"] << "Jet size R not defined, aborted!" << endl; + exit(1); + } + SteeringPars["OvThr"] = ftable->TestParameterInSteering("OvThr"); + overlapthreshold = 0.5; // default + if ( SteeringPars["OvThr"] ) { + ftable->GetParameterFromSteering("OvThr",overlapthreshold); + } else if ( jetalgo > 9 ) { + say::error["ScenarioCode"] << "Overlap threshold not defined for jet algorithm " << jetalgo << ", aborted!" << endl; + exit(1); + } + // --- fastNLO user: declare and initialize overall jet phase space cuts via steering file + // overall lowest pT for jets to be considered + SteeringPars["ptjmin"] = ftable->TestParameterInSteering("ptjmin"); + if ( SteeringPars["ptjmin"] ) { + ftable->GetParameterFromSteering("ptjmin",ptjmin); + } else { + say::error["ScenarioCode"] << "Minimal jet pT (ptjmin) not defined, aborted!" << endl; + exit(1); + } + // overall highest pT for jets not implemented, since uncritical with respect to CPU time consumption + // overall smallest |(pseudo-)rapidity| for jets to be considered, use either y or eta but not both + SteeringPars["yjmin"] = ftable->TestParameterInSteering("yjmin"); + SteeringPars["etajmin"] = ftable->TestParameterInSteering("etajmin"); + if ( SteeringPars["yjmin"] && !SteeringPars["etajmin"] ) { + ftable->GetParameterFromSteering("yjmin",yetajmin); + } else if ( !SteeringPars["yjmin"] && SteeringPars["etajmin"] ) { + ftable->GetParameterFromSteering("etajmin",yetajmin); + } else { + say::error["ScenarioCode"] << "Minimal jet (pseudo)rapidity (yjmin or etajmin) not uniquely defined, aborted!" << endl; + exit(1); + } + // overall largest |(pseudo-)rapidity| for jets to be considered, use either y or eta but not both + SteeringPars["yjmax"] = ftable->TestParameterInSteering("yjmax"); + SteeringPars["etajmax"] = ftable->TestParameterInSteering("etajmax"); + if ( SteeringPars["yjmax"] && !SteeringPars["etajmax"] ) { + ftable->GetParameterFromSteering("yjmax",yetajmax); + } else if ( !SteeringPars["yjmax"] && SteeringPars["etajmax"] ) { + ftable->GetParameterFromSteering("etajmax",yetajmax); + } else { + say::error["ScenarioCode"] << "Maximal jet (pseudo)rapidity (yjmax or etajmax) not uniquely defined, aborted!" << endl; + exit(1); + } + // define logical for decision on cuts in (pseudo-)rapidity, no mixing allowed here + if ( SteeringPars["yjmin"] && SteeringPars["yjmax"] ) { + lpseudo = false; + } else if ( SteeringPars["etajmin"] && SteeringPars["etajmax"] ) { + lpseudo = true; + } else { + say::error["ScenarioCode"] << "Phase space cuts mixed in (pseudo-)rapidity, aborted!" << endl; + say::error["ScenarioCode"] << "Booleans for cut selections are" << + " yjmin " << SteeringPars["yjmin"] << + ", yjmax " << SteeringPars["yjmax"] << + ", etajmin " << SteeringPars["etajmin"] << + ", etajmax " << SteeringPars["etajmax"] << endl; + say::error["ScenarioCode"] << "If you really want to mix, the code needs to be adapted." << endl; + exit(1); + } + // minimal number of jets required to be within preselected jet phase space (for dijets this must be two!) + SteeringPars["Njetmin"] = ftable->TestParameterInSteering("Njetmin"); + Njetmin = 2; + if ( SteeringPars["Njetmin"] ) { + ftable->GetParameterFromSteering("Njetmin",Njetmin); + } + if ( Njetmin < 2 ) { + say::error["ScenarioCode"] << "This is a 2+-jet scenario. At least two jets must be present, aborted!" << endl; + say::error["ScenarioCode"] << "Please correct the Njetmin requirement. Njetmin = " << Njetmin << endl; + exit(1); + } + + // --- fastNLO user: declare and initialize Njet phase space cuts and definitions via steering file + // extra minimal pT requirement for leading jet + SteeringPars["ptj1min"] = ftable->TestParameterInSteering("ptj1min"); + ptj1min = ptjmin; // default is overall jet pT cut + if ( SteeringPars["ptj1min"] ) { + ftable->GetParameterFromSteering("ptj1min",ptj1min); + } + // extra minimal pT requirement for 2nd leading jet + SteeringPars["ptj2min"] = ftable->TestParameterInSteering("ptj2min"); + ptj2min = ptjmin; // default is overall jet pT cut + if ( SteeringPars["ptj2min"] ) { + ftable->GetParameterFromSteering("ptj2min",ptj2min); + } + // extra minimal pT requirement for 3rd leading jet + SteeringPars["ptj3min"] = ftable->TestParameterInSteering("ptj3min"); + ptj3min = ptjmin; // default is overall jet pT cut + if ( SteeringPars["ptj3min"] ) { + ftable->GetParameterFromSteering("ptj3min",ptj3min); + } + // maximal jet rapidity for leading two jets and further central jets + SteeringPars["ycjjmax"] = ftable->TestParameterInSteering("ycjjmax"); + ycjjmax = DBL_MAX; // default is no limitation + if ( SteeringPars["ycjjmax"] ) { + ftable->GetParameterFromSteering("ycjjmax",ycjjmax); + } + // minimal number of central jets + SteeringPars["Ncjetmin"] = ftable->TestParameterInSteering("Ncjetmin"); + Ncjetmin = 0; // default is no limitation + if ( SteeringPars["Ncjetmin"] ) { + ftable->GetParameterFromSteering("Ncjetmin",Ncjetmin); + } + // maximal y_boost + SteeringPars["yboostmax"] = ftable->TestParameterInSteering("yboostmax"); + yboostmax = DBL_MAX; // default is no limitation + if ( SteeringPars["yboostmax"] ) { + ftable->GetParameterFromSteering("yboostmax",yboostmax); + } + // maximal y_star + SteeringPars["ystarmax"] = ftable->TestParameterInSteering("ystarmax"); + ystarmax = DBL_MAX; // default is no limitation + if ( SteeringPars["ystarmax"] ) { + ftable->GetParameterFromSteering("ystarmax",ystarmax); + } + // overall minimum & maximum for 1st observable, e.g. maximal absolute rapidity |y_max| + SteeringPars["obs0min"] = ftable->TestParameterInSteering("obs0min"); + obsmin[0] = ftable->GetObsBinsLoBoundsMin(0); // by default derived from binning in obs0 + if ( SteeringPars["obs0min"] ) { + ftable->GetParameterFromSteering("obs0min",obsmin[0]); + } + SteeringPars["obs0max"] = ftable->TestParameterInSteering("obs0max"); + obsmax[0] = ftable->GetObsBinsUpBoundsMax(0); // by default derived from binning in obs0 + if ( SteeringPars["obs0max"] ) { + ftable->GetParameterFromSteering("obs0max",obsmax[0]); + } + // overall minimum & maximum for 2nd observable, e.g. dijet mass mjj + obsmin[1] = -DBL_MAX; + obsmax[1] = +DBL_MAX; + if (NDim > 1) { + SteeringPars["obs1min"] = ftable->TestParameterInSteering("obs1min"); + obsmin[1] = ftable->GetObsBinsLoBoundsMin(1); // by default derived from binning in obs1 + if ( SteeringPars["obs1min"] ) { + ftable->GetParameterFromSteering("obs1min",obsmin[1]); + } + SteeringPars["obs1max"] = ftable->TestParameterInSteering("obs1max"); + obsmax[1] = ftable->GetObsBinsUpBoundsMax(1); // by default derived from binning in obs1 + if ( SteeringPars["obs1max"] ) { + ftable->GetParameterFromSteering("obs1max",obsmax[1]); + } + } + // overall minimum & maximum for 3rd observable + obsmin[2] = -DBL_MAX; + obsmax[2] = +DBL_MAX; + if (NDim > 2) { + SteeringPars["obs2min"] = ftable->TestParameterInSteering("obs2min"); + obsmin[2] = ftable->GetObsBinsLoBoundsMin(2); // by default derived from binning in obs2 + if ( SteeringPars["obs2min"] ) { + ftable->GetParameterFromSteering("obs2min",obsmin[2]); + } + SteeringPars["obs2max"] = ftable->TestParameterInSteering("obs2max"); + obsmax[2] = ftable->GetObsBinsUpBoundsMax(2); // by default derived from binning in obs2 + if ( SteeringPars["obs2max"] ) { + ftable->GetParameterFromSteering("obs2max",obsmax[2]); + } + } + jetclusfj.setup(static_cast<fastjet_jets::JetAlgorithm>(jetalgo), jetsize, overlapthreshold); +} + +// --- fastNLO v2.2: class UserHHC: analyze parton event (called once for each event) +void UserHHC::userfunc(const event_hhc& p, const amplitude_hhc& amp) { + if ( say::debug.GetSpeak() ) { + say::debug["UserHHC::userfunc"] << "---------- UserHHC::userfunc called ----------" << endl; + say::debug["ScenarioCode"] << "==================== Start of event ====================" << endl; + } + + // --- fastNLO user: + // Here is your playground where you compute your observables and + // scales for each jet or event. + // The bin number ("obsbin") gets passed to fastNLO's table filling code. + // Usually, pT and E are in GeV, but this may be changed. + // ATTENTION: Scales must always be in GeV! + + // derive partonic HT scale + double htp = 0.; + unsigned int np = p.upper(); + for (unsigned int i = 1; i <= np; i++) { + htp += p[i].perp(); + // --- debug output + if ( say::debug.GetSpeak() ) { + say::debug["ScenarioCode"] << "partonic HT: parton # i, pt, htp: " << i << ", " << p[i].perp() << ", " << htp << endl; + } + } + + // apply the jet algorithm to partonic 4-vector array p of NLOJet++ + pj = jetclusfj(p); + unsigned int nj = pj.upper(); + + // --- check on minimal and maximal no. of jets + // ATTENTION: In principle, without cuts, there should always be two. + // For efficiency reasons though, our interface to the fastjet algorithms + // requires a minimal jet pT of 1 GeV. If this is a problem, the ptmin value + // in fj-jets.cc needs to be changed. + // There should never be more than four jets in NLOJet++ + if (nj < 1) { + say::debug["ScenarioCode"] << "This event from NLOJet++ has no jets with pT > 1 GeV. Skipped!" << endl; + return; + } else if (nj > 4) { + say::error["ScenarioCode"] << "This event from NLOJet++ has more than four jets, which should never happen. Aborted!" << endl; + exit(1); + } + + // --- give some debug output before selection and sorting + if ( say::debug.GetSpeak() ) { + for (unsigned int i=1; i<=nj; i++) { + double pti = pj[i].perp(); + double yi = pj[i].rapidity(); + double etai = pj[i].prapidity(); + say::debug["ScenarioCode"] << "before cuts: jet # i, pt, y, eta: " << i << ", " << pti << ", " << yi << ", " << etai << endl; + } + } + + // --- select jets in y (lpseudo = false) or eta (lpseudo = true) and ptjmin + // note: failing jets are not deleted but moved to the end of the jet array pj! + fNLOSelector SelJets (yetajmin,yetajmax,ptjmin,lpseudo); + + // --- count number of selected jets left at this stage + size_t njet = std::remove_if(pj.begin(), pj.end(), SelJets) - pj.begin(); + if ( (int)njet < Njetmin ) return; // Nothing to be done + + // --- sort selected n jets at beginning of jet array pj, by default decreasing in pt + static fNLOSorter SortJets; + std::sort(pj.begin(), pj.begin() + njet, SortJets); + + // --- give some debug output after selection and sorting + if ( say::debug.GetSpeak() ) { + say::debug["ScenarioCode"] << "# jets before and after phase space cuts: nj, njet = " << nj << ", " << njet << endl; + if ( ! lpseudo ) { + say::debug["ScenarioCode"] << "phase space cuts: yjmin, yjmax, ptjmin: " << yetajmin << ", " << yetajmax << ", " << ptjmin << endl; + } else { + say::debug["ScenarioCode"] << "phase space cuts: etajmin, etajmax, ptjmin: " << yetajmin << ", " << yetajmax << ", " << ptjmin << endl; + } + for (unsigned int i=1; i<=njet; i++) { + double pti = pj[i].perp(); + double yi = pj[i].rapidity(); + double etai = pj[i].prapidity(); + say::debug["ScenarioCode"] << "after cuts: jet # i, pt, y, eta: " << i << ", " << pti << ", " << yi << ", " << etai << endl; + } + } + + // ---- fastNLO v2.2 + // Analyze inclusive Njet event + + // derive some event quantities + // derivations from rapidities of two leading jets + double y1 = pj[1].rapidity(); + double y2 = pj[2].rapidity(); + double yjjmax = max(abs(y1),abs(y2)); + double yboost = abs(y1+y2)/2.; + double ystar = abs(y1-y2)/2.; + // dijet mass + lorentzvector<double> pj12 = pj[1] + pj[2]; + double mjj = pj12.mag(); + if (mjj < 0.) {say::warn["ScenarioCode"] << "Negative mass encountered: " << mjj << endl;} + // average pTs of leading jets anywhere in preselected phase space + double pT1 = (pj[1].perp()) / 1.0; + double pT12 = (pj[1].perp() + pj[2].perp()) / 2.0; + double pT123 = pT12; + if ( njet > 2 ) { + pT123 = (pj[1].perp() + pj[2].perp() + pj[3].perp()) / 3.0; + } + // no. of central jets, pT of third central jet, and HT of central jets (i.e. inside ycjjmax) + int Ncjet = 0; + // double pT3c = 0; + double ht = 0.; + for (unsigned int k = 1; k <= njet; k++) { + if ( abs(pj[k].rapidity()) < ycjjmax ) { + Ncjet++; + ht += pj[k].perp(); + } + // if ( Ncjet == 3 ) {pT3c = pj[k].perp();} + } + + // --- calculate observable of nth dimension + for ( int i = 0; i<NDim; i++ ) { + switch(obsdef[i]) { + case YMAX : + // maximal rapidity + obs[i] = yjjmax; + break; + case YSTAR : + // rapidity separation half + obs[i] = ystar; + break; + case Y1ABSRAP : + // rapidity separation half + obs[i] = std::abs(y1); + break; + case Y2SIGN : + // rapidity separation half + obs[i] = y2 * sgn(y1) ; + break; + case MJJGEV : + // dijet mass + obs[i] = mjj; + break; + case MJJTEV : + // dijet mass in TeV + obs[i] = mjj/1000.; + break; + case PT12GEV : + // average pT of two leading jets + obs[i] = pT12; + break; + case CHIJJ : + // dijet chi + obs[i] = exp(abs(y1-y2)); + break; + case HTGEV : + // jet pT sum + obs[i] = ht; + break; + case HTHALFGEV : + // half of jet pT sum + obs[i] = ht/2.; + break; + case PTMAXGEV : + // leading jet pT + obs[i] = pT1; + break; + case DPHI12 : + // azimuthal angular separation between leading two jets + { + double ph1 = pj[1].phi(); + double ph2 = pj[2].phi(); + double delph = abs(ph1 - ph2); + if (delph > TWOPI/2.) delph = TWOPI - delph; + obs[i] = delph; + } + break; + default : + say::error["ScenarioCode"] << "Observable not yet implemented, aborted!" << endl; + say::error["ScenarioCode"] << "DimLabel[" << i << "] = " << DimLabel[i] << endl; + say::error["ScenarioCode"] << "Please complement this scenario to include the requested observable." << endl; + exit(1); + } + } + + // --- give some debug output before final selection + if ( say::debug.GetSpeak() ) { + say::debug["ScenarioCode"] << "---------------- Before final selection ----------------" << endl; + for ( int i = 0; i<NDim; i++ ) { + say::debug["ScenarioCode"] << "Obs. min/max values: " << i << " : obsmin = " << obsmin[i] << ", obs = " << obs[i] << ", obsmax = " << obsmax[i] << endl; + } + say::debug["ScenarioCode"] << "pT min cuts: ptj1min = " << ptj1min << ", pT1 = " << pT1 << ", ptj2min = " << ptj2min << ", pT2 = " << pj[2].perp() << endl; + say::debug["ScenarioCode"] << "y central cuts: yjjmax = " << yjjmax << ", ycjjmax = " << ycjjmax << ", Ncjetmin = " << Ncjetmin << ", Ncjet = " << Ncjet << endl; + say::debug["ScenarioCode"] << "y further cuts: yboost = " << yboost << ", yboostmax = " << yboostmax << ", ystar = " << ystar << ", ystarmax = " << ystarmax << endl; + if ( njet > 2 ) { + say::debug["ScenarioCode"] << "3rd jet cuts: ptj3min = " << ptj3min << ", pT3 = " << pj[3].perp() << endl; + } + } + + // --- Further Njet phase space cuts? + if ( ptj1min <= pT1 && ptj2min <= pj[2].perp() && + yjjmax < ycjjmax && Ncjetmin <= Ncjet && + yboost < yboostmax && ystar < ystarmax && + (njet < 3 || ptj3min <= pj[3].perp()) && + (obsmin[0] <= obs[0] && obs[0] < obsmax[0]) && + (NDim < 2 || (obsmin[1] <= obs[1] && obs[1] < obsmax[1])) && + (NDim < 3 || (obsmin[2] <= obs[2] && obs[2] < obsmax[2])) ) { + + // --- event accepted + if ( say::debug.GetSpeak() ) { + say::debug["ScenarioCode"] << "----------------- Event/jet accepted! ------------------" << endl; + say::debug["ScenarioCode"] << "==================== End of event ====================" << endl; + } + + // --- set the renormalization and factorization scales + // --- calculate the requested scales + for ( unsigned int i = 0; i < 2; i++ ) { + switch(mudef[i]) { + case PTMAX : + // maximal jet pT + mu[i] = pT1; + break; + case PT12AVE : + // average pT of leading two jets + mu[i] = pT12; + break; + case PT123AVE : + // average pT of leading three jets + mu[i] = pT123; + break; + case MJJHALF : + // half of dijet mass (must be in GeV!) + mu[i] = mjj/2.; + break; + case PTMAXEXPYSTAR : + // ATLAS definition + mu[i] = pT1 * exp(0.3*ystar); + break; + case EXPYSTAR : + // ATLAS definition, this works only as second scale choice! + mu[i] = exp(0.3*ystar); + break; + case HT : + // jet pT sum (must be in GeV!) + mu[i] = ht; + break; + case HTHALF : + // half of jet pT sum (must be in GeV!) + mu[i] = ht/2.; + break; + case HTP : + // partonic sum pT + mu[i] = htp; + say::debug["ScenarioCode"] << "HTP scale values: " << i << " : mu[i] = " << mu[i] << endl; + break; + case HTPHALF : + // half partonic sum pT + mu[i] = htp/2.; + say::debug["ScenarioCode"] << "HTPHALF scale values: " << i << " : mu[i] = " << mu[i] << endl; + break; + default : + say::error["ScenarioCode"] << "Scale not yet implemented, aborted!" << endl; + say::error["ScenarioCode"] << "ScaleLabel[" << i << "] = " << ScaleLabel[i] << endl; + say::error["ScenarioCode"] << "Please complement this scenario to include the requested scale." << endl; + exit(1); + } + } + static vector<double> scalevars; + if ( ! lFlexibleScaleTable ) scalevars = ftable->GetScaleVariations(); + + // get matrix elements + static vector<fnloEvent> contribsflex; + static vector< vector<fnloEvent> > contribsfix; + if (lFlexibleScaleTable) { + contribsflex = UsefulNlojetTools::GetFlexibleScaleNlojetContribHHC(p,amp); + } else { + contribsfix = UsefulNlojetTools::GetFixedScaleNlojetContribHHC(p,amp,mu[0],scalevars); + } + + // set and fill scenario specific quantites + fnloScenario scen; + if ( NDim < 1 || NDim > 3 ) { + say::error["ScenarioCode"] << "Less than 1D(?!) or more than 3D binning not implemented here, aborted!" << endl; + say::error["ScenarioCode"] << "DifferentialDimension NDim = " << NDim << endl; + } + for ( int i = 0; i<NDim; i++ ) { + scen.SetObservableDimI( obs[i], i ); + } + + scen.SetObsScale1( mu[0] ); // must be consistent with 'mu' from contribs + if (lFlexibleScaleTable) { + scen.SetObsScale2( mu[1] ); + ftable->FillAllSubprocesses(contribsflex,scen); + } else { + ftable->FillAllSubprocesses(contribsfix,scen); + } + } else { + // --- event rejected + if ( say::debug.GetSpeak() ) { + say::debug["ScenarioCode"] << "----------------- Event rejected! ------------------" << endl; + say::debug["ScenarioCode"] << "==================== End of event ====================" << endl; + } + } +} + +//------ DON'T TOUCH THIS PART! ------ + +// --- fastNLO v2.2: interface to NLOJet++: read steering file, set LO of selected process +void inputfunc(unsigned int& nj, unsigned int& nu, unsigned int& nd) { + // This is the very first routine called from NLOJet++! + // It seems that it gets called three times. + static int ILOord; // no default + if (!ftable) { + // Switch on debug output even before steering is initialised + // Normally this should be commented out! + // speaker::SetGlobalVerbosity(say::DEBUG); + // The following lines should be printed ONCE. Steering parameters have not yet been read. + cout << " # INIT: [inputfunc] ---------- inputfunc called ----------" << endl; + cout << " # INIT: [inputfunc] ---------- initializing ... ----------" << endl; + // --- read in steering and create fastNLO table accordingly + // --- ftable is a global constant + ftable = new fastNLOCreate(UsefulNlojetTools::GenConsts(),UsefulNlojetTools::ProcConsts_HHC(),"InclusiveNJetEvents.str"); + if ( ftable->TestParameterInSteering("LeadingOrder") ) { + ftable->GetParameterFromSteering("LeadingOrder",ILOord); + } else { + say::error["ScenarioCode"] << "LO of process not defined, aborted!" << endl; + exit(1); + } + // ftable->SetLoOrder(ILOord); // Not necessary when set via LeadingOrder in steering file + cout << " # INIT: [inputfunc] ---------- LeadingOrder = " << ILOord << " ----------" << endl; + } + + // The following line is printed ONLY, when DEBUG print out has been requested by the steering. + say::debug["inputfunc"] << "---------- inputfunc called ----------" << endl; + + // Set the number of jets for the LO process according to the steering, + // e.g. 2 for hh inclusive jets, 3 for hh 3-jet mass + // nj = 1U; // only useful for DIS + switch(ILOord) { + case 2 : + // hh inclusive jets, hh dijets + nj = 2U; + break; + case 3 : + // hh 3-jets + nj = 3U; + break; + default : + say::error["ScenarioCode"] << "Unknown LO of process defined, aborted!" << endl; + exit(1); + } + + // Set the number of the (massless!) up and down type flavours (usually, you won´t change that) + nu = 2U; + nd = 3U; +} + +// --- fastNLO v2.2: interface to NLOJet++: set cms energy and phase space generator +void psinput(phasespace_hhc *ps, double& s) { + // cout << " # INIT: [psinput] ---------- psinput called ----------" << endl; + say::debug["psinput"] << "---------- psinput called ----------" << endl; + + // --- set the center-of-mass energy squared as read from steering file + s = pow(ftable->GetEcms(),2); + say::debug["psinput"] << "cms energy read from steering: sqrt(s) = " << ftable->GetEcms() << endl; + + // --- in principle alternative phase space generators can be used + // --- we support only the default for now + ps = 0; +} + +// --- fastNLO v2.2: interface to NLOJet++: user class +user_base_hhc * userfunc() { + say::debug["userfunc"] << "---------- userfunc called ----------" << endl; + return new UserHHC; +} + +// --- fastNLO v2.2: get some info (order, name) from NLOjet++ command line arguments +void InitfNLO(const std::basic_string<char>& __file_name) { + say::debug["InitfNLO"] << "---------- InitfNLO called ----------" << endl; + // --- obtain relevant variables from NLOJet++ command line arguments + ftable->SetOrderOfAlphasOfCalculation(UsefulNlojetTools::GetOrderOfRun(__file_name)); + + // --- set fastNLO filename according to NLOJet++ command line arguments + string tabFilename = __file_name.c_str(); + tabFilename += ".tab"; + +#ifdef HAVE_ZLIB + bool lgzip = true; +#else + bool lgzip = false; +#endif + + if ( SteeringPars["OutputCompression"] ) { + ftable->GetParameterFromSteering("OutputCompression",lgzip); + } + // string filename = fScenConsts.OutputFilename; + // if ( lgzip ) tabFilename += ".gz"; + tabFilename += ".gz"; + ftable->SetFilename(tabFilename); +} + +// --- fastNLO v2.2: class UserHHC: initialize event counter and storage limit (called once) +void UserHHC::initfunc(unsigned int) { + say::debug["UserHHC::initfunc"] << "---------- UserHHC::initfunc called ----------" << endl; + nevents = 0; + nwritemax = 10000000; +} + +// --- fastNLO v2.2: class UserHHC: count events and store table (called after each event) +void UserHHC::end_of_event() { + say::debug["UserHHC::end_of_event"] << "---------- UserHHC::end_of_event called ----------" << endl; + // --- count events + nevents += 1; + // --- store table + say::debug["UserHHC::end_of_event"] << " nevents = " << nevents << ", nwrite = " << nwrite << endl; + if (( (unsigned long)nevents % nwrite)==0){ + ftable->SetNumberOfEvents(nevents); + ftable->WriteTable(); + if ( nwrite < nwritemax ) { + nwrite *= 10; + } else { + nwrite = nwritemax; + } + } +} + +// --- define function for azimuthal angular distance in [-Pi,Pi] +double dphi(double phi2, double phi1) { + double delta_phi = phi2-phi1; + if (delta_phi > M_PI) { + delta_phi -= 2*M_PI; + } else if (delta_phi < -M_PI) { + delta_phi += 2*M_PI; + } + return delta_phi; +} diff --git a/v2.6/generators/nlojet++/interface/hadron/InclusiveNJetPairs.cc b/v2.6/generators/nlojet++/interface/hadron/InclusiveNJetPairs.cc new file mode 100644 index 0000000000000000000000000000000000000000..9fe3caff430909f3d0510da2b7fe3cb558cf1bf4 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/hadron/InclusiveNJetPairs.cc @@ -0,0 +1,815 @@ +// +// fastNLO v2.2 creator code for inclusive N jet-pairs scenarios +// +// ============== fastNLO user: ======================================== +// To create your own scenario, it is recommended to take this +// example code, make a copy, and implement the relevant changes. +// Important: +// Edit only those parts which are clearly indicated as modifiable +// "fastNLO user" code. If a code fragment is not explicitely +// labeled as "fastNLO user", it is likely that a modification will +// interfere with the fastNLO routines. +// +// This file contains the following routines: +// struct fNLOSelector (-> user edits) +// struct fNLOSorter (-> user edits) +// UserHHC::phys_output (called once at the start -> user edits) +// UserHHC::userfunc (called once for each event -> user edits) +// inputfunc (don't touch) +// psinput (don't touch) +// userfunc (don't touch) +// InitfNLO (don't touch) +// UserHHC::initfunc (don't touch) +// UserHHC::end_of_event (don't touch) +// +// If the provided example routine can not be steered flexibly enough, +// feel free to implement the missing parts. +// +// Implementing a new scenario may imply to change: +// - the jet algorithm ("#include" statement and assignment of "jetclus..") +// - the jet observables to compute +// - the scale definition +// +// ===================================================================== + +//------ DON'T TOUCH THIS PART! ------ +#include <cfloat> +#include <iostream> +#include <map> +#include <bits/hhc-phasespace.h> +#include <bits/hhc-process.h> +#include <bits/hhc-jetfunc.h> + +//----- used namespaces ----- +using namespace nlo; +using namespace std; + +//----- fastNLO ----- +#include "fastnlotk/fastNLOCreate.h" +#include "fastnlotk/fastNLOEvent.h" + +//----- declaration of the user defined functions ----- +// --- fastNLO v2.2: interface to NLOJet++: read steering file, set LO of selected process +void inputfunc(unsigned int&, unsigned int&, unsigned int&); +// --- fastNLO v2.2: interface to NLOJet++: set cms energy and phase space generator +void psinput(phasespace_hhc *, double&); +// --- fastNLO v2.2: interface to NLOJet++: user class +user_base_hhc * userfunc(); +// --- dphi +double dphi(double phi2, double phi1); + +//----- array of the symbols symbols ----- +extern "C"{ + struct { + const char *name; + void *address; + } user_defined_functions[] = + { + // process index: hhc for hadron-hadron --> jets + {"procindex", (void *) "hhc"}, + // input function + {"inputfunc", (void *) inputfunc}, + // phase space input function + {"psinput", (void *) psinput}, + // user defined functions + {"userfunc", (void *) userfunc}, + // end of the list + {0, 0} + }; +} + +//------ END OF THE DO-NOT-TOUCH-PART ------ + +//------ USER DEFINED PART STARTS HERE ------ +//#include <algorithm> + +// --- fastNLO v2.2: include header file of interface to NLOJet++ +#include "fnlo_int_nlojet/fnlo_int_hhc_nlojet.h" + +// --- fastNLO user: include header file for the jet algorithm +#include "fnlo_int_nlojet/fastjet-jets.h" + +// --- fastNLO v2.2: define global pointer to fastNLO steering file +fastNLOCreate *ftable = NULL; + +// --- fastNLO v2.2: get some info (order, name) from NLOjet++ command line arguments +void InitfNLO(const std::basic_string<char>& fname); + +// --- fastNLO v2.2: define user class to be used with NLOJet++ +class UserHHC : public basic_user_set<user0d_hhc, user1h_hhc, user2h_hhc> { +public: + // --- fastNLO user: evaluate steering file and define physics output (called once before first event) + virtual void phys_output(const std::basic_string<char>& fname, unsigned long nsave = 10000UL, bool txt = false); + // --- fastNLO v2.2: initialize event counter and storage limit (called once) + void initfunc(unsigned int); + // --- fastNLO user: analyze parton event (called once for each event) + void userfunc(const event_hhc&, const amplitude_hhc&); + // --- fastNLO v2.2: count events and store table (called after each event) + virtual void end_of_event(); + // 'nsave' defines after how many events the accumulated results are stored into a table file. + // The tablefile name is given by 'name-hhc-[born|nlo]-[2jet|3jet].tab', where + // - 'name' is specified via the '-n name' option of NLOJet++ + // - 'born' or 'nlo' are set according to the '-cborn' resp. '-cnlo' options of NLOJet++ + // - '2jet' or '3jet' are set according to the 'LeadingOrder' steering parameter. + // Existing files with the same name are overwritten. + // 'nsave' is initialized with 10000 or, if specified, to the number given via + // the command line option '--save-after=nsave'. In fastNLO this number is logarithmically + // increased after each table storage by factors of 10 up to nwritemax = 10M such that + // at the latest after each 10M events the accumulated results are written on disk. + +private: + // --- fastNLO user: define the jet algorithm (for the choice of included header file above) + fastjet_jets jetclusfj; + + // --- define the jet structure + bounded_vector<lorentzvector<double> > pj; + + // --- fastNLO definitions (not for user) + double nevents; // No. of events calculated so far + unsigned long nwrite; // Actual no. of events after which to write out the table + unsigned long nwritemax; // Maximal no. of events after which to write out the table + + // --- fastNLO steering + bool lFlexibleScaleTable; // Fill fixed- or flexible-scale table (default is fixed-scale) + int NDim; // Dimensionality of distributions (no default, must be defined) + vector<string> DimLabel; // Dimension labels (no default, must be defined) + // enum to switch between implemented observables (max. of 3 simultaneously) + enum Obs { PTJETGEV, YJET, ETAJET, PHIJET }; + Obs obsdef[3]; + double obs[3]; + vector<string> ScaleLabel; // Scale labels (Scale1: no default, must be defined; Scale2: default is "pT_max_[GeV]") + // enum to switch between implemented scale definitions (max. of 2 simultaneously) + // (Njet > 1!) + enum Scales { PTMAX, PTJET, HTP, HTPHALF }; + Scales mudef[2]; + double mu[2]; + int jetalgo; // Define fastjet jet algorithm (no default, must be defined) + double jetsize; // Define jet size R (no default, must be defined) + double overlapthreshold; // Define overlap threshold (default is 0.5) + double ptjmin; // Minimal jet pT (no default, must be defined; should be >= minimum of 1 GeV specified in interface to fastjet) + double ptnjmin; // Minimal pT of neighbouring jet (default is ptjmin) + double yetajmin; // Minimal jet (pseudo-)rapidity (no default, must be defined) + double yetajmax; // Maximal jet (pseudo-)rapidity (no default, must be defined) + bool lpseudo; // Switch to use either jet rapidity y or jet eta + double djlkmin; // Minimal distance of neighbouring jet (default is 0) + double djlkmax; // Maximal distance of neighbouring jet (default is +DBL_MAX) + bool ldphi; // Switch to use jet distance dphi/true or dR/false (default is true) + bool lunique; // Switch between unique entry per jet pair (true) or multiple ones (false) (default is false) + int Njetmin; // Minimal number of jets in phase space (default is 2) + double obsmin[3]; // Minimum in observable in nth dimension (default derived from binning) + double obsmax[3]; // Maximum in observable in nth dimension (default derived from binning) +}; + +// --- fastNLO user: modify the jet selection in UserHHC::userfunc (default = cutting in |y| min, |y| max and pt min) +// (the return value must be true for jets to be UNselected) +struct fNLOSelector { + fNLOSelector(double ymin, double ymax, double ptmin, bool pseudo=false): + _ymin (ymin), _ymax (ymax), _ptmin (ptmin), _pseudo (pseudo){}; + double _ymin, _ymax, _ptmin; + bool _pseudo; + bool operator() (const lorentzvector<double> &a) { + if (!_pseudo) return ! (_ymin <= abs(a.rapidity()) && abs(a.rapidity()) < _ymax && _ptmin <= a.perp()); + else return ! (_ymin <= abs(a.prapidity()) && abs(a.prapidity()) < _ymax && _ptmin <= a.perp()); + }; +}; + +// --- fastNLO user: modify the jet sorting in UserHHC::userfunc (default = descending in jet pt) +struct fNLOSorter { + bool operator() (const lorentzvector<double> &a, const lorentzvector<double> &b) {return (a.perp() > b.perp());}; +}; + +// sign function returning -1, 0, 1 +template <typename T> int sgn(T val) { + return (T(0) < val) - (val < T(0)); +} + +// --- fastNLO user: check and get steering parameters once and store into static vars +static std::map < std::string, bool > SteeringPars; + +// --- fastNLO user: class UserHHC: evaluate steering file and define physics output (called once before first event) +void UserHHC::phys_output(const std::basic_string<char>& __file_name, unsigned long __save, bool __txt) { + + //------ DON'T TOUCH THIS PART! ------ + // cout << " # INIT: [UserHHC::phys_output] ---------- UserHHC::phys_output called ----------" << endl; + say::debug["UserHHC::phys_output"] << "---------- UserHHC::phys_output called ----------" << endl; + say::debug["UserHHC::phys_output"] << "Before: __save = " << __save << ", nwrite = " << nwrite << endl; + nwrite = __save; + InitfNLO(__file_name); + //------ END OF THE DO-NOT-TOUCH-PART ------ + + // --- fastNLO user: + // Here is your playground where you can evaluate the steering file settings. + // ATTENTION: Some settings are mandatory for the correct functioning! + + // get general steering parameters needed here from steering file + say::debug["UserHHC::phys_output"] << "Evaluating steering parameters ..." << endl; + // fixed- or flexible-scale table + SteeringPars["FlexibleScaleTable"] = ftable->TestParameterInSteering("FlexibleScaleTable"); + lFlexibleScaleTable = false; // default + if ( SteeringPars["FlexibleScaleTable"] ) { + ftable->GetParameterFromSteering("FlexibleScaleTable",lFlexibleScaleTable); + } + // dimensionality + SteeringPars["DifferentialDimension"] = ftable->TestParameterInSteering("DifferentialDimension"); + if ( SteeringPars["DifferentialDimension"] ) { + ftable->GetParameterFromSteering("DifferentialDimension",NDim); + } else { + say::error["ScenarioCode"] << "Dimensioning of binning not set, aborted!" << endl; + exit(1); + } + if ( NDim < 1 || 3 < NDim ) { + say::error["ScenarioCode"] << "Only 1- to 3-dimensional binning implemented, aborted!" << endl; + say::error["ScenarioCode"] << "Please implement the requested " << NDim << "-dimensional binning." << endl; + exit(1); + } + // dimension labels + SteeringPars["DimensionLabels"] = ftable->TestParameterInSteering("DimensionLabels"); + DimLabel.resize(NDim); + if ( SteeringPars["DimensionLabels"] ) { + ftable->GetParameterFromSteering("DimensionLabels",DimLabel); + } else { + say::error["ScenarioCode"] << "Dimension labels not set, aborted!" << endl; + exit(1); + } + // define the observables according to the dimension labels + for ( int i = 0; i<NDim; i++ ) { + if ( DimLabel[i] == "|y|" ) { + obsdef[i] = YJET; + } else if ( DimLabel[i] == "|eta|" ) { + obsdef[i] = ETAJET; + } else if ( DimLabel[i] == "pT_[GeV]" ) { + obsdef[i] = PTJETGEV; + } else if ( DimLabel[i] == "phi" ) { + obsdef[i] = PHIJET; + } else { + say::error["ScenarioCode"] << "Unknown observable, i.e. dimension label, aborted!" << endl; + say::error["ScenarioCode"] << "DimLabel[" << i << "] = " << DimLabel[i] << endl; + say::error["ScenarioCode"] << "Please complement this scenario to include the requested observable." << endl; + exit(1); + } + } + // scale descriptions + SteeringPars["ScaleDescriptionScale1"] = ftable->TestParameterInSteering("ScaleDescriptionScale1"); + ScaleLabel.resize(2); + if ( SteeringPars["ScaleDescriptionScale1"] ) { + ftable->GetParameterFromSteering("ScaleDescriptionScale1",ScaleLabel[0]); + } else { + say::error["ScenarioCode"] << "No description of scale 1, aborted!" << endl; + exit(1); + } + SteeringPars["ScaleDescriptionScale2"] = ftable->TestParameterInSteering("ScaleDescriptionScale2"); + ScaleLabel[1] = "pT_max_[GeV]"; // default + if ( SteeringPars["ScaleDescriptionScale2"] ) { + ftable->GetParameterFromSteering("ScaleDescriptionScale2",ScaleLabel[1]); + } else { + ScaleLabel[1] = "-"; + say::warn["ScenarioCode"] << "No description of scale 2, flexible-scale tables not possible!" << endl; + } + // scale descriptions define the scales + for ( unsigned int i = 0; i < ScaleLabel.size(); i++ ) { + if ( ScaleLabel[i] == "pT_max_[GeV]" ) { + mudef[i] = PTMAX; + } else if ( ScaleLabel[i] == "pT_jet_[GeV]" ) { + mudef[i] = PTJET; + } else if ( ScaleLabel[i] == "HT_part_[GeV]" ) { + mudef[i] = HTP; + } else if ( ScaleLabel[i] == "HT_part/2_[GeV]" ) { + mudef[i] = HTPHALF; + } else { + say::error["ScenarioCode"] << "Unknown scale, i.e. scale description, aborted!" << endl; + say::error["ScenarioCode"] << "ScaleLabel[" << i << "] = " << ScaleLabel[i] << endl; + say::error["ScenarioCode"] << "Please complement this scenario to include the requested scale." << endl; + exit(1); + } + } + + // definition of jet algorithm and jet phase space limits (no defaults) + // + // --- fastNLO user: set the jet algorithm and size via steering file + // fastjet clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT + // fastjet cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone + SteeringPars["JetAlgo"] = ftable->TestParameterInSteering("JetAlgo"); + if ( SteeringPars["JetAlgo"] ) { + ftable->GetParameterFromSteering("JetAlgo",jetalgo); + if ( jetalgo < 0 || (2 < jetalgo && jetalgo < 10) || 12 < jetalgo ) { + say::error["ScenarioCode"] << "Unknown jet algorithm " << jetalgo << ", aborted!" << endl; + exit(1); + } + } else { + say::error["ScenarioCode"] << "No jet algorithm selected, aborted!" << endl; + exit(1); + } + SteeringPars["Rjet"] = ftable->TestParameterInSteering("Rjet"); + if ( SteeringPars["Rjet"] ) { + ftable->GetParameterFromSteering("Rjet",jetsize); + } else { + say::error["ScenarioCode"] << "Jet size R not defined, aborted!" << endl; + exit(1); + } + SteeringPars["OvThr"] = ftable->TestParameterInSteering("OvThr"); + overlapthreshold = 0.5; // default + if ( SteeringPars["OvThr"] ) { + ftable->GetParameterFromSteering("OvThr",overlapthreshold); + } else if ( jetalgo > 9 ) { + say::error["ScenarioCode"] << "Overlap threshold not defined for jet algorithm " << jetalgo << ", aborted!" << endl; + exit(1); + } + // --- fastNLO user: declare and initialize overall jet phase space cuts via steering file + // overall lowest pT for jets to be considered + SteeringPars["ptjmin"] = ftable->TestParameterInSteering("ptjmin"); + if ( SteeringPars["ptjmin"] ) { + ftable->GetParameterFromSteering("ptjmin",ptjmin); + } else { + say::error["ScenarioCode"] << "Minimal jet pT (ptjmin) not defined, aborted!" << endl; + exit(1); + } + // overall highest pT for jets not implemented, since uncritical with respect to CPU time consumption + // overall smallest |(pseudo-)rapidity| for jets to be considered, use either y or eta but not both + SteeringPars["yjmin"] = ftable->TestParameterInSteering("yjmin"); + SteeringPars["etajmin"] = ftable->TestParameterInSteering("etajmin"); + if ( SteeringPars["yjmin"] && !SteeringPars["etajmin"] ) { + ftable->GetParameterFromSteering("yjmin",yetajmin); + } else if ( !SteeringPars["yjmin"] && SteeringPars["etajmin"] ) { + ftable->GetParameterFromSteering("etajmin",yetajmin); + } else { + say::error["ScenarioCode"] << "Minimal jet (pseudo)rapidity (yjmin or etajmin) not uniquely defined, aborted!" << endl; + exit(1); + } + // overall largest |(pseudo-)rapidity| for jets to be considered, use either y or eta but not both + SteeringPars["yjmax"] = ftable->TestParameterInSteering("yjmax"); + SteeringPars["etajmax"] = ftable->TestParameterInSteering("etajmax"); + if ( SteeringPars["yjmax"] && !SteeringPars["etajmax"] ) { + ftable->GetParameterFromSteering("yjmax",yetajmax); + } else if ( !SteeringPars["yjmax"] && SteeringPars["etajmax"] ) { + ftable->GetParameterFromSteering("etajmax",yetajmax); + } else { + say::error["ScenarioCode"] << "Maximal jet (pseudo)rapidity (yjmax or etajmax) not uniquely defined, aborted!" << endl; + exit(1); + } + // define logical for decision on cuts in (pseudo-)rapidity, no mixing allowed here + if ( SteeringPars["yjmin"] && SteeringPars["yjmax"] ) { + lpseudo = false; + } else if ( SteeringPars["etajmin"] && SteeringPars["etajmax"] ) { + lpseudo = true; + } else { + say::error["ScenarioCode"] << "Phase space cuts mixed in (pseudo-)rapidity, aborted!" << endl; + say::error["ScenarioCode"] << "Booleans for cut selections are" << + " yjmin " << SteeringPars["yjmin"] << + ", yjmax " << SteeringPars["yjmax"] << + ", etajmin " << SteeringPars["etajmin"] << + ", etajmax " << SteeringPars["etajmax"] << endl; + say::error["ScenarioCode"] << "If you really want to mix, the code needs to be adapted." << endl; + exit(1); + } + // minimal number of jets required to be within preselected jet phase space (for jet pairs this must be two!) + SteeringPars["Njetmin"] = ftable->TestParameterInSteering("Njetmin"); + Njetmin = 2; + if ( SteeringPars["Njetmin"] ) { + ftable->GetParameterFromSteering("Njetmin",Njetmin); + } + if ( Njetmin < 2 ) { + say::error["ScenarioCode"] << "This is a 2+-jet scenario. At least two jets must be present, aborted!" << endl; + say::error["ScenarioCode"] << "Please correct the Njetmin requirement. Njetmin = " << Njetmin << endl; + exit(1); + } + + // --- fastNLO user: declare and initialize N jet-pair phase space cuts and definitions via steering filejnmin + // overall lowest pT for neighbouring jets to be considered + SteeringPars["ptnjmin"] = ftable->TestParameterInSteering("ptnjmin"); + if ( SteeringPars["ptnjmin"] ) { + ftable->GetParameterFromSteering("ptnjmin",ptnjmin); + } else { + ptnjmin = ptjmin; + } + // overall minimal distance for neighbouring jets to be considered + SteeringPars["djlkmin"] = ftable->TestParameterInSteering("djlkmin"); + if ( SteeringPars["djlkmin"] ) { + ftable->GetParameterFromSteering("djlkmin",djlkmin); + } else { + djlkmin = 0; + } + // overall maximal distance for neighbouring jets to be considered + SteeringPars["djlkmax"] = ftable->TestParameterInSteering("djlkmax"); + if ( SteeringPars["djlkmax"] ) { + ftable->GetParameterFromSteering("djlkmax",djlkmax); + } else { + djlkmax = +DBL_MAX; + } + // define logical for decision on cuts in delta Phi or delta R jet-pair distance + SteeringPars["ldphi"] = ftable->TestParameterInSteering("ldphi"); + if ( SteeringPars["ldphi"] ) { + ftable->GetParameterFromSteering("ldphi",ldphi); + } else { + ldphi = true; + } + // define logical for decision on unique entry per jet pair or not + SteeringPars["lunique"] = ftable->TestParameterInSteering("lunique"); + if ( SteeringPars["lunique"] ) { + ftable->GetParameterFromSteering("lunique",lunique); + } else { + lunique = false; + } + // overall minimum & maximum for 1st observable, e.g. maximal absolute rapidity |y_max| + SteeringPars["obs0min"] = ftable->TestParameterInSteering("obs0min"); + obsmin[0] = ftable->GetObsBinsLoBoundsMin(0); // by default derived from binning in obs0 + if ( SteeringPars["obs0min"] ) { + ftable->GetParameterFromSteering("obs0min",obsmin[0]); + } + SteeringPars["obs0max"] = ftable->TestParameterInSteering("obs0max"); + obsmax[0] = ftable->GetObsBinsUpBoundsMax(0); // by default derived from binning in obs0 + if ( SteeringPars["obs0max"] ) { + ftable->GetParameterFromSteering("obs0max",obsmax[0]); + } + // overall minimum & maximum for 2nd observable, e.g. dijet mass mjj + obsmin[1] = -DBL_MAX; + obsmax[1] = +DBL_MAX; + if (NDim > 1) { + SteeringPars["obs1min"] = ftable->TestParameterInSteering("obs1min"); + obsmin[1] = ftable->GetObsBinsLoBoundsMin(1); // by default derived from binning in obs1 + if ( SteeringPars["obs1min"] ) { + ftable->GetParameterFromSteering("obs1min",obsmin[1]); + } + SteeringPars["obs1max"] = ftable->TestParameterInSteering("obs1max"); + obsmax[1] = ftable->GetObsBinsUpBoundsMax(1); // by default derived from binning in obs1 + if ( SteeringPars["obs1max"] ) { + ftable->GetParameterFromSteering("obs1max",obsmax[1]); + } + } + // overall minimum & maximum for 3rd observable + obsmin[2] = -DBL_MAX; + obsmax[2] = +DBL_MAX; + if (NDim > 2) { + SteeringPars["obs2min"] = ftable->TestParameterInSteering("obs2min"); + obsmin[2] = ftable->GetObsBinsLoBoundsMin(2); // by default derived from binning in obs2 + if ( SteeringPars["obs2min"] ) { + ftable->GetParameterFromSteering("obs2min",obsmin[2]); + } + SteeringPars["obs2max"] = ftable->TestParameterInSteering("obs2max"); + obsmax[2] = ftable->GetObsBinsUpBoundsMax(2); // by default derived from binning in obs2 + if ( SteeringPars["obs2max"] ) { + ftable->GetParameterFromSteering("obs2max",obsmax[2]); + } + } + jetclusfj.setup(static_cast<fastjet_jets::JetAlgorithm>(jetalgo), jetsize, overlapthreshold); +} + +// --- fastNLO v2.2: class UserHHC: analyze parton event (called once for each event) +void UserHHC::userfunc(const event_hhc& p, const amplitude_hhc& amp) { + if ( say::debug.GetSpeak() ) { + say::debug["UserHHC::userfunc"] << "---------- UserHHC::userfunc called ----------" << endl; + say::debug["ScenarioCode"] << "==================== Start of event ====================" << endl; + } + + // --- fastNLO user: + // Here is your playground where you compute your observables and + // scales for each jet or event. + // The bin number ("obsbin") gets passed to fastNLO's table filling code. + // Usually, pT and E are in GeV, but this may be changed. + // ATTENTION: Scales must always be in GeV! + + // derive partonic HT scale + double htp = 0.; + unsigned int np = p.upper(); + for (unsigned int i = 1; i <= np; i++) { + htp += p[i].perp(); + // --- debug output + if ( say::debug.GetSpeak() ) { + say::debug["ScenarioCode"] << "partonic HT: parton # i, pt, htp: " << i << ", " << p[i].perp() << ", " << htp << endl; + } + } + + // apply the jet algorithm to partonic 4-vector array p of NLOJet++ + pj = jetclusfj(p); + unsigned int nj = pj.upper(); + + // --- check on minimal and maximal no. of jets + // ATTENTION: In principle, without cuts, there should always be two. + // For efficiency reasons though, our interface to the fastjet algorithms + // requires a minimal jet pT of 1 GeV. If this is a problem, the ptmin value + // in fj-jets.cc needs to be changed. + // There should never be more than four jets in NLOJet++ + if (nj < 1) { + say::debug["ScenarioCode"] << "This event from NLOJet++ has no jets with pT > 1 GeV. Skipped!" << endl; + return; + } else if (nj > 4) { + say::error["ScenarioCode"] << "This event from NLOJet++ has more than four jets, which should never happen. Aborted!" << endl; + exit(1); + } + + // --- give some debug output before selection and sorting + if ( say::debug.GetSpeak() ) { + for (unsigned int i=1; i<=nj; i++) { + double pti = pj[i].perp(); + double yi = pj[i].rapidity(); + double etai = pj[i].prapidity(); + say::debug["ScenarioCode"] << "before cuts: jet # i, pt, y, eta: " << i << ", " << pti << ", " << yi << ", " << etai << endl; + } + } + + // --- select jets in y (lpseudo = false) or eta (lpseudo = true) and ptjmin + // note: failing jets are not deleted but moved to the end of the jet array pj! + fNLOSelector SelJets (yetajmin,yetajmax,ptjmin,lpseudo); + + // --- count number of selected jets left at this stage + size_t njet = std::remove_if(pj.begin(), pj.end(), SelJets) - pj.begin(); + if ( (int)njet < Njetmin ) return; // Nothing to be done + + // --- sort selected n jets at beginning of jet array pj, by default decreasing in pt + static fNLOSorter SortJets; + std::sort(pj.begin(), pj.begin() + njet, SortJets); + + // --- give some debug output after selection and sorting + if ( say::debug.GetSpeak() ) { + say::debug["ScenarioCode"] << "# jets before and after phase space cuts: nj, njet = " << nj << ", " << njet << endl; + if ( ! lpseudo ) { + say::debug["ScenarioCode"] << "phase space cuts: yjmin, yjmax, ptjmin: " << yetajmin << ", " << yetajmax << ", " << ptjmin << endl; + } else { + say::debug["ScenarioCode"] << "phase space cuts: etajmin, etajmax, ptjmin: " << yetajmin << ", " << yetajmax << ", " << ptjmin << endl; + } + for (unsigned int i=1; i<=njet; i++) { + double pti = pj[i].perp(); + double yi = pj[i].rapidity(); + double etai = pj[i].prapidity(); + say::debug["ScenarioCode"] << "after cuts: jet # i, pt, y, eta: " << i << ", " << pti << ", " << yi << ", " << etai << endl; + } + } + + // ---- fastNLO v2.2 + // Analyze jet relations in double jet loop (Attention: Includes double counting!) + // set one possible scale choice (Attention: Only correct if jets sorted descending in pT) + double ptmax = pj[1].perp(); + // 1st loop over jets k + for (unsigned int k = 1; k <= njet; k++) { + + // --- calculate observable of nth dimension + for ( int i = 0; i<NDim; i++ ) { + switch(obsdef[i]) { + case PTJETGEV : + // jet pT + obs[i] = pj[k].perp(); + break; + case YJET : + // jet rapidity + obs[i] = abs(pj[k].rapidity()); + break; + case ETAJET : + // jet pseudorapidity + obs[i] = abs(pj[k].prapidity()); + break; + case PHIJET : + // jet azimuthal angle + obs[i] = atan2(pj[k].Y(), pj[k].X()); + break; + default : + say::error["ScenarioCode"] << "Observable not yet implemented, aborted!" << endl; + say::error["ScenarioCode"] << "DimLabel[" << i << "] = " << DimLabel[i] << endl; + say::error["ScenarioCode"] << "Please complement this scenario to include the requested observable." << endl; + exit(1); + } + } + + // --- set the renormalization and factorization scales + // --- calculate the requested scales + for ( unsigned int i = 0; i < 2; i++ ) { + switch(mudef[i]) { + case PTMAX : + // maximal jet pT + mu[i] = ptmax; + break; + case PTJET : + // jet pT + mu[i] = pj[k].perp(); + break; + case HTP : + // partonic sum pT + mu[i] = htp; + say::debug["ScenarioCode"] << "HTP scale values: " << i << " : mu[i] = " << mu[i] << endl; + break; + case HTPHALF : + // half partonic sum pT + mu[i] = htp/2.; + say::debug["ScenarioCode"] << "HTPHALF scale values: " << i << " : mu[i] = " << mu[i] << endl; + break; + default : + say::error["ScenarioCode"] << "Scale not yet implemented, aborted!" << endl; + say::error["ScenarioCode"] << "ScaleLabel[" << i << "] = " << ScaleLabel[i] << endl; + say::error["ScenarioCode"] << "Please complement this scenario to include the requested scale." << endl; + exit(1); + } + } + + // --- give some debug output before final selection + if ( say::debug.GetSpeak() ) { + say::debug["ScenarioCode"] << "---------------- Before final selection ----------------" << endl; + for ( int i = 0; i<NDim; i++ ) { + say::debug["ScenarioCode"] << "Obs. min/max values: " << i << " : obsmin = " << obsmin[i] << ", obs = " << obs[i] << ", obsmax = " << obsmax[i] << endl; + } + } + + // 2nd loop over jets l + for (unsigned int l = 1; l <= njet; l++) { + if (k==l) continue; + if (lunique && k>l) continue; + + // derive some jet-pair quantities; neighbour candidate is jet l + double ptnbr = pj[l].perp(); + double phik = atan2(pj[k].Y(), pj[k].X()); + double phil = atan2(pj[l].Y(), pj[l].X()); + double djlk = abs(dphi(phil,phik)); + if ( ! ldphi ) { + double dylk = abs(pj[l].rapidity() - pj[k].rapidity()); + djlk = sqrt(djlk*djlk + dylk*dylk); + } + + // cuts on jet-pair quantities + if ( ptnbr < ptnjmin || djlk < djlkmin || djlkmax < djlk ) { + + // --- jet pair not close enough --> rejected + if ( say::debug.GetSpeak() ) { + say::debug["ScenarioCode"] << "----------------- Jet pair rejected! ------------------" << endl; + } + continue; + } + + // cuts on observable limits + if ( obsmin[0] <= obs[0] && obs[0] < obsmax[0] && + (NDim < 2 || (obsmin[1] <= obs[1] && obs[1] < obsmax[1])) && + (NDim < 3 || (obsmin[2] <= obs[2] && obs[2] < obsmax[2])) ) { + + // --- jet pair & observable accepted + if ( say::debug.GetSpeak() ) { + say::debug["ScenarioCode"] << "----------------- Event/jet/jet pair accepted! ------------------" << endl; + } + + static vector<double> scalevars; + if ( ! lFlexibleScaleTable ) scalevars = ftable->GetScaleVariations(); + + // get matrix elements + static vector<fnloEvent> contribsflex; + static vector< vector<fnloEvent> > contribsfix; + if (lFlexibleScaleTable) { + contribsflex = UsefulNlojetTools::GetFlexibleScaleNlojetContribHHC(p,amp); + } else { + contribsfix = UsefulNlojetTools::GetFixedScaleNlojetContribHHC(p,amp,mu[0],scalevars); + } + + // set and fill scenario specific quantites + fnloScenario scen; + if ( NDim < 1 || NDim > 3 ) { + say::error["ScenarioCode"] << "Less than 1D(?!) or more than 3D binning not implemented here, aborted!" << endl; + say::error["ScenarioCode"] << "DifferentialDimension NDim = " << NDim << endl; + } + for ( int i = 0; i<NDim; i++ ) { + scen.SetObservableDimI( obs[i], i ); + } + + scen.SetObsScale1( mu[0] ); // must be consistent with 'mu' from contribs + if (lFlexibleScaleTable) { + scen.SetObsScale2( mu[1] ); + ftable->FillAllSubprocesses(contribsflex,scen); + } else { + ftable->FillAllSubprocesses(contribsfix,scen); + } + } else { + // --- jet pair rejected + if ( say::debug.GetSpeak() ) { + say::debug["ScenarioCode"] << "----------------- Jet-pair observable rejected! ------------------" << endl; + } + } + } // end of pair loop + } // end of jet loop + say::debug["ScenarioCode"] << "==================== End of event ====================" << endl; +} + +//------ DON'T TOUCH THIS PART! ------ + +// --- fastNLO v2.2: interface to NLOJet++: read steering file, set LO of selected process +void inputfunc(unsigned int& nj, unsigned int& nu, unsigned int& nd) { + // This is the very first routine called from NLOJet++! + // It seems that it gets called three times. + static int ILOord; // no default + if (!ftable) { + // Switch on debug output even before steering is initialised + // Normally this should be commented out! + // speaker::SetGlobalVerbosity(say::DEBUG); + // The following lines should be printed ONCE. Steering parameters have not yet been read. + cout << " # INIT: [inputfunc] ---------- inputfunc called ----------" << endl; + cout << " # INIT: [inputfunc] ---------- initializing ... ----------" << endl; + // --- read in steering and create fastNLO table accordingly + // --- ftable is a global constant + ftable = new fastNLOCreate(UsefulNlojetTools::GenConsts(),UsefulNlojetTools::ProcConsts_HHC(),"InclusiveNJetPairs.str"); + if ( ftable->TestParameterInSteering("LeadingOrder") ) { + ftable->GetParameterFromSteering("LeadingOrder",ILOord); + } else { + say::error["ScenarioCode"] << "LO of process not defined, aborted!" << endl; + exit(1); + } + // ftable->SetLoOrder(ILOord); // Not necessary when set via LeadingOrder in steering file + cout << " # INIT: [inputfunc] ---------- LeadingOrder = " << ILOord << " ----------" << endl; + } + + // The following line is printed ONLY, when DEBUG print out has been requested by the steering. + say::debug["inputfunc"] << "---------- inputfunc called ----------" << endl; + + // Set the number of jets for the LO process according to the steering, + // e.g. 2 for hh inclusive jets, 3 for hh 3-jet mass + // nj = 1U; // only useful for DIS + switch(ILOord) { + case 2 : + // hh inclusive jets, hh dijets + nj = 2U; + break; + case 3 : + // hh 3-jets + nj = 3U; + break; + default : + say::error["ScenarioCode"] << "Unknown LO of process defined, aborted!" << endl; + exit(1); + } + + // Set the number of the (massless!) up and down type flavours (usually, you won´t change that) + nu = 2U; + nd = 3U; +} + +// --- fastNLO v2.2: interface to NLOJet++: set cms energy and phase space generator +void psinput(phasespace_hhc *ps, double& s) { + // cout << " # INIT: [psinput] ---------- psinput called ----------" << endl; + say::debug["psinput"] << "---------- psinput called ----------" << endl; + + // --- set the center-of-mass energy squared as read from steering file + s = pow(ftable->GetEcms(),2); + say::debug["psinput"] << "cms energy read from steering: sqrt(s) = " << ftable->GetEcms() << endl; + + // --- in principle alternative phase space generators can be used + // --- we support only the default for now + ps = 0; +} + +// --- fastNLO v2.2: interface to NLOJet++: user class +user_base_hhc * userfunc() { + say::debug["userfunc"] << "---------- userfunc called ----------" << endl; + return new UserHHC; +} + +// --- fastNLO v2.2: get some info (order, name) from NLOjet++ command line arguments +void InitfNLO(const std::basic_string<char>& __file_name) { + say::debug["InitfNLO"] << "---------- InitfNLO called ----------" << endl; + // --- obtain relevant variables from NLOJet++ command line arguments + ftable->SetOrderOfAlphasOfCalculation(UsefulNlojetTools::GetOrderOfRun(__file_name)); + + // --- set fastNLO filename according to NLOJet++ command line arguments + string tabFilename = __file_name.c_str(); + tabFilename += ".tab"; + +#ifdef HAVE_ZLIB + bool lgzip = true; +#else + bool lgzip = false; +#endif + + if ( SteeringPars["OutputCompression"] ) { + ftable->GetParameterFromSteering("OutputCompression",lgzip); + } + // string filename = fScenConsts.OutputFilename; + // if ( lgzip ) tabFilename += ".gz"; + tabFilename += ".gz"; + ftable->SetFilename(tabFilename); +} + +// --- fastNLO v2.2: class UserHHC: initialize event counter and storage limit (called once) +void UserHHC::initfunc(unsigned int) { + say::debug["UserHHC::initfunc"] << "---------- UserHHC::initfunc called ----------" << endl; + nevents = 0; + nwritemax = 10000000; +} + +// --- fastNLO v2.2: class UserHHC: count events and store table (called after each event) +void UserHHC::end_of_event() { + say::debug["UserHHC::end_of_event"] << "---------- UserHHC::end_of_event called ----------" << endl; + // --- count events + nevents += 1; + // --- store table + say::debug["UserHHC::end_of_event"] << " nevents = " << nevents << ", nwrite = " << nwrite << endl; + if (( (unsigned long)nevents % nwrite)==0){ + ftable->SetNumberOfEvents(nevents); + ftable->WriteTable(); + if ( nwrite < nwritemax ) { + nwrite *= 10; + } else { + nwrite = nwritemax; + } + } +} + +// --- define function for azimuthal angular distance in [-Pi,Pi] +double dphi(double phi2, double phi1) { + double delta_phi = phi2-phi1; + if (delta_phi > M_PI) { + delta_phi -= 2*M_PI; + } else if (delta_phi < -M_PI) { + delta_phi += 2*M_PI; + } + return delta_phi; +} diff --git a/v2.6/generators/nlojet++/interface/hadron/InclusiveNJets.cc b/v2.6/generators/nlojet++/interface/hadron/InclusiveNJets.cc new file mode 100644 index 0000000000000000000000000000000000000000..2db3cc9d67d09b655a58a16ee97906744692b2da --- /dev/null +++ b/v2.6/generators/nlojet++/interface/hadron/InclusiveNJets.cc @@ -0,0 +1,747 @@ +// +// fastNLO v2.2 creator code for inclusive N jets scenarios +// +// ============== fastNLO user: ======================================== +// To create your own scenario, it is recommended to take this +// example code, make a copy, and implement the relevant changes. +// Important: +// Edit only those parts which are clearly indicated as modifiable +// "fastNLO user" code. If a code fragment is not explicitely +// labeled as "fastNLO user", it is likely that a modification will +// interfere with the fastNLO routines. +// +// This file contains the following routines: +// struct fNLOSelector (-> user edits) +// struct fNLOSorter (-> user edits) +// UserHHC::phys_output (called once at the start -> user edits) +// UserHHC::userfunc (called once for each event -> user edits) +// inputfunc (don't touch) +// psinput (don't touch) +// userfunc (don't touch) +// InitfNLO (don't touch) +// UserHHC::initfunc (don't touch) +// UserHHC::end_of_event (don't touch) +// +// If the provided example routine can not be steered flexibly enough, +// feel free to implement the missing parts. +// +// Implementing a new scenario may imply to change: +// - the jet algorithm ("#include" statement and assignment of "jetclus..") +// - the jet observables to compute +// - the scale definition +// +// ===================================================================== + +//------ DON'T TOUCH THIS PART! ------ +#include <cfloat> +#include <iostream> +#include <map> +#include <bits/hhc-phasespace.h> +#include <bits/hhc-process.h> +#include <bits/hhc-jetfunc.h> + +//----- used namespaces ----- +using namespace nlo; +using namespace std; + +//----- fastNLO ----- +#include "fastnlotk/fastNLOCreate.h" +#include "fastnlotk/fastNLOEvent.h" + +//----- declaration of the user defined functions ----- +// --- fastNLO v2.2: interface to NLOJet++: read steering file, set LO of selected process +void inputfunc(unsigned int&, unsigned int&, unsigned int&); +// --- fastNLO v2.2: interface to NLOJet++: set cms energy and phase space generator +void psinput(phasespace_hhc *, double&); +// --- fastNLO v2.2: interface to NLOJet++: user class +user_base_hhc * userfunc(); +// --- dphi +double dphi(double phi2, double phi1); + +//----- array of the symbols symbols ----- +extern "C"{ + struct { + const char *name; + void *address; + } user_defined_functions[] = + { + // process index: hhc for hadron-hadron --> jets + {"procindex", (void *) "hhc"}, + // input function + {"inputfunc", (void *) inputfunc}, + // phase space input function + {"psinput", (void *) psinput}, + // user defined functions + {"userfunc", (void *) userfunc}, + // end of the list + {0, 0} + }; +} + +//------ END OF THE DO-NOT-TOUCH-PART ------ + +//------ USER DEFINED PART STARTS HERE ------ +//#include <algorithm> + +// --- fastNLO v2.2: include header file of interface to NLOJet++ +#include "fnlo_int_nlojet/fnlo_int_hhc_nlojet.h" + +// --- fastNLO user: include header file for the jet algorithm +#include "fnlo_int_nlojet/fastjet-jets.h" + +// --- fastNLO v2.2: define global pointer to fastNLO steering file +fastNLOCreate *ftable = NULL; + +// --- fastNLO v2.2: get some info (order, name) from NLOjet++ command line arguments +void InitfNLO(const std::basic_string<char>& fname); + +// --- fastNLO v2.2: define user class to be used with NLOJet++ +class UserHHC : public basic_user_set<user0d_hhc, user1h_hhc, user2h_hhc> { +public: + // --- fastNLO user: evaluate steering file and define physics output (called once before first event) + virtual void phys_output(const std::basic_string<char>& fname, unsigned long nsave = 10000UL, bool txt = false); + // --- fastNLO v2.2: initialize event counter and storage limit (called once) + void initfunc(unsigned int); + // --- fastNLO user: analyze parton event (called once for each event) + void userfunc(const event_hhc&, const amplitude_hhc&); + // --- fastNLO v2.2: count events and store table (called after each event) + virtual void end_of_event(); + // 'nsave' defines after how many events the accumulated results are stored into a table file. + // The tablefile name is given by 'name-hhc-[born|nlo]-[2jet|3jet].tab', where + // - 'name' is specified via the '-n name' option of NLOJet++ + // - 'born' or 'nlo' are set according to the '-cborn' resp. '-cnlo' options of NLOJet++ + // - '2jet' or '3jet' are set according to the 'LeadingOrder' steering parameter. + // Existing files with the same name are overwritten. + // 'nsave' is initialized with 10000 or, if specified, to the number given via + // the command line option '--save-after=nsave'. In fastNLO this number is logarithmically + // increased after each table storage by factors of 10 up to nwritemax = 10M such that + // at the latest after each 10M events the accumulated results are written on disk. + +private: + // --- fastNLO user: define the jet algorithm (for the choice of included header file above) + fastjet_jets jetclusfj; + + // --- define the jet structure + bounded_vector<lorentzvector<double> > pj; + + // --- fastNLO definitions (not for user) + double nevents; // No. of events calculated so far + unsigned long nwrite; // Actual no. of events after which to write out the table + unsigned long nwritemax; // Maximal no. of events after which to write out the table + + // --- fastNLO steering + bool lFlexibleScaleTable; // Fill fixed- or flexible-scale table (default is fixed-scale) + int NDim; // Dimensionality of distributions (no default, must be defined) + vector<string> DimLabel; // Dimension labels (no default, must be defined) + // enum to switch between implemented observables (max. of 3 simultaneously) + enum Obs { PTJETGEV, YJET, ETAJET, PHIJET }; + Obs obsdef[3]; + double obs[3]; + vector<string> ScaleLabel; // Scale labels (Scale1: no default, must be defined; Scale2: default is "pT_max_[GeV]") + // enum to switch between implemented scale definitions (max. of 2 simultaneously) + enum Scales { PTMAX, PTJET, HTP, HTPHALF }; + Scales mudef[2]; + double mu[2]; + int jetalgo; // Define fastjet jet algorithm (no default, must be defined) + double jetsize; // Define jet size R (no default, must be defined) + double overlapthreshold; // Define overlap threshold (default is 0.5) + double ptjmin; // Minimal jet pT (no default, must be defined; should be >= minimum of 1 GeV specified in interface to fastjet) + double yetajmin; // Minimal jet (pseudo-)rapidity (no default, must be defined) + double yetajmax; // Maximal jet (pseudo-)rapidity (no default, must be defined) + bool lpseudo; // Switch to use either jet rapidity y or jet eta + int Njetmin; // Minimal number of jets in phase space (default is 1) + double obsmin[3]; // Minimum in observable in nth dimension (default derived from binning) + double obsmax[3]; // Maximum in observable in nth dimension (default derived from binning) +}; + +// --- fastNLO user: modify the jet selection in UserHHC::userfunc (default = cutting in |y| min, |y| max and pt min) +// (the return value must be true for jets to be UNselected) +struct fNLOSelector { + fNLOSelector(double ymin, double ymax, double ptmin, bool pseudo=false): + _ymin (ymin), _ymax (ymax), _ptmin (ptmin), _pseudo (pseudo){}; + double _ymin, _ymax, _ptmin; + bool _pseudo; + bool operator() (const lorentzvector<double> &a) { + if (!_pseudo) return ! (_ymin <= abs(a.rapidity()) && abs(a.rapidity()) < _ymax && _ptmin <= a.perp()); + else return ! (_ymin <= abs(a.prapidity()) && abs(a.prapidity()) < _ymax && _ptmin <= a.perp()); + }; +}; + +// --- fastNLO user: modify the jet sorting in UserHHC::userfunc (default = descending in jet pt) +struct fNLOSorter { + bool operator() (const lorentzvector<double> &a, const lorentzvector<double> &b) {return (a.perp() > b.perp());}; +}; + +// sign function returning -1, 0, 1 +template <typename T> int sgn(T val) { + return (T(0) < val) - (val < T(0)); +} + +// --- fastNLO user: check and get steering parameters once and store into static vars +static std::map < std::string, bool > SteeringPars; + +// --- fastNLO user: class UserHHC: evaluate steering file and define physics output (called once before first event) +void UserHHC::phys_output(const std::basic_string<char>& __file_name, unsigned long __save, bool __txt) { + + //------ DON'T TOUCH THIS PART! ------ + // cout << " # INIT: [UserHHC::phys_output] ---------- UserHHC::phys_output called ----------" << endl; + say::debug["UserHHC::phys_output"] << "---------- UserHHC::phys_output called ----------" << endl; + say::debug["UserHHC::phys_output"] << "Before: __save = " << __save << ", nwrite = " << nwrite << endl; + nwrite = __save; + InitfNLO(__file_name); + //------ END OF THE DO-NOT-TOUCH-PART ------ + + // --- fastNLO user: + // Here is your playground where you can evaluate the steering file settings. + // ATTENTION: Some settings are mandatory for the correct functioning! + + // get general steering parameters needed here from steering file + say::debug["UserHHC::phys_output"] << "Evaluating steering parameters ..." << endl; + // fixed- or flexible-scale table + SteeringPars["FlexibleScaleTable"] = ftable->TestParameterInSteering("FlexibleScaleTable"); + lFlexibleScaleTable = false; // default + if ( SteeringPars["FlexibleScaleTable"] ) { + ftable->GetParameterFromSteering("FlexibleScaleTable",lFlexibleScaleTable); + } + // dimensionality + SteeringPars["DifferentialDimension"] = ftable->TestParameterInSteering("DifferentialDimension"); + if ( SteeringPars["DifferentialDimension"] ) { + ftable->GetParameterFromSteering("DifferentialDimension",NDim); + } else { + say::error["ScenarioCode"] << "Dimensioning of binning not set, aborted!" << endl; + exit(1); + } + if ( NDim < 1 || 3 < NDim ) { + say::error["ScenarioCode"] << "Only 1- to 3-dimensional binning implemented, aborted!" << endl; + say::error["ScenarioCode"] << "Please implement the requested " << NDim << "-dimensional binning." << endl; + exit(1); + } + // dimension labels + SteeringPars["DimensionLabels"] = ftable->TestParameterInSteering("DimensionLabels"); + DimLabel.resize(NDim); + if ( SteeringPars["DimensionLabels"] ) { + ftable->GetParameterFromSteering("DimensionLabels",DimLabel); + } else { + say::error["ScenarioCode"] << "Dimension labels not set, aborted!" << endl; + exit(1); + } + // define the observables according to the dimension labels + for ( int i = 0; i<NDim; i++ ) { + if ( DimLabel[i] == "|y|" ) { + obsdef[i] = YJET; + } else if ( DimLabel[i] == "|eta|" ) { + obsdef[i] = ETAJET; + } else if ( DimLabel[i] == "pT_[GeV]" ) { + obsdef[i] = PTJETGEV; + } else if ( DimLabel[i] == "phi" ) { + obsdef[i] = PHIJET; + } else { + say::error["ScenarioCode"] << "Unknown observable, i.e. dimension label, aborted!" << endl; + say::error["ScenarioCode"] << "DimLabel[" << i << "] = " << DimLabel[i] << endl; + say::error["ScenarioCode"] << "Please complement this scenario to include the requested observable." << endl; + exit(1); + } + } + // scale descriptions + SteeringPars["ScaleDescriptionScale1"] = ftable->TestParameterInSteering("ScaleDescriptionScale1"); + ScaleLabel.resize(2); + if ( SteeringPars["ScaleDescriptionScale1"] ) { + ftable->GetParameterFromSteering("ScaleDescriptionScale1",ScaleLabel[0]); + } else { + say::error["ScenarioCode"] << "No description of scale 1, aborted!" << endl; + exit(1); + } + SteeringPars["ScaleDescriptionScale2"] = ftable->TestParameterInSteering("ScaleDescriptionScale2"); + ScaleLabel[1] = "pT_max_[GeV]"; // default + if ( SteeringPars["ScaleDescriptionScale2"] ) { + ftable->GetParameterFromSteering("ScaleDescriptionScale2",ScaleLabel[1]); + } else { + ScaleLabel[1] = "-"; + say::warn["ScenarioCode"] << "No description of scale 2, flexible-scale tables not possible!" << endl; + } + // scale descriptions define the scales + for ( unsigned int i = 0; i < ScaleLabel.size(); i++ ) { + if ( ScaleLabel[i] == "pT_max_[GeV]" ) { + mudef[i] = PTMAX; + } else if ( ScaleLabel[i] == "pT_jet_[GeV]" ) { + mudef[i] = PTJET; + } else if ( ScaleLabel[i] == "HT_part_[GeV]" ) { + mudef[i] = HTP; + } else if ( ScaleLabel[i] == "HT_part/2_[GeV]" ) { + mudef[i] = HTPHALF; + } else { + say::error["ScenarioCode"] << "Unknown scale, i.e. scale description, aborted!" << endl; + say::error["ScenarioCode"] << "ScaleLabel[" << i << "] = " << ScaleLabel[i] << endl; + say::error["ScenarioCode"] << "Please complement this scenario to include the requested scale." << endl; + exit(1); + } + } + + // definition of jet algorithm and jet phase space limits (no defaults) + // + // --- fastNLO user: set the jet algorithm and size via steering file + // fastjet clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT + // fastjet cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone + SteeringPars["JetAlgo"] = ftable->TestParameterInSteering("JetAlgo"); + if ( SteeringPars["JetAlgo"] ) { + ftable->GetParameterFromSteering("JetAlgo",jetalgo); + if ( jetalgo < 0 || (2 < jetalgo && jetalgo < 10) || 12 < jetalgo ) { + say::error["ScenarioCode"] << "Unknown jet algorithm " << jetalgo << ", aborted!" << endl; + exit(1); + } + } else { + say::error["ScenarioCode"] << "No jet algorithm selected, aborted!" << endl; + exit(1); + } + SteeringPars["Rjet"] = ftable->TestParameterInSteering("Rjet"); + if ( SteeringPars["Rjet"] ) { + ftable->GetParameterFromSteering("Rjet",jetsize); + } else { + say::error["ScenarioCode"] << "Jet size R not defined, aborted!" << endl; + exit(1); + } + SteeringPars["OvThr"] = ftable->TestParameterInSteering("OvThr"); + overlapthreshold = 0.5; // default + if ( SteeringPars["OvThr"] ) { + ftable->GetParameterFromSteering("OvThr",overlapthreshold); + } else if ( jetalgo > 9 ) { + say::error["ScenarioCode"] << "Overlap threshold not defined for jet algorithm " << jetalgo << ", aborted!" << endl; + exit(1); + } + // --- fastNLO user: declare and initialize overall jet phase space cuts via steering file + // overall lowest pT for jets to be considered + SteeringPars["ptjmin"] = ftable->TestParameterInSteering("ptjmin"); + if ( SteeringPars["ptjmin"] ) { + ftable->GetParameterFromSteering("ptjmin",ptjmin); + } else { + say::error["ScenarioCode"] << "Minimal jet pT (ptjmin) not defined, aborted!" << endl; + exit(1); + } + // overall highest pT for jets not implemented, since uncritical with respect to CPU time consumption + // overall smallest |(pseudo-)rapidity| for jets to be considered, use either y or eta but not both + SteeringPars["yjmin"] = ftable->TestParameterInSteering("yjmin"); + SteeringPars["etajmin"] = ftable->TestParameterInSteering("etajmin"); + if ( SteeringPars["yjmin"] && !SteeringPars["etajmin"] ) { + ftable->GetParameterFromSteering("yjmin",yetajmin); + } else if ( !SteeringPars["yjmin"] && SteeringPars["etajmin"] ) { + ftable->GetParameterFromSteering("etajmin",yetajmin); + } else { + say::error["ScenarioCode"] << "Minimal jet (pseudo)rapidity (yjmin or etajmin) not uniquely defined, aborted!" << endl; + exit(1); + } + // overall largest |(pseudo-)rapidity| for jets to be considered, use either y or eta but not both + SteeringPars["yjmax"] = ftable->TestParameterInSteering("yjmax"); + SteeringPars["etajmax"] = ftable->TestParameterInSteering("etajmax"); + if ( SteeringPars["yjmax"] && !SteeringPars["etajmax"] ) { + ftable->GetParameterFromSteering("yjmax",yetajmax); + } else if ( !SteeringPars["yjmax"] && SteeringPars["etajmax"] ) { + ftable->GetParameterFromSteering("etajmax",yetajmax); + } else { + say::error["ScenarioCode"] << "Maximal jet (pseudo)rapidity (yjmax or etajmax) not uniquely defined, aborted!" << endl; + exit(1); + } + // define logical for decision on cuts in (pseudo-)rapidity, no mixing allowed here + if ( SteeringPars["yjmin"] && SteeringPars["yjmax"] ) { + lpseudo = false; + } else if ( SteeringPars["etajmin"] && SteeringPars["etajmax"] ) { + lpseudo = true; + } else { + say::error["ScenarioCode"] << "Phase space cuts mixed in (pseudo-)rapidity, aborted!" << endl; + say::error["ScenarioCode"] << "Booleans for cut selections are" << + " yjmin " << SteeringPars["yjmin"] << + ", yjmax " << SteeringPars["yjmax"] << + ", etajmin " << SteeringPars["etajmin"] << + ", etajmax " << SteeringPars["etajmax"] << endl; + say::error["ScenarioCode"] << "If you really want to mix, the code needs to be adapted." << endl; + exit(1); + } + // minimal number of jets required to be within preselected jet phase space (for inclusive jets this must be one!) + SteeringPars["Njetmin"] = ftable->TestParameterInSteering("Njetmin"); + Njetmin = 1; + if ( SteeringPars["Njetmin"] ) { + ftable->GetParameterFromSteering("Njetmin",Njetmin); + } + if ( Njetmin < 1 ) { + say::error["ScenarioCode"] << "This is a 1+-jet scenario. At least one jet must be present, aborted!" << endl; + say::error["ScenarioCode"] << "Please correct the Njetmin requirement. Njetmin = " << Njetmin << endl; + exit(1); + } + + // --- fastNLO user: declare and initialize Njet phase space cuts and definitions via steering file + // overall minimum & maximum for 1st observable, e.g. maximal absolute rapidity |y_max| + SteeringPars["obs0min"] = ftable->TestParameterInSteering("obs0min"); + obsmin[0] = ftable->GetObsBinsLoBoundsMin(0); // by default derived from binning in obs0 + if ( SteeringPars["obs0min"] ) { + ftable->GetParameterFromSteering("obs0min",obsmin[0]); + } + SteeringPars["obs0max"] = ftable->TestParameterInSteering("obs0max"); + obsmax[0] = ftable->GetObsBinsUpBoundsMax(0); // by default derived from binning in obs0 + if ( SteeringPars["obs0max"] ) { + ftable->GetParameterFromSteering("obs0max",obsmax[0]); + } + // overall minimum & maximum for 2nd observable, e.g. dijet mass mjj + obsmin[1] = -DBL_MAX; + obsmax[1] = +DBL_MAX; + if (NDim > 1) { + SteeringPars["obs1min"] = ftable->TestParameterInSteering("obs1min"); + obsmin[1] = ftable->GetObsBinsLoBoundsMin(1); // by default derived from binning in obs1 + if ( SteeringPars["obs1min"] ) { + ftable->GetParameterFromSteering("obs1min",obsmin[1]); + } + SteeringPars["obs1max"] = ftable->TestParameterInSteering("obs1max"); + obsmax[1] = ftable->GetObsBinsUpBoundsMax(1); // by default derived from binning in obs1 + if ( SteeringPars["obs1max"] ) { + ftable->GetParameterFromSteering("obs1max",obsmax[1]); + } + } + // overall minimum & maximum for 3rd observable + obsmin[2] = -DBL_MAX; + obsmax[2] = +DBL_MAX; + if (NDim > 2) { + SteeringPars["obs2min"] = ftable->TestParameterInSteering("obs2min"); + obsmin[2] = ftable->GetObsBinsLoBoundsMin(2); // by default derived from binning in obs2 + if ( SteeringPars["obs2min"] ) { + ftable->GetParameterFromSteering("obs2min",obsmin[2]); + } + SteeringPars["obs2max"] = ftable->TestParameterInSteering("obs2max"); + obsmax[2] = ftable->GetObsBinsUpBoundsMax(2); // by default derived from binning in obs2 + if ( SteeringPars["obs2max"] ) { + ftable->GetParameterFromSteering("obs2max",obsmax[2]); + } + } + jetclusfj.setup(static_cast<fastjet_jets::JetAlgorithm>(jetalgo), jetsize, overlapthreshold); +} + +// --- fastNLO v2.2: class UserHHC: analyze parton event (called once for each event) +void UserHHC::userfunc(const event_hhc& p, const amplitude_hhc& amp) { + if ( say::debug.GetSpeak() ) { + say::debug["UserHHC::userfunc"] << "---------- UserHHC::userfunc called ----------" << endl; + say::debug["ScenarioCode"] << "==================== Start of event ====================" << endl; + } + + // --- fastNLO user: + // Here is your playground where you compute your observables and + // scales for each jet or event. + // The bin number ("obsbin") gets passed to fastNLO's table filling code. + // Usually, pT and E are in GeV, but this may be changed. + // ATTENTION: Scales must always be in GeV! + + // derive partonic HT scale + double htp = 0.; + unsigned int np = p.upper(); + for (unsigned int i = 1; i <= np; i++) { + htp += p[i].perp(); + // --- debug output + if ( say::debug.GetSpeak() ) { + say::debug["ScenarioCode"] << "partonic HT: parton # i, pt, htp: " << i << ", " << p[i].perp() << ", " << htp << endl; + } + } + + // apply the jet algorithm to partonic 4-vector array p of NLOJet++ + pj = jetclusfj(p); + unsigned int nj = pj.upper(); + + // --- check on minimal and maximal no. of jets + // ATTENTION: In principle, without cuts, there should always be two. + // For efficiency reasons though, our interface to the fastjet algorithms + // requires a minimal jet pT of 1 GeV. If this is a problem, the ptmin value + // in fj-jets.cc needs to be changed. + // There should never be more than four jets in NLOJet++ + if (nj < 1) { + say::debug["ScenarioCode"] << "This event from NLOJet++ has no jets with pT > 1 GeV. Skipped!" << endl; + return; + } else if (nj > 4) { + say::error["ScenarioCode"] << "This event from NLOJet++ has more than four jets, which should never happen. Aborted!" << endl; + exit(1); + } + + // --- give some debug output before selection and sorting + if ( say::debug.GetSpeak() ) { + for (unsigned int i=1; i<=nj; i++) { + double pti = pj[i].perp(); + double yi = pj[i].rapidity(); + double etai = pj[i].prapidity(); + say::debug["ScenarioCode"] << "before cuts: jet # i, pt, y, eta: " << i << ", " << pti << ", " << yi << ", " << etai << endl; + } + } + + // --- select jets in y (lpseudo = false) or eta (lpseudo = true) and ptjmin + // note: failing jets are not deleted but moved to the end of the jet array pj! + fNLOSelector SelJets (yetajmin,yetajmax,ptjmin,lpseudo); + + // --- count number of selected jets left at this stage + size_t njet = std::remove_if(pj.begin(), pj.end(), SelJets) - pj.begin(); + if ( (int)njet < Njetmin ) return; // Nothing to be done + + // --- sort selected n jets at beginning of jet array pj, by default decreasing in pt + static fNLOSorter SortJets; + std::sort(pj.begin(), pj.begin() + njet, SortJets); + + // --- give some debug output after selection and sorting + if ( say::debug.GetSpeak() ) { + say::debug["ScenarioCode"] << "# jets before and after phase space cuts: nj, njet = " << nj << ", " << njet << endl; + if ( ! lpseudo ) { + say::debug["ScenarioCode"] << "phase space cuts: yjmin, yjmax, ptjmin: " << yetajmin << ", " << yetajmax << ", " << ptjmin << endl; + } else { + say::debug["ScenarioCode"] << "phase space cuts: etajmin, etajmax, ptjmin: " << yetajmin << ", " << yetajmax << ", " << ptjmin << endl; + } + for (unsigned int i=1; i<=njet; i++) { + double pti = pj[i].perp(); + double yi = pj[i].rapidity(); + double etai = pj[i].prapidity(); + say::debug["ScenarioCode"] << "after cuts: jet # i, pt, y, eta: " << i << ", " << pti << ", " << yi << ", " << etai << endl; + } + } + + // ---- fastNLO v2.2 + // Analyze inclusive jets in jet loop + // set one possible scale choice (Attention: Only correct if jets sorted descending in pT) + double ptmax = pj[1].perp(); + for (unsigned int k = 1; k <= njet; k++) { + + // --- calculate observable of nth dimension + for ( int i = 0; i<NDim; i++ ) { + switch(obsdef[i]) { + case PTJETGEV : + // jet pT + obs[i] = pj[k].perp(); + break; + case YJET : + // jet rapidity + obs[i] = abs(pj[k].rapidity()); + break; + case ETAJET : + // jet pseudorapidity + obs[i] = abs(pj[k].prapidity()); + break; + case PHIJET : + // jet azimuthal angle + obs[i] = atan2(pj[k].Y(), pj[k].X()); + break; + default : + say::error["ScenarioCode"] << "Observable not yet implemented, aborted!" << endl; + say::error["ScenarioCode"] << "DimLabel[" << i << "] = " << DimLabel[i] << endl; + say::error["ScenarioCode"] << "Please complement this scenario to include the requested observable." << endl; + exit(1); + } + } + + // --- give some debug output before final selection + if ( say::debug.GetSpeak() ) { + say::debug["ScenarioCode"] << "---------------- Before final selection ----------------" << endl; + for ( int i = 0; i<NDim; i++ ) { + say::debug["ScenarioCode"] << "Obs. min/max values: " << i << " : obsmin = " << obsmin[i] << ", obs = " << obs[i] << ", obsmax = " << obsmax[i] << endl; + } + } + + // --- Further Njet phase space cuts? + if ( obsmin[0] <= obs[0] && obs[0] < obsmax[0] && + (NDim < 2 || (obsmin[1] <= obs[1] && obs[1] < obsmax[1])) && + (NDim < 3 || (obsmin[2] <= obs[2] && obs[2] < obsmax[2])) ) { + + // --- jet accepted + if ( say::debug.GetSpeak() ) { + say::debug["ScenarioCode"] << "----------------- Event/jet accepted! ------------------" << endl; + say::debug["ScenarioCode"] << "==================== End of event ====================" << endl; + } + + // --- set the renormalization and factorization scales + // --- calculate the requested scales + for ( unsigned int i = 0; i < 2; i++ ) { + switch(mudef[i]) { + case PTMAX : + // maximal jet pT + mu[i] = ptmax; + break; + case PTJET : + // jet pT + mu[i] = pj[k].perp(); + break; + case HTP : + // partonic sum pT + mu[i] = htp; + say::debug["ScenarioCode"] << "HTP scale values: " << i << " : mu[i] = " << mu[i] << endl; + break; + case HTPHALF : + // half partonic sum pT + mu[i] = htp/2.; + say::debug["ScenarioCode"] << "HTPHALF scale values: " << i << " : mu[i] = " << mu[i] << endl; + break; + default : + say::error["ScenarioCode"] << "Scale not yet implemented, aborted!" << endl; + say::error["ScenarioCode"] << "ScaleLabel[" << i << "] = " << ScaleLabel[i] << endl; + say::error["ScenarioCode"] << "Please complement this scenario to include the requested scale." << endl; + exit(1); + } + } + static vector<double> scalevars; + if ( ! lFlexibleScaleTable ) scalevars = ftable->GetScaleVariations(); + + // get matrix elements + static vector<fnloEvent> contribsflex; + static vector< vector<fnloEvent> > contribsfix; + if (lFlexibleScaleTable) { + contribsflex = UsefulNlojetTools::GetFlexibleScaleNlojetContribHHC(p,amp); + } else { + contribsfix = UsefulNlojetTools::GetFixedScaleNlojetContribHHC(p,amp,mu[0],scalevars); + } + + // set and fill scenario specific quantites + fnloScenario scen; + if ( NDim < 1 || NDim > 3 ) { + say::error["ScenarioCode"] << "Less than 1D(?!) or more than 3D binning not implemented here, aborted!" << endl; + say::error["ScenarioCode"] << "DifferentialDimension NDim = " << NDim << endl; + } + for ( int i = 0; i<NDim; i++ ) { + scen.SetObservableDimI( obs[i], i ); + } + + scen.SetObsScale1( mu[0] ); // must be consistent with 'mu' from contribs + if (lFlexibleScaleTable) { + scen.SetObsScale2( mu[1] ); + ftable->FillAllSubprocesses(contribsflex,scen); + } else { + ftable->FillAllSubprocesses(contribsfix,scen); + } + } else { + // --- jet rejected + if ( say::debug.GetSpeak() ) { + say::debug["ScenarioCode"] << "----------------- Event/jet rejected! ------------------" << endl; + say::debug["ScenarioCode"] << "==================== End of event ====================" << endl; + } + } + } +} + +//------ DON'T TOUCH THIS PART! ------ + +// --- fastNLO v2.2: interface to NLOJet++: read steering file, set LO of selected process +void inputfunc(unsigned int& nj, unsigned int& nu, unsigned int& nd) { + // This is the very first routine called from NLOJet++! + // It seems that it gets called three times. + static int ILOord; // no default + if (!ftable) { + // Switch on debug output even before steering is initialised + // Normally this should be commented out! + // speaker::SetGlobalVerbosity(say::DEBUG); + // The following lines should be printed ONCE. Steering parameters have not yet been read. + cout << " # INIT: [inputfunc] ---------- inputfunc called ----------" << endl; + cout << " # INIT: [inputfunc] ---------- initializing ... ----------" << endl; + // --- read in steering and create fastNLO table accordingly + // --- ftable is a global constant + ftable = new fastNLOCreate(UsefulNlojetTools::GenConsts(),UsefulNlojetTools::ProcConsts_HHC(),"InclusiveNJets.str"); + if ( ftable->TestParameterInSteering("LeadingOrder") ) { + ftable->GetParameterFromSteering("LeadingOrder",ILOord); + } else { + say::error["ScenarioCode"] << "LO of process not defined, aborted!" << endl; + exit(1); + } + // ftable->SetLoOrder(ILOord); // Not necessary when set via LeadingOrder in steering file + cout << " # INIT: [inputfunc] ---------- LeadingOrder = " << ILOord << " ----------" << endl; + } + + // The following line is printed ONLY, when DEBUG print out has been requested by the steering. + say::debug["inputfunc"] << "---------- inputfunc called ----------" << endl; + + // Set the number of jets for the LO process according to the steering, + // e.g. 2 for hh inclusive jets, 3 for hh 3-jet mass + // nj = 1U; // only useful for DIS + switch(ILOord) { + case 2 : + // hh inclusive jets, hh dijets + nj = 2U; + break; + case 3 : + // hh 3-jets + nj = 3U; + break; + default : + say::error["ScenarioCode"] << "Unknown LO of process defined, aborted!" << endl; + exit(1); + } + + // Set the number of the (massless!) up and down type flavours (usually, you won´t change that) + nu = 2U; + nd = 3U; +} + +// --- fastNLO v2.2: interface to NLOJet++: set cms energy and phase space generator +void psinput(phasespace_hhc *ps, double& s) { + // cout << " # INIT: [psinput] ---------- psinput called ----------" << endl; + say::debug["psinput"] << "---------- psinput called ----------" << endl; + + // --- set the center-of-mass energy squared as read from steering file + s = pow(ftable->GetEcms(),2); + say::debug["psinput"] << "cms energy read from steering: sqrt(s) = " << ftable->GetEcms() << endl; + + // --- in principle alternative phase space generators can be used + // --- we support only the default for now + ps = 0; +} + +// --- fastNLO v2.2: interface to NLOJet++: user class +user_base_hhc * userfunc() { + say::debug["userfunc"] << "---------- userfunc called ----------" << endl; + return new UserHHC; +} + +// --- fastNLO v2.2: get some info (order, name) from NLOjet++ command line arguments +void InitfNLO(const std::basic_string<char>& __file_name) { + say::debug["InitfNLO"] << "---------- InitfNLO called ----------" << endl; + // --- obtain relevant variables from NLOJet++ command line arguments + ftable->SetOrderOfAlphasOfCalculation(UsefulNlojetTools::GetOrderOfRun(__file_name)); + + // --- set fastNLO filename according to NLOJet++ command line arguments + string tabFilename = __file_name.c_str(); + tabFilename += ".tab"; + +#ifdef HAVE_ZLIB + bool lgzip = true; +#else + bool lgzip = false; +#endif + + if ( SteeringPars["OutputCompression"] ) { + ftable->GetParameterFromSteering("OutputCompression",lgzip); + } + // string filename = fScenConsts.OutputFilename; + // if ( lgzip ) tabFilename += ".gz"; + tabFilename += ".gz"; + ftable->SetFilename(tabFilename); +} + +// --- fastNLO v2.2: class UserHHC: initialize event counter and storage limit (called once) +void UserHHC::initfunc(unsigned int) { + say::debug["UserHHC::initfunc"] << "---------- UserHHC::initfunc called ----------" << endl; + nevents = 0; + nwritemax = 10000000; +} + +// --- fastNLO v2.2: class UserHHC: count events and store table (called after each event) +void UserHHC::end_of_event() { + say::debug["UserHHC::end_of_event"] << "---------- UserHHC::end_of_event called ----------" << endl; + // --- count events + nevents += 1; + // --- store table + say::debug["UserHHC::end_of_event"] << " nevents = " << nevents << ", nwrite = " << nwrite << endl; + if (( (unsigned long)nevents % nwrite)==0){ + ftable->SetNumberOfEvents(nevents); + ftable->WriteTable(); + if ( nwrite < nwritemax ) { + nwrite *= 10; + } else { + nwrite = nwritemax; + } + } +} + +// --- define function for azimuthal angular distance in [-Pi,Pi] +double dphi(double phi2, double phi1) { + double delta_phi = phi2-phi1; + if (delta_phi > M_PI) { + delta_phi -= 2*M_PI; + } else if (delta_phi < -M_PI) { + delta_phi += 2*M_PI; + } + return delta_phi; +} diff --git a/v2.6/generators/nlojet++/interface/hadron/InclusiveNJets_new.cc b/v2.6/generators/nlojet++/interface/hadron/InclusiveNJets_new.cc new file mode 100644 index 0000000000000000000000000000000000000000..f12c9a2562abbf4fd1f76ed785ae878f4e19e272 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/hadron/InclusiveNJets_new.cc @@ -0,0 +1,561 @@ +// +// fastNLO v2.2 creator code for inclusive N jets scenarios +// +// ============== fastNLO user: ======================================== +// To create your own scenario, it is recommended to take this +// example code, make a copy, and implement the relevant changes. +// Important: +// Edit only those parts which are clearly indicated as modifiable +// "fastNLO user" code. If a code fragment is not explicitely +// labeled as "fastNLO user", it is likely that a modification will +// interfere with the fastNLO routines. +// +// This file contains the following routines: +// struct fNLOSelector (-> user edits) +// struct fNLOSorter (-> user edits) +// UserHHC::phys_output (called once at the start -> user edits) +// UserHHC::userfunc (called once for each event -> user edits) +// inputfunc (don't touch) +// psinput (don't touch) +// userfunc (don't touch) +// InitfNLO (don't touch) +// UserHHC::initfunc (don't touch) +// UserHHC::end_of_event (don't touch) +// +// If the provided example routine can not be steered flexibly enough, +// feel free to implement the missing parts. +// +// Implementing a new scenario may imply to change: +// - the jet algorithm ("#include" statement and assignment of "jetclus..") +// - the jet observables to compute +// - the scale definition +// +// ===================================================================== + +//------ DON'T TOUCH THIS PART! ------ +#include <cfloat> +#include <iostream> +#include <map> +#include <bits/hhc-phasespace.h> +#include <bits/hhc-process.h> +#include <bits/hhc-jetfunc.h> + +//----- used namespaces ----- +using namespace nlo; +using namespace std; + +//----- fastNLO ----- +#include "fastnlotk/fastNLOEvent.h" +#include "fastnlotk/fastNLOCreate.h" +// --- fastNLO v2.2: include header files of interface to NLOJet++ +#include "fnlo_int_nlojet/fastNLOjetpp.h" +#include "fnlo_int_nlojet/fnlo_int_hhc_nlojet.h" + +//------ USER DEFINED PART STARTS HERE ------ + +// --- fastNLO user: include header file for the jet algorithm +#include "fnlo_int_nlojet/fastjet-jets.h" + +// --- fastNLO v2.2: define user class to be used with NLOJet++ +class UserHHC : public FastNLOUserHHC { +public: + // --- fastNLO user: evaluate steering file and define physics output (called once before first event) + virtual void read_steering(); + // --- fastNLO user: analyze parton event (called once for each event) + virtual void userfunc(const event_hhc&, const amplitude_hhc&); + +private: + // --- fastNLO user: define the jet algorithm (for the choice of included header file above) + fastjet_jets jetclusfj; + + // --- define the jet structure + bounded_vector<lorentzvector<double> > pj; + + // --- fastNLO steering + bool lFlexibleScaleTable; // Fill fixed- or flexible-scale table (default is fixed-scale) + int NDim; // Dimensionality of distributions (no default, must be defined) + vector<string> DimLabel; // Dimension labels (no default, must be defined) + // enum to switch between implemented observables (max. of 3 simultaneously) + enum Obs { PTJETGEV, YJET, ETAJET, PHIJET }; + Obs obsdef[3]; + double obs[3]; + vector<string> ScaleLabel; // Scale labels (Scale1: no default, must be defined; Scale2: default is "pT_max_[GeV]") + // enum to switch between implemented scale definitions (max. of 2 simultaneously) + enum Scales { PTMAX, PTJET, HTP, HTPHALF }; + Scales mudef[2]; + double mu[2]; + int jetalgo; // Define fastjet jet algorithm (no default, must be defined) + double jetsize; // Define jet size R (no default, must be defined) + double overlapthreshold; // Define overlap threshold (default is 0.5) + double ptjmin; // Minimal jet pT (no default, must be defined; should be >= minimum of 1 GeV specified in interface to fastjet) + double yetajmin; // Minimal jet (pseudo-)rapidity (no default, must be defined) + double yetajmax; // Maximal jet (pseudo-)rapidity (no default, must be defined) + bool lpseudo; // Switch to use either jet rapidity y or jet eta + int Njetmin; // Minimal number of jets in phase space (default is 1) + double obsmin[3]; // Minimum in observable in nth dimension (default derived from binning) + double obsmax[3]; // Maximum in observable in nth dimension (default derived from binning) +}; + +// --- fastNLO user: modify the jet selection in UserHHC::userfunc (default = cutting in |y| min, |y| max and pt min) +// (the return value must be true for jets to be UNselected) +struct fNLOSelector { + fNLOSelector(double ymin, double ymax, double ptmin, bool pseudo=false): + _ymin (ymin), _ymax (ymax), _ptmin (ptmin), _pseudo (pseudo){}; + double _ymin, _ymax, _ptmin; + bool _pseudo; + bool operator() (const lorentzvector<double> &a) { + if (!_pseudo) return ! (_ymin <= abs(a.rapidity()) && abs(a.rapidity()) < _ymax && _ptmin <= a.perp()); + else return ! (_ymin <= abs(a.prapidity()) && abs(a.prapidity()) < _ymax && _ptmin <= a.perp()); + }; +}; + +FastNLOUserHHC* FastNLOUserHHC::instance = new UserHHC; + +// --- fastNLO user: modify the jet sorting in UserHHC::userfunc (default = descending in jet pt) +struct fNLOSorter { + bool operator() (const lorentzvector<double> &a, const lorentzvector<double> &b) {return (a.perp() > b.perp());}; +}; + +// sign function returning -1, 0, 1 +template <typename T> int sgn(T val) { + return (T(0) < val) - (val < T(0)); +} + +// --- fastNLO user: check and get steering parameters once and store into static vars +static std::map < std::string, bool > SteeringPars; + +// --- fastNLO user: class UserHHC: evaluate steering file and define physics output (called once before first event) +void UserHHC::read_steering() +{ + // --- fastNLO user: + // Here is your playground where you can evaluate the steering file settings. + // ATTENTION: Some settings are mandatory for the correct functioning! + + // get general steering parameters needed here from steering file + say::debug["UserHHC::phys_output"] << "Evaluating steering parameters ..." << endl; + // fixed- or flexible-scale table + SteeringPars["FlexibleScaleTable"] = ftable->TestParameterInSteering("FlexibleScaleTable"); + lFlexibleScaleTable = false; // default + if ( SteeringPars["FlexibleScaleTable"] ) { + ftable->GetParameterFromSteering("FlexibleScaleTable",lFlexibleScaleTable); + } + // dimensionality + SteeringPars["DifferentialDimension"] = ftable->TestParameterInSteering("DifferentialDimension"); + if ( SteeringPars["DifferentialDimension"] ) { + ftable->GetParameterFromSteering("DifferentialDimension",NDim); + } else { + say::error["ScenarioCode"] << "Dimensioning of binning not set, aborted!" << endl; + exit(1); + } + if ( NDim < 1 || 3 < NDim ) { + say::error["ScenarioCode"] << "Only 1- to 3-dimensional binning implemented, aborted!" << endl; + say::error["ScenarioCode"] << "Please implement the requested " << NDim << "-dimensional binning." << endl; + exit(1); + } + // dimension labels + SteeringPars["DimensionLabels"] = ftable->TestParameterInSteering("DimensionLabels"); + DimLabel.resize(NDim); + if ( SteeringPars["DimensionLabels"] ) { + ftable->GetParameterFromSteering("DimensionLabels",DimLabel); + } else { + say::error["ScenarioCode"] << "Dimension labels not set, aborted!" << endl; + exit(1); + } + // define the observables according to the dimension labels + for ( int i = 0; i<NDim; i++ ) { + if ( DimLabel[i] == "|y|" ) { + obsdef[i] = YJET; + } else if ( DimLabel[i] == "|eta|" ) { + obsdef[i] = ETAJET; + } else if ( DimLabel[i] == "pT_[GeV]" ) { + obsdef[i] = PTJETGEV; + } else if ( DimLabel[i] == "phi" ) { + obsdef[i] = PHIJET; + } else { + say::error["ScenarioCode"] << "Unknown observable, i.e. dimension label, aborted!" << endl; + say::error["ScenarioCode"] << "DimLabel[" << i << "] = " << DimLabel[i] << endl; + say::error["ScenarioCode"] << "Please complement this scenario to include the requested observable." << endl; + exit(1); + } + } + // scale descriptions + SteeringPars["ScaleDescriptionScale1"] = ftable->TestParameterInSteering("ScaleDescriptionScale1"); + ScaleLabel.resize(2); + if ( SteeringPars["ScaleDescriptionScale1"] ) { + ftable->GetParameterFromSteering("ScaleDescriptionScale1",ScaleLabel[0]); + } else { + say::error["ScenarioCode"] << "No description of scale 1, aborted!" << endl; + exit(1); + } + SteeringPars["ScaleDescriptionScale2"] = ftable->TestParameterInSteering("ScaleDescriptionScale2"); + ScaleLabel[1] = "pT_max_[GeV]"; // default + if ( SteeringPars["ScaleDescriptionScale2"] ) { + ftable->GetParameterFromSteering("ScaleDescriptionScale2",ScaleLabel[1]); + } else { + ScaleLabel[1] = "-"; + say::warn["ScenarioCode"] << "No description of scale 2, flexible-scale tables not possible!" << endl; + } + // scale descriptions define the scales + for ( unsigned int i = 0; i < ScaleLabel.size(); i++ ) { + if ( ScaleLabel[i] == "pT_max_[GeV]" ) { + mudef[i] = PTMAX; + } else if ( ScaleLabel[i] == "pT_jet_[GeV]" ) { + mudef[i] = PTJET; + } else if ( ScaleLabel[i] == "HT_part_[GeV]" ) { + mudef[i] = HTP; + } else if ( ScaleLabel[i] == "HT_part/2_[GeV]" ) { + mudef[i] = HTPHALF; + } else { + say::error["ScenarioCode"] << "Unknown scale, i.e. scale description, aborted!" << endl; + say::error["ScenarioCode"] << "ScaleLabel[" << i << "] = " << ScaleLabel[i] << endl; + say::error["ScenarioCode"] << "Please complement this scenario to include the requested scale." << endl; + exit(1); + } + } + + // definition of jet algorithm and jet phase space limits (no defaults) + // + // --- fastNLO user: set the jet algorithm and size via steering file + // fastjet clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT + // fastjet cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = D0RunIICone + SteeringPars["JetAlgo"] = ftable->TestParameterInSteering("JetAlgo"); + if ( SteeringPars["JetAlgo"] ) { + ftable->GetParameterFromSteering("JetAlgo",jetalgo); + if ( jetalgo < 0 || (2 < jetalgo && jetalgo < 10) || 12 < jetalgo ) { + say::error["ScenarioCode"] << "Unknown jet algorithm " << jetalgo << ", aborted!" << endl; + exit(1); + } + } else { + say::error["ScenarioCode"] << "No jet algorithm selected, aborted!" << endl; + exit(1); + } + SteeringPars["Rjet"] = ftable->TestParameterInSteering("Rjet"); + if ( SteeringPars["Rjet"] ) { + ftable->GetParameterFromSteering("Rjet",jetsize); + } else { + say::error["ScenarioCode"] << "Jet size R not defined, aborted!" << endl; + exit(1); + } + SteeringPars["OvThr"] = ftable->TestParameterInSteering("OvThr"); + overlapthreshold = 0.5; // default + if ( SteeringPars["OvThr"] ) { + ftable->GetParameterFromSteering("OvThr",overlapthreshold); + } else if ( jetalgo > 9 ) { + say::error["ScenarioCode"] << "Overlap threshold not defined for jet algorithm " << jetalgo << ", aborted!" << endl; + exit(1); + } + // --- fastNLO user: declare and initialize overall jet phase space cuts via steering file + // overall lowest pT for jets to be considered + SteeringPars["ptjmin"] = ftable->TestParameterInSteering("ptjmin"); + if ( SteeringPars["ptjmin"] ) { + ftable->GetParameterFromSteering("ptjmin",ptjmin); + } else { + say::error["ScenarioCode"] << "Minimal jet pT (ptjmin) not defined, aborted!" << endl; + exit(1); + } + // overall highest pT for jets not implemented, since uncritical with respect to CPU time consumption + // overall smallest |(pseudo-)rapidity| for jets to be considered, use either y or eta but not both + SteeringPars["yjmin"] = ftable->TestParameterInSteering("yjmin"); + SteeringPars["etajmin"] = ftable->TestParameterInSteering("etajmin"); + if ( SteeringPars["yjmin"] && !SteeringPars["etajmin"] ) { + ftable->GetParameterFromSteering("yjmin",yetajmin); + } else if ( !SteeringPars["yjmin"] && SteeringPars["etajmin"] ) { + ftable->GetParameterFromSteering("etajmin",yetajmin); + } else { + say::error["ScenarioCode"] << "Minimal jet (pseudo)rapidity (yjmin or etajmin) not uniquely defined, aborted!" << endl; + exit(1); + } + // overall largest |(pseudo-)rapidity| for jets to be considered, use either y or eta but not both + SteeringPars["yjmax"] = ftable->TestParameterInSteering("yjmax"); + SteeringPars["etajmax"] = ftable->TestParameterInSteering("etajmax"); + if ( SteeringPars["yjmax"] && !SteeringPars["etajmax"] ) { + ftable->GetParameterFromSteering("yjmax",yetajmax); + } else if ( !SteeringPars["yjmax"] && SteeringPars["etajmax"] ) { + ftable->GetParameterFromSteering("etajmax",yetajmax); + } else { + say::error["ScenarioCode"] << "Maximal jet (pseudo)rapidity (yjmax or etajmax) not uniquely defined, aborted!" << endl; + exit(1); + } + // define logical for decision on cuts in (pseudo-)rapidity, no mixing allowed here + if ( SteeringPars["yjmin"] && SteeringPars["yjmax"] ) { + lpseudo = false; + } else if ( SteeringPars["etajmin"] && SteeringPars["etajmax"] ) { + lpseudo = true; + } else { + say::error["ScenarioCode"] << "Phase space cuts mixed in (pseudo-)rapidity, aborted!" << endl; + say::error["ScenarioCode"] << "Booleans for cut selections are" << + " yjmin " << SteeringPars["yjmin"] << + ", yjmax " << SteeringPars["yjmax"] << + ", etajmin " << SteeringPars["etajmin"] << + ", etajmax " << SteeringPars["etajmax"] << endl; + say::error["ScenarioCode"] << "If you really want to mix, the code needs to be adapted." << endl; + exit(1); + } + // minimal number of jets required to be within preselected jet phase space (for inclusive jets this must be one!) + SteeringPars["Njetmin"] = ftable->TestParameterInSteering("Njetmin"); + Njetmin = 1; + if ( SteeringPars["Njetmin"] ) { + ftable->GetParameterFromSteering("Njetmin",Njetmin); + } + if ( Njetmin < 1 ) { + say::error["ScenarioCode"] << "This is a 1+-jet scenario. At least one jet must be present, aborted!" << endl; + say::error["ScenarioCode"] << "Please correct the Njetmin requirement. Njetmin = " << Njetmin << endl; + exit(1); + } + + // --- fastNLO user: declare and initialize Njet phase space cuts and definitions via steering file + // overall minimum & maximum for 1st observable, e.g. maximal absolute rapidity |y_max| + SteeringPars["obs0min"] = ftable->TestParameterInSteering("obs0min"); + obsmin[0] = ftable->GetObsBinsLoBoundsMin(0); // by default derived from binning in obs0 + if ( SteeringPars["obs0min"] ) { + ftable->GetParameterFromSteering("obs0min",obsmin[0]); + } + SteeringPars["obs0max"] = ftable->TestParameterInSteering("obs0max"); + obsmax[0] = ftable->GetObsBinsUpBoundsMax(0); // by default derived from binning in obs0 + if ( SteeringPars["obs0max"] ) { + ftable->GetParameterFromSteering("obs0max",obsmax[0]); + } + // overall minimum & maximum for 2nd observable, e.g. dijet mass mjj + obsmin[1] = -DBL_MAX; + obsmax[1] = +DBL_MAX; + if (NDim > 1) { + SteeringPars["obs1min"] = ftable->TestParameterInSteering("obs1min"); + obsmin[1] = ftable->GetObsBinsLoBoundsMin(1); // by default derived from binning in obs1 + if ( SteeringPars["obs1min"] ) { + ftable->GetParameterFromSteering("obs1min",obsmin[1]); + } + SteeringPars["obs1max"] = ftable->TestParameterInSteering("obs1max"); + obsmax[1] = ftable->GetObsBinsUpBoundsMax(1); // by default derived from binning in obs1 + if ( SteeringPars["obs1max"] ) { + ftable->GetParameterFromSteering("obs1max",obsmax[1]); + } + } + // overall minimum & maximum for 3rd observable + obsmin[2] = -DBL_MAX; + obsmax[2] = +DBL_MAX; + if (NDim > 2) { + SteeringPars["obs2min"] = ftable->TestParameterInSteering("obs2min"); + obsmin[2] = ftable->GetObsBinsLoBoundsMin(2); // by default derived from binning in obs2 + if ( SteeringPars["obs2min"] ) { + ftable->GetParameterFromSteering("obs2min",obsmin[2]); + } + SteeringPars["obs2max"] = ftable->TestParameterInSteering("obs2max"); + obsmax[2] = ftable->GetObsBinsUpBoundsMax(2); // by default derived from binning in obs2 + if ( SteeringPars["obs2max"] ) { + ftable->GetParameterFromSteering("obs2max",obsmax[2]); + } + } + jetclusfj.setup(static_cast<fastjet_jets::JetAlgorithm>(jetalgo), jetsize, overlapthreshold); +} + +// --- fastNLO v2.2: class UserHHC: analyze parton event (called once for each event) +void UserHHC::userfunc(const event_hhc& p, const amplitude_hhc& amp) { + if ( say::debug.GetSpeak() ) { + say::debug["UserHHC::userfunc"] << "---------- UserHHC::userfunc called ----------" << endl; + say::debug["ScenarioCode"] << "==================== Start of event ====================" << endl; + } + + // --- fastNLO user: + // Here is your playground where you compute your observables and + // scales for each jet or event. + // The bin number ("obsbin") gets passed to fastNLO's table filling code. + // Usually, pT and E are in GeV, but this may be changed. + // ATTENTION: Scales must always be in GeV! + + // derive partonic HT scale + double htp = 0.; + unsigned int np = p.upper(); + for (unsigned int i = 1; i <= np; i++) { + htp += p[i].perp(); + // --- debug output + if ( say::debug.GetSpeak() ) { + say::debug["ScenarioCode"] << "partonic HT: parton # i, pt, htp: " << i << ", " << p[i].perp() << ", " << htp << endl; + } + } + + // apply the jet algorithm to partonic 4-vector array p of NLOJet++ + pj = jetclusfj(p); + unsigned int nj = pj.upper(); + + // --- check on minimal and maximal no. of jets + // ATTENTION: In principle, without cuts, there should always be two. + // For efficiency reasons though, our interface to the fastjet algorithms + // requires a minimal jet pT of 1 GeV. If this is a problem, the ptmin value + // in fj-jets.cc needs to be changed. + // There should never be more than four jets in NLOJet++ + if (nj < 1) { + say::debug["ScenarioCode"] << "This event from NLOJet++ has no jets with pT > 1 GeV. Skipped!" << endl; + return; + } else if (nj > 4) { + say::error["ScenarioCode"] << "This event from NLOJet++ has more than four jets, which should never happen. Aborted!" << endl; + exit(1); + } + + // --- give some debug output before selection and sorting + if ( say::debug.GetSpeak() ) { + for (unsigned int i=1; i<=nj; i++) { + double pti = pj[i].perp(); + double yi = pj[i].rapidity(); + double etai = pj[i].prapidity(); + say::debug["ScenarioCode"] << "before cuts: jet # i, pt, y, eta: " << i << ", " << pti << ", " << yi << ", " << etai << endl; + } + } + + // --- select jets in y (lpseudo = false) or eta (lpseudo = true) and ptjmin + // note: failing jets are not deleted but moved to the end of the jet array pj! + fNLOSelector SelJets (yetajmin,yetajmax,ptjmin,lpseudo); + + // --- count number of selected jets left at this stage + size_t njet = std::remove_if(pj.begin(), pj.end(), SelJets) - pj.begin(); + if ( (int)njet < Njetmin ) return; // Nothing to be done + + // --- sort selected n jets at beginning of jet array pj, by default decreasing in pt + static fNLOSorter SortJets; + std::sort(pj.begin(), pj.begin() + njet, SortJets); + + // --- give some debug output after selection and sorting + if ( say::debug.GetSpeak() ) { + say::debug["ScenarioCode"] << "# jets before and after phase space cuts: nj, njet = " << nj << ", " << njet << endl; + if ( ! lpseudo ) { + say::debug["ScenarioCode"] << "phase space cuts: yjmin, yjmax, ptjmin: " << yetajmin << ", " << yetajmax << ", " << ptjmin << endl; + } else { + say::debug["ScenarioCode"] << "phase space cuts: etajmin, etajmax, ptjmin: " << yetajmin << ", " << yetajmax << ", " << ptjmin << endl; + } + for (unsigned int i=1; i<=njet; i++) { + double pti = pj[i].perp(); + double yi = pj[i].rapidity(); + double etai = pj[i].prapidity(); + say::debug["ScenarioCode"] << "after cuts: jet # i, pt, y, eta: " << i << ", " << pti << ", " << yi << ", " << etai << endl; + } + } + + // ---- fastNLO v2.2 + // Analyze inclusive jets in jet loop + // set one possible scale choice (Attention: Only correct if jets sorted descending in pT) + double ptmax = pj[1].perp(); + for (unsigned int k = 1; k <= njet; k++) { + + // --- calculate observable of nth dimension + for ( int i = 0; i<NDim; i++ ) { + switch(obsdef[i]) { + case PTJETGEV : + // jet pT + obs[i] = pj[k].perp(); + break; + case YJET : + // jet rapidity + obs[i] = abs(pj[k].rapidity()); + break; + case ETAJET : + // jet pseudorapidity + obs[i] = abs(pj[k].prapidity()); + break; + case PHIJET : + // jet azimuthal angle + obs[i] = atan2(pj[k].Y(), pj[k].X()); + break; + default : + say::error["ScenarioCode"] << "Observable not yet implemented, aborted!" << endl; + say::error["ScenarioCode"] << "DimLabel[" << i << "] = " << DimLabel[i] << endl; + say::error["ScenarioCode"] << "Please complement this scenario to include the requested observable." << endl; + exit(1); + } + } + + // --- give some debug output before final selection + if ( say::debug.GetSpeak() ) { + say::debug["ScenarioCode"] << "---------------- Before final selection ----------------" << endl; + for ( int i = 0; i<NDim; i++ ) { + say::debug["ScenarioCode"] << "Obs. min/max values: " << i << " : obsmin = " << obsmin[i] << ", obs = " << obs[i] << ", obsmax = " << obsmax[i] << endl; + } + } + + // --- Further Njet phase space cuts? + if ( obsmin[0] <= obs[0] && obs[0] < obsmax[0] && + (NDim < 2 || (obsmin[1] <= obs[1] && obs[1] < obsmax[1])) && + (NDim < 3 || (obsmin[2] <= obs[2] && obs[2] < obsmax[2])) ) { + + // --- jet accepted + if ( say::debug.GetSpeak() ) { + say::debug["ScenarioCode"] << "----------------- Event/jet accepted! ------------------" << endl; + say::debug["ScenarioCode"] << "==================== End of event ====================" << endl; + } + + // --- set the renormalization and factorization scales + // --- calculate the requested scales + for ( unsigned int i = 0; i < 2; i++ ) { + switch(mudef[i]) { + case PTMAX : + // maximal jet pT + mu[i] = ptmax; + break; + case PTJET : + // jet pT + mu[i] = pj[k].perp(); + break; + case HTP : + // partonic sum pT + mu[i] = htp; + say::debug["ScenarioCode"] << "HTP scale values: " << i << " : mu[i] = " << mu[i] << endl; + break; + case HTPHALF : + // half partonic sum pT + mu[i] = htp/2.; + say::debug["ScenarioCode"] << "HTPHALF scale values: " << i << " : mu[i] = " << mu[i] << endl; + break; + default : + say::error["ScenarioCode"] << "Scale not yet implemented, aborted!" << endl; + say::error["ScenarioCode"] << "ScaleLabel[" << i << "] = " << ScaleLabel[i] << endl; + say::error["ScenarioCode"] << "Please complement this scenario to include the requested scale." << endl; + exit(1); + } + } + static vector<double> scalevars; + if ( ! lFlexibleScaleTable ) scalevars = ftable->GetScaleVariations(); + + // get matrix elements + static vector<fnloEvent> contribsflex; + static vector< vector<fnloEvent> > contribsfix; + if (lFlexibleScaleTable) { + contribsflex = UsefulNlojetTools::GetFlexibleScaleNlojetContribHHC(p,amp); + } else { + contribsfix = UsefulNlojetTools::GetFixedScaleNlojetContribHHC(p,amp,mu[0],scalevars); + } + + // set and fill scenario specific quantites + fnloScenario scen; + if ( NDim < 1 || NDim > 3 ) { + say::error["ScenarioCode"] << "Less than 1D(?!) or more than 3D binning not implemented here, aborted!" << endl; + say::error["ScenarioCode"] << "DifferentialDimension NDim = " << NDim << endl; + } + for ( int i = 0; i<NDim; i++ ) { + scen.SetObservableDimI( obs[i], i ); + } + + scen.SetObsScale1( mu[0] ); // must be consistent with 'mu' from contribs + if (lFlexibleScaleTable) { + scen.SetObsScale2( mu[1] ); + ftable->FillAllSubprocesses(contribsflex,scen); + } else { + ftable->FillAllSubprocesses(contribsfix,scen); + } + } else { + // --- jet rejected + if ( say::debug.GetSpeak() ) { + say::debug["ScenarioCode"] << "----------------- Event/jet rejected! ------------------" << endl; + say::debug["ScenarioCode"] << "==================== End of event ====================" << endl; + } + } + } +} + +// --- define function for azimuthal angular distance in [-Pi,Pi] +double dphi(double phi2, double phi1) { + double delta_phi = phi2-phi1; + if (delta_phi > M_PI) { + delta_phi -= 2*M_PI; + } else if (delta_phi < -M_PI) { + delta_phi += 2*M_PI; + } + return delta_phi; +} diff --git a/v2.6/generators/nlojet++/interface/hadron/Makefile.am b/v2.6/generators/nlojet++/interface/hadron/Makefile.am new file mode 100644 index 0000000000000000000000000000000000000000..0e55ac45988f5500174fefd1d3da84b721414003 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/hadron/Makefile.am @@ -0,0 +1,89 @@ +# -*- Automake -*- +# ----------------------------------------------------------------------------- +# +# K. Rabbertz, 19.05.2014 +# +# fastNLO interface library with example scenarios for NLOJet++ +# +# ----------------------------------------------------------------------------- +# Use GNU standards +AUTOMAKE_OPTIONS = gnu + +# +# Targets +# +# fastNLO libtool libraries for use with NLOJet++ +# +# Without fastjet +# +pkglib_LTLIBRARIES = +# +# Require fastjet +# +if HAVE_FASTJET + pkglib_LTLIBRARIES += libInclusiveNJets.la libInclusiveNJetEvents.la libInclusiveNJetPairs.la libInclusiveNJetDiffs.la +# libInclusiveNJetsNew.la +endif + +# +# Sources +# +# All source files which go into the targets (and have to be distributed) +# Common sources +AM_SOURCES = +# Individual sources +libInclusiveNJets_la_SOURCES = InclusiveNJets.cc $(AM_SOURCES) +libInclusiveNJetEvents_la_SOURCES = InclusiveNJetEvents.cc $(AM_SOURCES) +libInclusiveNJetPairs_la_SOURCES = InclusiveNJetPairs.cc $(AM_SOURCES) +libInclusiveNJetDiffs_la_SOURCES = InclusiveNJetDiffs.cc $(AM_SOURCES) +#libInclusiveNJetsNew_la_SOURCES = InclusiveNJets_new.cc $(AM_SOURCES) fastNLOjetpp.cc + +# +# Preprocessor flags +# +# All targets +# AM_CPPFLAGS = + +# +# C++ compiler flags +# +# top_srcdir for direct compilation before install; pkgincludedir for after install +# +# All targets +AM_CXXFLAGS = -g -O2 -Wall +AM_CXXFLAGS += -I$(srcdir)/../include -I$(top_builddir)/../include -I$(top_srcdir)/../include +AM_CXXFLAGS += -I${NLOJETINCLUDEPATH} `${FNLOTOOLKITBINPATH}/fnlo-tk-config --cppflags` +# Debug flags +# AM_CXXFLAGS = -g -ftrapping-math -fsignaling-nans -O0 -Wall -I${NLOJETINCLUDEPATH} `${FNLOTOOLKITBINPATH}/fnlo-tk-config --cppflags` -I$(srcdir)/../include -I$(top_builddir)/../include -I$(top_srcdir)/../include +# With FastJet +if HAVE_FASTJETCONFIG + AM_CXXFLAGS += `${FASTJETBINPATH}/fastjet-config --plugins --cxxflags` +else +if HAVE_FASTJET + AM_CXXFLAGS += -I${FASTJETINCLUDEPATH} +endif +endif + +# +# Linker flags +# top_builddir for distcheck; top_srcdir for direct linking before install; pkglibdir for after install +# +# All targets +AM_LDFLAGS = -L${top_builddir}/interface/jetalgos/.libs -L${top_srcdir}/interface/jetalgos -ljetalgos +AM_LDFLAGS += -L${top_builddir}/interface/tools/.libs -L${top_srcdir}/interface/tools -lnlojetpptools +AM_LDFLAGS += -L$(pkglibdir) `${FNLOTOOLKITBINPATH}/fnlo-tk-config --ldflags` +if HAVE_FASTJETCONFIG + AM_LDFLAGS += `${FASTJETBINPATH}/fastjet-config --libs --plugins` +else +if HAVE_FASTJET + AM_LDFLAGS += -L${FASTJETLIBPATH} -lfastjet -lSISConePlugin -lsiscone -lsiscone_spherical -lCDFConesPlugin -lPxConePlugin -lD0RunIIConePlugin -lNestedDefsPlugin -lTrackJetPlugin -lATLASConePlugin -lCMSIterativeConePlugin -lEECambridgePlugin -lJadePlugin +endif +endif + +# Files that are required to build the project but that can be +# recreated IF the necessary autotools etc. are available by: +# "autoreconf -i; ./configure" +# Use "make maintainer-clean" (on a build machine) before svn commits, +# but not for distribution +MAINTAINERCLEANFILES = .deps .obj .libs *.la \ + Makefile.in Makefile.gen Makefile diff --git a/v2.6/generators/nlojet++/interface/hadron/fastNLOjetpp.cc b/v2.6/generators/nlojet++/interface/hadron/fastNLOjetpp.cc new file mode 100644 index 0000000000000000000000000000000000000000..92ce7387f3c046eda3a9f1decdc98805c1d51ea1 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/hadron/fastNLOjetpp.cc @@ -0,0 +1,171 @@ +#include "fnlo_int_nlojet/fastNLOjetpp.h" +#include "fastnlotk/fastNLOCreate.h" +#include <iostream> + +#include "fnlo_int_nlojet/fnlo_int_hhc_nlojet.h" + +//----- declaration of the user defined functions ----- +// --- fastNLO v2.2: interface to NLOJet++: read steering file, set LO of +// selected process +void inputfunc(unsigned int &, unsigned int &, unsigned int &); +// --- fastNLO v2.2: interface to NLOJet++: set cms energy and phase space +// generator +void psinput(nlo::phasespace_hhc *, double &); +// --- fastNLO v2.2: interface to NLOJet++: user class +nlo::user_base_hhc *userfunc(); + +//----- array of the symbols symbols ----- +extern "C" { + struct nlo_symbol { + const char *name; + void *address; + } user_defined_functions[] = { + // process index: hhc for hadron-hadron --> jets + {"procindex", (void *)"hhc"}, + // input function + {"inputfunc", (void *)inputfunc}, + // phase space input function + {"psinput", (void *)psinput}, + // user defined functions + {"userfunc", (void *)userfunc}, + // end of the list + {0, 0}}; +} + +// --- fastNLO v2.2: interface to NLOJet++: read steering file, set LO of +// selected process +void inputfunc(unsigned int &nj, unsigned int &nu, unsigned int &nd) { + // This is the very first routine called from NLOJet++! + // It seems that it gets called three times. + static int ILOord; // no default + if (!FastNLOUserHHC::instance->ftable) { + // The following lines should be printed ONCE. Steering parameters have not + // yet been read. + std::cout << " # INIT: [inputfunc] ---------- inputfunc called ----------" + << std::endl; + std::cout << " # INIT: [inputfunc] ---------- initializing ... ----------" + << std::endl; + // --- read in steering and create fastNLO table accordingly + // --- ftable is a global constant + FastNLOUserHHC::instance->ftable = + new fastNLOCreate(UsefulNlojetTools::GenConsts(), + UsefulNlojetTools::ProcConsts_HHC(), + "InclusiveNJets.str"); + if (FastNLOUserHHC::instance->ftable->TestParameterInSteering( + "LeadingOrder")) { + FastNLOUserHHC::instance->ftable->GetParameterFromSteering("LeadingOrder", + ILOord); + } else { + say::error["ScenarioCode"] << "LO of process not defined, aborted!" + << std::endl; + exit(1); + } + // ftable->SetLoOrder(ILOord); // Not necessary when set via + // LeadingOrder in steering file + std::cout << " # INIT: [inputfunc] ---------- LeadingOrder = " << ILOord + << " ----------" << std::endl; + } + + // The following line is printed ONLY, when DEBUG print out has been requested + // by the steering. + say::debug["inputfunc"] << "---------- inputfunc called ----------" << std::endl; + + // Set the number of jets for the LO process according to the steering, + // e.g. 2 for hh inclusive jets, 3 for hh 3-jet mass + // nj = 1U; // only useful for DIS + switch (ILOord) { + case 2: + // hh inclusive jets, hh dijets + nj = 2U; + break; + case 3: + // hh 3-jets + nj = 3U; + break; + default: + say::error["ScenarioCode"] << "Unknown LO of process defined, aborted!" + << std::endl; + exit(1); + } + + // Set the number of the (massless!) up and down type flavours (usually, you + // won´t change that) + nu = 2U; + nd = 3U; +} + +// --- fastNLO v2.2: interface to NLOJet++: set cms energy and phase space +// generator +void psinput(nlo::phasespace_hhc *ps, double &s) { + // std::cout << " # INIT: [psinput] ---------- psinput called ----------" << + // std::endl; + say::debug["psinput"] << "---------- psinput called ----------" << std::endl; + + // --- set the center-of-mass energy squared as read from steering file + s = pow(FastNLOUserHHC::instance->ftable->GetEcms(), 2); + say::debug["psinput"] << "cms energy read from steering: sqrt(s) = " + << FastNLOUserHHC::instance->ftable->GetEcms() << std::endl; + + // --- in principle alternative phase space generators can be used + // --- we support only the default for now + ps = 0; +} + +// --- fastNLO v2.2: interface to NLOJet++: user class +nlo::user_base_hhc *userfunc() { + say::debug["userfunc"] << "---------- userfunc called ----------" << std::endl; + return FastNLOUserHHC::instance; +} + +FastNLOUserHHC::FastNLOUserHHC() : ftable(NULL) {} + +// --- fastNLO user: evaluate steering file and define physics output (called +// once before first event) +void FastNLOUserHHC::phys_output(const std::basic_string<char> &fname, + unsigned long nsave, bool txt) { + // std::cout << " # INIT: [UserHHC::phys_output] ---------- UserHHC::phys_output + // called ----------" << std::endl; + say::debug["UserHHC::phys_output"] + << "---------- UserHHC::phys_output called ----------" << std::endl; + say::debug["UserHHC::phys_output"] << "Before: __save = " << nsave + << ", nwrite = " << nwrite << std::endl; + nwrite = nsave; + + say::debug["InitfNLO"] << "---------- InitfNLO called ----------" << std::endl; + // --- obtain relevant variables from NLOJet++ command line arguments + ftable->SetOrderOfAlphasOfCalculation( + UsefulNlojetTools::GetOrderOfRun(fname)); + + // --- set fastNLO filename according to NLOJet++ command line arguments + ftable->SetFilename(fname + ".tab"); + + read_steering(); +}; + +// --- fastNLO v2.2: initialize event counter and storage limit (called once) +void FastNLOUserHHC::initfunc(unsigned int) { + say::debug["UserHHC::initfunc"] + << "---------- UserHHC::initfunc called ----------" << std::endl; + nevents = 0; + nwritemax = 10000000; +}; + +// --- fastNLO v2.2: count events and store table (called after each event) +void FastNLOUserHHC::end_of_event() { + say::debug["UserHHC::end_of_event"] + << "---------- UserHHC::end_of_event called ----------" << std::endl; + // --- count events + nevents += 1; + // --- store table + say::debug["UserHHC::end_of_event"] << " nevents = " << nevents + << ", nwrite = " << nwrite << std::endl; + if (((unsigned long)nevents % nwrite) == 0) { + ftable->SetNumberOfEvents(nevents); + ftable->WriteTable(); + if (nwrite < nwritemax) { + nwrite *= 10; + } else { + nwrite = nwritemax; + } + } +}; diff --git a/v2.6/generators/nlojet++/interface/include/Makefile.am b/v2.6/generators/nlojet++/interface/include/Makefile.am new file mode 100644 index 0000000000000000000000000000000000000000..3edf0dbf808005277ccaa6b34bad4fae0450b60d --- /dev/null +++ b/v2.6/generators/nlojet++/interface/include/Makefile.am @@ -0,0 +1,20 @@ +# -*- Automake -*- +# ----------------------------------------------------------------------------- +# +# K. Rabbertz, 19.05.2014 +# +# Header files for fastNLO interface to NLOJet++ +# +# ----------------------------------------------------------------------------- +# Use GNU standards +AUTOMAKE_OPTIONS = gnu + +# Subdirectories +SUBDIRS = fnlo_int_nlojet + +# Files that are required to build the project but that can be +# recreated IF the necessary autotools etc. are available by: +# "autoreconf -i; ./configure" +# Use "make maintainer-clean" (on a build machine) before svn commits, +# but not for distribution +MAINTAINERCLEANFILES = Makefile.in diff --git a/v2.6/generators/nlojet++/interface/include/fnlo_int_nlojet/Makefile.am b/v2.6/generators/nlojet++/interface/include/fnlo_int_nlojet/Makefile.am new file mode 100644 index 0000000000000000000000000000000000000000..6701a195e4c95b26cd6126fc31bbf8a683e0e5cf --- /dev/null +++ b/v2.6/generators/nlojet++/interface/include/fnlo_int_nlojet/Makefile.am @@ -0,0 +1,24 @@ +# -*- Automake -*- +# ----------------------------------------------------------------------------- +# +# K. Rabbertz, 15.05.2014 +# +# Header files for fastNLO interface to NLOJet++ +# +# ----------------------------------------------------------------------------- +# Use GNU standards +AUTOMAKE_OPTIONS = gnu + +# +# Include files to be distributed +# +# pkginclude_HEADERS would install to $(includedir)/$(PACKAGE_NAME) instead +fastnloincludedir = $(includedir)/fnlo_int_nlojet +fastnloinclude_HEADERS = fnlo_int_hhc_nlojet.h pdf-hhc-dummy.h cone-e.h cone-et.h kt-e.h fj-jets.h fastjet-jets.h fastNLOjetpp.h + +# Files that are required to build the project but that can be +# recreated IF the necessary autotools etc. are available by: +# "autoreconf -i; ./configure" +# Use "make maintainer-clean" (on a build machine) before svn commits, +# but not for distribution +MAINTAINERCLEANFILES = Makefile.in diff --git a/v2.6/generators/nlojet++/interface/include/fnlo_int_nlojet/cone-e.h b/v2.6/generators/nlojet++/interface/include/fnlo_int_nlojet/cone-e.h new file mode 100644 index 0000000000000000000000000000000000000000..efcabea93a6f4ea90cb44ba83b8291ea064bc9a6 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/include/fnlo_int_nlojet/cone-e.h @@ -0,0 +1,26 @@ +#ifndef __cone_e_h__ +#define __cone_e_h__ 1 + +#include <bits/hhc-event.h> +#include <bits/hep-bounded_vector.h> + +class cone_e { + // private types + typedef nlo::lorentzvector<double> _Lv; + +public: + // do the clustering and return with the momenta of the jets + const nlo::bounded_vector<_Lv> &operator()(const nlo::event_hhc &, double); + +private: + // private data members + nlo::bounded_vector<_Lv> _M_p; + nlo::bounded_vector<_Lv> _M_pj; + nlo::bounded_vector<_Lv> _M_ax; + + // private members + double _M_pair(int, int, double); + void _M_merge(int i, int j) { _M_p[i] += _M_p[j]; } +}; + +#endif diff --git a/v2.6/generators/nlojet++/interface/include/fnlo_int_nlojet/cone-et.h b/v2.6/generators/nlojet++/interface/include/fnlo_int_nlojet/cone-et.h new file mode 100644 index 0000000000000000000000000000000000000000..5887b461a5744ae623cfd3d3450691ac5df01578 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/include/fnlo_int_nlojet/cone-et.h @@ -0,0 +1,27 @@ +#ifndef __cone_et_h__ +#define __cone_et_h__ 1 + +#include <bits/hhc-event.h> +#include <bits/hep-bounded_vector.h> + +class cone_et { + // private types + typedef nlo::lorentzvector<double> _Lv; + +public: + // do the clustering and return with the momenta of the jets + const nlo::bounded_vector<_Lv> &operator()(const nlo::event_hhc &, double); + +private: + // private data members + nlo::bounded_vector<_Lv> _M_p; + nlo::bounded_vector<_Lv> _M_pj; + + // private members + double _M_pair(int, int); + void _M_merge(int i, int j) { _M_p[i] += _M_p[j]; } + // MW: merge in Et scheme + void _M_merge_Et(int, int); +}; + +#endif diff --git a/v2.6/generators/nlojet++/interface/include/fnlo_int_nlojet/fastNLOjetpp.h b/v2.6/generators/nlojet++/interface/include/fnlo_int_nlojet/fastNLOjetpp.h new file mode 100644 index 0000000000000000000000000000000000000000..649418303aaed7d7997c26e4b263e2d218182a69 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/include/fnlo_int_nlojet/fastNLOjetpp.h @@ -0,0 +1,36 @@ +#include <bits/hhc-phasespace.h> +#include <bits/hhc-jetfunc.h> + +// --- fastNLO v2.2: define user class to be used with NLOJet++ +class FastNLOUserHHC : public nlo::basic_user_set< + nlo::user0d_hhc, nlo::user1h_hhc, nlo::user2h_hhc> { +public: + FastNLOUserHHC(); + // --- fastNLO user: evaluate steering file and define physics output (called + // once before first event) + virtual void phys_output(const std::basic_string<char> &fname, + unsigned long nsave = 10000UL, bool txt = false); + // --- fastNLO user: analyze parton event (called once for each event) + virtual void userfunc(const event_type &, const nlo::amplitude_hhc &); + // --- fastNLO v2.2: count events and store table (called after each event) + virtual void end_of_event(); + // --- fastNLO v2.2: read settings from steering file + virtual void read_steering() = 0; + + // --- fastNLO v2.2: define pointer to fastNLO steering file + struct fastNLOCreate *ftable; + + static FastNLOUserHHC *instance; + +private: + // --- fastNLO definitions (not for user) + double nevents; // No. of events calculated so far + unsigned long + nwrite; // Actual no. of events after which to write out the table + unsigned long + nwritemax; // Maximal no. of events after which to write out the table + +protected: + // --- fastNLO v2.2: init nloJet++ + virtual void initfunc(unsigned int); +}; diff --git a/v2.6/generators/nlojet++/interface/include/fnlo_int_nlojet/fastjet-jets.h b/v2.6/generators/nlojet++/interface/include/fnlo_int_nlojet/fastjet-jets.h new file mode 100644 index 0000000000000000000000000000000000000000..47080e836f887ed436cfa67dc6572c993aff29e3 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/include/fnlo_int_nlojet/fastjet-jets.h @@ -0,0 +1,46 @@ +#ifndef __fastjet_jets_h__ +#define __fastjet_jets_h__ 1 + +#include <bits/hhc-event.h> +#include <bits/hep-bounded_vector.h> +#include "fastjet/JetDefinition.hh" +#include "fastjet/PseudoJet.hh" + +class fastjet_jets { + + // private types + typedef nlo::lorentzvector<double> _Lv; + +public: + enum JetAlgorithm { + // fastjet base algorithms + KT = fastjet::kt_algorithm, + CA = fastjet::cambridge_algorithm, + antiKT = fastjet::antikt_algorithm, + // jet algorithms included via plugins + SISCone = 10, + CDFMidPointCone = 11, + D0RunIICone = 12 + }; + + fastjet_jets(); + fastjet_jets(const JetAlgorithm jetalgo, const double jetsize, + const double overlapthreshold); + ~fastjet_jets(); + // do the clustering and return with the momenta of the jets + const nlo::bounded_vector<_Lv> &operator()(const nlo::event_hhc &); + void setup(const JetAlgorithm jetalgo, const double jetsize, + const double overlapthreshold); + +private: + // private data members + nlo::bounded_vector<_Lv> _M_pj; + void reset(); + + fastjet::JetDefinition *jet_def; + fastjet::JetDefinition::Plugin *plugin; + std::vector<fastjet::PseudoJet> input_objects; + std::vector<fastjet::PseudoJet> output_jets; +}; + +#endif diff --git a/v2.6/generators/nlojet++/interface/include/fnlo_int_nlojet/fj-jets.h b/v2.6/generators/nlojet++/interface/include/fnlo_int_nlojet/fj-jets.h new file mode 100644 index 0000000000000000000000000000000000000000..c428c45437a20ebfcd472a958e7352e7b49a290e --- /dev/null +++ b/v2.6/generators/nlojet++/interface/include/fnlo_int_nlojet/fj-jets.h @@ -0,0 +1,22 @@ +#ifndef __fj_jets_h__ +#define __fj_jets_h__ 1 + +#include <bits/hhc-event.h> +#include <bits/hep-bounded_vector.h> + +class fj_jets { + + // private types + typedef nlo::lorentzvector<double> _Lv; + +public: + // do the clustering and return with the momenta of the jets + const nlo::bounded_vector<_Lv> &operator()(const nlo::event_hhc &, int, + double, double); + +private: + // private data members + nlo::bounded_vector<_Lv> _M_pj; +}; + +#endif diff --git a/v2.6/generators/nlojet++/interface/include/fnlo_int_nlojet/fnlo_int_hhc_nlojet.h b/v2.6/generators/nlojet++/interface/include/fnlo_int_nlojet/fnlo_int_hhc_nlojet.h new file mode 100644 index 0000000000000000000000000000000000000000..1ca13582e39a43225752c251f89dada1fc39d26c --- /dev/null +++ b/v2.6/generators/nlojet++/interface/include/fnlo_int_nlojet/fnlo_int_hhc_nlojet.h @@ -0,0 +1,76 @@ +//! +//! UsefulNlojetTools +//! +//! Collection of useful functions for the fastNLO interface +//! to NLOJET++. +//! +// KR: Drop differentiation in 2jet and 3jet ProcConsts. +// Default is 2jet, set differences for 3jet via steering! + +#include <cstdio> +#include <algorithm> //c++98 +#include <utility> //c++11 +#include "fastnlotk/fastNLOEvent.h" +#include "fastnlotk/fastNLOTableConstants.h" +#include "fastnlotk/speaker.h" +#include "fnlo_int_nlojet/pdf-hhc-dummy.h" +#include <bits/hhc-phasespace.h> +#include <bits/hhc-jetfunc.h> + +namespace UsefulNlojetTools { +/** + namespace UsefulNlojetTools + + Collection of useful functions and constant for the interface + between nlojet++ and fastNLO, if nlojet++ is run in hhc-mode + (i.e. for pp and ppbar collisions). +*/ + +//_______________________________________________________________________ +fastNLO::GeneratorConstants GenConsts(); + +//_______________________________________________________________________ +fastNLO::ProcessConstants ProcConsts_HHC(); + +//_______________________________________________________________________ +unsigned int GetNj(); + +// get center of mass energy +double GetEcms(); + +//_______________________________________________________________________ +unsigned int GetLoOrder(); + +//_______________________________________________________________________ +unsigned int GetOrderOfRun(const std::basic_string<char> &__file_name); + +//_______________________________________________________________________ +int NlojetToFastnloIDHHC(int id); +int FastnloIdToNlojetIdHHC(int id); + +//_______________________________________________________________________ +std::vector<fnloEvent> +GetFlexibleScaleNlojetContribHHC(const nlo::event_hhc &p, + const nlo::amplitude_hhc &); + +// KR: Is it possible to get NSubproc from the Toolkit instead? +// This would allow to read the setting as defined in the steering in +// contrast to this duplication ... +// In addition, this method had set the # of subprocesses for LO 3-jet to 6 +// which was never tried before ... +// ==> Fixed back to 7 now. +// New default: NSubProcesses always 7! +//_______________________________________________________________________ +unsigned int GetNSubproc(); + +//_______________________________________________________________________ +std::vector<fnloEvent> +GetFixedScaleNlojetContribHHC(const nlo::event_hhc &p, + const nlo::amplitude_hhc &, double mu); + +//_______________________________________________________________________ +std::vector<std::vector<fnloEvent> > +GetFixedScaleNlojetContribHHC(const nlo::event_hhc &p, + const nlo::amplitude_hhc &, double mu, + const std::vector<double> &scalevar); +} diff --git a/v2.6/generators/nlojet++/interface/include/fnlo_int_nlojet/kt-e.h b/v2.6/generators/nlojet++/interface/include/fnlo_int_nlojet/kt-e.h new file mode 100644 index 0000000000000000000000000000000000000000..d1f378995300f2b547d530173859803bd7e7dcca --- /dev/null +++ b/v2.6/generators/nlojet++/interface/include/fnlo_int_nlojet/kt-e.h @@ -0,0 +1,24 @@ +#ifndef __kt_e_h__ +#define __kt_e_h__ 1 + +#include <bits/hhc-event.h> +#include <bits/hep-bounded_vector.h> + +class kt_e { + typedef nlo::lorentzvector<double> _Lv; + +public: + // do the clustering and return with the momenta of the jets + const nlo::bounded_vector<_Lv> &operator()(const nlo::event_hhc &, double); + +private: + // private data members + nlo::bounded_vector<_Lv> _M_p; + nlo::bounded_vector<_Lv> _M_pj; + + // private members + double _M_pair(int, int); + void _M_merge(int, int); +}; + +#endif diff --git a/v2.6/generators/nlojet++/interface/include/fnlo_int_nlojet/pdf-hhc-dummy.h b/v2.6/generators/nlojet++/interface/include/fnlo_int_nlojet/pdf-hhc-dummy.h new file mode 100644 index 0000000000000000000000000000000000000000..e052ff84bfb5f3b5afd82da3de5e16779ddf89fc --- /dev/null +++ b/v2.6/generators/nlojet++/interface/include/fnlo_int_nlojet/pdf-hhc-dummy.h @@ -0,0 +1,32 @@ +#ifndef __pdf_hhc_h__ +#define __pdf_hhc_h__ 1 + +#include <algorithm> +#include <bits/hhc-process.h> +#include <stdio.h> + +class pdf_hhc_dummy : public nlo::pdf_and_coupling_hhc { +public: + // constructor + pdf_hhc_dummy(unsigned int mem = 0) { ; } + + // strong coupling + double alpha_qcd(unsigned int nf, double mr2) { return 1.0; } + + // parton in lepton distribution function + void hadronA(double x, double Q2, unsigned int, unsigned int, double *f) { + printf("pdf_hhc_dummy::hadronA : PDF in dummy should never be called.\n"); + exit(1); + } + + // the parton in the hadron distribution function + void hadronB(double x, double Q2, unsigned int, unsigned int, double *f) { + printf("pdf_hhc_dummy::hadronB : PDF in dummy should never be called.\n"); + exit(1); + } + + nlo::weight_hhc pdf(double x1, double x2, double mf2, unsigned int nu, + unsigned int nd); +}; + +#endif diff --git a/v2.6/generators/nlojet++/interface/jetalgos/Makefile.am b/v2.6/generators/nlojet++/interface/jetalgos/Makefile.am new file mode 100644 index 0000000000000000000000000000000000000000..aa82d3655753ee4e65123d4cf0b0226c37a58944 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/jetalgos/Makefile.am @@ -0,0 +1,76 @@ +# -*- Automake -*- +# ----------------------------------------------------------------------------- +# +# K. Rabbertz, 19.05.2014 +# +# fastNLO interface library with jet algos for NLOJet++ +# +# ----------------------------------------------------------------------------- +# Use GNU standards +AUTOMAKE_OPTIONS = gnu + +# +# Targets +# +# fastNLO interface library with the jet algos for NLOJet++ +pkglib_LTLIBRARIES = libjetalgos.la + +# +# Sources +# +# All source files which go into the targets (and have to be distributed) +# Common sources +AM_SOURCES = +# Individual sources +libjetalgos_la_SOURCES = cone-e.cc cone-et.cc kt-e.cc $(AM_SOURCES) +# With FastJet +if HAVE_FASTJET + libjetalgos_la_SOURCES += fj-jets.cc fastjet-jets.cc +endif + +# +# Preprocessor flags +# +# All targets +# AM_CPPFLAGS = + +# +# C++ compiler flags +# +# top_srcdir for direct compilation before install; pkgincludedir for after install +# All targets +AM_CXXFLAGS = -g -O2 -Wall +AM_CXXFLAGS += -I$(srcdir)/../include -I$(top_builddir)/../include -I$(top_srcdir)/../include +AM_CXXFLAGS += -I${NLOJETINCLUDEPATH} `${FNLOTOOLKITBINPATH}/fnlo-tk-config --cppflags` +# Debug flags +# AM_CXXFLAGS = -g -ftrapping-math -fsignaling-nans -O0 -Wall -I${NLOJETINCLUDEPATH} `${FNLOTOOLKITBINPATH}/fnlo-tk-config --cppflags` -I$(srcdir)/../include -I$(top_builddir)/../include -I$(top_srcdir)/../include +# With FastJet +if HAVE_FASTJETCONFIG + AM_CXXFLAGS += `${FASTJETBINPATH}/fastjet-config --plugins --cxxflags` +else +if HAVE_FASTJET + AM_CXXFLAGS += -I${FASTJETINCLUDEPATH} +endif +endif + +# +# Linker flags +# top_builddir for distcheck; top_srcdir for direct linking before install; pkglibdir for after install +# +# All targets +AM_LDFLAGS = +if HAVE_FASTJETCONFIG + AM_LDFLAGS += `${FASTJETBINPATH}/fastjet-config --libs --plugins` +else +if HAVE_FASTJET + AM_LDFLAGS += -L${FASTJETLIBPATH} -lfastjet -lSISConePlugin -lsiscone -lsiscone_spherical -lCDFConesPlugin -lPxConePlugin -lD0RunIIConePlugin -lNestedDefsPlugin -lTrackJetPlugin -lATLASConePlugin -lCMSIterativeConePlugin -lEECambridgePlugin -lJadePlugin +endif +endif + +# Files that are required to build the project but that can be +# recreated IF the necessary autotools etc. are available by: +# "autoreconf -i; ./configure" +# Use "make maintainer-clean" (on a build machine) before svn commits, +# but not for distribution +MAINTAINERCLEANFILES = .deps .obj .libs *.la \ + Makefile.in Makefile.gen Makefile diff --git a/v2.6/generators/nlojet++/interface/jetalgos/cone-e.cc b/v2.6/generators/nlojet++/interface/jetalgos/cone-e.cc new file mode 100644 index 0000000000000000000000000000000000000000..77936b62f199fb87c46dd4ec4d7dcb580e0fa9c4 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/jetalgos/cone-e.cc @@ -0,0 +1,119 @@ +#include "fnlo_int_nlojet/cone-e.h" +#include <cmath> + +using namespace nlo; + +const bounded_vector<lorentzvector<double> > &cone_e:: +operator()(const event_hhc &ev, double jetsize) { + int merge = 0, nj = 0, np = 0, nt = ev.upper(); + double dist; + + //----- initialize the arrays ----- + _M_pj.resize(1, 0); + _M_p.resize(1, nt); + _M_ax.resize(1, 1); + + for (int ip = 1; ip <= nt; ip++) { + if (ev[ip].perp2() > 1.0e-12) + _M_p[++np] = ev[ip]; + // const double px = ev[ip].X(); + // const double py = ev[ip].Y(); + // const double pz = ev[ip].Z(); + // const double E = ev[ip].T(); + // cout << "**************************\n"; + // cout << "Input objects: ip, px, py, pz, E, np\n"; + // printf("%5u %15.8f %15.8f %15.8f %15.8f %8u\n", + // ip, px, py, pz, E, nt); + // cout << "**************************\n"; + } + + nj = np; + for (int i = 1; i <= np; i++) { + for (int j = i + 1; j <= np; j++) { + if (merge == 0 && (dist = _M_pair(i, j, jetsize)) < 1.0) { + _M_merge(i, j); // i<j Run II E-scheme + merge = 1; + nj--; + if (j != np) + _M_p[j] = _M_p[np]; + } + } + } + + // copy merged particles to jet array + for (int i = 1; i <= nj; i++) { + _M_pj.push_back(_M_p[i]); + } + + return _M_pj; +} + +double cone_e::_M_pair(int i, int j, double rcone) { + static const double pi = 3.14159265358979323846; + static const double twopi = 6.28318530717958647692; + // static const double rcone = 0.7; + static const double rsep = 2.0; + + // - check if distance between both particles is < R_sep*R_cone) + int k; + bool beammerge = false; + double ei = _M_p[i].T(); + double ej = _M_p[j].T(); + double et2i = _M_p[i].perp2(); + double et2j = _M_p[j].perp2(); + double dist = 0.; + double distx = 99.9; + if (et2i / ei / ei < 1.e-24 && et2j / ej / ej < 1.e-24) { + // merge collinear particles in beam direction if both +z or -z + if (_M_p[i].Z() * _M_p[j].Z() > 0.) { + dist = 0.; + beammerge = true; + } else { + dist = 1.e12; + } + } else if (et2i / ei / ei < 1.e-24 || et2j / ej / ej < 1.e-24) { + // do not merge if only one particle in beam direction + dist = 1.e12; + } else { + double dy = _M_p[i].rapidity() - _M_p[j].rapidity(); + double dphi = _M_p[i].phi() - _M_p[j].phi(); + + if (dphi >= pi) + dphi = fmod(pi + dphi, twopi) - pi; + else if (dphi < -pi) + dphi = -fmod(pi - dphi, twopi) + pi; + + dist = sqrt(dy * dy + dphi * dphi); + } + + if (dist < (rcone * rsep)) { + double pti = _M_p[i].perp(), ptj = _M_p[j].perp(); + if (pti < ptj) { + k = i; + } else { + k = j; + } + + // compute potential jet axis + _M_ax[1] = _M_p[i] + _M_p[j]; + + // if two collinear beam particles are merged, set distx to zero + if (beammerge) { + distx = 0.; + // check only distance of lower pT particle to jet axis + // (higher pT particle always has smaller distance!) + } else { + double dyx = _M_p[k].rapidity() - _M_ax[1].rapidity(); + double dphix = _M_p[k].phi() - _M_ax[1].phi(); + + if (dphix >= pi) + dphix = fmod(pi + dphix, twopi) - pi; + else if (dphix < -pi) + dphix = -fmod(pi - dphix, twopi) + pi; + + distx = sqrt(dyx * dyx + dphix * dphix); + } + } + + return (distx / rcone); +} diff --git a/v2.6/generators/nlojet++/interface/jetalgos/cone-et.cc b/v2.6/generators/nlojet++/interface/jetalgos/cone-et.cc new file mode 100644 index 0000000000000000000000000000000000000000..69c40b7d6cb3c350cc53b318159335960daf686f --- /dev/null +++ b/v2.6/generators/nlojet++/interface/jetalgos/cone-et.cc @@ -0,0 +1,98 @@ +#include "fnlo_int_nlojet/cone-et.h" +#include <cmath> + +using namespace nlo; + +const bounded_vector<lorentzvector<double> > &cone_et:: +operator()(const event_hhc &ev, double jetsize) { + int merge = 0, nj = 0, np = 0, nt = ev.upper(); + double dist; + + //----- initialize the arrays ----- + _M_pj.resize(1, 0); + _M_p.resize(1, nt); + for (int ip = 1; ip <= nt; ip++) + if (ev[ip].perp2() > 1.0e-12) + _M_p[++np] = ev[ip]; + + nj = np; + for (int i = 1; i <= np; i++) { + for (int j = i + 1; j <= np; j++) { + if (merge == 0 && (dist = _M_pair(i, j)) < jetsize) { + _M_merge_Et(i, j); // i<j + merge = 1; + nj--; + if (j != np) + _M_p[j] = _M_p[np]; + // if (dist > 0.7) cout<<" MW: cone dist= "<<dist<<endl; + } + } + } + + // copy merged particles to jet array + for (int i = 1; i <= nj; i++) { + _M_pj.push_back(_M_p[i]); + } + + return _M_pj; +} + +double cone_et::_M_pair(int i, int j) { + static const double pi = 3.14159265358979323846; + static const double twopi = 6.28318530717958647692; + static const double rsep = 2.0; + + double pti = _M_p[i].perp(), ptj = _M_p[j].perp(); + double pt = (pti > ptj ? pti : ptj); + double r0 = (pti + ptj) / pt; + double r1 = (rsep < r0 ? rsep : r0); + + double deta = _M_p[i].prapidity() - _M_p[j].prapidity(); + double dphi = _M_p[i].phi() - _M_p[j].phi(); + if (dphi >= pi) + dphi = fmod(pi + dphi, twopi) - pi; + else if (dphi < -pi) + dphi = -fmod(pi - dphi, twopi) + pi; + + double r = sqrt(deta * deta + dphi * dphi); + + // if (r < 1 && r/r1 > 0.7) { + // cout<<" MW: r/r1= "<<r<<" "<<r/r1<<endl; + // cout<<" MW ------ p "<<_M_p[1]<<endl; + //} + + return (r / r1); +} + +void cone_et::_M_merge_Et(int i, int j) { + static const double pi = 3.14159265358979323846; + static const double twopi = 6.28318530717958647692; + + double pt1 = _M_p[i].perp(), pt2 = _M_p[j].perp(); + double eta1 = _M_p[i].prapidity(), eta2 = _M_p[j].prapidity(); + double phi1 = _M_p[i].phi(), phi2 = _M_p[j].phi(); + double dphi = phi1 - phi2; + + if (dphi >= pi) + phi1 = phi1 - twopi; + if (-dphi >= pi) + phi2 = phi2 - twopi; + + double pts = pt1 + pt2; + double etas = 0.0; + double phis = 0.0; + if (pts > 0.0000000000001) { + etas = (eta1 * pt1 + eta2 * pt2) / pts; + phis = (phi1 * pt1 + phi2 * pt2) / pts; + } else { + etas = 0.0; + phis = 0.0; + } + + double px = pts * std::cos(phis); + double py = pts * std::sin(phis); + double pz = pts * std::sinh(etas); + double ee = pts * std::cosh(etas); + // MW: fill new result in first vector + _M_p[i] = _Lv(px, py, pz, ee); +} diff --git a/v2.6/generators/nlojet++/interface/jetalgos/fastjet-jets.cc b/v2.6/generators/nlojet++/interface/jetalgos/fastjet-jets.cc new file mode 100644 index 0000000000000000000000000000000000000000..ff9cb9167502b02684d18208796ffff373faffd3 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/jetalgos/fastjet-jets.cc @@ -0,0 +1,150 @@ +#include "fnlo_int_nlojet/fastjet-jets.h" +#include "fastnlotk/speaker.h" +#include "fastjet/ClusterSequence.hh" + +#include "fastjet/config.h" +#ifdef FASTJET_ENABLE_PLUGIN_CDFCONES +#include "fastjet/CDFMidPointPlugin.hh" +#endif +#ifdef FASTJET_ENABLE_PLUGIN_D0RUNIICONE +#include "fastjet/D0RunIIConePlugin.hh" +#endif +#ifdef FASTJET_ENABLE_PLUGIN_SISCONE +#include "fastjet/SISConePlugin.hh" +#endif + +#include <cstdio> +#include <iostream> + +using namespace std; +using namespace nlo; + +fastjet_jets::fastjet_jets() : jet_def(NULL), plugin(NULL) { + _M_pj.resize(1, 0); // this defines an index offset! +} + +fastjet_jets::fastjet_jets(const JetAlgorithm jetalgo, const double jetsize, + const double overlapthreshold) + : jet_def(NULL), plugin(NULL) { + setup(jetalgo, jetsize, overlapthreshold); +} + +fastjet_jets::~fastjet_jets() { reset(); } + +void fastjet_jets::reset() { + if (jet_def) + delete jet_def; + jet_def = NULL; + + if (plugin) + delete plugin; + plugin = NULL; +} + +void fastjet_jets::setup(const JetAlgorithm jetalgo, const double jetsize, + const double overlapthreshold) { + reset(); + //----- select fastjet jet algorithm ----- + switch (jetalgo) { + case fastjet_jets::KT: + case fastjet_jets::CA: + case fastjet_jets::antiKT: { + // fastjet clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT + fastjet::Strategy strategy = fastjet::Best; + fastjet::JetAlgorithm JetAlgo = static_cast<fastjet::JetAlgorithm>(jetalgo); + jet_def = new fastjet::JetDefinition(JetAlgo, jetsize, strategy); + } break; + + case fastjet_jets::SISCone: +#ifdef FASTJET_ENABLE_PLUGIN_SISCONE + plugin = new fastjet::SISConePlugin(jetsize, overlapthreshold); + jet_def = new fastjet::JetDefinition(plugin); +#endif + break; + + case fastjet_jets::CDFMidPointCone: +#ifdef FASTJET_ENABLE_PLUGIN_CDFCONES + plugin = new fastjet::CDFMidPointPlugin(jetsize, overlapthreshold); + jet_def = new fastjet::JetDefinition(plugin); +#endif + break; + + case fastjet_jets::D0RunIICone: +// allocate a new plugin for D0RunIICone +#ifdef FASTJET_ENABLE_PLUGIN_D0RUNIICONE + double min_jet_Et = 6.0; + plugin = + new fastjet::D0RunIIConePlugin(jetsize, min_jet_Et, overlapthreshold); + jet_def = new fastjet::JetDefinition(plugin); +#endif + break; + } + if (jet_def == NULL) { + cerr << "fastjet-jets.cc: Selected jet algorithm undefined: jetalgo = " + << jetalgo << endl; + cerr << "fastjet-jets.cc: Aborted!" << endl; + exit(1); + } +} + +const bounded_vector<lorentzvector<double> > &fastjet_jets:: +operator()(const event_hhc &ev) { + + //----- minimal pt to be kept in jet results ----- + double ptmin = 1.; + + //----- fill input objects from NLOJet++ event ----- + if (say::debug.GetSpeak()) { + say::debug["fastjet-jets"] << "**************************\n"; + say::debug["fastjet-jets"] << "Input objects: ip, px, py, pz, E, np\n"; + say::debug["fastjet-jets"] << "--------------------------\n"; + } + int np = ev.upper(); + input_objects.clear(); + input_objects.reserve(np); + for (int ip = 1; ip <= np; ip++) { + const double px = ev[ip].X(); + const double py = ev[ip].Y(); + const double pz = ev[ip].Z(); + const double E = ev[ip].T(); + input_objects.push_back(fastjet::PseudoJet(px, py, pz, E)); + if (say::debug.GetSpeak()) { + printf(" # DEBUG. [fastjet-jets] %5u %15.8f %15.8f %15.8f %15.8f %8u\n", ip, px, py, pz, E, np); + } + } + say::debug["fastjet-jets"] << "**************************\n"; + + //----- run the jet clustering with the above jet definition ----- + fastjet::ClusterSequence clust_seq(input_objects, *jet_def); + + //----- get the resulting jets imposing a minimum pt ----- + output_jets = sorted_by_pt(clust_seq.inclusive_jets(ptmin)); + + //----- fill output jets from NLOJet++ event ----- + if (say::debug.GetSpeak()) { + say::debug["fastjet-jets"] << "**************************\n"; + say::debug["fastjet-jets"] << "Jet algorithm: " << jet_def->description() + << endl; + say::debug["fastjet-jets"] << "**************************\n"; + say::debug["fastjet-jets"] + << "Output jets (pT > 1 GeV): ij, px, py, pz, E, nj\n"; + say::debug["fastjet-jets"] << "--------------------------\n"; + } + unsigned int nj = output_jets.size(); + _M_pj.clear(); + _M_pj.reserve(nj); + for (unsigned int ij = 0; ij < nj; ij++) { + const double px = output_jets[ij].px(); + const double py = output_jets[ij].py(); + const double pz = output_jets[ij].pz(); + const double E = output_jets[ij].E(); + _M_pj.push_back(_Lv(px, py, pz, E)); + if (say::debug.GetSpeak()) { + printf(" # DEBUG. [fastjet-jets] %5u %15.8f %15.8f %15.8f %15.8f %8u\n", ij + 1, px, py, pz, E, + nj); + } + } + say::debug["fastjet-jets"] << "**************************\n"; + + return _M_pj; +} diff --git a/v2.6/generators/nlojet++/interface/jetalgos/fj-jets.cc b/v2.6/generators/nlojet++/interface/jetalgos/fj-jets.cc new file mode 100644 index 0000000000000000000000000000000000000000..e56003aba0cc70c54a65a11dd2d55d0c7f4c03a6 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/jetalgos/fj-jets.cc @@ -0,0 +1,122 @@ +#include "fnlo_int_nlojet/fj-jets.h" +#include "fastnlotk/speaker.h" +#include "fastjet/PseudoJet.hh" +#include "fastjet/ClusterSequence.hh" +#include "fastjet/JetDefinition.hh" +#include "fastjet/CDFMidPointPlugin.hh" +#include "fastjet/D0RunIIConePlugin.hh" +#include "fastjet/SISConePlugin.hh" +#include <cstdio> +#include <iostream> + +using namespace std; +using namespace nlo; + +const bounded_vector<lorentzvector<double> > &fj_jets:: +operator()(const event_hhc &ev, int jetalgo, double jetsize, + double overlapthreshold) { + + //----- initialize output array ----- + _M_pj.resize(1, 0); + + //----- initialize fastjet pseudojets ----- + vector<fastjet::PseudoJet> input_objects; + vector<fastjet::PseudoJet> output_jets; + + //----- create null pointers to yet unfilled JetDefinition class and plugin + //----- + fastjet::JetDefinition *jet_def = NULL; + fastjet::JetDefinition::Plugin *plugin = NULL; + + //----- minimal pt to be kept in jet results ----- + double ptmin = 1.; + + //----- fill input objects from NLOJet++ event ----- + if (say::debug.GetSpeak()) { + say::debug["fj-jets"] << "**************************\n"; + say::debug["fj-jets"] << "Input objects: ip, px, py, pz, E, np\n"; + say::debug["fj-jets"] << "--------------------------\n"; + } + int np = ev.upper(); + for (int ip = 1; ip <= np; ip++) { + const double px = ev[ip].X(); + const double py = ev[ip].Y(); + const double pz = ev[ip].Z(); + const double E = ev[ip].T(); + input_objects.push_back(fastjet::PseudoJet(px, py, pz, E)); + if (say::debug.GetSpeak()) { + printf(" # DEBUG. [fj-jets] %5u %15.8f %15.8f %15.8f %15.8f %8u\n", ip, px, py, pz, E, np); + } + } + say::debug["fj-jets"] << "**************************\n"; + + //----- select fastjet jet algorithm ----- + if (-1 < jetalgo && jetalgo < 3) { + // fastjet clustering jet algos: 0 = kT, 1 = CA, 2 = anti-kT + fastjet::Strategy strategy = fastjet::Best; + fastjet::JetAlgorithm JetAlgo = static_cast<fastjet::JetAlgorithm>(jetalgo); + jet_def = new fastjet::JetDefinition(JetAlgo, jetsize, strategy); + } else if (9 < jetalgo && jetalgo < 13) { + // fastjet cone jet algos: 10 = SISCone, 11 = CDFMidPointCone, 12 = + // D0RunIICone + if (jetalgo == 10) { + // allocate a new plugin for SISCone + plugin = new fastjet::SISConePlugin(jetsize, overlapthreshold); + } else if (jetalgo == 11) { + // allocate a new plugin for CDFMidPointCone + plugin = new fastjet::CDFMidPointPlugin(jetsize, overlapthreshold); + } else if (jetalgo == 12) { + // allocate a new plugin for D0RunIICone + double min_jet_Et = 6.0; + plugin = + new fastjet::D0RunIIConePlugin(jetsize, min_jet_Et, overlapthreshold); + } else { + cerr << "fj-jets.cc: Selected jet algorithm undefined: jetalgo = " + << jetalgo << endl; + cerr << "fj-jets.cc: Aborted!" << endl; + exit(1); + } + // create a jet-definition based on the plugin + jet_def = new fastjet::JetDefinition(plugin); + } + + //----- run the jet clustering with the above jet definition ----- + fastjet::ClusterSequence clust_seq(input_objects, *jet_def); + + //----- get the resulting jets imposing a minimum pt ----- + output_jets = sorted_by_pt(clust_seq.inclusive_jets(ptmin)); + + //----- fill output jets from NLOJet++ event ----- + if (say::debug.GetSpeak()) { + say::debug["fj-jets"] << "**************************\n"; + say::debug["fj-jets"] << "Jet algorithm: " << jet_def->description() + << endl; + say::debug["fj-jets"] << "**************************\n"; + say::debug["fj-jets"] + << "Output jets (pT > 1 GeV): ij, px, py, pz, E, nj\n"; + say::debug["fj-jets"] << "--------------------------\n"; + } + unsigned int nj = output_jets.size(); + for (unsigned int ij = 1; ij <= nj; ij++) { + vector<fastjet::PseudoJet> constituents = + clust_seq.constituents(output_jets[ij - 1]); + const double px = output_jets[ij - 1].px(); + const double py = output_jets[ij - 1].py(); + const double pz = output_jets[ij - 1].pz(); + const double E = output_jets[ij - 1].E(); + _M_pj.push_back(_Lv(px, py, pz, E)); + if (say::debug.GetSpeak()) { + printf(" # DEBUG. [fj-jets] %5u %15.8f %15.8f %15.8f %15.8f %8u\n", ij, px, py, pz, E, nj); + } + } + say::debug["fj-jets"] << "**************************\n"; + + // todo: it is much more efficient to construct plugin and jet definition only + // once per run + if (jet_def) + delete jet_def; + if (plugin) + delete plugin; + + return _M_pj; +} diff --git a/v2.6/generators/nlojet++/interface/jetalgos/kt-e.cc b/v2.6/generators/nlojet++/interface/jetalgos/kt-e.cc new file mode 100644 index 0000000000000000000000000000000000000000..58af737f02e7bfdab1ac5d5d412b6835b62836c6 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/jetalgos/kt-e.cc @@ -0,0 +1,153 @@ +#include "fnlo_int_nlojet/kt-e.h" +#include <cmath> + +using namespace std; +using namespace nlo; + +const bounded_vector<lorentzvector<double> > &kt_e:: +operator()(const event_hhc &ev, double jetsize) { + int imin, jmin, kmin, nt = ev.upper(); + double tmp, pmin, smin, r2 = jetsize * jetsize; + + //----- initialize the arrays ----- + _M_pj.resize(1, 0); + _M_p.resize(1, nt); + + for (int ip = 1; ip <= nt; ip++) { + _M_p[ip] = ev[ip]; + // const double px = ev[ip].X(); + // const double py = ev[ip].Y(); + // const double pz = ev[ip].Z(); + // const double E = ev[ip].T(); + // cout << "**************************\n"; + // cout << "Input objects:\n"; + // printf("%5u %15.8f %15.8f %15.8f %15.8f %8u\n", + // ip, px, py, pz, E, nt); + // cout << "**************************\n"; + } + + unsigned int nj = 1; + for (int n = nt; n > 1; n--) { + //----- find the smallest resolution variables ----- + imin = 1; + jmin = 2; + kmin = 1; + pmin = _M_pair(1, 2); + smin = _M_p[1].perp2(); + // cout << "in pmin " << pmin << "in smin " << smin << endl; + for (int i = 1; i <= n; i++) { + if ((tmp = _M_p[i].perp2()) < smin) { + smin = tmp; + kmin = i; + } + + for (int j = i + 1; j <= n; j++) + if ((tmp = _M_pair(i, j)) < pmin) { + pmin = tmp; + imin = i; + jmin = j; + } + } + // cout << "fin pmin " << pmin << " fin smin " << smin << endl; + // cout << "fin kmin " << kmin << " fin imin " << imin << " fin jmin " << + // jmin << endl; + // cout << "r2 " << r2 << " smin*r2 " << smin*r2 << " pmin " << pmin << + // endl; + //----- do the clustering ----- + if (smin * r2 < pmin) { + _M_pj.push_back(_M_p[kmin]); + nj++; + if (kmin != n) + _M_p[kmin] = _M_p[n]; + } else { + _M_merge(imin, jmin); + if (jmin != n) + _M_p[jmin] = _M_p[n]; + } + } + + //----- add the last (pseudo)particle to the list of jets ----- + _M_pj.push_back(_M_p[1]); + nj++; + + // double Emax1 = 0.; + // double Emax2 = 0.; + // unsigned int iord[] = {0,0,0}; + // for (unsigned int j = 1; j < nj; j++) { + // double E = _M_pj[j].T(); + // if ( E > Emax1 ) { + // Emax2 = Emax1; + // Emax1 = E; + // iord[2] = iord[1]; + // iord[1] = iord[0]; + // iord[0] = j; + // } else if ( E > Emax2 ) { + // Emax2 = E; + // iord[2] = iord[1]; + // iord[1] = j; + // } else { + // iord[2] = j; + // } + // } + // unsigned int jp = 0; + // for (unsigned int j = 1; j < nj; j++) { + // if ( iord[j-1] > 0 ) { + // double px = _M_pj[iord[j-1]].X(); + // double py = _M_pj[iord[j-1]].Y(); + // double pz = _M_pj[iord[j-1]].Z(); + // double E = _M_pj[iord[j-1]].T(); + // double pt = sqrt(px*px + py*py); + // if ( pt >= 1. ) { + // jp++; + // cout << "**************************\n"; + // cout << "Output jets pt >= 1.0: ijet, px, py, pz, E, pt\n"; + // printf("%5u %15.8f %15.8f %15.8f %15.8f %15.8f\n", + // jp, px, py, pz, E, pt); + // cout << "**************************\n"; + // } + // } + // } + + return _M_pj; +} + +double kt_e::_M_pair(int i, int j) { + static const double pi = 3.14159265358979323846; + static const double twopi = 6.28318530717958647692; + + // double et2 = (_M_p[i].perp2() < _M_p[j].perp2() ? _M_p[i].perp2() : + // _M_p[j].perp2()); + double ei = _M_p[i].T(); + double ej = _M_p[j].T(); + double et2i = _M_p[i].perp2(); + double et2j = _M_p[j].perp2(); + double dist = 0.; + if (et2i / ei / ei < 1.e-24 && et2j / ej / ej < 1.e-24) { + // merge collinear particles in beam direction if both +z or -z + if (_M_p[i].Z() * _M_p[j].Z() > 0.) { + dist = 0.; + } else { + dist = 1.e12; + } + } else if (et2i / ei / ei < 1.e-24 || et2j / ej / ej < 1.e-24) { + // do not merge if only one particle in beam direction + dist = 1.e12; + } else { + double et2 = (et2i < et2j ? et2i : et2j); + double dy = _M_p[i].rapidity() - _M_p[j].rapidity(); + double dphi = _M_p[i].phi() - _M_p[j].phi(); + + if (dphi >= pi) + dphi = fmod(pi + dphi, twopi) - pi; + else if (dphi < -pi) + dphi = -fmod(pi - dphi, twopi) + pi; + + dist = et2 * (dy * dy + dphi * dphi); + // cout << "et2: " << et2 << " dy: " << dy << " dphi: " << dphi << endl; + } + + // return et2*(dy*dy+dphi*dphi); + return dist; +} + +void kt_e::_M_merge(int i, int j) { _M_p[i] += _M_p[j]; } diff --git a/v2.6/generators/nlojet++/interface/tools/Makefile.am b/v2.6/generators/nlojet++/interface/tools/Makefile.am new file mode 100644 index 0000000000000000000000000000000000000000..dce785086a6623c6ffabc14705c7ab24ccbc51d0 --- /dev/null +++ b/v2.6/generators/nlojet++/interface/tools/Makefile.am @@ -0,0 +1,55 @@ +# -*- Automake -*- +# ----------------------------------------------------------------------------- +# +# fastNLO toolsfor NLOJet++ +# +# ----------------------------------------------------------------------------- +# Use GNU standards +AUTOMAKE_OPTIONS = gnu + +# +# Targets +# +# fastNLO interface library with the jet algos for NLOJet++ +pkglib_LTLIBRARIES = libnlojetpptools.la + +# +# Sources +# +# All source files which go into the targets (and have to be distributed) +# Common sources +#AM_SOURCES = +# Individual sources +libnlojetpptools_la_SOURCES = pdf-hhc-dummy.cc fnlo_int_hhc_nlojet.cc + +# +# Preprocessor flags +# +# All targets +# AM_CPPFLAGS = + +# +# C++ compiler flags +# +# top_srcdir for direct compilation before install; pkgincludedir for after install +# All targets +AM_CXXFLAGS = -g -O2 -Wall +AM_CXXFLAGS += -I$(srcdir)/../include -I$(top_builddir)/../include -I$(top_srcdir)/../include +AM_CXXFLAGS += -I${NLOJETINCLUDEPATH} `${FNLOTOOLKITBINPATH}/fnlo-tk-config --cppflags` +# Debug flags +# AM_CXXFLAGS = -g -ftrapping-math -fsignaling-nans -O0 -Wall -I${NLOJETINCLUDEPATH} `${FNLOTOOLKITBINPATH}/fnlo-tk-config --cppflags` -I$(srcdir)/../include -I$(top_builddir)/../include -I$(top_srcdir)/../include + +# +# Linker flags +# top_builddir for distcheck; top_srcdir for direct linking before install; pkglibdir for after install +# +# All targets +AM_LDFLAGS = + +# Files that are required to build the project but that can be +# recreated IF the necessary autotools etc. are available by: +# "autoreconf -i; ./configure" +# Use "make maintainer-clean" (on a build machine) before svn commits, +# but not for distribution +MAINTAINERCLEANFILES = .deps .obj .libs *.la \ + Makefile.in Makefile.gen Makefile diff --git a/v2.6/generators/nlojet++/interface/tools/fnlo_int_hhc_nlojet.cc b/v2.6/generators/nlojet++/interface/tools/fnlo_int_hhc_nlojet.cc new file mode 100644 index 0000000000000000000000000000000000000000..8333f678f22898053df0e1016740e61c8a505cff --- /dev/null +++ b/v2.6/generators/nlojet++/interface/tools/fnlo_int_hhc_nlojet.cc @@ -0,0 +1,361 @@ +//! +//! UsefulNlojetTools +//! +//! Collection of useful functions for the fastNLO interface +//! to NLOJET++. +//! +// KR: Drop differentiation in 2jet and 3jet ProcConsts. +// Default is 2jet, set differences for 3jet via steering! + +#include <cstdio> +#include <algorithm> //c++98 +#include <utility> //c++11 +#include "fastnlotk/fastNLOEvent.h" +#include "fastnlotk/fastNLOTableConstants.h" +#include "fastnlotk/speaker.h" +#include "fnlo_int_nlojet/pdf-hhc-dummy.h" +#include <bits/hhc-phasespace.h> +#include <bits/hhc-jetfunc.h> + +using namespace std; +using namespace nlo; + +//----- declaration of the user defined functions ----- +// --- fastNLO v2.2: interface to NLOJet++: read steering file, set LO of +// selected process +void inputfunc(unsigned int &, unsigned int &, unsigned int &); +// --- fastNLO v2.2: interface to NLOJet++: set cms energy and phase space +// generator +void psinput(nlo::phasespace_hhc *, double &); +// --- fastNLO v2.2: interface to NLOJet++: user class +nlo::user_base_hhc *userfunc(); + +namespace UsefulNlojetTools { + /** + namespace UsefulNlojetTools + + Collection of useful functions and constant for the interface + between nlojet++ and fastNLO, if nlojet++ is run in hhc-mode + (i.e. for pp and ppbar collisions). + */ + + //_______________________________________________________________________ + fastNLO::GeneratorConstants GenConsts() { + fastNLO::GeneratorConstants GenConsts; + GenConsts.Name = "NLOJet++_4.1.3"; + GenConsts.UnitsOfCoefficients = 12; + return GenConsts; + } + + //_______________________________________________________________________ + fastNLO::ProcessConstants ProcConsts_HHC() { + fastNLO::ProcessConstants ProcConsts; + ProcConsts.Name = ""; + ProcConsts.References.push_back( + "Z. Nagy, Phys. Rev. Lett. 88 (2002) 122003,"); + ProcConsts.References.push_back("Z. Nagy, Phys. Rev. D 68 (2003) 094002."); + // Default: 2-jet observable, i.e. LO power of alpha_S is 2; set to 3 in + // steering for 3-jet observables! + ProcConsts.LeadingOrder = 2; + // Default: 12 ,i.e. pb; if published differently set in steering explicitly. + // Note: Internally, NLOJet++ always uses pb. + ProcConsts.NPDF = 2; + // KR: Merging q(qbar)g and gq(qbar) subprocesses 5 and 6 into one is + // ONLY correct at the statistical limit of large numbers of such events! + // Effectively, one generated event is reinterpreted as half of a q(qbar)g + // and half + // of a gq(qbar) event such that direct comparisons with reference + // calculations + // are NOT possible any more event-by-event, but only statistically with + // large numbers. + // On the other hand, the gain in table size is only of the order of -15%. + // ==> Therefore: + // New default: NSubProcessesLO always 7! + // Old default: NSubProcessesLO = 6 at LO for 2-jet observable, 7 + // otherwise + // Attention: GetNSubproc(), see below, has to changed accordingly! + // TODO: Search for more elegant solution here ... + ProcConsts.NSubProcessesLO = 7; + ProcConsts.NSubProcessesNLO = 7; + ProcConsts.NSubProcessesNNLO = 7; + ProcConsts.IPDFdef1 = 3; + ProcConsts.IPDFdef2 = 1; + ProcConsts.IPDFdef3LO = 1; + ProcConsts.IPDFdef3NLO = 2; + ProcConsts.IPDFdef3NNLO = 2; + // Default: Half-matrix storage + ProcConsts.NPDFDim = 1; + // To test full-matrix storage uncomment the following line or set NPDFDim in + // steering explicitly! + // ProcConsts.NPDFDim = 2; + ProcConsts.AsymmetricProcesses.push_back(make_pair(5, 6)); + ProcConsts.AsymmetricProcesses.push_back(make_pair(6, 5)); + // + // + return ProcConsts; + } + + //_______________________________________________________________________ + unsigned int GetNj() { + // get order of leading-order + // inputfunc should be defined in header of nlojet-module beforehand. + unsigned int nj = 0, nu = 0, nd = 0; + ::inputfunc(nj, nu, nd); + return nj; + } + + double GetEcms() { + // get center of mass energy + double ecms = 0; + ::psinput(NULL, ecms); + return sqrt(ecms); + } + + //_______________________________________________________________________ + unsigned int GetLoOrder() { return GetNj(); } + + //_______________________________________________________________________ + unsigned int GetOrderOfRun(const basic_string<char> &__file_name) { + // --- determine whether we are running LO or NLO + // and add order of expansion to leading-order . + static int ord = -1; + + if (ord == -1) { + const char *const file = __file_name.c_str(); + if (strstr(file, "born") != NULL) { + // IsNLO = false; + say::info["GetOrderOfRun"] << "This is a LO run." << endl; + ord = GetNj(); + } else if (strstr(file, "nlo") != NULL) { + // IsNLO = true; + say::info["GetOrderOfRun"] << "This is a NLO run." << endl; + ord = GetNj() + 1; + } else if (strlen(file) == 0) { + // Order is wrongly assumed to be initialized already; + say::error["GetOrderOfRun"] << "Order of run not properly initialized." + << endl; + exit(1); + } else { + // No alternatives implemented with NLOJet++ version 4 + say::error["GetOrderOfRun"] + << "This module can only be run at Born level or at NLO!" << endl; + exit(1); + } + say::info["GetOrderOfRun"] + << "Found order of calculation to be: ord = " << ord << endl; + return ord; + } else { + // Return previously initialized value + return ord; + } + } + + //_______________________________________________________________________ + int NlojetToFastnloIDHHC(int id) { + if (id == 1) + return 5; + else if (id == 2) + return 6; + else if (id == 3) + return 1; + else if (id == 4) + return 2; + else if (id == 5) + return 3; + else if (id == 6) + return 4; + else + return id; + } + int FastnloIdToNlojetIdHHC(int id) { + if (id == 1) + return 3; + else if (id == 2) + return 4; + else if (id == 3) + return 5; + else if (id == 4) + return 6; + else if (id == 5) + return 1; + else if (id == 6) + return 2; + else + return id; + } + + //_______________________________________________________________________ + vector<fnloEvent> GetFlexibleScaleNlojetContribHHC(const event_hhc &p, + const amplitude_hhc &) { + static const unsigned int nSubproc = 7; // nlojet must have 7 subprocesses. + static const double dummyMu2 = 91. * 91.; + static pdf_hhc_dummy dummypdf; + + // make events + vector<fnloEvent> ev(nSubproc); + + // fill relevant event quantities + double x1 = p[-1].Z() / p[hadron(-1)].Z(); + double x2 = p[0].Z() / p[hadron(0)].Z(); + for (unsigned int p = 0; p < nSubproc; p++) { + ev[p].SetProcessId(p); + ev[p].SetX1(x1); + ev[p].SetX2(x2); + } + + static const double coef = 389385730.; + // weights + double weights[7][7]; // weights[amp_i][proc] + for (int kk = 0; kk < 7; kk++) + for (unsigned int p = 0; p < nSubproc; p++) + weights[kk][p] = 0; + + // todo: calculate wt and wtorg from 'weights' + nlo::weight_hhc wtorg = amp(dummypdf, dummyMu2, dummyMu2, 1.); + nlo::weight_hhc wt = wtorg; + // - rearrange subprocesses + for (int fid = 0; fid < 7; fid++) { + int nid = FastnloIdToNlojetIdHHC(fid); + wt[fid] = wtorg[nid]; + } + wt *= coef; + + // access perturbative coefficients + nlo::amplitude_hhc::contrib_type itype = amp.contrib(); + nlo::weight_hhc cPDF = dummypdf.pdf(x1, x2, dummyMu2, 2, 3); // 1/x1/x2 + + for (int kk = 0; kk < 7; kk++) { + for (unsigned int fid = 0; fid < nSubproc; fid++) { + int nid = FastnloIdToNlojetIdHHC(fid); + weights[kk][fid] = amp._M_fini.amp[kk][nid] * coef * cPDF[nid]; + } + } + + for (unsigned int p = 0; p < nSubproc; p++) { + // decompose nlojet-event + if (itype == nlo::amplitude_hhc::fini) { + if (amp._M_fini.mode == 0) { // finix1 + ev[p].SetWeight_MuIndependent(weights[0][p]); + ev[p].SetWeight_log_muf(weights[3][p]); + } else if (amp._M_fini.mode == 1) { // finix2 + ev[p].SetWeight_MuIndependent(weights[1][p]); + ev[p].SetWeight_log_muf(weights[4][p]); + } else if (amp._M_fini.mode == 2) { // fini1 + ev[p].SetWeight_MuIndependent(weights[2][p]); + ev[p].SetWeight_log_muf(weights[5][p]); + ev[p].SetWeight_log_mur(weights[6][p]); + } + } else { // no fini contribution + ev[p].AddWeight_MuIndependent(wt[p]); + } + } + + return ev; + } + + // KR: Is it possible to get NSubproc from the Toolkit instead? + // This would allow to read the setting as defined in the steering in + // contrast to this duplication ... + // In addition, this method had set the # of subprocesses for LO 3-jet to 6 + // which was never tried before ... + // ==> Fixed back to 7 now. + // New default: NSubProcesses always 7! + //_______________________________________________________________________ + unsigned int GetNSubproc() { + static int nSubproc = 7; + // static int nSubproc = -1; + // if ( nSubproc == -1 ) { + // // Order should have already been initialized --> redemand with empty + // string + // // If order not yet determined --> stop with error message in + // GetOrderOfRun + // int nord = GetOrderOfRun(""); + // int loord = GetLoOrder(); + // if ( loord == 2 && nord == loord ) nSubproc = 6 ; + // else nSubproc = 7; + // } + return nSubproc; + } + + //_______________________________________________________________________ + vector<fnloEvent> GetFixedScaleNlojetContribHHC(const event_hhc &p, + const amplitude_hhc &, + double mu) { + const int nSubproc = GetNSubproc(); + const double Mu2 = mu * mu; + static pdf_hhc_dummy dummypdf; + + // make events + vector<fnloEvent> ev(nSubproc); + + // fill relevant event quantities + double x1 = p[-1].Z() / p[hadron(-1)].Z(); + double x2 = p[0].Z() / p[hadron(0)].Z(); + for (int p = 0; p < nSubproc; p++) { + ev[p].SetProcessId(p); + ev[p].SetX1(x1); + ev[p].SetX2(x2); + } + + // weights + // access perturbative coefficients + static const double coef = 389385730.; + + // todo: calculate wt and wtorg from 'weights' + nlo::weight_hhc wtorg = amp(dummypdf, Mu2, Mu2, 1.); + nlo::weight_hhc wt = wtorg; + // - rearrange subprocesses + for (int fid = 0; fid < 7; fid++) { + int nid = FastnloIdToNlojetIdHHC(fid); + // KR: Check on isnan|isinf now also for 'faster' fill code in toolkit + // Commented out here. + // if (std::isfinite(wtorg[nid])) { + wt[fid] = wtorg[nid]; + // } else { + // // wt[fid] = 0.; + // wt[fid] = wtorg[nid]; + // if (std::isnan(wtorg[nid])) { + // say::error["GetFixedScaleNlojetContribHHC"]<<"Weight wtorg for nid = " << nid << " is 'nan'!"<<endl; + // } else if (std::isinf(wtorg[nid])) { + // say::error["GetFixedScaleNlojetContribHHC"]<<"Weight wtorg for nid = " << nid << " is 'inf'!"<<endl; + // } else { + // say::error["GetFixedScaleNlojetContribHHC"]<<"Weight wtorg for nid = " << nid << " is non-finite!"<<endl; + // } + // } + } + wt *= coef; + + // KR, 23.01.2015: This has been moved to the Toolkit part and will disappear + // here + // if(x2>x1){ + // swap subprocesses 6,7 + // swap(wt[5],wt[6]); + // } + + // KR, 23.01.2015: This is part of the NLOJet++ process definitions (for + // fixed-scale tables) and remains in the interface + if (nSubproc == 6) { + wt[5] = (wt[5] + wt[6]) / 2; + wt[6] = wt[5]; + } + + for (int p = 0; p < nSubproc; p++) { + ev[p].AddWeight_MuIndependent(wt[p]); + } + return ev; + } + + //_______________________________________________________________________ + vector<vector<fnloEvent> > + GetFixedScaleNlojetContribHHC(const event_hhc &p, const amplitude_hhc &, + double mu, const vector<double> &scalevar) { + // return contributions for each scale variation + // return value can directly passed to fastNLOCreate + vector<vector<fnloEvent> > ctrbs(scalevar.size()); + for (unsigned int is = 0; is < scalevar.size(); is++) { + double smu = mu * scalevar[is]; + ctrbs[is] = GetFixedScaleNlojetContribHHC(p, amp, smu); + } + return ctrbs; + } +} diff --git a/v2.6/generators/nlojet++/interface/tools/pdf-hhc-dummy.cc b/v2.6/generators/nlojet++/interface/tools/pdf-hhc-dummy.cc new file mode 100644 index 0000000000000000000000000000000000000000..09885ca4dbda2566ecac66a5c985eeac9962f20d --- /dev/null +++ b/v2.6/generators/nlojet++/interface/tools/pdf-hhc-dummy.cc @@ -0,0 +1,22 @@ +#include "fnlo_int_nlojet/pdf-hhc-dummy.h" + +using namespace nlo; +using namespace std; + +weight_hhc pdf_hhc_dummy::pdf(double x1, double x2, double mf2, unsigned int nu, + unsigned int nd) { + weight_hhc retval; + + retval[0] = 1. / x1 / x2; + retval[1] = 1. / x1 / x2; + retval[2] = 1. / x1 / x2; + retval[3] = 1. / x1 / x2; + retval[4] = 1. / x1 / x2; + retval[5] = 1. / x1 / x2; + retval[6] = 1. / x1 / x2; + + if (std::isnan(retval[0])) { + cout << "fastNLO.pdf_hhc_dummy: WARNING! NaN for pdf = 1/x1/x2 with x1 = " << x1 << ", x2 = " << x2 << endl; + } + return retval; +} diff --git a/v2.6/generators/nlojet++/m4.tar.gz b/v2.6/generators/nlojet++/m4.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..35f8f6572c393b50856ef331790d3d8aa9ce61a3 Binary files /dev/null and b/v2.6/generators/nlojet++/m4.tar.gz differ diff --git a/v2.6/generators/nlojet++/m4/ax_check_zlib.m4 b/v2.6/generators/nlojet++/m4/ax_check_zlib.m4 new file mode 100644 index 0000000000000000000000000000000000000000..1a168430485fe1e8cf9e7c500ee95307df54fac1 --- /dev/null +++ b/v2.6/generators/nlojet++/m4/ax_check_zlib.m4 @@ -0,0 +1,141 @@ +# =========================================================================== +# https://www.gnu.org/software/autoconf-archive/ax_check_zlib.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_CHECK_ZLIB([action-if-found], [action-if-not-found]) +# +# DESCRIPTION +# +# This macro searches for an installed zlib library. If nothing was +# specified when calling configure, it searches first in /usr/local and +# then in /usr, /opt/local and /sw. If the --with-zlib=DIR is specified, +# it will try to find it in DIR/include/zlib.h and DIR/lib/libz.a. If +# --without-zlib is specified, the library is not searched at all. +# +# If either the header file (zlib.h) or the library (libz) is not found, +# shell commands 'action-if-not-found' is run. If 'action-if-not-found' is +# not specified, the configuration exits on error, asking for a valid zlib +# installation directory or --without-zlib. +# +# If both header file and library are found, shell commands +# 'action-if-found' is run. If 'action-if-found' is not specified, the +# default action appends '-I${ZLIB_HOME}/include' to CPFLAGS, appends +# '-L$ZLIB_HOME}/lib' to LDFLAGS, prepends '-lz' to LIBS, and calls +# AC_DEFINE(HAVE_LIBZ). You should use autoheader to include a definition +# for this symbol in a config.h file. Sample usage in a C/C++ source is as +# follows: +# +# #ifdef HAVE_LIBZ +# #include <zlib.h> +# #endif /* HAVE_LIBZ */ +# +# LICENSE +# +# Copyright (c) 2008 Loic Dachary <loic@senga.org> +# Copyright (c) 2010 Bastien Chevreux <bach@chevreux.org> +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 2 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see <https://www.gnu.org/licenses/>. +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Archive. When you make and distribute a +# modified version of the Autoconf Macro, you may extend this special +# exception to the GPL to apply to your modified version as well. + +#serial 16 + +AU_ALIAS([CHECK_ZLIB], [AX_CHECK_ZLIB]) +AC_DEFUN([AX_CHECK_ZLIB], +# +# Handle user hints +# +[AC_MSG_CHECKING(if zlib is wanted) +zlib_places="/usr/local /usr /opt/local /sw" +AC_ARG_WITH([zlib], +[ --with-zlib=DIR root directory path of zlib installation @<:@defaults to + /usr/local or /usr if not found in /usr/local@:>@ + --without-zlib to disable zlib usage completely], +[if test "$withval" != no ; then + AC_MSG_RESULT(yes) + if test -d "$withval" + then + zlib_places="$withval $zlib_places" + else + AC_MSG_WARN([Sorry, $withval does not exist, checking usual places]) + fi +else + zlib_places= + AC_MSG_RESULT(no) +fi], +[AC_MSG_RESULT(yes)]) + +# +# Locate zlib, if wanted +# +if test -n "${zlib_places}" +then + # check the user supplied or any other more or less 'standard' place: + # Most UNIX systems : /usr/local and /usr + # MacPorts / Fink on OSX : /opt/local respectively /sw + for ZLIB_HOME in ${zlib_places} ; do + if test -f "${ZLIB_HOME}/include/zlib.h"; then break; fi + ZLIB_HOME="" + done + + ZLIB_OLD_LDFLAGS=$LDFLAGS + ZLIB_OLD_CPPFLAGS=$CPPFLAGS + if test -n "${ZLIB_HOME}"; then + LDFLAGS="$LDFLAGS -L${ZLIB_HOME}/lib" + CPPFLAGS="$CPPFLAGS -I${ZLIB_HOME}/include" + fi + AC_LANG_PUSH([C]) + AC_CHECK_LIB([z], [inflateEnd], [zlib_cv_libz=yes], [zlib_cv_libz=no]) + AC_CHECK_HEADER([zlib.h], [zlib_cv_zlib_h=yes], [zlib_cv_zlib_h=no]) + AC_LANG_POP([C]) + if test "$zlib_cv_libz" = "yes" && test "$zlib_cv_zlib_h" = "yes" + then + # + # If both library and header were found, action-if-found + # + m4_ifblank([$1],[ + CPPFLAGS="$CPPFLAGS -I${ZLIB_HOME}/include" + LDFLAGS="$LDFLAGS -L${ZLIB_HOME}/lib" + LIBS="-lz $LIBS" + AC_DEFINE([HAVE_LIBZ], [1], + [Define to 1 if you have `z' library (-lz)]) + ],[ + # Restore variables + LDFLAGS="$ZLIB_OLD_LDFLAGS" + CPPFLAGS="$ZLIB_OLD_CPPFLAGS" + $1 + ]) + else + # + # If either header or library was not found, action-if-not-found + # + m4_default([$2],[ + AC_MSG_ERROR([either specify a valid zlib installation with --with-zlib=DIR or disable zlib usage with --without-zlib]) + ]) + fi +fi +]) diff --git a/v2.6/generators/nlojet++/m4/ax_cxx_compile_stdcxx.m4 b/v2.6/generators/nlojet++/m4/ax_cxx_compile_stdcxx.m4 new file mode 100644 index 0000000000000000000000000000000000000000..9413da624d2545123501b7788b7ac6d96fd322e8 --- /dev/null +++ b/v2.6/generators/nlojet++/m4/ax_cxx_compile_stdcxx.m4 @@ -0,0 +1,962 @@ +# =========================================================================== +# https://www.gnu.org/software/autoconf-archive/ax_cxx_compile_stdcxx.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_CXX_COMPILE_STDCXX(VERSION, [ext|noext], [mandatory|optional]) +# +# DESCRIPTION +# +# Check for baseline language coverage in the compiler for the specified +# version of the C++ standard. If necessary, add switches to CXX and +# CXXCPP to enable support. VERSION may be '11' (for the C++11 standard) +# or '14' (for the C++14 standard). +# +# The second argument, if specified, indicates whether you insist on an +# extended mode (e.g. -std=gnu++11) or a strict conformance mode (e.g. +# -std=c++11). If neither is specified, you get whatever works, with +# preference for no added switch, and then for an extended mode. +# +# The third argument, if specified 'mandatory' or if left unspecified, +# indicates that baseline support for the specified C++ standard is +# required and that the macro should error out if no mode with that +# support is found. If specified 'optional', then configuration proceeds +# regardless, after defining HAVE_CXX${VERSION} if and only if a +# supporting mode is found. +# +# LICENSE +# +# Copyright (c) 2008 Benjamin Kosnik <bkoz@redhat.com> +# Copyright (c) 2012 Zack Weinberg <zackw@panix.com> +# Copyright (c) 2013 Roy Stogner <roystgnr@ices.utexas.edu> +# Copyright (c) 2014, 2015 Google Inc.; contributed by Alexey Sokolov <sokolov@google.com> +# Copyright (c) 2015 Paul Norman <penorman@mac.com> +# Copyright (c) 2015 Moritz Klammler <moritz@klammler.eu> +# Copyright (c) 2016, 2018 Krzesimir Nowak <qdlacz@gmail.com> +# Copyright (c) 2019 Enji Cooper <yaneurabeya@gmail.com> +# Copyright (c) 2020 Jason Merrill <jason@redhat.com> +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 12 + +dnl This macro is based on the code from the AX_CXX_COMPILE_STDCXX_11 macro +dnl (serial version number 13). + +AC_DEFUN([AX_CXX_COMPILE_STDCXX], [dnl + m4_if([$1], [11], [ax_cxx_compile_alternatives="11 0x"], + [$1], [14], [ax_cxx_compile_alternatives="14 1y"], + [$1], [17], [ax_cxx_compile_alternatives="17 1z"], + [m4_fatal([invalid first argument `$1' to AX_CXX_COMPILE_STDCXX])])dnl + m4_if([$2], [], [], + [$2], [ext], [], + [$2], [noext], [], + [m4_fatal([invalid second argument `$2' to AX_CXX_COMPILE_STDCXX])])dnl + m4_if([$3], [], [ax_cxx_compile_cxx$1_required=true], + [$3], [mandatory], [ax_cxx_compile_cxx$1_required=true], + [$3], [optional], [ax_cxx_compile_cxx$1_required=false], + [m4_fatal([invalid third argument `$3' to AX_CXX_COMPILE_STDCXX])]) + AC_LANG_PUSH([C++])dnl + ac_success=no + + m4_if([$2], [], [dnl + AC_CACHE_CHECK(whether $CXX supports C++$1 features by default, + ax_cv_cxx_compile_cxx$1, + [AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])], + [ax_cv_cxx_compile_cxx$1=yes], + [ax_cv_cxx_compile_cxx$1=no])]) + if test x$ax_cv_cxx_compile_cxx$1 = xyes; then + ac_success=yes + fi]) + + m4_if([$2], [noext], [], [dnl + if test x$ac_success = xno; then + for alternative in ${ax_cxx_compile_alternatives}; do + switch="-std=gnu++${alternative}" + cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx$1_$switch]) + AC_CACHE_CHECK(whether $CXX supports C++$1 features with $switch, + $cachevar, + [ac_save_CXX="$CXX" + CXX="$CXX $switch" + AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])], + [eval $cachevar=yes], + [eval $cachevar=no]) + CXX="$ac_save_CXX"]) + if eval test x\$$cachevar = xyes; then + CXX="$CXX $switch" + if test -n "$CXXCPP" ; then + CXXCPP="$CXXCPP $switch" + fi + ac_success=yes + break + fi + done + fi]) + + m4_if([$2], [ext], [], [dnl + if test x$ac_success = xno; then + dnl HP's aCC needs +std=c++11 according to: + dnl http://h21007.www2.hp.com/portal/download/files/unprot/aCxx/PDF_Release_Notes/769149-001.pdf + dnl Cray's crayCC needs "-h std=c++11" + for alternative in ${ax_cxx_compile_alternatives}; do + for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do + cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx$1_$switch]) + AC_CACHE_CHECK(whether $CXX supports C++$1 features with $switch, + $cachevar, + [ac_save_CXX="$CXX" + CXX="$CXX $switch" + AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])], + [eval $cachevar=yes], + [eval $cachevar=no]) + CXX="$ac_save_CXX"]) + if eval test x\$$cachevar = xyes; then + CXX="$CXX $switch" + if test -n "$CXXCPP" ; then + CXXCPP="$CXXCPP $switch" + fi + ac_success=yes + break + fi + done + if test x$ac_success = xyes; then + break + fi + done + fi]) + AC_LANG_POP([C++]) + if test x$ax_cxx_compile_cxx$1_required = xtrue; then + if test x$ac_success = xno; then + AC_MSG_ERROR([*** A compiler with support for C++$1 language features is required.]) + fi + fi + if test x$ac_success = xno; then + HAVE_CXX$1=0 + AC_MSG_NOTICE([No compiler with C++$1 support was found]) + else + HAVE_CXX$1=1 + AC_DEFINE(HAVE_CXX$1,1, + [define if the compiler supports basic C++$1 syntax]) + fi + AC_SUBST(HAVE_CXX$1) +]) + + +dnl Test body for checking C++11 support + +m4_define([_AX_CXX_COMPILE_STDCXX_testbody_11], + _AX_CXX_COMPILE_STDCXX_testbody_new_in_11 +) + + +dnl Test body for checking C++14 support + +m4_define([_AX_CXX_COMPILE_STDCXX_testbody_14], + _AX_CXX_COMPILE_STDCXX_testbody_new_in_11 + _AX_CXX_COMPILE_STDCXX_testbody_new_in_14 +) + +m4_define([_AX_CXX_COMPILE_STDCXX_testbody_17], + _AX_CXX_COMPILE_STDCXX_testbody_new_in_11 + _AX_CXX_COMPILE_STDCXX_testbody_new_in_14 + _AX_CXX_COMPILE_STDCXX_testbody_new_in_17 +) + +dnl Tests for new features in C++11 + +m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_11], [[ + +// If the compiler admits that it is not ready for C++11, why torture it? +// Hopefully, this will speed up the test. + +#ifndef __cplusplus + +#error "This is not a C++ compiler" + +#elif __cplusplus < 201103L + +#error "This is not a C++11 compiler" + +#else + +namespace cxx11 +{ + + namespace test_static_assert + { + + template <typename T> + struct check + { + static_assert(sizeof(int) <= sizeof(T), "not big enough"); + }; + + } + + namespace test_final_override + { + + struct Base + { + virtual ~Base() {} + virtual void f() {} + }; + + struct Derived : public Base + { + virtual ~Derived() override {} + virtual void f() override {} + }; + + } + + namespace test_double_right_angle_brackets + { + + template < typename T > + struct check {}; + + typedef check<void> single_type; + typedef check<check<void>> double_type; + typedef check<check<check<void>>> triple_type; + typedef check<check<check<check<void>>>> quadruple_type; + + } + + namespace test_decltype + { + + int + f() + { + int a = 1; + decltype(a) b = 2; + return a + b; + } + + } + + namespace test_type_deduction + { + + template < typename T1, typename T2 > + struct is_same + { + static const bool value = false; + }; + + template < typename T > + struct is_same<T, T> + { + static const bool value = true; + }; + + template < typename T1, typename T2 > + auto + add(T1 a1, T2 a2) -> decltype(a1 + a2) + { + return a1 + a2; + } + + int + test(const int c, volatile int v) + { + static_assert(is_same<int, decltype(0)>::value == true, ""); + static_assert(is_same<int, decltype(c)>::value == false, ""); + static_assert(is_same<int, decltype(v)>::value == false, ""); + auto ac = c; + auto av = v; + auto sumi = ac + av + 'x'; + auto sumf = ac + av + 1.0; + static_assert(is_same<int, decltype(ac)>::value == true, ""); + static_assert(is_same<int, decltype(av)>::value == true, ""); + static_assert(is_same<int, decltype(sumi)>::value == true, ""); + static_assert(is_same<int, decltype(sumf)>::value == false, ""); + static_assert(is_same<int, decltype(add(c, v))>::value == true, ""); + return (sumf > 0.0) ? sumi : add(c, v); + } + + } + + namespace test_noexcept + { + + int f() { return 0; } + int g() noexcept { return 0; } + + static_assert(noexcept(f()) == false, ""); + static_assert(noexcept(g()) == true, ""); + + } + + namespace test_constexpr + { + + template < typename CharT > + unsigned long constexpr + strlen_c_r(const CharT *const s, const unsigned long acc) noexcept + { + return *s ? strlen_c_r(s + 1, acc + 1) : acc; + } + + template < typename CharT > + unsigned long constexpr + strlen_c(const CharT *const s) noexcept + { + return strlen_c_r(s, 0UL); + } + + static_assert(strlen_c("") == 0UL, ""); + static_assert(strlen_c("1") == 1UL, ""); + static_assert(strlen_c("example") == 7UL, ""); + static_assert(strlen_c("another\0example") == 7UL, ""); + + } + + namespace test_rvalue_references + { + + template < int N > + struct answer + { + static constexpr int value = N; + }; + + answer<1> f(int&) { return answer<1>(); } + answer<2> f(const int&) { return answer<2>(); } + answer<3> f(int&&) { return answer<3>(); } + + void + test() + { + int i = 0; + const int c = 0; + static_assert(decltype(f(i))::value == 1, ""); + static_assert(decltype(f(c))::value == 2, ""); + static_assert(decltype(f(0))::value == 3, ""); + } + + } + + namespace test_uniform_initialization + { + + struct test + { + static const int zero {}; + static const int one {1}; + }; + + static_assert(test::zero == 0, ""); + static_assert(test::one == 1, ""); + + } + + namespace test_lambdas + { + + void + test1() + { + auto lambda1 = [](){}; + auto lambda2 = lambda1; + lambda1(); + lambda2(); + } + + int + test2() + { + auto a = [](int i, int j){ return i + j; }(1, 2); + auto b = []() -> int { return '0'; }(); + auto c = [=](){ return a + b; }(); + auto d = [&](){ return c; }(); + auto e = [a, &b](int x) mutable { + const auto identity = [](int y){ return y; }; + for (auto i = 0; i < a; ++i) + a += b--; + return x + identity(a + b); + }(0); + return a + b + c + d + e; + } + + int + test3() + { + const auto nullary = [](){ return 0; }; + const auto unary = [](int x){ return x; }; + using nullary_t = decltype(nullary); + using unary_t = decltype(unary); + const auto higher1st = [](nullary_t f){ return f(); }; + const auto higher2nd = [unary](nullary_t f1){ + return [unary, f1](unary_t f2){ return f2(unary(f1())); }; + }; + return higher1st(nullary) + higher2nd(nullary)(unary); + } + + } + + namespace test_variadic_templates + { + + template <int...> + struct sum; + + template <int N0, int... N1toN> + struct sum<N0, N1toN...> + { + static constexpr auto value = N0 + sum<N1toN...>::value; + }; + + template <> + struct sum<> + { + static constexpr auto value = 0; + }; + + static_assert(sum<>::value == 0, ""); + static_assert(sum<1>::value == 1, ""); + static_assert(sum<23>::value == 23, ""); + static_assert(sum<1, 2>::value == 3, ""); + static_assert(sum<5, 5, 11>::value == 21, ""); + static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); + + } + + // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae + // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function + // because of this. + namespace test_template_alias_sfinae + { + + struct foo {}; + + template<typename T> + using member = typename T::member_type; + + template<typename T> + void func(...) {} + + template<typename T> + void func(member<T>*) {} + + void test(); + + void test() { func<foo>(0); } + + } + +} // namespace cxx11 + +#endif // __cplusplus >= 201103L + +]]) + + +dnl Tests for new features in C++14 + +m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_14], [[ + +// If the compiler admits that it is not ready for C++14, why torture it? +// Hopefully, this will speed up the test. + +#ifndef __cplusplus + +#error "This is not a C++ compiler" + +#elif __cplusplus < 201402L + +#error "This is not a C++14 compiler" + +#else + +namespace cxx14 +{ + + namespace test_polymorphic_lambdas + { + + int + test() + { + const auto lambda = [](auto&&... args){ + const auto istiny = [](auto x){ + return (sizeof(x) == 1UL) ? 1 : 0; + }; + const int aretiny[] = { istiny(args)... }; + return aretiny[0]; + }; + return lambda(1, 1L, 1.0f, '1'); + } + + } + + namespace test_binary_literals + { + + constexpr auto ivii = 0b0000000000101010; + static_assert(ivii == 42, "wrong value"); + + } + + namespace test_generalized_constexpr + { + + template < typename CharT > + constexpr unsigned long + strlen_c(const CharT *const s) noexcept + { + auto length = 0UL; + for (auto p = s; *p; ++p) + ++length; + return length; + } + + static_assert(strlen_c("") == 0UL, ""); + static_assert(strlen_c("x") == 1UL, ""); + static_assert(strlen_c("test") == 4UL, ""); + static_assert(strlen_c("another\0test") == 7UL, ""); + + } + + namespace test_lambda_init_capture + { + + int + test() + { + auto x = 0; + const auto lambda1 = [a = x](int b){ return a + b; }; + const auto lambda2 = [a = lambda1(x)](){ return a; }; + return lambda2(); + } + + } + + namespace test_digit_separators + { + + constexpr auto ten_million = 100'000'000; + static_assert(ten_million == 100000000, ""); + + } + + namespace test_return_type_deduction + { + + auto f(int& x) { return x; } + decltype(auto) g(int& x) { return x; } + + template < typename T1, typename T2 > + struct is_same + { + static constexpr auto value = false; + }; + + template < typename T > + struct is_same<T, T> + { + static constexpr auto value = true; + }; + + int + test() + { + auto x = 0; + static_assert(is_same<int, decltype(f(x))>::value, ""); + static_assert(is_same<int&, decltype(g(x))>::value, ""); + return x; + } + + } + +} // namespace cxx14 + +#endif // __cplusplus >= 201402L + +]]) + + +dnl Tests for new features in C++17 + +m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_17], [[ + +// If the compiler admits that it is not ready for C++17, why torture it? +// Hopefully, this will speed up the test. + +#ifndef __cplusplus + +#error "This is not a C++ compiler" + +#elif __cplusplus < 201703L + +#error "This is not a C++17 compiler" + +#else + +#include <initializer_list> +#include <utility> +#include <type_traits> + +namespace cxx17 +{ + + namespace test_constexpr_lambdas + { + + constexpr int foo = [](){return 42;}(); + + } + + namespace test::nested_namespace::definitions + { + + } + + namespace test_fold_expression + { + + template<typename... Args> + int multiply(Args... args) + { + return (args * ... * 1); + } + + template<typename... Args> + bool all(Args... args) + { + return (args && ...); + } + + } + + namespace test_extended_static_assert + { + + static_assert (true); + + } + + namespace test_auto_brace_init_list + { + + auto foo = {5}; + auto bar {5}; + + static_assert(std::is_same<std::initializer_list<int>, decltype(foo)>::value); + static_assert(std::is_same<int, decltype(bar)>::value); + } + + namespace test_typename_in_template_template_parameter + { + + template<template<typename> typename X> struct D; + + } + + namespace test_fallthrough_nodiscard_maybe_unused_attributes + { + + int f1() + { + return 42; + } + + [[nodiscard]] int f2() + { + [[maybe_unused]] auto unused = f1(); + + switch (f1()) + { + case 17: + f1(); + [[fallthrough]]; + case 42: + f1(); + } + return f1(); + } + + } + + namespace test_extended_aggregate_initialization + { + + struct base1 + { + int b1, b2 = 42; + }; + + struct base2 + { + base2() { + b3 = 42; + } + int b3; + }; + + struct derived : base1, base2 + { + int d; + }; + + derived d1 {{1, 2}, {}, 4}; // full initialization + derived d2 {{}, {}, 4}; // value-initialized bases + + } + + namespace test_general_range_based_for_loop + { + + struct iter + { + int i; + + int& operator* () + { + return i; + } + + const int& operator* () const + { + return i; + } + + iter& operator++() + { + ++i; + return *this; + } + }; + + struct sentinel + { + int i; + }; + + bool operator== (const iter& i, const sentinel& s) + { + return i.i == s.i; + } + + bool operator!= (const iter& i, const sentinel& s) + { + return !(i == s); + } + + struct range + { + iter begin() const + { + return {0}; + } + + sentinel end() const + { + return {5}; + } + }; + + void f() + { + range r {}; + + for (auto i : r) + { + [[maybe_unused]] auto v = i; + } + } + + } + + namespace test_lambda_capture_asterisk_this_by_value + { + + struct t + { + int i; + int foo() + { + return [*this]() + { + return i; + }(); + } + }; + + } + + namespace test_enum_class_construction + { + + enum class byte : unsigned char + {}; + + byte foo {42}; + + } + + namespace test_constexpr_if + { + + template <bool cond> + int f () + { + if constexpr(cond) + { + return 13; + } + else + { + return 42; + } + } + + } + + namespace test_selection_statement_with_initializer + { + + int f() + { + return 13; + } + + int f2() + { + if (auto i = f(); i > 0) + { + return 3; + } + + switch (auto i = f(); i + 4) + { + case 17: + return 2; + + default: + return 1; + } + } + + } + + namespace test_template_argument_deduction_for_class_templates + { + + template <typename T1, typename T2> + struct pair + { + pair (T1 p1, T2 p2) + : m1 {p1}, + m2 {p2} + {} + + T1 m1; + T2 m2; + }; + + void f() + { + [[maybe_unused]] auto p = pair{13, 42u}; + } + + } + + namespace test_non_type_auto_template_parameters + { + + template <auto n> + struct B + {}; + + B<5> b1; + B<'a'> b2; + + } + + namespace test_structured_bindings + { + + int arr[2] = { 1, 2 }; + std::pair<int, int> pr = { 1, 2 }; + + auto f1() -> int(&)[2] + { + return arr; + } + + auto f2() -> std::pair<int, int>& + { + return pr; + } + + struct S + { + int x1 : 2; + volatile double y1; + }; + + S f3() + { + return {}; + } + + auto [ x1, y1 ] = f1(); + auto& [ xr1, yr1 ] = f1(); + auto [ x2, y2 ] = f2(); + auto& [ xr2, yr2 ] = f2(); + const auto [ x3, y3 ] = f3(); + + } + + namespace test_exception_spec_type_system + { + + struct Good {}; + struct Bad {}; + + void g1() noexcept; + void g2(); + + template<typename T> + Bad + f(T*, T*); + + template<typename T1, typename T2> + Good + f(T1*, T2*); + + static_assert (std::is_same_v<Good, decltype(f(g1, g2))>); + + } + + namespace test_inline_variables + { + + template<class T> void f(T) + {} + + template<class T> inline T g(T) + { + return T{}; + } + + template<> inline void f<>(int) + {} + + template<> int g<>(int) + { + return 5; + } + + } + +} // namespace cxx17 + +#endif // __cplusplus < 201703L + +]]) diff --git a/v2.6/generators/nlojet++/m4/ax_cxx_compile_stdcxx_11.m4 b/v2.6/generators/nlojet++/m4/ax_cxx_compile_stdcxx_11.m4 new file mode 100644 index 0000000000000000000000000000000000000000..1733fd85f9595ea9e680c3382f0c9a01a288b637 --- /dev/null +++ b/v2.6/generators/nlojet++/m4/ax_cxx_compile_stdcxx_11.m4 @@ -0,0 +1,39 @@ +# ============================================================================= +# https://www.gnu.org/software/autoconf-archive/ax_cxx_compile_stdcxx_11.html +# ============================================================================= +# +# SYNOPSIS +# +# AX_CXX_COMPILE_STDCXX_11([ext|noext], [mandatory|optional]) +# +# DESCRIPTION +# +# Check for baseline language coverage in the compiler for the C++11 +# standard; if necessary, add switches to CXX and CXXCPP to enable +# support. +# +# This macro is a convenience alias for calling the AX_CXX_COMPILE_STDCXX +# macro with the version set to C++11. The two optional arguments are +# forwarded literally as the second and third argument respectively. +# Please see the documentation for the AX_CXX_COMPILE_STDCXX macro for +# more information. If you want to use this macro, you also need to +# download the ax_cxx_compile_stdcxx.m4 file. +# +# LICENSE +# +# Copyright (c) 2008 Benjamin Kosnik <bkoz@redhat.com> +# Copyright (c) 2012 Zack Weinberg <zackw@panix.com> +# Copyright (c) 2013 Roy Stogner <roystgnr@ices.utexas.edu> +# Copyright (c) 2014, 2015 Google Inc.; contributed by Alexey Sokolov <sokolov@google.com> +# Copyright (c) 2015 Paul Norman <penorman@mac.com> +# Copyright (c) 2015 Moritz Klammler <moritz@klammler.eu> +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 18 + +AX_REQUIRE_DEFINED([AX_CXX_COMPILE_STDCXX]) +AC_DEFUN([AX_CXX_COMPILE_STDCXX_11], [AX_CXX_COMPILE_STDCXX([11], [$1], [$2])]) diff --git a/v2.6/generators/nlojet++/m4/ax_cxx_compile_stdcxx_17.m4 b/v2.6/generators/nlojet++/m4/ax_cxx_compile_stdcxx_17.m4 new file mode 100644 index 0000000000000000000000000000000000000000..a6834171739bed1a8974fe48999a9c91104cab34 --- /dev/null +++ b/v2.6/generators/nlojet++/m4/ax_cxx_compile_stdcxx_17.m4 @@ -0,0 +1,35 @@ +# ============================================================================= +# https://www.gnu.org/software/autoconf-archive/ax_cxx_compile_stdcxx_17.html +# ============================================================================= +# +# SYNOPSIS +# +# AX_CXX_COMPILE_STDCXX_17([ext|noext], [mandatory|optional]) +# +# DESCRIPTION +# +# Check for baseline language coverage in the compiler for the C++17 +# standard; if necessary, add switches to CXX and CXXCPP to enable +# support. +# +# This macro is a convenience alias for calling the AX_CXX_COMPILE_STDCXX +# macro with the version set to C++17. The two optional arguments are +# forwarded literally as the second and third argument respectively. +# Please see the documentation for the AX_CXX_COMPILE_STDCXX macro for +# more information. If you want to use this macro, you also need to +# download the ax_cxx_compile_stdcxx.m4 file. +# +# LICENSE +# +# Copyright (c) 2015 Moritz Klammler <moritz@klammler.eu> +# Copyright (c) 2016 Krzesimir Nowak <qdlacz@gmail.com> +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 2 + +AX_REQUIRE_DEFINED([AX_CXX_COMPILE_STDCXX]) +AC_DEFUN([AX_CXX_COMPILE_STDCXX_17], [AX_CXX_COMPILE_STDCXX([17], [$1], [$2])]) diff --git a/v2.6/generators/nlojet++/m4/ax_prog_doxygen.m4 b/v2.6/generators/nlojet++/m4/ax_prog_doxygen.m4 new file mode 100644 index 0000000000000000000000000000000000000000..44b22b00abc655f0355163b03caef5eb3dd67866 --- /dev/null +++ b/v2.6/generators/nlojet++/m4/ax_prog_doxygen.m4 @@ -0,0 +1,532 @@ +# =========================================================================== +# http://www.gnu.org/software/autoconf-archive/ax_prog_doxygen.html +# =========================================================================== +# +# SYNOPSIS +# +# DX_INIT_DOXYGEN(PROJECT-NAME, DOXYFILE-PATH, [OUTPUT-DIR]) +# DX_DOXYGEN_FEATURE(ON|OFF) +# DX_DOT_FEATURE(ON|OFF) +# DX_HTML_FEATURE(ON|OFF) +# DX_CHM_FEATURE(ON|OFF) +# DX_CHI_FEATURE(ON|OFF) +# DX_MAN_FEATURE(ON|OFF) +# DX_RTF_FEATURE(ON|OFF) +# DX_XML_FEATURE(ON|OFF) +# DX_PDF_FEATURE(ON|OFF) +# DX_PS_FEATURE(ON|OFF) +# +# DESCRIPTION +# +# The DX_*_FEATURE macros control the default setting for the given +# Doxygen feature. Supported features are 'DOXYGEN' itself, 'DOT' for +# generating graphics, 'HTML' for plain HTML, 'CHM' for compressed HTML +# help (for MS users), 'CHI' for generating a seperate .chi file by the +# .chm file, and 'MAN', 'RTF', 'XML', 'PDF' and 'PS' for the appropriate +# output formats. The environment variable DOXYGEN_PAPER_SIZE may be +# specified to override the default 'a4wide' paper size. +# +# By default, HTML, PDF and PS documentation is generated as this seems to +# be the most popular and portable combination. MAN pages created by +# Doxygen are usually problematic, though by picking an appropriate subset +# and doing some massaging they might be better than nothing. CHM and RTF +# are specific for MS (note that you can't generate both HTML and CHM at +# the same time). The XML is rather useless unless you apply specialized +# post-processing to it. +# +# The macros mainly control the default state of the feature. The use can +# override the default by specifying --enable or --disable. The macros +# ensure that contradictory flags are not given (e.g., +# --enable-doxygen-html and --enable-doxygen-chm, +# --enable-doxygen-anything with --disable-doxygen, etc.) Finally, each +# feature will be automatically disabled (with a warning) if the required +# programs are missing. +# +# Once all the feature defaults have been specified, call DX_INIT_DOXYGEN +# with the following parameters: a one-word name for the project for use +# as a filename base etc., an optional configuration file name (the +# default is 'Doxyfile', the same as Doxygen's default), and an optional +# output directory name (the default is 'doxygen-doc'). +# +# Automake Support +# +# The following is a template aminclude.am file for use with Automake. +# Make targets and variables values are controlled by the various +# DX_COND_* conditionals set by autoconf. +# +# The provided targets are: +# +# doxygen-doc: Generate all doxygen documentation. +# +# doxygen-run: Run doxygen, which will generate some of the +# documentation (HTML, CHM, CHI, MAN, RTF, XML) +# but will not do the post processing required +# for the rest of it (PS, PDF, and some MAN). +# +# doxygen-man: Rename some doxygen generated man pages. +# +# doxygen-ps: Generate doxygen PostScript documentation. +# +# doxygen-pdf: Generate doxygen PDF documentation. +# +# Note that by default these are not integrated into the automake targets. +# If doxygen is used to generate man pages, you can achieve this +# integration by setting man3_MANS to the list of man pages generated and +# then adding the dependency: +# +# $(man3_MANS): doxygen-doc +# +# This will cause make to run doxygen and generate all the documentation. +# +# The following variable is intended for use in Makefile.am: +# +# DX_CLEANFILES = everything to clean. +# +# Then add this variable to MOSTLYCLEANFILES. +# +# ----- begin aminclude.am ------------------------------------- +# +# ## --------------------------------- ## +# ## Format-independent Doxygen rules. ## +# ## --------------------------------- ## +# +# if DX_COND_doc +# +# ## ------------------------------- ## +# ## Rules specific for HTML output. ## +# ## ------------------------------- ## +# +# if DX_COND_html +# +# DX_CLEAN_HTML = @DX_DOCDIR@/html +# +# endif DX_COND_html +# +# ## ------------------------------ ## +# ## Rules specific for CHM output. ## +# ## ------------------------------ ## +# +# if DX_COND_chm +# +# DX_CLEAN_CHM = @DX_DOCDIR@/chm +# +# if DX_COND_chi +# +# DX_CLEAN_CHI = @DX_DOCDIR@/@PACKAGE@.chi +# +# endif DX_COND_chi +# +# endif DX_COND_chm +# +# ## ------------------------------ ## +# ## Rules specific for MAN output. ## +# ## ------------------------------ ## +# +# if DX_COND_man +# +# DX_CLEAN_MAN = @DX_DOCDIR@/man +# +# endif DX_COND_man +# +# ## ------------------------------ ## +# ## Rules specific for RTF output. ## +# ## ------------------------------ ## +# +# if DX_COND_rtf +# +# DX_CLEAN_RTF = @DX_DOCDIR@/rtf +# +# endif DX_COND_rtf +# +# ## ------------------------------ ## +# ## Rules specific for XML output. ## +# ## ------------------------------ ## +# +# if DX_COND_xml +# +# DX_CLEAN_XML = @DX_DOCDIR@/xml +# +# endif DX_COND_xml +# +# ## ----------------------------- ## +# ## Rules specific for PS output. ## +# ## ----------------------------- ## +# +# if DX_COND_ps +# +# DX_CLEAN_PS = @DX_DOCDIR@/@PACKAGE@.ps +# +# DX_PS_GOAL = doxygen-ps +# +# doxygen-ps: @DX_DOCDIR@/@PACKAGE@.ps +# +# @DX_DOCDIR@/@PACKAGE@.ps: @DX_DOCDIR@/@PACKAGE@.tag +# cd @DX_DOCDIR@/latex; \ +# rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \ +# $(DX_LATEX) refman.tex; \ +# $(MAKEINDEX_PATH) refman.idx; \ +# $(DX_LATEX) refman.tex; \ +# countdown=5; \ +# while $(DX_EGREP) 'Rerun (LaTeX|to get cross-references right)' \ +# refman.log > /dev/null 2>&1 \ +# && test $$countdown -gt 0; do \ +# $(DX_LATEX) refman.tex; \ +# countdown=`expr $$countdown - 1`; \ +# done; \ +# $(DX_DVIPS) -o ../@PACKAGE@.ps refman.dvi +# +# endif DX_COND_ps +# +# ## ------------------------------ ## +# ## Rules specific for PDF output. ## +# ## ------------------------------ ## +# +# if DX_COND_pdf +# +# DX_CLEAN_PDF = @DX_DOCDIR@/@PACKAGE@.pdf +# +# DX_PDF_GOAL = doxygen-pdf +# +# doxygen-pdf: @DX_DOCDIR@/@PACKAGE@.pdf +# +# @DX_DOCDIR@/@PACKAGE@.pdf: @DX_DOCDIR@/@PACKAGE@.tag +# cd @DX_DOCDIR@/latex; \ +# rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \ +# $(DX_PDFLATEX) refman.tex; \ +# $(DX_MAKEINDEX) refman.idx; \ +# $(DX_PDFLATEX) refman.tex; \ +# countdown=5; \ +# while $(DX_EGREP) 'Rerun (LaTeX|to get cross-references right)' \ +# refman.log > /dev/null 2>&1 \ +# && test $$countdown -gt 0; do \ +# $(DX_PDFLATEX) refman.tex; \ +# countdown=`expr $$countdown - 1`; \ +# done; \ +# mv refman.pdf ../@PACKAGE@.pdf +# +# endif DX_COND_pdf +# +# ## ------------------------------------------------- ## +# ## Rules specific for LaTeX (shared for PS and PDF). ## +# ## ------------------------------------------------- ## +# +# if DX_COND_latex +# +# DX_CLEAN_LATEX = @DX_DOCDIR@/latex +# +# endif DX_COND_latex +# +# .PHONY: doxygen-run doxygen-doc $(DX_PS_GOAL) $(DX_PDF_GOAL) +# +# .INTERMEDIATE: doxygen-run $(DX_PS_GOAL) $(DX_PDF_GOAL) +# +# doxygen-run: @DX_DOCDIR@/@PACKAGE@.tag +# +# doxygen-doc: doxygen-run $(DX_PS_GOAL) $(DX_PDF_GOAL) +# +# @DX_DOCDIR@/@PACKAGE@.tag: $(DX_CONFIG) $(pkginclude_HEADERS) +# rm -rf @DX_DOCDIR@ +# $(DX_ENV) $(DX_DOXYGEN) $(srcdir)/$(DX_CONFIG) +# +# DX_CLEANFILES = \ +# @DX_DOCDIR@/@PACKAGE@.tag \ +# -r \ +# $(DX_CLEAN_HTML) \ +# $(DX_CLEAN_CHM) \ +# $(DX_CLEAN_CHI) \ +# $(DX_CLEAN_MAN) \ +# $(DX_CLEAN_RTF) \ +# $(DX_CLEAN_XML) \ +# $(DX_CLEAN_PS) \ +# $(DX_CLEAN_PDF) \ +# $(DX_CLEAN_LATEX) +# +# endif DX_COND_doc +# +# ----- end aminclude.am --------------------------------------- +# +# LICENSE +# +# Copyright (c) 2009 Oren Ben-Kiki <oren@ben-kiki.org> +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 12 + +## ----------## +## Defaults. ## +## ----------## + +DX_ENV="" +AC_DEFUN([DX_FEATURE_doc], ON) +AC_DEFUN([DX_FEATURE_dot], OFF) +AC_DEFUN([DX_FEATURE_man], OFF) +AC_DEFUN([DX_FEATURE_html], ON) +AC_DEFUN([DX_FEATURE_chm], OFF) +AC_DEFUN([DX_FEATURE_chi], OFF) +AC_DEFUN([DX_FEATURE_rtf], OFF) +AC_DEFUN([DX_FEATURE_xml], OFF) +AC_DEFUN([DX_FEATURE_pdf], ON) +AC_DEFUN([DX_FEATURE_ps], ON) + +## --------------- ## +## Private macros. ## +## --------------- ## + +# DX_ENV_APPEND(VARIABLE, VALUE) +# ------------------------------ +# Append VARIABLE="VALUE" to DX_ENV for invoking doxygen. +AC_DEFUN([DX_ENV_APPEND], [AC_SUBST([DX_ENV], ["$DX_ENV $1='$2'"])]) + +# DX_DIRNAME_EXPR +# --------------- +# Expand into a shell expression prints the directory part of a path. +AC_DEFUN([DX_DIRNAME_EXPR], + [[expr ".$1" : '\(\.\)[^/]*$' \| "x$1" : 'x\(.*\)/[^/]*$']]) + +# DX_IF_FEATURE(FEATURE, IF-ON, IF-OFF) +# ------------------------------------- +# Expands according to the M4 (static) status of the feature. +AC_DEFUN([DX_IF_FEATURE], [ifelse(DX_FEATURE_$1, ON, [$2], [$3])]) + +# DX_REQUIRE_PROG(VARIABLE, PROGRAM) +# ---------------------------------- +# Require the specified program to be found for the DX_CURRENT_FEATURE to work. +AC_DEFUN([DX_REQUIRE_PROG], [ +AC_PATH_TOOL([$1], [$2]) +if test "$DX_FLAG_[]DX_CURRENT_FEATURE$$1" = 1; then + AC_MSG_WARN([$2 not found - will not DX_CURRENT_DESCRIPTION]) + AC_SUBST(DX_FLAG_[]DX_CURRENT_FEATURE, 0) +fi +]) + +# DX_TEST_FEATURE(FEATURE) +# ------------------------ +# Expand to a shell expression testing whether the feature is active. +AC_DEFUN([DX_TEST_FEATURE], [test "$DX_FLAG_$1" = 1]) + +# DX_CHECK_DEPEND(REQUIRED_FEATURE, REQUIRED_STATE) +# ------------------------------------------------- +# Verify that a required features has the right state before trying to turn on +# the DX_CURRENT_FEATURE. +AC_DEFUN([DX_CHECK_DEPEND], [ +test "$DX_FLAG_$1" = "$2" \ +|| AC_MSG_ERROR([doxygen-DX_CURRENT_FEATURE ifelse([$2], 1, + requires, contradicts) doxygen-DX_CURRENT_FEATURE]) +]) + +# DX_CLEAR_DEPEND(FEATURE, REQUIRED_FEATURE, REQUIRED_STATE) +# ---------------------------------------------------------- +# Turn off the DX_CURRENT_FEATURE if the required feature is off. +AC_DEFUN([DX_CLEAR_DEPEND], [ +test "$DX_FLAG_$1" = "$2" || AC_SUBST(DX_FLAG_[]DX_CURRENT_FEATURE, 0) +]) + +# DX_FEATURE_ARG(FEATURE, DESCRIPTION, +# CHECK_DEPEND, CLEAR_DEPEND, +# REQUIRE, DO-IF-ON, DO-IF-OFF) +# -------------------------------------------- +# Parse the command-line option controlling a feature. CHECK_DEPEND is called +# if the user explicitly turns the feature on (and invokes DX_CHECK_DEPEND), +# otherwise CLEAR_DEPEND is called to turn off the default state if a required +# feature is disabled (using DX_CLEAR_DEPEND). REQUIRE performs additional +# requirement tests (DX_REQUIRE_PROG). Finally, an automake flag is set and +# DO-IF-ON or DO-IF-OFF are called according to the final state of the feature. +AC_DEFUN([DX_ARG_ABLE], [ + AC_DEFUN([DX_CURRENT_FEATURE], [$1]) + AC_DEFUN([DX_CURRENT_DESCRIPTION], [$2]) + AC_ARG_ENABLE(doxygen-$1, + [AS_HELP_STRING(DX_IF_FEATURE([$1], [--disable-doxygen-$1], + [--enable-doxygen-$1]), + DX_IF_FEATURE([$1], [don't $2], [$2]))], + [ +case "$enableval" in +#( +y|Y|yes|Yes|YES) + AC_SUBST([DX_FLAG_$1], 1) + $3 +;; #( +n|N|no|No|NO) + AC_SUBST([DX_FLAG_$1], 0) +;; #( +*) + AC_MSG_ERROR([invalid value '$enableval' given to doxygen-$1]) +;; +esac +], [ +AC_SUBST([DX_FLAG_$1], [DX_IF_FEATURE([$1], 1, 0)]) +$4 +]) +if DX_TEST_FEATURE([$1]); then + $5 + : +fi +AM_CONDITIONAL(DX_COND_$1, DX_TEST_FEATURE([$1])) +if DX_TEST_FEATURE([$1]); then + $6 + : +else + $7 + : +fi +]) + +## -------------- ## +## Public macros. ## +## -------------- ## + +# DX_XXX_FEATURE(DEFAULT_STATE) +# ----------------------------- +AC_DEFUN([DX_DOXYGEN_FEATURE], [AC_DEFUN([DX_FEATURE_doc], [$1])]) +AC_DEFUN([DX_DOT_FEATURE], [AC_DEFUN([DX_FEATURE_dot], [$1])]) +AC_DEFUN([DX_MAN_FEATURE], [AC_DEFUN([DX_FEATURE_man], [$1])]) +AC_DEFUN([DX_HTML_FEATURE], [AC_DEFUN([DX_FEATURE_html], [$1])]) +AC_DEFUN([DX_CHM_FEATURE], [AC_DEFUN([DX_FEATURE_chm], [$1])]) +AC_DEFUN([DX_CHI_FEATURE], [AC_DEFUN([DX_FEATURE_chi], [$1])]) +AC_DEFUN([DX_RTF_FEATURE], [AC_DEFUN([DX_FEATURE_rtf], [$1])]) +AC_DEFUN([DX_XML_FEATURE], [AC_DEFUN([DX_FEATURE_xml], [$1])]) +AC_DEFUN([DX_XML_FEATURE], [AC_DEFUN([DX_FEATURE_xml], [$1])]) +AC_DEFUN([DX_PDF_FEATURE], [AC_DEFUN([DX_FEATURE_pdf], [$1])]) +AC_DEFUN([DX_PS_FEATURE], [AC_DEFUN([DX_FEATURE_ps], [$1])]) + +# DX_INIT_DOXYGEN(PROJECT, [CONFIG-FILE], [OUTPUT-DOC-DIR]) +# --------------------------------------------------------- +# PROJECT also serves as the base name for the documentation files. +# The default CONFIG-FILE is "Doxyfile" and OUTPUT-DOC-DIR is "doxygen-doc". +AC_DEFUN([DX_INIT_DOXYGEN], [ + +# Files: +AC_SUBST([DX_PROJECT], [$1]) +AC_SUBST([DX_CONFIG], [ifelse([$2], [], Doxyfile, [$2])]) +AC_SUBST([DX_DOCDIR], [ifelse([$3], [], doxygen-doc, [$3])]) + +# Environment variables used inside doxygen.cfg: +DX_ENV_APPEND(SRCDIR, $srcdir) +DX_ENV_APPEND(PROJECT, $DX_PROJECT) +DX_ENV_APPEND(DOCDIR, $DX_DOCDIR) +DX_ENV_APPEND(VERSION, $PACKAGE_VERSION) + +# Doxygen itself: +DX_ARG_ABLE(doc, [generate any doxygen documentation], + [], + [], + [DX_REQUIRE_PROG([DX_DOXYGEN], doxygen) + DX_REQUIRE_PROG([DX_PERL], perl)], + [DX_ENV_APPEND(PERL_PATH, $DX_PERL)]) + +# Dot for graphics: +DX_ARG_ABLE(dot, [generate graphics for doxygen documentation], + [DX_CHECK_DEPEND(doc, 1)], + [DX_CLEAR_DEPEND(doc, 1)], + [DX_REQUIRE_PROG([DX_DOT], dot)], + [DX_ENV_APPEND(HAVE_DOT, YES) + DX_ENV_APPEND(DOT_PATH, [`DX_DIRNAME_EXPR($DX_DOT)`])], + [DX_ENV_APPEND(HAVE_DOT, NO)]) + +# Man pages generation: +DX_ARG_ABLE(man, [generate doxygen manual pages], + [DX_CHECK_DEPEND(doc, 1)], + [DX_CLEAR_DEPEND(doc, 1)], + [], + [DX_ENV_APPEND(GENERATE_MAN, YES)], + [DX_ENV_APPEND(GENERATE_MAN, NO)]) + +# RTF file generation: +DX_ARG_ABLE(rtf, [generate doxygen RTF documentation], + [DX_CHECK_DEPEND(doc, 1)], + [DX_CLEAR_DEPEND(doc, 1)], + [], + [DX_ENV_APPEND(GENERATE_RTF, YES)], + [DX_ENV_APPEND(GENERATE_RTF, NO)]) + +# XML file generation: +DX_ARG_ABLE(xml, [generate doxygen XML documentation], + [DX_CHECK_DEPEND(doc, 1)], + [DX_CLEAR_DEPEND(doc, 1)], + [], + [DX_ENV_APPEND(GENERATE_XML, YES)], + [DX_ENV_APPEND(GENERATE_XML, NO)]) + +# (Compressed) HTML help generation: +DX_ARG_ABLE(chm, [generate doxygen compressed HTML help documentation], + [DX_CHECK_DEPEND(doc, 1)], + [DX_CLEAR_DEPEND(doc, 1)], + [DX_REQUIRE_PROG([DX_HHC], hhc)], + [DX_ENV_APPEND(HHC_PATH, $DX_HHC) + DX_ENV_APPEND(GENERATE_HTML, YES) + DX_ENV_APPEND(GENERATE_HTMLHELP, YES)], + [DX_ENV_APPEND(GENERATE_HTMLHELP, NO)]) + +# Seperate CHI file generation. +DX_ARG_ABLE(chi, [generate doxygen seperate compressed HTML help index file], + [DX_CHECK_DEPEND(chm, 1)], + [DX_CLEAR_DEPEND(chm, 1)], + [], + [DX_ENV_APPEND(GENERATE_CHI, YES)], + [DX_ENV_APPEND(GENERATE_CHI, NO)]) + +# Plain HTML pages generation: +DX_ARG_ABLE(html, [generate doxygen plain HTML documentation], + [DX_CHECK_DEPEND(doc, 1) DX_CHECK_DEPEND(chm, 0)], + [DX_CLEAR_DEPEND(doc, 1) DX_CLEAR_DEPEND(chm, 0)], + [], + [DX_ENV_APPEND(GENERATE_HTML, YES)], + [DX_TEST_FEATURE(chm) || DX_ENV_APPEND(GENERATE_HTML, NO)]) + +# PostScript file generation: +DX_ARG_ABLE(ps, [generate doxygen PostScript documentation], + [DX_CHECK_DEPEND(doc, 1)], + [DX_CLEAR_DEPEND(doc, 1)], + [DX_REQUIRE_PROG([DX_LATEX], latex) + DX_REQUIRE_PROG([DX_MAKEINDEX], makeindex) + DX_REQUIRE_PROG([DX_DVIPS], dvips) + DX_REQUIRE_PROG([DX_EGREP], egrep)]) + +# PDF file generation: +DX_ARG_ABLE(pdf, [generate doxygen PDF documentation], + [DX_CHECK_DEPEND(doc, 1)], + [DX_CLEAR_DEPEND(doc, 1)], + [DX_REQUIRE_PROG([DX_PDFLATEX], pdflatex) + DX_REQUIRE_PROG([DX_MAKEINDEX], makeindex) + DX_REQUIRE_PROG([DX_EGREP], egrep)]) + +# LaTeX generation for PS and/or PDF: +AM_CONDITIONAL(DX_COND_latex, DX_TEST_FEATURE(ps) || DX_TEST_FEATURE(pdf)) +if DX_TEST_FEATURE(ps) || DX_TEST_FEATURE(pdf); then + DX_ENV_APPEND(GENERATE_LATEX, YES) +else + DX_ENV_APPEND(GENERATE_LATEX, NO) +fi + +# Paper size for PS and/or PDF: +AC_ARG_VAR(DOXYGEN_PAPER_SIZE, + [a4wide (default), a4, letter, legal or executive]) +case "$DOXYGEN_PAPER_SIZE" in +#( +"") + AC_SUBST(DOXYGEN_PAPER_SIZE, "") +;; #( +a4wide|a4|letter|legal|executive) + DX_ENV_APPEND(PAPER_SIZE, $DOXYGEN_PAPER_SIZE) +;; #( +*) + AC_MSG_ERROR([unknown DOXYGEN_PAPER_SIZE='$DOXYGEN_PAPER_SIZE']) +;; +esac + +#For debugging: +#echo DX_FLAG_doc=$DX_FLAG_doc +#echo DX_FLAG_dot=$DX_FLAG_dot +#echo DX_FLAG_man=$DX_FLAG_man +#echo DX_FLAG_html=$DX_FLAG_html +#echo DX_FLAG_chm=$DX_FLAG_chm +#echo DX_FLAG_chi=$DX_FLAG_chi +#echo DX_FLAG_rtf=$DX_FLAG_rtf +#echo DX_FLAG_xml=$DX_FLAG_xml +#echo DX_FLAG_pdf=$DX_FLAG_pdf +#echo DX_FLAG_ps=$DX_FLAG_ps +#echo DX_ENV=$DX_ENV +]) diff --git a/v2.6/generators/nlojet++/m4/ax_python_devel.m4 b/v2.6/generators/nlojet++/m4/ax_python_devel.m4 new file mode 100644 index 0000000000000000000000000000000000000000..cf2163c9b5fc69cd1d7c74c8870ec5dd2439c163 --- /dev/null +++ b/v2.6/generators/nlojet++/m4/ax_python_devel.m4 @@ -0,0 +1,324 @@ +# =========================================================================== +# http://www.gnu.org/software/autoconf-archive/ax_python_devel.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_PYTHON_DEVEL([version]) +# +# DESCRIPTION +# +# Note: Defines as a precious variable "PYTHON_VERSION". Don't override it +# in your configure.ac. +# +# This macro checks for Python and tries to get the include path to +# 'Python.h'. It provides the $(PYTHON_CPPFLAGS) and $(PYTHON_LDFLAGS) +# output variables. It also exports $(PYTHON_EXTRA_LIBS) and +# $(PYTHON_EXTRA_LDFLAGS) for embedding Python in your code. +# +# You can search for some particular version of Python by passing a +# parameter to this macro, for example ">= '2.3.1'", or "== '2.4'". Please +# note that you *have* to pass also an operator along with the version to +# match, and pay special attention to the single quotes surrounding the +# version number. Don't use "PYTHON_VERSION" for this: that environment +# variable is declared as precious and thus reserved for the end-user. +# +# This macro should work for all versions of Python >= 2.1.0. As an end +# user, you can disable the check for the python version by setting the +# PYTHON_NOVERSIONCHECK environment variable to something else than the +# empty string. +# +# If you need to use this macro for an older Python version, please +# contact the authors. We're always open for feedback. +# +# LICENSE +# +# Copyright (c) 2009 Sebastian Huber <sebastian-huber@web.de> +# Copyright (c) 2009 Alan W. Irwin +# Copyright (c) 2009 Rafael Laboissiere <rafael@laboissiere.net> +# Copyright (c) 2009 Andrew Collier +# Copyright (c) 2009 Matteo Settenvini <matteo@member.fsf.org> +# Copyright (c) 2009 Horst Knorr <hk_classes@knoda.org> +# Copyright (c) 2013 Daniel Mullner <muellner@math.stanford.edu> +# +# This program is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation, either version 3 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see <http://www.gnu.org/licenses/>. +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Archive. When you make and distribute a +# modified version of the Autoconf Macro, you may extend this special +# exception to the GPL to apply to your modified version as well. + +#serial 16 + +AU_ALIAS([AC_PYTHON_DEVEL], [AX_PYTHON_DEVEL]) +AC_DEFUN([AX_PYTHON_DEVEL],[ + # + # Allow the use of a (user set) custom python version + # + AC_ARG_VAR([PYTHON_VERSION],[The installed Python + version to use, for example '2.3'. This string + will be appended to the Python interpreter + canonical name.]) + + AC_PATH_PROG([PYTHON],[python[$PYTHON_VERSION]]) + if test -z "$PYTHON"; then + AC_MSG_ERROR([Cannot find python$PYTHON_VERSION in your system path]) + PYTHON_VERSION="" + fi + + # + # Check for a version of Python >= 2.1.0 + # + AC_MSG_CHECKING([for a version of Python >= '2.1.0']) + ac_supports_python_ver=`$PYTHON -c "import sys; \ + ver = sys.version.split ()[[0]]; \ + print (ver >= '2.1.0')"` + if test "$ac_supports_python_ver" != "True"; then + if test -z "$PYTHON_NOVERSIONCHECK"; then + AC_MSG_RESULT([no]) + AC_MSG_FAILURE([ +This version of the AC@&t@_PYTHON_DEVEL macro +doesn't work properly with versions of Python before +2.1.0. You may need to re-run configure, setting the +variables PYTHON_CPPFLAGS, PYTHON_LDFLAGS, PYTHON_SITE_PKG, +PYTHON_EXTRA_LIBS and PYTHON_EXTRA_LDFLAGS by hand. +Moreover, to disable this check, set PYTHON_NOVERSIONCHECK +to something else than an empty string. +]) + else + AC_MSG_RESULT([skip at user request]) + fi + else + AC_MSG_RESULT([yes]) + fi + + # + # if the macro parameter ``version'' is set, honour it + # + if test -n "$1"; then + AC_MSG_CHECKING([for a version of Python $1]) + ac_supports_python_ver=`$PYTHON -c "import sys; \ + ver = sys.version.split ()[[0]]; \ + print (ver $1)"` + if test "$ac_supports_python_ver" = "True"; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + AC_MSG_ERROR([this package requires Python $1. +If you have it installed, but it isn't the default Python +interpreter in your system path, please pass the PYTHON_VERSION +variable to configure. See ``configure --help'' for reference. +]) + PYTHON_VERSION="" + fi + fi + + # + # Check if you have distutils, else fail + # + AC_MSG_CHECKING([for the distutils Python package]) + ac_distutils_result=`$PYTHON -c "import distutils" 2>&1` + if test -z "$ac_distutils_result"; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + AC_MSG_ERROR([cannot import Python module "distutils". +Please check your Python installation. The error was: +$ac_distutils_result]) + PYTHON_VERSION="" + fi + + # + # Check for Python include path + # + AC_MSG_CHECKING([for Python include path]) + if test -z "$PYTHON_CPPFLAGS"; then + python_path=`$PYTHON -c "import distutils.sysconfig; \ + print (distutils.sysconfig.get_python_inc ());"` + plat_python_path=`$PYTHON -c "import distutils.sysconfig; \ + print (distutils.sysconfig.get_python_inc (plat_specific=1));"` + if test -n "${python_path}"; then + if test "${plat_python_path}" != "${python_path}"; then + python_path="-I$python_path -I$plat_python_path" + else + python_path="-I$python_path" + fi + fi + PYTHON_CPPFLAGS=$python_path + fi + AC_MSG_RESULT([$PYTHON_CPPFLAGS]) + AC_SUBST([PYTHON_CPPFLAGS]) + + # + # Check for Python library path + # + AC_MSG_CHECKING([for Python library path]) + if test -z "$PYTHON_LDFLAGS"; then + # (makes two attempts to ensure we've got a version number + # from the interpreter) + ac_python_version=`cat<<EOD | $PYTHON - + +# join all versioning strings, on some systems +# major/minor numbers could be in different list elements +from distutils.sysconfig import * +e = get_config_var('VERSION') +if e is not None: + print(e) +EOD` + + if test -z "$ac_python_version"; then + if test -n "$PYTHON_VERSION"; then + ac_python_version=$PYTHON_VERSION + else + ac_python_version=`$PYTHON -c "import sys; \ + print (sys.version[[:3]])"` + fi + fi + + # Make the versioning information available to the compiler + AC_DEFINE_UNQUOTED([HAVE_PYTHON], ["$ac_python_version"], + [If available, contains the Python version number currently in use.]) + + # First, the library directory: + ac_python_libdir=`cat<<EOD | $PYTHON - + +# There should be only one +import distutils.sysconfig +e = distutils.sysconfig.get_config_var('LIBDIR') +if e is not None: + print (e) +EOD` + + # Now, for the library: + ac_python_library=`cat<<EOD | $PYTHON - + +import distutils.sysconfig +c = distutils.sysconfig.get_config_vars() +if 'LDVERSION' in c: + print ('python'+c[['LDVERSION']]) +else: + print ('python'+c[['VERSION']]) +EOD` + + # This small piece shamelessly adapted from PostgreSQL python macro; + # credits goes to momjian, I think. I'd like to put the right name + # in the credits, if someone can point me in the right direction... ? + # + if test -n "$ac_python_libdir" -a -n "$ac_python_library" + then + # use the official shared library + ac_python_library=`echo "$ac_python_library" | sed "s/^lib//"` + PYTHON_LDFLAGS="-L$ac_python_libdir -l$ac_python_library" + else + # old way: use libpython from python_configdir + ac_python_libdir=`$PYTHON -c \ + "from distutils.sysconfig import get_python_lib as f; \ + import os; \ + print (os.path.join(f(plat_specific=1, standard_lib=1), 'config'));"` + PYTHON_LDFLAGS="-L$ac_python_libdir -lpython$ac_python_version" + fi + + if test -z "PYTHON_LDFLAGS"; then + AC_MSG_ERROR([ + Cannot determine location of your Python DSO. Please check it was installed with + dynamic libraries enabled, or try setting PYTHON_LDFLAGS by hand. + ]) + fi + fi + AC_MSG_RESULT([$PYTHON_LDFLAGS]) + AC_SUBST([PYTHON_LDFLAGS]) + + # + # Check for site packages + # + AC_MSG_CHECKING([for Python site-packages path]) + if test -z "$PYTHON_SITE_PKG"; then + PYTHON_SITE_PKG=`$PYTHON -c "import distutils.sysconfig; \ + print (distutils.sysconfig.get_python_lib(0,0));"` + fi + AC_MSG_RESULT([$PYTHON_SITE_PKG]) + AC_SUBST([PYTHON_SITE_PKG]) + + # + # libraries which must be linked in when embedding + # + AC_MSG_CHECKING(python extra libraries) + if test -z "$PYTHON_EXTRA_LIBS"; then + PYTHON_EXTRA_LIBS=`$PYTHON -c "import distutils.sysconfig; \ + conf = distutils.sysconfig.get_config_var; \ + print (conf('LIBS'))"` + fi + AC_MSG_RESULT([$PYTHON_EXTRA_LIBS]) + AC_SUBST(PYTHON_EXTRA_LIBS) + + # + # linking flags needed when embedding + # + AC_MSG_CHECKING(python extra linking flags) + if test -z "$PYTHON_EXTRA_LDFLAGS"; then + PYTHON_EXTRA_LDFLAGS=`$PYTHON -c "import distutils.sysconfig; \ + conf = distutils.sysconfig.get_config_var; \ + print (conf('LINKFORSHARED'))"` + fi + AC_MSG_RESULT([$PYTHON_EXTRA_LDFLAGS]) + AC_SUBST(PYTHON_EXTRA_LDFLAGS) + + # + # final check to see if everything compiles alright + # + AC_MSG_CHECKING([consistency of all components of python development environment]) + # save current global flags + ac_save_LIBS="$LIBS" + ac_save_CPPFLAGS="$CPPFLAGS" + LIBS="$ac_save_LIBS $PYTHON_LDFLAGS $PYTHON_EXTRA_LDFLAGS $PYTHON_EXTRA_LIBS" + CPPFLAGS="$ac_save_CPPFLAGS $PYTHON_CPPFLAGS" + AC_LANG_PUSH([C]) + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[#include <Python.h>]], + [[Py_Initialize();]]) + ],[pythonexists=yes],[pythonexists=no]) + AC_LANG_POP([C]) + # turn back to default flags + CPPFLAGS="$ac_save_CPPFLAGS" + LIBS="$ac_save_LIBS" + + AC_MSG_RESULT([$pythonexists]) + + if test ! "x$pythonexists" = "xyes"; then + AC_MSG_FAILURE([ + Could not link test program to Python. Maybe the main Python library has been + installed in some non-standard library path. If so, pass it to configure, + via the LDFLAGS environment variable. + Example: ./configure LDFLAGS="-L/usr/non-standard-path/python/lib" + ============================================================================ + ERROR! + You probably have to install the development version of the Python package + for your distribution. The exact name of this package varies among them. + ============================================================================ + ]) + PYTHON_VERSION="" + fi + + # + # all done! + # +]) diff --git a/v2.6/generators/nlojet++/m4/ax_require_defined.m4 b/v2.6/generators/nlojet++/m4/ax_require_defined.m4 new file mode 100644 index 0000000000000000000000000000000000000000..17c3eab7dafde6c1358c7c189bbe44a6e14995a7 --- /dev/null +++ b/v2.6/generators/nlojet++/m4/ax_require_defined.m4 @@ -0,0 +1,37 @@ +# =========================================================================== +# https://www.gnu.org/software/autoconf-archive/ax_require_defined.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_REQUIRE_DEFINED(MACRO) +# +# DESCRIPTION +# +# AX_REQUIRE_DEFINED is a simple helper for making sure other macros have +# been defined and thus are available for use. This avoids random issues +# where a macro isn't expanded. Instead the configure script emits a +# non-fatal: +# +# ./configure: line 1673: AX_CFLAGS_WARN_ALL: command not found +# +# It's like AC_REQUIRE except it doesn't expand the required macro. +# +# Here's an example: +# +# AX_REQUIRE_DEFINED([AX_CHECK_LINK_FLAG]) +# +# LICENSE +# +# Copyright (c) 2014 Mike Frysinger <vapier@gentoo.org> +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 2 + +AC_DEFUN([AX_REQUIRE_DEFINED], [dnl + m4_ifndef([$1], [m4_fatal([macro ]$1[ is not defined; is a m4 file missing?])]) +])dnl AX_REQUIRE_DEFINED diff --git a/v2.5/generators/nlojet++/m4/libtool.m4 b/v2.6/generators/nlojet++/m4/libtool.m4 similarity index 100% rename from v2.5/generators/nlojet++/m4/libtool.m4 rename to v2.6/generators/nlojet++/m4/libtool.m4 diff --git a/v2.5/generators/nlojet++/m4/ltoptions.m4 b/v2.6/generators/nlojet++/m4/ltoptions.m4 similarity index 100% rename from v2.5/generators/nlojet++/m4/ltoptions.m4 rename to v2.6/generators/nlojet++/m4/ltoptions.m4 diff --git a/v2.5/generators/nlojet++/m4/ltsugar.m4 b/v2.6/generators/nlojet++/m4/ltsugar.m4 similarity index 100% rename from v2.5/generators/nlojet++/m4/ltsugar.m4 rename to v2.6/generators/nlojet++/m4/ltsugar.m4 diff --git a/v2.5/generators/nlojet++/m4/ltversion.m4 b/v2.6/generators/nlojet++/m4/ltversion.m4 similarity index 100% rename from v2.5/generators/nlojet++/m4/ltversion.m4 rename to v2.6/generators/nlojet++/m4/ltversion.m4 diff --git a/v2.5/generators/nlojet++/m4/lt~obsolete.m4 b/v2.6/generators/nlojet++/m4/lt~obsolete.m4 similarity index 100% rename from v2.5/generators/nlojet++/m4/lt~obsolete.m4 rename to v2.6/generators/nlojet++/m4/lt~obsolete.m4 diff --git a/v2.6/generators/nlojet++/mygitcl b/v2.6/generators/nlojet++/mygitcl new file mode 100755 index 0000000000000000000000000000000000000000..b14d7563a397e6b4177e1cceeee07cf3d1d4f76d --- /dev/null +++ b/v2.6/generators/nlojet++/mygitcl @@ -0,0 +1 @@ +git log --pretty --numstat --summary -p . | git2cl > ChangeLog.new diff --git a/v2.6/generators/nlojet++/patches/nlojet++-4.1.3/nlo-core/bits/nlo-basic_user.h b/v2.6/generators/nlojet++/patches/nlojet++-4.1.3/nlo-core/bits/nlo-basic_user.h new file mode 100644 index 0000000000000000000000000000000000000000..89fb9ba4523967d95a774067073a53e8492bafc6 --- /dev/null +++ b/v2.6/generators/nlojet++/patches/nlojet++-4.1.3/nlo-core/bits/nlo-basic_user.h @@ -0,0 +1,1005 @@ +// Copyright (C) 2002 Zoltan Nagy +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +#ifndef __NLO_NLO_BASIC_USER_H__ +#define __NLO_NLO_BASIC_USER_H__ 1 + +// Standard includes +#include <typeinfo> +#include <iostream> +#include <fstream> +#include <ctime> + +// nlojet++ includes +#include <distribution.h> +#include <bits/hep-func.h> +#include <bits/nlo-jetfunc.h> + + +namespace nlo { + + // + // Abstract class for defining basic_user types + // + template<class _Jet> + class basic_user_base : public _Jet + { + public: + // destructor + virtual ~basic_user_base() {} + + // set the output (file name saving mode) + virtual void phys_output(const char *fname, unsigned long nsave = 10000UL, bool txt = false) { + _M_ofile = fname; _M_txt = txt; _M_nsave = nsave; + } + + virtual void phys_output(const std::basic_string<char>& fname, unsigned long nsave = 10000UL, bool txt = false) { + _M_ofile = fname; _M_txt = txt; _M_nsave = nsave; + } + + virtual void phys_output(unsigned long nsave, bool txt) { + _M_txt = txt; _M_nsave = nsave; + } + + // operations at the end of the event and saving the results + virtual void end_of_event(); + + protected: + // do any operetaions at the end of the event + virtual void operations_at_the_end_of_event() = 0; + + // write some information about the type of the sample + virtual void write_typeinfo(std::ostream&) = 0; + + // save the results in txt and binary mode + virtual void write_result_txt(std::ostream&) = 0; + virtual void write_result_bin(std::ostream&) = 0; + + // constructors and destructor + basic_user_base() + : _M_txt(false), _M_nsave(10000UL), _M_ofile("nlojet++.out"), + _M_iter(0UL), _M_start_time(std::time(0)){} + + private: + // data members + bool _M_txt; + unsigned long _M_nsave; + std::basic_string<char> _M_ofile; + + unsigned long _M_iter; + time_t _M_start_time; + }; + + template<class _Jet> + void basic_user_base<_Jet>::end_of_event() + { + this -> operations_at_the_end_of_event(); + + if((++_M_iter) % _M_nsave == 0) { + std::fstream ofile(_M_ofile.c_str(), std::ios::out); + + ofile<<_M_txt<<"\n"; + ofile<<_M_iter<<"\n"; + this -> write_typeinfo(ofile); + + if(_M_txt) { + ofile.setf(std::ios::scientific, std::ios::floatfield); + ofile.precision(14); + this -> write_result_txt(ofile); + } else this -> write_result_bin(ofile); + + ofile.flush(); + ofile.close(); + + time_t hh, mm, ss = std::time(0) - _M_start_time; + + hh = ss/3600L; + ss -= hh*3600L; + mm = ss/60L; + ss -= mm*60L; + + std::cout<<"---> "<<_M_iter<<" " + <<(hh < 10 ? "0" : "")<<hh + <<(mm < 10 ? ":0" : ":")<<mm + <<(ss < 10 ? ":0" : ":")<<ss<<std::endl; + } + } + + + template<class _From, class _To> + struct default_conversion + : public std::unary_function<_From, _To> + { + _To operator()(const _From& x) { return _To(x);} + }; + + template<class _Tp> + struct default_conversion<_Tp, _Tp> + : public std::unary_function<_Tp, _Tp> + { + const _Tp& operator()(const _Tp& x) { return x;} + }; + + + // + // The general basic_user type + // + template<class _Jet, typename _Point, typename _Weight = typename _Jet::amp_type::weight_type, + typename _Sample = _Weight, template<class _Xp, class _Yp> class _Conv = default_conversion, + class _Traits = sample_traits<_Sample>, class _PointTraits = distpoint_traits<_Point> > + class basic_user + : public virtual basic_user_base<_Jet> + { + public: + // public types + typedef _Point point_type; + typedef _Weight weight_type; + typedef _Sample sample_type; + typedef _Traits sample_traits; + typedef _PointTraits point_traits; + + typedef distbook<_Sample, _Point, _Traits, _PointTraits> distbook_type; + typedef _Conv<_Weight, _Sample> conversion_type; + + // destructor + virtual ~basic_user() {} + + protected: + // do any operetaions at the end of the event + void operations_at_the_end_of_event() { + ++_M_dist; + } + + // save the results in txt and binary mode + void write_result_txt(std::ostream& os) { + os<<_M_dist<<"\n"; + } + + void write_result_bin(std::ostream& os) { + write(os, _M_dist); + } + + void write_typeinfo(std::ostream& os) { + os<<typeid(distbook_type).name()<<"\n"; + } + + private: + // data members + distbook<_Sample, _Point, _Traits, _PointTraits> _M_dist; + + protected: + // It is visible for the inhereted class. One can have some advanced + // conversion that requires special initialization. + static conversion_type _S_conv; + + protected: + // create a distribution + void phys(int id, const char *name, unsigned int nbin, + const point_type *base) + { + _M_dist.create(id, name, nbin, base); + } + + private: + template<class _Ptr> + struct unary_func_conv + { + typedef typename _Ptr::argument_type argument_type; + typedef typename _Ptr::result_type result_type; + + unary_func_conv(const _Ptr& f) : _M_func(f) {} + + _Sample operator()(argument_type x) const { + return _S_conv(_M_func(x)); + } + + const _Ptr& _M_func; + }; + + protected: + // fill the distribution + template<class _Arg, class _Res> + void physfill(int id, const std::pointer_to_unary_function<_Arg, _Res>& f) { + typedef unary_func_conv<std::pointer_to_unary_function<_Arg, _Res> > func_conv_type; + _M_dist.accumulate(id, ptr_fun(func_conv_type(f), &func_conv_type::operator())); + } + + template<class _Sp, class _Arg, class _Res> + void physfill(int id, const pointer_to_unary_member_function<_Sp, _Arg, _Res>& f) { + typedef unary_func_conv<pointer_to_unary_member_function<_Sp, _Arg, _Res> > func_conv_type; + _M_dist.accumulate(id, ptr_fun(func_conv_type(f), &func_conv_type::operator())); + } + + template<class _Sp, class _Arg, class _Res> + void physfill(int id, const pointer_to_unary_const_member_function<_Sp, _Arg, _Res>& f) { + typedef unary_func_conv<pointer_to_unary_const_member_function<_Sp, _Arg, _Res> > func_conv_type; + _M_dist.accumulate(id, ptr_fun(func_conv_type(f), &func_conv_type::operator())); + } + + template<class _Arg> + void physfill(int id, const std::pointer_to_unary_function<_Arg, _Sample>& f) { + _M_dist.accumulate(id, f); + } + + template<class _Sp, class _Arg> + void physfill(int id, const pointer_to_unary_member_function<_Sp, _Arg, _Sample>& f) { + _M_dist.accumulate(id, f); + } + + template<class _Sp, class _Arg> + void physfill(int id, const pointer_to_unary_const_member_function<_Sp, _Arg, _Sample>& f) { + _M_dist.accumulate(id, f); + } + + template<class _Arg1, class _Arg2, class _Res> + void physfill(int id, const std::pointer_to_binary_function<_Arg1, _Arg2, _Res>& f, _Arg1 x, const _Weight& w) { + _M_dist.accumulate(id, f, x, _S_conv(w)); + } + + template<class _Sp, class _Arg1, class _Arg2, class _Res> + void physfill(int id, const pointer_to_binary_member_function<_Sp, _Arg1, _Arg2, _Res>& f, _Arg1 x, const _Weight& w) { + _M_dist.accumulate(id, f, x, _S_conv(w)); + } + + template<class _Sp, class _Arg1, class _Arg2, class _Res> + void physfill(int id, const pointer_to_binary_const_member_function<_Sp, _Arg1, _Arg2, _Res>& f, _Arg1 x, const _Weight& w) { + _M_dist.accumulate(id, f, x, _S_conv(w)); + } + }; + + + template<class _Jet, typename _Point, typename _Weight, typename _Sample, template<class _Xp, class _Yp> class _Conv, class _Traits, class _PointTraits> + _Conv<_Weight, _Sample> basic_user<_Jet, _Point, _Weight, _Sample, _Conv, _Traits, _PointTraits>::_S_conv; + + + // Specialization: + // Scalar distribution (In this case the _Point = void) + // + template<class _Jet, typename _Weight, typename _Sample, template<class _Xp, class _Yp> class _Conv, class _Traits> + class basic_user<_Jet, void, _Weight, _Sample, _Conv, _Traits, distpoint_traits<void> > + : public virtual basic_user_base<_Jet> + { + public: + // public types + typedef void point_type; + typedef _Weight weight_type; + typedef _Sample sample_type; + typedef _Traits sample_traits; + typedef distbook<_Sample, void, _Traits, distpoint_traits<void> > distbook_type; + typedef _Conv<_Weight, _Sample> conversion_type; + + // destructor + virtual ~basic_user() {} + + private: + // data members + distbook_type _M_dist; + + protected: + // It is visible for the inhereted class. One can have some advanced + // conversion that requires special initialization. + static conversion_type _S_conv; + + protected: + // do any operetaions at the end of the event + void operations_at_the_end_of_event() { + ++_M_dist; + } + + // save the results in txt and binary mode + void write_result_txt(std::ostream& os) { + os<<_M_dist<<"\n"; + } + + void write_result_bin(std::ostream& os) { + write(os, _M_dist); + } + + void write_typeinfo(std::ostream& os) { + os<<typeid(distbook_type).name()<<"\n"; + } + + // create a scalar distribution + void phys(int id, const char *name) { + _M_dist.create(id, name); + } + + // fill the scalar distributions + void physfill(int id, const _Weight& w) { + _M_dist.accumulate(id, _S_conv(w)); + } + }; + + template<class _Jet, typename _Weight, typename _Sample, template<class _Xp, class _Yp> class _Conv, class _Traits> + _Conv<_Weight, _Sample> basic_user<_Jet, void, _Weight, _Sample, _Conv, _Traits, distpoint_traits<void> >::_S_conv; + + + // Specialization: + // One dimensional distribution (In this case the _Point = double) + // + + // Helper functions to compute Dirac delta distribution and step function distribution + namespace __helper_basic_user { + extern std::pointer_to_binary_function<double, double, double> _G_step_dbl; + } // namespace __helper_basic_user + + + template<class _Jet, typename _Weight, typename _Sample, template<class _Xp, class _Yp> class _Conv, class _Traits, class _PointTraits> + class basic_user<_Jet, double, _Weight, _Sample, _Conv, _Traits, _PointTraits> + : public virtual basic_user_base<_Jet> + { + public: + // public types + typedef double point_type; + typedef _Weight weight_type; + typedef _Sample sample_type; + typedef _Traits sample_traits; + typedef _PointTraits point_traits; + typedef distbook<_Sample, double, _Traits, _PointTraits> distbook_type; + typedef _Conv<_Weight, _Sample> conversion_type; + + // destructor + virtual ~basic_user() {} + + protected: + // do any operetaions at the end of the event + void operations_at_the_end_of_event() { + ++_M_dist; + } + + // save the results in txt and binary mode + void write_result_txt(std::ostream& os) { + os<<_M_dist<<"\n"; + } + + void write_result_bin(std::ostream& os) { + write(os, _M_dist); + } + + void write_typeinfo(std::ostream& os) { + os<<typeid(distbook_type).name()<<"\n"; + } + + private: + // data members + distbook<_Sample, double, _Traits, _PointTraits> _M_dist; + + protected: + // It is visible for the inhereted class. One can have some advanced + // conversion that requires special initialization. + static conversion_type _S_conv; + + protected: + // create an one dimensional distribution + void phys(int, const char *, unsigned int, double, double); + void phys(int id, const char *name, unsigned int nbin, const double *base) { + _M_dist.create(id, name, nbin, base); + } + + void physfillh(int id, double x, const _Weight& w) { + _M_dist.accumulate(id, __helper_basic_user::_G_step_dbl, x, _S_conv(w)); + } + + private: + template<class _Ptr> + struct unary_func_conv + { + typedef typename _Ptr::argument_type argument_type; + typedef typename _Ptr::result_type result_type; + + unary_func_conv(const _Ptr& f) + : _M_func(f) {} + + _Sample operator()(argument_type x) const { + return _S_conv(_M_func(x)); + } + + const _Ptr& _M_func; + }; + + protected: + template<class _Arg, class _Res> + void physfill(int id, const std::pointer_to_unary_function<_Arg, _Res>& f) { + typedef unary_func_conv<std::pointer_to_unary_function<_Arg, _Res> > func_conv_type; + _M_dist.accumulate(id, ptr_fun(func_conv_type(f), &func_conv_type::operator())); + } + + template<class _Sp, class _Arg, class _Res> + void physfill(int id, const pointer_to_unary_member_function<_Sp, _Arg, _Res>& f) { + typedef unary_func_conv<pointer_to_unary_member_function<_Sp, _Arg, _Res> > func_conv_type; + _M_dist.accumulate(id, ptr_fun(func_conv_type(f), &func_conv_type::operator())); + } + + template<class _Sp, class _Arg, class _Res> + void physfill(int id, const pointer_to_unary_const_member_function<_Sp, _Arg, _Res>& f) { + typedef unary_func_conv<pointer_to_unary_const_member_function<_Sp, _Arg, _Res> > func_conv_type; + _M_dist.accumulate(id, ptr_fun(func_conv_type(f), &func_conv_type::operator())); + } + + + template<class _Arg> + void physfill(int id, const std::pointer_to_unary_function<_Arg, _Sample>& f) { + _M_dist.accumulate(id, f); + } + + template<class _Sp, class _Arg> + void physfill(int id, const pointer_to_unary_member_function<_Sp, _Arg, _Sample>& f) { + _M_dist.accumulate(id, f); + } + + template<class _Sp, class _Arg> + void physfill(int id, const pointer_to_unary_const_member_function<_Sp, _Arg, _Sample>& f) { + _M_dist.accumulate(id, f); + } + + template<class _Arg1, class _Arg2, class _Res> + void physfill(int id, const std::pointer_to_binary_function<_Arg1, _Arg2, _Res>& f, _Arg1 x, const _Weight& w) { + _M_dist.accumulate(id, f, x, _S_conv(w)); + } + + template<class _Sp, class _Arg1, class _Arg2, class _Res> + void physfill(int id, const pointer_to_binary_member_function<_Sp, _Arg1, _Arg2, _Res>& f, _Arg1 x, const _Weight& w) { + _M_dist.accumulate(id, f, x, _S_conv(w)); + } + + template<class _Sp, class _Arg1, class _Arg2, class _Res> + void physfill(int id, const pointer_to_binary_const_member_function<_Sp, _Arg1, _Arg2, _Res>& f, _Arg1 x, const _Weight& w) { + _M_dist.accumulate(id, f, x, _S_conv(w)); + } + }; + + template<class _Jet, typename _Weight, typename _Sample, template<class _Xp, class _Yp> class _Conv, class _Traits, class _PointTraits> + _Conv<_Weight, _Sample> basic_user<_Jet, double, _Weight, _Sample, _Conv, _Traits, _PointTraits>::_S_conv; + + template<class _Jet, typename _Weight, typename _Sample, template<class _Xp, class _Yp> class _Conv, class _Traits, class _PointTraits> + void basic_user<_Jet, double, _Weight, _Sample, _Conv, _Traits, _PointTraits>:: + phys(int id, const char *name, unsigned int npoints, double min, double max) + { + double *p = new double[npoints+1]; + double dx = (max-min)/npoints; + + for(unsigned int i = 0; i <= npoints; i++) + p[i] = min + i*dx; + + _M_dist.create(id, name, npoints+1, p); + + delete [] p; + } + + + + // Specialization: + // One dimensional distribution with histogram support + // (_Point = histpoint1d) + + // Helper functions to compute Dirac delta distribution and step function distribution + namespace __helper_basic_user { + extern std::pointer_to_binary_function<double, const histpoint1d&, double> _G_dirac; + extern std::pointer_to_binary_function<double, const histpoint1d&, double> _G_step; + } // namespace __helper_basic_user + + + template<class _Jet, typename _Weight, typename _Sample, template<class _Xp, class _Yp> class _Conv, class _Traits, class _PointTraits> + class basic_user<_Jet, histpoint1d, _Weight, _Sample, _Conv, _Traits, _PointTraits> + : public virtual basic_user_base<_Jet> + { + public: + // public types + typedef histpoint1d point_type; + typedef _Weight weight_type; + typedef _Sample sample_type; + typedef _Traits sample_traits; + typedef _PointTraits point_traits; + typedef distbook<_Sample, histpoint1d, _Traits, _PointTraits> distbook_type; + typedef _Conv<_Weight, _Sample> conversion_type; + + // destructor + virtual ~basic_user() {} + + protected: + // do any operetaions at the end of the event + void operations_at_the_end_of_event() { + _M_sdirac.accumulate(); + ++_M_dist; + } + + // save the results in txt and binary mode + void write_result_txt(std::ostream& os) { + os<<_M_dist<<"\n"; + } + + void write_result_bin(std::ostream& os) { + write(os, _M_dist); + } + + void write_typeinfo(std::ostream& os) { + os<<typeid(distbook_type).name()<<"\n"; + } + + private: + // data members + distbook<_Sample, histpoint1d, _Traits> _M_dist; + + protected: + // It is visible for the inhereted class. One can have some advanced + // conversion that requires special initialization. + static conversion_type _S_conv; + + // Help to compute a better dirac delta distribution + // (I hope!) + struct sphysreal { + explicit sphysreal(const _Weight& wt) : weight(wt) {} + const _Weight& weight; + }; + + struct sphyssub { + explicit sphyssub(const _Weight& wt) : weight(wt) {} + const _Weight& weight; + }; + + private: + // helper class to implement the smoother Dirac-delta + class _PhysDirac + { + private: + // collect the real and dipole contributions + struct smooth { + explicit smooth(double delta) : dy(delta), Ny(0U) {} + + double dy, yr, ys; + unsigned int Ny; + _Sample weight; + }; + + // constructor + explicit _PhysDirac(distbook_type *dbook) + : _M_dbook(dbook) {} + + void create(int id, double delta) { + _M_smooth.insert(std::pair<int, smooth>(id, smooth(delta))); + } + + // fill the weight at the and of the event + void accumulate(); + + // these operators fill the weights + void operator() (int id, double x, const _Weight& wt) { + _M_dbook -> accumulate(id, __helper_basic_user::_G_dirac, + x, _S_conv(wt)); + } + + void operator() (int id, double x, const sphysreal& wt) + { + smooth& smth = _M_smooth.find(id) -> second; + smth.Ny = 1U; + smth.yr = x; smth.ys = 0.0; + _Traits::assign(smth.weight, _S_conv(wt.weight)); + } + + void operator() (int id, double x, const sphyssub& wt) + { + smooth& smth = _M_smooth.find(id) -> second; + + if(smth.Ny != 0U) + if(std::abs(smth.yr - x) < smth.dy) { + smth.Ny++; smth.ys += x; + _Traits::assadd(smth.weight, _S_conv(wt.weight)); + return; + } + + _M_dbook -> accumulate(id, __helper_basic_user::_G_dirac, + x, _S_conv(wt.weight)); + } + + // data members + distbook_type *_M_dbook; + std::map<int, smooth> _M_smooth; + + // friend declarations + friend class basic_user; + }; + + protected: + // constructors and destructor + basic_user() : _M_sdirac(&_M_dist) {} + + // create an one dimensional distribution + void phys(int, const char *, unsigned int, double, double, double = 0.1); + void phys(int, const char *, unsigned int, const double *, double, double = 0.1); + void phys(int, const char *, unsigned int, const point_type *, double = 0.1); + + // fill the one dimensional distributions (dirac delta and step function) + void physfilld(int id, double x, const _Weight& w) { + _M_dist.accumulate(id, __helper_basic_user::_G_dirac, x, _S_conv(w)); + } + + void physfillh(int id, double x, const _Weight& w) { + _M_dist.accumulate(id, __helper_basic_user::_G_step, x, _S_conv(w)); + } + + void sphysfilld(int id, double x, const _Weight& wt) { + _M_sdirac(id, x, _S_conv(wt)); + } + + void sphysfilld(int id, double x, const sphysreal& wt) { + _M_sdirac(id, x, wt); + } + + void sphysfilld(int id, double x, const sphyssub& wt) { + _M_sdirac(id, x, wt); + } + + private: + template<class _Ptr> + struct unary_func_conv + { + typedef typename _Ptr::argument_type argument_type; + typedef typename _Ptr::result_type result_type; + + unary_func_conv(const _Ptr& f) : _M_func(f) {} + + _Sample operator()(argument_type x) const { + return _S_conv(_M_func(x)); + } + + const _Ptr& _M_func; + }; + + protected: + template<class _Arg, class _Res> + void physfill(int id, const std::pointer_to_unary_function<_Arg, _Res>& f) { + typedef unary_func_conv<std::pointer_to_unary_function<_Arg, _Res> > func_conv_type; + _M_dist.accumulate(id, ptr_fun(func_conv_type(f), &func_conv_type::operator())); + } + + template<class _Sp, class _Arg, class _Res> + void physfill(int id, const pointer_to_unary_member_function<_Sp, _Arg, _Res>& f) { + typedef unary_func_conv<pointer_to_unary_member_function<_Sp, _Arg, _Res> > func_conv_type; + _M_dist.accumulate(id, ptr_fun(func_conv_type(f), &func_conv_type::operator())); + } + + template<class _Sp, class _Arg, class _Res> + void physfill(int id, const pointer_to_unary_const_member_function<_Sp, _Arg, _Res>& f) { + typedef unary_func_conv<pointer_to_unary_const_member_function<_Sp, _Arg, _Res> > func_conv_type; + _M_dist.accumulate(id, ptr_fun(func_conv_type(f), &func_conv_type::operator())); + } + + + template<class _Arg> + void physfill(int id, const std::pointer_to_unary_function<_Arg, _Sample>& f) { + _M_dist.accumulate(id, f); + } + + template<class _Sp, class _Arg> + void physfill(int id, const pointer_to_unary_member_function<_Sp, _Arg, _Sample>& f) { + _M_dist.accumulate(id, f); + } + + template<class _Sp, class _Arg> + void physfill(int id, const pointer_to_unary_const_member_function<_Sp, _Arg, _Sample>& f) { + _M_dist.accumulate(id, f); + } + + template<class _Arg1, class _Arg2, class _Res> + void physfill(int id, const std::pointer_to_binary_function<_Arg1, _Arg2, _Res>& f, _Arg1 x, const _Weight& w) { + _M_dist.accumulate(id, f, x, _S_conv(w)); + } + + template<class _Sp, class _Arg1, class _Arg2, class _Res> + void physfill(int id, const pointer_to_binary_member_function<_Sp, _Arg1, _Arg2, _Res>& f, _Arg1 x, const _Weight& w) { + _M_dist.accumulate(id, f, x, _S_conv(w)); + } + + template<class _Sp, class _Arg1, class _Arg2, class _Res> + void physfill(int id, const pointer_to_binary_const_member_function<_Sp, _Arg1, _Arg2, _Res>& f, _Arg1 x, const _Weight& w) { + _M_dist.accumulate(id, f, x, _S_conv(w)); + } + + private: + _PhysDirac _M_sdirac; + }; + + template<class _Jet, typename _Weight, typename _Sample,template<class _Xp, class _Yp> class _Conv, class _Traits, class _PointTraits> + _Conv<_Weight, _Sample> basic_user<_Jet, histpoint1d, _Weight, _Sample, _Conv, _Traits, _PointTraits>::_S_conv; + + template<class _Jet, typename _Weight, typename _Sample, template<class _Xp, class _Yp> class _Conv, class _Traits, class _PointTraits> + void basic_user<_Jet, histpoint1d, _Weight, _Sample, _Conv, _Traits, _PointTraits>::_PhysDirac::accumulate() + { + typename std::map<int, smooth>::iterator iter = _M_smooth.begin(); + unsigned int ny; + double ya; + + while(iter != _M_smooth.end()) { + ny = iter -> second.Ny; + smooth& smth = iter -> second; + + if(ny != 0U) { + ya = (ny == 1U ? smth.yr : 0.5*(smth.yr + smth.ys/(ny-1U))); + _M_dbook -> accumulate(iter -> first, __helper_basic_user::_G_dirac, ya, smth.weight); + iter -> second.Ny = 0U; + } + ++iter; + } + } + + template<class _Jet, typename _Weight, typename _Sample, template<class _Xp, class _Yp> class _Conv, class _Traits, class _PointTraits> + void basic_user<_Jet, histpoint1d, _Weight, _Sample, _Conv, _Traits, _PointTraits>:: + phys(int id, const char *name, unsigned int nbin, double min, double max, double eps) + { + point_type *p = new point_type[nbin]; + double dx = 0.5*(max-min)/nbin; + + p[0].xmin = min; + for(unsigned int i = 0; i < nbin-1; i++) { + p[i].xmid = p[i].xmin + dx; + p[i].xmax = p[i+1].xmin = p[i].xmid + dx; + } + + p[nbin-1].xmid = p[nbin-1].xmin + dx; + p[nbin-1].xmax = p[nbin-1].xmid + dx; + + _M_dist.create(id, name, nbin, p); + _M_sdirac.create(id, 2.0*dx*eps); + + delete [] p; + } + + template<class _Jet, typename _Weight, typename _Sample, template<class _Xp, class _Yp> class _Conv, class _Traits, class _PointTraits> + void basic_user<_Jet, histpoint1d, _Weight, _Sample, _Conv, _Traits, _PointTraits>:: + phys(int id, const char *name, unsigned int nbin, const double *base, double round, double eps) + { + point_type *p = new point_type[nbin]; + + for(unsigned int i = 0; i < nbin; i++) { + p[i].xmin = base[i] - round; + p[i].xmid = base[i]; + p[i].xmax = base[i] + round; + } + + _M_dist.create(id, name, nbin, p); + _M_sdirac.create(id, round*eps); + + delete [] p; + } + + template<class _Jet, typename _Weight, typename _Sample, template<class _Xp, class _Yp> class _Conv, class _Traits, class _PointTraits> + void basic_user<_Jet, histpoint1d, _Weight, _Sample, _Conv, _Traits, _PointTraits>:: + phys(int id, const char *name, unsigned int nbin, const histpoint1d *base, double eps) + { + double tmp, round = base[0].xmax - base[0].xmin; + for(unsigned i = 1; i < nbin; i++) { + tmp = base[i].xmax - base[i].xmin; + if(tmp < round) round = tmp; + } + + _M_dist.create(id, name, nbin, base); + _M_sdirac.create(id, round*eps); + } + + + // Specialization: + // Two dimensional distribution with histogram support + // (_Point = histpoint2d) + + // Helper functions to compute Dirac delta distribution and step function distribution + namespace __helper_basic_user { + + struct __helper_point2d { + __helper_point2d(const double& __x, const double& __y) : x(__x), y(__y) {} + double x,y; + }; + + extern std::pointer_to_binary_function<__helper_point2d, const histpoint2d&, double> _G_hist2d_dd; + extern std::pointer_to_binary_function<__helper_point2d, const histpoint2d&, double> _G_hist2d_dh; + extern std::pointer_to_binary_function<__helper_point2d, const histpoint2d&, double> _G_hist2d_hd; + extern std::pointer_to_binary_function<__helper_point2d, const histpoint2d&, double> _G_hist2d_hh; + } // namespace __helper_basic_user + + + + template<class _Jet, typename _Weight, typename _Sample, template<class _Xp, class _Yp> class _Conv, class _Traits, class _PointTraits> + class basic_user<_Jet, histpoint2d, _Weight, _Sample, _Conv, _Traits, _PointTraits> + : public virtual basic_user_base<_Jet> + { + public: + // public types + typedef histpoint2d point_type; + typedef _Weight weight_type; + typedef _Sample sample_type; + typedef _Traits sample_traits; + typedef _PointTraits point_traits; + typedef distbook<_Sample, histpoint2d, _Traits, _PointTraits> distbook_type; + typedef _Conv<_Weight, _Sample> conversion_type; + + // destructor + virtual ~basic_user() {} + + protected: + // do any operetaions at the end of the event + void operations_at_the_end_of_event() { + ++_M_dist; + } + + // save the results in txt and binary mode + void write_result_txt(std::ostream& os) { + os<<_M_dist<<"\n"; + } + + void write_result_bin(std::ostream& os) { + write(os, _M_dist); + } + + void write_typeinfo(std::ostream& os) { + os<<typeid(distbook_type).name()<<"\n"; + } + + private: + // data members + distbook<_Sample, histpoint2d, _Traits, _PointTraits> _M_dist; + + protected: + // It is visible for the inhereted class. One can have some advanced + // conversion that requires special initialization. + static conversion_type _S_conv; + + // create an two dimensional distribution + void phys(int, const char *, unsigned int, double, double, unsigned int, double, double); + void phys(int, const char *, unsigned int, const double *, double, unsigned int, const double *, double); + void phys(int id, const char *name, unsigned int nbin, const histpoint2d *base) { + _M_dist.create(id, name, nbin, base); + } + + + // fill the two dimensional distributions (dirac delta and step function) + void physfilldd(int id, double x, double y, const _Weight& w) { + _M_dist.accumulate(id, __helper_basic_user::_G_hist2d_dd, __helper_basic_user::__helper_point2d(x,y), _S_conv(w)); + } + + void physfilldh(int id, double x, double y, const _Weight& w) { + _M_dist.accumulate(id, __helper_basic_user::_G_hist2d_dh, __helper_basic_user::__helper_point2d(x,y), _S_conv(w)); + } + + void physfillhd(int id, double x, double y, const _Weight& w) { + _M_dist.accumulate(id, __helper_basic_user::_G_hist2d_hd, __helper_basic_user::__helper_point2d(x,y), _S_conv(w)); + } + + void physfillhh(int id, double x, double y, const _Weight& w) { + _M_dist.accumulate(id, __helper_basic_user::_G_hist2d_hh, __helper_basic_user::__helper_point2d(x,y), _S_conv(w)); + } + + private: + template<class _Ptr> + struct unary_func_conv + { + typedef typename _Ptr::argument_type argument_type; + typedef typename _Ptr::result_type result_type; + + unary_func_conv(const _Ptr& f) + : _M_func(f) {} + + _Sample operator()(argument_type x) const { + return _S_conv(_M_func(x)); + } + + const _Ptr& _M_func; + }; + + protected: + // fill the distribution + template<class _Arg, class _Res> + void physfill(int id, const std::pointer_to_unary_function<_Arg, _Res>& f) { + typedef unary_func_conv<std::pointer_to_unary_function<_Arg, _Res> > func_conv_type; + _M_dist.accumulate(id, ptr_fun(func_conv_type(f), &func_conv_type::operator())); + } + + template<class _Sp, class _Arg, class _Res> + void physfill(int id, const pointer_to_unary_member_function<_Sp, _Arg, _Res>& f) { + typedef unary_func_conv<pointer_to_unary_member_function<_Sp, _Arg, _Res> > func_conv_type; + _M_dist.accumulate(id, ptr_fun(func_conv_type(f), &func_conv_type::operator())); + } + + template<class _Sp, class _Arg, class _Res> + void physfill(int id, const pointer_to_unary_const_member_function<_Sp, _Arg, _Res>& f) { + typedef unary_func_conv<pointer_to_unary_const_member_function<_Sp, _Arg, _Res> > func_conv_type; + _M_dist.accumulate(id, ptr_fun(func_conv_type(f), &func_conv_type::operator())); + } + + template<class _Arg> + void physfill(int id, const std::pointer_to_unary_function<_Arg, _Sample>& f) { + _M_dist.accumulate(id, f); + } + + template<class _Sp, class _Arg> + void physfill(int id, const pointer_to_unary_member_function<_Sp, _Arg, _Sample>& f) { + _M_dist.accumulate(id, f); + } + + template<class _Sp, class _Arg> + void physfill(int id, const pointer_to_unary_const_member_function<_Sp, _Arg, _Sample>& f) { + _M_dist.accumulate(id, f); + } + + template<class _Arg1, class _Arg2, class _Res> + void physfill(int id, const std::pointer_to_binary_function<_Arg1, _Arg2, _Res>& f, _Arg1 x, const _Weight& w) { + _M_dist.accumulate(id, f, x, _S_conv(w)); + } + + template<class _Sp, class _Arg1, class _Arg2, class _Res> + void physfill(int id, const pointer_to_binary_member_function<_Sp, _Arg1, _Arg2, _Res>& f, _Arg1 x, const _Weight& w) { + _M_dist.accumulate(id, f, x, _S_conv(w)); + } + + template<class _Sp, class _Arg1, class _Arg2, class _Res> + void physfill(int id, const pointer_to_binary_const_member_function<_Sp, _Arg1, _Arg2, _Res>& f, _Arg1 x, const _Weight& w) { + _M_dist.accumulate(id, f, x, _S_conv(w)); + } + }; + + + template<class _Jet, typename _Weight, typename _Sample, template<class _Xp, class _Yp> class _Conv, class _Traits, class _PointTraits> + _Conv<_Weight, _Sample> basic_user<_Jet, histpoint2d, _Weight, _Sample, _Conv, _Traits, _PointTraits>::_S_conv; + + + template<class _Jet, typename _Weight, typename _Sample, template<class _Xp, class _Yp> class _Conv, class _Traits, class _PointTraits> + void basic_user<_Jet, histpoint2d, _Weight, _Sample, _Conv, _Traits, _PointTraits>:: + phys(int id, const char *name, unsigned int nx, double xmin, double xmax, unsigned int ny, double ymin, double ymax) + { + point_type *p = new point_type[nx*ny]; + double xn,xd, xx, yn, yd, yx, dx = 0.5*(xmax-xmin)/nx, dy = 0.5*(ymax-ymin)/ny; + unsigned int idx; + + for(unsigned int i = 0; i < nx; i++) { + xn = xmin + i*2.0*dx; xd = xn + dx; xx = xd + dx; + for(unsigned int j = 0; j < ny; j++) { + idx = ny*i+j; + yn = ymin + j*2.0*dy; yd = yn + dy; yx = yd + dy; + p[idx].xmin = xn; p[idx].xmid = xd; p[idx].xmax = xx; + p[idx].ymin = yn; p[idx].ymid = yd; p[idx].ymax = yx; + } + } + + _M_dist.create(id, name, nx*ny, p); + + delete [] p; + } + + template<class _Jet, typename _Weight, typename _Sample, template<class _Xp, class _Yp> class _Conv, class _Traits, class _PointTraits> + void basic_user<_Jet, histpoint2d, _Weight, _Sample, _Conv, _Traits, _PointTraits>:: + phys(int id, const char *name, unsigned int nx, const double *xbase, double rx, unsigned int ny, const double *ybase, double ry) + { + point_type *p = new point_type[nx*ny]; + unsigned int idx; + + for(unsigned int i = 0; i < nx; i++) + for(unsigned int j = 0; j < ny; j++) { + idx = ny*i+j; + p[idx].xmin = xbase[i]-rx; + p[idx].xmid = xbase[i]; + p[idx].xmax = xbase[i]+rx; + + p[idx].ymin = ybase[j]-ry; + p[idx].ymid = ybase[j]; + p[idx].ymax = ybase[j]+ry; + } + + _M_dist.create(id, name, nx*ny, p); + + delete [] p; + } + + +} // namespace nlo + +#endif diff --git a/v2.6/generators/nlojet++/patches/nlojet++-4.1.3/nlo-core/bits/nlo-process_i1f0.h b/v2.6/generators/nlojet++/patches/nlojet++-4.1.3/nlo-core/bits/nlo-process_i1f0.h new file mode 100644 index 0000000000000000000000000000000000000000..499f8dd01d45fd44f9b0b441d3edac3198737d9b --- /dev/null +++ b/v2.6/generators/nlojet++/patches/nlojet++-4.1.3/nlo-core/bits/nlo-process_i1f0.h @@ -0,0 +1,370 @@ +// Copyright (C) 2002 Zoltan Nagy +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +#ifndef __NLO_PROCESS_I1F0_H__ +#define __NLO_PROCESS_I1F0_H__ 1 + + +// nlojet++ includes +#include <bits/nlo-dipole_mom.h> +#include <bits/nlo-process.h> + + + +namespace nlo { + + + // + // Declaraton of the abstract class process in the + // case of DIS. + template<typename _Weight, class _Event, class _EvenTraits> + class process<_Weight, _Event, _EvenTraits, 1U, 0U> + { + public: + // types + typedef _Weight weight_type; + typedef _Event event_type; + + // member access + unsigned int npar() const { return _M_npar;} + unsigned int npow() const { return _M_npow;} + double alpha() const { return _M_alpha;} + + // set the alpha parameter + void alpha(double __new_alpha) { _M_alpha = __new_alpha;} + + // number of quark flavours + unsigned int nu() const { return _M_nu;} + unsigned int nd() const { return _M_nd;} + unsigned int nf() const { return _M_nu + _M_nd;} + + // destructor + virtual ~process() {} + + // born contributions + virtual void born_term(const _Event&, _Weight&) = 0; + + // real contributions + virtual void real_term(const _Event&, _Weight&) = 0; + + // finite contributions (1-loop,...) + virtual void fini_term(double, double, const _Event&, _Weight *) = 0; + + // dipole contributions + virtual void dipole_term(const _Event&, const _Event&, int, int, int, _Weight&) = 0; + + // generate the dipole momenta + bool dipole_mom(const _Event&, int, int, int, _Event&); + + protected: + // constructors + explicit process(unsigned int np, unsigned int nw, unsigned int nu, + unsigned int nd, double al = 1.0) + : _M_npar(np), _M_npow(nw), _M_nu(nu), _M_nd(nd), _M_alpha(al) {} + + private: + // data members + unsigned int _M_npar, _M_npow, _M_nu, _M_nd; + double _M_alpha; + }; + + template<typename _Weight, class _Event, class _EvenTraits> + bool process<_Weight, _Event, _EvenTraits, 1U, 0U>:: + dipole_mom(const _Event& p, int i, int j, int k, _Event& q) + { + q[hadron(0)] = p[hadron(0)]; + if(i > 0 && j > 0 && k > 0) + return dipole_mom_fff<_Event>(_M_alpha, p, i, j, k, q); + else if(i > 0 && j > 0 && k == 0) + return dipole_mom_ffi<_Event>(_M_alpha, p, i, j, k, q); + else if(i == 0 && j > 0 && k > 0) + return dipole_mom_iff<_Event>(_M_alpha, p, i, j, k, q); + else return false; + } + + template<class _Weight> + struct pdf_and_coupling<_Weight, 1U, 0U> + { + // Destructor + virtual ~pdf_and_coupling() {} + + // The QCD coupling + virtual double alpha_qcd(unsigned int, double) = 0; + + // the parton distribution function + virtual _Weight pdf(double, double, unsigned int=2U, unsigned int=3U) = 0; + }; + + template<typename _Weight, class _Event, class _EvenTraits> + class amplitude<process<_Weight, _Event, _EvenTraits, 1U, 0U> > + { + public: + // public types + typedef process<_Weight, _Event, _EvenTraits, 1U, 0U> process_type; + typedef typename process_type::event_type event_type; + typedef typename process_type::weight_type weight_type; + typedef pdf_and_coupling<_Weight, 1U, 0U> pdf_type; + + // type of the contributions + enum contrib_type { notdef = -1, born = 0, real, sub, fini}; + enum integral_type { lo = 0, nlo}; + + // constructor + explicit amplitude(process_type *proc, integral_type itype) + : _M_proc(proc), _M_itype(itype) {} + + // leading order contribution + void leading_order(double w, const _Event& p) { + _M_p = &p; _M_weight = w; _M_calc = false; _M_contr = born; + } + + // next-to-leading order contributions + void next_to_leading_order_real(double w, const _Event& p) { + _M_p = &p; _M_weight = w; _M_calc = false; _M_contr = real; + } + + void next_to_leading_order_fini(double x, double xjac, double w, const _Event& p) + { + _M_p = &p; _M_weight = w; _M_calc = false; _M_contr = fini; + + // fini specific options + _M_fini.x = x; _M_fini.xjac = xjac; + _M_fini.mode = 0; + } + + void next_to_leading_order_finix() { _M_fini.mode = 0;} + void next_to_leading_order_fini1() { _M_fini.mode = 1;} + + void next_to_leading_order_sub(double w, const _Event& p, const _Event& dp, int i, int j, int k) + { + _M_p = &p; _M_weight = w; _M_calc = false; _M_contr = sub; + + // dipole specific options + _M_dipole.dp = &dp; _M_dipole.i = i; + _M_dipole.j = j; _M_dipole.k = k; + } + + // get the value of the current amplitude + _Weight operator()(pdf_type*, double, double, double=1.0) const; + _Weight operator()(pdf_type&, double, double, double=1.0) const; + + // get number of the jets + unsigned int npar() const { return _M_proc -> npar();} + unsigned int npow() const { return _M_proc -> npow();} + + // number of the active quark flavours + unsigned int nu() const { return _M_proc -> nu();} + unsigned int nd() const { return _M_proc -> nd();} + unsigned int nf() const { return _M_proc -> nf();} + + // get the contributionb type of the current amplitude + contrib_type contrib() const { return _M_contr;} + integral_type integral() const { return _M_itype;} + + //private: + public: + // pointer to the process + process_type *_M_proc; + + // store the current process type and function + contrib_type _M_contr; + integral_type _M_itype; + + // store the event + const _Event *_M_p; + double _M_weight; + + // value of the current amp + mutable bool _M_calc; + mutable _Weight _M_amp; + + // contribution specific variables + // dipole contribution + struct { + // dipole event + const _Event *dp; + + // dipole indices + int i, j, k; + + void operator()(process_type *proc, const _Event *p, _Weight& res) const { + proc -> dipole_term(*p, *dp, i, j, k, res); + } + } _M_dipole; + + // finite contributions + struct { + // finite type + unsigned int mode; + + // the x1, x2 integral + double x, xjac; + + // log of the scales + mutable double lxr, lxf; + + // scale independent decomposation + mutable _Weight amp[5]; + + void operator()(process_type *proc, const _Event *p) const { + proc -> fini_term(x, xjac, *p, amp); + } + + void finix(_Weight& res) const { + res = amp[0] + amp[2]*lxf; + } + + void fini1(_Weight& res) const { + res = amp[1] + amp[3]*lxf + amp[4]*lxr; + } + } _M_fini; + + // private member functions + _Weight update_scales(pdf_type *, double, double, double) const; + + // contributions + void amp_born() const; + void amp_real() const; + void amp_dipole() const; + void amp_fini() const; + }; + + + template<typename _Weight, class _Event, class _EvenTraits> + _Weight amplitude<process<_Weight, _Event, _EvenTraits, 1U, 0U> >:: + update_scales(pdf_type *pdf, double mr2, double mf2, double coef) const + { + const _Event& p = *_M_p; + double Q2 = 2.0*(p[-1]*p[-2]); + + if(_M_contr == fini) { + _M_fini.lxr = std::log(mr2/Q2); + _M_fini.lxf = std::log(mf2/Q2); + } + + //----- calculation the pdf ----- + double eta = (p[-1]*p[0])/(p[-1]*p[hadron(0)]); + + if(_M_contr == fini && _M_fini.mode == 0) + eta /= _M_fini.x; + + _Weight retval = pdf -> pdf(eta, mf2, this->nu(), this->nd()); + + //----- alpha_s calculation ------ + unsigned int aspow = _M_proc->npow(); + double as = pdf->alpha_qcd(this->nf(), mr2); + + if(_M_contr != born) ++aspow; + retval *= coef*std::pow(as, (int) aspow); + + return retval; + } + + + template<typename _Weight, class _Event, class _EvenTraits> + void amplitude<process<_Weight, _Event, _EvenTraits, 1U, 0U> >::amp_born() const + { + if(!_M_calc) { + //----- calculate the matrix element squares ----- + _M_proc -> born_term(*_M_p, _M_amp); + + //----- phase space weight ----- + _M_amp *= _M_weight; + _M_calc = true; + } + } + + template<typename _Weight, class _Event, class _EvenTraits> + void amplitude<process<_Weight, _Event, _EvenTraits, 1U, 0U> >::amp_real() const + { + if(!_M_calc) { + //----- calculate the matrix element squares ----- + _M_proc -> real_term(*_M_p, _M_amp); + + //----- phase space weight ----- + _M_amp *= _M_weight; + _M_calc = true; + } + } + + template<typename _Weight, class _Event, class _EvenTraits> + void amplitude<process<_Weight, _Event, _EvenTraits, 1U, 0U> >::amp_dipole() const + { + if(!_M_calc) { + //----- dipole contributions ----- + _M_dipole(_M_proc, _M_p, _M_amp); + + //----- phase space weight ----- + _M_amp *= _M_weight; + _M_calc = true; + } + } + + template<typename _Weight, class _Event, class _EvenTraits> + void amplitude<process<_Weight, _Event, _EvenTraits, 1U, 0U> >::amp_fini() const + { + if(!_M_calc) { + //----- calculate the matrix element squares ----- + _M_fini(_M_proc, _M_p); + + //----- phase space weight ----- + for(unsigned int i = 0; i < 5; i++) + _M_fini.amp[i] *= _M_weight; + _M_calc = true; + } + + switch(_M_fini.mode) { + case 0: _M_fini.finix(_M_amp); break; + case 1: _M_fini.fini1(_M_amp); break; + } + } + + template<typename _Weight, class _Event, class _EvenTraits> + _Weight amplitude<process<_Weight, _Event, _EvenTraits, 1U, 0U> >:: + operator()(pdf_type *pdf, double mr2, double mf2, double coef) const + { + _Weight fac = update_scales(pdf, mr2, mf2, coef); + + switch(_M_contr) { + case born: this -> amp_born(); break; + case real: this -> amp_real(); break; + case sub: this -> amp_dipole(); break; + case fini: this -> amp_fini(); break; + default: throw "amplitude<..., 1, 0> : no contribution defined"; break; + } + + return fac*_M_amp; + } + template<typename _Weight, class _Event, class _EvenTraits> + _Weight amplitude<process<_Weight, _Event, _EvenTraits, 1U, 0U> >:: + operator()(pdf_type& pdf, double mr2, double mf2, double coef) const + { + _Weight fac = update_scales(&pdf, mr2, mf2, coef); + + switch(_M_contr) { + case born: this -> amp_born(); break; + case real: this -> amp_real(); break; + case sub: this -> amp_dipole(); break; + case fini: this -> amp_fini(); break; + default: throw "amplitude<..., 1, 0> : no contribution defined"; break; + } + + return fac*_M_amp; + } + + +} // namespace nlo + +#endif diff --git a/v2.6/generators/nlojet++/patches/nlojet++-4.1.3/nlo-core/bits/nlo-process_i2f0.h b/v2.6/generators/nlojet++/patches/nlojet++-4.1.3/nlo-core/bits/nlo-process_i2f0.h new file mode 100644 index 0000000000000000000000000000000000000000..39f75006dfcd5143365e833feb02a57b0fd94df4 --- /dev/null +++ b/v2.6/generators/nlojet++/patches/nlojet++-4.1.3/nlo-core/bits/nlo-process_i2f0.h @@ -0,0 +1,392 @@ +// Copyright (C) 2002 Zoltan Nagy +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +#ifndef __NLO_PROCESS_I2F0_H__ +#define __NLO_PROCESS_I2F0_H__ 1 + + +// nlojet++ includes +#include <bits/nlo-dipole_mom.h> +#include <bits/nlo-process.h> + + + +namespace nlo { + + + // + // Declaraton of the abstract class process in the + // case of hadron-hadron collision. + template<typename _Weight, class _Event, class _EvenTraits> + class process<_Weight, _Event, _EvenTraits, 2U, 0U> + { + public: + // types + typedef _Weight weight_type; + typedef _Event event_type; + + // member access + unsigned int npar() const { return _M_npar;} + unsigned int npow() const { return _M_npow;} + double alpha() const { return _M_alpha;} + + // set the alpha parameter + void alpha(double __new_alpha) { _M_alpha = __new_alpha;} + + // number of quark flavours + unsigned int nu() const { return _M_nu;} + unsigned int nd() const { return _M_nd;} + unsigned int nf() const { return _M_nu + _M_nd;} + + // destructor + virtual ~process() {} + + // born contributions + virtual void born_term(const _Event&, _Weight&) = 0; + + // real contributions + virtual void real_term(const _Event&, _Weight&) = 0; + + // finite contributions (1-loop,...) + virtual void fini_term(double, double, double, double, const _Event&, _Weight *) = 0; + + // dipole contributions + virtual void dipole_term(const _Event&, const _Event&, int, int, int, _Weight&) = 0; + + // select the dipoles (extra contraints for the dipole indices + // e.g: in photoproduction k > -1 no photon spectator) + virtual bool dipole_index(int, int, int) { + return true; + } + + // generate the dipole momenta + bool dipole_mom(const _Event&, int, int, int, _Event&); + + protected: + // constructors + explicit process(unsigned int np, unsigned int nw, unsigned int nu, + unsigned int nd, double al = 1.0) + : _M_npar(np), _M_npow(nw), _M_nu(nu), _M_nd(nd), _M_alpha(al) {} + + private: + // data members + unsigned int _M_npar, _M_npow, _M_nu, _M_nd; + double _M_alpha; + }; + + template<typename _Weight, class _Event, class _EvenTraits> + bool process<_Weight, _Event, _EvenTraits, 2U, 0U>:: + dipole_mom(const _Event& p, int i, int j, int k, _Event& q) + { + q[hadron(-1)] = p[hadron(-1)]; + q[hadron( 0)] = p[hadron( 0)]; + if(i > 0 && j > 0 && k > 0) + return dipole_mom_fff<_Event>(_M_alpha, p, i, j, k, q); + else if(i > 0 && j > 0 && k <= 0) + return dipole_mom_ffi<_Event>(_M_alpha, p, i, j, k, q); + else if(i <= 0 && j > 0 && k > 0) + return dipole_mom_iff<_Event>(_M_alpha, p, i, j, k, q); + else if(i <= 0 && j > 0 && k <= 0) + return dipole_mom_ifi<_Event>(_M_alpha, p, i, j, k, q); + else return false; + } + + template<class _Weight> + struct pdf_and_coupling<_Weight, 2U, 0U> + { + // Destructor + virtual ~pdf_and_coupling() {} + + // The QCD coupling + virtual double alpha_qcd(unsigned int, double) = 0; + + // the parton distribution function + virtual _Weight pdf(double, double, double, unsigned int=2U, unsigned int=3U) = 0; + }; + + template<typename _Weight, class _Event, class _EvenTraits> + class amplitude<process<_Weight, _Event, _EvenTraits, 2U, 0U> > + { + public: + // public types + typedef process<_Weight, _Event, _EvenTraits, 2U, 0U> process_type; + typedef typename process_type::event_type event_type; + typedef typename process_type::weight_type weight_type; + typedef pdf_and_coupling<_Weight, 2U, 0U> pdf_type; + + // type of the contributions + enum contrib_type { notdef = -1, born = 0, real, sub, fini}; + enum integral_type { lo = 0, nlo}; + + // constructor + explicit amplitude(process_type *proc, integral_type itype) + : _M_proc(proc), _M_itype(itype) {} + + // leading order contribution + void leading_order(double w, const _Event& p) { + _M_p = &p; _M_weight = w; _M_calc = false; _M_contr = born; + } + + // next-to-leading order contributions + void next_to_leading_order_real(double w, const _Event& p) { + _M_p = &p; _M_weight = w; _M_calc = false; _M_contr = real; + } + + void next_to_leading_order_fini(double x1, double xjac1, double x2, double xjac2, double w, const _Event& p) + { + _M_p = &p; _M_weight = w; _M_calc = false; _M_contr = fini; + + // fini specific options + _M_fini.x1 = x1; _M_fini.xjac1 = xjac1; + _M_fini.x2 = x2; _M_fini.xjac2 = xjac2; + _M_fini.mode = 0; + } + + void next_to_leading_order_finix1() { _M_fini.mode = 0;} + void next_to_leading_order_finix2() { _M_fini.mode = 1;} + void next_to_leading_order_fini1() { _M_fini.mode = 2;} + + void next_to_leading_order_sub(double w, const _Event& p, const _Event& dp, int i, int j, int k) + { + _M_p = &p; _M_weight = w; _M_calc = false; _M_contr = sub; + + // dipole specific options + _M_dipole.dp = &dp; _M_dipole.i = i; + _M_dipole.j = j; _M_dipole.k = k; + } + + // get the value of the current amplitude + _Weight operator()(pdf_type*, double, double, double=1.0) const; + _Weight operator()(pdf_type&, double, double, double=1.0) const; + + // get number of the jets + unsigned int npar() const { return _M_proc -> npar();} + unsigned int npow() const { return _M_proc -> npow();} + + // number of quark flavours + unsigned int nu() const { return _M_proc -> nu();} + unsigned int nd() const { return _M_proc -> nd();} + unsigned int nf() const { return _M_proc -> nf();} + + // get the contributionb type of the current amplitude + contrib_type contrib() const { return _M_contr;} + integral_type integral() const { return _M_itype;} + +// private: + public: + // pointer to the process + process_type *_M_proc; + + // store the current process type and function + contrib_type _M_contr; + integral_type _M_itype; + + // store the event + const _Event *_M_p; + double _M_weight; + + // value of the current amp + mutable bool _M_calc; + mutable _Weight _M_amp; + + // contribution specific variables + // dipole contribution + struct { + // dipole event + const _Event *dp; + + // dipole indices + int i, j, k; + + void operator()(process_type *proc, const _Event *p, _Weight& res) const { + proc -> dipole_term(*p, *dp, i, j, k, res); + } + } _M_dipole; + + // finite contributions + struct { + // finite type + unsigned int mode; + + // the x1, x2 integral + double x1, xjac1, x2, xjac2; + + // log of the scales + mutable double lxr, lxf; + + // scale independent decomposation + mutable _Weight amp[7]; + + void operator()(process_type *proc, const _Event *p) const { + proc -> fini_term(x1, xjac1, x2, xjac2, *p, amp); + } + + void finix1(_Weight& res) const { + res = amp[0] + amp[3]*lxf; + } + + void finix2(_Weight& res) const { + res = amp[1] + amp[4]*lxf; + if (mode==1) { + int NSubproc = 7; + for(int proc=0;proc<NSubproc;proc++){ + if ( isnan(amp[1][proc]) ) std::cout<<"NLOJet++: ERROR! NaN in finix2 for M_proc=1, proc="<<proc<<std::endl; + if ( isnan(amp[4][proc]) ) std::cout<<"NLOJet++: ERROR! NaN in finix2 for M_proc=4, proc="<<proc<<std::endl; + } + } + } + + void fini1(_Weight& res) const { + res = amp[2] + amp[5]*lxf + amp[6]*lxr; + } + } _M_fini; + + // private member functions + _Weight update_scales(pdf_type *, double, double, double) const; + + // contributions + void amp_born() const; + void amp_real() const; + void amp_dipole() const; + void amp_fini() const; + }; + + + template<typename _Weight, class _Event, class _EvenTraits> + _Weight amplitude<process<_Weight, _Event, _EvenTraits, 2U, 0U> >:: + update_scales(pdf_type *pdf, double mr2, double mf2, double coef) const + { + if(_M_contr == fini) { + _M_fini.lxr = std::log(mr2); + _M_fini.lxf = std::log(mf2); + } + + //----- calculating the pdf ----- + const _Event& p = *_M_p; + double s = p[hadron(-1)]*p[hadron(0)]; + double eta1 = p[-1]*p[hadron(0)]/s; + double eta2 = p[0]*p[hadron(-1)]/s; + + if(_M_contr == fini && _M_fini.mode == 0) eta1 /= _M_fini.x1; + if(_M_contr == fini && _M_fini.mode == 1) eta2 /= _M_fini.x2; + + _Weight retval = pdf -> pdf(eta1, eta2, mf2, this->nu(), this->nd()); + + //----- calculating alpha_s ------ + unsigned int aspow = _M_proc->npow(); + double as = pdf->alpha_qcd(this->nf(), mr2); + + if(_M_contr != born) ++aspow; + retval *= coef*std::pow(as, (int) aspow); + + return retval; + } + + template<typename _Weight, class _Event, class _EvenTraits> + void amplitude<process<_Weight, _Event, _EvenTraits, 2U, 0U> >::amp_born() const + { + if(!_M_calc) { + //----- calculate the matrix element squares ----- + _M_proc -> born_term(*_M_p, _M_amp); + + //----- phase space weight ----- + _M_amp *= _M_weight; + _M_calc = true; + } + } + + template<typename _Weight, class _Event, class _EvenTraits> + void amplitude<process<_Weight, _Event, _EvenTraits, 2U, 0U> >::amp_real() const + { + if(!_M_calc) { + //----- calculate the matrix element squares ----- + _M_proc -> real_term(*_M_p, _M_amp); + + //----- phase space weight ----- + _M_amp *= _M_weight; + _M_calc = true; + } + } + + template<typename _Weight, class _Event, class _EvenTraits> + void amplitude<process<_Weight, _Event, _EvenTraits, 2U, 0U> >::amp_dipole() const + { + if(!_M_calc) { + //----- dipole contributions ----- + _M_dipole(_M_proc, _M_p, _M_amp); + + //----- phase space weight ----- + _M_amp *= _M_weight; + _M_calc = true; + } + } + + template<typename _Weight, class _Event, class _EvenTraits> + void amplitude<process<_Weight, _Event, _EvenTraits, 2U, 0U> >::amp_fini() const + { + if(!_M_calc) { + //----- calculate the matrix element squares ----- + _M_fini(_M_proc, _M_p); + + //----- phase space weight ----- + for(unsigned int i = 0; i < 7; i++) + _M_fini.amp[i] *= _M_weight; + _M_calc = true; + } + + switch(_M_fini.mode) { + case 0: _M_fini.finix1(_M_amp); break; + case 1: _M_fini.finix2(_M_amp); break; + case 2: _M_fini.fini1(_M_amp); break; + } + } + + template<typename _Weight, class _Event, class _EvenTraits> + _Weight amplitude<process<_Weight, _Event, _EvenTraits, 2U, 0U> >:: + operator()(pdf_type *pdf, double mr2, double mf2, double coef) const + { + _Weight fac = update_scales(pdf, mr2, mf2, coef); + + switch(_M_contr) { + case born: this -> amp_born(); break; + case real: this -> amp_real(); break; + case sub: this -> amp_dipole(); break; + case fini: this -> amp_fini(); break; + default: throw "amplitude<..., 2, 0> : no contribution defined"; break; + } + + return fac*_M_amp; + } + + template<typename _Weight, class _Event, class _EvenTraits> + _Weight amplitude<process<_Weight, _Event, _EvenTraits, 2U, 0U> >:: + operator()(pdf_type& pdf, double mr2, double mf2, double coef) const + { + _Weight fac = update_scales(&pdf, mr2, mf2, coef); + + switch(_M_contr) { + case born: this -> amp_born(); break; + case real: this -> amp_real(); break; + case sub: this -> amp_dipole(); break; + case fini: this -> amp_fini(); break; + default: throw "amplitude<..., 2, 0> : no contribution defined"; break; + } + + return fac*_M_amp; + } + +} // namespace nlo + +#endif diff --git a/v2.6/generators/nlojet++/patches/nlojet++-4.1.3/nlo-core/split.cc b/v2.6/generators/nlojet++/patches/nlojet++-4.1.3/nlo-core/split.cc new file mode 100644 index 0000000000000000000000000000000000000000..aab614f850e01eccba35f71a4c5caeaf376e236e --- /dev/null +++ b/v2.6/generators/nlojet++/patches/nlojet++-4.1.3/nlo-core/split.cc @@ -0,0 +1,224 @@ +// Copyright (C) 2002 Zoltan Nagy +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + +// nlo includes +#include "bits/nlo-color.h" +#include "bits/nlo-split.h" + + +#define mp(a,b) scalar_mp(a,b) +#define pm(a,b) scalar_pm(a,b) + + +namespace nlo { + + typedef std::pair<double, std::complex<double> > pair_type; + typedef const lorentzvector<double>& clvr_type; + + + void splitfff::set(clvr_type pi, clvr_type pj, clvr_type pk) + { + double sik = pi*pk, sjk = pk*pj; + + sij = pi*pj; + yijk = sij/(sij + sik + sjk); + zi = sik/(sik + sjk); + + lorentzvector<double> qij = pi + pj - yijk/(1.0 - yijk)*pk; + + hij = pm(pi,pj)*mp(qij,pi)*mp(qij,pj)/(mp(pi,pj)*pm(qij,pi)*pm(qij,pj)); + +// static int hijfffcnt = 0; +// hijfffcnt++; +// if (hijfffcnt > 168000 ) { +// std::cout << "Nlojet++:splitfff: hijfffcnt = " << hijfffcnt << std::endl; +// std::cout << "Nlojet++:splitfff: Numerator: pm(pi,pj) = " << pm(pi,pj) << ", mp(qij,pi) = " << mp(qij,pi) << ", mp(qij,pj) = " << mp(qij,pj) << ", numerator = " << (pm(pi,pj)*mp(qij,pi)*mp(qij,pj)) << std::endl; +// std::cout << "Nlojet++:splitfff: Denominator: mp(pi,pj) = " << mp(pi,pj) << ", pm(qij,pi) = " << pm(qij,pi) << ", pm(qij,pj) = " << pm(qij,pj) << ", denominator = " << (mp(pi,pj)*pm(qij,pi)*pm(qij,pj)) << std::endl; +// } + + static int hijfffnaninfcnt = 0; + if (isnan(real(hij)) || isnan(imag(hij)) || isinf(real(hij)) || isinf(imag(hij)) ) { + hijfffnaninfcnt++; + std::cout << "NloJet++_splitfff: ERROR! NaN or Inf in hij, hij = " << hij << std::endl; + std::cout << "NloJet++_splitfff: NaN or Inf in hij occurrence # = " << hijfffnaninfcnt << std::endl; + std::cout << "Nlojet++:splitfff: Numerator: pm(pi,pj) = " << pm(pi,pj) << ", mp(qij,pi) = " << mp(qij,pi) << ", mp(qij,pj) = " << mp(qij,pj) << ", numerator = " << (pm(pi,pj)*mp(qij,pi)*mp(qij,pj)) << std::endl; + std::cout << "Nlojet++:splitfff: Denominator: mp(pi,pj) = " << mp(pi,pj) << ", pm(qij,pi) = " << pm(qij,pi) << ", pm(qij,pj) = " << pm(qij,pj) << ", denominator = " << (mp(pi,pj)*pm(qij,pi)*pm(qij,pj)) << std::endl; + } + } + + pair_type splitfff::Vqg() const { + double vd = -(2.0/(1.0-zi*(1.0-yijk))-1.0-zi)/sij; + return pair_type(vd, 0.0); + } + + pair_type splitfff::Vqa() const + { + double color = 0.5/Nc; + double vd = -color*(1.0 - 2.0*zi*(1.0 - zi))/sij; + std::complex<double> vc = -2.0*color*zi*(1.0 - zi)*hij/sij; + if (isnan(real(hij)) || isnan(imag(hij)) || isinf(real(hij)) || isinf(imag(hij)) ) { + std::cout << "NloJet++_splitfff_Vqa: ERROR! NaN or Inf in hij, hij = " << hij << std::endl; + } + + return pair_type(vd, vc); + } + + pair_type splitfff::Vgg() const + { + double oy = 1.0-yijk, zj = 1.0-zi; + double vd = -(2.0/(1.0-zi*oy) + 2.0/(1.0-zj*oy) - 4.0 + 2.0*zi*zj)/sij; + std::complex<double> vc = 2.0*zi*zj*hij/sij; + if (isnan(real(hij)) || isnan(imag(hij)) || isinf(real(hij)) || isinf(imag(hij)) ) { + std::cout << "NloJet++_splitfff_Vgg: ERROR! NaN or Inf in hij, hij = " << hij << std::endl; + } + + return pair_type(vd, vc); + } + + void splitffi::set(clvr_type pi, clvr_type pj, clvr_type pa) + { + double sia = pi*pa, sja = pj*pa; + + sij = pi*pj; + xija = 1.0-sij/(sia+sja); + zi = sia/(sia+sja); + + lorentzvector<double> qij = pi + pj - (1.0 - xija)*pa; + + hij = pm(pi,pj)*mp(qij,pi)*mp(qij,pj)/(mp(pi,pj)*pm(qij,pi)*pm(qij,pj)); + +// static int hijfficnt = 0; +// hijfficnt++; +// if (hijfficnt > 168000 ) { +// std::cout << "Nlojet++:splitffi: hijfficnt = " << hijfficnt << std::endl; +// std::cout << "Nlojet++:splitffi: Numerator: pm(pi,pj) = " << pm(pi,pj) << ", mp(qij,pi) = " << mp(qij,pi) << ", mp(qij,pj) = " << mp(qij,pj) << ", numerator = " << (pm(pi,pj)*mp(qij,pi)*mp(qij,pj)) << std::endl; +// std::cout << "Nlojet++:splitffi: Denominator: mp(pi,pj) = " << mp(pi,pj) << ", pm(qij,pi) = " << pm(qij,pi) << ", pm(qij,pj) = " << pm(qij,pj) << ", denominator = " << (mp(pi,pj)*pm(qij,pi)*pm(qij,pj)) << std::endl; +// } + + static int hijffinaninfcnt = 0; + if (isnan(real(hij)) || isnan(imag(hij)) || isinf(real(hij)) || isinf(imag(hij)) ) { + hijffinaninfcnt++; + std::cout << "NloJet++_splitffi: ERROR! NaN or Inf in hij, hij = " << hij << std::endl; + std::cout << "NloJet++_splitffi: NaN or Inf in hij occurrence # = " << hijffinaninfcnt << std::endl; + std::cout << "Nlojet++:splitffi: Numerator: pm(pi,pj) = " << pm(pi,pj) << ", mp(qij,pi) = " << mp(qij,pi) << ", mp(qij,pj) = " << mp(qij,pj) << ", numerator = " << (pm(pi,pj)*mp(qij,pi)*mp(qij,pj)) << std::endl; + std::cout << "Nlojet++:splitffi: Denominator: mp(pi,pj) = " << mp(pi,pj) << ", pm(qij,pi) = " << pm(qij,pi) << ", pm(qij,pj) = " << pm(qij,pj) << ", denominator = " << (mp(pi,pj)*pm(qij,pi)*pm(qij,pj)) << std::endl; + } + + } + + pair_type splitffi::Vqg() const { + double vd = -(2.0/(2.0 - zi - xija) - 1.0 - zi)/(sij*xija); + return pair_type(vd, 0.0); + } + + pair_type splitffi::Vqa() const + { + double color = 0.5/Nc, zj = 1.0 - zi; + double vd = -color*(1.0 - 2.0*zi*zj)/(sij*xija); + std::complex<double> vc = -2.0*color*zi*zj*hij/(sij*xija); + if (isnan(real(hij)) || isnan(imag(hij)) || isinf(real(hij)) || isinf(imag(hij)) ) { + std::cout << "NloJet++_splitffi_Vqa: ERROR! NaN or Inf in hij, hij = " << hij << std::endl; + } + + return pair_type(vd, vc); + } + + pair_type splitffi::Vgg() const { + double ox = 1.0 - xija, zj = 1.0 - zi; + double vd = -(2.0/(zj + ox) + 2.0/(zi + ox) - 4.0 + 2.0*zi*zj)/(sij*xija); + std::complex<double> vc = 2.0*zi*zj*hij/(sij*xija); + if (isnan(real(hij)) || isnan(imag(hij)) || isinf(real(hij)) || isinf(imag(hij)) ) { + std::cout << "NloJet++_splitffi_Vgg: ERROR! NaN or Inf in hij, hij = " << hij << std::endl; + } + + return pair_type(vd, vc); + } + + void splitiff::set(clvr_type pa, clvr_type pi, clvr_type pk) + { + double sik = pi*pk, sak = pk*pa; + + sai = pa*pi; + xika = 1.0-sik/(sai+sak); + ui = sai/(sai+sak); + + hai = mp(pa,pi)*pm(pi,pk)*mp(pk,pa)/(pm(pa,pi)*mp(pi,pk)*pm(pk,pa)); + } + + pair_type splitiff::Vqg() const { + double vd = -(2.0/(1.0 - xika + ui) - 1.0 - xika)/(sai*xika); + return pair_type(vd, 0.0); + } + + pair_type splitiff::Vga() const { + double vd = -Nc*(1.0 - 2.0*xika*(1.0 - xika))/(Na*sai*xika); + return pair_type(vd, 0.0); + } + + pair_type splitiff::Vqq() const + { + double color = Cf/Nc, ox = 1.0 - xika; + double vd = -color*(xika + 2.0*ox/xika)/(sai*xika); + std::complex<double> vc = 2.0*color*ox/xika*hai/(sai*xika); + + return pair_type(vd, vc); + } + + pair_type splitiff::Vgg() const + { + double ox = 1.0 - xika; + double vd = -2.0*(1.0/(ox + ui) - 1.0 + (xika + 1.0/xika)*ox)/(sai*xika); + std::complex<double> vc = 2.0*ox/xika*hai/(sai*xika); + + return pair_type(vd, vc); + } + + void splitifi::set(clvr_type pa, clvr_type pi, clvr_type pb) + { + double sbi = pb*pi, sab = pa*pb; + sai = pa*pi; + xiab = 1.0 - (sai+sbi)/sab; + hai = mp(pa,pi)*pm(pi,pb)*mp(pb,pa)/(pm(pa,pi)*mp(pi,pb)*pm(pb,pa)); + } + + pair_type splitifi::Vqg() const { + double vd = -(2.0/(1.0 - xiab) - 1.0 - xiab)/(sai*xiab); + return pair_type(vd, 0.0); + } + + pair_type splitifi::Vga() const { + double vd = -Nc*(1.0 - 2.0*xiab*(1.0 - xiab))/(Na*sai*xiab); + return pair_type(vd, 0.0); + } + + pair_type splitifi::Vqq() const + { + double color = Cf/Nc, ox = 1.0 - xiab; + double vd = -color*(xiab + 2.0*ox/xiab)/(sai*xiab); + std::complex<double> vc = 2.0*color*ox/xiab*hai/(sai*xiab); + + return pair_type(vd, vc); + } + + pair_type splitifi::Vgg() const + { + double ox = 1.0 - xiab; + double vd = -2.0*(xiab/ox + (xiab + 1.0/xiab)*ox)/(sai*xiab); + std::complex<double> vc = 2.0*ox/xiab*hai/(sai*xiab); + + return pair_type(vd, vc); + } +} // namespace nlo diff --git a/v2.6/generators/nlojet++/patches/nlojet++-4.1.3/proc-dis/bits/dis-process.h b/v2.6/generators/nlojet++/patches/nlojet++-4.1.3/proc-dis/bits/dis-process.h new file mode 100644 index 0000000000000000000000000000000000000000..37d62dad1b851ff1864fb825b249dcd5f4f66820 --- /dev/null +++ b/v2.6/generators/nlojet++/patches/nlojet++-4.1.3/proc-dis/bits/dis-process.h @@ -0,0 +1,40 @@ +// Copyright (C) 2002 Zoltan Nagy +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +#ifndef __NLO_DIS_PROCESS_H__ +#define __NLO_DIS_PROCESS_H__ 1 + +#include <bits/dis-event.h> +#include <bits/dis-weight.h> +#include <bits/nlo-process_i1f0.h> + + +namespace nlo { + + // Shorthand notations + typedef process<weight_dis, event_dis> process_dis; + typedef amplitude<process_dis> amplitude_dis; + + class pdf_and_coupling_dis + : public pdf_and_coupling<weight_dis,1U,0U> + { + public: + virtual void hadron(double, double, unsigned int, unsigned int, double *) = 0; + weight_dis pdf(double, double, unsigned int=2U, unsigned int=3U); + }; + +} + +#endif diff --git a/v2.6/generators/nlojet++/patches/nlojet++-4.1.3/proc-hhc/bits/hhc-process.h b/v2.6/generators/nlojet++/patches/nlojet++-4.1.3/proc-hhc/bits/hhc-process.h new file mode 100644 index 0000000000000000000000000000000000000000..e27d04c018ed68165f2089e1c5354047e032be3d --- /dev/null +++ b/v2.6/generators/nlojet++/patches/nlojet++-4.1.3/proc-hhc/bits/hhc-process.h @@ -0,0 +1,40 @@ +// Copyright (C) 2002 Zoltan Nagy +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +#ifndef __NLO_HHC_PROCESS_H__ +#define __NLO_HHC_PROCESS_H__ 1 + +#include <bits/hhc-event.h> +#include <bits/hhc-weight.h> +#include <bits/nlo-process_i2f0.h> + + +namespace nlo { + + // Shorthand notations + typedef process<weight_hhc, event_hhc> process_hhc; + typedef amplitude<process_hhc> amplitude_hhc; + + class pdf_and_coupling_hhc + : public pdf_and_coupling<weight_hhc,2U,0U> + { + public: + virtual void hadronA(double, double, unsigned int, unsigned int, double *) = 0; + virtual void hadronB(double, double, unsigned int, unsigned int, double *) = 0; + weight_hhc pdf(double, double, double, unsigned int=2U, unsigned int=3U); + }; +} + +#endif diff --git a/v2.6/generators/nlojet++/patches/nlojet++-4.1.3/proc-hhc/hhc2jet.cc b/v2.6/generators/nlojet++/patches/nlojet++-4.1.3/proc-hhc/hhc2jet.cc new file mode 100644 index 0000000000000000000000000000000000000000..349c92eeeecc30fcf9df72e9b4ad3fc3893a9902 --- /dev/null +++ b/v2.6/generators/nlojet++/patches/nlojet++-4.1.3/proc-hhc/hhc2jet.cc @@ -0,0 +1,392 @@ +// Copyright (C) 2002 Zoltan Nagy +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +#include "hhc2jet.h" +#include "ampg4.h" +#include "ampg5.h" +#include "ampq2g2.h" +#include "ampq2g3.h" +#include "ampq4.h" +#include "ampq4g1.h" +#include "bits/nlo-color.h" + + +// PI_FACn = (2*pi)^(n-2) * 2^(n-2) +#define PI_FAC4 6234.18182617615598311119 +#define PI_FAC5 492231.26711055587175698733 + + + +namespace nlo { + + hhc2jet::dipole_func hhc2jet::_S_dipole[9] = + { &hhc2jet::_M_di1, &hhc2jet::_M_di2, &hhc2jet::_M_di3, + &hhc2jet::_M_d01, &hhc2jet::_M_d02, &hhc2jet::_M_d03, + &hhc2jet::_M_d12, &hhc2jet::_M_d13, &hhc2jet::_M_d23}; + + + hhc2jet::hhc2jet(const random_generator& rng, bool mchel, unsigned int nu, unsigned int nd, double al) + : process_hhc(2, 2, nu, nd, al), _hhc_jet_base(nu+nd), _M_mchel(mchel) + { + _M_g4 = new ampg4 (_M_ip, rng); + _M_q2g2 = new ampq2g2(_M_ip, rng); + _M_q4 = new ampq4 (_M_ip, rng); + + _M_g5 = new ampg5 (_M_ip, rng); + _M_q2g3 = new ampq2g3(_M_ip, rng); + _M_q4g1 = new ampq4g1(_M_ip, rng); + } + + hhc2jet::~hhc2jet() + { + if(_M_g5) delete _M_g5; + if(_M_q2g3) delete _M_q2g3; + if(_M_q4g1) delete _M_q4g1; + if(_M_g4) delete _M_g4; + if(_M_q2g2) delete _M_q2g2; + if(_M_q4) delete _M_q4; + } + + void hhc2jet::born_term(const event_type& p, weight_type& res) + { + _M_ip.calculate(p); + amp_tree(_M_g4, _M_q2g2, _M_q4, 0, res.begin()); + res *= PI_FAC4; + + for (int ikr = 0; ikr<7; ikr++) { + if (isnan(res[ikr]) || isinf(res[ikr])) { + std::cout << "NLOJet++_hhc2jet_born_term: NaN or Inf ERROR for ikr = " << ikr << ", res[ikr] = " << res[ikr] << std::endl; + } + } + + } + + void hhc2jet::real_term(const event_type& p, weight_type& res) + { + _M_ip.calculate(p); + amp_tree(_M_g5, _M_q2g3, _M_q4g1, 0, res.begin()); + res *= PI_FAC5; + + for (int ikr = 0; ikr<7; ikr++) { + if (isnan(res[ikr]) || isinf(res[ikr])) { + std::cout << "NLOJet++_hhc2jet_real_term: NaN or Inf ERROR for ikr = " << ikr << ", res[ikr] = " << res[ikr] << std::endl; + } + } + + } + + + void hhc2jet::fini_term(double x1, double xjac1, double x2, double xjac2, + const event_type& p, weight_type *res) + { + double al = alpha(); + static double loop[7]; + static su3_kp_i2 kp[7]; + + _M_ip.calculate(p); + amp_kp(al, _M_g4, _M_q2g2, _M_q4, kp); + + if(_M_mchel) amp_1loop_mch(_M_g4, _M_q2g2, _M_q4, loop); + else amp_1loop(_M_g4, _M_q2g2, _M_q4, loop); + + double s = p[hadron(-1)]*p[hadron(0)]; + double e1 = (p[-1]*p[hadron( 0)])/s; + double e2 = (p[ 0]*p[hadron(-1)])/s; + + //---- convolutions ---- + convolutions(e1, x1, xjac1, e2, x2, xjac2, al, kp, res); + + for(unsigned int i=0; i < 7; i++) { + //---- 1-loop contributions ---- + res[2][i] += kp[i].loop + loop[i]; + + //---- renormalization scale dependent term ---- + res[6][i] = 2.0*kp[i].tree*Gg(Nf); + } + + //---- overall Pi factors ---- + for(unsigned int i=0; i < 7; i++) + res[i] *= PI_FAC4; + + for (int ikr = 0; ikr<7; ikr++) { + for (int jkr = 0; jkr<7; jkr++) { + if (isnan(res[ikr][jkr]) || isinf(res[ikr][jkr])) { + std::cout << "NLOJet++_hhc2jet_fini_term: NaN or Inf ERROR for ikr = " << ikr << ", jkr =" << jkr << ", res[ikr][jkr] = " << res[ikr][jkr] << std::endl; + } + } + } + + } + + void hhc2jet::dipole_term(const event_type& p, const event_type& dp, + int i, int j, int k, weight_type& res) + { + typedef split_fin<lorentzvector<double> > _SplitF; + typedef split_ini<lorentzvector<double> > _SplitI; + + if(i <= 0) { + _M_sini = (k <= 0 ? (_SplitI *) &_M_sifi : (_SplitI *) &_M_siff); + _M_sini -> set(p[i], p[j], p[k]); + } else { + _M_sfin = (k <= 0 ? (_SplitF *) &_M_sffi : (_SplitF *) &_M_sfff); + _M_sfin -> set(p[i], p[j], p[k]); + } + + int kt = (k == 3 ? j : k); + int idx = (i==-1 ? j-1 : 2*i-(i*i-i)/2 + j+2); + + _M_ip.calculate(dp); + (this ->* _S_dipole[idx])(kt, i, res); + res *= PI_FAC5; + + for (int ikr = 0; ikr<7; ikr++) { + if (isnan(res[ikr]) || isinf(res[ikr])) { + std::cout << "NLOJet++_hhc2jet_dipole_term: NaN or Inf ERROR for ikr = " << ikr << ", res[ikr] = " << res[ikr] << std::endl; + std::cout << "NLOJet++_hhc2jet_dipole_term: kt = " << kt << ", idx = " << idx << std::endl; + } + } + + } + + // + // dipole functions + // +#define HHC_FQG Vqg = (_M_sfin -> Vqg()).first +#define HHC_FQA Vqa = (_M_sfin -> Vqa()).first +#define HHC_FGG Vgg = (_M_sfin -> Vgg()).first + +#define HHC_IQG Vqg = (_M_sini -> Vqg()).first +#define HHC_IQQ Vqq = (_M_sini -> Vqq()).first +#define HHC_IGA Vga = (_M_sini -> Vga()).first +#define HHC_IGG Vgg = (_M_sini -> Vgg()).first + +#define HHC_CCGG(amp,p1,p2) amp_ccgg(amp, kt, i, p1, p2, cc) +#define HHC_CCQG(amp,p1,p2) amp_ccqg(amp, kt, i, p1, p2, cc) +#define HHC_CCGQ(amp,p1,p2) amp_ccgq(amp, kt, i, p1, p2, cc) +#define HHC_CCAG(amp,p1,p2) amp_ccag(amp, kt, i, p1, p2, cc) +#define HHC_CCGA(amp,p1,p2) amp_ccga(amp, kt, i, p1, p2, cc) +#define HHC_CCQA(amp,p1,p2) amp_ccqa(amp, kt, i, p1, p2, cc) +#define HHC_CCAQ(amp,p1,p2) amp_ccaq(amp, kt, i, p1, p2, cc) + +#define HHC_CCQ4(p1,p2,p3,p4) amp_cc(_M_q4, kt, i, p1, p2, p3, p4, q4) + + + + void hhc2jet::_M_di1(int kt, int i, weight_type& d) + { + double cc[7], q4[2], HHC_IGG, HHC_IGA, HHC_IQQ, HHC_IQG; + + HHC_CCGG(_M_g4,1,2); + HHC_CCAG(_M_q2g2,2,1); + HHC_CCGA(_M_q2g2,2,1); + HHC_CCQA(_M_q2g2,1,2); + HHC_CCQ4(1,0,-1,2); + d[0] = Vgg*cc[0]/6.0 + Nf*Vga*cc[1]; + d[1] = Vqq*cc[0]/2.0; + d[2] = (Nf-1)*Vga*q4[0] + Vga*q4[1]/2.0; + d[3] = Vqq*cc[2]; + d[4] = Vqq*cc[2]/2.0; + d[5] = Vqg*cc[5]/6.0 + Vqq*cc[2]; + d[6] = Vqq*cc[2]; + + HHC_CCGG(_M_q2g2,2,1); + HHC_CCAQ(_M_q2g2,1,2); + d[1] += Vqq*cc[0]/2.0; + d[2] += Vga*cc[5]/2.0; + } + + void hhc2jet::_M_di2(int kt, int i, weight_type& d) + { + double cc[7], q4[2], HHC_IGG, HHC_IGA, HHC_IQG, HHC_IQQ; + + HHC_CCGG(_M_g4,1,2); + HHC_CCQG(_M_q2g2,1,2); + HHC_CCGQ(_M_q2g2,1,2); + HHC_CCQA(_M_q2g2,1,2); + HHC_CCQ4(2,0,1,-1); + d[0] = Vgg*cc[0]/6.0 + Nf*Vga*cc[1]; + d[1] = Vqg*cc[1]/2.0; + d[2] = Vgg*cc[2]/2.0 + (Nf-1)*Vga*q4[0] + Vga*q4[1]/2.0; + d[3] = 0.0; + d[4] = Vqq*cc[2]/2.0; + d[5] = Vqg*cc[5]/6.0; + d[6] = 0.0; + } + + void hhc2jet::_M_di3(int kt, int i, weight_type& d) + { + double cc[7], q4[2], HHC_IGG, HHC_IQG, HHC_IQQ, HHC_IGA; + + HHC_CCGG(_M_g4,1,2); + HHC_CCQA(_M_q2g2,1,2); + HHC_CCQG(_M_q2g2,1,2); + HHC_CCGQ(_M_q2g2,1,2); + HHC_CCQ4(-1,0,1,2); + d[0] = Vgg*cc[0]/6.0; + d[1] = Vqg*cc[1]/2.0; + d[2] = Vgg*cc[2]/2.0 + (Nf-1)*Vga*q4[0] + Vga*q4[1]/2.0; + d[5] = Vqg*cc[5]/6.0; + + HHC_CCGG(_M_q2g2,1,2); + HHC_CCQ4(0,-1,1,2); + d[0] += Nf*Vgg*cc[0]; + d[1] += (Nf-0.5)*Vqq*cc[0]; + d[5] += (Nf-1)*Vqg*q4[0] + Vqg*q4[1]; + + HHC_CCQ4(1,-1,2,0); + d[3] = Vqg*q4[0]; + d[4] = Vqg*q4[1]/2.0; + + HHC_CCQ4(1,-1,0,2); + d[6] = Vqg*q4[0]; + } + + void hhc2jet::_M_d01(int kt, int i, weight_type& d) + { + double cc[7], q4[2], HHC_IGG, HHC_IGA, HHC_IQG, HHC_IQQ; + + HHC_CCGG(_M_g4,1,2); + HHC_CCQG(_M_q2g2,2,1); + HHC_CCGA(_M_q2g2,2,1); + HHC_CCQA(_M_q2g2,2,1); + HHC_CCQ4(1,-1,0,2); + d[0] = Vgg*cc[0]/6.0 + Nf*Vga*cc[2]; + d[1] = Vga*(cc[5]/2.0 + (Nf-1)*q4[0] + q4[1]/2.0); + d[2] = Vqq*cc[0]/2.0; + d[3] = 0.0; + d[4] = Vqq*cc[1]/2.0; + d[5] = Vqg*cc[5]/6.0; + d[6] = 0.0; + + HHC_CCGG(_M_q2g2,1,2); + d[2] += Vqq*cc[0]/2.0; + } + + void hhc2jet::_M_d02(int kt, int i, weight_type& d) + { + double cc[7], q4[2], HHC_IGG, HHC_IGA, HHC_IQG, HHC_IQQ; + + HHC_CCGG(_M_g4,1,2); + HHC_CCQG(_M_q2g2,1,2); + HHC_CCGQ(_M_q2g2,1,2); + HHC_CCQA(_M_q2g2,1,2); + HHC_CCQ4(2,-1,1,0); + d[0] = Vgg*cc[0]/6.0 + Nf*Vga*cc[2]; + d[1] = Vgg*cc[1]/2.0 + Vga*((Nf-1)*q4[0] + q4[1]/2.0); + d[2] = Vqg*cc[2]/2.0; + d[3] = Vqq*cc[1]; + d[4] = Vqq*cc[1]/2.0; + d[5] = Vqg*cc[5]/6.0 + Vqq*cc[1]; + d[6] = Vqq*cc[1]; + } + + void hhc2jet::_M_d03(int kt, int i, weight_type& d) + { + double cc[7], q4[2], HHC_IGG, HHC_IGA, HHC_IQG, HHC_IQQ; + + HHC_CCGG(_M_g4,1,2); + HHC_CCQA(_M_q2g2,1,2); + HHC_CCQG(_M_q2g2,1,2); + HHC_CCGQ(_M_q2g2,1,2); + HHC_CCQ4(0,-1,1,2); + d[0] = Vgg*cc[0]/6.0; + d[1] = Vgg*cc[1]/2.0 + Vga*((Nf-1)*q4[0] + q4[1]/2.0); + d[2] = Vqg*cc[2]/2.0; + d[5] = Vqg*cc[5]/6.0 + (Nf-1)*Vqg*q4[0] + Vqg*q4[1]; + + HHC_CCGG(_M_q2g2,1,2); + d[0] += Nf*Vgg*cc[0]; + d[2] += (Nf-0.5)*Vqq*cc[0]; + + HHC_CCQ4(1,-1,2,0); + d[3] = Vqg*q4[0]; + d[4] = Vqg*q4[1]/2.0; + + HHC_CCQ4(1,-1,0,2); + d[6] = Vqg*q4[0]; + } + + void hhc2jet::_M_d12(int kt, int i, weight_type& d) + { + double cc[7], HHC_FGG, HHC_FQA, HHC_FQG; + + HHC_CCGG(_M_g4,1,2); + HHC_CCQG(_M_q2g2,1,2); + HHC_CCGQ(_M_q2g2,1,2); + HHC_CCQA(_M_q2g2,1,2); + d[0] = Vgg*cc[0]/6.0 + Nf*Vqa*cc[0]; + d[1] = Vqg*cc[1]/2.0; + d[2] = Vqg*cc[2]/2.0; + d[3] = 0.0; + d[4] = 0.0; + d[5] = Vgg*cc[5]/6.0 + Nf*Vqa*cc[5]; + d[6] = 0.0; + + HHC_CCQG(_M_q2g2,2,1); + HHC_CCGQ(_M_q2g2,2,1); + d[1] += Vqa*(Nf-0.5)*cc[1]; + d[2] += Vqa*(Nf-0.5)*cc[2]; + } + + void hhc2jet::_M_d13(int kt, int i, weight_type& d) + { + double cc[7], q4[2], HHC_FGG, HHC_FQG; + + HHC_CCGG(_M_g4,1,2); + HHC_CCQG(_M_q2g2,1,2); + HHC_CCGQ(_M_q2g2,1,2); + HHC_CCQA(_M_q2g2,1,2); + HHC_CCQ4(0,-1,1,2); + d[0] = Vgg*cc[0]/6.0; + d[1] = Vqg*cc[1]/2.0; + d[2] = Vqg*cc[2]/2.0; + d[5] = Vgg*cc[5]/6.0 + (Nf-1)*Vqg*q4[0] + Vqg*q4[1]; + + HHC_CCGG(_M_q2g2,1,2); + d[0] += Nf*Vqg*cc[0]; + + HHC_CCQ4(1,-1,2,0); + d[3] = Vqg*q4[0]; + d[4] = Vqg*q4[1]/2.0; + + HHC_CCQ4(1,-1,0,2); + d[6] = Vqg*q4[0]; + } + + void hhc2jet::_M_d23(int kt, int i, weight_type& d) + { + double cc[7], q4[2], HHC_FGG, HHC_FQG, HHC_FQA; + + HHC_CCGG(_M_g4,1,2); + HHC_CCQG(_M_q2g2,1,2); + HHC_CCGQ(_M_q2g2,1,2); + HHC_CCQA(_M_q2g2,1,2); + HHC_CCQ4(0,-1,1,2); + d[0] = Vgg*cc[0]/6.0; + d[1] = (Vgg + Vqa)*cc[1]/2.0; + d[2] = (Vgg + Vqa)*cc[2]/2.0; + d[5] = Vgg*cc[5]/6.0 + (Nf-1)*Vqg*q4[0] + Vqg*q4[1]; + + HHC_CCGG(_M_q2g2,1,2); + d[0] += Nf*Vqg*cc[0]; + + HHC_CCQ4(1,-1,2,0); + d[3] = Vqg*q4[0]; + d[4] = Vqg*q4[1]/2.0; + + HHC_CCQ4(1,-1,0,2); + d[6] = Vqg*q4[0]; + } +} // namespace nlo diff --git a/v2.6/generators/nlojet++/patches/nlojet++-4.1.3/proc-hhc/hhc3jet.cc b/v2.6/generators/nlojet++/patches/nlojet++-4.1.3/proc-hhc/hhc3jet.cc new file mode 100644 index 0000000000000000000000000000000000000000..55c296782ce45c0374cb54f8832a9c6cb2993926 --- /dev/null +++ b/v2.6/generators/nlojet++/patches/nlojet++-4.1.3/proc-hhc/hhc3jet.cc @@ -0,0 +1,669 @@ +// Copyright (C) 2002 Zoltan Nagy +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +#include "hhc3jet.h" +#include "ampg5.h" +#include "ampg6.h" +#include "ampq2g3.h" +#include "ampq2g4.h" +#include "ampq4g1.h" +#include "ampq4g2.h" +#include "ampq6.h" +#include "bits/nlo-color.h" + + +// PI_FACn = (2*pi)^(n-2) * 2^(n-2) +#define PI_FAC5 492231.26711055587175698733 +#define PI_FAC6 38865023.041825071132937 + + + +namespace nlo { + + + hhc3jet::dipole_func hhc3jet::_S_dipole[14] = + { &hhc3jet::_M_di1, &hhc3jet::_M_di2, &hhc3jet::_M_di3, &hhc3jet::_M_di4, + &hhc3jet::_M_d01, &hhc3jet::_M_d02, &hhc3jet::_M_d03, &hhc3jet::_M_d04, + &hhc3jet::_M_d12, &hhc3jet::_M_d13, &hhc3jet::_M_d14, &hhc3jet::_M_d23, + &hhc3jet::_M_d24, &hhc3jet::_M_d34}; + + + hhc3jet::hhc3jet(const random_generator& rng, bool mchel, unsigned int nu, unsigned int nd, double al) + : process_hhc(3, 3, nu, nd, al), _hhc_jet_base(nu+nd), _M_mchel(mchel) + { + _M_g5 = new ampg5 (_M_ip, rng); + _M_q2g3 = new ampq2g3(_M_ip, rng); + _M_q4g1 = new ampq4g1(_M_ip, rng); + + _M_g6 = new ampg6 (_M_ip, rng); + _M_q2g4 = new ampq2g4(_M_ip, rng); + _M_q4g2 = new ampq4g2(_M_ip, rng); + _M_q6 = new ampq6 (_M_ip, rng); + } + + hhc3jet::~hhc3jet() + { + if(_M_g5) delete _M_g5; + if(_M_q2g3) delete _M_q2g3; + if(_M_q4g1) delete _M_q4g1; + if(_M_g6) delete _M_g6; + if(_M_q2g4) delete _M_q2g4; + if(_M_q4g2) delete _M_q4g2; + if(_M_q6) delete _M_q6; + } + + void hhc3jet::born_term(const event_type& p, weight_type& res) + { + _M_ip.calculate(p); + amp_tree(_M_g5, _M_q2g3, _M_q4g1, 0, res.begin()); + res *= PI_FAC5; + + for (int ikr = 0; ikr<7; ikr++) { + if (isnan(res[ikr]) || isinf(res[ikr])) { + std::cout << "NLOJet++_hhc3jet_born_term: NaN or Inf ERROR for ikr = " << ikr << ", res[ikr] = " << res[ikr] << std::endl; + } + } + + } + + void hhc3jet::real_term(const event_type& p, weight_type& res) + { + _M_ip.calculate(p); + amp_tree(_M_g6, _M_q2g4, _M_q4g2, _M_q6, 0, res.begin()); + res *= PI_FAC6; + + for (int ikr = 0; ikr<7; ikr++) { + if (isnan(res[ikr]) || isinf(res[ikr])) { + std::cout << "NLOJet++_hhc3jet_real_term: NaN or Inf ERROR for ikr = " << ikr << ", res[ikr] = " << res[ikr] << std::endl; + } + } + + } + + void hhc3jet::fini_term(double x1, double xjac1, double x2, double xjac2, + const event_type& p, weight_type *res) + { + double al = alpha(); + static double loop[7]; + static su3_kp_i2 kp[7]; + + _M_ip.calculate(p); + amp_kp(al, _M_g5, _M_q2g3, _M_q4g1, kp); + + if(_M_mchel) amp_1loop_mch(_M_g5, _M_q2g3, _M_q4g1, loop); + else amp_1loop(_M_g5, _M_q2g3, _M_q4g1, loop); + + double s = p[hadron(-1)]*p[hadron(0)]; + double e1 = (p[-1]*p[hadron( 0)])/s; + double e2 = (p[ 0]*p[hadron(-1)])/s; + + //---- convolutions ---- + convolutions(e1, x1, xjac1, e2, x2, xjac2, al, kp, res); + + for(unsigned int i=0; i < 7; i++) { + //---- 1-loop contributions ---- + res[2][i] += kp[i].loop + loop[i]; + + //---- renormalization scale dependent term ---- + res[6][i] = 3.0*kp[i].tree*Gg(Nf); + } + + //---- overall Pi factors ---- + for(unsigned int i=0; i < 7; i++) + res[i] *= PI_FAC5; + + for (int ikr = 0; ikr<7; ikr++) { + for (int jkr = 0; jkr<7; jkr++) { + if (isnan(res[ikr][jkr]) || isinf(res[ikr][jkr])) { + std::cout << "NLOJet++_hhc3jet_fini_term: NaN or Inf ERROR for ikr = " << ikr << ", jkr =" << jkr << ", res[ikr][jkr] = " << res[ikr][jkr] << std::endl; + } + } + } + } + + void hhc3jet::dipole_term(const event_type& p, const event_type& dp, + int i, int j, int k, weight_type& res) + { + typedef split_fin<lorentzvector<double> > _SplitF; + typedef split_ini<lorentzvector<double> > _SplitI; + + if(i <= 0) { + _M_sini = (k <= 0 ? (_SplitI *) &_M_sifi : (_SplitI *) &_M_siff); + _M_sini -> set(p[i], p[j], p[k]); + } else { + _M_sfin = (k <= 0 ? (_SplitF *) &_M_sffi : (_SplitF *) &_M_sfff); + _M_sfin -> set(p[i], p[j], p[k]); + } + + int kt = (k == 4 ? j : k); + int idx = (i==-1 ? j-1 : 3*i-(i*i-i)/2 + j+3); + + _M_ip.calculate(dp); + (this ->* _S_dipole[idx])(kt, i, res); + + for (int ikr = 0; ikr<7; ikr++) { + if (isnan(res[ikr]) || isinf(res[ikr])) { + std::cout << "NLOJet++_hhc3jet_dipole_term: NaN or Inf ERROR for ikr = " << ikr << ", res[ikr] = " << res[ikr] << std::endl; + std::cout << "NLOJet++_hhc3jet_dipole_term: kt = " << kt << ", idx = " << idx << std::endl; + } + } + + res *= PI_FAC6; + } + + + // + // dipole functions + // + namespace _NLO_Pair_Tools { + typedef std::pair<double, std::complex<double> > _Pair; + + inline double operator*(const _Pair& v, const _Pair& cc) { + return v.first*cc.first + 2.0*real(v.second*cc.second); + } + + inline _Pair operator*(const _Pair& v, const double& cc) { + return _Pair(v.first*cc, v.second*cc); + } + + inline _Pair operator*(const double& cc, const _Pair& v) { + return _Pair(v.first*cc, v.second*cc); + } + + inline _Pair operator/(const _Pair& v, const double& cc) { + return _Pair(v.first/cc, v.second/cc); + } + } + + using namespace _NLO_Pair_Tools; + +#define HHC_FQG Vqg(_M_sfin -> Vqg()) +#define HHC_FQA Vqa(_M_sfin -> Vqa()) +#define HHC_FGG Vgg(_M_sfin -> Vgg()) + +#define HHC_IQG Vqg(_M_sini -> Vqg()) +#define HHC_IQQ Vqq(_M_sini -> Vqq()) +#define HHC_IGA Vga(_M_sini -> Vga()) +#define HHC_IGG Vgg(_M_sini -> Vgg()) + +#define HHC_CCGG(amp,p1,p2,p3) amp_ccgg(amp, kt, i, p1, p2, p3, cc) +#define HHC_CCQG(amp,p1,p2,p3) amp_ccqg(amp, kt, i, p1, p2, p3, cc) +#define HHC_CCGQ(amp,p1,p2,p3) amp_ccgq(amp, kt, i, p1, p2, p3, cc) +#define HHC_CCAG(amp,p1,p2,p3) amp_ccag(amp, kt, i, p1, p2, p3, cc) +#define HHC_CCGA(amp,p1,p2,p3) amp_ccga(amp, kt, i, p1, p2, p3, cc) +#define HHC_CCQA(amp,p1,p2,p3) amp_ccqa(amp, kt, i, p1, p2, p3, cc) +#define HHC_CCAQ(amp,p1,p2,p3) amp_ccaq(amp, kt, i, p1, p2, p3, cc) + +#define HHC_CCQ4G1(p1,p2,p3,p4,p5) \ + amp_cc(_M_q4g1, kt, i, p1, p2, p3, p4, p5, q4g1) + + + void hhc3jet::_M_di1(int kt, int i, weight_type& d) + { + _Pair cc[7], q4g1[2], HHC_IGG, HHC_IGA, HHC_IQQ, HHC_IQG; + + HHC_CCGG(_M_g5,1,2,3); + HHC_CCAG(_M_q2g3,2,1,3); + HHC_CCGQ(_M_q2g3,2,1,3); + HHC_CCAQ(_M_q2g3,1,2,3); + HHC_CCQ4G1(-1,2,3,1,0); + d[0] = (Vgg*cc[0])/24.0 + Nf*(Vga*cc[1])/2.0; + d[0] += Nf*(Nf-1)*(Vga*q4g1[0])/2.0 + Nf*(Vga*q4g1[1])/4.0; + d[1] = (Vqq*cc[0])/6.0; + d[2] = (Vga*cc[5])/6.0; + d[3] = (Vqq*cc[2])/2.0; + d[4] = (Vqq*cc[2])/4.0; + d[5] = (Vqg*cc[5])/24.0 + (Vqq*cc[2])/2.0; + d[6] = (Vqq*cc[2])/2.0; + + HHC_CCGG(_M_q2g3,3,2,1); + HHC_CCQ4G1(3,0,-1,2,1); + d[1] += (Vqq*cc[0])/2.0; + d[2] += (Nf-1)*(Vga*q4g1[0]) + (Vga*q4g1[1])/2.0; + + HHC_CCQ4G1(0,2,3,1,-1); + d[5] += (Nf-1)*(Vqq*q4g1[0]) + (Vqq*q4g1[1])/4.0; + d[6] += (Nf-1.5)*(Vqq*q4g1[0]) + (Vqq*q4g1[1])/2.0; + + HHC_CCQ4G1(2,0,3,1,-1); + d[3] += (Nf-1.5)*(Vqq*q4g1[0]); + d[4] += (Nf-1)*(Vqq*q4g1[0])/2.0 + (Vqq*q4g1[1])/6.0; + } + + void hhc3jet::_M_di2(int kt, int i, weight_type& d) + { + _Pair cc[7], q4g1[2], HHC_IGG, HHC_IGA, HHC_IQG, HHC_IQQ; + + HHC_CCGG(_M_g5,1,2,3); + HHC_CCQG(_M_q2g3,1,2,3); + HHC_CCGQ(_M_q2g3,1,2,3); + HHC_CCQA(_M_q2g3,1,2,3); + HHC_CCQ4G1(1,-1,3,2,0); + d[0] = (Vgg*cc[0])/24.0 + Nf*(Vga*cc[1])/2.0; + d[0] += Nf*(Nf-1)*(Vga*q4g1[0])/2.0 + Nf*(Vga*q4g1[1])/4.0; + d[1] = (Vqg*cc[1])/6.0; + d[2] = (Vgg*cc[2])/6.0; + d[3] = 0.0; + d[4] = (Vqq*cc[2])/4.0; + d[5] = (Vqg*cc[5])/24.0; + d[6] = 0.0; + + HHC_CCQ4G1(3,0,1,-1,2); + d[2] += (Nf-1)*(Vga*q4g1[0]) + (Vga*q4g1[1])/2.0; + + HHC_CCQ4G1(1,0,3,2,-1); + d[4] += (Nf-1)*(Vqq*q4g1[0])/2.0 + (Vqq*q4g1[1])/6.0; + } + + void hhc3jet::_M_di3(int kt, int i, weight_type& d) + { + _Pair cc[7], q4g1[2], HHC_IGG, HHC_IQG, HHC_IGA, HHC_IQQ; + + HHC_CCGG(_M_g5,1,2,3); + HHC_CCQG(_M_q2g3,1,2,3); + HHC_CCGQ(_M_q2g3,1,2,3); + HHC_CCQA(_M_q2g3,1,2,3); + HHC_CCQ4G1(1,2,-1,3,0); + d[0] = (Vgg*cc[0])/24.0; + d[0] += Nf*(Nf-1)*(Vga*q4g1[0])/2.0 + Nf*(Vga*q4g1[1])/4.0; + d[1] = (Vqg*cc[1])/6.0; + d[2] = (Vgg*cc[2])/6.0; + d[5] = (Vqg*cc[5])/24.0; + + HHC_CCGG(_M_q2g3,1,2,3); + HHC_CCQ4G1(-1,0,1,2,3); + d[0] += Nf*(Vgg*cc[0])/2.0; + d[1] += (Nf-0.5)*(Vqq*cc[0]); + d[2] += (Nf-1)*(Vga*q4g1[0]) + (Vga*q4g1[1])/2.0; + + HHC_CCQ4G1(1,-1,2,0,3); + d[3] = (Vqg*q4g1[0])/2.0; + d[4] = (Vqg*q4g1[1])/4.0; + + HHC_CCQ4G1(0,-1,1,2,3); + d[5] += (Nf-1)*(Vqg*q4g1[0])/2.0 + (Vqg*q4g1[1])/2.0; + + HHC_CCQ4G1(1,-1,0,2,3); + d[6] = (Vqg*q4g1[0])/2.0; + + HHC_CCQ4G1(0,2,1,3,-1); + d[5] += (Vqq*q4g1[1])/4.0; + d[6] += (Vqq*q4g1[0])/2.0; + + HHC_CCQ4G1(1,3,2,0,-1); + d[3] += (Vqq*q4g1[0])/2.0; + d[4] += (Vqq*q4g1[1])/6.0; + } + + void hhc3jet::_M_di4(int kt, int i, weight_type& d) + { + _Pair cc[7], q4g1[2], HHC_IGG, HHC_IQG, HHC_IGA; + + HHC_CCGG(_M_g5,1,2,3); + HHC_CCQG(_M_q2g3,1,2,3); + HHC_CCGQ(_M_q2g3,1,2,3); + HHC_CCQA(_M_q2g3,1,2,3); + HHC_CCQ4G1(1,2,3,-1,0); + d[0] = (Vgg*cc[0])/24.0; + d[0] += Nf*(Nf-1)*(Vga*q4g1[0])/2.0 + Nf*(Vga*q4g1[1])/4.0; + d[1] = (Vqg*cc[1])/6.0; + d[2] = (Vgg*cc[2])/6.0; + d[5] = (Vqg*cc[5])/24.0; + + HHC_CCGG(_M_q2g3,1,2,3); + HHC_CCQ4G1(3,-1,1,2,0); + d[0] += Nf*(Vgg*cc[0])/2.0; + d[1] += (Nf-1)*(Vqg*q4g1[0]) + (Vqg*q4g1[1])/2.0; + + HHC_CCQ4G1(3,0,1,2,-1); + d[2] += (Nf-1)*(Vgg*q4g1[0]) + (Vgg*q4g1[1])/2.0; + + HHC_CCQ4G1(1,-1,2,0,3); + d[3] = (Vqg*q4g1[0])/2.0; + d[4] = (Vqg*q4g1[1])/4.0; + + HHC_CCQ4G1(0,-1,1,2,3); + d[5] += (Nf-1)*(Vqg*q4g1[0])/2.0 + (Vqg*q4g1[1])/2.0; + + HHC_CCQ4G1(1,-1,0,2,3); + d[6] = (Vqg*q4g1[0])/2.0; + } + + void hhc3jet::_M_d01(int kt, int i, weight_type& d) + { + _Pair cc[7], q4g1[2], HHC_IGG, HHC_IGA, HHC_IQQ, HHC_IQG; + + HHC_CCGG(_M_g5,1,2,3); + HHC_CCQG(_M_q2g3,2,1,3); + HHC_CCGA(_M_q2g3,2,1,3); + HHC_CCQA(_M_q2g3,1,2,3); + HHC_CCQ4G1(0,2,3,1,-1); + d[0] = (Vgg*cc[0])/24.0 + Nf*(Vga*cc[2])/2.0; + d[0] += Nf*(Nf-1)*(Vga*q4g1[0])/2.0 + Nf*(Vga*q4g1[1])/4.0; + d[1] = (Vga*cc[5])/6.0; + d[2] = (Vqq*cc[0])/6.0; + d[3] = 0.0; + d[4] = (Vqq*cc[1])/4.0; + d[5] = (Vqg*cc[5])/24.0; + d[6] = 0.0; + + HHC_CCGG(_M_q2g3,3,2,1); + HHC_CCQ4G1(3,-1,0,2,1); + d[1] += (Nf-1)*(Vga*q4g1[0]) + (Vga*q4g1[1])/2.0; + d[2] += (Vqq*cc[0])/2.0; + + HHC_CCQ4G1(2,-1,3,1,0); + d[4] += (Nf-1)*(Vqq*q4g1[0])/2.0 + (Vqq*q4g1[1])/6.0; + } + + void hhc3jet::_M_d02(int kt, int i, weight_type& d) + { + _Pair cc[7], q4g1[2], HHC_IGG, HHC_IGA, HHC_IQG, HHC_IQQ; + + HHC_CCGG(_M_g5,1,2,3); + HHC_CCQG(_M_q2g3,1,2,3); + HHC_CCGQ(_M_q2g3,1,2,3); + HHC_CCQA(_M_q2g3,1,2,3); + HHC_CCQ4G1(1,0,3,2,-1); + d[0] = (Vgg*cc[0])/24.0 + Nf*(Vga*cc[2])/2.0; + d[0] += Nf*(Nf-1)*(Vga*q4g1[0])/2.0 + Nf*(Vga*q4g1[1])/4.0; + d[1] = (Vgg*cc[1])/6.0; + d[2] = (Vqg*cc[2])/6.0; + d[3] = (Vqq*cc[1])/2.0; + d[4] = (Vqq*cc[1])/4.0; + d[5] = (Vqg*cc[5])/24.0 + (Vqq*cc[1])/2.0; + d[6] = (Vqq*cc[1])/2.0; + + HHC_CCQ4G1(3,-1,1,0,2); + d[1] += (Nf-1)*(Vga*q4g1[0]) + (Vga*q4g1[1])/2.0; + + HHC_CCQ4G1(1,-1,3,2,0); + d[3] += (Nf-2)*(Vqq*q4g1[0]) + (Vqq*q4g1[1])/2.0; + d[4] += (Nf-1)*(Vqq*q4g1[0])/2.0 + (Vqq*q4g1[1])/6.0; + d[5] += (Nf-1)*(Vqq*q4g1[0]) + (Vqq*q4g1[1])/4.0; + d[6] += (Nf-1.5)*(Vqq*q4g1[0]) + (Vqq*q4g1[1])/2.0; + } + + void hhc3jet::_M_d03(int kt, int i, weight_type& d) + { + _Pair cc[7], q4g1[2], HHC_IGG, HHC_IQG, HHC_IGA, HHC_IQQ; + + HHC_CCGG(_M_g5,1,2,3); + HHC_CCQG(_M_q2g3,1,2,3); + HHC_CCGQ(_M_q2g3,1,2,3); + HHC_CCQA(_M_q2g3,1,2,3); + HHC_CCQ4G1(1,2,0,3,-1); + d[0] = (Vgg*cc[0])/24.0; + d[0] += Nf*(Nf-1)*(Vga*q4g1[0])/2.0 + Nf*(Vga*q4g1[1])/4.0; + d[1] = (Vgg*cc[1])/6.0; + d[2] = (Vqg*cc[2])/6.0; + d[5] = (Vqg*cc[5])/24.0; + + HHC_CCGG(_M_q2g3,1,2,3); + HHC_CCQ4G1(0,-1,1,2,3); + d[0] += Nf*(Vgg*cc[0])/2.0; + d[1] += (Nf-1)*(Vga*q4g1[0]) + (Vga*q4g1[1])/2.0; + d[2] += (Nf-0.5)*(Vqq*cc[0]); + + HHC_CCQ4G1(1,-1,2,0,3); + d[3] = (Vqg*q4g1[0])/2.0; + d[4] = (Vqg*q4g1[1])/4.0; + + HHC_CCQ4G1(0,-1,1,2,3); + d[5] += (Nf-1)*(Vqg*q4g1[0])/2.0 + (Vqg*q4g1[1])/2.0; + + HHC_CCQ4G1(1,-1,0,2,3); + d[6] = (Vqg*q4g1[0])/2.0; + + HHC_CCQ4G1(1,-1,2,3,0); + d[4] += (Vqq*q4g1[1])/6.0; + } + + void hhc3jet::_M_d04(int kt, int i, weight_type& d) + { + _Pair cc[7], q4g1[2], HHC_IGG, HHC_IQG, HHC_IGA, HHC_IQQ; + + HHC_CCGG(_M_g5,1,2,3); + HHC_CCQG(_M_q2g3,1,2,3); + HHC_CCGQ(_M_q2g3,1,2,3); + HHC_CCQA(_M_q2g3,1,2,3); + HHC_CCQ4G1(1,2,3,0,-1); + d[0] = (Vgg*cc[0])/24.0; + d[0] += Nf*(Nf-1)*(Vga*q4g1[0])/2.0 + Nf*(Vga*q4g1[1])/4.0; + d[1] = (Vgg*cc[1])/6.0; + d[2] = (Vqg*cc[2])/6.0; + d[5] = (Vqg*cc[5])/24.0; + + HHC_CCGG(_M_q2g3,1,2,3); + HHC_CCQ4G1(3,-1,1,2,0); + d[0] += Nf*(Vgg*cc[0])/2.0; + d[1] += (Nf-1)*(Vgg*q4g1[0]) + (Vgg*q4g1[1])/2.0; + + HHC_CCQ4G1(3,0,1,2,-1); + d[2] += (Nf-1)*(Vqg*q4g1[0]) + (Vqg*q4g1[1])/2.0; + + HHC_CCQ4G1(1,-1,2,0,3); + d[3] = (Vqg*q4g1[0])/2.0; + d[4] = (Vqg*q4g1[1])/4.0; + + HHC_CCQ4G1(0,-1,1,2,3); + d[5] += (Nf-1)*(Vqg*q4g1[0])/2.0 + (Vqg*q4g1[1])/2.0; + + HHC_CCQ4G1(1,-1,0,2,3); + d[6] = (Vqg*q4g1[0])/2.0; + + HHC_CCQ4G1(1,-1,3,2,0); + d[5] += (Vqq*q4g1[1])/4.0; + d[6] += (Vqq*q4g1[0])/2.0; + } + + void hhc3jet::_M_d12(int kt, int i, weight_type& d) + { + _Pair cc[7], q4g1[2], HHC_FGG, HHC_FQA, HHC_FQG; + + HHC_CCGG(_M_g5,1,2,3); + HHC_CCQG(_M_q2g3,1,2,3); + HHC_CCGQ(_M_q2g3,1,2,3); + HHC_CCQA(_M_q2g3,1,2,3); + d[0] = (Vgg*cc[0])/24.0 + Nf*(Vqa*cc[0])/2.0; + d[1] = (Vqg*cc[1])/6.0; + d[2] = (Vqg*cc[2])/6.0; + d[3] = 0.0; + d[4] = 0.0; + d[5] = (Vgg*cc[5])/24.0 + Nf*(Vqa*cc[5])/2.0; + d[6] = 0.0; + + HHC_CCGG(_M_q2g3,3,2,1); + HHC_CCQG(_M_q2g3,3,2,1); + HHC_CCGQ(_M_q2g3,3,2,1); + d[0] += (Vqa*cc[0])*Nf*(Nf-0.5)/2.0; + d[1] += (Nf-0.5)*(Vqa*cc[1]); + d[2] += (Nf-0.5)*(Vqa*cc[2]); + + HHC_CCQ4G1(0,-1,3,2,1); + d[5] += (Nf-1)*(Nf+0.5)*(Vqa*q4g1[0])/2.0 + (Vqa*q4g1[1])/4.0; + } + + void hhc3jet::_M_d13(int kt, int i, weight_type& d) + { + _Pair cc[7], q4g1[2], HHC_FGG, HHC_FQG; + + HHC_CCGG(_M_g5,1,2,3); + HHC_CCQG(_M_q2g3,1,2,3); + HHC_CCGQ(_M_q2g3,1,2,3); + HHC_CCQA(_M_q2g3,1,2,3); + d[0] = (Vgg*cc[0])/24.0; + d[1] = (Vqg*cc[1])/6.0; + d[2] = (Vqg*cc[2])/6.0; + d[5] = (Vgg*cc[5])/24.0; + + HHC_CCGG(_M_q2g3,1,2,3); + HHC_CCQ4G1(1,-1,2,0,3); + d[0] += Nf*(Vqg*cc[0])/2.0; + d[3] = (Vqg*q4g1[0])/2.0; + d[4] = (Vqg*q4g1[1])/4.0; + + HHC_CCQ4G1(0,-1,1,2,3); + d[5] += (Nf-1)*(Vqg*q4g1[0])/2.0 + (Vqg*q4g1[1])/2.0; + + HHC_CCQ4G1(1,-1,0,2,3); + d[6] = (Vqg*q4g1[0])/2.0; + + } + + void hhc3jet::_M_d14(int kt, int i, weight_type& d) + { + _Pair cc[7], q4g1[2], HHC_FGG, HHC_FQG, HHC_FQA; + + HHC_CCGG(_M_g5,1,2,3); + HHC_CCQG(_M_q2g3,1,2,3); + HHC_CCGQ(_M_q2g3,1,2,3); + HHC_CCQA(_M_q2g3,1,2,3); + HHC_CCQ4G1(3,-1,1,2,0); + d[0] = (Vgg*cc[0])/24.0; + d[1] = (Vqg*cc[1])/6.0 + (Nf-1)*(Vqg*q4g1[0]) + (Vqg*q4g1[1])/2.0; + d[2] = (Vqg*cc[2])/6.0; + d[5] = (Vgg*cc[5])/24.0; + + HHC_CCGG(_M_q2g3,1,2,3); + HHC_CCQ4G1(3,0,1,2,-1); + d[0] += Nf*(Vqg*cc[0])/2.0; + d[2] += (Nf-1)*(Vqg*q4g1[0]) + (Vqg*q4g1[1])/2.0; + + HHC_CCGG(_M_q2g3,3,2,1); + HHC_CCQ4G1(1,-1,2,0,3); + d[0] += Nf*(Vqa*cc[0])/4.0; + d[3] = (Vqg*q4g1[0])/2.0; + d[4] = (Vqg*q4g1[1])/4.0; + + HHC_CCQ4G1(0,-1,1,2,3); + d[5] += (Nf-1)*(Vqg*q4g1[0])/2.0 + (Vqg*q4g1[1])/2.0; + + HHC_CCQ4G1(1,-1,0,2,3); + d[6] = (Vqg*q4g1[0])/2.0; + + HHC_CCQ4G1(0,-1,3,2,1); + d[5] += (Nf-1)*(Vqa*q4g1[0])/4.0 + (Vqa*q4g1[1])/4.0; + + HHC_CCQ4G1(3,-1,0,2,1); + d[6] += (Vqa*q4g1[0])/2.0; + + HHC_CCQ4G1(3,-1,2,0,1); + d[3] += (Vqa*q4g1[0])/2.0; + d[4] += (Vqa*q4g1[1])/6.0; + } + + void hhc3jet::_M_d23(int kt, int i, weight_type& d) + { + _Pair cc[7], q4g1[2], HHC_FGG, HHC_FQG, HHC_FQA; + + HHC_CCGG(_M_g5,1,2,3); + HHC_CCQG(_M_q2g3,1,2,3); + HHC_CCGQ(_M_q2g3,1,2,3); + HHC_CCQA(_M_q2g3,1,2,3); + d[0] = (Vgg*cc[0])/24.0; + d[1] = (Vgg*cc[1])/6.0 + (Vqa*cc[1])/2.0; + d[2] = (Vgg*cc[2])/6.0 + (Vqa*cc[2])/2.0; + d[5] = (Vgg*cc[5])/24.0; + + HHC_CCGG(_M_q2g3,1,2,3); + HHC_CCQ4G1(1,-1,2,0,3); + d[0] += Nf*(Vqg*cc[0])/2.0; + d[3] = (Vqg*q4g1[0])/2.0; + d[4] = (Vqg*q4g1[1])/4.0; + + HHC_CCGG(_M_q2g3,1,3,2); + d[0] += Nf*(Vqa*cc[0])/4.0; + + HHC_CCQ4G1(0,-1,1,2,3); + d[5] += (Nf-1)*(Vqg*q4g1[0])/2.0 + (Vqg*q4g1[1])/2.0; + + HHC_CCQ4G1(1,-1,0,2,3); + d[6] = (Vqg*q4g1[0])/2.0; + + HHC_CCQ4G1(0,-1,1,3,2); + d[5] += (Nf-1)*(Vqa*q4g1[0])/4.0 + (Vqa*q4g1[1])/4.0; + + HHC_CCQ4G1(1,-1,0,3,2); + d[6] += (Vqa*q4g1[0])/2.0; + } + + void hhc3jet::_M_d24(int kt, int i, weight_type& d) + { + _Pair cc[7], q4g1[2], HHC_FGG, HHC_FQG, HHC_FQA; + + HHC_CCGG(_M_g5,1,2,3); + HHC_CCQG(_M_q2g3,1,2,3); + HHC_CCGQ(_M_q2g3,1,2,3); + HHC_CCQA(_M_q2g3,1,2,3); + HHC_CCQ4G1(3,-1,1,2,0); + d[0] = (Vgg*cc[0])/24.0; + d[1] = (Vgg*cc[1])/6.0 + (Nf-1)*(Vqg*q4g1[0]) + (Vqg*q4g1[1])/2.0; + d[2] = (Vgg*cc[2])/6.0; + d[5] = (Vgg*cc[5])/24.0; + + HHC_CCGG(_M_q2g3,1,2,3); + HHC_CCQ4G1(3,0,1,2,-1); + d[0] += Nf*(Vqg*cc[0])/2.0; + d[2] += (Nf-1)*(Vqg*q4g1[0]) + (Vqg*q4g1[1])/2.0; + + HHC_CCQ4G1(1,-1,2,0,3); + d[3] = (Vqg*q4g1[0])/2.0; + d[4] = (Vqg*q4g1[1])/4.0; + + HHC_CCQ4G1(0,-1,1,2,3); + d[5] += (Nf-1)*(Vqg*q4g1[0])/2.0 + (Vqg*q4g1[1])/2.0; + + HHC_CCQ4G1(1,-1,0,2,3); + d[6] = (Vqg*q4g1[0])/2.0; + + HHC_CCQ4G1(1,-1,3,0,2); + d[4] += (Vqa*q4g1[1])/6.0; + } + + void hhc3jet::_M_d34(int kt, int i, weight_type& d) + { + _Pair cc[7], q4g1[2], HHC_FGG, HHC_FQA, HHC_FQG; + + HHC_CCGG(_M_g5,1,2,3); + HHC_CCQG(_M_q2g3,1,2,3); + HHC_CCGQ(_M_q2g3,1,2,3); + HHC_CCQA(_M_q2g3,1,2,3); + HHC_CCQ4G1(3,-1,1,2,0); + + d[0] = (Vgg*cc[0])/24.0; + d[1] = (Vgg*cc[1])/6.0 + (Nf-1)*(Vqg*q4g1[0]) + (Vqg*q4g1[1])/2.0; + d[2] = (Vgg*cc[2])/6.0; + d[5] = (Vgg*cc[5])/24.0; + + HHC_CCGG(_M_q2g3,1,2,3); + HHC_CCQ4G1(3,0,1,2,-1); + d[0] += Nf*(Vgg*cc[0])/2.0 + (Vqa*cc[0])*Nf*(Nf-0.5)/2.0; + d[2] += (Nf-1)*(Vqg*q4g1[0]) + (Vqg*q4g1[1])/2.0; + + HHC_CCQ4G1(1,-1,2,0,3); + d[3] = (Vgg*q4g1[0])/2.0 + (Nf-1.5)*(Vqa*q4g1[0]); + d[4] = (Vgg*q4g1[1])/4.0 + (Nf-2.0/3.0)*(Vqa*q4g1[1])/2.0; + + HHC_CCQ4G1(0,-1,1,2,3); + d[5] += (Nf-1)*(Vgg*q4g1[0])/2.0 + (Vgg*q4g1[1])/2.0; + d[5] += (Nf-1)*(Nf-1.5)*(Vqa*q4g1[0])/2.0 + (Nf-0.75)*(Vqa*q4g1[1]); + + HHC_CCQ4G1(1,-1,0,2,3); + d[6] = (Vgg*q4g1[0])/2.0; + d[6] += (Nf-1)*(Vqa*q4g1[0]); + + } +} // namespace nlo diff --git a/v2.6/generators/nlojet++/patches/nlojet++-4.1.3/proc-hhc/hhc4jet.cc b/v2.6/generators/nlojet++/patches/nlojet++-4.1.3/proc-hhc/hhc4jet.cc new file mode 100644 index 0000000000000000000000000000000000000000..baaa81a83cbc033193352d220447e94470c57a31 --- /dev/null +++ b/v2.6/generators/nlojet++/patches/nlojet++-4.1.3/proc-hhc/hhc4jet.cc @@ -0,0 +1,70 @@ +// Copyright (C) 2002 Zoltan Nagy +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +#include "hhc4jet.h" +#include "ampg6.h" +#include "ampq2g4.h" +#include "ampq4g2.h" +#include "ampq6.h" + + +// PI_FACn = (2*pi)^(n-2) * 2^(n-2) +#define PI_FAC6 38865023.041825071132937 + + + +namespace nlo { + + + hhc4jet::hhc4jet(const random_generator& rng, bool mchel, unsigned int nu, unsigned int nd, double al) + : process_hhc(4, 4, nu, nd, al), _hhc_jet_base(nu+nd), _M_mchel(mchel) + { + _M_g6 = new ampg6 (_M_ip, rng); + _M_q2g4 = new ampq2g4(_M_ip, rng); + _M_q4g2 = new ampq4g2(_M_ip, rng); + _M_q6 = new ampq6 (_M_ip, rng); + } + + hhc4jet::~hhc4jet() + { + if(_M_g6) delete _M_g6; + if(_M_q2g4) delete _M_q2g4; + if(_M_q4g2) delete _M_q4g2; + if(_M_q6) delete _M_q6; + } + + void hhc4jet::born_term(const event_type& p, weight_type& res) + { + _M_ip.calculate(p); + amp_tree(_M_g6, _M_q2g4, _M_q4g2, _M_q6, 0, res.begin()); + res *= PI_FAC6; + + for (int ikr = 0; ikr<7; ikr++) { + if (isnan(res[ikr]) || isinf(res[ikr])) { + std::cout << "NLOJet++_hhc4jet_born_term: NaN or Inf ERROR for ikr = " << ikr << ", res[ikr] = " << res[ikr] << std::endl; + } + } + + } + + void hhc4jet::real_term(const event_type&, weight_type&) + {} + + void hhc4jet::fini_term(double, double, double, double, const event_type&, weight_type *) + {} + + void hhc4jet::dipole_term(const event_type&, const event_type&, + int, int, int, weight_type&) {} +} // namespace nlo diff --git a/v2.6/generators/nlojet++/patches/nlojet++-4.1.3/src/main_calc.cc b/v2.6/generators/nlojet++/patches/nlojet++-4.1.3/src/main_calc.cc new file mode 100644 index 0000000000000000000000000000000000000000..5cfea16df4251e467c69177046109d9d722efd1d --- /dev/null +++ b/v2.6/generators/nlojet++/patches/nlojet++-4.1.3/src/main_calc.cc @@ -0,0 +1,205 @@ +// Copyright (C) 2002 Zoltan Nagy +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +#include <cstdlib> +#include <ctime> +#include <getopt.h> + +#include <string> +#include <cstring> +#include <iostream> +#include <sstream> + + +//----- the used namespaces ----- +using namespace std; + +#include "nlojet++.h" +#include "ltdl.h" + + +//----- print out the help ----- +void main_calc_help() +{ + cout + <<"Usage: nlojet++ --calcualte -n name -c born|nlo|full -u module.la \n" + <<" [-d dir] [--saving-mode txt|bin] [-m | --mchel]\n" + <<" [-A num | --alpha num] [--max-event nevent]\n" + <<" [--save-after nsave] [-T num, --time-rate num]\n" + <<"\n nlojet++ -- calculate -h|--help \n\n" + + <<"Options:\n" + <<" -h, --help print this message\n" + <<" -n name name of the run\n" + <<" -c born|nlo|full contributions\n" + <<" -u module.la module file contains the user defined functions\n" + <<" -d dir output directory\n" + <<" --txt formated output (default is binary output) \n" + <<" -m, --mchel turn off the Monte Carlo helicity sum\n" + <<" -A num, --alpha num non-physical cut in the dipole terms (0,1]\n" + <<" --max-event number max number of the events\n" + <<" --save-after number save after every 'number' events\n" + <<" -T num, --time-rate num time rate between the n+1 and n parton\n" + <<" integral (num = 1,...10 integer, default: 1)" + <<endl; +} + + +int main_calc(int argc, char **argv) +{ + //----- long options ----- + option longopt[] = + {{"txt", required_argument, 0, 0 }, + {"mchel", no_argument, 0, 'm'}, + {"alpha", required_argument, 0, 'A'}, + {"max-event", required_argument, 0, 0 }, + {"save-after", required_argument, 0, 0 }, + {"time-rate", required_argument, 0, 'T'}, + {"help", no_argument, 0, 'h'}, + {0, 0, 0, 0} + }; + + //------ default options ----- + main_input in; + const char *name = "run", *dir= "./output", *contr = contbl[0], *usr = 0; + unsigned int seed = ((unsigned int) time(NULL)) & 5313465U; + + //------ argument parsing ----- + while(1) { + int optidx = 0; + int c = getopt_long(argc, argv, "mhc:n:d:u:s:A:T:", longopt, &optidx); + if(c == -1) break; + + switch(c) { + case 'h': main_calc_help(); exit(0); break; + case 'n': name = optarg; break; + case 'd': dir = optarg; break; + case 'u': usr = optarg; break; + case 's': seed = atoi(optarg); break; + case 'm': in.mchel = false; break; + case 'A': in.alpha = atof(optarg); break; + case 'T': in.time = atoi(optarg); break; + case 'c': contr = optarg; break; + case 0: + switch(optidx) { + case 0: in.txtout = true; break; + case 3: in.nevent = atoi(optarg); break; + case 4: in.nsave = atoi(optarg); break; + } + break; + case '?': break; + default: throw; break; + } + } + + //----- user module ----- + if(!usr) throw "no user module specified"; + + //----- contribution ----- + for(unsigned ic = 0; contbl[ic]; ic++) + if(strcmp(contbl[ic], contr) == 0) { + in.contr = ic; + break; + } + + if(in.contr == -1) { + cerr<<"Unknown contribution type `"<<contr<<"`. " + <<"The deafault contribution (`" + <<contbl[0]<<"`) will be calculated."<<endl; + in.contr = 0; + } + + //----- make the output directory ----- + make_dir(dir); + + //----- output file name template ----- + stringstream strs; + strs<<dir; if(dir[strlen(dir)-1] != '/') strs<<"/"; + strs<<name<<"-@PROC@-"<<contbl[in.contr]<<"-@NJET@jet"<<'\0'; + in.outfile = strs.str(); + + // the time rate parameter must be greater than zero + // and should be less than 10 + if(in.time == 0U) in.time = 1U; + if(in.time > 10U) in.time = 10U; + + // initialize the random seed + srand(seed); + + // KR: Add random seed printout + cout<<"User module : "<<usr<<"\n" + <<"Contribution : "<<contbl[in.contr]<<"\n" + <<"MC helicity sum : "<<(in.mchel ? "true" : "false")<<"\n" + <<"Dipole cut : "<<in.alpha<<"\n" + <<"Number of events : "<<in.nevent<<"\n" + <<"Output directory : "<<dir<<"\n" + <<"Saving mode : "<<(in.txtout ? "text" : "binary")<<"\n" + <<"Save after : "<<in.nsave<<" events\n" + <<"Time rate In+1:In : "<<in.time<<":1\n" + <<"Random seed : "<<seed<<"\n" + <<endl; + + //----- open the user defined file ----- + if(lt_dlinit() != 0) throw lt_dlerror(); + + lt_dlhandle handle = lt_dlopen(usr); + if (!handle) { + cerr<<"can't open the module "<<usr<<"!\n"; + throw lt_dlerror(); + } + + const lt_dlinfo *info = lt_dlgetinfo(handle); + if (!info) { + cerr<<"can't get module info: "<<lt_dlerror()<<endl; + return 1; + } + + if(info->name) cout<<"module name: "<<info->name<<"\n"; + else cout<<"module is not a libtool module\n"; + cout<<"module filename: "<<info->filename<<"\n"; + cout<<"module reference count: "<<info->ref_count<<endl; + + //----- try to find the symbol table ----- + cout<<"\nTrying to find the symbol table :\n" + <<"user_defined_functions[] : "; + + in.symtable = (nlo_symbol *) lt_dlsym(handle, "user_defined_functions"); + if(in.symtable) cout<<" OK\n"<<endl; + else { + cout<<" FAIL\n"<<endl; + throw "There is no well defined user module!"; + } + + //----- find the process type ----- + const char *proc = (const char *) in.find_symbol("procindex"); + in.outfile.replace(in.outfile.find("@PROC@"), 6, proc); + + int procidx = -1; + while(proctbl[++procidx].name) + if(std::strcmp(proc, proctbl[procidx].name) == 0) break; + + if(proctbl[procidx].name == 0) + throw "Undefined process. Check your user module!"; + + //----- starting the calculation ----- + (*(proctbl[procidx].module_calc))(in); + + // close the dlopend files + lt_dlclose(handle); + lt_dlexit(); + + return 0; +} + diff --git a/v2.6/generators/nlojet++/patches/nlojet++.patch b/v2.6/generators/nlojet++/patches/nlojet++.patch new file mode 100644 index 0000000000000000000000000000000000000000..9a1c1cf417b8104a19179742b7d7ea69d05396d7 --- /dev/null +++ b/v2.6/generators/nlojet++/patches/nlojet++.patch @@ -0,0 +1,394 @@ +diff -urN nlojet++-4.1.3_original/nlo-core/bits/nlo-basic_user.h nlojet++-4.1.3_new/nlo-core/bits/nlo-basic_user.h +--- nlojet++-4.1.3_original/nlo-core/bits/nlo-basic_user.h 2010-05-11 17:06:00.000000000 +0200 ++++ nlojet++-4.1.3_new/nlo-core/bits/nlo-basic_user.h 2014-05-16 11:42:12.645025735 +0200 +@@ -41,20 +41,20 @@ + virtual ~basic_user_base() {} + + // set the output (file name saving mode) +- void phys_output(const char *fname, unsigned long nsave = 10000UL, bool txt = false) { ++ virtual void phys_output(const char *fname, unsigned long nsave = 10000UL, bool txt = false) { + _M_ofile = fname; _M_txt = txt; _M_nsave = nsave; + } + +- void phys_output(const std::basic_string<char>& fname, unsigned long nsave = 10000UL, bool txt = false) { ++ virtual void phys_output(const std::basic_string<char>& fname, unsigned long nsave = 10000UL, bool txt = false) { + _M_ofile = fname; _M_txt = txt; _M_nsave = nsave; + } + +- void phys_output(unsigned long nsave, bool txt) { ++ virtual void phys_output(unsigned long nsave, bool txt) { + _M_txt = txt; _M_nsave = nsave; + } + + // operations at the end of the event and saving the results +- void end_of_event(); ++ virtual void end_of_event(); + + protected: + // do any operetaions at the end of the event +diff -urN nlojet++-4.1.3_original/nlo-core/bits/nlo-process_i1f0.h nlojet++-4.1.3_new/nlo-core/bits/nlo-process_i1f0.h +--- nlojet++-4.1.3_original/nlo-core/bits/nlo-process_i1f0.h 2010-05-11 17:06:00.000000000 +0200 ++++ nlojet++-4.1.3_new/nlo-core/bits/nlo-process_i1f0.h 2014-05-16 11:42:12.645025735 +0200 +@@ -173,7 +173,8 @@ + contrib_type contrib() const { return _M_contr;} + integral_type integral() const { return _M_itype;} + +- private: ++ //private: ++ public: + // pointer to the process + process_type *_M_proc; + +diff -urN nlojet++-4.1.3_original/nlo-core/bits/nlo-process_i2f0.h nlojet++-4.1.3_new/nlo-core/bits/nlo-process_i2f0.h +--- nlojet++-4.1.3_original/nlo-core/bits/nlo-process_i2f0.h 2010-05-11 17:06:00.000000000 +0200 ++++ nlojet++-4.1.3_new/nlo-core/bits/nlo-process_i2f0.h 2014-05-16 11:42:12.645025735 +0200 +@@ -184,7 +184,8 @@ + contrib_type contrib() const { return _M_contr;} + integral_type integral() const { return _M_itype;} + +- private: ++// private: ++ public: + // pointer to the process + process_type *_M_proc; + +@@ -238,6 +239,13 @@ + + void finix2(_Weight& res) const { + res = amp[1] + amp[4]*lxf; ++ if (mode==1) { ++ int NSubproc = 7; ++ for(int proc=0;proc<NSubproc;proc++){ ++ if ( isnan(amp[1][proc]) ) std::cout<<"NLOJet++: ERROR! NaN in finix2 for M_proc=1, proc="<<proc<<std::endl; ++ if ( isnan(amp[4][proc]) ) std::cout<<"NLOJet++: ERROR! NaN in finix2 for M_proc=4, proc="<<proc<<std::endl; ++ } ++ } + } + + void fini1(_Weight& res) const { +diff -urN nlojet++-4.1.3_original/nlo-core/split.cc nlojet++-4.1.3_new/nlo-core/split.cc +--- nlojet++-4.1.3_original/nlo-core/split.cc 2010-05-11 17:06:00.000000000 +0200 ++++ nlojet++-4.1.3_new/nlo-core/split.cc 2014-05-16 11:42:12.645025735 +0200 +@@ -40,6 +40,23 @@ + lorentzvector<double> qij = pi + pj - yijk/(1.0 - yijk)*pk; + + hij = pm(pi,pj)*mp(qij,pi)*mp(qij,pj)/(mp(pi,pj)*pm(qij,pi)*pm(qij,pj)); ++ ++// static int hijfffcnt = 0; ++// hijfffcnt++; ++// if (hijfffcnt > 168000 ) { ++// std::cout << "Nlojet++:splitfff: hijfffcnt = " << hijfffcnt << std::endl; ++// std::cout << "Nlojet++:splitfff: Numerator: pm(pi,pj) = " << pm(pi,pj) << ", mp(qij,pi) = " << mp(qij,pi) << ", mp(qij,pj) = " << mp(qij,pj) << ", numerator = " << (pm(pi,pj)*mp(qij,pi)*mp(qij,pj)) << std::endl; ++// std::cout << "Nlojet++:splitfff: Denominator: mp(pi,pj) = " << mp(pi,pj) << ", pm(qij,pi) = " << pm(qij,pi) << ", pm(qij,pj) = " << pm(qij,pj) << ", denominator = " << (mp(pi,pj)*pm(qij,pi)*pm(qij,pj)) << std::endl; ++// } ++ ++ static int hijfffnaninfcnt = 0; ++ if (isnan(real(hij)) || isnan(imag(hij)) || isinf(real(hij)) || isinf(imag(hij)) ) { ++ hijfffnaninfcnt++; ++ std::cout << "NloJet++_splitfff: ERROR! NaN or Inf in hij, hij = " << hij << std::endl; ++ std::cout << "NloJet++_splitfff: NaN or Inf in hij occurrence # = " << hijfffnaninfcnt << std::endl; ++ std::cout << "Nlojet++:splitfff: Numerator: pm(pi,pj) = " << pm(pi,pj) << ", mp(qij,pi) = " << mp(qij,pi) << ", mp(qij,pj) = " << mp(qij,pj) << ", numerator = " << (pm(pi,pj)*mp(qij,pi)*mp(qij,pj)) << std::endl; ++ std::cout << "Nlojet++:splitfff: Denominator: mp(pi,pj) = " << mp(pi,pj) << ", pm(qij,pi) = " << pm(qij,pi) << ", pm(qij,pj) = " << pm(qij,pj) << ", denominator = " << (mp(pi,pj)*pm(qij,pi)*pm(qij,pj)) << std::endl; ++ } + } + + pair_type splitfff::Vqg() const { +@@ -52,7 +69,10 @@ + double color = 0.5/Nc; + double vd = -color*(1.0 - 2.0*zi*(1.0 - zi))/sij; + std::complex<double> vc = -2.0*color*zi*(1.0 - zi)*hij/sij; +- ++ if (isnan(real(hij)) || isnan(imag(hij)) || isinf(real(hij)) || isinf(imag(hij)) ) { ++ std::cout << "NloJet++_splitfff_Vqa: ERROR! NaN or Inf in hij, hij = " << hij << std::endl; ++ } ++ + return pair_type(vd, vc); + } + +@@ -61,7 +81,10 @@ + double oy = 1.0-yijk, zj = 1.0-zi; + double vd = -(2.0/(1.0-zi*oy) + 2.0/(1.0-zj*oy) - 4.0 + 2.0*zi*zj)/sij; + std::complex<double> vc = 2.0*zi*zj*hij/sij; +- ++ if (isnan(real(hij)) || isnan(imag(hij)) || isinf(real(hij)) || isinf(imag(hij)) ) { ++ std::cout << "NloJet++_splitfff_Vgg: ERROR! NaN or Inf in hij, hij = " << hij << std::endl; ++ } ++ + return pair_type(vd, vc); + } + +@@ -76,6 +99,24 @@ + lorentzvector<double> qij = pi + pj - (1.0 - xija)*pa; + + hij = pm(pi,pj)*mp(qij,pi)*mp(qij,pj)/(mp(pi,pj)*pm(qij,pi)*pm(qij,pj)); ++ ++// static int hijfficnt = 0; ++// hijfficnt++; ++// if (hijfficnt > 168000 ) { ++// std::cout << "Nlojet++:splitffi: hijfficnt = " << hijfficnt << std::endl; ++// std::cout << "Nlojet++:splitffi: Numerator: pm(pi,pj) = " << pm(pi,pj) << ", mp(qij,pi) = " << mp(qij,pi) << ", mp(qij,pj) = " << mp(qij,pj) << ", numerator = " << (pm(pi,pj)*mp(qij,pi)*mp(qij,pj)) << std::endl; ++// std::cout << "Nlojet++:splitffi: Denominator: mp(pi,pj) = " << mp(pi,pj) << ", pm(qij,pi) = " << pm(qij,pi) << ", pm(qij,pj) = " << pm(qij,pj) << ", denominator = " << (mp(pi,pj)*pm(qij,pi)*pm(qij,pj)) << std::endl; ++// } ++ ++ static int hijffinaninfcnt = 0; ++ if (isnan(real(hij)) || isnan(imag(hij)) || isinf(real(hij)) || isinf(imag(hij)) ) { ++ hijffinaninfcnt++; ++ std::cout << "NloJet++_splitffi: ERROR! NaN or Inf in hij, hij = " << hij << std::endl; ++ std::cout << "NloJet++_splitffi: NaN or Inf in hij occurrence # = " << hijffinaninfcnt << std::endl; ++ std::cout << "Nlojet++:splitffi: Numerator: pm(pi,pj) = " << pm(pi,pj) << ", mp(qij,pi) = " << mp(qij,pi) << ", mp(qij,pj) = " << mp(qij,pj) << ", numerator = " << (pm(pi,pj)*mp(qij,pi)*mp(qij,pj)) << std::endl; ++ std::cout << "Nlojet++:splitffi: Denominator: mp(pi,pj) = " << mp(pi,pj) << ", pm(qij,pi) = " << pm(qij,pi) << ", pm(qij,pj) = " << pm(qij,pj) << ", denominator = " << (mp(pi,pj)*pm(qij,pi)*pm(qij,pj)) << std::endl; ++ } ++ + } + + pair_type splitffi::Vqg() const { +@@ -88,7 +129,10 @@ + double color = 0.5/Nc, zj = 1.0 - zi; + double vd = -color*(1.0 - 2.0*zi*zj)/(sij*xija); + std::complex<double> vc = -2.0*color*zi*zj*hij/(sij*xija); +- ++ if (isnan(real(hij)) || isnan(imag(hij)) || isinf(real(hij)) || isinf(imag(hij)) ) { ++ std::cout << "NloJet++_splitffi_Vqa: ERROR! NaN or Inf in hij, hij = " << hij << std::endl; ++ } ++ + return pair_type(vd, vc); + } + +@@ -96,6 +140,9 @@ + double ox = 1.0 - xija, zj = 1.0 - zi; + double vd = -(2.0/(zj + ox) + 2.0/(zi + ox) - 4.0 + 2.0*zi*zj)/(sij*xija); + std::complex<double> vc = 2.0*zi*zj*hij/(sij*xija); ++ if (isnan(real(hij)) || isnan(imag(hij)) || isinf(real(hij)) || isinf(imag(hij)) ) { ++ std::cout << "NloJet++_splitffi_Vgg: ERROR! NaN or Inf in hij, hij = " << hij << std::endl; ++ } + + return pair_type(vd, vc); + } +diff -urN nlojet++-4.1.3_original/proc-dis/bits/dis-process.h nlojet++-4.1.3_new/proc-dis/bits/dis-process.h +--- nlojet++-4.1.3_original/proc-dis/bits/dis-process.h 2010-05-11 17:06:01.000000000 +0200 ++++ nlojet++-4.1.3_new/proc-dis/bits/dis-process.h 2014-05-16 11:42:12.645025735 +0200 +@@ -30,6 +30,7 @@ + class pdf_and_coupling_dis + : public pdf_and_coupling<weight_dis,1U,0U> + { ++ public: + virtual void hadron(double, double, unsigned int, unsigned int, double *) = 0; + weight_dis pdf(double, double, unsigned int=2U, unsigned int=3U); + }; +diff -urN nlojet++-4.1.3_original/proc-hhc/bits/hhc-process.h nlojet++-4.1.3_new/proc-hhc/bits/hhc-process.h +--- nlojet++-4.1.3_original/proc-hhc/bits/hhc-process.h 2010-05-11 17:06:01.000000000 +0200 ++++ nlojet++-4.1.3_new/proc-hhc/bits/hhc-process.h 2014-05-16 11:42:12.645025735 +0200 +@@ -30,6 +30,7 @@ + class pdf_and_coupling_hhc + : public pdf_and_coupling<weight_hhc,2U,0U> + { ++ public: + virtual void hadronA(double, double, unsigned int, unsigned int, double *) = 0; + virtual void hadronB(double, double, unsigned int, unsigned int, double *) = 0; + weight_hhc pdf(double, double, double, unsigned int=2U, unsigned int=3U); +diff -urN nlojet++-4.1.3_original/proc-hhc/hhc2jet.cc nlojet++-4.1.3_new/proc-hhc/hhc2jet.cc +--- nlojet++-4.1.3_original/proc-hhc/hhc2jet.cc 2010-05-11 17:06:01.000000000 +0200 ++++ nlojet++-4.1.3_new/proc-hhc/hhc2jet.cc 2014-05-16 11:42:12.645025735 +0200 +@@ -64,6 +64,13 @@ + _M_ip.calculate(p); + amp_tree(_M_g4, _M_q2g2, _M_q4, 0, res.begin()); + res *= PI_FAC4; ++ ++ for (int ikr = 0; ikr<7; ikr++) { ++ if (isnan(res[ikr]) || isinf(res[ikr])) { ++ std::cout << "NLOJet++_hhc2jet_born_term: NaN or Inf ERROR for ikr = " << ikr << ", res[ikr] = " << res[ikr] << std::endl; ++ } ++ } ++ + } + + void hhc2jet::real_term(const event_type& p, weight_type& res) +@@ -71,6 +78,13 @@ + _M_ip.calculate(p); + amp_tree(_M_g5, _M_q2g3, _M_q4g1, 0, res.begin()); + res *= PI_FAC5; ++ ++ for (int ikr = 0; ikr<7; ikr++) { ++ if (isnan(res[ikr]) || isinf(res[ikr])) { ++ std::cout << "NLOJet++_hhc2jet_real_term: NaN or Inf ERROR for ikr = " << ikr << ", res[ikr] = " << res[ikr] << std::endl; ++ } ++ } ++ + } + + +@@ -105,6 +119,15 @@ + //---- overall Pi factors ---- + for(unsigned int i=0; i < 7; i++) + res[i] *= PI_FAC4; ++ ++ for (int ikr = 0; ikr<7; ikr++) { ++ for (int jkr = 0; jkr<7; jkr++) { ++ if (isnan(res[ikr][jkr]) || isinf(res[ikr][jkr])) { ++ std::cout << "NLOJet++_hhc2jet_fini_term: NaN or Inf ERROR for ikr = " << ikr << ", jkr =" << jkr << ", res[ikr][jkr] = " << res[ikr][jkr] << std::endl; ++ } ++ } ++ } ++ + } + + void hhc2jet::dipole_term(const event_type& p, const event_type& dp, +@@ -127,6 +150,14 @@ + _M_ip.calculate(dp); + (this ->* _S_dipole[idx])(kt, i, res); + res *= PI_FAC5; ++ ++ for (int ikr = 0; ikr<7; ikr++) { ++ if (isnan(res[ikr]) || isinf(res[ikr])) { ++ std::cout << "NLOJet++_hhc2jet_dipole_term: NaN or Inf ERROR for ikr = " << ikr << ", res[ikr] = " << res[ikr] << std::endl; ++ std::cout << "NLOJet++_hhc2jet_dipole_term: kt = " << kt << ", idx = " << idx << std::endl; ++ } ++ } ++ + } + + // +diff -urN nlojet++-4.1.3_original/proc-hhc/hhc3jet.cc nlojet++-4.1.3_new/proc-hhc/hhc3jet.cc +--- nlojet++-4.1.3_original/proc-hhc/hhc3jet.cc 2010-05-11 17:06:01.000000000 +0200 ++++ nlojet++-4.1.3_new/proc-hhc/hhc3jet.cc 2014-05-16 11:42:12.645025735 +0200 +@@ -69,6 +69,13 @@ + _M_ip.calculate(p); + amp_tree(_M_g5, _M_q2g3, _M_q4g1, 0, res.begin()); + res *= PI_FAC5; ++ ++ for (int ikr = 0; ikr<7; ikr++) { ++ if (isnan(res[ikr]) || isinf(res[ikr])) { ++ std::cout << "NLOJet++_hhc3jet_born_term: NaN or Inf ERROR for ikr = " << ikr << ", res[ikr] = " << res[ikr] << std::endl; ++ } ++ } ++ + } + + void hhc3jet::real_term(const event_type& p, weight_type& res) +@@ -76,6 +83,13 @@ + _M_ip.calculate(p); + amp_tree(_M_g6, _M_q2g4, _M_q4g2, _M_q6, 0, res.begin()); + res *= PI_FAC6; ++ ++ for (int ikr = 0; ikr<7; ikr++) { ++ if (isnan(res[ikr]) || isinf(res[ikr])) { ++ std::cout << "NLOJet++_hhc3jet_real_term: NaN or Inf ERROR for ikr = " << ikr << ", res[ikr] = " << res[ikr] << std::endl; ++ } ++ } ++ + } + + void hhc3jet::fini_term(double x1, double xjac1, double x2, double xjac2, +@@ -109,6 +123,14 @@ + //---- overall Pi factors ---- + for(unsigned int i=0; i < 7; i++) + res[i] *= PI_FAC5; ++ ++ for (int ikr = 0; ikr<7; ikr++) { ++ for (int jkr = 0; jkr<7; jkr++) { ++ if (isnan(res[ikr][jkr]) || isinf(res[ikr][jkr])) { ++ std::cout << "NLOJet++_hhc3jet_fini_term: NaN or Inf ERROR for ikr = " << ikr << ", jkr =" << jkr << ", res[ikr][jkr] = " << res[ikr][jkr] << std::endl; ++ } ++ } ++ } + } + + void hhc3jet::dipole_term(const event_type& p, const event_type& dp, +@@ -116,20 +138,28 @@ + { + typedef split_fin<lorentzvector<double> > _SplitF; + typedef split_ini<lorentzvector<double> > _SplitI; +- +- if(i <= 0) { ++ ++ if(i <= 0) { + _M_sini = (k <= 0 ? (_SplitI *) &_M_sifi : (_SplitI *) &_M_siff); + _M_sini -> set(p[i], p[j], p[k]); + } else { + _M_sfin = (k <= 0 ? (_SplitF *) &_M_sffi : (_SplitF *) &_M_sfff); + _M_sfin -> set(p[i], p[j], p[k]); + } +- ++ + int kt = (k == 4 ? j : k); + int idx = (i==-1 ? j-1 : 3*i-(i*i-i)/2 + j+3); + + _M_ip.calculate(dp); + (this ->* _S_dipole[idx])(kt, i, res); ++ ++ for (int ikr = 0; ikr<7; ikr++) { ++ if (isnan(res[ikr]) || isinf(res[ikr])) { ++ std::cout << "NLOJet++_hhc3jet_dipole_term: NaN or Inf ERROR for ikr = " << ikr << ", res[ikr] = " << res[ikr] << std::endl; ++ std::cout << "NLOJet++_hhc3jet_dipole_term: kt = " << kt << ", idx = " << idx << std::endl; ++ } ++ } ++ + res *= PI_FAC6; + } + +@@ -490,6 +520,7 @@ + + HHC_CCQ4G1(1,-1,0,2,3); + d[6] = (Vqg*q4g1[0])/2.0; ++ + } + + void hhc3jet::_M_d14(int kt, int i, weight_type& d) +@@ -605,12 +636,13 @@ + void hhc3jet::_M_d34(int kt, int i, weight_type& d) + { + _Pair cc[7], q4g1[2], HHC_FGG, HHC_FQA, HHC_FQG; +- ++ + HHC_CCGG(_M_g5,1,2,3); + HHC_CCQG(_M_q2g3,1,2,3); + HHC_CCGQ(_M_q2g3,1,2,3); + HHC_CCQA(_M_q2g3,1,2,3); + HHC_CCQ4G1(3,-1,1,2,0); ++ + d[0] = (Vgg*cc[0])/24.0; + d[1] = (Vgg*cc[1])/6.0 + (Nf-1)*(Vqg*q4g1[0]) + (Vqg*q4g1[1])/2.0; + d[2] = (Vgg*cc[2])/6.0; +@@ -632,5 +664,6 @@ + HHC_CCQ4G1(1,-1,0,2,3); + d[6] = (Vgg*q4g1[0])/2.0; + d[6] += (Nf-1)*(Vqa*q4g1[0]); ++ + } + } // namespace nlo +diff -urN nlojet++-4.1.3_original/proc-hhc/hhc4jet.cc nlojet++-4.1.3_new/proc-hhc/hhc4jet.cc +--- nlojet++-4.1.3_original/proc-hhc/hhc4jet.cc 2010-05-11 17:06:01.000000000 +0200 ++++ nlojet++-4.1.3_new/proc-hhc/hhc4jet.cc 2014-05-16 11:42:12.645025735 +0200 +@@ -50,6 +50,13 @@ + _M_ip.calculate(p); + amp_tree(_M_g6, _M_q2g4, _M_q4g2, _M_q6, 0, res.begin()); + res *= PI_FAC6; ++ ++ for (int ikr = 0; ikr<7; ikr++) { ++ if (isnan(res[ikr]) || isinf(res[ikr])) { ++ std::cout << "NLOJet++_hhc4jet_born_term: NaN or Inf ERROR for ikr = " << ikr << ", res[ikr] = " << res[ikr] << std::endl; ++ } ++ } ++ + } + + void hhc4jet::real_term(const event_type&, weight_type&) +diff -urN nlojet++-4.1.3_original/src/main_calc.cc nlojet++-4.1.3_new/src/main_calc.cc +--- nlojet++-4.1.3_original/src/main_calc.cc 2010-05-11 17:06:01.000000000 +0200 ++++ nlojet++-4.1.3_new/src/main_calc.cc 2014-05-16 11:42:12.645025735 +0200 +@@ -138,6 +138,7 @@ + // initialize the random seed + srand(seed); + ++ // KR: Add random seed printout + cout<<"User module : "<<usr<<"\n" + <<"Contribution : "<<contbl[in.contr]<<"\n" + <<"MC helicity sum : "<<(in.mchel ? "true" : "false")<<"\n" +@@ -147,6 +148,7 @@ + <<"Saving mode : "<<(in.txtout ? "text" : "binary")<<"\n" + <<"Save after : "<<in.nsave<<" events\n" + <<"Time rate In+1:In : "<<in.time<<":1\n" ++ <<"Random seed : "<<seed<<"\n" + <<endl; + + //----- open the user defined file ----- diff --git a/v2.6/generators/sherpa/ATLAS_2012_I1082936/MCgrid_ATLAS_2012_I1082936.str b/v2.6/generators/sherpa/ATLAS_2012_I1082936/MCgrid_ATLAS_2012_I1082936.str new file mode 100644 index 0000000000000000000000000000000000000000..939c5d288ca8169294d1e99e52416f93cf8bcf8d --- /dev/null +++ b/v2.6/generators/sherpa/ATLAS_2012_I1082936/MCgrid_ATLAS_2012_I1082936.str @@ -0,0 +1,163 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with MCGrid) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +# ScenarioName Name # Set by MCgrid to Rivet histogram name +#ScenarioDescription { +# "d2sigma-dijet_dm12_dy*_[pb_TeV]" +# "ATLAS_Collaboration" +# "Dijet_Mass" +# "anti-kT_R=0.6" +# "ATLAS-STDM-2011-02, arXiv:1112.6297, Phys. Rev. D 86 (2012) 014022." +# "RIVET_ID=ATLAS_2012_I1082936/d02-x01-Y01,SPIRES_ID=9320911,INSPIRE_RECORD=1082936" +# "THEORY_LABEL=NLOJet++" +# "provided by:" +# "fastNLO_2.3.1" +# "If you use this table, please cite:" +# " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +#} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) +UnitsOfCoefficients 12 # Unit of X section coeffients as passed to fastNLO (negative power of 10) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +# Defined by Rivet analyis/MCgrid, nothing to be done! + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# MCgrid/Rivet always book one grid per histogram --> single differential binning. +# Most things defined by Rivet analyis/MCgrid. +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "Mjj_[TeV]" +} +BinSizeFactor 1. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. +ScaleDescriptionScale1 "pT_max*exp(0.3*y_star)_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Defined by Rivet analyis/MCgrid, nothing to be done! + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +# Defined by Rivet analyis/MCgrid, nothing to be done. +# BUT: See PDF linear combinations settings below! + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +# Most things defined by Rivet analyis/MCgrid. +# GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +# ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) +# 0.5 1.0 2.0 # List of scale factors must include factor '1' +# } # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +# Most things defined by Rivet analyis/MCgrid. +# X_NNodes 15 # No. of support nodes for x-interpolation +# Mu1_NNodes 6 # No. of support nodes for scale interpolation + +# -------------------------------------------------------------------- # +# PDF linear combination settings +# -------------------------------------------------------------------- # +# Defined for Rivet analyis/MCgrid without subprocess matching! +PDF1 2212 +PDF2 2212 + +NSubProcessesLO 15 +NSubProcessesNLO 15 +NSubProcessesNNLO 15 +IPDFdef3LO 15 +IPDFdef3NLO 15 +IPDFdef3NNLO 15 + +PartonCombinationsLO {{ + # one line here! + 0 -5 -1 -2 -5 -4 -2 -4 -1 -4 -5 -5 -3 -2 -1 -3 -1 -2 -3 -4 -3 + 1 3 -4 3 -2 2 -5 1 -5 2 -3 3 -5 3 -1 4 -2 1 -2 1 -3 5 -4 4 -3 1 -4 4 -5 2 -4 4 -1 5 -2 5 -1 2 -1 5 -3 + 2 3 3 4 4 1 1 5 5 2 2 + 3 0 0 + 4 4 0 2 0 1 0 3 0 5 0 + 5 1 -1 3 -3 2 -2 4 -4 5 -5 + 6 -5 -5 -4 -4 -2 -2 -1 -1 -3 -3 + 7 -1 0 -2 0 -5 0 -3 0 -4 0 + 8 -3 3 -4 4 -1 1 -5 5 -2 2 + 9 1 5 3 4 3 5 5 4 2 4 3 2 1 2 1 3 5 2 1 4 + 10 -5 3 -3 2 -5 1 -1 4 -4 2 -4 3 -2 4 -1 5 -2 1 -5 2 -1 3 -3 1 -5 4 -4 1 -2 5 -1 2 -3 5 -4 5 -2 3 -3 4 + 11 4 1 3 1 4 2 5 1 2 3 2 1 5 3 4 3 4 5 2 5 + 12 0 -1 0 -3 0 -2 0 -5 0 -4 + 13 -1 -3 -3 -2 -3 -5 -5 -4 -3 -4 -1 -2 -5 -2 -2 -4 -1 -4 -1 -5 + 14 0 3 0 5 0 1 0 2 0 4 +}} + +PartonCombinationsNLO {{ + # one line here! + 0 -5 -1 -2 -5 -4 -2 -4 -1 -4 -5 -5 -3 -2 -1 -3 -1 -2 -3 -4 -3 + 1 3 -4 3 -2 2 -5 1 -5 2 -3 3 -5 3 -1 4 -2 1 -2 1 -3 5 -4 4 -3 1 -4 4 -5 2 -4 4 -1 5 -2 5 -1 2 -1 5 -3 + 2 3 3 4 4 1 1 5 5 2 2 + 3 0 0 + 4 4 0 2 0 1 0 3 0 5 0 + 5 1 -1 3 -3 2 -2 4 -4 5 -5 + 6 -5 -5 -4 -4 -2 -2 -1 -1 -3 -3 + 7 -1 0 -2 0 -5 0 -3 0 -4 0 + 8 -3 3 -4 4 -1 1 -5 5 -2 2 + 9 1 5 3 4 3 5 5 4 2 4 3 2 1 2 1 3 5 2 1 4 + 10 -5 3 -3 2 -5 1 -1 4 -4 2 -4 3 -2 4 -1 5 -2 1 -5 2 -1 3 -3 1 -5 4 -4 1 -2 5 -1 2 -3 5 -4 5 -2 3 -3 4 + 11 4 1 3 1 4 2 5 1 2 3 2 1 5 3 4 3 4 5 2 5 + 12 0 -1 0 -3 0 -2 0 -5 0 -4 + 13 -1 -3 -3 -2 -3 -5 -5 -4 -3 -4 -1 -2 -5 -2 -2 -4 -1 -4 -1 -5 + 14 0 3 0 5 0 1 0 2 0 4 +}} + +PartonCombinationsNNLO {{ + # one line here! + 0 -5 -1 -2 -5 -4 -2 -4 -1 -4 -5 -5 -3 -2 -1 -3 -1 -2 -3 -4 -3 + 1 3 -4 3 -2 2 -5 1 -5 2 -3 3 -5 3 -1 4 -2 1 -2 1 -3 5 -4 4 -3 1 -4 4 -5 2 -4 4 -1 5 -2 5 -1 2 -1 5 -3 + 2 3 3 4 4 1 1 5 5 2 2 + 3 0 0 + 4 4 0 2 0 1 0 3 0 5 0 + 5 1 -1 3 -3 2 -2 4 -4 5 -5 + 6 -5 -5 -4 -4 -2 -2 -1 -1 -3 -3 + 7 -1 0 -2 0 -5 0 -3 0 -4 0 + 8 -3 3 -4 4 -1 1 -5 5 -2 2 + 9 1 5 3 4 3 5 5 4 2 4 3 2 1 2 1 3 5 2 1 4 + 10 -5 3 -3 2 -5 1 -1 4 -4 2 -4 3 -2 4 -1 5 -2 1 -5 2 -1 3 -3 1 -5 4 -4 1 -2 5 -1 2 -3 5 -4 5 -2 3 -3 4 + 11 4 1 3 1 4 2 5 1 2 3 2 1 5 3 4 3 4 5 2 5 + 12 0 -1 0 -3 0 -2 0 -5 0 -4 + 13 -1 -3 -3 -2 -3 -5 -5 -4 -3 -4 -1 -2 -5 -2 -2 -4 -1 -4 -1 -5 + 14 0 3 0 5 0 1 0 2 0 4 +}} diff --git a/v2.6/generators/sherpa/ATLAS_2012_I1082936/Makefile b/v2.6/generators/sherpa/ATLAS_2012_I1082936/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..946b3e9118093c7043878b17326f05b87eab15b1 --- /dev/null +++ b/v2.6/generators/sherpa/ATLAS_2012_I1082936/Makefile @@ -0,0 +1,75 @@ +# Determine Rivet analysis name +MAKEFILEPATH := $(abspath $(lastword $(MAKEFILE_LIST))) +ANALYSIS := MCgrid_$(notdir $(patsubst %/,%,$(dir $(MAKEFILEPATH)))) + +# Rivet flags +RFLAGS=$(shell rivet-config --cppflags) +RLDFLAGS=$(shell rivet-config --ldflags) +RDATA=$(shell rivet-config --datadir) +RLIBS=$(shell rivet-config --libdir) + +# APPLgrid flags +# The ":=" must be there to have a single-expanded make variable! +APPLVERSION:=$(shell applgrid-config --version 2>/dev/null) +APPLFLAGS=$(shell applgrid-config --cxxflags) +APPLLDFLAGS=$(shell applgrid-config --ldflags) +APPLSHARE=$(shell applgrid-config --share) + +# fastNLO flags +# The ":=" must be there to have a single-expanded make variable! +FNLOVERSION:=$(shell fnlo-tk-config --version 2>/dev/null) +FNLOFLAGS=$(shell fnlo-tk-config --cxxflags) +FNLOLDFLAGS=$(shell fnlo-tk-config --ldflags) +FNLOSHARE=$(shell fnlo-tk-config --share) + +# MCgrid flags +MCFLAGS=$(shell pkg-config mcgrid --cflags) +MCLDFLAGS=$(shell pkg-config mcgrid --libs) + +# combine flags +PLGFLAGS=$(RFLAGS) $(AFLAGS) $(MCFLAGS) +PLGLDFLAGS=$(RLDFLAGS) $(ALDFLAGS) $(MCLDFLAGS) + +# plugin input/output and data +RTARGET = analysis/Rivet$(ANALYSIS)Plugins.so +RSOURCES = $(wildcard ./analysis/*.cc) +RYODAFILE = $(wildcard ./analysis/*.yoda) +RDATAFILES = $(wildcard ./analysis/*.info) $(wildcard ./analysis/*.plot) $(RYODAFILE) + +all: plugin-applgrid plugin-fastnlo + +.PHONY: all plugin-applgrid plugin-fastnlo clean install install-applgrid + +plugin-applgrid: +ifdef APPLVERSION + @echo "Building APPLgrid plugin with version $(APPLVERSION)" + rivet-buildplugin $(RTARGET) $(RSOURCES) $(PLGFLAGS) $(PLGLDFLAGS) -DUSE_APPL=1 +else + @echo "APPLgrid not found, no plugin built!" +endif + +plugin-fastnlo: +ifdef FNLOVERSION + @echo "Building fastNLO plugin with version $(FNLOVERSION)" + rivet-buildplugin $(RTARGET) $(RSOURCES) $(PLGFLAGS) $(PLGLDFLAGS) -DUSE_FNLO=1 +else + @echo "fastNLO not found, no plugin built!" +endif + +clean: + rm -f $(RTARGET) + +install: + cp $(RDATAFILES) $(RDATA) + cp $(RTARGET) $(RLIBS) + +install-applgrid: + cp ./subprocesses/*.config $(ASHARE) + +# Temporarily hide the data file before plotting as rivet-mkhtml will otherwise normalise against data +# which is not very useful if we want to compare the tiny deviations between grid and generator +# (on the other hand, data must be available for the Rivet init phase, so it has to be installed) +comparison-plot: + rm -f $(RDATA)/$(ANALYSIS).yoda + rivet-mkhtml *yoda + cp $(RYODAFILE) $(RDATA) diff --git a/v2.6/generators/sherpa/ATLAS_2012_I1082936/Process/Comix.db b/v2.6/generators/sherpa/ATLAS_2012_I1082936/Process/Comix.db new file mode 100644 index 0000000000000000000000000000000000000000..6b92c4854d0f61b137f8f8b34a9bfdbebcd2a2b2 Binary files /dev/null and b/v2.6/generators/sherpa/ATLAS_2012_I1082936/Process/Comix.db differ diff --git a/v2.6/generators/sherpa/ATLAS_2012_I1082936/Results.db b/v2.6/generators/sherpa/ATLAS_2012_I1082936/Results.db new file mode 100644 index 0000000000000000000000000000000000000000..5cf9240d10695a21ca48c876724e830b517524f5 Binary files /dev/null and b/v2.6/generators/sherpa/ATLAS_2012_I1082936/Results.db differ diff --git a/v2.6/generators/sherpa/ATLAS_2012_I1082936/Run_prod.dat b/v2.6/generators/sherpa/ATLAS_2012_I1082936/Run_prod.dat new file mode 100644 index 0000000000000000000000000000000000000000..54a902b33c36dbf3bc01983fab1b0c76274b4953 --- /dev/null +++ b/v2.6/generators/sherpa/ATLAS_2012_I1082936/Run_prod.dat @@ -0,0 +1,95 @@ +(run){ + # Set analysis type to run, default is "0", i.e. none! + ANALYSIS Rivet; + # Set no. of events or override via cmdline option -e events + EVENTS 1000000; + # Enforce pure parton-level events without shower, MPI, fragmentation, or beam remnants and primordial kT + SHOWER_GENERATOR=None + FRAGMENTATION=Off + MI_HANDLER=None + BEAM_REMNANTS=0; + + # Make sure that the top is not considered for the Sherpa a_s running, + # because usually the PDF provided a_s running does not know about the top. + MASS[6] = 1e20; + + # Define variable for QCD NLO parts to calculate: B: Born, V: Virtual, I: Integrated Subtraction, RS: Real Correction + NLOPART:=BVIRS; + # Define variable for loop calculation provider + LOOPGEN:=BlackHat; + # Define variables for scale factors of squared(!) factorization, renormalization, and resummation scale + FSF:=1.; RSF:=1.; QSF:=1.; + + # Define variable for the jet algorithm + JETALGO:=antikt; + # Define variable for the jet size R + RJET:=0.6; + # Define variable for minimum jet pT + MINPT:=20.; + # Define variable for minimum leading jet pT + MINPTMAX:=30.; +}(run); + +(isr){ + # Use Sherpa's internal PDF library + # PDF_LIBRARY=CT10Sherpa; + # PDF_SET=ct10; + # Or get better results using the LHAPDF interface of Sherpa + # (if configured with --enable-lhapdf=/path/to/lhapdf) + PDF_LIBRARY=LHAPDFSherpa; + PDF_SET=CT10nlo; +}(isr); + +(beam){ + # LHC collider setup + BEAM_1 2212; BEAM_ENERGY_1 3500; + BEAM_2 2212; BEAM_ENERGY_2 3500; +}(beam); + +(me){ + # ME generation setup + ME_SIGNAL_GENERATOR Comix, Internal; + EVENT_GENERATION_MODE Weighted; + # Set the scale squared(!) to be used for the factorization, renormalization, and resummation scale. + # The scale factors defined above can be applied here. + # Set scales from jets reconstructed with fastjet: A:algo,PT:pT_jet_min,R:jet_size_R,M:autoscale + # M:0 requires to set all three scales^2 within {}{}{} + SCALES FASTJET[A:JETALGO,PT:MINPT,R:RJET,M:0]{FSF*PPerp2(p[2])*exp(0.3*abs(DY(p[2],p[3])))}{RSF*PPerp2(p[2])*exp(0.3*abs(DY(p[2],p[3])))}{QSF*0.25*PPerp2(p[3])}; +}(me); + +(processes){ + # Set process via incoming and outgoing object types + # 93 corresponds to "jets" and means all quarks considered massless and gluons + Process 93 93 -> 93 93; + # Do a fixed-order calculation only + NLO_QCD_Mode Fixed_Order; + # Set the QCD NLO parts to calculate + NLO_QCD_Part NLOPART; + # Set the loop calculation provider + Loop_Generator LOOPGEN; + # Set the orders to be considered for a process, first number is QCD, second number for EW + # An "*" means multiple orders as far as possible + Order (*,0); + End process; +}(processes); + +(selector){ + # Selection on jets reconstructed with fastjet: <algo> <n_jet_min> <pT_jet_min> <ET_jet_min> <jet_size_R> + FastjetSelector PPerp(p[2])>30. antikt 2 MINPT 0.0 RJET; +}(selector); + +(analysis){ + # Set Rivet analysis + BEGIN_RIVET { + -a MCgrid_ATLAS_2012_I1082936; + IGNOREBEAMS 1; + USE_HEPMC_SHORT 1; + USE_HEPMC_EXTENDED_WEIGHTS 1; + } END_RIVET; +}(analysis); + +(integration){ + # Set integration precision to be used + ERROR 0.3; + Finish_Optimization=On; +}(integration); diff --git a/v2.6/generators/sherpa/ATLAS_2012_I1082936/analysis/MCgrid_ATLAS_2012_I1082936.cc b/v2.6/generators/sherpa/ATLAS_2012_I1082936/analysis/MCgrid_ATLAS_2012_I1082936.cc new file mode 100644 index 0000000000000000000000000000000000000000..7c0a592f598514c30813228a7eeae9c4bc1f05b0 --- /dev/null +++ b/v2.6/generators/sherpa/ATLAS_2012_I1082936/analysis/MCgrid_ATLAS_2012_I1082936.cc @@ -0,0 +1,142 @@ +// -*- C++ -*- +#include "Rivet/Analysis.hh" +#include "Rivet/Projections/FinalState.hh" +#include "Rivet/Projections/FastJets.hh" +#include "Rivet/Tools/BinnedHistogram.hh" + +// MCgrid headers +#include "mcgrid/mcgrid.hh" +#include "mcgrid/mcgrid_binned.hh" + +// How many of the 2nd dimension bins should be translated to grids +//#define N_HISTOS 9 +#define N_HISTOS 1 + +namespace Rivet { + + // Dijet mass histograms, R=0.6 + class MCgrid_ATLAS_2012_I1082936 : public Analysis { + public: + + /// Constructor + MCgrid_ATLAS_2012_I1082936() : Analysis("MCgrid_ATLAS_2012_I1082936") {} + + + /// Book histograms and initialise projections before the run + void init() { + +#if USE_APPL && USE_FNLO + cerr << "MCgrid error: This analysis is configured to generate both an APPLgrid and a fastNLO table." << endl; + cerr << "But using multiple binned histograms is not supported yet." << endl; + exit(-1); +#endif + + // Initialize the projectors: + const FinalState fs; + addProjection(fs,"FinalState"); + + FastJets fj06(fs, FastJets::ANTIKT, 0.6); + fj06.useInvisibles(); + addProjection(fj06, "AntiKT06"); + + // Histogram binning in 2nd dimension + double ystarbins[] = { 0.0, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.4}; + + size_t massDsOffset = 4; // 4th series of histograms, i.e. d04-xnn-ymm + for (size_t i = 0; i < N_HISTOS; i++) { + _hist_mass.addHistogram(ystarbins[i], ystarbins[i+1], bookHisto1D(massDsOffset, 1, i+1)); + } + + const vector<Histo1DPtr> histos = _hist_mass.getHistograms(); + string subprocFileName("basic"); + // string subprocFileName("MCgrid_ATLAS_2012_I1082936"); +#if USE_APPL + subprocFileName += ".config"; +#elif USE_FNLO + subprocFileName += ".str"; +#endif + MCgrid::subprocessConfig subproc(subprocFileName, + MCgrid::BEAM_PROTON, + MCgrid::BEAM_PROTON); + + +#if USE_APPL + MCgrid::applGridConfig config(2, subproc, MCgrid::highPrecAPPLgridArch, 1E-5, 1, 10, 1E7); +#elif USE_FNLO + MCgrid::fastnloGridArch arch(15, 6, "Lagrange", "Lagrange", "sqrtlog10", "loglog025"); + MCgrid::fastnloConfig config(2, subproc, arch, 7000.0); +#endif + + // Book grids, and push into BinnedGrid instance + MCgrid::gridPtr grid; + for (size_t i(0); i < N_HISTOS; i++) { + grid = MCgrid::bookGrid(histos[i], histoDir(), config); + _grid_mass.addGrid(ystarbins[i], ystarbins[i+1], grid); + } + } + + /// Perform the per-event analysis + void analyze(const Event& event) { + + // MCgrid event counter + MCgrid::PDFHandler::HandleEvent(event, histoDir()); + + const double weight = event.weight(); + const FastJets &fj = applyProjection<FastJets>(event, "AntiKT06"); + const Jets& jets = fj.jetsByPt(Cuts::pT > 20*GeV && Cuts::absrap < 4.4); + + // Identify dijets + vector<FourMomentum> leadjets; + foreach (const Jet& jet, jets) { + const double pT = jet.pT(); + + // Make sure we have a leading jet with pT >30 GeV and a second to leading jet with pT>20 GeV + if (leadjets.size() < 2) { + if (leadjets.empty() && pT < 30*GeV) continue; + leadjets.push_back(jet.momentum()); + } + } + // Make sure we have the required two leading jets + if (leadjets.size() < 2) { + MSG_DEBUG("Could not find two suitable leading jets"); + // cout << "MSG_DEBUG: Could not find two suitable leading jets" << endl; + } else { + // cout << "pT1 = " << leadjets[0].pT() << ", pT2 = " << leadjets[1].pT() << ", dpT12 = " << leadjets[0].pT() - leadjets[1].pT() << endl; + const double y1 = leadjets[0].rapidity(); + const double y2 = leadjets[1].rapidity(); + const double ystar = fabs(y1-y2)/2.; + const double m = (leadjets[0] + leadjets[1]).mass(); + // cout << "mass = " << m << endl; + // Fill mass histogram + _hist_mass.fill(ystar, m/TeV, weight); + _grid_mass.fill(ystar, m/TeV, event); + } + } + + /// Normalise histograms etc., after the run + void finalize() { + // _hist_mass.scale(crossSectionPerEvent()/picobarn, this); + // _grid_mass.scale(crossSectionPerEvent()/picobarn); + _hist_mass.scale(crossSection()/sumOfWeights(), this); + _grid_mass.scale(crossSection()/sumOfWeights()); + _grid_mass.exportgrids(); + + cout << "DEBUG: crossSection() = " << crossSection() << ", sumOfWeights() = " << sumOfWeights() << ", picobarn = " << picobarn << endl; + cout << "DEBUG: crossSectionPerEvent() = " << crossSectionPerEvent() << endl; + cout << "DEBUG: crossSection()/sumOfWeights() = " << crossSection()/sumOfWeights() << endl; + + // Clear MCgrid event counter + MCgrid::PDFHandler::CheckOutAnalysis(histoDir()); + } + + private: + + /// The di-jet mass spectrum binned in rapidity for akt6 jets + BinnedHistogram<double> _hist_mass; + MCgrid::BinnedGrid<double> _grid_mass; + }; + + // The hook for the plugin system + DECLARE_RIVET_PLUGIN(MCgrid_ATLAS_2012_I1082936); + +} diff --git a/v2.6/generators/sherpa/ATLAS_2012_I1082936/analysis/MCgrid_ATLAS_2012_I1082936.cc.orig b/v2.6/generators/sherpa/ATLAS_2012_I1082936/analysis/MCgrid_ATLAS_2012_I1082936.cc.orig new file mode 100644 index 0000000000000000000000000000000000000000..1954abdf62c067c51168ec2f7245852af8dee70c --- /dev/null +++ b/v2.6/generators/sherpa/ATLAS_2012_I1082936/analysis/MCgrid_ATLAS_2012_I1082936.cc.orig @@ -0,0 +1,130 @@ +// -*- C++ -*- +#include "Rivet/Analysis.hh" +#include "Rivet/Projections/FastJets.hh" +#include "Rivet/Tools/BinnedHistogram.hh" +#include "Rivet/Projections/FinalState.hh" + +namespace Rivet { + + + class ATLAS_2012_I1082936 : public Analysis { + public: + + /// @name Constructors etc. + //@{ + + /// Constructor + ATLAS_2012_I1082936() + : Analysis("ATLAS_2012_I1082936") + { + } + + //@} + + + public: + + /// @name Analysis methods + //@{ + + /// Book histograms and initialise projections before the run + void init() { + + const FinalState fs; + addProjection(fs,"FinalState"); + + FastJets fj04(fs, FastJets::ANTIKT, 0.4); + fj04.useInvisibles(); + addProjection(fj04, "AntiKT04"); + + FastJets fj06(fs, FastJets::ANTIKT, 0.6); + fj06.useInvisibles(); + addProjection(fj06, "AntiKT06"); + + + // Histogram booking copied from the previous analysis + double ybins[] = { 0.0, 0.3, 0.8, 1.2, 2.1, 2.8, 3.6, 4.4 }; + double ystarbins[] = { 0.0, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.4}; + + size_t ptDsOffset(0), massDsOffset(2); + for (size_t alg = 0; alg < 2; ++alg) { + for (size_t i = 0; i < 7; ++i) { + _pThistos[alg].addHistogram(ybins[i], ybins[i+1], bookHisto1D(1 + ptDsOffset, 1, i+1)); + } + ptDsOffset += 1; + + for (size_t i = 0; i < 9; ++i) { + _mass[alg].addHistogram(ystarbins[i], ystarbins[i+1], bookHisto1D(1 + massDsOffset, 1, i+1)); + } + massDsOffset += 1; + } + } + + /// Perform the per-event analysis + void analyze(const Event& event) { + const double weight = event.weight(); + Jets jetAr[2]; + jetAr[AKT6] = applyProjection<FastJets>(event, "AntiKT06").jetsByPt(20*GeV); + jetAr[AKT4] = applyProjection<FastJets>(event, "AntiKT04").jetsByPt(20*GeV); + + // Loop over jet "radii" used in analysis + for (size_t alg = 0; alg < 2; ++alg) { + // Identify dijets + vector<FourMomentum> leadjets; + foreach (const Jet& jet, jetAr[alg]) { + const double pT = jet.pT(); + const double absy = jet.absrap(); + _pThistos[alg].fill(absy, pT/GeV, weight); + + if (absy < 4.4 && leadjets.size() < 2) { + if (leadjets.empty() && pT < 30*GeV) continue; + leadjets.push_back(jet.momentum()); + } + } + // Make sure we have a leading jet with pT >30 GeV and a second to leading jet with pT>20 GeV + if (leadjets.size() < 2) { + MSG_DEBUG("Could not find two suitable leading jets"); + continue; + } + + const double y1 = leadjets[0].rapidity(); + const double y2 = leadjets[1].rapidity(); + const double ystar = fabs(y1-y2)/2.; + const double m = (leadjets[0] + leadjets[1]).mass(); + // Fill mass histogram + _mass[alg].fill(ystar, m/TeV, weight); + } + } + + + /// Normalise histograms etc., after the run + void finalize() { + for (size_t alg = 0; alg < 2; ++alg) { + // factor 0.5 needed because it is differential in dy and not d|y| + _pThistos[alg].scale(0.5*crossSectionPerEvent()/picobarn, this); + _mass[alg].scale(crossSectionPerEvent()/picobarn, this); +} + } + + //@} + + + private: + + // Data members like post-cuts event weight counters go here + + enum Alg { AKT4=0, AKT6=1 }; + + private: + + /// The inclusive pT spectrum for akt6 and akt4 jets (array index is jet type from enum above) + BinnedHistogram<double> _pThistos[2]; + + /// The di-jet mass spectrum binned in rapidity for akt6 and akt4 jets (array index is jet type from enum above) + BinnedHistogram<double> _mass[2]; + }; + + // The hook for the plugin system + DECLARE_RIVET_PLUGIN(ATLAS_2012_I1082936); + +} diff --git a/v2.6/generators/sherpa/ATLAS_2012_I1082936/analysis/MCgrid_ATLAS_2012_I1082936.info b/v2.6/generators/sherpa/ATLAS_2012_I1082936/analysis/MCgrid_ATLAS_2012_I1082936.info new file mode 100644 index 0000000000000000000000000000000000000000..b0348c456af096ab4c8ebcc53f6f82490370ce5a --- /dev/null +++ b/v2.6/generators/sherpa/ATLAS_2012_I1082936/analysis/MCgrid_ATLAS_2012_I1082936.info @@ -0,0 +1,33 @@ +Name: MCgrid_ATLAS_2012_I1082936 +Year: 2012 +Summary: Inclusive jet and dijet cross sections at 7 TeV +Experiment: ATLAS +Collider: LHC +InspireID: 1082936 +Status: VALIDATED +Authors: + - Holger Schulz hschulz@physik.hu-berlin.de +References: + - arXiv:1112.6297v2 [hep-ex] + - CERN-PH-EP-2011-192 +RunInfo: + QCD jet production with a minimum leading jet pT of 30 GeV and minimum second jet pT of 20 GeV at 7 TeV. +NumEvents: 1000000 +Beams: [p+, p+] +Energies: [[3500, 3500]] +PtCuts: [15] +NeedCrossSection: True +Description: + 'Inclusive jet and dijet cross sections have been measured in proton-proton collisions at a centre-of-mass energy of 7 TeV using the ATLAS detector at the Large Hadron Collider. The cross sections were measured using jets clustered with the anti-kT algorithm with parameters R=0.4 and R=0.6. These measurements are based on the 2010 data sample, consisting of a total integrated luminosity of 37 inverse picobarns. Inclusive jet double-differential cross sections are presented as a function of jet transverse momentum, in bins of jet rapidity. Dijet double-differential cross sections are studied as a function of the dijet invariant mass, in bins of half the rapidity separation of the two leading jets. The measurements are performed in the jet rapidity range $|y|<4.4$, covering jet transverse momenta from 20 GeV to 1.5 TeV and dijet invariant masses from 70 GeV to 5 TeV. This is the successor analysis of ATLAS_2010_S8817804' +BibKey: Aad:2011fc +BibTeX: '@article{Aad:2011fc, + author = "Aad, Georges and others", + title = "{Measurement of inclusive jet and dijet production in $pp$ collisions at $\sqrt{s} = 7$ TeV using the ATLAS detector}", + collaboration = "ATLAS Collaboration", + year = "2011", + eprint = "1112.6297", + archivePrefix = "arXiv", + primaryClass = "hep-ex", + reportNumber = "CERN-PH-EP-2011-192", + SLACcitation = "%%CITATION = ARXIV:1112.6297;%%", +}' diff --git a/v2.6/generators/sherpa/ATLAS_2012_I1082936/analysis/MCgrid_ATLAS_2012_I1082936.plot b/v2.6/generators/sherpa/ATLAS_2012_I1082936/analysis/MCgrid_ATLAS_2012_I1082936.plot new file mode 100644 index 0000000000000000000000000000000000000000..b2e5d062fea6747ce0b2bf6102064b880ce52ce8 --- /dev/null +++ b/v2.6/generators/sherpa/ATLAS_2012_I1082936/analysis/MCgrid_ATLAS_2012_I1082936.plot @@ -0,0 +1,233 @@ +# BEGIN PLOT /MCgrid_ATLAS_2012_I1082936/d01-x01-y01 +Title=Incl. jet double-diff. x-section, anti-$k_t$ 0.4 ($\left|y\right| < 0.3$) +XLabel=$p_\perp$~[GeV] +YLabel=$\text{d}^2\sigma/\text{d}p_\perp\text{d}y$~[pb/GeV] +YMin=1e-4 +# END PLOT + +# BEGIN PLOT /MCgrid_ATLAS_2012_I1082936/d01-x01-y02 +Title=Incl. jet double-diff. x-section, anti-$k_t$ 0.4 ($0.3 \leq \left|y\right| < 0.8$) +XLabel=$p_\perp$~[GeV] +YLabel=$\text{d}^2\sigma/\text{d}p_\perp\text{d}y$~[pb/GeV] +YMin=1e-5 +# END PLOT + +# BEGIN PLOT /MCgrid_ATLAS_2012_I1082936/d01-x01-y03 +Title=Incl. jet double-diff. x-section, anti-$k_t$ 0.4 ($0.8 \leq \left|y\right| < 1.2$) +XLabel=$p_\perp$~[GeV] +YLabel=$\text{d}^2\sigma/\text{d}p_\perp\text{d}y$~[pb/GeV] +YMin=1e-5 +# END PLOT + +# BEGIN PLOT /MCgrid_ATLAS_2012_I1082936/d01-x01-y04 +Title=Incl. jet double-diff. x-section, anti-$k_t$ 0.4 ($1.2 \leq \left|y\right| < 2.1$) +XLabel=$p_\perp$~[GeV] +YLabel=$\text{d}^2\sigma/\text{d}p_\perp\text{d}y$~[pb/GeV] +YMin=1e-6 +# END PLOT + +# BEGIN PLOT /MCgrid_ATLAS_2012_I1082936/d01-x01-y05 +Title=Incl. jet double-diff. x-section, anti-$k_t$ 0.4 ($2.1 \leq \left|y\right| < 2.8$) +XLabel=$p_\perp$~[GeV] +YLabel=$\text{d}^2\sigma/\text{d}p_\perp\text{d}y$~[pb/GeV] +YMin=1e-6 +# END PLOT + +# BEGIN PLOT /MCgrid_ATLAS_2012_I1082936/d01-x01-y06 +Title=Incl. jet double-diff. x-section, anti-$k_t$ 0.4 ($2.8 \leq \left|y\right| < 3.6$) +XLabel=$p_\perp$~[GeV] +YLabel=$\text{d}^2\sigma/\text{d}p_\perp\text{d}y$~[pb/GeV] +YMin=1e-3 +# END PLOT + +# BEGIN PLOT /MCgrid_ATLAS_2012_I1082936/d01-x01-y07 +Title=Incl. jet double-diff. x-section, anti-$k_t$ 0.4 ($3.6 \leq \left|y\right| < 4.4$) +XLabel=$p_\perp$~[GeV] +YLabel=$\text{d}^2\sigma/\text{d}p_\perp\text{d}y$~[pb/GeV] +YMin=1e-1 +# END PLOT + +# BEGIN PLOT /MCgrid_ATLAS_2012_I1082936/d02-x01-y01 +Title=Incl. jet double-diff. x-section, anti-$k_t$ 0.6 ($\left|y\right| < 0.3$) +XLabel=$p_\perp$~[GeV] +YLabel=$\text{d}^2\sigma/\text{d}p_\perp\text{d}y$~[pb/GeV] +YMin=1e-4 +# END PLOT + +# BEGIN PLOT /MCgrid_ATLAS_2012_I1082936/d02-x01-y02 +Title=Incl. jet double-diff. x-section, anti-$k_t$ 0.6 ($0.3 \leq \left|y\right| < 0.8$) +XLabel=$p_\perp$~[GeV] +YLabel=$\text{d}^2\sigma/\text{d}p_\perp\text{d}y$~[pb/GeV] +YMin=1e-5 +# END PLOT + +# BEGIN PLOT /MCgrid_ATLAS_2012_I1082936/d02-x01-y03 +Title=Incl. jet double-diff. x-section, anti-$k_t$ 0.6 ($0.8 \leq \left|y\right| < 1.2$) +XLabel=$p_\perp$~[GeV] +YLabel=$\text{d}^2\sigma/\text{d}p_\perp\text{d}y$~[pb/GeV] +YMin=1e-5 +# END PLOT + +# BEGIN PLOT /MCgrid_ATLAS_2012_I1082936/d02-x01-y04 +Title=Incl. jet double-diff. x-section, anti-$k_t$ 0.6 ($1.2 \leq \left|y\right| < 2.1$) +XLabel=$p_\perp$~[GeV] +YLabel=$\text{d}^2\sigma/\text{d}p_\perp\text{d}y$~[pb/GeV] +YMin=1e-6 +# END PLOT + +# BEGIN PLOT /MCgrid_ATLAS_2012_I1082936/d02-x01-y05 +Title=Incl. jet double-diff. x-section, anti-$k_t$ 0.6 ($2.1 \leq \left|y\right| < 2.8$) +XLabel=$p_\perp$~[GeV] +YLabel=$\text{d}^2\sigma/\text{d}p_\perp\text{d}y$~[pb/GeV] +YMin=1e-6 +# END PLOT + +# BEGIN PLOT /MCgrid_ATLAS_2012_I1082936/d02-x01-y06 +Title=Incl. jet double-diff. x-section, anti-$k_t$ 0.6 ($2.8 \leq \left|y\right| < 3.6$) +XLabel=$p_\perp$~[GeV] +YLabel=$\text{d}^2\sigma/\text{d}p_\perp\text{d}y$~[pb/GeV] +YMin=1e-3 +# END PLOT + +# BEGIN PLOT /MCgrid_ATLAS_2012_I1082936/d02-x01-y07 +Title=Incl. jet double-diff. x-section, anti-$k_t$ 0.6 ($3.6 \leq \left|y\right| < 4.4$) +XLabel=$p_\perp$~[GeV] +YLabel=$\text{d}^2\sigma/\text{d}p_\perp\text{d}y$~[pb/GeV] +YMin=1e-1 +# END PLOT + +# BEGIN PLOT /MCgrid_ATLAS_2012_I1082936/d03-x01-y01 +Title=Dijet double-diff. x-section, anti-$k_t$ 0.4 ($y^* < 0.5$) +XLabel=$m_{12}$~[TeV] +YLabel=$\text{d}^2\sigma/\text{d}m_{12}\text{d}y^*$~[pb/TeV] +FullRange=1 +# END PLOT + +# BEGIN PLOT /MCgrid_ATLAS_2012_I1082936/d03-x01-y02 +Title=Dijet double-diff. x-section, anti-$k_t$ 0.4 ($0.5 \leq y^* < 1.0$) +XLabel=$m_{12}$~[TeV] +YLabel=$\text{d}^2\sigma/\text{d}m_{12}\text{d}y^*$~[pb/TeV] +FullRange=1 +# END PLOT + +# BEGIN PLOT /MCgrid_ATLAS_2012_I1082936/d03-x01-y03 +Title=Dijet double-diff. x-section, anti-$k_t$ 0.4 ($1.0 \leq y^* < 1.5$) +XLabel=$m_{12}$~[TeV] +YLabel=$\text{d}^2\sigma/\text{d}m_{12}\text{d}y^*$~[pb/TeV] +FullRange=1 +# END PLOT + +# BEGIN PLOT /MCgrid_ATLAS_2012_I1082936/d03-x01-y04 +Title=Dijet double-diff. x-section, anti-$k_t$ 0.4 ($1.5 \leq y^* < 2.0$) +XLabel=$m_{12}$~[TeV] +YLabel=$\text{d}^2\sigma/\text{d}m_{12}\text{d}y^*$~[pb/TeV] +FullRange=1 +# END PLOT + +# BEGIN PLOT /MCgrid_ATLAS_2012_I1082936/d03-x01-y05 +Title=Dijet double-diff. x-section, anti-$k_t$ 0.4 ($2.0 \leq y^* < 2.5$) +XLabel=$m_{12}$~[TeV] +YLabel=$\text{d}^2\sigma/\text{d}m_{12}\text{d}y^*$~[pb/TeV] +FullRange=1 +# END PLOT + +# BEGIN PLOT /MCgrid_ATLAS_2012_I1082936/d03-x01-y06 +Title=Dijet double-diff. x-section, anti-$k_t$ 0.4 ($2.5 \leq y^* < 3.0$) +XLabel=$m_{12}$~[TeV] +YLabel=$\text{d}^2\sigma/\text{d}m_{12}\text{d}y^*$~[pb/TeV] +FullRange=1 +# END PLOT + +# BEGIN PLOT /MCgrid_ATLAS_2012_I1082936/d03-x01-y07 +Title=Dijet double-diff. x-section, anti-$k_t$ 0.4 ($3.0 \leq y^* < 3.5$) +XLabel=$m_{12}$~[TeV] +YLabel=$\text{d}^2\sigma/\text{d}m_{12}\text{d}y^*$~[pb/TeV] +FullRange=1 +# END PLOT + +# BEGIN PLOT /MCgrid_ATLAS_2012_I1082936/d03-x01-y08 +Title=Dijet double-diff. x-section, anti-$k_t$ 0.4 ($3.5 \leq y^* < 4.0$) +XLabel=$m_{12}$~[TeV] +YLabel=$\text{d}^2\sigma/\text{d}m_{12}\text{d}y^*$~[pb/TeV] +FullRange=1 +# END PLOT + +# BEGIN PLOT /MCgrid_ATLAS_2012_I1082936/d03-x01-y09 +Title=Dijet double-diff. x-section, anti-$k_t$ 0.4 ($4.0 \leq y^* < 4.4$) +XLabel=$m_{12}$~[TeV] +YLabel=$\text{d}^2\sigma/\text{d}m_{12}\text{d}y^*$~[pb/TeV] +FullRange=1 +# END PLOT + +# BEGIN PLOT /MCgrid_ATLAS_2012_I1082936/d04-x01-y01 +Title=Dijet double-diff. x-section, anti-$k_t$ 0.6 ($y^* < 0.5$) +XLabel=$m_{12}$~[TeV] +YLabel=$\text{d}^2\sigma/\text{d}m_{12}\text{d}y^*$~[pb/TeV] +FullRange=1 +# END PLOT + +# BEGIN PLOT /MCgrid_ATLAS_2012_I1082936/d04-x01-y02 +Title=Dijet double-diff. x-section, anti-$k_t$ 0.6 ($0.5 \leq y^* < 1.0$) +XLabel=$m_{12}$~[TeV] +YLabel=$\text{d}^2\sigma/\text{d}m_{12}\text{d}y^*$~[pb/TeV] +FullRange=1 +# END PLOT + +# BEGIN PLOT /MCgrid_ATLAS_2012_I1082936/d04-x01-y03 +Title=Dijet double-diff. x-section, anti-$k_t$ 0.6 ($1.0 \leq y^* < 1.5$) +XLabel=$m_{12}$~[TeV] +YLabel=$\text{d}^2\sigma/\text{d}m_{12}\text{d}y^*$~[pb/TeV] +FullRange=1 +# END PLOT + +# BEGIN PLOT /MCgrid_ATLAS_2012_I1082936/d04-x01-y04 +Title=Dijet double-diff. x-section, anti-$k_t$ 0.6 ($1.5 \leq y^* < 2.0$) +XLabel=$m_{12}$~[TeV] +YLabel=$\text{d}^2\sigma/\text{d}m_{12}\text{d}y^*$~[pb/TeV] +FullRange=1 +# END PLOT + +# BEGIN PLOT /MCgrid_ATLAS_2012_I1082936/d04-x01-y05 +Title=Dijet double-diff. x-section, anti-$k_t$ 0.6 ($2.0 \leq y^* < 2.5$) +XLabel=$m_{12}$~[TeV] +YLabel=$\text{d}^2\sigma/\text{d}m_{12}\text{d}y^*$~[pb/TeV] +FullRange=1 +RatioPlotYMin=0.25 +RatioPlotYMax=2.5 +# END PLOT + +# BEGIN PLOT /MCgrid_ATLAS_2012_I1082936/d04-x01-y06 +Title=Dijet double-diff. x-section, anti-$k_t$ 0.6 ($2.5 \leq y^* < 3.0$) +XLabel=$m_{12}$~[TeV] +YLabel=$\text{d}^2\sigma/\text{d}m_{12}\text{d}y^*$~[pb/TeV] +FullRange=1 +RatioPlotYMin=0.25 +RatioPlotYMax=2.5 +# END PLOT + +# BEGIN PLOT /MCgrid_ATLAS_2012_I1082936/d04-x01-y07 +Title=Dijet double-diff. x-section, anti-$k_t$ 0.6 ($3.0 \leq y^* < 3.5$) +XLabel=$m_{12}$~[TeV] +YLabel=$\text{d}^2\sigma/\text{d}m_{12}\text{d}y^*$~[pb/TeV] +FullRange=1 +RatioPlotYMin=0.25 +RatioPlotYMax=2.5 +# END PLOT + +# BEGIN PLOT /MCgrid_ATLAS_2012_I1082936/d04-x01-y08 +Title=Dijet double-diff. x-section, anti-$k_t$ 0.6 ($3.5 \leq y^* < 4.0$) +XLabel=$m_{12}$~[TeV] +YLabel=$\text{d}^2\sigma/\text{d}m_{12}\text{d}y^*$~[pb/TeV] +FullRange=1 +RatioPlotYMin=0.0 +RatioPlotYMax=4.0 +# END PLOT + +# BEGIN PLOT /MCgrid_ATLAS_2012_I1082936/d04-x01-y09 +Title=Dijet double-diff. x-section, anti-$k_t$ 0.6 ($4.0 \leq y^* < 4.4$) +XLabel=$m_{12}$~[TeV] +YLabel=$\text{d}^2\sigma/\text{d}m_{12}\text{d}y^*$~[pb/TeV] +FullRange=1 +RatioPlotYMin=0.0 +RatioPlotYMax=4.0 +# END PLOT diff --git a/v2.6/generators/sherpa/ATLAS_2012_I1082936/analysis/MCgrid_ATLAS_2012_I1082936.yoda b/v2.6/generators/sherpa/ATLAS_2012_I1082936/analysis/MCgrid_ATLAS_2012_I1082936.yoda new file mode 100644 index 0000000000000000000000000000000000000000..ffa14ef14519575ff83926dfac97083ceaec078d --- /dev/null +++ b/v2.6/generators/sherpa/ATLAS_2012_I1082936/analysis/MCgrid_ATLAS_2012_I1082936.yoda @@ -0,0 +1,649 @@ +# BEGIN YODA_SCATTER2D /REF/MCgrid_ATLAS_2012_I1082936/d01-x01-y01 +Path=/REF/MCgrid_ATLAS_2012_I1082936/d01-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +2.500000e+01 5.000000e+00 5.000000e+00 4.700000e+06 9.569085e+05 9.475363e+05 +3.750000e+01 7.500000e+00 7.500000e+00 7.170000e+05 1.175243e+05 1.225166e+05 +5.250000e+01 7.500000e+00 7.500000e+00 1.480000e+05 1.767599e+04 1.953549e+04 +7.000000e+01 1.000000e+01 1.000000e+01 3.810000e+04 3.889560e+03 4.002677e+03 +9.500000e+01 1.500000e+01 1.500000e+01 8.520000e+03 9.859757e+02 9.013596e+02 +1.350000e+02 2.500000e+01 2.500000e+01 1.480000e+03 1.389029e+02 1.477070e+02 +1.850000e+02 2.500000e+01 2.500000e+01 2.540000e+02 2.536138e+01 2.712526e+01 +2.350000e+02 2.500000e+01 2.500000e+01 6.340000e+01 8.732832e+00 8.102513e+00 +2.850000e+02 2.500000e+01 2.500000e+01 2.070000e+01 2.437240e+00 2.643039e+00 +3.550000e+02 4.500000e+01 4.500000e+01 5.960000e+00 6.493417e-01 7.084655e-01 +4.500000e+02 5.000000e+01 5.000000e+01 1.330000e+00 1.636983e-01 1.584713e-01 +5.500000e+02 5.000000e+01 5.000000e+01 3.470000e-01 4.693852e-02 5.098166e-02 +7.000000e+02 1.000000e+02 1.000000e+02 6.440000e-02 1.000157e-02 1.048105e-02 +9.000000e+02 1.000000e+02 1.000000e+02 1.010000e-02 2.366182e-03 2.489399e-03 +1.100000e+03 1.000000e+02 1.000000e+02 1.140000e-03 4.826241e-04 4.938043e-04 +1.350000e+03 1.500000e+02 1.500000e+02 4.000000e-04 2.551862e-04 2.586194e-04 +# END YODA_SCATTER2D + +# BEGIN YODA_SCATTER2D /REF/MCgrid_ATLAS_2012_I1082936/d01-x01-y02 +Path=/REF/MCgrid_ATLAS_2012_I1082936/d01-x01-y02 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +2.500000e+01 5.000000e+00 5.000000e+00 4.610000e+06 9.197754e+05 9.335701e+05 +3.750000e+01 7.500000e+00 7.500000e+00 7.300000e+05 1.188502e+05 1.326585e+05 +5.250000e+01 7.500000e+00 7.500000e+00 1.490000e+05 1.707156e+04 1.955494e+04 +7.000000e+01 1.000000e+01 1.000000e+01 3.710000e+04 3.598105e+03 4.186532e+03 +9.500000e+01 1.500000e+01 1.500000e+01 8.350000e+03 8.744950e+02 8.330505e+02 +1.350000e+02 2.500000e+01 2.500000e+01 1.440000e+03 1.521594e+02 1.607479e+02 +1.850000e+02 2.500000e+01 2.500000e+01 2.410000e+02 2.524254e+01 2.859548e+01 +2.350000e+02 2.500000e+01 2.500000e+01 6.060000e+01 7.732342e+00 7.370525e+00 +2.850000e+02 2.500000e+01 2.500000e+01 1.960000e+01 2.266428e+00 2.676117e+00 +3.550000e+02 4.500000e+01 4.500000e+01 5.640000e+00 7.259765e-01 7.933105e-01 +4.500000e+02 5.000000e+01 5.000000e+01 1.190000e+00 1.600926e-01 1.600926e-01 +5.500000e+02 5.000000e+01 5.000000e+01 3.160000e-01 4.492125e-02 4.768700e-02 +7.000000e+02 1.000000e+02 1.000000e+02 6.600000e-02 1.093770e-02 1.144829e-02 +9.000000e+02 1.000000e+02 1.000000e+02 7.800000e-03 1.750418e-03 1.904702e-03 +1.100000e+03 1.000000e+02 1.000000e+02 1.380000e-03 5.202728e-04 5.480963e-04 +1.350000e+03 1.500000e+02 1.500000e+02 2.350000e-04 1.717683e-04 1.723537e-04 +# END YODA_SCATTER2D + +# BEGIN YODA_SCATTER2D /REF/MCgrid_ATLAS_2012_I1082936/d01-x01-y03 +Path=/REF/MCgrid_ATLAS_2012_I1082936/d01-x01-y03 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +2.500000e+01 5.000000e+00 5.000000e+00 3.920000e+06 9.743013e+05 9.469234e+05 +3.750000e+01 7.500000e+00 7.500000e+00 6.660000e+05 1.185798e+05 1.351439e+05 +5.250000e+01 7.500000e+00 7.500000e+00 1.390000e+05 1.767423e+04 2.121370e+04 +7.000000e+01 1.000000e+01 1.000000e+01 3.390000e+04 3.695413e+03 3.964273e+03 +9.500000e+01 1.500000e+01 1.500000e+01 7.550000e+03 8.596201e+02 8.446358e+02 +1.350000e+02 2.500000e+01 2.500000e+01 1.280000e+03 1.494095e+02 1.443225e+02 +1.850000e+02 2.500000e+01 2.500000e+01 2.050000e+02 2.271493e+01 2.577025e+01 +2.350000e+02 2.500000e+01 2.500000e+01 5.010000e+01 6.406143e+00 6.754587e+00 +2.850000e+02 2.500000e+01 2.500000e+01 1.590000e+01 2.111831e+00 2.143438e+00 +3.550000e+02 4.500000e+01 4.500000e+01 4.380000e+00 5.559212e-01 6.429709e-01 +4.500000e+02 5.000000e+01 5.000000e+01 9.180000e-01 1.401217e-01 1.355826e-01 +5.500000e+02 5.000000e+01 5.000000e+01 2.140000e-01 3.520797e-02 3.520797e-02 +7.000000e+02 1.000000e+02 1.000000e+02 4.070000e-02 7.941045e-03 8.208854e-03 +9.000000e+02 1.000000e+02 1.000000e+02 2.700000e-03 8.561597e-04 9.093390e-04 +1.100000e+03 1.000000e+02 1.000000e+02 4.660000e-04 3.173898e-04 3.283713e-04 +1.350000e+03 1.500000e+02 1.500000e+02 1.020000e-04 1.154010e-04 1.157243e-04 +# END YODA_SCATTER2D + +# BEGIN YODA_SCATTER2D /REF/MCgrid_ATLAS_2012_I1082936/d01-x01-y04 +Path=/REF/MCgrid_ATLAS_2012_I1082936/d01-x01-y04 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +2.500000e+01 5.000000e+00 5.000000e+00 3.700000e+06 9.490428e+05 9.601215e+05 +3.750000e+01 7.500000e+00 7.500000e+00 5.620000e+05 1.156285e+05 1.290728e+05 +5.250000e+01 7.500000e+00 7.500000e+00 1.090000e+05 1.557061e+04 1.912974e+04 +7.000000e+01 1.000000e+01 1.000000e+01 2.670000e+04 3.595122e+03 3.648268e+03 +9.500000e+01 1.500000e+01 1.500000e+01 5.840000e+03 7.067175e+02 7.472738e+02 +1.350000e+02 2.500000e+01 2.500000e+01 9.580000e+02 1.099299e+02 1.089782e+02 +1.850000e+02 2.500000e+01 2.500000e+01 1.510000e+02 1.823703e+01 2.078959e+01 +2.350000e+02 2.500000e+01 2.500000e+01 3.380000e+01 4.653679e+00 4.687313e+00 +2.850000e+02 2.500000e+01 2.500000e+01 9.580000e+00 1.417511e+00 1.512725e+00 +3.550000e+02 4.500000e+01 4.500000e+01 2.350000e+00 3.613377e-01 3.940885e-01 +4.500000e+02 5.000000e+01 5.000000e+01 3.910000e-01 7.054711e-02 7.054711e-02 +5.500000e+02 5.000000e+01 5.000000e+01 7.250000e-02 1.541726e-02 1.548785e-02 +7.000000e+02 1.000000e+02 1.000000e+02 9.510000e-03 2.405941e-03 2.801761e-03 +9.000000e+02 1.000000e+02 1.000000e+02 4.860000e-04 2.450915e-04 2.567759e-04 +1.100000e+03 1.000000e+02 1.000000e+02 6.930000e-05 7.719550e-05 7.863779e-05 +# END YODA_SCATTER2D + +# BEGIN YODA_SCATTER2D /REF/MCgrid_ATLAS_2012_I1082936/d01-x01-y05 +Path=/REF/MCgrid_ATLAS_2012_I1082936/d01-x01-y05 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +2.500000e+01 5.000000e+00 5.000000e+00 2.760000e+06 9.093126e+05 9.837362e+05 +3.750000e+01 7.500000e+00 7.500000e+00 4.070000e+05 1.048811e+05 1.337171e+05 +5.250000e+01 7.500000e+00 7.500000e+00 8.000000e+04 1.405283e+04 1.689659e+04 +7.000000e+01 1.000000e+01 1.000000e+01 1.710000e+04 2.596456e+03 2.613462e+03 +9.500000e+01 1.500000e+01 1.500000e+01 3.440000e+03 4.567434e+02 4.259770e+02 +1.350000e+02 2.500000e+01 2.500000e+01 4.980000e+02 6.657239e+01 6.855456e+01 +1.850000e+02 2.500000e+01 2.500000e+01 5.930000e+01 8.590155e+00 1.030135e+01 +2.350000e+02 2.500000e+01 2.500000e+01 1.000000e+01 1.918244e+00 1.977994e+00 +2.850000e+02 2.500000e+01 2.500000e+01 1.850000e+00 3.505453e-01 4.259066e-01 +3.550000e+02 4.500000e+01 4.500000e+01 2.760000e-01 6.935210e-02 8.277354e-02 +4.500000e+02 5.000000e+01 5.000000e+01 1.660000e-02 5.775130e-03 6.738271e-03 +5.500000e+02 5.000000e+01 5.000000e+01 3.130000e-04 3.080659e-04 2.966898e-04 +# END YODA_SCATTER2D + +# BEGIN YODA_SCATTER2D /REF/MCgrid_ATLAS_2012_I1082936/d01-x01-y06 +Path=/REF/MCgrid_ATLAS_2012_I1082936/d01-x01-y06 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +2.500000e+01 5.000000e+00 5.000000e+00 1.890000e+06 7.542730e+05 8.916331e+05 +3.750000e+01 7.500000e+00 7.500000e+00 2.670000e+05 9.201584e+04 1.226120e+05 +5.250000e+01 7.500000e+00 7.500000e+00 4.250000e+04 1.064798e+04 1.388506e+04 +7.000000e+01 1.000000e+01 1.000000e+01 8.570000e+03 1.653624e+03 2.007496e+03 +9.500000e+01 1.500000e+01 1.500000e+01 1.310000e+03 2.881429e+02 2.729482e+02 +1.350000e+02 2.500000e+01 2.500000e+01 1.160000e+02 2.621938e+01 2.461091e+01 +1.850000e+02 2.500000e+01 2.500000e+01 5.570000e+00 1.664914e+00 2.045158e+00 +2.350000e+02 2.500000e+01 2.500000e+01 2.890000e-01 1.237019e-01 1.253998e-01 +2.850000e+02 2.500000e+01 2.500000e+01 9.170000e-03 7.276550e-03 9.855412e-03 +# END YODA_SCATTER2D + +# BEGIN YODA_SCATTER2D /REF/MCgrid_ATLAS_2012_I1082936/d01-x01-y07 +Path=/REF/MCgrid_ATLAS_2012_I1082936/d01-x01-y07 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +2.500000e+01 5.000000e+00 5.000000e+00 8.190000e+05 4.432698e+05 5.975873e+05 +3.750000e+01 7.500000e+00 7.500000e+00 8.640000e+04 4.137394e+04 7.385703e+04 +5.250000e+01 7.500000e+00 7.500000e+00 8.830000e+03 3.324929e+03 5.507586e+03 +7.000000e+01 1.000000e+01 1.000000e+01 9.200000e+02 3.178967e+02 4.242455e+02 +9.500000e+01 1.500000e+01 1.500000e+01 5.380000e+01 1.918371e+01 2.118363e+01 +1.350000e+02 2.500000e+01 2.500000e+01 5.420000e-01 3.109163e-01 2.604765e-01 +# END YODA_SCATTER2D + +# BEGIN YODA_SCATTER2D /REF/MCgrid_ATLAS_2012_I1082936/d02-x01-y01 +Path=/REF/MCgrid_ATLAS_2012_I1082936/d02-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +2.500000e+01 5.000000e+00 5.000000e+00 1.000000e+07 2.623842e+06 2.743674e+06 +3.750000e+01 7.500000e+00 7.500000e+00 1.230000e+06 2.223118e+05 2.480468e+05 +5.250000e+01 7.500000e+00 7.500000e+00 2.190000e+05 2.340504e+04 3.193324e+04 +7.000000e+01 1.000000e+01 1.000000e+01 5.450000e+04 5.070598e+03 6.042416e+03 +9.500000e+01 1.500000e+01 1.500000e+01 1.140000e+04 1.207354e+03 1.162161e+03 +1.350000e+02 2.500000e+01 2.500000e+01 1.930000e+03 1.849501e+02 1.620190e+02 +1.850000e+02 2.500000e+01 2.500000e+01 3.210000e+02 3.491366e+01 3.842209e+01 +2.350000e+02 2.500000e+01 2.500000e+01 7.780000e+01 9.781165e+00 9.239876e+00 +2.850000e+02 2.500000e+01 2.500000e+01 2.540000e+01 2.662144e+00 3.192113e+00 +3.550000e+02 4.500000e+01 4.500000e+01 7.160000e+00 8.149669e-01 8.291852e-01 +4.500000e+02 5.000000e+01 5.000000e+01 1.600000e+00 2.101794e-01 1.943588e-01 +5.500000e+02 5.000000e+01 5.000000e+01 4.100000e-01 5.766011e-02 6.005911e-02 +7.000000e+02 1.000000e+02 1.000000e+02 7.610000e-02 1.212041e-02 1.341839e-02 +9.000000e+02 1.000000e+02 1.000000e+02 1.180000e-02 2.605984e-03 2.817953e-03 +1.100000e+03 1.000000e+02 1.000000e+02 1.540000e-03 6.108114e-04 6.314770e-04 +1.350000e+03 1.500000e+02 1.500000e+02 3.990000e-04 2.577324e-04 2.590583e-04 +# END YODA_SCATTER2D + +# BEGIN YODA_SCATTER2D /REF/MCgrid_ATLAS_2012_I1082936/d02-x01-y02 +Path=/REF/MCgrid_ATLAS_2012_I1082936/d02-x01-y02 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +2.500000e+01 5.000000e+00 5.000000e+00 9.950000e+06 2.302582e+06 2.401911e+06 +3.750000e+01 7.500000e+00 7.500000e+00 1.250000e+06 2.320159e+05 2.532017e+05 +5.250000e+01 7.500000e+00 7.500000e+00 2.250000e+05 2.683653e+04 3.303913e+04 +7.000000e+01 1.000000e+01 1.000000e+01 5.320000e+04 5.211322e+03 5.791379e+03 +9.500000e+01 1.500000e+01 1.500000e+01 1.130000e+04 1.250328e+03 1.070766e+03 +1.350000e+02 2.500000e+01 2.500000e+01 1.880000e+03 1.874649e+02 1.911985e+02 +1.850000e+02 2.500000e+01 2.500000e+01 3.030000e+02 2.991733e+01 3.563827e+01 +2.350000e+02 2.500000e+01 2.500000e+01 7.470000e+01 9.162082e+00 8.716386e+00 +2.850000e+02 2.500000e+01 2.500000e+01 2.390000e+01 3.047958e+00 3.238411e+00 +3.550000e+02 4.500000e+01 4.500000e+01 6.790000e+00 8.460296e-01 1.008332e+00 +4.500000e+02 5.000000e+01 5.000000e+01 1.440000e+00 2.003624e-01 2.032191e-01 +5.500000e+02 5.000000e+01 5.000000e+01 3.680000e-01 5.227911e-02 5.516299e-02 +7.000000e+02 1.000000e+02 1.000000e+02 7.500000e-02 1.233588e-02 1.313039e-02 +9.000000e+02 1.000000e+02 1.000000e+02 9.090000e-03 2.009219e-03 2.211786e-03 +1.100000e+03 1.000000e+02 1.000000e+02 1.610000e-03 5.906155e-04 6.216623e-04 +1.350000e+03 1.500000e+02 1.500000e+02 2.350000e-04 1.548274e-04 1.545087e-04 +# END YODA_SCATTER2D + +# BEGIN YODA_SCATTER2D /REF/MCgrid_ATLAS_2012_I1082936/d02-x01-y03 +Path=/REF/MCgrid_ATLAS_2012_I1082936/d02-x01-y03 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +2.500000e+01 5.000000e+00 5.000000e+00 8.540000e+06 2.019529e+06 1.942831e+06 +3.750000e+01 7.500000e+00 7.500000e+00 1.120000e+06 2.270736e+05 2.382344e+05 +5.250000e+01 7.500000e+00 7.500000e+00 1.990000e+05 2.835711e+04 3.207957e+04 +7.000000e+01 1.000000e+01 1.000000e+01 4.840000e+04 5.368651e+03 5.848957e+03 +9.500000e+01 1.500000e+01 1.500000e+01 1.030000e+04 1.131229e+03 1.039290e+03 +1.350000e+02 2.500000e+01 2.500000e+01 1.660000e+03 1.839101e+02 1.839101e+02 +1.850000e+02 2.500000e+01 2.500000e+01 2.600000e+02 2.804382e+01 3.114140e+01 +2.350000e+02 2.500000e+01 2.500000e+01 6.170000e+01 8.071426e+00 7.581110e+00 +2.850000e+02 2.500000e+01 2.500000e+01 1.950000e+01 2.568351e+00 2.840020e+00 +3.550000e+02 4.500000e+01 4.500000e+01 5.240000e+00 7.017579e-01 8.007166e-01 +4.500000e+02 5.000000e+01 5.000000e+01 1.100000e+00 1.646666e-01 1.570581e-01 +5.500000e+02 5.000000e+01 5.000000e+01 2.520000e-01 4.004730e-02 4.029313e-02 +7.000000e+02 1.000000e+02 1.000000e+02 4.720000e-02 8.922809e-03 9.499765e-03 +9.000000e+02 1.000000e+02 1.000000e+02 2.970000e-03 9.102844e-04 9.831463e-04 +1.100000e+03 1.000000e+02 1.000000e+02 4.540000e-04 3.144372e-04 3.174269e-04 +1.350000e+03 1.500000e+02 1.500000e+02 1.010000e-04 1.233625e-04 1.234715e-04 +# END YODA_SCATTER2D + +# BEGIN YODA_SCATTER2D /REF/MCgrid_ATLAS_2012_I1082936/d02-x01-y04 +Path=/REF/MCgrid_ATLAS_2012_I1082936/d02-x01-y04 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +2.500000e+01 5.000000e+00 5.000000e+00 7.650000e+06 2.252636e+06 2.275550e+06 +3.750000e+01 7.500000e+00 7.500000e+00 9.380000e+05 2.227426e+05 2.433416e+05 +5.250000e+01 7.500000e+00 7.500000e+00 1.590000e+05 2.407172e+04 2.880503e+04 +7.000000e+01 1.000000e+01 1.000000e+01 3.780000e+04 4.524261e+03 5.125987e+03 +9.500000e+01 1.500000e+01 1.500000e+01 7.760000e+03 9.532960e+02 8.531939e+02 +1.350000e+02 2.500000e+01 2.500000e+01 1.250000e+03 1.460020e+02 1.447606e+02 +1.850000e+02 2.500000e+01 2.500000e+01 1.860000e+02 2.171645e+01 2.486060e+01 +2.350000e+02 2.500000e+01 2.500000e+01 4.120000e+01 5.714547e+00 5.509629e+00 +2.850000e+02 2.500000e+01 2.500000e+01 1.140000e+01 1.698135e+00 1.800112e+00 +3.550000e+02 4.500000e+01 4.500000e+01 2.850000e+00 4.351065e-01 5.089290e-01 +4.500000e+02 5.000000e+01 5.000000e+01 4.600000e-01 8.431273e-02 8.614007e-02 +5.500000e+02 5.000000e+01 5.000000e+01 8.540000e-02 1.731225e-02 1.823090e-02 +7.000000e+02 1.000000e+02 1.000000e+02 1.150000e-02 3.051044e-03 3.424614e-03 +9.000000e+02 1.000000e+02 1.000000e+02 6.850000e-04 3.186502e-04 3.544635e-04 +1.100000e+03 1.000000e+02 1.000000e+02 6.750000e-05 7.551295e-05 7.822111e-05 +# END YODA_SCATTER2D + +# BEGIN YODA_SCATTER2D /REF/MCgrid_ATLAS_2012_I1082936/d02-x01-y05 +Path=/REF/MCgrid_ATLAS_2012_I1082936/d02-x01-y05 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +2.500000e+01 5.000000e+00 5.000000e+00 5.820000e+06 1.998957e+06 2.167527e+06 +3.750000e+01 7.500000e+00 7.500000e+00 6.890000e+05 1.871000e+05 2.166749e+05 +5.250000e+01 7.500000e+00 7.500000e+00 1.190000e+05 2.046739e+04 2.506447e+04 +7.000000e+01 1.000000e+01 1.000000e+01 2.420000e+04 2.947803e+03 3.597645e+03 +9.500000e+01 1.500000e+01 1.500000e+01 4.720000e+03 5.750587e+02 6.031938e+02 +1.350000e+02 2.500000e+01 2.500000e+01 6.400000e+02 8.172637e+01 8.108989e+01 +1.850000e+02 2.500000e+01 2.500000e+01 7.310000e+01 1.065466e+01 1.123659e+01 +2.350000e+02 2.500000e+01 2.500000e+01 1.210000e+01 2.236251e+00 2.151938e+00 +2.850000e+02 2.500000e+01 2.500000e+01 2.260000e+00 4.523897e-01 5.355962e-01 +3.550000e+02 4.500000e+01 4.500000e+01 3.240000e-01 7.586598e-02 8.968962e-02 +4.500000e+02 5.000000e+01 5.000000e+01 2.090000e-02 7.381044e-03 8.054557e-03 +5.500000e+02 5.000000e+01 5.000000e+01 5.830000e-04 3.957801e-04 4.290682e-04 +# END YODA_SCATTER2D + +# BEGIN YODA_SCATTER2D /REF/MCgrid_ATLAS_2012_I1082936/d02-x01-y06 +Path=/REF/MCgrid_ATLAS_2012_I1082936/d02-x01-y06 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +2.500000e+01 5.000000e+00 5.000000e+00 3.900000e+06 1.581647e+06 1.849300e+06 +3.750000e+01 7.500000e+00 7.500000e+00 4.260000e+05 1.460296e+05 1.884570e+05 +5.250000e+01 7.500000e+00 7.500000e+00 6.420000e+04 1.649090e+04 1.852490e+04 +7.000000e+01 1.000000e+01 1.000000e+01 1.240000e+04 2.270316e+03 2.757208e+03 +9.500000e+01 1.500000e+01 1.500000e+01 1.780000e+03 3.316549e+02 3.299356e+02 +1.350000e+02 2.500000e+01 2.500000e+01 1.510000e+02 3.384993e+01 3.414903e+01 +1.850000e+02 2.500000e+01 2.500000e+01 7.230000e+00 1.925836e+00 2.462731e+00 +2.350000e+02 2.500000e+01 2.500000e+01 3.750000e-01 1.333057e-01 1.597691e-01 +2.850000e+02 2.500000e+01 2.500000e+01 1.090000e-02 6.697400e-03 8.328406e-03 +# END YODA_SCATTER2D + +# BEGIN YODA_SCATTER2D /REF/MCgrid_ATLAS_2012_I1082936/d02-x01-y07 +Path=/REF/MCgrid_ATLAS_2012_I1082936/d02-x01-y07 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +2.500000e+01 5.000000e+00 5.000000e+00 1.510000e+06 7.695307e+05 1.014700e+06 +3.750000e+01 7.500000e+00 7.500000e+00 1.380000e+05 6.018429e+04 9.663538e+04 +5.250000e+01 7.500000e+00 7.500000e+00 1.290000e+04 4.138199e+03 5.640275e+03 +7.000000e+01 1.000000e+01 1.000000e+01 1.270000e+03 3.620153e+02 3.744547e+02 +9.500000e+01 1.500000e+01 1.500000e+01 7.700000e+01 1.824390e+01 2.234892e+01 +1.350000e+02 2.500000e+01 2.500000e+01 8.280000e-01 3.348787e-01 2.616336e-01 +# END YODA_SCATTER2D + +# BEGIN YODA_SCATTER2D /REF/MCgrid_ATLAS_2012_I1082936/d03-x01-y01 +Path=/REF/MCgrid_ATLAS_2012_I1082936/d03-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +9.000000e-02 2.000000e-02 2.000000e-02 2.400000e+08 3.848840e+07 4.052306e+07 +1.350000e-01 2.500000e-02 2.500000e-02 3.400000e+07 3.954083e+06 4.148263e+06 +1.850000e-01 2.500000e-02 2.500000e-02 7.100000e+06 7.014297e+05 7.585060e+05 +2.350000e-01 2.500000e-02 2.500000e-02 2.000000e+06 2.114941e+05 2.075615e+05 +2.850000e-01 2.500000e-02 2.500000e-02 7.200000e+05 7.307518e+04 8.231301e+04 +3.400000e-01 3.000000e-02 3.000000e-02 2.800000e+05 3.005569e+04 3.199268e+04 +4.050000e-01 3.500000e-02 3.500000e-02 1.100000e+05 1.224573e+04 1.233924e+04 +4.750000e-01 3.500000e-02 3.500000e-02 4.300000e+04 5.127822e+03 5.292662e+03 +5.500000e-01 4.000000e-02 4.000000e-02 1.800000e+04 2.039348e+03 2.362272e+03 +6.300000e-01 4.000000e-02 4.000000e-02 7.900000e+03 9.905605e+02 9.359083e+02 +7.150000e-01 4.500000e-02 4.500000e-02 3.700000e+03 4.609879e+02 4.682949e+02 +8.050000e-01 4.500000e-02 4.500000e-02 1.800000e+03 2.289187e+02 2.466328e+02 +9.000000e-01 5.000000e-02 5.000000e-02 8.600000e+02 1.158066e+02 1.207803e+02 +1.005000e+00 5.500000e-02 5.500000e-02 4.200000e+02 5.816052e+01 6.060238e+01 +1.120000e+00 6.000000e-02 6.000000e-02 2.100000e+02 3.038113e+01 3.378129e+01 +1.245000e+00 6.500000e-02 6.500000e-02 9.600000e+01 1.469804e+01 1.469804e+01 +1.380000e+00 7.000000e-02 7.000000e-02 4.700000e+01 8.077166e+00 8.540690e+00 +1.525000e+00 7.500000e-02 7.500000e-02 2.100000e+01 4.339232e+00 4.537167e+00 +1.770000e+00 1.700000e-01 1.700000e-01 7.200000e+00 1.616733e+00 1.719655e+00 +2.360000e+00 4.200000e-01 4.200000e-01 6.400000e-01 2.600732e-01 2.627058e-01 +# END YODA_SCATTER2D + +# BEGIN YODA_SCATTER2D /REF/MCgrid_ATLAS_2012_I1082936/d03-x01-y02 +Path=/REF/MCgrid_ATLAS_2012_I1082936/d03-x01-y02 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +1.350000e-01 2.500000e-02 2.500000e-02 7.900000e+07 1.200020e+07 1.351524e+07 +1.850000e-01 2.500000e-02 2.500000e-02 1.600000e+07 2.003024e+06 1.785150e+06 +2.350000e-01 2.500000e-02 2.500000e-02 4.700000e+06 5.124388e+05 5.015462e+05 +2.850000e-01 2.500000e-02 2.500000e-02 1.700000e+06 1.895524e+05 1.917730e+05 +3.400000e-01 3.000000e-02 3.000000e-02 6.500000e+05 6.861947e+04 7.182335e+04 +4.050000e-01 3.500000e-02 3.500000e-02 2.500000e+05 2.994191e+04 2.736249e+04 +4.750000e-01 3.500000e-02 3.500000e-02 1.000000e+05 1.084031e+04 1.123532e+04 +5.500000e-01 4.000000e-02 4.000000e-02 4.400000e+04 4.817395e+03 5.818031e+03 +6.300000e-01 4.000000e-02 4.000000e-02 1.900000e+04 2.419824e+03 2.382236e+03 +7.150000e-01 4.500000e-02 4.500000e-02 9.000000e+03 1.208985e+03 1.074323e+03 +8.050000e-01 4.500000e-02 4.500000e-02 4.300000e+03 5.145287e+02 6.766320e+02 +9.000000e-01 5.000000e-02 5.000000e-02 2.100000e+03 2.872167e+02 2.851441e+02 +1.005000e+00 5.500000e-02 5.500000e-02 9.800000e+02 1.327710e+02 1.395115e+02 +1.120000e+00 6.000000e-02 6.000000e-02 4.900000e+02 6.547324e+01 7.024966e+01 +1.245000e+00 6.500000e-02 6.500000e-02 2.300000e+02 3.512756e+01 3.892508e+01 +1.380000e+00 7.000000e-02 7.000000e-02 1.100000e+02 1.753112e+01 1.733434e+01 +1.525000e+00 7.500000e-02 7.500000e-02 5.200000e+01 8.930991e+00 8.406649e+00 +1.680000e+00 8.000000e-02 8.000000e-02 2.000000e+01 4.042623e+00 4.211271e+00 +1.940000e+00 1.800000e-01 1.800000e-01 7.600000e+00 1.684682e+00 1.759150e+00 +2.715000e+00 5.950000e-01 5.950000e-01 9.800000e-01 3.134729e-01 3.308353e-01 +# END YODA_SCATTER2D + +# BEGIN YODA_SCATTER2D /REF/MCgrid_ATLAS_2012_I1082936/d03-x01-y03 +Path=/REF/MCgrid_ATLAS_2012_I1082936/d03-x01-y03 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +1.850000e-01 2.500000e-02 2.500000e-02 4.300000e+07 7.667637e+06 8.440824e+06 +2.350000e-01 2.500000e-02 2.500000e-02 1.300000e+07 1.768478e+06 1.744666e+06 +2.850000e-01 2.500000e-02 2.500000e-02 4.800000e+06 5.783552e+05 6.381654e+05 +3.400000e-01 3.000000e-02 3.000000e-02 1.900000e+06 2.118330e+05 2.311313e+05 +4.050000e-01 3.500000e-02 3.500000e-02 7.300000e+05 7.852578e+04 8.260365e+04 +4.750000e-01 3.500000e-02 3.500000e-02 3.000000e+05 3.756714e+04 3.779881e+04 +5.500000e-01 4.000000e-02 4.000000e-02 1.300000e+05 1.701411e+04 1.678461e+04 +6.300000e-01 4.000000e-02 4.000000e-02 5.700000e+04 7.076499e+03 7.465912e+03 +7.150000e-01 4.500000e-02 4.500000e-02 2.600000e+04 3.017120e+03 3.372592e+03 +8.050000e-01 4.500000e-02 4.500000e-02 1.300000e+04 1.753603e+03 1.740884e+03 +9.000000e-01 5.000000e-02 5.000000e-02 6.100000e+03 8.892202e+02 9.611324e+02 +1.005000e+00 5.500000e-02 5.500000e-02 3.100000e+03 4.522283e+02 4.613483e+02 +1.120000e+00 6.000000e-02 6.000000e-02 1.400000e+03 2.174331e+02 2.076300e+02 +1.245000e+00 6.500000e-02 6.500000e-02 7.200000e+02 1.047990e+02 1.011952e+02 +1.380000e+00 7.000000e-02 7.000000e-02 3.500000e+02 5.169940e+01 7.402314e+01 +1.525000e+00 7.500000e-02 7.500000e-02 1.500000e+02 2.459726e+01 2.516873e+01 +1.680000e+00 8.000000e-02 8.000000e-02 7.300000e+01 1.299421e+01 1.354047e+01 +1.850000e+00 9.000000e-02 9.000000e-02 2.900000e+01 5.915574e+00 5.941745e+00 +2.030000e+00 9.000000e-02 9.000000e-02 1.700000e+01 3.929648e+00 3.870367e+00 +2.335000e+00 2.150000e-01 2.150000e-01 5.200000e+00 1.353449e+00 1.410801e+00 +3.080000e+00 5.300000e-01 5.300000e-01 4.300000e-01 1.980639e-01 2.046967e-01 +# END YODA_SCATTER2D + +# BEGIN YODA_SCATTER2D /REF/MCgrid_ATLAS_2012_I1082936/d03-x01-y04 +Path=/REF/MCgrid_ATLAS_2012_I1082936/d03-x01-y04 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +2.850000e-01 2.500000e-02 2.500000e-02 1.300000e+07 2.759126e+06 3.098639e+06 +3.400000e-01 3.000000e-02 3.000000e-02 5.400000e+06 8.787411e+05 1.142084e+06 +4.050000e-01 3.500000e-02 3.500000e-02 2.200000e+06 3.369018e+05 4.198140e+05 +4.750000e-01 3.500000e-02 3.500000e-02 8.900000e+05 1.453155e+05 1.251930e+05 +5.500000e-01 4.000000e-02 4.000000e-02 3.700000e+05 4.971374e+04 4.581431e+04 +6.300000e-01 4.000000e-02 4.000000e-02 1.700000e+05 2.532144e+04 2.614410e+04 +7.150000e-01 4.500000e-02 4.500000e-02 8.100000e+04 1.125725e+04 1.211024e+04 +8.050000e-01 4.500000e-02 4.500000e-02 4.000000e+04 5.322706e+03 7.226839e+03 +9.000000e-01 5.000000e-02 5.000000e-02 1.900000e+04 2.842326e+03 3.122539e+03 +1.005000e+00 5.500000e-02 5.500000e-02 9.500000e+03 1.217928e+03 1.354675e+03 +1.120000e+00 6.000000e-02 6.000000e-02 4.600000e+03 8.074147e+02 6.356994e+02 +1.245000e+00 6.500000e-02 6.500000e-02 2.200000e+03 4.356111e+02 3.708354e+02 +1.380000e+00 7.000000e-02 7.000000e-02 1.000000e+03 1.640091e+02 1.855424e+02 +1.525000e+00 7.500000e-02 7.500000e-02 4.900000e+02 7.215489e+01 8.253701e+01 +1.680000e+00 8.000000e-02 8.000000e-02 2.300000e+02 3.003240e+01 4.217601e+01 +1.850000e+00 9.000000e-02 9.000000e-02 9.800000e+01 2.072161e+01 1.853651e+01 +2.030000e+00 9.000000e-02 9.000000e-02 4.300000e+01 1.029040e+01 7.874285e+00 +2.225000e+00 1.050000e-01 1.050000e-01 2.300000e+01 6.010442e+00 5.927266e+00 +2.555000e+00 2.250000e-01 2.250000e-01 5.900000e+00 1.413269e+00 1.496380e+00 +3.355000e+00 5.750000e-01 5.750000e-01 5.400000e-01 2.351736e-01 2.776934e-01 +# END YODA_SCATTER2D + +# BEGIN YODA_SCATTER2D /REF/MCgrid_ATLAS_2012_I1082936/d03-x01-y05 +Path=/REF/MCgrid_ATLAS_2012_I1082936/d03-x01-y05 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +4.050000e-01 3.500000e-02 3.500000e-02 5.800000e+06 1.648068e+06 2.060633e+06 +4.750000e-01 3.500000e-02 3.500000e-02 2.600000e+06 6.826176e+05 8.874726e+05 +5.500000e-01 4.000000e-02 4.000000e-02 1.100000e+06 2.348777e+05 2.916432e+05 +6.300000e-01 4.000000e-02 4.000000e-02 5.200000e+05 9.482981e+04 1.158107e+05 +7.150000e-01 4.500000e-02 4.500000e-02 2.400000e+05 4.542408e+04 4.910684e+04 +8.050000e-01 4.500000e-02 4.500000e-02 1.200000e+05 2.100034e+04 2.268635e+04 +9.000000e-01 5.000000e-02 5.000000e-02 5.800000e+04 9.513945e+03 1.091680e+04 +1.005000e+00 5.500000e-02 5.500000e-02 2.800000e+04 4.457983e+03 4.434709e+03 +1.120000e+00 6.000000e-02 6.000000e-02 1.400000e+04 2.525982e+03 2.878320e+03 +1.245000e+00 6.500000e-02 6.500000e-02 6.700000e+03 1.152244e+03 1.237470e+03 +1.380000e+00 7.000000e-02 7.000000e-02 3.200000e+03 5.765864e+02 4.907907e+02 +1.525000e+00 7.500000e-02 7.500000e-02 1.500000e+03 2.548146e+02 2.989971e+02 +1.680000e+00 8.000000e-02 8.000000e-02 7.300000e+02 1.264102e+02 1.607244e+02 +1.850000e+00 9.000000e-02 9.000000e-02 3.100000e+02 7.252808e+01 5.265439e+01 +2.030000e+00 9.000000e-02 9.000000e-02 1.500000e+02 3.248669e+01 2.784794e+01 +2.225000e+00 1.050000e-01 1.050000e-01 7.300000e+01 1.482799e+01 2.088196e+01 +2.440000e+00 1.100000e-01 1.100000e-01 2.600000e+01 5.906122e+00 6.754648e+00 +2.795000e+00 2.450000e-01 2.450000e-01 8.000000e+00 2.188932e+00 2.458071e+00 +3.655000e+00 6.150000e-01 6.150000e-01 2.300000e-01 1.352439e-01 1.400330e-01 +# END YODA_SCATTER2D + +# BEGIN YODA_SCATTER2D /REF/MCgrid_ATLAS_2012_I1082936/d03-x01-y06 +Path=/REF/MCgrid_ATLAS_2012_I1082936/d03-x01-y06 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +7.150000e-01 4.500000e-02 4.500000e-02 7.300000e+05 2.504038e+05 3.450924e+05 +8.050000e-01 4.500000e-02 4.500000e-02 3.900000e+05 1.147853e+05 1.742170e+05 +9.000000e-01 5.000000e-02 5.000000e-02 1.900000e+05 4.997758e+04 7.083459e+04 +1.005000e+00 5.500000e-02 5.500000e-02 9.100000e+04 2.219113e+04 2.712869e+04 +1.120000e+00 6.000000e-02 6.000000e-02 4.300000e+04 9.991372e+03 1.086514e+04 +1.245000e+00 6.500000e-02 6.500000e-02 2.100000e+04 4.947940e+03 5.231361e+03 +1.380000e+00 7.000000e-02 7.000000e-02 9.900000e+03 2.112508e+03 2.577311e+03 +1.525000e+00 7.500000e-02 7.500000e-02 4.900000e+03 9.876266e+02 1.161600e+03 +1.680000e+00 8.000000e-02 8.000000e-02 2.400000e+03 4.663479e+02 5.627117e+02 +1.850000e+00 9.000000e-02 9.000000e-02 1.000000e+03 2.355207e+02 2.437335e+02 +2.030000e+00 9.000000e-02 9.000000e-02 4.700000e+02 1.063032e+02 1.059837e+02 +2.225000e+00 1.050000e-01 1.050000e-01 2.200000e+02 6.284380e+01 5.461586e+01 +2.440000e+00 1.100000e-01 1.100000e-01 9.600000e+01 2.496258e+01 2.850246e+01 +2.665000e+00 1.150000e-01 1.150000e-01 4.600000e+01 1.487309e+01 1.470663e+01 +3.045000e+00 2.650000e-01 2.650000e-01 8.000000e+00 2.463299e+00 2.678806e+00 +3.975000e+00 6.650000e-01 6.650000e-01 5.500000e-01 3.278743e-01 3.314328e-01 +# END YODA_SCATTER2D + +# BEGIN YODA_SCATTER2D /REF/MCgrid_ATLAS_2012_I1082936/d03-x01-y07 +Path=/REF/MCgrid_ATLAS_2012_I1082936/d03-x01-y07 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +1.245000e+00 6.500000e-02 6.500000e-02 5.600000e+04 2.211149e+04 3.513553e+04 +1.380000e+00 7.000000e-02 7.000000e-02 2.600000e+04 9.379191e+03 1.262883e+04 +1.525000e+00 7.500000e-02 7.500000e-02 1.400000e+04 4.713594e+03 6.298195e+03 +1.680000e+00 8.000000e-02 8.000000e-02 7.200000e+03 2.347785e+03 3.189023e+03 +1.850000e+00 9.000000e-02 9.000000e-02 3.100000e+03 1.016937e+03 1.233434e+03 +2.030000e+00 9.000000e-02 9.000000e-02 1.500000e+03 4.499525e+02 5.465210e+02 +2.225000e+00 1.050000e-01 1.050000e-01 6.400000e+02 1.737915e+02 2.106611e+02 +2.440000e+00 1.100000e-01 1.100000e-01 2.700000e+02 7.571755e+01 8.227206e+01 +2.665000e+00 1.150000e-01 1.150000e-01 1.100000e+02 3.463358e+01 4.342465e+01 +2.910000e+00 1.300000e-01 1.300000e-01 4.300000e+01 1.478831e+01 1.797698e+01 +3.325000e+00 2.850000e-01 2.850000e-01 1.200000e+01 4.771958e+00 5.566733e+00 +4.325000e+00 7.150000e-01 7.150000e-01 4.400000e-01 3.160787e-01 3.449987e-01 +# END YODA_SCATTER2D + +# BEGIN YODA_SCATTER2D /REF/MCgrid_ATLAS_2012_I1082936/d03-x01-y08 +Path=/REF/MCgrid_ATLAS_2012_I1082936/d03-x01-y08 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +1.850000e+00 9.000000e-02 9.000000e-02 8.900000e+03 4.699453e+03 9.260158e+03 +2.030000e+00 9.000000e-02 9.000000e-02 3.600000e+03 1.601838e+03 2.887128e+03 +2.225000e+00 1.050000e-01 1.050000e-01 1.300000e+03 6.015869e+02 8.005077e+02 +2.440000e+00 1.100000e-01 1.100000e-01 6.100000e+02 2.925006e+02 5.501486e+02 +2.665000e+00 1.150000e-01 1.150000e-01 3.000000e+02 1.601070e+02 2.343714e+02 +2.910000e+00 1.300000e-01 1.300000e-01 1.000000e+02 5.024799e+01 7.626093e+01 +3.175000e+00 1.350000e-01 1.350000e-01 4.000000e+01 1.852363e+01 2.860951e+01 +3.620000e+00 3.100000e-01 3.100000e-01 9.300000e+00 4.629280e+00 6.377122e+00 +4.700000e+00 7.700000e-01 7.700000e-01 8.600000e-02 7.424346e-02 9.008179e-02 +# END YODA_SCATTER2D + +# BEGIN YODA_SCATTER2D /REF/MCgrid_ATLAS_2012_I1082936/d03-x01-y09 +Path=/REF/MCgrid_ATLAS_2012_I1082936/d03-x01-y09 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +2.795000e+00 2.450000e-01 2.450000e-01 2.600000e+02 1.763009e+02 3.242858e+02 +3.655000e+00 6.150000e-01 6.150000e-01 1.800000e+01 1.115107e+01 2.100412e+01 +# END YODA_SCATTER2D + +# BEGIN YODA_SCATTER2D /REF/MCgrid_ATLAS_2012_I1082936/d04-x01-y01 +Path=/REF/MCgrid_ATLAS_2012_I1082936/d04-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +9.000000e-02 2.000000e-02 2.000000e-02 4.600000e+08 8.661702e+07 9.753637e+07 +1.350000e-01 2.500000e-02 2.500000e-02 5.600000e+07 6.692834e+06 7.165333e+06 +1.850000e-01 2.500000e-02 2.500000e-02 1.100000e+07 1.137602e+06 1.196493e+06 +2.350000e-01 2.500000e-02 2.500000e-02 2.900000e+06 2.917925e+05 2.996698e+05 +2.850000e-01 2.500000e-02 2.500000e-02 1.000000e+06 9.788897e+04 1.059210e+05 +3.400000e-01 3.000000e-02 3.000000e-02 3.800000e+05 3.985321e+04 4.059987e+04 +4.050000e-01 3.500000e-02 3.500000e-02 1.400000e+05 1.421810e+04 1.591942e+04 +4.750000e-01 3.500000e-02 3.500000e-02 5.800000e+04 6.531070e+03 7.152557e+03 +5.500000e-01 4.000000e-02 4.000000e-02 2.400000e+04 3.055634e+03 2.984397e+03 +6.300000e-01 4.000000e-02 4.000000e-02 1.100000e+04 1.314488e+03 1.334813e+03 +7.150000e-01 4.500000e-02 4.500000e-02 4.800000e+03 6.312319e+02 6.602574e+02 +8.050000e-01 4.500000e-02 4.500000e-02 2.300000e+03 3.151084e+02 3.080455e+02 +9.000000e-01 5.000000e-02 5.000000e-02 1.100000e+03 1.457905e+02 1.544315e+02 +1.005000e+00 5.500000e-02 5.500000e-02 5.500000e+02 7.724123e+01 8.261542e+01 +1.120000e+00 6.000000e-02 6.000000e-02 2.600000e+02 3.929098e+01 4.004506e+01 +1.245000e+00 6.500000e-02 6.500000e-02 1.300000e+02 2.076992e+01 2.076992e+01 +1.380000e+00 7.000000e-02 7.000000e-02 5.400000e+01 9.268672e+00 9.117049e+00 +1.525000e+00 7.500000e-02 7.500000e-02 2.200000e+01 4.101923e+00 4.327909e+00 +1.770000e+00 1.700000e-01 1.700000e-01 9.200000e+00 1.961327e+00 2.040431e+00 +2.360000e+00 4.200000e-01 4.200000e-01 9.200000e-01 3.217647e-01 3.379307e-01 +# END YODA_SCATTER2D + +# BEGIN YODA_SCATTER2D /REF/MCgrid_ATLAS_2012_I1082936/d04-x01-y02 +Path=/REF/MCgrid_ATLAS_2012_I1082936/d04-x01-y02 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +1.350000e-01 2.500000e-02 2.500000e-02 1.400000e+08 2.476331e+07 2.718446e+07 +1.850000e-01 2.500000e-02 2.500000e-02 2.500000e+07 2.663598e+06 2.765932e+06 +2.350000e-01 2.500000e-02 2.500000e-02 7.100000e+06 6.987212e+05 7.382570e+05 +2.850000e-01 2.500000e-02 2.500000e-02 2.500000e+06 2.749774e+05 2.822788e+05 +3.400000e-01 3.000000e-02 3.000000e-02 9.400000e+05 1.010061e+05 9.989777e+04 +4.050000e-01 3.500000e-02 3.500000e-02 3.500000e+05 3.784096e+04 3.880945e+04 +4.750000e-01 3.500000e-02 3.500000e-02 1.400000e+05 1.513452e+04 1.648640e+04 +5.500000e-01 4.000000e-02 4.000000e-02 5.900000e+04 7.007044e+03 7.181480e+03 +6.300000e-01 4.000000e-02 4.000000e-02 2.600000e+04 2.961289e+03 3.441170e+03 +7.150000e-01 4.500000e-02 4.500000e-02 1.200000e+04 1.542268e+03 1.518557e+03 +8.050000e-01 4.500000e-02 4.500000e-02 5.600000e+03 7.656451e+02 7.815361e+02 +9.000000e-01 5.000000e-02 5.000000e-02 2.700000e+03 3.847097e+02 4.090478e+02 +1.005000e+00 5.500000e-02 5.500000e-02 1.300000e+03 1.883789e+02 1.909452e+02 +1.120000e+00 6.000000e-02 6.000000e-02 6.400000e+02 8.920599e+01 9.288823e+01 +1.245000e+00 6.500000e-02 6.500000e-02 3.000000e+02 4.762069e+01 4.936892e+01 +1.380000e+00 7.000000e-02 7.000000e-02 1.400000e+02 2.095796e+01 2.308005e+01 +1.525000e+00 7.500000e-02 7.500000e-02 6.500000e+01 1.013458e+01 1.303813e+01 +1.680000e+00 8.000000e-02 8.000000e-02 3.000000e+01 5.735652e+00 5.840839e+00 +1.940000e+00 1.800000e-01 1.800000e-01 9.200000e+00 2.062299e+00 2.099818e+00 +2.715000e+00 5.950000e-01 5.950000e-01 1.100000e+00 3.250384e-01 3.356803e-01 +# END YODA_SCATTER2D + +# BEGIN YODA_SCATTER2D /REF/MCgrid_ATLAS_2012_I1082936/d04-x01-y03 +Path=/REF/MCgrid_ATLAS_2012_I1082936/d04-x01-y03 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +1.850000e-01 2.500000e-02 2.500000e-02 7.900000e+07 1.663639e+07 1.780254e+07 +2.350000e-01 2.500000e-02 2.500000e-02 2.200000e+07 3.131660e+06 3.316314e+06 +2.850000e-01 2.500000e-02 2.500000e-02 7.500000e+06 1.001161e+06 9.424397e+05 +3.400000e-01 3.000000e-02 3.000000e-02 2.900000e+06 3.596192e+05 3.349549e+05 +4.050000e-01 3.500000e-02 3.500000e-02 1.100000e+06 1.200160e+05 1.196980e+05 +4.750000e-01 3.500000e-02 3.500000e-02 4.300000e+05 5.034857e+04 4.933020e+04 +5.500000e-01 4.000000e-02 4.000000e-02 1.800000e+05 2.104846e+04 2.374704e+04 +6.300000e-01 4.000000e-02 4.000000e-02 7.900000e+04 9.638648e+03 9.372410e+03 +7.150000e-01 4.500000e-02 4.500000e-02 3.700000e+04 4.729347e+03 4.533217e+03 +8.050000e-01 4.500000e-02 4.500000e-02 1.700000e+04 2.170481e+03 2.253125e+03 +9.000000e-01 5.000000e-02 5.000000e-02 8.400000e+03 1.245298e+03 1.158439e+03 +1.005000e+00 5.500000e-02 5.500000e-02 4.100000e+03 5.558185e+02 6.399547e+02 +1.120000e+00 6.000000e-02 6.000000e-02 2.000000e+03 2.736860e+02 2.772075e+02 +1.245000e+00 6.500000e-02 6.500000e-02 9.000000e+02 1.652205e+02 1.370987e+02 +1.380000e+00 7.000000e-02 7.000000e-02 4.600000e+02 8.131598e+01 7.557871e+01 +1.525000e+00 7.500000e-02 7.500000e-02 2.100000e+02 3.465064e+01 4.347000e+01 +1.680000e+00 8.000000e-02 8.000000e-02 9.300000e+01 1.583323e+01 1.740417e+01 +1.850000e+00 9.000000e-02 9.000000e-02 3.800000e+01 7.714936e+00 8.085879e+00 +2.030000e+00 9.000000e-02 9.000000e-02 2.100000e+01 4.100757e+00 4.262586e+00 +2.335000e+00 2.150000e-01 2.150000e-01 6.900000e+00 1.737280e+00 1.924296e+00 +3.080000e+00 5.300000e-01 5.300000e-01 5.800000e-01 2.285119e-01 2.454743e-01 +# END YODA_SCATTER2D + +# BEGIN YODA_SCATTER2D /REF/MCgrid_ATLAS_2012_I1082936/d04-x01-y04 +Path=/REF/MCgrid_ATLAS_2012_I1082936/d04-x01-y04 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +2.850000e-01 2.500000e-02 2.500000e-02 2.500000e+07 5.815550e+06 6.422324e+06 +3.400000e-01 3.000000e-02 3.000000e-02 9.600000e+06 1.648155e+06 1.863241e+06 +4.050000e-01 3.500000e-02 3.500000e-02 3.600000e+06 5.602137e+05 6.066080e+05 +4.750000e-01 3.500000e-02 3.500000e-02 1.400000e+06 2.329938e+05 2.197108e+05 +5.500000e-01 4.000000e-02 4.000000e-02 5.900000e+05 8.461102e+04 8.466860e+04 +6.300000e-01 4.000000e-02 4.000000e-02 2.600000e+05 3.365368e+04 3.439575e+04 +7.150000e-01 4.500000e-02 4.500000e-02 1.200000e+05 1.675666e+04 1.672354e+04 +8.050000e-01 4.500000e-02 4.500000e-02 5.700000e+04 8.217890e+03 8.408418e+03 +9.000000e-01 5.000000e-02 5.000000e-02 2.800000e+04 3.707331e+03 3.560076e+03 +1.005000e+00 5.500000e-02 5.500000e-02 1.400000e+04 2.082991e+03 2.082850e+03 +1.120000e+00 6.000000e-02 6.000000e-02 6.300000e+03 9.109329e+02 1.089062e+03 +1.245000e+00 6.500000e-02 6.500000e-02 3.100000e+03 4.309558e+02 4.662074e+02 +1.380000e+00 7.000000e-02 7.000000e-02 1.400000e+03 2.309151e+02 2.589849e+02 +1.525000e+00 7.500000e-02 7.500000e-02 6.700000e+02 1.122605e+02 1.360430e+02 +1.680000e+00 8.000000e-02 8.000000e-02 3.000000e+02 5.005147e+01 5.046870e+01 +1.850000e+00 9.000000e-02 9.000000e-02 1.400000e+02 2.484754e+01 3.179449e+01 +2.030000e+00 9.000000e-02 9.000000e-02 6.000000e+01 1.274305e+01 1.432405e+01 +2.225000e+00 1.050000e-01 1.050000e-01 2.800000e+01 7.133903e+00 7.781784e+00 +2.555000e+00 2.250000e-01 2.250000e-01 9.800000e+00 2.055782e+00 2.266323e+00 +3.355000e+00 5.750000e-01 5.750000e-01 6.200000e-01 2.600159e-01 2.682738e-01 +# END YODA_SCATTER2D + +# BEGIN YODA_SCATTER2D /REF/MCgrid_ATLAS_2012_I1082936/d04-x01-y05 +Path=/REF/MCgrid_ATLAS_2012_I1082936/d04-x01-y05 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +4.050000e-01 3.500000e-02 3.500000e-02 1.300000e+07 4.049933e+06 5.606558e+06 +4.750000e-01 3.500000e-02 3.500000e-02 4.800000e+06 1.315909e+06 1.588568e+06 +5.500000e-01 4.000000e-02 4.000000e-02 2.000000e+06 4.544007e+05 4.869702e+05 +6.300000e-01 4.000000e-02 4.000000e-02 8.900000e+05 1.823653e+05 1.888164e+05 +7.150000e-01 4.500000e-02 4.500000e-02 3.900000e+05 7.119290e+04 7.940116e+04 +8.050000e-01 4.500000e-02 4.500000e-02 1.900000e+05 3.179195e+04 3.412656e+04 +9.000000e-01 5.000000e-02 5.000000e-02 9.400000e+04 1.580934e+04 1.684699e+04 +1.005000e+00 5.500000e-02 5.500000e-02 4.300000e+04 6.738938e+03 7.187306e+03 +1.120000e+00 6.000000e-02 6.000000e-02 2.000000e+04 3.534176e+03 3.417192e+03 +1.245000e+00 6.500000e-02 6.500000e-02 9.900000e+03 1.660900e+03 1.834761e+03 +1.380000e+00 7.000000e-02 7.000000e-02 4.700000e+03 7.798460e+02 7.978795e+02 +1.525000e+00 7.500000e-02 7.500000e-02 2.200000e+03 3.960550e+02 3.874187e+02 +1.680000e+00 8.000000e-02 8.000000e-02 1.000000e+03 1.723079e+02 1.913374e+02 +1.850000e+00 9.000000e-02 9.000000e-02 4.600000e+02 8.450239e+01 8.538423e+01 +2.030000e+00 9.000000e-02 9.000000e-02 2.100000e+02 3.704700e+01 4.519930e+01 +2.225000e+00 1.050000e-01 1.050000e-01 1.000000e+02 2.298956e+01 2.125865e+01 +2.440000e+00 1.100000e-01 1.100000e-01 4.100000e+01 9.238293e+00 9.624614e+00 +2.795000e+00 2.450000e-01 2.450000e-01 1.100000e+01 2.895864e+00 3.793852e+00 +3.655000e+00 6.150000e-01 6.150000e-01 5.100000e-01 2.343809e-01 2.437549e-01 +# END YODA_SCATTER2D + +# BEGIN YODA_SCATTER2D /REF/MCgrid_ATLAS_2012_I1082936/d04-x01-y06 +Path=/REF/MCgrid_ATLAS_2012_I1082936/d04-x01-y06 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +7.150000e-01 4.500000e-02 4.500000e-02 1.400000e+06 4.840964e+05 6.543229e+05 +8.050000e-01 4.500000e-02 4.500000e-02 7.300000e+05 2.244260e+05 2.838893e+05 +9.000000e-01 5.000000e-02 5.000000e-02 3.200000e+05 8.944501e+04 9.730105e+04 +1.005000e+00 5.500000e-02 5.500000e-02 1.500000e+05 3.738673e+04 4.371413e+04 +1.120000e+00 6.000000e-02 6.000000e-02 7.700000e+04 1.737558e+04 1.994449e+04 +1.245000e+00 6.500000e-02 6.500000e-02 3.600000e+04 7.827331e+03 9.120016e+03 +1.380000e+00 7.000000e-02 7.000000e-02 1.600000e+04 3.453999e+03 3.840133e+03 +1.525000e+00 7.500000e-02 7.500000e-02 7.800000e+03 1.613563e+03 1.735811e+03 +1.680000e+00 8.000000e-02 8.000000e-02 3.800000e+03 7.360630e+02 8.274669e+02 +1.850000e+00 9.000000e-02 9.000000e-02 1.600000e+03 3.320761e+02 3.488954e+02 +2.030000e+00 9.000000e-02 9.000000e-02 7.000000e+02 1.605260e+02 1.716842e+02 +2.225000e+00 1.050000e-01 1.050000e-01 3.200000e+02 6.967040e+01 7.967614e+01 +2.440000e+00 1.100000e-01 1.100000e-01 1.400000e+02 3.647558e+01 3.622214e+01 +2.665000e+00 1.150000e-01 1.150000e-01 5.800000e+01 1.720382e+01 1.792500e+01 +3.045000e+00 2.650000e-01 2.650000e-01 1.200000e+01 3.357964e+00 3.767790e+00 +3.975000e+00 6.650000e-01 6.650000e-01 4.900000e-01 2.499120e-01 2.718595e-01 +# END YODA_SCATTER2D + +# BEGIN YODA_SCATTER2D /REF/MCgrid_ATLAS_2012_I1082936/d04-x01-y07 +Path=/REF/MCgrid_ATLAS_2012_I1082936/d04-x01-y07 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +1.245000e+00 6.500000e-02 6.500000e-02 1.300000e+05 5.370542e+04 7.237382e+04 +1.380000e+00 7.000000e-02 7.000000e-02 5.400000e+04 1.880511e+04 2.458044e+04 +1.525000e+00 7.500000e-02 7.500000e-02 2.400000e+04 7.847413e+03 1.012712e+04 +1.680000e+00 8.000000e-02 8.000000e-02 1.200000e+04 3.793177e+03 4.525353e+03 +1.850000e+00 9.000000e-02 9.000000e-02 5.600000e+03 1.682434e+03 2.037076e+03 +2.030000e+00 9.000000e-02 9.000000e-02 2.400000e+03 7.117002e+02 8.147426e+02 +2.225000e+00 1.050000e-01 1.050000e-01 1.100000e+03 3.051345e+02 3.520412e+02 +2.440000e+00 1.100000e-01 1.100000e-01 4.500000e+02 1.194867e+02 1.392705e+02 +2.665000e+00 1.150000e-01 1.150000e-01 1.900000e+02 5.834547e+01 5.778906e+01 +2.910000e+00 1.300000e-01 1.300000e-01 7.300000e+01 2.359538e+01 2.438921e+01 +3.325000e+00 2.850000e-01 2.850000e-01 1.900000e+01 7.071702e+00 8.099729e+00 +4.325000e+00 7.150000e-01 7.150000e-01 8.900000e-01 4.961932e-01 5.548956e-01 +# END YODA_SCATTER2D + +# BEGIN YODA_SCATTER2D /REF/MCgrid_ATLAS_2012_I1082936/d04-x01-y08 +Path=/REF/MCgrid_ATLAS_2012_I1082936/d04-x01-y08 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +1.850000e+00 9.000000e-02 9.000000e-02 1.800000e+04 9.951086e+03 1.743112e+04 +2.030000e+00 9.000000e-02 9.000000e-02 8.000000e+03 3.158207e+03 6.514619e+03 +2.225000e+00 1.050000e-01 1.050000e-01 3.400000e+03 1.207670e+03 2.063058e+03 +2.440000e+00 1.100000e-01 1.100000e-01 1.200000e+03 8.383303e+02 5.661775e+02 +2.665000e+00 1.150000e-01 1.150000e-01 4.800000e+02 2.742519e+02 2.307023e+02 +2.910000e+00 1.300000e-01 1.300000e-01 2.000000e+02 7.722409e+01 1.074359e+02 +3.175000e+00 1.350000e-01 1.350000e-01 8.000000e+01 3.048546e+01 4.324035e+01 +3.620000e+00 3.100000e-01 3.100000e-01 1.300000e+01 5.617038e+00 6.844040e+00 +4.700000e+00 7.700000e-01 7.700000e-01 1.700000e-01 1.139591e-01 1.300683e-01 +# END YODA_SCATTER2D + +# BEGIN YODA_SCATTER2D /REF/MCgrid_ATLAS_2012_I1082936/d04-x01-y09 +Path=/REF/MCgrid_ATLAS_2012_I1082936/d04-x01-y09 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +2.795000e+00 2.450000e-01 2.450000e-01 4.300000e+02 2.713164e+02 4.639351e+02 +3.655000e+00 6.150000e-01 6.150000e-01 2.800000e+01 1.495016e+01 3.027831e+01 +# END YODA_SCATTER2D diff --git a/v2.6/generators/sherpa/ATLAS_2012_I1082936/analysis/templates/MCgrid_ATLAS_2012_I1082936.cc b/v2.6/generators/sherpa/ATLAS_2012_I1082936/analysis/templates/MCgrid_ATLAS_2012_I1082936.cc new file mode 100644 index 0000000000000000000000000000000000000000..9a41a824afb9354f4235fbda20680bdaa41127c7 --- /dev/null +++ b/v2.6/generators/sherpa/ATLAS_2012_I1082936/analysis/templates/MCgrid_ATLAS_2012_I1082936.cc @@ -0,0 +1,75 @@ +// -*- C++ -*- +#include "Rivet/Analysis.hh" +#include "Rivet/Projections/FinalState.hh" +/// @todo Include more projections as required, e.g. ChargedFinalState, FastJets, ZFinder... + +namespace Rivet { + + + class MCgrid_ATLAS_2012_I1082936 : public Analysis { + public: + + /// Constructor + MCgrid_ATLAS_2012_I1082936() + : Analysis("MCgrid_ATLAS_2012_I1082936") + { } + + + /// @name Analysis methods + //@{ + + /// Book histograms and initialise projections before the run + void init() { + + /// @todo Initialise and register projections here + + /// @todo Book histograms here, e.g.: + // _h_XXXX = bookProfile1D(1, 1, 1); + // _h_YYYY = bookHisto1D(2, 1, 1); + + } + + + /// Perform the per-event analysis + void analyze(const Event& event) { + const double weight = event.weight(); + + /// @todo Do the event by event analysis here + + } + + + /// Normalise histograms etc., after the run + void finalize() { + + /// @todo Normalise, scale and otherwise manipulate histograms here + + // scale(_h_YYYY, crossSection()/sumOfWeights()); // norm to cross section + // normalize(_h_YYYY); // normalize to unity + + } + + //@} + + + private: + + // Data members like post-cuts event weight counters go here + + + /// @name Histograms + //@{ + Profile1DPtr _h_XXXX; + Histo1DPtr _h_YYYY; + //@} + + + }; + + + + // The hook for the plugin system + DECLARE_RIVET_PLUGIN(MCgrid_ATLAS_2012_I1082936); + + +} diff --git a/v2.6/generators/sherpa/ATLAS_2012_I1082936/analysis/templates/MCgrid_ATLAS_2012_I1082936.info b/v2.6/generators/sherpa/ATLAS_2012_I1082936/analysis/templates/MCgrid_ATLAS_2012_I1082936.info new file mode 100644 index 0000000000000000000000000000000000000000..8aedc7c2f19e0fe2a774bb4e31c56864e59d09d5 --- /dev/null +++ b/v2.6/generators/sherpa/ATLAS_2012_I1082936/analysis/templates/MCgrid_ATLAS_2012_I1082936.info @@ -0,0 +1,50 @@ +Name: MCgrid_ATLAS_2012_I1082936 +Year: 2012 +Summary: <Insert short MCgrid_ATLAS_2012_I1082936 description> +Experiment: MCgrid_ATLAS +Collider: <Insert the collider name> +InspireID: 1082936 +Status: UNVALIDATED +Authors: + - Your Name <your@email.address> +#References: +# - <Example: Phys.Lett.B639:151-158,2006, Erratum-ibid.B658:285-289,2008> +# - <Example: doi:10.1016/j.physletb.2006.04.048> +# - <Example: arXiv:hep-ex/0511054 (plus erratum)> +RunInfo: + <Insert event types (not gen-specific), energy, any kinematic + efficiency cut(s) that may be needed; essentially any details needed to set + up a generator to reproduce the data.> +NumEvents: 1000000 +NeedCrossSection: no +#Beams: <Insert beam pair(s), e.g. [p-, p+] or [[p-, e-], [p-, e+]]> +#Energies: <Insert list of run energies or beam energy pairs in GeV, +# e.g. [1960] or [[8.0, 3.5]] or [630, 1800]. Order pairs to match "Beams"> +#PtCuts: <Insert list of kinematic pT cuts in GeV, e.g. [0, 20]> +#NeedCrossSection: True +Description: + '<Insert a fairly long description, including what is measured + and if possible what it is useful for in terms of MC validation + and tuning. Use LaTeX for maths like $\pT > 50\;\GeV$. + Use single quotes around the block if required (see http://www.yaml.org)>' +BibKey: Aad:2011fc +BibTeX: '@article{Aad:2011fc, + author = "Aad, Georges and others", + title = "{Measurement of inclusive jet and dijet production in + $pp$ collisions at $\sqrt{s}=7$ TeV using the ATLAS + detector}", + collaboration = "ATLAS", + journal = "Phys. Rev.", + volume = "D86", + year = "2012", + pages = "014022", + doi = "10.1103/PhysRevD.86.014022", + eprint = "1112.6297", + archivePrefix = "arXiv", + primaryClass = "hep-ex", + reportNumber = "CERN-PH-EP-2011-192", + SLACcitation = "%%CITATION = ARXIV:1112.6297;%%" +}' +ToDo: + - Implement the analysis, test it, remove this ToDo, and mark as VALIDATED :-) + diff --git a/v2.6/generators/sherpa/ATLAS_2012_I1082936/analysis/templates/MCgrid_ATLAS_2012_I1082936.plot b/v2.6/generators/sherpa/ATLAS_2012_I1082936/analysis/templates/MCgrid_ATLAS_2012_I1082936.plot new file mode 100644 index 0000000000000000000000000000000000000000..c93e45c419e748aaa9d2376c8f386d2ffd6daf54 --- /dev/null +++ b/v2.6/generators/sherpa/ATLAS_2012_I1082936/analysis/templates/MCgrid_ATLAS_2012_I1082936.plot @@ -0,0 +1,8 @@ +# BEGIN PLOT /MCgrid_ATLAS_2012_I1082936/d01-x01-y01 +#Title=[Uncomment and insert title for histogram d01-x01-y01 here] +#XLabel=[Uncomment and insert x-axis label for histogram d01-x01-y01 here] +#YLabel=[Uncomment and insert y-axis label for histogram d01-x01-y01 here] +# + any additional plot settings you might like, see make-plots documentation +# END PLOT + +# ... add more histograms as you need them ... diff --git a/v2.6/generators/sherpa/ATLAS_2012_I1082936/analysis/templates/MCgrid_ATLAS_2012_I1082936.yoda b/v2.6/generators/sherpa/ATLAS_2012_I1082936/analysis/templates/MCgrid_ATLAS_2012_I1082936.yoda new file mode 100644 index 0000000000000000000000000000000000000000..a360052fecf2e022768db145207d336ff22b15f5 --- /dev/null +++ b/v2.6/generators/sherpa/ATLAS_2012_I1082936/analysis/templates/MCgrid_ATLAS_2012_I1082936.yoda @@ -0,0 +1,682 @@ +# BEGIN YODA_SCATTER2D /REF/ATLAS_2012_I1082936/d01-x01-y01 +Path=/REF/ATLAS_2012_I1082936/d01-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +25.0 5.0 5.0 4700000.0 956908.457690703 947536.3193039094 +37.5 7.5 7.5 717000.0 117524.34902270252 122516.58692687289 +52.5 7.5 7.5 148000.0 17675.99013803753 19535.48984182378 +70.0 10.0 10.0 38100.0 3889.5603119118746 4002.676550759504 +95.0 15.0 15.0 8520.0 985.9756885927767 901.3596277269135 +135.0 25.0 25.0 1480.0 138.9028688544625 147.706965902086 +185.0 25.0 25.0 254.0 25.361375332580053 27.12526163486723 +235.0 25.0 25.0 63.4 8.732831623454102 8.102512558682028 +285.0 25.0 25.0 20.7 2.437240187260993 2.6430390330829394 +355.0 45.0 45.0 5.96 0.6493416580999559 0.7084655284091104 +450.0 50.0 50.0 1.33 0.16369831048608902 0.15847127202114583 +550.0 50.0 50.0 0.347 0.04693851953949974 0.05098165756975738 +700.0 100.0 100.0 0.0644 0.010001568805662442 0.01048104608588284 +900.0 100.0 100.0 0.0101 0.002366182336592005 0.0024893990238609802 +1100.0 100.0 100.0 0.00114 4.826240860131205E-4 4.938042612209822E-4 +1350.0 150.0 150.0 4.0E-4 2.551862065237853E-4 2.5861941149109437E-4 +# END YODA_SCATTER2D + + +# BEGIN YODA_SCATTER2D /REF/ATLAS_2012_I1082936/d02-x01-y01 +Path=/REF/ATLAS_2012_I1082936/d02-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +25.0 5.0 5.0 4610000.0 919775.411522291 933570.0744673642 +37.5 7.5 7.5 730000.0 118850.21021857724 132658.51562941595 +52.5 7.5 7.5 149000.0 17071.55755196344 19554.93733689781 +70.0 10.0 10.0 37100.0 3598.1052034230456 4186.532399838798 +95.0 15.0 15.0 8350.0 874.4949857489178 833.050504231286 +135.0 25.0 25.0 1440.0 152.15942460459033 160.7478649811561 +185.0 25.0 25.0 241.0 25.24253833987383 28.59548023447062 +235.0 25.0 25.0 60.6 7.7323415329639955 7.370524669411262 +285.0 25.0 25.0 19.6 2.266427929231371 2.6761171346561046 +355.0 45.0 45.0 5.64 0.7259764534363357 0.7933104591167319 +450.0 50.0 50.0 1.19 0.16009264204203766 0.16009264204203766 +550.0 50.0 50.0 0.316 0.0449212533912401 0.04768699661584906 +700.0 100.0 100.0 0.066 0.010937695552537563 0.011448289304520567 +900.0 100.0 100.0 0.0078 0.001750418018645832 0.0019047018664347447 +1100.0 100.0 100.0 0.00138 5.202728115133445E-4 5.480963218267388E-4 +1350.0 150.0 150.0 2.35E-4 1.7176828236027742E-4 1.723537165975831E-4 +# END YODA_SCATTER2D + + +# BEGIN YODA_SCATTER2D /REF/ATLAS_2012_I1082936/d03-x01-y01 +Path=/REF/ATLAS_2012_I1082936/d03-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +25.0 5.0 5.0 3920000.0 974301.3127036215 946923.3658200647 +37.5 7.5 7.5 666000.0 118579.81780876541 135143.87256387173 +52.5 7.5 7.5 139000.0 17674.225782477715 21213.699842554575 +70.0 10.0 10.0 33900.0 3695.4125510015797 3964.2727254945517 +95.0 15.0 15.0 7550.0 859.6201361793476 844.6358141382592 +135.0 25.0 25.0 1280.0 149.409504383088 144.32248334892245 +185.0 25.0 25.0 205.0 22.714925071415045 25.770253122544215 +235.0 25.0 25.0 50.1 6.406142638124755 6.754587461125958 +285.0 25.0 25.0 15.9 2.111831272237439 2.143437949276816 +355.0 45.0 45.0 4.38 0.5559212228220829 0.6429708718005815 +450.0 50.0 50.0 0.918 0.1401216868748018 0.13558260210159712 +550.0 50.0 50.0 0.214 0.035207969132569975 0.035207969132569975 +700.0 100.0 100.0 0.0407 0.007941044575772133 0.008208854021384472 +900.0 100.0 100.0 0.0027 8.561597397682281E-4 9.093389961944885E-4 +1100.0 100.0 100.0 4.66E-4 3.1738979139852625E-4 3.28371323382539E-4 +1350.0 150.0 150.0 1.02E-4 1.1540095363557444E-4 1.1572433813161344E-4 +# END YODA_SCATTER2D + + +# BEGIN YODA_SCATTER2D /REF/ATLAS_2012_I1082936/d04-x01-y01 +Path=/REF/ATLAS_2012_I1082936/d04-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +25.0 5.0 5.0 3700000.0 949042.78749696 960121.483198871 +37.5 7.5 7.5 562000.0 115628.53290239394 129072.80397186696 +52.5 7.5 7.5 109000.0 15570.6070790448 19129.736009940127 +70.0 10.0 10.0 26700.0 3595.122033825834 3648.268498630549 +95.0 15.0 15.0 5840.0 706.7174602173063 747.2738125854538 +135.0 25.0 25.0 958.0 109.92986341863616 108.97817415996656 +185.0 25.0 25.0 151.0 18.23703086058693 20.78958546027313 +235.0 25.0 25.0 33.8 4.653679448178612 4.687313026287021 +285.0 25.0 25.0 9.58 1.4175111348331624 1.5127253793653361 +355.0 45.0 45.0 2.35 0.361337699527741 0.39408848384595047 +450.0 50.0 50.0 0.391 0.07054710617197561 0.07054710617197561 +550.0 50.0 50.0 0.0725 0.015417264356882513 0.015487846331882299 +700.0 100.0 100.0 0.00951 0.0024059414764347445 0.002801761079612071 +900.0 100.0 100.0 4.86E-4 2.45091491308858E-4 2.5677592800728034E-4 +1100.0 100.0 100.0 6.93E-5 7.71955031336023E-5 7.863779139860175E-5 +# END YODA_SCATTER2D + + +# BEGIN YODA_SCATTER2D /REF/ATLAS_2012_I1082936/d05-x01-y01 +Path=/REF/ATLAS_2012_I1082936/d05-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +25.0 5.0 5.0 2760000.0 909312.6091372537 983736.2111541894 +37.5 7.5 7.5 407000.0 104881.05712095964 133717.11692154448 +52.5 7.5 7.5 80000.0 14052.828327422207 16896.590898758248 +70.0 10.0 10.0 17100.0 2596.456364451365 2613.462431813398 +95.0 15.0 15.0 3440.0 456.7434010470211 425.9770209764841 +135.0 25.0 25.0 498.0 66.5723933837443 68.5545613423352 +185.0 25.0 25.0 59.3 8.590155098885003 10.301352202157736 +235.0 25.0 25.0 10.0 1.9182442493071628 1.9779941860379673 +285.0 25.0 25.0 1.85 0.3505452718266216 0.42590664481785206 +355.0 45.0 45.0 0.276 0.06935210011412778 0.08277354117252687 +450.0 50.0 50.0 0.0166 0.005775130218445295 0.006738271051241557 +550.0 50.0 50.0 3.13E-4 3.080659469155914E-4 2.966898255636684E-4 +# END YODA_SCATTER2D + + +# BEGIN YODA_SCATTER2D /REF/ATLAS_2012_I1082936/d06-x01-y01 +Path=/REF/ATLAS_2012_I1082936/d06-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +25.0 5.0 5.0 1890000.0 754273.0244838403 891633.095260601 +37.5 7.5 7.5 267000.0 92015.84319675605 122611.99628996338 +52.5 7.5 7.5 42500.0 10647.977005633511 13885.057006094718 +70.0 10.0 10.0 8570.0 1653.6238608852377 2007.495930080308 +95.0 15.0 15.0 1310.0 288.14286047202353 272.9482061509106 +135.0 25.0 25.0 116.0 26.219377127613082 24.610913858692854 +185.0 25.0 25.0 5.57 1.6649142760022209 2.045158373900662 +235.0 25.0 25.0 0.289 0.12370187152197819 0.12539977417061005 +285.0 25.0 25.0 0.00917 0.007276549565151054 0.00985541243912704 +# END YODA_SCATTER2D + + +# BEGIN YODA_SCATTER2D /REF/ATLAS_2012_I1082936/d07-x01-y01 +Path=/REF/ATLAS_2012_I1082936/d07-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +25.0 5.0 5.0 819000.0 443269.82678134093 597587.2996288994 +37.5 7.5 7.5 86400.0 41373.936160128644 73857.02702994752 +52.5 7.5 7.5 8830.0 3324.9288495131746 5507.586418897574 +70.0 10.0 10.0 920.0 317.8967313075112 424.2455484457085 +95.0 15.0 15.0 53.8 19.183707040048333 21.1836336892045 +135.0 25.0 25.0 0.542 0.31091625798597283 0.26047653868246945 +# END YODA_SCATTER2D + + +# BEGIN YODA_SCATTER2D /REF/ATLAS_2012_I1082936/d08-x01-y01 +Path=/REF/ATLAS_2012_I1082936/d08-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +25.0 5.0 5.0 1.0E7 2623842.411426418 2743674.361144194 +37.5 7.5 7.5 1230000.0 222311.77339268383 248046.84535184078 +52.5 7.5 7.5 219000.0 23405.035229411642 31933.24152180608 +70.0 10.0 10.0 54500.0 5070.597522974979 6042.415761928337 +95.0 15.0 15.0 11400.0 1207.3541889603068 1162.1605300473768 +135.0 25.0 25.0 1930.0 184.95009848334766 162.01898817422608 +185.0 25.0 25.0 321.0 34.913660585650426 38.42209094375266 +235.0 25.0 25.0 77.8 9.781165014455077 9.239875984016235 +285.0 25.0 25.0 25.4 2.6621441794914116 3.192113104575087 +355.0 45.0 45.0 7.16 0.8149668509479389 0.8291851914644881 +450.0 50.0 50.0 1.6 0.21017935198301477 0.19435884337997075 +550.0 50.0 50.0 0.41 0.0576601120706507 0.06005910858479336 +700.0 100.0 100.0 0.0761 0.012120405693688639 0.013418387392663845 +900.0 100.0 100.0 0.0118 0.0026059839830666646 0.002817952661064412 +1100.0 100.0 100.0 0.00154 6.108114484847185E-4 6.314769953054504E-4 +1350.0 150.0 150.0 3.99E-4 2.577323814463367E-4 2.590582589882052E-4 +# END YODA_SCATTER2D + + +# BEGIN YODA_SCATTER2D /REF/ATLAS_2012_I1082936/d09-x01-y01 +Path=/REF/ATLAS_2012_I1082936/d09-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +25.0 5.0 5.0 9950000.0 2302582.2119090557 2401911.0396931856 +37.5 7.5 7.5 1250000.0 232015.92752438356 253201.65505975668 +52.5 7.5 7.5 225000.0 26836.530140836017 33039.13361454867 +70.0 10.0 10.0 53200.0 5211.322216712376 5791.378976237007 +95.0 15.0 15.0 11300.0 1250.3280218006794 1070.7660818778302 +135.0 25.0 25.0 1880.0 187.46494259994319 191.19849555893478 +185.0 25.0 25.0 303.0 29.9173337563694 35.638274706977604 +235.0 25.0 25.0 74.7 9.162082138335148 8.716385752684424 +285.0 25.0 25.0 23.9 3.047958482345191 3.2384111953394674 +355.0 45.0 45.0 6.79 0.8460296404382059 1.0083321463188606 +450.0 50.0 50.0 1.44 0.20036237826498268 0.20321910398385284 +550.0 50.0 50.0 0.368 0.052279111508899995 0.05516299132715701 +700.0 100.0 100.0 0.075 0.012335883632719629 0.013130390321692649 +900.0 100.0 100.0 0.00909 0.002009219022829518 0.0022117858532190683 +1100.0 100.0 100.0 0.00161 5.906155037755105E-4 6.216622598324593E-4 +1350.0 150.0 150.0 2.35E-4 1.54827374033147E-4 1.5450870242481488E-4 +# END YODA_SCATTER2D + + +# BEGIN YODA_SCATTER2D /REF/ATLAS_2012_I1082936/d10-x01-y01 +Path=/REF/ATLAS_2012_I1082936/d10-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +25.0 5.0 5.0 8540000.0 2019529.4422463865 1942831.2306785681 +37.5 7.5 7.5 1120000.0 227073.61273384452 238234.4257239075 +52.5 7.5 7.5 199000.0 28357.10897976026 32079.571547793465 +70.0 10.0 10.0 48400.0 5368.650962169174 5848.957270625252 +95.0 15.0 15.0 10300.0 1131.2293573365218 1039.290416053184 +135.0 25.0 25.0 1660.0 183.91009569895832 183.91009569895832 +185.0 25.0 25.0 260.0 28.043817429158963 31.141401638333498 +235.0 25.0 25.0 61.7 8.071425999933345 7.581109907685021 +285.0 25.0 25.0 19.5 2.568351358848707 2.840020194030317 +355.0 45.0 45.0 5.24 0.7017578908313038 0.8007165799107696 +450.0 50.0 50.0 1.1 0.164666583130883 0.15705812172568473 +550.0 50.0 50.0 0.252 0.040047303711486 0.04029312942127976 +700.0 100.0 100.0 0.0472 0.008922808895499219 0.009499765430030364 +900.0 100.0 100.0 0.00297 9.10284408413107E-4 9.83146265923845E-4 +1100.0 100.0 100.0 4.54E-4 3.144372011387965E-4 3.1742685236129596E-4 +1350.0 150.0 150.0 1.01E-4 1.2336247664504796E-4 1.2347145694855958E-4 +# END YODA_SCATTER2D + + +# BEGIN YODA_SCATTER2D /REF/ATLAS_2012_I1082936/d11-x01-y01 +Path=/REF/ATLAS_2012_I1082936/d11-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +25.0 5.0 5.0 7650000.0 2252635.9958945876 2275550.3339851657 +37.5 7.5 7.5 938000.0 222742.59221118892 243341.5708689331 +52.5 7.5 7.5 159000.0 24071.723068571555 28805.029968566254 +70.0 10.0 10.0 37800.0 4524.260508679844 5125.9866279966045 +95.0 15.0 15.0 7760.0 953.2960233967201 853.1939143149111 +135.0 25.0 25.0 1250.0 146.00197986671276 144.76063216565475 +185.0 25.0 25.0 186.0 21.716453876266264 24.860596070086498 +235.0 25.0 25.0 41.2 5.7145469348321924 5.509629340563665 +285.0 25.0 25.0 11.4 1.6981347550768755 1.8001116205391265 +355.0 45.0 45.0 2.85 0.4351065234227131 0.5089290095140971 +450.0 50.0 50.0 0.46 0.08431272978619539 0.08614006967724139 +550.0 50.0 50.0 0.0854 0.017312254635326967 0.018230897890076612 +700.0 100.0 100.0 0.0115 0.003051043628416349 0.003424614463337443 +900.0 100.0 100.0 6.85E-4 3.1865019045184957E-4 3.5446350764218313E-4 +1100.0 100.0 100.0 6.75E-5 7.551295323485899E-5 7.822111327832148E-5 +# END YODA_SCATTER2D + + +# BEGIN YODA_SCATTER2D /REF/ATLAS_2012_I1082936/d12-x01-y01 +Path=/REF/ATLAS_2012_I1082936/d12-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +25.0 5.0 5.0 5820000.0 1998957.4358610038 2167527.4033755604 +37.5 7.5 7.5 689000.0 187100.0273913395 216674.933956007 +52.5 7.5 7.5 119000.0 20467.39115373525 25064.47369565138 +70.0 10.0 10.0 24200.0 2947.803380756593 3597.644797864292 +95.0 15.0 15.0 4720.0 575.0587355879399 603.1938399685462 +135.0 25.0 25.0 640.0 81.72637116622761 81.08989421623387 +185.0 25.0 25.0 73.1 10.65466290973581 11.236592364240147 +235.0 25.0 25.0 12.1 2.2362505589714226 2.151938310570263 +285.0 25.0 25.0 2.26 0.4523896820220372 0.5355961598069948 +355.0 45.0 45.0 0.324 0.07586597506761512 0.08968962007367409 +450.0 50.0 50.0 0.0209 0.007381044426095808 0.008054557394419633 +550.0 50.0 50.0 5.83E-4 3.9578014644244095E-4 4.2906819655388114E-4 +# END YODA_SCATTER2D + + +# BEGIN YODA_SCATTER2D /REF/ATLAS_2012_I1082936/d13-x01-y01 +Path=/REF/ATLAS_2012_I1082936/d13-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +25.0 5.0 5.0 3900000.0 1581646.9593749421 1849300.0984426513 +37.5 7.5 7.5 426000.0 146029.56892574872 188457.04603606625 +52.5 7.5 7.5 64200.0 16490.904427592806 18524.89859729332 +70.0 10.0 10.0 12400.0 2270.31640297118 2757.207966331158 +95.0 15.0 15.0 1780.0 331.6548906619651 329.9356162950584 +135.0 25.0 25.0 151.0 33.84992970391519 34.14902975137068 +185.0 25.0 25.0 7.23 1.9258358706608412 2.4627311603632256 +235.0 25.0 25.0 0.375 0.13330574349967073 0.15976911857427264 +285.0 25.0 25.0 0.0109 0.0066974003143010635 0.008328406047377853 +# END YODA_SCATTER2D + + +# BEGIN YODA_SCATTER2D /REF/ATLAS_2012_I1082936/d14-x01-y01 +Path=/REF/ATLAS_2012_I1082936/d14-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +25.0 5.0 5.0 1510000.0 769530.7416607864 1014700.4619398771 +37.5 7.5 7.5 138000.0 60184.291922726814 96635.37672219217 +52.5 7.5 7.5 12900.0 4138.199362331399 5640.275365830998 +70.0 10.0 10.0 1270.0 362.01525429324107 374.4546919735417 +95.0 15.0 15.0 77.0 18.243900067967925 22.34892468755488 +135.0 25.0 25.0 0.828 0.3348786604368812 0.2616335882106883 +# END YODA_SCATTER2D + + +# BEGIN YODA_SCATTER2D /REF/ATLAS_2012_I1082936/d15-x01-y01 +Path=/REF/ATLAS_2012_I1082936/d15-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +0.09 0.01999999999999999 0.020000000000000004 2.4E8 3.84883982519408E7 4.052306010162608E7 +0.135 0.02500000000000001 0.024999999999999994 3.4E7 3954083.0593198217 4148263.352295753 +0.185 0.024999999999999994 0.024999999999999994 7100000.0 701429.6945524904 758505.996284802 +0.235 0.024999999999999994 0.025000000000000022 2000000.0 211494.11339325734 207561.460777284 +0.285 0.024999999999999967 0.025000000000000022 720000.0 73075.17619547695 82313.00611689503 +0.34 0.030000000000000027 0.02999999999999997 280000.0 30055.68831352894 31992.680412869446 +0.405 0.03500000000000003 0.034999999999999976 110000.0 12245.727458995647 12339.239887448497 +0.475 0.034999999999999976 0.03500000000000003 43000.0 5127.821666165858 5292.6624717622035 +0.55 0.040000000000000036 0.039999999999999925 18000.0 2039.3483665131857 2362.272160442145 +0.63 0.040000000000000036 0.040000000000000036 7900.0 990.5604575188735 935.908302132212 +0.715 0.04499999999999993 0.04500000000000004 3700.0 460.98792825843066 468.29489640610007 +0.805 0.04500000000000004 0.04499999999999993 1800.0 228.91867551600066 246.6328445280555 +0.9 0.050000000000000044 0.04999999999999993 860.0 115.80659221305149 120.78025666473806 +1.005 0.05499999999999994 0.05500000000000016 420.0 58.16052269366224 60.602376191037266 +1.12 0.06000000000000005 0.05999999999999983 210.0 30.381129011279356 33.7812921600107 +1.245 0.06500000000000017 0.06499999999999995 96.0 14.69803578713836 14.69803578713836 +1.38 0.06999999999999984 0.07000000000000006 47.0 8.077165715769361 8.540690194592003 +1.525 0.07499999999999996 0.07500000000000018 21.0 4.339232190146086 4.53716651667095 +1.77 0.16999999999999993 0.16999999999999993 7.2 1.6167327051804206 1.7196548490903634 +2.36 0.41999999999999993 0.41999999999999993 0.64 0.2600731958507066 0.26270577306180387 +# END YODA_SCATTER2D + + +# BEGIN YODA_SCATTER2D /REF/ATLAS_2012_I1082936/d16-x01-y01 +Path=/REF/ATLAS_2012_I1082936/d16-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +0.135 0.02500000000000001 0.024999999999999994 7.9E7 1.2000201414976334E7 1.3515235403055323E7 +0.185 0.024999999999999994 0.024999999999999994 1.6E7 2003024.2734425361 1785150.4810519477 +0.235 0.024999999999999994 0.025000000000000022 4700000.0 512438.82522697275 501546.1589923703 +0.285 0.024999999999999967 0.025000000000000022 1700000.0 189552.36321396788 191772.96055492287 +0.34 0.030000000000000027 0.02999999999999997 650000.0 68619.468993865 71823.35292229123 +0.405 0.03500000000000003 0.034999999999999976 250000.0 29941.912514066298 27362.485724071197 +0.475 0.034999999999999976 0.03500000000000003 100000.0 10840.313648598918 11235.319310104185 +0.55 0.040000000000000036 0.039999999999999925 44000.0 4817.3952131831575 5818.031337144894 +0.63 0.040000000000000036 0.040000000000000036 19000.0 2419.8243655273827 2382.236335882735 +0.715 0.04499999999999993 0.04500000000000004 9000.0 1208.985111570858 1074.3225772550813 +0.805 0.04500000000000004 0.04499999999999993 4300.0 514.5287358350358 676.6320196384443 +0.9 0.050000000000000044 0.04999999999999993 2100.0 287.21674742256937 285.14412145439724 +1.005 0.05499999999999994 0.05500000000000016 980.0 132.77101340277554 139.5115278391001 +1.12 0.06000000000000005 0.05999999999999983 490.0 65.47324186261133 70.24966476788342 +1.245 0.06500000000000017 0.06499999999999995 230.0 35.12755898151763 38.92507931912277 +1.38 0.06999999999999984 0.07000000000000006 110.0 17.53111519556015 17.334338752891618 +1.525 0.07499999999999996 0.07500000000000018 52.0 8.930990538568496 8.406648797231867 +1.68 0.07999999999999985 0.08000000000000007 20.0 4.04262291093295 4.211270592113501 +1.94 0.17999999999999994 0.18000000000000016 7.6 1.6846819046929897 1.7591496582155823 +2.715 0.5949999999999998 0.5950000000000002 0.98 0.3134728804856969 0.33083528530070666 +# END YODA_SCATTER2D + + +# BEGIN YODA_SCATTER2D /REF/ATLAS_2012_I1082936/d17-x01-y01 +Path=/REF/ATLAS_2012_I1082936/d17-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +0.185 0.024999999999999994 0.024999999999999994 4.3E7 7667636.728484207 8440824.426559292 +0.235 0.024999999999999994 0.025000000000000022 1.3E7 1768477.8765933148 1744665.8705895522 +0.285 0.024999999999999967 0.025000000000000022 4800000.0 578355.1849858355 638165.3704174177 +0.34 0.030000000000000027 0.02999999999999997 1900000.0 211832.95895587164 231131.31008152055 +0.405 0.03500000000000003 0.034999999999999976 730000.0 78525.77799041536 82603.65312139652 +0.475 0.034999999999999976 0.03500000000000003 300000.0 37567.13989645738 37798.809505062454 +0.55 0.040000000000000036 0.039999999999999925 130000.0 17014.11472865985 16784.60604244258 +0.63 0.040000000000000036 0.040000000000000036 57000.0 7076.498922489849 7465.912134495021 +0.715 0.04499999999999993 0.04500000000000004 26000.0 3017.120481518761 3372.591881624576 +0.805 0.04500000000000004 0.04499999999999993 13000.0 1753.6031478073937 1740.883970860781 +0.9 0.050000000000000044 0.04999999999999993 6100.0 889.2201639639084 961.1323842218615 +1.005 0.05499999999999994 0.05500000000000016 3100.0 452.2282720043054 461.3483282726838 +1.12 0.06000000000000005 0.05999999999999983 1400.0 217.4331161529908 207.6299593026016 +1.245 0.06500000000000017 0.06499999999999995 720.0 104.79896182691887 101.19522518380005 +1.38 0.06999999999999984 0.07000000000000006 350.0 51.69939554772377 74.02313827446118 +1.525 0.07499999999999996 0.07500000000000018 150.0 24.597255944515435 25.168730599694534 +1.68 0.07999999999999985 0.08000000000000007 73.0 12.994205054561823 13.540466941726935 +1.85 0.09000000000000008 0.08999999999999986 29.0 5.915573514039023 5.941745450623074 +2.03 0.08999999999999986 0.0900000000000003 17.0 3.929648457559531 3.8703665201115003 +2.335 0.21499999999999986 0.21499999999999986 5.2 1.3534492232810214 1.410801304223951 +3.08 0.5300000000000002 0.5299999999999998 0.43 0.19806390004238528 0.20469671150265212 +# END YODA_SCATTER2D + + +# BEGIN YODA_SCATTER2D /REF/ATLAS_2012_I1082936/d18-x01-y01 +Path=/REF/ATLAS_2012_I1082936/d18-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +0.285 0.024999999999999967 0.025000000000000022 1.3E7 2759125.586123256 3098639.3788241963 +0.34 0.030000000000000027 0.02999999999999997 5400000.0 878741.122288015 1142084.042441711 +0.405 0.03500000000000003 0.034999999999999976 2200000.0 336901.8254625522 419813.9587960362 +0.475 0.034999999999999976 0.03500000000000003 890000.0 145315.4977970347 125192.98183204999 +0.55 0.040000000000000036 0.039999999999999925 370000.0 49713.73753802866 45814.30780880575 +0.63 0.040000000000000036 0.040000000000000036 170000.0 25321.441507149626 26144.09876052338 +0.715 0.04499999999999993 0.04500000000000004 81000.0 11257.251662817172 12110.244960363105 +0.805 0.04500000000000004 0.04499999999999993 40000.0 5322.706078678401 7226.838866337066 +0.9 0.050000000000000044 0.04999999999999993 19000.0 2842.3263359438515 3122.538870854933 +1.005 0.05499999999999994 0.05500000000000016 9500.0 1217.9281588008382 1354.6746841954343 +1.12 0.06000000000000005 0.05999999999999983 4600.0 807.414664221551 635.6993629067125 +1.245 0.06500000000000017 0.06499999999999995 2200.0 435.6111109694058 370.8354352000358 +1.38 0.06999999999999984 0.07000000000000006 1000.0 164.00914608643018 185.54244797350282 +1.525 0.07499999999999996 0.07500000000000018 490.0 72.15489172606388 82.53700563989463 +1.68 0.07999999999999985 0.08000000000000007 230.0 30.032399171561366 42.17600502655508 +1.85 0.09000000000000008 0.08999999999999986 98.0 20.721612775071346 18.536512832784922 +2.03 0.08999999999999986 0.0900000000000003 43.0 10.290395036149 7.874285110408436 +2.225 0.10499999999999998 0.10499999999999998 23.0 6.010441747492442 5.927265558417305 +2.555 0.2250000000000001 0.22499999999999964 5.9 1.4132686156566274 1.496380048650743 +3.355 0.5750000000000002 0.5750000000000002 0.54 0.23517356484094892 0.27769339207118343 +# END YODA_SCATTER2D + + +# BEGIN YODA_SCATTER2D /REF/ATLAS_2012_I1082936/d19-x01-y01 +Path=/REF/ATLAS_2012_I1082936/d19-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +0.405 0.03500000000000003 0.034999999999999976 5800000.0 1648067.7291907636 2060633.1551248997 +0.475 0.034999999999999976 0.03500000000000003 2600000.0 682617.6089143907 887472.5911260584 +0.55 0.040000000000000036 0.039999999999999925 1100000.0 234877.69157584975 291643.1723870799 +0.63 0.040000000000000036 0.040000000000000036 520000.0 94829.80965919947 115810.66617544343 +0.715 0.04499999999999993 0.04500000000000004 240000.0 45424.081718841604 49106.83862762905 +0.805 0.04500000000000004 0.04499999999999993 120000.0 21000.342854344068 22686.348317876105 +0.9 0.050000000000000044 0.04999999999999993 58000.0 9513.944923111549 10916.795683715987 +1.005 0.05499999999999994 0.05500000000000016 28000.0 4457.983400597181 4434.708558631559 +1.12 0.06000000000000005 0.05999999999999983 14000.0 2525.9817893246973 2878.319648683933 +1.245 0.06500000000000017 0.06499999999999995 6700.0 1152.2441755114235 1237.4702299449468 +1.38 0.06999999999999984 0.07000000000000006 3200.0 576.5863682051458 490.7907089585132 +1.525 0.07499999999999996 0.07500000000000018 1500.0 254.81463851199754 298.9970735642742 +1.68 0.07999999999999985 0.08000000000000007 730.0 126.41020291099923 160.72438365101917 +1.85 0.09000000000000008 0.08999999999999986 310.0 72.5280759430443 52.654392029535394 +2.03 0.08999999999999986 0.0900000000000003 150.0 32.48668958204267 27.8479352915077 +2.225 0.10499999999999998 0.10499999999999998 73.0 14.82798742243869 20.88195591892675 +2.44 0.10999999999999988 0.10999999999999988 26.0 5.906121908663923 6.75464788127405 +2.795 0.2450000000000001 0.2450000000000001 8.0 2.188932159752787 2.458070788240241 +3.655 0.6149999999999998 0.6149999999999998 0.23 0.13524391150806012 0.1400329836145756 +# END YODA_SCATTER2D + + +# BEGIN YODA_SCATTER2D /REF/ATLAS_2012_I1082936/d20-x01-y01 +Path=/REF/ATLAS_2012_I1082936/d20-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +0.715 0.04499999999999993 0.04500000000000004 730000.0 250403.83343711015 345092.3958884055 +0.805 0.04500000000000004 0.04499999999999993 390000.0 114785.28869153922 174216.976784698 +0.9 0.050000000000000044 0.04999999999999993 190000.0 49977.58497566684 70834.58900847805 +1.005 0.05499999999999994 0.05500000000000016 91000.0 22191.12946652333 27128.685814097225 +1.12 0.06000000000000005 0.05999999999999983 43000.0 9991.371777688988 10865.139391650711 +1.245 0.06500000000000017 0.06499999999999995 21000.0 4947.940480644447 5231.36091280271 +1.38 0.06999999999999984 0.07000000000000006 9900.0 2112.5078295712897 2577.310563358634 +1.525 0.07499999999999996 0.07500000000000018 4900.0 987.6265741665724 1161.599750344326 +1.68 0.07999999999999985 0.08000000000000007 2400.0 466.3478530024556 562.7117201551786 +1.85 0.09000000000000008 0.08999999999999986 1000.0 235.52069972722143 243.73346097735535 +2.03 0.08999999999999986 0.0900000000000003 470.0 106.30315329283512 105.98369733124052 +2.225 0.10499999999999998 0.10499999999999998 220.0 62.84380001241173 54.61585850281949 +2.44 0.10999999999999988 0.10999999999999988 96.0 24.962584481579626 28.50246305146276 +2.665 0.11500000000000021 0.11499999999999977 46.0 14.873088314133016 14.706625173709977 +3.045 0.2650000000000001 0.2650000000000001 8.0 2.4632986014691762 2.6788057040405153 +3.975 0.665 0.6649999999999996 0.55 0.3278742784971093 0.3314328476479059 +# END YODA_SCATTER2D + + +# BEGIN YODA_SCATTER2D /REF/ATLAS_2012_I1082936/d21-x01-y01 +Path=/REF/ATLAS_2012_I1082936/d21-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +1.245 0.06500000000000017 0.06499999999999995 56000.0 22111.4920346864 35135.526408465834 +1.38 0.06999999999999984 0.07000000000000006 26000.0 9379.19143636593 12628.829241065856 +1.525 0.07499999999999996 0.07500000000000018 14000.0 4713.5943822098225 6298.195297067248 +1.68 0.07999999999999985 0.08000000000000007 7200.0 2347.785203122296 3189.022972635976 +1.85 0.09000000000000008 0.08999999999999986 3100.0 1016.9370334489741 1233.4338652720703 +2.03 0.08999999999999986 0.0900000000000003 1500.0 449.9524974927909 546.5210425957998 +2.225 0.10499999999999998 0.10499999999999998 640.0 173.79152568523014 210.66113072895058 +2.44 0.10999999999999988 0.10999999999999988 270.0 75.71755146595802 82.27206147897353 +2.665 0.11500000000000021 0.11499999999999977 110.0 34.63358341263578 43.42465083336884 +2.91 0.13000000000000034 0.1299999999999999 43.0 14.788312040256656 17.97698300605527 +3.325 0.28500000000000014 0.2849999999999997 12.0 4.771958088667586 5.566732614379822 +4.325 0.7150000000000003 0.7149999999999999 0.44 0.31607867881272855 0.34499872231647466 +# END YODA_SCATTER2D + + +# BEGIN YODA_SCATTER2D /REF/ATLAS_2012_I1082936/d22-x01-y01 +Path=/REF/ATLAS_2012_I1082936/d22-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +1.85 0.09000000000000008 0.08999999999999986 8900.0 4699.452834107392 9260.158104481801 +2.03 0.08999999999999986 0.0900000000000003 3600.0 1601.8381940757936 2887.128178657816 +2.225 0.10499999999999998 0.10499999999999998 1300.0 601.5868515850392 800.5076576773017 +2.44 0.10999999999999988 0.10999999999999988 610.0 292.50056564047867 550.1486483669662 +2.665 0.11500000000000021 0.11499999999999977 300.0 160.10699547490108 234.37143597290176 +2.91 0.13000000000000034 0.1299999999999999 100.0 50.24798503422799 76.26093364233091 +3.175 0.1349999999999998 0.13500000000000023 40.0 18.52362815433305 28.6095089087527 +3.62 0.31000000000000005 0.31000000000000005 9.3 4.629279936448001 6.37712195978719 +4.7 0.77 0.7699999999999996 0.086 0.07424345681607235 0.09008178777089183 +# END YODA_SCATTER2D + + +# BEGIN YODA_SCATTER2D /REF/ATLAS_2012_I1082936/d23-x01-y01 +Path=/REF/ATLAS_2012_I1082936/d23-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +2.795 0.2450000000000001 0.2450000000000001 260.0 176.30089846623017 324.2857752045254 +3.655 0.6149999999999998 0.6149999999999998 18.0 11.151069007050399 21.004118167635603 +# END YODA_SCATTER2D + + +# BEGIN YODA_SCATTER2D /REF/ATLAS_2012_I1082936/d24-x01-y01 +Path=/REF/ATLAS_2012_I1082936/d24-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +0.09 0.01999999999999999 0.020000000000000004 4.6E8 8.661702283038825E7 9.753636985248119E7 +0.135 0.02500000000000001 0.024999999999999994 5.6E7 6692834.090278946 7165332.941322406 +0.185 0.024999999999999994 0.024999999999999994 1.1E7 1137602.1097026851 1196492.6075826795 +0.235 0.024999999999999994 0.025000000000000022 2900000.0 291792.4604920422 299669.7849300126 +0.285 0.024999999999999967 0.025000000000000022 1000000.0 97888.9677134252 105920.96109835862 +0.34 0.030000000000000027 0.02999999999999997 380000.0 39853.21447512107 40599.86581258613 +0.405 0.03500000000000003 0.034999999999999976 140000.0 14218.101139041035 15919.422100063806 +0.475 0.034999999999999976 0.03500000000000003 58000.0 6531.070420689093 7152.557084008488 +0.55 0.040000000000000036 0.039999999999999925 24000.0 3055.633590599501 2984.3968636895465 +0.63 0.040000000000000036 0.040000000000000036 11000.0 1314.4884936734898 1334.8127209462757 +0.715 0.04499999999999993 0.04500000000000004 4800.0 631.2319383554669 660.2574043507577 +0.805 0.04500000000000004 0.04499999999999993 2300.0 315.1083940487781 308.04548365460573 +0.9 0.050000000000000044 0.04999999999999993 1100.0 145.7904660806049 154.4315382297282 +1.005 0.05499999999999994 0.05500000000000016 550.0 77.2412292755624 82.6154192629923 +1.12 0.06000000000000005 0.05999999999999983 260.0 39.29098115344029 40.045064614756214 +1.245 0.06500000000000017 0.06499999999999995 130.0 20.76991574369044 20.76991574369044 +1.38 0.06999999999999984 0.07000000000000006 54.0 9.268671749501111 9.117048864627193 +1.525 0.07499999999999996 0.07500000000000018 22.0 4.101923451260396 4.32790942603932 +1.77 0.16999999999999993 0.16999999999999993 9.2 1.9613269385801033 2.0404305820095914 +2.36 0.41999999999999993 0.41999999999999993 0.92 0.32176465685342137 0.3379306650779121 +# END YODA_SCATTER2D + + +# BEGIN YODA_SCATTER2D /REF/ATLAS_2012_I1082936/d25-x01-y01 +Path=/REF/ATLAS_2012_I1082936/d25-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +0.135 0.02500000000000001 0.024999999999999994 1.4E8 2.47633090680547E7 2.718445651470708E7 +0.185 0.024999999999999994 0.024999999999999994 2.5E7 2663598.3649942423 2765932.256943398 +0.235 0.024999999999999994 0.025000000000000022 7100000.0 698721.1690653147 738256.9621073682 +0.285 0.024999999999999967 0.025000000000000022 2500000.0 274977.38543378434 282278.7850689456 +0.34 0.030000000000000027 0.02999999999999997 940000.0 101006.09464779835 99897.76752260282 +0.405 0.03500000000000003 0.034999999999999976 350000.0 37840.95697785668 38809.44504885376 +0.475 0.034999999999999976 0.03500000000000003 140000.0 15134.518029986948 16486.39548233634 +0.55 0.040000000000000036 0.039999999999999925 59000.0 7007.044281292933 7181.480387775212 +0.63 0.040000000000000036 0.040000000000000036 26000.0 2961.2892867803375 3441.170475288895 +0.715 0.04499999999999993 0.04500000000000004 12000.0 1542.268459121174 1518.557209985847 +0.805 0.04500000000000004 0.04499999999999993 5600.0 765.6451397351125 781.5361284035436 +0.9 0.050000000000000044 0.04999999999999993 2700.0 384.70973473516364 409.0477722711615 +1.005 0.05499999999999994 0.05500000000000016 1300.0 188.37892663458936 190.94517537764602 +1.12 0.06000000000000005 0.05999999999999983 640.0 89.20599083021276 92.8882339158195 +1.245 0.06500000000000017 0.06499999999999995 300.0 47.62068878124297 49.36891734684892 +1.38 0.06999999999999984 0.07000000000000006 140.0 20.957957915789407 23.08005199300902 +1.525 0.07499999999999996 0.07500000000000018 65.0 10.134581885800717 13.038131576265059 +1.68 0.07999999999999985 0.08000000000000007 30.0 5.73565166306323 5.840838980831435 +1.94 0.17999999999999994 0.18000000000000016 9.2 2.0622985622843264 2.099818125457536 +2.715 0.5949999999999998 0.5950000000000002 1.1 0.3250383669661168 0.33568027943267686 +# END YODA_SCATTER2D + + +# BEGIN YODA_SCATTER2D /REF/ATLAS_2012_I1082936/d26-x01-y01 +Path=/REF/ATLAS_2012_I1082936/d26-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +0.185 0.024999999999999994 0.024999999999999994 7.9E7 1.6636394651486242E7 1.780254088606455E7 +0.235 0.024999999999999994 0.025000000000000022 2.2E7 3131660.396658616 3316313.7426968515 +0.285 0.024999999999999967 0.025000000000000022 7500000.0 1001161.2320200978 942439.686399082 +0.34 0.030000000000000027 0.02999999999999997 2900000.0 359619.17690801754 334954.89606811246 +0.405 0.03500000000000003 0.034999999999999976 1100000.0 120015.99893347554 119697.9949706761 +0.475 0.034999999999999976 0.03500000000000003 430000.0 50348.57495500742 49330.202715983236 +0.55 0.040000000000000036 0.039999999999999925 180000.0 21048.458375852613 23747.041921047767 +0.63 0.040000000000000036 0.040000000000000036 79000.0 9638.647519232145 9372.410308986691 +0.715 0.04499999999999993 0.04500000000000004 37000.0 4729.346889370667 4533.217290181445 +0.805 0.04500000000000004 0.04499999999999993 17000.0 2170.4812830337883 2253.125384882075 +0.9 0.050000000000000044 0.04999999999999993 8400.0 1245.2982293410682 1158.4388805629756 +1.005 0.05499999999999994 0.05500000000000016 4100.0 555.8184775625941 639.9547093349654 +1.12 0.06000000000000005 0.05999999999999983 2000.0 273.6859514114672 277.20750350594767 +1.245 0.06500000000000017 0.06499999999999995 900.0 165.22048904418605 137.0986870834291 +1.38 0.06999999999999984 0.07000000000000006 460.0 81.3159787495668 75.57871393454641 +1.525 0.07499999999999996 0.07500000000000018 210.0 34.65063635779291 43.470000000000006 +1.68 0.07999999999999985 0.08000000000000007 93.0 15.833232929506217 17.404174154495237 +1.85 0.09000000000000008 0.08999999999999986 38.0 7.714935903816699 8.085878554616066 +2.03 0.08999999999999986 0.0900000000000003 21.0 4.1007574910009 4.262586186811945 +2.335 0.21499999999999986 0.21499999999999986 6.9 1.7372796925078013 1.9242960686962909 +3.08 0.5300000000000002 0.5299999999999998 0.58 0.22851190340986613 0.24547433674419 +# END YODA_SCATTER2D + + +# BEGIN YODA_SCATTER2D /REF/ATLAS_2012_I1082936/d27-x01-y01 +Path=/REF/ATLAS_2012_I1082936/d27-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +0.285 0.024999999999999967 0.025000000000000022 2.5E7 5815550.274909504 6422324.345593268 +0.34 0.030000000000000027 0.02999999999999997 9600000.0 1648155.3324853822 1863241.0472077949 +0.405 0.03500000000000003 0.034999999999999976 3600000.0 560213.673521095 606608.0118165272 +0.475 0.034999999999999976 0.03500000000000003 1400000.0 232993.81966052233 219710.8099297802 +0.55 0.040000000000000036 0.039999999999999925 590000.0 84611.01937691095 84668.5974845456 +0.63 0.040000000000000036 0.040000000000000036 260000.0 33653.6833051005 34395.74973743122 +0.715 0.04499999999999993 0.04500000000000004 120000.0 16756.65837808959 16723.540295045186 +0.805 0.04500000000000004 0.04499999999999993 57000.0 8217.889875144348 8408.417746520447 +0.9 0.050000000000000044 0.04999999999999993 28000.0 3707.33111550614 3560.0764036745054 +1.005 0.05499999999999994 0.05500000000000016 14000.0 2082.9911185600386 2082.849970593177 +1.12 0.06000000000000005 0.05999999999999983 6300.0 910.9329448428134 1089.0621056670736 +1.245 0.06500000000000017 0.06499999999999995 3100.0 430.9557517889743 466.20743237318726 +1.38 0.06999999999999984 0.07000000000000006 1400.0 230.91513592659965 258.98486442261446 +1.525 0.07499999999999996 0.07500000000000018 670.0 112.26049438693919 136.04300092250247 +1.68 0.07999999999999985 0.08000000000000007 300.0 50.05147350478306 50.46870317335289 +1.85 0.09000000000000008 0.08999999999999986 140.0 24.84753508901839 31.79449008869304 +2.03 0.08999999999999986 0.0900000000000003 60.0 12.743045161969725 14.324049706699569 +2.225 0.10499999999999998 0.10499999999999998 28.0 7.133903279411631 7.781783857188532 +2.555 0.2250000000000001 0.22499999999999964 9.8 2.05578213826271 2.2663228366673622 +3.355 0.5750000000000002 0.5750000000000002 0.62 0.26001590720569384 0.26827379223472425 +# END YODA_SCATTER2D + + +# BEGIN YODA_SCATTER2D /REF/ATLAS_2012_I1082936/d28-x01-y01 +Path=/REF/ATLAS_2012_I1082936/d28-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +0.405 0.03500000000000003 0.034999999999999976 1.3E7 4049932.9624081436 5606558.03501578 +0.475 0.034999999999999976 0.03500000000000003 4800000.0 1315909.2977861355 1588567.9588862418 +0.55 0.040000000000000036 0.039999999999999925 2000000.0 454400.7042248064 486970.2249624714 +0.63 0.040000000000000036 0.040000000000000036 890000.0 182365.32181311227 188816.3893839727 +0.715 0.04499999999999993 0.04500000000000004 390000.0 71192.89501066803 79401.16497885909 +0.805 0.04500000000000004 0.04499999999999993 190000.0 31791.94552083908 34126.56003760121 +0.9 0.050000000000000044 0.04999999999999993 94000.0 15809.335722920176 16846.992491243058 +1.005 0.05499999999999994 0.05500000000000016 43000.0 6738.9382694902315 7187.305614762739 +1.12 0.06000000000000005 0.05999999999999983 20000.0 3534.1760001448706 3417.191829558299 +1.245 0.06500000000000017 0.06499999999999995 9900.0 1660.9001956770312 1834.7614204577117 +1.38 0.06999999999999984 0.07000000000000006 4700.0 779.8460040290007 797.8795084472342 +1.525 0.07499999999999996 0.07500000000000018 2200.0 396.0549961810859 387.4186882430944 +1.68 0.07999999999999985 0.08000000000000007 1000.0 172.30786401090347 191.33739833080202 +1.85 0.09000000000000008 0.08999999999999986 460.0 84.50238813193387 85.3842280517895 +2.03 0.08999999999999986 0.0900000000000003 210.0 37.046999878532674 45.19929866712536 +2.225 0.10499999999999998 0.10499999999999998 100.0 22.98956284925836 21.25864530020669 +2.44 0.10999999999999988 0.10999999999999988 41.0 9.238292645288954 9.624613550683476 +2.795 0.2450000000000001 0.2450000000000001 11.0 2.8958636017602766 3.793852000276236 +3.655 0.6149999999999998 0.6149999999999998 0.51 0.23438093032497334 0.24375492548869654 +# END YODA_SCATTER2D + + +# BEGIN YODA_SCATTER2D /REF/ATLAS_2012_I1082936/d29-x01-y01 +Path=/REF/ATLAS_2012_I1082936/d29-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +0.715 0.04499999999999993 0.04500000000000004 1400000.0 484096.4366735206 654322.9172205419 +0.805 0.04500000000000004 0.04499999999999993 730000.0 224426.03124414958 283889.2944441548 +0.9 0.050000000000000044 0.04999999999999993 320000.0 89445.00880429271 97301.05035404293 +1.005 0.05499999999999994 0.05500000000000016 150000.0 37386.72892885924 43714.12815097655 +1.12 0.06000000000000005 0.05999999999999983 77000.0 17375.57506962 19944.48643109168 +1.245 0.06500000000000017 0.06499999999999995 36000.0 7827.330579450441 9120.015789460016 +1.38 0.06999999999999984 0.07000000000000006 16000.0 3453.999420961156 3840.1333310185987 +1.525 0.07499999999999996 0.07500000000000018 7800.0 1613.5634353814542 1735.8110957128947 +1.68 0.07999999999999985 0.08000000000000007 3800.0 736.0630407784377 827.4669056826382 +1.85 0.09000000000000008 0.08999999999999986 1600.0 332.0761358483924 348.8953997977044 +2.03 0.08999999999999986 0.0900000000000003 700.0 160.52604150105986 171.68418680822066 +2.225 0.10499999999999998 0.10499999999999998 320.0 69.67040117582215 79.67614448503392 +2.44 0.10999999999999988 0.10999999999999988 140.0 36.47557538956719 36.22214239936671 +2.665 0.11500000000000021 0.11499999999999977 58.0 17.203820738429005 17.92500298465805 +3.045 0.2650000000000001 0.2650000000000001 12.0 3.3579636686539653 3.7677898030543053 +3.975 0.665 0.6649999999999996 0.49 0.2499120095153492 0.2718594894426163 +# END YODA_SCATTER2D + + +# BEGIN YODA_SCATTER2D /REF/ATLAS_2012_I1082936/d30-x01-y01 +Path=/REF/ATLAS_2012_I1082936/d30-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +1.245 0.06500000000000017 0.06499999999999995 130000.0 53705.42151403339 72373.81501620596 +1.38 0.06999999999999984 0.07000000000000006 54000.0 18805.1074976986 24580.44173728373 +1.525 0.07499999999999996 0.07500000000000018 24000.0 7847.412822070723 10127.118445046448 +1.68 0.07999999999999985 0.08000000000000007 12000.0 3793.177032515092 4525.352582948648 +1.85 0.09000000000000008 0.08999999999999986 5600.0 1682.4342364562128 2037.0764934091212 +2.03 0.08999999999999986 0.0900000000000003 2400.0 711.7001615849191 814.7425605674468 +2.225 0.10499999999999998 0.10499999999999998 1100.0 305.1345277086813 352.041247583291 +2.44 0.10999999999999988 0.10999999999999988 450.0 119.48665197418497 139.2704563071436 +2.665 0.11500000000000021 0.11499999999999977 190.0 58.34547026119508 57.78905519213824 +2.91 0.13000000000000034 0.1299999999999999 73.0 23.595379759605482 24.389211508369844 +3.325 0.28500000000000014 0.2849999999999997 19.0 7.07170198749919 8.099729193003924 +4.325 0.7150000000000003 0.7149999999999999 0.89 0.4961931588605389 0.5548955509823448 +# END YODA_SCATTER2D + + +# BEGIN YODA_SCATTER2D /REF/ATLAS_2012_I1082936/d31-x01-y01 +Path=/REF/ATLAS_2012_I1082936/d31-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +1.85 0.09000000000000008 0.08999999999999986 18000.0 9951.086372853972 17431.120445915116 +2.03 0.08999999999999986 0.0900000000000003 8000.0 3158.2070863070394 6514.6186381092175 +2.225 0.10499999999999998 0.10499999999999998 3400.0 1207.6702364470195 2063.057691873885 +2.44 0.10999999999999988 0.10999999999999988 1200.0 838.3303406175872 566.1774986698077 +2.665 0.11500000000000021 0.11499999999999977 480.0 274.2518550529786 230.70230167902528 +2.91 0.13000000000000034 0.1299999999999999 200.0 77.22408950580122 107.43593439813328 +3.175 0.1349999999999998 0.13500000000000023 80.0 30.485458828759654 43.2403515249356 +3.62 0.31000000000000005 0.31000000000000005 13.0 5.617038098499957 6.84404010800638 +4.7 0.77 0.7699999999999996 0.17 0.11395910406808225 0.13006833204127743 +# END YODA_SCATTER2D + + +# BEGIN YODA_SCATTER2D /REF/ATLAS_2012_I1082936/d32-x01-y01 +Path=/REF/ATLAS_2012_I1082936/d32-x01-y01 +Type=Scatter2D +# xval xerr- xerr+ yval yerr- yerr+ +2.795 0.2450000000000001 0.2450000000000001 430.0 271.3163704976167 463.93512843931103 +3.655 0.6149999999999998 0.6149999999999998 28.0 14.950164681367227 30.278307218204922 +# END YODA_SCATTER2D + + diff --git a/v2.6/generators/sherpa/ATLAS_2012_I1082936/basic.str b/v2.6/generators/sherpa/ATLAS_2012_I1082936/basic.str new file mode 100644 index 0000000000000000000000000000000000000000..77ecc708be7257bc9432d36f2c3ac1cfb5721fc8 --- /dev/null +++ b/v2.6/generators/sherpa/ATLAS_2012_I1082936/basic.str @@ -0,0 +1,481 @@ +# -*-sh-*- +# ==================================================================== # +# +# A steering file for creating a fastNLO table (with MCGrid) +# +# ==================================================================== # + +# ==================================================================== # +# +# Scenario specific settings +# +# ==================================================================== # + +# -------------------------------------------------------------------- # +# Description of scenario +# (Write each line of description in quotation marks) +# -------------------------------------------------------------------- # +# ScenarioName Name # Set by MCgrid to Rivet histogram name +#ScenarioDescription { +# "d2sigma-dijet_dm12_dy*_[pb_TeV]" +# "ATLAS_Collaboration" +# "Dijet_Mass" +# "anti-kT_R=0.6" +# "ATLAS-STDM-2011-02, arXiv:1112.6297, Phys. Rev. D 86 (2012) 014022." +# "RIVET_ID=ATLAS_2012_I1082936/d02-x01-Y01,SPIRES_ID=9320911,INSPIRE_RECORD=1082936" +# "THEORY_LABEL=NLOJet++" +# "provided by:" +# "fastNLO_2.3.1" +# "If you use this table, please cite:" +# " D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, arXiv:1109.1310" +#} +PublicationUnits 12 # Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) +UnitsOfCoefficients 12 # Unit of X section coeffients as passed to fastNLO (negative power of 10) + +# -------------------------------------------------------------------- # +# Global scenario settings +# -------------------------------------------------------------------- # +# Defined by Rivet analyis/MCgrid, nothing to be done! + +# -------------------------------------------------------------------- # +# Observable definition, dimensioning, and normalization +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# MCgrid/Rivet always book one grid per histogram --> single differential binning. +# Most things defined by Rivet analyis/MCgrid. +DimensionLabels { # Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop") + "Mjj_[TeV]" +} +BinSizeFactor 1. # Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| +#BinSize { x1 x2 x3 ... } # If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization + # + # If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0' + # and set 'CalculateBinSize' 'true' for each dimension. +ScaleDescriptionScale1 "pT_max*exp(0.3*y_star)_[GeV]" # This defines the scale to be used (Note: The 1st scale must always be in units of [GeV]!) + +# -------------------------------------------------------------------- # +# Observable binning +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +# Defined by Rivet analyis/MCgrid, nothing to be done! + +# ==================================================================== # +# +# Process specific and therefore at least partially theory-code +# dependent settings +# +# ==================================================================== # +# Defined by Rivet analyis/MCgrid, nothing to be done. +# BUT: See PDF linear combinations settings below! + +# ==================================================================== # +# +# General fastNLO settings +# +# ==================================================================== # +# Most things defined by Rivet analyis/MCgrid. +# GlobalVerbosity WARNING # Global output verbosity of fastNLO toolkit, def.=WARNING, + # (and of user scenario code if implemented). + # Possible values are: DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT +# ScaleVariationFactors { # Factorization scale variations (only needed for fixed-scale tables) +# 0.5 1.0 2.0 # List of scale factors must include factor '1' +# } # Scale factors will be ordered according to fastNLO convention: (1, min, ... , max) +IgnoreWarmupBinningCheck false # Ignore crosscheck of binning between steering and warmup + # Avoids problems with precision of bin borders e.g. in the case of Pi + +# ==================================================================== # +# +# Specific fastNLO settings (normally do not need to be changed) +# Only change when you know what you are doing ...! +# +# ==================================================================== # +# Most things defined by Rivet analyis/MCgrid. +# X_NNodes 15 # No. of support nodes for x-interpolation +# Mu1_NNodes 6 # No. of support nodes for scale interpolation + +# -------------------------------------------------------------------- # +# PDF linear combination settings +# -------------------------------------------------------------------- # +# Defined for Rivet analyis/MCgrid without subprocess matching! +PDF1 2212 +PDF2 2212 + +NSubProcessesLO 121 +NSubProcessesNLO 121 +NSubProcessesNNLO 121 +IPDFdef3LO 121 +IPDFdef3NLO 121 +IPDFdef3NNLO 121 + +PartonCombinationsLO {{ + # one line here! + 0 -5 -5 + 1 -5 -4 + 2 -5 -3 + 3 -5 -2 + 4 -5 -1 + 5 -5 0 + 6 -5 1 + 7 -5 2 + 8 -5 3 + 9 -5 4 + 10 -5 5 + 11 -4 -5 + 12 -4 -4 + 13 -4 -3 + 14 -4 -2 + 15 -4 -1 + 16 -4 0 + 17 -4 1 + 18 -4 2 + 19 -4 3 + 20 -4 4 + 21 -4 5 + 22 -3 -5 + 23 -3 -4 + 24 -3 -3 + 25 -3 -2 + 26 -3 -1 + 27 -3 0 + 28 -3 1 + 29 -3 2 + 30 -3 3 + 31 -3 4 + 32 -3 5 + 33 -2 -5 + 34 -2 -4 + 35 -2 -3 + 36 -2 -2 + 37 -2 -1 + 38 -2 0 + 39 -2 1 + 40 -2 2 + 41 -2 3 + 42 -2 4 + 43 -2 5 + 44 -1 -5 + 45 -1 -4 + 46 -1 -3 + 47 -1 -2 + 48 -1 -1 + 49 -1 0 + 50 -1 1 + 51 -1 2 + 52 -1 3 + 53 -1 4 + 54 -1 5 + 55 0 -5 + 56 0 -4 + 57 0 -3 + 58 0 -2 + 59 0 -1 + 60 0 0 + 61 0 1 + 62 0 2 + 63 0 3 + 64 0 4 + 65 0 5 + 66 1 -5 + 67 1 -4 + 68 1 -3 + 69 1 -2 + 70 1 -1 + 71 1 0 + 72 1 1 + 73 1 2 + 74 1 3 + 75 1 4 + 76 1 5 + 77 2 -5 + 78 2 -4 + 79 2 -3 + 80 2 -2 + 81 2 -1 + 82 2 0 + 83 2 1 + 84 2 2 + 85 2 3 + 86 2 4 + 87 2 5 + 88 3 -5 + 89 3 -4 + 90 3 -3 + 91 3 -2 + 92 3 -1 + 93 3 0 + 94 3 1 + 95 3 2 + 96 3 3 + 97 3 4 + 98 3 5 + 99 4 -5 +100 4 -4 +101 4 -3 +102 4 -2 +103 4 -1 +104 4 0 +105 4 1 +106 4 2 +107 4 3 +108 4 4 +109 4 5 +110 5 -5 +111 5 -4 +112 5 -3 +113 5 -2 +114 5 -1 +115 5 0 +116 5 1 +117 5 2 +118 5 3 +119 5 4 +120 5 5 +}} + +PartonCombinationsNLO {{ + # one line here! + 0 -5 -5 + 1 -5 -4 + 2 -5 -3 + 3 -5 -2 + 4 -5 -1 + 5 -5 0 + 6 -5 1 + 7 -5 2 + 8 -5 3 + 9 -5 4 + 10 -5 5 + 11 -4 -5 + 12 -4 -4 + 13 -4 -3 + 14 -4 -2 + 15 -4 -1 + 16 -4 0 + 17 -4 1 + 18 -4 2 + 19 -4 3 + 20 -4 4 + 21 -4 5 + 22 -3 -5 + 23 -3 -4 + 24 -3 -3 + 25 -3 -2 + 26 -3 -1 + 27 -3 0 + 28 -3 1 + 29 -3 2 + 30 -3 3 + 31 -3 4 + 32 -3 5 + 33 -2 -5 + 34 -2 -4 + 35 -2 -3 + 36 -2 -2 + 37 -2 -1 + 38 -2 0 + 39 -2 1 + 40 -2 2 + 41 -2 3 + 42 -2 4 + 43 -2 5 + 44 -1 -5 + 45 -1 -4 + 46 -1 -3 + 47 -1 -2 + 48 -1 -1 + 49 -1 0 + 50 -1 1 + 51 -1 2 + 52 -1 3 + 53 -1 4 + 54 -1 5 + 55 0 -5 + 56 0 -4 + 57 0 -3 + 58 0 -2 + 59 0 -1 + 60 0 0 + 61 0 1 + 62 0 2 + 63 0 3 + 64 0 4 + 65 0 5 + 66 1 -5 + 67 1 -4 + 68 1 -3 + 69 1 -2 + 70 1 -1 + 71 1 0 + 72 1 1 + 73 1 2 + 74 1 3 + 75 1 4 + 76 1 5 + 77 2 -5 + 78 2 -4 + 79 2 -3 + 80 2 -2 + 81 2 -1 + 82 2 0 + 83 2 1 + 84 2 2 + 85 2 3 + 86 2 4 + 87 2 5 + 88 3 -5 + 89 3 -4 + 90 3 -3 + 91 3 -2 + 92 3 -1 + 93 3 0 + 94 3 1 + 95 3 2 + 96 3 3 + 97 3 4 + 98 3 5 + 99 4 -5 +100 4 -4 +101 4 -3 +102 4 -2 +103 4 -1 +104 4 0 +105 4 1 +106 4 2 +107 4 3 +108 4 4 +109 4 5 +110 5 -5 +111 5 -4 +112 5 -3 +113 5 -2 +114 5 -1 +115 5 0 +116 5 1 +117 5 2 +118 5 3 +119 5 4 +120 5 5 +}} + +PartonCombinationsNNLO {{ + # one line here! + 0 -5 -5 + 1 -5 -4 + 2 -5 -3 + 3 -5 -2 + 4 -5 -1 + 5 -5 0 + 6 -5 1 + 7 -5 2 + 8 -5 3 + 9 -5 4 + 10 -5 5 + 11 -4 -5 + 12 -4 -4 + 13 -4 -3 + 14 -4 -2 + 15 -4 -1 + 16 -4 0 + 17 -4 1 + 18 -4 2 + 19 -4 3 + 20 -4 4 + 21 -4 5 + 22 -3 -5 + 23 -3 -4 + 24 -3 -3 + 25 -3 -2 + 26 -3 -1 + 27 -3 0 + 28 -3 1 + 29 -3 2 + 30 -3 3 + 31 -3 4 + 32 -3 5 + 33 -2 -5 + 34 -2 -4 + 35 -2 -3 + 36 -2 -2 + 37 -2 -1 + 38 -2 0 + 39 -2 1 + 40 -2 2 + 41 -2 3 + 42 -2 4 + 43 -2 5 + 44 -1 -5 + 45 -1 -4 + 46 -1 -3 + 47 -1 -2 + 48 -1 -1 + 49 -1 0 + 50 -1 1 + 51 -1 2 + 52 -1 3 + 53 -1 4 + 54 -1 5 + 55 0 -5 + 56 0 -4 + 57 0 -3 + 58 0 -2 + 59 0 -1 + 60 0 0 + 61 0 1 + 62 0 2 + 63 0 3 + 64 0 4 + 65 0 5 + 66 1 -5 + 67 1 -4 + 68 1 -3 + 69 1 -2 + 70 1 -1 + 71 1 0 + 72 1 1 + 73 1 2 + 74 1 3 + 75 1 4 + 76 1 5 + 77 2 -5 + 78 2 -4 + 79 2 -3 + 80 2 -2 + 81 2 -1 + 82 2 0 + 83 2 1 + 84 2 2 + 85 2 3 + 86 2 4 + 87 2 5 + 88 3 -5 + 89 3 -4 + 90 3 -3 + 91 3 -2 + 92 3 -1 + 93 3 0 + 94 3 1 + 95 3 2 + 96 3 3 + 97 3 4 + 98 3 5 + 99 4 -5 +100 4 -4 +101 4 -3 +102 4 -2 +103 4 -1 +104 4 0 +105 4 1 +106 4 2 +107 4 3 +108 4 4 +109 4 5 +110 5 -5 +111 5 -4 +112 5 -3 +113 5 -2 +114 5 -1 +115 5 0 +116 5 1 +117 5 2 +118 5 3 +119 5 4 +120 5 5 +}} diff --git a/v2.6/generators/sherpa/ATLAS_2012_I1082936/mcgrid/MCgrid_ATLAS_2012_I1082936/phasespace/d04-x01-y01.txt b/v2.6/generators/sherpa/ATLAS_2012_I1082936/mcgrid/MCgrid_ATLAS_2012_I1082936/phasespace/d04-x01-y01.txt new file mode 100644 index 0000000000000000000000000000000000000000..2769fcec2d38836fa34c28c1edf902cee6bcbf06 --- /dev/null +++ b/v2.6/generators/sherpa/ATLAS_2012_I1082936/mcgrid/MCgrid_ATLAS_2012_I1082936/phasespace/d04-x01-y01.txt @@ -0,0 +1,71 @@ +# --- Use emacs in sh mode -*-sh-*- # +# This is a automatically generated file by fastNLO and holds the values of the warmup run. +# The values are valid for the scenario d04-x01-y01 +# and if calculated with the steerfile: mcgrid/MCgrid_ATLAS_2012_I1082936/phasespace/d04-x01-y01.txt +# but only if no serious changes have been performed since its creation. +# +# Delete this file, if you want fastNLO to calculate a new one. +# +# This file has been calculated using 7656582 contributions. +# ( Mind: contributions != events. And contributions are not necessarily in phase space region. +# Please check by eye for reasonability of the values. + +Warmup.OrderInAlphasOfWarmupRunWas 2 +Warmup.CheckScaleLimitsAgainstBins true +Warmup.ScaleDescriptionScale1 "pT_max*exp(0.3*y_star)_[GeV]" +Warmup.DifferentialDimension 1 +Warmup.DimensionLabels { + "Mjj_[TeV]" +} +Warmup.DimensionIsDifferential { + "2" +} + +Warmup.Values {{ + ObsBin x_min x_max pT_max*exp(0.3*y_star)_[GeV]_min pT_max*exp(0.3*y_star)_[GeV]_max + 0 9.65e-05 1.00e+00 34.67 151.46 + 1 1.98e-04 1.00e+00 54.38 270.01 + 2 4.08e-04 1.00e+00 79.83 152.94 + 3 7.21e-04 9.99e-01 104.26 190.00 + 4 1.10e-03 1.00e+00 129.42 224.54 + 5 1.56e-03 9.99e-01 154.76 267.78 + 6 2.31e-03 9.99e-01 185.03 317.53 + 7 3.27e-03 9.99e-01 219.97 367.73 + 8 4.11e-03 1.00e+00 252.79 421.75 + 9 5.57e-03 9.99e-01 292.72 472.07 + 10 7.31e-03 1.00e+00 334.58 538.00 + 11 9.64e-03 1.00e+00 378.71 615.94 + 12 1.17e-02 1.00e+00 426.73 663.79 + 13 1.46e-02 9.99e-01 475.54 747.26 + 14 2.16e-02 1.00e+00 532.37 852.57 + 15 2.40e-02 1.00e+00 590.00 913.28 + 16 3.11e-02 1.00e+00 657.33 1028.87 + 17 3.35e-02 9.98e-01 725.68 1132.16 + 18 4.79e-02 1.00e+00 805.17 1400.00 + 19 7.47e-02 1.00e+00 970.00 1941.45 +}} + + +Warmup.Binning {{ + ObsBin Mjj_[TeV]_Lo Mjj_[TeV]_Up BinSize + 0 0.0700000 0.110000 0.0400000 + 1 0.110000 0.160000 0.0500000 + 2 0.160000 0.210000 0.0500000 + 3 0.210000 0.260000 0.0500000 + 4 0.260000 0.310000 0.0500000 + 5 0.310000 0.370000 0.0600000 + 6 0.370000 0.440000 0.0700000 + 7 0.440000 0.510000 0.0700000 + 8 0.510000 0.590000 0.0800000 + 9 0.590000 0.670000 0.0800000 + 10 0.670000 0.760000 0.0900000 + 11 0.760000 0.850000 0.0900000 + 12 0.850000 0.950000 0.100000 + 13 0.950000 1.06000 0.110000 + 14 1.06000 1.18000 0.120000 + 15 1.18000 1.31000 0.130000 + 16 1.31000 1.45000 0.140000 + 17 1.45000 1.60000 0.150000 + 18 1.60000 1.94000 0.340000 + 19 1.94000 2.78000 0.840000 +}} diff --git a/v2.6/generators/sherpa/ATLAS_2012_I1082936/mcgrid/basic.str.evtcount b/v2.6/generators/sherpa/ATLAS_2012_I1082936/mcgrid/basic.str.evtcount new file mode 100644 index 0000000000000000000000000000000000000000..1dc37384c045ef8449d90a6fe8b8a7bb2b285b9b --- /dev/null +++ b/v2.6/generators/sherpa/ATLAS_2012_I1082936/mcgrid/basic.str.evtcount @@ -0,0 +1,233 @@ +basic.str +121 +SubProc: 0 Pairs: 1 SubEvents: 306 +SubProc: 1 Pairs: 1 SubEvents: 445 +SubProc: 2 Pairs: 1 SubEvents: 698 +SubProc: 3 Pairs: 1 SubEvents: 783 +SubProc: 4 Pairs: 1 SubEvents: 996 +SubProc: 5 Pairs: 1 SubEvents: 43274 +SubProc: 6 Pairs: 1 SubEvents: 3559 +SubProc: 7 Pairs: 1 SubEvents: 7372 +SubProc: 8 Pairs: 1 SubEvents: 837 +SubProc: 9 Pairs: 1 SubEvents: 497 +SubProc: 10 Pairs: 1 SubEvents: 421 +SubProc: 11 Pairs: 1 SubEvents: 436 +SubProc: 12 Pairs: 1 SubEvents: 793 +SubProc: 13 Pairs: 1 SubEvents: 1554 +SubProc: 14 Pairs: 1 SubEvents: 1652 +SubProc: 15 Pairs: 1 SubEvents: 1837 +SubProc: 16 Pairs: 1 SubEvents: 84898 +SubProc: 17 Pairs: 1 SubEvents: 5747 +SubProc: 18 Pairs: 1 SubEvents: 12572 +SubProc: 19 Pairs: 1 SubEvents: 1527 +SubProc: 20 Pairs: 1 SubEvents: 1221 +SubProc: 21 Pairs: 1 SubEvents: 562 +SubProc: 22 Pairs: 1 SubEvents: 612 +SubProc: 23 Pairs: 1 SubEvents: 1352 +SubProc: 24 Pairs: 1 SubEvents: 2398 +SubProc: 25 Pairs: 1 SubEvents: 2919 +SubProc: 26 Pairs: 1 SubEvents: 3329 +SubProc: 27 Pairs: 1 SubEvents: 160239 +SubProc: 28 Pairs: 1 SubEvents: 8675 +SubProc: 29 Pairs: 1 SubEvents: 18224 +SubProc: 30 Pairs: 1 SubEvents: 3505 +SubProc: 31 Pairs: 1 SubEvents: 1759 +SubProc: 32 Pairs: 1 SubEvents: 854 +SubProc: 33 Pairs: 1 SubEvents: 894 +SubProc: 34 Pairs: 1 SubEvents: 1786 +SubProc: 35 Pairs: 1 SubEvents: 2460 +SubProc: 36 Pairs: 1 SubEvents: 3402 +SubProc: 37 Pairs: 1 SubEvents: 4270 +SubProc: 38 Pairs: 1 SubEvents: 202092 +SubProc: 39 Pairs: 1 SubEvents: 9736 +SubProc: 40 Pairs: 1 SubEvents: 61133 +SubProc: 41 Pairs: 1 SubEvents: 3146 +SubProc: 42 Pairs: 1 SubEvents: 2252 +SubProc: 43 Pairs: 1 SubEvents: 1186 +SubProc: 44 Pairs: 1 SubEvents: 980 +SubProc: 45 Pairs: 1 SubEvents: 1682 +SubProc: 46 Pairs: 1 SubEvents: 2992 +SubProc: 47 Pairs: 1 SubEvents: 3260 +SubProc: 48 Pairs: 1 SubEvents: 3957 +SubProc: 49 Pairs: 1 SubEvents: 248434 +SubProc: 50 Pairs: 1 SubEvents: 29958 +SubProc: 51 Pairs: 1 SubEvents: 21934 +SubProc: 52 Pairs: 1 SubEvents: 4167 +SubProc: 53 Pairs: 1 SubEvents: 2852 +SubProc: 54 Pairs: 1 SubEvents: 1742 +SubProc: 55 Pairs: 1 SubEvents: 29232 +SubProc: 56 Pairs: 1 SubEvents: 50178 +SubProc: 57 Pairs: 1 SubEvents: 81839 +SubProc: 58 Pairs: 1 SubEvents: 104146 +SubProc: 59 Pairs: 1 SubEvents: 121860 +SubProc: 60 Pairs: 1 SubEvents: 2837279 +SubProc: 61 Pairs: 1 SubEvents: 363375 +SubProc: 62 Pairs: 1 SubEvents: 725685 +SubProc: 63 Pairs: 1 SubEvents: 84715 +SubProc: 64 Pairs: 1 SubEvents: 51937 +SubProc: 65 Pairs: 1 SubEvents: 28816 +SubProc: 66 Pairs: 1 SubEvents: 3856 +SubProc: 67 Pairs: 1 SubEvents: 6807 +SubProc: 68 Pairs: 1 SubEvents: 10007 +SubProc: 69 Pairs: 1 SubEvents: 10701 +SubProc: 70 Pairs: 1 SubEvents: 18186 +SubProc: 71 Pairs: 1 SubEvents: 442792 +SubProc: 72 Pairs: 1 SubEvents: 55011 +SubProc: 73 Pairs: 1 SubEvents: 159148 +SubProc: 74 Pairs: 1 SubEvents: 15460 +SubProc: 75 Pairs: 1 SubEvents: 10364 +SubProc: 76 Pairs: 1 SubEvents: 6226 +SubProc: 77 Pairs: 1 SubEvents: 7847 +SubProc: 78 Pairs: 1 SubEvents: 13809 +SubProc: 79 Pairs: 1 SubEvents: 20228 +SubProc: 80 Pairs: 1 SubEvents: 34838 +SubProc: 81 Pairs: 1 SubEvents: 23624 +SubProc: 82 Pairs: 1 SubEvents: 756733 +SubProc: 83 Pairs: 1 SubEvents: 69628 +SubProc: 84 Pairs: 1 SubEvents: 119118 +SubProc: 85 Pairs: 1 SubEvents: 30154 +SubProc: 86 Pairs: 1 SubEvents: 19101 +SubProc: 87 Pairs: 1 SubEvents: 10900 +SubProc: 88 Pairs: 1 SubEvents: 941 +SubProc: 89 Pairs: 1 SubEvents: 1791 +SubProc: 90 Pairs: 1 SubEvents: 3771 +SubProc: 91 Pairs: 1 SubEvents: 3368 +SubProc: 92 Pairs: 1 SubEvents: 3759 +SubProc: 93 Pairs: 1 SubEvents: 110777 +SubProc: 94 Pairs: 1 SubEvents: 14191 +SubProc: 95 Pairs: 1 SubEvents: 31935 +SubProc: 96 Pairs: 1 SubEvents: 6213 +SubProc: 97 Pairs: 1 SubEvents: 2306 +SubProc: 98 Pairs: 1 SubEvents: 1505 +SubProc: 99 Pairs: 1 SubEvents: 592 +SubProc: 100 Pairs: 1 SubEvents: 1459 +SubProc: 101 Pairs: 1 SubEvents: 1661 +SubProc: 102 Pairs: 1 SubEvents: 2417 +SubProc: 103 Pairs: 1 SubEvents: 2658 +SubProc: 104 Pairs: 1 SubEvents: 63015 +SubProc: 105 Pairs: 1 SubEvents: 9069 +SubProc: 106 Pairs: 1 SubEvents: 19827 +SubProc: 107 Pairs: 1 SubEvents: 1583 +SubProc: 108 Pairs: 1 SubEvents: 2030 +SubProc: 109 Pairs: 1 SubEvents: 659 +SubProc: 110 Pairs: 1 SubEvents: 441 +SubProc: 111 Pairs: 1 SubEvents: 665 +SubProc: 112 Pairs: 1 SubEvents: 967 +SubProc: 113 Pairs: 1 SubEvents: 1380 +SubProc: 114 Pairs: 1 SubEvents: 1469 +SubProc: 115 Pairs: 1 SubEvents: 33038 +SubProc: 116 Pairs: 1 SubEvents: 5334 +SubProc: 117 Pairs: 1 SubEvents: 11703 +SubProc: 118 Pairs: 1 SubEvents: 895 +SubProc: 119 Pairs: 1 SubEvents: 602 +SubProc: 120 Pairs: 1 SubEvents: 793 +Subproc: 0 306 +Subproc: 1 445 +Subproc: 2 698 +Subproc: 3 783 +Subproc: 4 996 +Subproc: 5 43274 +Subproc: 6 3559 +Subproc: 7 7372 +Subproc: 8 837 +Subproc: 9 497 +Subproc: 10 421 +Subproc: 11 436 +Subproc: 12 793 +Subproc: 13 1554 +Subproc: 14 1652 +Subproc: 15 1837 +Subproc: 16 84898 +Subproc: 17 5747 +Subproc: 18 12572 +Subproc: 19 1527 +Subproc: 20 1221 +Subproc: 21 562 +Subproc: 22 612 +Subproc: 23 1352 +Subproc: 24 2398 +Subproc: 25 2919 +Subproc: 26 3329 +Subproc: 27 160239 +Subproc: 28 8675 +Subproc: 29 18224 +Subproc: 30 3505 +Subproc: 31 1759 +Subproc: 32 854 +Subproc: 33 894 +Subproc: 34 1786 +Subproc: 35 2460 +Subproc: 36 3402 +Subproc: 37 4270 +Subproc: 38 202092 +Subproc: 39 9736 +Subproc: 40 61133 +Subproc: 41 3146 +Subproc: 42 2252 +Subproc: 43 1186 +Subproc: 44 980 +Subproc: 45 1682 +Subproc: 46 2992 +Subproc: 47 3260 +Subproc: 48 3957 +Subproc: 49 248434 +Subproc: 50 29958 +Subproc: 51 21934 +Subproc: 52 4167 +Subproc: 53 2852 +Subproc: 54 1742 +Subproc: 55 29232 +Subproc: 56 50178 +Subproc: 57 81839 +Subproc: 58 104146 +Subproc: 59 121860 +Subproc: 60 2837279 +Subproc: 61 363375 +Subproc: 62 725685 +Subproc: 63 84715 +Subproc: 64 51937 +Subproc: 65 28816 +Subproc: 66 3856 +Subproc: 67 6807 +Subproc: 68 10007 +Subproc: 69 10701 +Subproc: 70 18186 +Subproc: 71 442792 +Subproc: 72 55011 +Subproc: 73 159148 +Subproc: 74 15460 +Subproc: 75 10364 +SSubprSubproc: 76 62Subproc: 77 8343 +Subproc: 78 14382 +Subproc: 79 19834 +Subproc: 80 33857 +Subproc: 81 24108 +SubprSubproc: 82 7586Subproc: 83 68973 +SubprSubproc: 84 1163SubprSubproc: 85 302SubprSubproc: 86 194SubprSubproc: 87 114SubprSubproc: 88 84SubpSubproc: 89 162SubpSubproc: 90 351SubpSubproc: 91 299SubpSubproc: 92 414SubpSubproc: 93 10954Subproc: 94 14613 +Subproc: 95 31491 +Subproc: 96 5843 +Subproc: 97 2247 +Subproc: 98 1309 +Subproc: 99 622 +Subproc: 100 1486 +Subproc: 101 1774 +Subproc: 102 2163 +Subproc: 103 2746 +Subproc: 104 62080 +Subproc: 105 9563 +Subproc: 106 20141 +Subproc: 107 1788 +Subproc: 108 2052 +Subproc: 109 681 +Subproc: 110 429 +Subproc: 111 553 +Subproc: 112 872 +Subproc: 113 1162 +Subproc: 114 1459 +Subproc: 115 33453 +Subproc: 116 5792 +Subproc: 117 11315 +Subproc: 118 838 +Subproc: 119 604 +Subproc: 120 649 +643 diff --git a/v2.6/generators/sherpa/ATLAS_2012_I1082936/run_steps.csh b/v2.6/generators/sherpa/ATLAS_2012_I1082936/run_steps.csh new file mode 100644 index 0000000000000000000000000000000000000000..ddf09c5be7e14276a0dc7e65b57bd24a18e59ae7 --- /dev/null +++ b/v2.6/generators/sherpa/ATLAS_2012_I1082936/run_steps.csh @@ -0,0 +1,7 @@ +Sherpa -f Run_step1_proc.dat >&! Run_step1_proc.log& +rm -rf Results.db Results.db.bak Sherpa_References.tex Analysis.yoda mcgrid +mpiexec -np 4 Sherpa -f Run_step2_inte.dat >&! Run_step2_inte.log& +rm -rf Sherpa_References.tex Analysis*.yoda mcgrid +mpiexec -np 4 Sherpa -f Run_step3_warm.dat > & ! Run_step3_warm.log & +rm -rf Sherpa_References.tex Analysis*.yoda +mpiexec -np 4 Sherpa -f Run_step4_prod.dat -e 16M -R '26763 3746923 10826382 7552378' >&! Run_step4_prod_16M.log diff --git a/v2.6/toolkit/.gitignore b/v2.6/toolkit/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..1397c5e02c93a2d8047c8f693e803aa9707200cd --- /dev/null +++ b/v2.6/toolkit/.gitignore @@ -0,0 +1,29 @@ +# Files to be usually ignored in projects managed with autotools +INSTALL +GITREV +compile +config.guess +config.h +config.h.in +config.log +config.status +config.sub +configure +depcomp +install-sh +libtool +ltmain.sh +missing +py-compile +stamp-h1 +test-driver +Makefile +doc/doxygen +# These m4 macros normally should be reinstalled from the development machine +# using autoreconf -i +aclocal.m4 +m4/libtool.m4 +m4/ltoptions.m4 +m4/ltsugar.m4 +m4/ltversion.m4 +m4/lt~obsolete.m4 diff --git a/v2.6/toolkit/AUTHORS b/v2.6/toolkit/AUTHORS new file mode 100644 index 0000000000000000000000000000000000000000..8d19150ed36b6a2e9dba4884a1142373d31e3cda --- /dev/null +++ b/v2.6/toolkit/AUTHORS @@ -0,0 +1,13 @@ +fastNLO is written by +===================== +Daniel Britzger [daniel.britzger@desy.de], +Klaus Rabbertz [klaus.rabbertz@cern.ch], +Markus Wobisch [wobisch@latech.edu] + +Current contributors are: +------------------------- +Johannes Gäßler: [johannes.gaessler@cern.ch] + +Former contributors are: +------------------------ +Thomas Kluge, Bettina Schillinger, Georg Sieber, Jakob Stark, Fred Stober diff --git a/v2.6/toolkit/COPYING b/v2.6/toolkit/COPYING new file mode 100644 index 0000000000000000000000000000000000000000..94a9ed024d3859793618152ea559a168bbcbb5e2 --- /dev/null +++ b/v2.6/toolkit/COPYING @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + <program> Copyright (C) <year> <name of author> + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +<http://www.gnu.org/licenses/>. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +<http://www.gnu.org/philosophy/why-not-lgpl.html>. diff --git a/v2.6/toolkit/ChangeLog b/v2.6/toolkit/ChangeLog new file mode 100644 index 0000000000000000000000000000000000000000..3f5c18c77452bc99c065845e1259a0f17643418e --- /dev/null +++ b/v2.6/toolkit/ChangeLog @@ -0,0 +1,3983 @@ +2024-06-13 Public release of the fastNLO_toolkit package version 2.5.1, tag 3034 + ===================================================================== + +2024-06-13 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + Fix a missing LDFLAGS setting in case of HOPPET use + Fix a few warnings for unused variables in conditional compiling of fnlo-tk-rootout + +2024-06-12 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + Adapt hoppet test to new default a_s = 0.1180 instead of 0.1181 + +2024-06-12 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + Update NEWS, ChangeLog + +2024-06-12 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.5/toolkit/configure.ac: Require full C++17 functionality also + for nlojet++ interface + +2024-06-12 Public release of the fastNLO_toolkit package version 2.5.1, tag 3028 + ===================================================================== + +2024-06-12 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.5/toolkit/ChangeLog, v2.5/toolkit/NEWS: Update NEWS, ChangeLog + +2024-05-31 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.5/toolkit/fastnlotoolkit/fastNLOReader.cc, + v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOConstants.h.in + , v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOReader.h, + v2.5/toolkit/src/fnlo-tk-yodaout.cc: Implement 30 scale variations + for ratio + +2024-05-22 Johannes Gäßler <johannesg@5d6.de> + + * v2.5/toolkit/fastnlotoolkit/fastNLOInterpolBase.cc: Fix sqrtlog10 + being hardcoded for NodeDensity + +2024-05-10 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.5/toolkit/src/fnlo-py-print.py: Remove requirement of recent + env executable to ensure C++/Python unbuffered output; add env. var. + to environment instead + +2024-05-10 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.5/toolkit/data/check/fnl1014_I902309_2-2_cpptest1.log, + v2.5/toolkit/data/check/fnl1014_I902309_2-2_rundecastest1.log, + v2.5/toolkit/src/fnlo-tk-cppread.cc, + v2.5/toolkit/src/fnlo-tk-rootout.cc: Change default PDF evaluation + in cppread to LHAPDF; update to PDF2023 alpha_s(mz) + +2024-05-05 Public release of the fastNLO_toolkit package version 2.5.1, tag 3022 + ===================================================================== + +2024-05-05 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.5/toolkit/ChangeLog, v2.5/toolkit/NEWS: Fix build Makefile and + adapt revision + +2024-05-05 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.5/toolkit/src/Makefile.am: Fix build Makefile + +2024-05-05 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.5/toolkit/ChangeLog, v2.5/toolkit/NEWS, v2.5/toolkit/TODO: + Update ChangeLog, NEWS, TODO + +2024-05-05 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.5/toolkit/src/Makefile.am, v2.5/toolkit/src/fnlo-py-print.py, + v2.5/toolkit/src/fnlo-tk-cppread.cc, + v2.5/toolkit/src/fnlo-tk-rootout.cc, + v2.5/toolkit/src/fnlo-tk-yodaout.cc: Improve print-out verbosity; + add python script + +2024-05-05 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.5/toolkit/src/fnlo-tk-rootout.cc, + v2.5/toolkit/src/fnlo-tk-yodaout.cc: Update default PDF set + +2024-05-03 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * tools/plotting/fnlo-py-print.py, + v2.5/toolkit/fastnlotoolkit/fastNLOLHAPDF.cc, + v2.5/toolkit/fastnlotoolkit/fastNLOReader.cc, + v2.5/toolkit/fastnlotoolkit/fastNLOTable.cc, + v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOConstants.h.in + , v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOLHAPDF.h, + v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOReader.h, + v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOTable.h, + v2.5/toolkit/src/fnlo-tk-cppread.cc, + v2.5/toolkit/src/fnlo-tk-example.cc, + v2.5/toolkit/src/fnlo-tk-rootout.cc, + v2.5/toolkit/src/fnlo-tk-yodaout.cc: More progress for better + print-out + +2024-04-28 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * tools/plotting/fastnnlo_kfactor.py, + tools/plotting/fnlo-py-print.py, v2.5/toolkit/configure.ac, + v2.5/toolkit/fastnlotoolkit/fastNLOLHAPDF.cc, + v2.5/toolkit/fastnlotoolkit/fastNLOReader.cc, + v2.5/toolkit/fastnlotoolkit/fastNLOTable.cc, + v2.5/toolkit/fastnlotoolkit/fastNLOTools.cc, + v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOConstants.h.in + , v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOLHAPDF.h, + v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOReader.h, + v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOTable.h, + v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOTools.h, + v2.5/toolkit/fastnlotoolkit/include/fastnlotk/speaker.h, + v2.5/toolkit/fastnlotoolkit/speaker.cc, + v2.5/toolkit/m4/ax_cxx_compile_stdcxx_17.m4, + v2.5/toolkit/src/fnlo-tk-yodaout.cc: Try unifying C++ and py + printouts; work on enums, requires C++17 + +2024-03-04 Public release of the fastNLO_toolkit package version 2.5.1, tag 3011 + ===================================================================== + +2024-03-04 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.5/toolkit/ChangeLog, v2.5/toolkit/NEWS: Update ChangeLog and + NEWS for bugfix release + +2023-11-01 JohannesGaessler <johannesg@5d6.de> + + * v2.5/toolkit/fastnlotoolkit/fastNLOCoeffAddFlex.cc, + v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffAddFlex.h: + Fixed table merge segfault depending on file order + +2023-09-30 Public release of the fastNLO_toolkit package version 2.5.1, tag 3000 + ===================================================================== + +2023-09-30 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.5/toolkit/NEWS: Update NEWS + +2023-09-30 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.5/toolkit/ChangeLog: Update ChangeLog + +2023-09-25 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.5/toolkit/fastnlotoolkit/fastNLOCreate.cc: Modify printout to + follow fastnlo standard + +2023-09-21 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.5/toolkit/ChangeLog, v2.5/toolkit/NEWS, v2.5/toolkit/TODO: + Prepare release with Johannes fixed merger + +2023-09-21 Public release of the fastNLO_toolkit package version 2.5.1, tag 2896 + ===================================================================== + +2023-08-10 JohannesGaessler <johannesg@5d6.de> + + * v2.5/toolkit/fastnlotoolkit/fastNLOCoeffAddFix.cc, + v2.5/toolkit/fastnlotoolkit/fastNLOCoeffAddFlex.cc, + v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffAddFlex.h: + Fixed NNLOJET table merging + +2023-07-12 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.5/toolkit/NEWS: Eliminate debug printout + +2023-07-12 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.5/toolkit/fastnlotoolkit/fastNLOCreate.cc: Eliminate debug + printout + +2023-07-12 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.5/toolkit/AUTHORS, v2.5/toolkit/ChangeLog, v2.5/toolkit/NEWS, + v2.5/toolkit/configure.ac: Toolkit version 2.5.1; update NEWS and CL + +2023-07-12 Public release of the fastNLO_toolkit package version 2.5.1, tag 2888 + ===================================================================== + +2023-07-11 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.5/toolkit/README, + v2.5/toolkit/TODO, v2.5/toolkit/configure.ac, + v2.5/toolkit/doc/paper/fnlo-paper.tex, + v2.5/toolkit/fastnlotoolkit/fastNLOCRunDec.cc, + v2.5/toolkit/fastnlotoolkit/fastNLOLHAPDF.cc, + v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOLHAPDF.h, + v2.5/toolkit/m4/ax_prog_doxygen.m4, + v2.5/toolkit/src/fnlo-tk-config.in, + v2.5/toolkit/src/fnlo-tk-cppread.cc, + v2.5/toolkit/src/fnlo-tk-example.cc, + v2.5/toolkit/src/fnlo-tk-rootout.cc, + v2.5/toolkit/src/fnlo-tk-statunc.cc, + v2.5/toolkit/src/fnlo-tk-yodaout.cc: Fix pythondir prefix + inconsistency; drop all LHAPDF5 stuff; by default no doxygen use + +2023-07-11 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.5/toolkit/configure.ac, v2.5/toolkit/src/fnlo-tk-config.in: + Require Python3 for pyext; add --pythondir option to fnlo-tk-config + +2023-07-10 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * : Merge bin_density into master + +2023-07-02 JohannesGaessler <johannesg@5d6.de> + + * v2.5/toolkit/fastnlotoolkit/fastNLOCreate.cc, + v2.5/toolkit/fastnlotoolkit/fastNLOInterpolBase.cc, + v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCreate.h: + Removed obsolete code + +2023-07-02 JohannesGaessler <johannesg@5d6.de> + + * test/.gitignore, test/InclusiveNJets_InclusiveJets_fix.wrm, + test/InclusiveNJets_InclusiveJets_flex.wrm, test/compare_tables.py, + test/fix_NodeDensity.str, test/fix_NodesPerBin.str, + test/flex_NodeDensity.str, test/flex_NodesPerBin.str: Added + NodesPerBin <-> BinDensity test files + +2023-03-13 Johannes Gäßler <Johannes Gäßler> + + * v2.5/toolkit/fastnlotoolkit/fastNLOCoeffAddBase.cc, + v2.5/toolkit/fastnlotoolkit/fastNLOCoeffAddFix.cc, + v2.5/toolkit/fastnlotoolkit/fastNLOCoeffAddFlex.cc, + v2.5/toolkit/fastnlotoolkit/fastNLOTools.cc, + v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffAddFlex.h + , v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOTools.h: + Table merging for x density + +2023-03-13 Johannes Gäßler <Johannes Gäßler> + + * v2.5/toolkit/fastnlotoolkit/fastNLOCreate.cc: Fix DIS fill code + +2023-03-12 JohannesGaessler <johannesg@5d6.de> + + * v2.5/toolkit/fastnlotoolkit/fastNLOCoeffAddBase.cc, + v2.5/toolkit/fastnlotoolkit/fastNLOCoeffAddFix.cc, + v2.5/toolkit/fastnlotoolkit/fastNLOCoeffAddFlex.cc, + v2.5/toolkit/fastnlotoolkit/fastNLOCreate.cc, + v2.5/toolkit/fastnlotoolkit/fastNLOTools.cc, + v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffAddBase.h + , + v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffAddFix.h, + v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffAddFlex.h + , v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOEvent.h, + v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOTools.h: + Deduplication of table fill code + +2023-03-09 Johannes Gäßler <Johannes Gäßler> + + * v2.5/toolkit/fastnlotoolkit/fastNLOCoeffAddFix.cc, + v2.5/toolkit/fastnlotoolkit/fastNLOCreate.cc, + v2.5/toolkit/fastnlotoolkit/fastNLOTools.cc, + v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOTableConstants + .h: DIS for x density, floats as density + +2023-03-07 Johannes Gäßler <Johannes Gäßler> + + * v2.5/toolkit/fastnlotoolkit/fastNLOCreate.cc: Steering file + strings to control warmup + +2023-03-06 JohannesGaessler <johannesg@5d6.de> + + * v2.5/toolkit/fastnlotoolkit/fastNLOCoeffAddFix.cc, + v2.5/toolkit/fastnlotoolkit/fastNLOCoeffAddFlex.cc, + v2.5/toolkit/fastnlotoolkit/fastNLOCreate.cc: Bugfixes, flex scale + with NPDFDim == 2 + +2023-03-06 JohannesGaessler <johannesg@5d6.de> + + * v2.5/toolkit/fastnlotoolkit/fastNLOCreate.cc, + v2.5/toolkit/fastnlotoolkit/fastNLOTools.cc, + v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCreate.h, + v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOTools.h: Slow + NPDFDim == 2 for x density + +2023-03-05 JohannesGaessler <johannesg@5d6.de> + + * v2.5/toolkit/fastnlotoolkit/fastNLOCreate.cc, + v2.5/toolkit/fastnlotoolkit/fastNLOInterpolBase.cc, + v2.5/toolkit/fastnlotoolkit/fastNLOInterpolCatmullRom.cc, + v2.5/toolkit/fastnlotoolkit/fastNLOInterpolLinear.cc, + v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCreate.h, + v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOInterpolCatmul + lRom.h, + v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOInterpolLinear + .h: Catmull and Linear kernels for x node density + +2023-02-26 JohannesGaessler <johannesg@5d6.de> + + * v2.5/toolkit/fastnlotoolkit/fastNLOCoeffAddFix.cc, + v2.5/toolkit/fastnlotoolkit/fastNLOCoeffAddFlex.cc, + v2.5/toolkit/fastnlotoolkit/fastNLOCreate.cc, + v2.5/toolkit/fastnlotoolkit/fastNLOTools.cc, + v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffAddFlex.h + , v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOTools.h: Bin + density implementation for flexible scale + +2023-02-25 JohannesGaessler <johannesg@5d6.de> + + * v2.5/toolkit/fastnlotoolkit/fastNLOCreate.cc, + v2.5/toolkit/fastnlotoolkit/fastNLOTools.cc, + v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOTools.h: + Utility functions for extending X dims + +2023-02-23 Johannes Gäßler <Johannes Gäßler> + + * v2.5/toolkit/fastnlotoolkit/fastNLOCoeffAddBase.cc, + v2.5/toolkit/fastnlotoolkit/fastNLOCoeffAddFix.cc, + v2.5/toolkit/fastnlotoolkit/fastNLOTools.cc, + v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffAddBase.h + , v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOTools.h: + Utility function for checking vectors, untested + +2023-02-21 JohannesGaessler <johannesg@5d6.de> + + * v2.5/toolkit/fastnlotoolkit/fastNLOCoeffAddFix.cc, + v2.5/toolkit/fastnlotoolkit/fastNLOCreate.cc, + v2.5/toolkit/fastnlotoolkit/fastNLOInterpolBase.cc, + v2.5/toolkit/fastnlotoolkit/fastNLOInterpolCatmullRom.cc, + v2.5/toolkit/fastnlotoolkit/fastNLOInterpolLagrange.cc, + v2.5/toolkit/fastnlotoolkit/fastNLOInterpolLinear.cc, + v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOInterpolBase.h: + Bugfixes for fixed scale + +2023-02-20 JohannesGaessler <johannesg@5d6.de> + + * v2.5/toolkit/fastnlotoolkit/fastNLOCoeffAddFix.cc, + v2.5/toolkit/fastnlotoolkit/fastNLOCoeffAddFlex.cc, + v2.5/toolkit/fastnlotoolkit/fastNLOCreate.cc, + v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffAddFlex.h + , v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCreate.h: WIP + flex scale without warmup + +2023-02-13 JohannesGaessler <johannesg@5d6.de> + + * v2.5/toolkit/fastnlotoolkit/fastNLOCoeffAddBase.cc, + v2.5/toolkit/fastnlotoolkit/fastNLOCoeffAddFix.cc, + v2.5/toolkit/fastnlotoolkit/fastNLOCreate.cc, + v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCreate.h, + v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOTableConstants + .h: WIP merge tables for density + +2023-01-30 JohannesGaessler <johannesg@5d6.de> + + * v2.5/toolkit/fastnlotoolkit/fastNLOCreate.cc: Skip warmup if using + NodeDensity + +2023-01-15 JohannesGaessler <johannesg@5d6.de> + + * v2.5/toolkit/fastnlotoolkit/fastNLOCoeffAddFix.cc, + v2.5/toolkit/fastnlotoolkit/fastNLOCoeffBase.cc, + v2.5/toolkit/fastnlotoolkit/fastNLOCreate.cc, + v2.5/toolkit/fastnlotoolkit/fastNLOInterpolBase.cc, + v2.5/toolkit/fastnlotoolkit/fastNLOInterpolLagrange.cc, + v2.5/toolkit/fastnlotoolkit/fastNLOTable.cc, + v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffAddFix.h, + v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffBase.h, + v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOInterpolBase.h + , + v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOInterpolLagran + ge.h, v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOTable.h: + Ignore warmup, start with small x grid + +2023-01-15 JohannesGaessler <johannesg@5d6.de> + + * v2.5/toolkit/fastnlotoolkit/fastNLOCreate.cc, + v2.5/toolkit/fastnlotoolkit/fastNLOInterpolBase.cc, + v2.5/toolkit/fastnlotoolkit/fastNLOInterpolLagrange.cc: x grid can + be extended after warmup + +2023-02-11 Public release of the fastNLO_toolkit package version 2.5.0, tag 2856 + ===================================================================== + +2023-02-11 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.5/toolkit/mygitcl: Add command for updating ChangeLog + +2023-02-10 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.5/toolkit/configure.ac, v2.5/toolkit/m4/ax_check_zlib.m4, + v2.5/toolkit/m4/ax_cxx_compile_stdcxx.m4, + v2.5/toolkit/m4/ax_prog_doxygen.m4, v2.5/toolkit/m4/libtool.m4, + v2.5/toolkit/m4/ltoptions.m4, v2.5/toolkit/m4/ltversion.m4: + autotools update + +2022-12-13 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.5/toolkit/configure.ac: Fixes in configure + +2022-10-05 Public release of the fastNLO_toolkit package version 2.5.0, tag 2848 + ===================================================================== + +2022-10-05 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.5/toolkit/ChangeLog, v2.5/toolkit/NEWS: Update news and + changelog + +2022-10-05 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.5/toolkit/check/fnlo-tk-qcdnumastest2.pl.in, + v2.5/toolkit/check/fnlo-tk-stattest.pl.in, + v2.5/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fi + x-hhc-born-2jet_stat.log, + v2.5/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fi + x-hhc-nlo-2jet_stat.log: Fix a few issues with unit tests + +2022-09-01 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.5/toolkit/check/fnlo-tk-hoppetastest2.pl.in: Fix cmdline in + HOPPER check + +2022-07-21 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.5/toolkit/Makefile.am, v2.5/toolkit/configure.ac, + v2.5/toolkit/m4/libtool.m4, v2.5/toolkit/m4/ltoptions.m4, + v2.5/toolkit/m4/ltsugar.m4, v2.5/toolkit/m4/ltversion.m4, + v2.5/toolkit/m4/lt~obsolete.m4: Fix issues with autotools + +2022-07-21 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.5/toolkit/ChangeLog, v2.5/toolkit/NEWS: Update news and + checngelog + +2022-07-21 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.5/toolkit/check/fnlo-tk-cppnormtest.pl.in, + v2.5/toolkit/check/fnlo-tk-cppscalestest.pl.in, + v2.5/toolkit/check/fnlo-tk-cpptest2.pl.in, + v2.5/toolkit/check/fnlo-tk-rundecastest2.pl.in, + v2.5/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fi + x-hhc-born-2jet_stat.log, + v2.5/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fi + x-hhc-nlo-2jet_stat.log: Fix small issues in make check; two lines + in stat check needed tiny updates of numbers (why? gcc?) + +2022-07-20 Public release of the fastNLO_toolkit package version 2.5.0, tag 2844 + ===================================================================== + +2022-07-20 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.5/toolkit/ChangeLog, v2.5/toolkit/NEWS: Complement changelog + and news for release + +2022-07-20 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.5/toolkit/ChangeLog, v2.5/toolkit/NEWS, v2.5/toolkit/TODO: + Complement changelog and news for release + +2022-07-03 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.5/toolkit/src/fnlo-tk-cppread.cc: Added option for Ecms + reweighting in fnlo-tk-cppread; TODO use getopt for cmdlines + +2022-06-13 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.5/toolkit/src/fnlo-tk-yodaout.cc: Allow rescaling uncertainty + for plotting + +2022-06-12 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.5/toolkit/fastnlotoolkit/fastNLOTable.cc, + v2.5/toolkit/src/fnlo-tk-modify.cc, + v2.5/toolkit/src/fnlo-tk-yodaout.cc: Add feature to multiply bin + borders. e.g. for GeV -> TeV, in fnlo-tk-modify + +2022-06-09 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.5/toolkit/fastnlotoolkit/fastNLOTable.cc, + v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOTable.h, + v2.5/toolkit/src/fnlo-tk-modify.cc: Test multiplying bin borders + through fnlo-tk-modify + +2022-06-05 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.5/toolkit/fastnlotoolkit/fastNLOReader.cc, + v2.5/toolkit/fastnlotoolkit/fastNLOTools.cc, + v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOConstants.h.in + , v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOReader.h, + v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOTools.h, + v2.5/toolkit/src/fnlo-tk-cppread.cc, + v2.5/toolkit/src/fnlo-tk-yodaout.cc: Add possibility of having + sclfac*scale as central choice, e.g. m12 -> m2/2 + +2022-02-07 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.5/toolkit/src/fnlo-tk-example.cc, + v2.5/toolkit/src/fnlo-tk-rootout.cc, + v2.5/toolkit/src/fnlo-tk-statunc.cc, + v2.5/toolkit/src/fnlo-tk-yodaout.cc: A few fixes for stat. + uncertainties with NLOjet++ + +2022-01-05 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.5/toolkit/src/fnlo-tk-modify.cc, + v2.5/toolkit/src/fnlo-tk-yodaout.cc: Changes required for yoda plot + x-y-rescaling for DataComparison task in law + +2021-08-21 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.5/toolkit/ChangeLog, v2.5/toolkit/NEWS: Update changelog and + news for new release of v2.5 code + +2021-07-04 Daniel Britzger <daniel.britzger@cern.ch> + + * : commit fbd39ce9170a858beb383b6795d8b0ec07800576 Author: Daniel + Britzger <daniel.britzger@cern.ch> Date: Sun Jul 4 23:21:14 2021 + +0200 + +2021-06-28 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.5/toolkit/fastnlotoolkit/fastNLOTools.cc: Commented trial with + 100% max uncertainty + +2021-06-16 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.5/toolkit/fastnlotoolkit/fastNLOReader.cc, + v2.5/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOTable.h, + v2.5/toolkit/pyext/Makefile.am, v2.5/toolkit/pyext/fastnlo.i: Fix + little issues with pyext & add D. Kalinkins suggestion; change some + info to debug messages + +2021-05-26 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.3/toolkit/pyext/fastnlo.i: Fix issue with maintainer-clean; is + fastNLOConstants.h needed in pyext? + +2021-05-26 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.3/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fi + x-hhc-born-2jet_stat.log, + v2.3/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fi + x-hhc-nlo-2jet_stat.log, v2.3/toolkit/data/modify/SteerModify.str, + v2.3/toolkit/fastnlotoolkit/fastNLOCoeffBase.cc, + v2.3/toolkit/fastnlotoolkit/fastNLODiffReader.cc, + v2.3/toolkit/fastnlotoolkit/fastNLOReader.cc, + v2.3/toolkit/fastnlotoolkit/fastNLOTools.cc, + v2.3/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffBase.h, + v2.3/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOConstants.h.in + , v2.3/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOReader.h, + v2.3/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOTools.h, + v2.3/toolkit/src/fnlo-tk-modify.cc, + v2.3/toolkit/src/fnlo-tk-statunc.cc: beta version for infoblock + testing + +2021-05-19 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.3/toolkit/README, v2.3/toolkit/TODO, + v2.3/toolkit/fastnlotoolkit/fastNLOTools.cc, + v2.3/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOConstants.h.in + , v2.3/toolkit/src/fnlo-tk-statunc.cc: Read also stat. uncertainties + from fnlo-stat-unc (NLOJet++) + +2021-05-18 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.3/toolkit/AUTHORS, v2.3/toolkit/configure.ac, + v2.3/toolkit/data/modify/SteerModify.str, + v2.3/toolkit/fastnlotoolkit/fastNLOCoeffAddBase.cc, + v2.3/toolkit/fastnlotoolkit/fastNLOCoeffAddFix.cc, + v2.3/toolkit/fastnlotoolkit/fastNLOCoeffAddFlex.cc, + v2.3/toolkit/fastnlotoolkit/fastNLOCoeffBase.cc, + v2.3/toolkit/fastnlotoolkit/fastNLOReader.cc, + v2.3/toolkit/fastnlotoolkit/fastNLOTable.cc, + v2.3/toolkit/fastnlotoolkit/fastNLOTools.cc, + v2.3/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffAddBase.h + , + v2.3/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffAddFix.h, + v2.3/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffAddFlex.h + , v2.3/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffBase.h, + v2.3/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOTable.h, + v2.3/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOTools.h, + v2.3/toolkit/fastnlotoolkit/include/fastnlotk/speaker.h, + v2.3/toolkit/src/fnlo-tk-append.cc, + v2.3/toolkit/src/fnlo-tk-cat.cc, + v2.3/toolkit/src/fnlo-tk-cppread.cc, + v2.3/toolkit/src/fnlo-tk-example.cc, + v2.3/toolkit/src/fnlo-tk-merge.cc, + v2.3/toolkit/src/fnlo-tk-merge2.cc, + v2.3/toolkit/src/fnlo-tk-modify.cc, + v2.3/toolkit/src/fnlo-tk-rootout.cc, + v2.3/toolkit/src/fnlo-tk-statunc.cc, + v2.3/toolkit/src/fnlo-tk-yodaout.cc: Working version of writing & + reading InfoBlocks with stat./numerical uncertainty + +2021-03-13 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.3/toolkit/src/fnlo-tk-cppread.cc: Add kQuadraticSum option to + cppread + +2021-01-12 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.3/toolkit/pyext/Makefile.am: pyext Makefile adaptation + +2020-11-28 Jakob Stark <jakob.stark@student.kit.edu> + + * v2.3/toolkit/configure.ac: added python3 binding if requested by + configure switch --enable-pyext3 + +2020-10-26 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.3/toolkit/src/fnlo-tk-rootout.cc, + v2.3/toolkit/src/fnlo-tk-yodaout.cc: Fix issue opening table twice + in fnlo-tk-rootout; some more printout improvements also in + fnlo-tk-yodaout + +2020-10-22 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.3/toolkit/src/fnlo-tk-rootout.cc: Fixed no. of arguments bug + +2020-10-21 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.3/toolkit/src/Makefile.am, v2.3/toolkit/src/fnlo-tk-rootout.cc: + Update fnlo-tk-rootout for more central scales: make compilable + without ROOT (but then does not do much) + +2020-09-07 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + *v2.3/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOTableConstants + .h: Compatibility update of nlojet++ interface + +2020-09-07 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.3/toolkit/fastnlotoolkit/fastNLOCreate.cc, + v2.3/toolkit/fastnlotoolkit/fastNLOInterpolBase.cc, + v2.3/toolkit/fastnlotoolkit/include/fastnlotk/Makefile.am, + v2.3/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCreate.h, + v2.3/toolkit/fastnlotoolkit/include/fastnlotk/{fastNLOGeneratorCons + tants.h => fastNLOTableConstants.h}: Use struct member + initialisation possible since C++11; fixes unitialised ReduceXmin + bug + +2020-06-12 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + v2.3/toolkit/src/fnlo-tk-cppread.cc, + v2.3/toolkit/src/fnlo-tk-yodaout.cc: Add kProd option to cppread and + yodaout; rename scale1 --> kScale1, scale2 --> kScale2 + +2020-06-11 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + v2.3/toolkit/src/fnlo-tk-cppread.cc: Fix bug in scale labelling of + fastnnlo_scaleclosure.py; add kProd scale choice to cppread + +2020-05-30 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.3/toolkit/fastnlotoolkit/fastNLOCoeffAddBase.cc, + v2.3/toolkit/fastnlotoolkit/fastNLOCoeffAddFix.cc, + v2.3/toolkit/fastnlotoolkit/fastNLOCoeffAddFlex.cc, + v2.3/toolkit/fastnlotoolkit/fastNLOCoeffBase.cc, + v2.3/toolkit/fastnlotoolkit/fastNLOCoeffData.cc, + v2.3/toolkit/fastnlotoolkit/fastNLOCoeffMult.cc, + v2.3/toolkit/fastnlotoolkit/fastNLOCreate.cc, + v2.3/toolkit/fastnlotoolkit/fastNLOReader.cc, + v2.3/toolkit/fastnlotoolkit/fastNLOTable.cc, + v2.3/toolkit/fastnlotoolkit/fastNLOUserBlock.cc, + v2.3/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffAddBase.h + , + v2.3/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffAddFix.h, + v2.3/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffAddFlex.h + , v2.3/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffBase.h, + v2.3/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffData.h, + v2.3/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffMult.h, + v2.3/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOConstants.h.in + , v2.3/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOReader.h, + v2.3/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOTable.h, + v2.3/toolkit/src/fnlo-tk-cat.cc, + v2.3/toolkit/src/fnlo-tk-cppread.cc, + v2.3/toolkit/src/fnlo-tk-merge2.cc, + v2.3/toolkit/src/fnlo-tk-modify.cc, + v2.3/toolkit/src/fnlo-tk-statunc.cc, + v2.3/toolkit/src/fnlo-tk-yodaout.cc: Prepare infoblocks + +2020-04-08 Daniel Britzger <dnb@mppui4.t2.rzg.mpg.de> + + * v2.3/toolkit/fastnlotoolkit/fastNLOCreate.cc, + v2.3/toolkit/fastnlotoolkit/fastNLOInterpolBase.cc, + v2.3/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCreate.h: fix + +2020-04-08 Daniel Britzger <dnb@mppui4.t2.rzg.mpg.de> + + * v2.3/toolkit/fastnlotoolkit/fastNLOCreate.cc, + v2.3/toolkit/fastnlotoolkit/fastNLOInterpolBase.cc, + v2.3/toolkit/fastnlotoolkit/fastNLOInterpolCatmullRom.cc, + v2.3/toolkit/fastnlotoolkit/fastNLOInterpolLagrange.cc, + v2.3/toolkit/fastnlotoolkit/fastNLOInterpolLinear.cc, + v2.3/toolkit/fastnlotoolkit/fastNLOInterpolOneNode.cc, + v2.3/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCreate.h, + v2.3/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOGeneratorConst + ants.h, + v2.3/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOInterpolBase.h + , + v2.3/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOInterpolCatmul + lRom.h, + v2.3/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOInterpolLagran + ge.h, + v2.3/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOInterpolLinear + .h, + v2.3/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOInterpolOneNod + e.h: ReduceXmin. new functionality to lower the Xmin value in order + to reduce/avoid potential inaccuracy at grid edge. + +2019-12-09 Johannes Hessler <jhessler@mppui4.t2.rzg.mpg.de> + + * v2.3/toolkit/fastnlotoolkit/include/fastnlotk/zstr.hpp: Fix + compilation warning + +2019-12-02 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.3/toolkit/src/fnlo-tk-cppread.cc: Add second version of + fixed-scale settings to cppread + +2019-11-22 Daniel Britzger <dnb@mppui4.t2.rzg.mpg.de> + + * + v2.3/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOGeneratorConst + ants.h: init values + +2019-11-18 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.3/toolkit/fastnlotoolkit/fastNLOCreate.cc: Reorder some + statements to avoid confusing messages for the cache; set defaults + to 0,0,0 + +2019-11-18 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.3/toolkit/fastnlotoolkit/fastNLOInterpolBase.cc: Some + untabifying ... + +2019-11-13 Daniel Britzger <dnb@mppui4.t2.rzg.mpg.de> + + * v2.3/toolkit/fastnlotoolkit/fastNLOCreate.cc: improvement + +2019-11-13 Daniel Britzger <dnb@mppui4.t2.rzg.mpg.de> + + * v2.3/toolkit/fastnlotoolkit/fastNLOCreate.cc: fix bug + +2019-11-13 Daniel Britzger <dnb@mppui4.t2.rzg.mpg.de> + + * v2.3/toolkit/fastnlotoolkit/fastNLOCreate.cc, + v2.3/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCreate.h: fix + cache for bin for weight-cache + +2019-11-12 Daniel Britzger <dnb@mppui4.t2.rzg.mpg.de> + + * v2.3/toolkit/fastnlotoolkit/fastNLOCreate.cc: bugfix with + fCacheType=0 + +2019-11-08 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.3/toolkit/fastnlotoolkit/fastNLOCreate.cc, + v2.3/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCreate.h, + v2.3/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOGeneratorConst + ants.h: one more steer-par + +2019-11-07 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.3/toolkit/fastnlotoolkit/fastNLOCreate.cc, + v2.3/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCreate.h, + v2.3/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOGeneratorConst + ants.h: Add steerpar NFlexScales + +2019-11-07 Daniel Britzger <dnb@mppui4.t2.rzg.mpg.de> + + * v2.3/toolkit/fastnlotoolkit/fastNLOCreate.cc, + v2.3/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCreate.h: + cachetype default set to 0 + +2019-10-31 Daniel Britzger <dnb@mppui4.t2.rzg.mpg.de> + + * v2.3/toolkit/fastnlotoolkit/fastNLOCreate.cc, + v2.3/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCreate.h, + v2.3/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOGeneratorConst + ants.h: rename CacheComp + +2019-05-03 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/src/fnlo-tk-cppread.cc, + v2.0/toolkit/src/fnlo-tk-rootout.cc, + v2.0/toolkit/src/fnlo-tk-yodaout.cc: Added version number printout + to cppread, yodaout, rootout + +2019-05-03 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/fastnlotoolkit/fastNLOTools.cc, + v2.0/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOTools.h, + v2.0/toolkit/src/fnlo-tk-cppread.cc: Add -v option to exe files on + feature branch + +2019-05-02 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/fastnlotoolkit/fastNLOTools.cc, + v2.0/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOTools.h: Keep + binary format implementation, but switch off by default. To + continue work with binary format ON use branch binary_format This reverts commit ee130502fec71ddb89fd89326ea7b97607387a5e. + +2019-04-09 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/pyext/fastnlo.i: Fix syntax issue between swig and + CRunDec header + +2019-03-30 Daniel Britzger <dnb@mppui4.t2.rzg.mpg.de> + + * v2.0/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOTools.h: + Improve writing of binary files. Now significantly reduce file size + for .gz files + +2019-03-29 Daniel Britzger <dnb@mppui4.t2.rzg.mpg.de> + + * v2.0/toolkit/fastnlotoolkit/fastNLOTools.cc, + v2.0/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOTools.h: write + binary format + +2019-03-29 Daniel Britzger <dnb@mppui4.t2.rzg.mpg.de> + + * v2.0/toolkit/fastnlotoolkit/fastNLOCoeffAddFix.cc, + v2.0/toolkit/fastnlotoolkit/fastNLOReader.cc, + v2.0/toolkit/fastnlotoolkit/fastNLOTable.cc: binary format. + partially working, but not active. + +2019-03-13 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/src/fnlo-tk-cppread.cc, + v2.0/toolkit/src/fnlo-tk-yodaout.cc: 3D output for cppread and + yodaout + +2019-03-13 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/NEWS: Add NEWS item to recall myself that asmz + default was changed from 0.1185 to 0.1181 between tags 2585 and 2608 + +2019-03-01 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/fastnlotoolkit/fastNLOReader.cc: Scale vars for + partial flex-scale tables + +2019-02-22 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/src/fnlo-tk-statunc.cc: Bugfix + +2019-02-22 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/fastnlotoolkit/fastNLOReader.cc: Trivial tab + elimination + +2019-02-07 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/configure.ac: Use only one doxygen install option + +2019-02-06 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/fastnlotoolkit/fastNLOCRunDec.cc, + v2.0/toolkit/fastnlotoolkit/fastNLOHoppet.cc, + v2.0/toolkit/fastnlotoolkit/fastNLOQCDNUMAS.cc: Bugfix in nloops + check for Hoppet + +2019-02-03 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/configure.ac, v2.0/toolkit/fortranext/Makefile.am: + Fix some autotools issues../generators/nlojet++/configure.ac + +2019-02-02 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/fastnlotoolkit/Makefile.am, + v2.0/toolkit/fastnlotoolkit/fastNLOCreate.cc, + v2.0/toolkit/fastnlotoolkit/fastNLOReader.cc, + v2.0/toolkit/fastnlotoolkit/fastNLOTable.cc, + v2.0/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOConstants.h.in + , v2.0/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCreate.h, + v2.0/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOGeneratorConst + ants.h, v2.0/toolkit/src/Makefile.am, + v2.0/toolkit/src/fnlo-tk-cppread.cc, + v2.0/toolkit/src/fnlo-tk-example.cc, + v2.0/toolkit/src/fnlo-tk-rootout.cc, + v2.0/toolkit/src/fnlo-tk-statunc.cc, + v2.0/toolkit/src/fnlo-tk-yodaout.cc: Fix config.h usage; never use + in installable headers + +2019-02-01 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/TODO, v2.0/toolkit/fastnlotoolkit/CRunDec.cc, + v2.0/toolkit/fastnlotoolkit/HoppetInterface.cc, + v2.0/toolkit/fastnlotoolkit/fastNLOAlphas.cc, + v2.0/toolkit/fastnlotoolkit/fastNLOCRunDec.cc, + v2.0/toolkit/fastnlotoolkit/fastNLOHoppet.cc, + v2.0/toolkit/fastnlotoolkit/fastNLOHoppetAs.cc, + v2.0/toolkit/fastnlotoolkit/fastNLOLHAPDF.cc, + v2.0/toolkit/fastnlotoolkit/fastNLOQCDNUMAS.cc, + v2.0/toolkit/fastnlotoolkit/include/fastnlotk/CRunDec.h, + v2.0/toolkit/fastnlotoolkit/include/fastnlotk/HoppetInterface.h, + v2.0/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOAlphas.h, + v2.0/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCRunDec.h, + v2.0/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOHoppet.h, + v2.0/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOHoppetAs.h, + v2.0/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOLHAPDF.h, + v2.0/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOQCDNUMAS.h, + v2.0/toolkit/m4/ax_check_zlib.m4, + v2.0/toolkit/m4/ax_cxx_compile_stdcxx.m4, + v2.0/toolkit/m4/ax_cxx_compile_stdcxx_11.m4, + v2.0/toolkit/m4/ax_prog_doxygen.m4, + v2.0/toolkit/m4/ax_python_devel.m4, + v2.0/toolkit/m4/ax_require_defined.m4, + v2.0/toolkit/src/fnlo-tk-cppread.cc: Add new CRunDec3; add fscheme; + some more adaptations to as evolution interface + +2019-01-31 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/fastnlotoolkit/fastNLOCreate.cc: Bugfix GetBin + +2019-01-31 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/data/check/Makefile.am: Add logs to distribution + +2019-01-31 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/check/fnlo-tk-zipapp.pl.in, + v2.0/toolkit/check/fnlo-tk-ziptest.pl.in: Add many checks + +2019-01-31 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/check/Makefile.am, + v2.0/toolkit/check/fnlo-tk-cpptest1.pl.in, + v2.0/toolkit/check/{fnlo-tk-cpptest.pl.in => + fnlo-tk-cpptest2.pl.in}, + v2.0/toolkit/check/fnlo-tk-hoppetastest1.pl.in, + v2.0/toolkit/check/fnlo-tk-hoppetastest2.pl.in, + v2.0/toolkit/check/fnlo-tk-lhapdftest.pl.in, + v2.0/toolkit/check/fnlo-tk-qcdnumastest1.pl.in, + v2.0/toolkit/check/fnlo-tk-qcdnumastest2.pl.in, + v2.0/toolkit/check/fnlo-tk-rundecastest1.pl.in, + v2.0/toolkit/check/fnlo-tk-rundecastest2.pl.in, + v2.0/toolkit/configure.ac, + v2.0/toolkit/data/check/fnl1014_I902309_2-2_cpp.log, + v2.0/toolkit/data/check/fnl1014_I902309_2-2_cpptest1.log, + v2.0/toolkit/data/check/fnl1014_I902309_2-2_cpptest2.log, + v2.0/toolkit/data/check/fnl1014_I902309_2-2_hoppetastest1.log, + v2.0/toolkit/data/check/fnl1014_I902309_2-2_hoppetastest2.log, + v2.0/toolkit/data/check/fnl1014_I902309_2-2_lhapdftest.log, + v2.0/toolkit/data/check/fnl1014_I902309_2-2_qcdnumastest1.log, + v2.0/toolkit/data/check/fnl1014_I902309_2-2_qcdnumastest2.log, + v2.0/toolkit/data/check/fnl1014_I902309_2-2_rundecastest1.log, + v2.0/toolkit/data/check/fnl1014_I902309_2-2_rundecastest2.log: Add + many checks + +2019-01-31 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/src/fnlo-tk-cppread.cc: Fix issue with print out of + multidim NLO contribution + +2019-01-30 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/fastnlotoolkit/fastNLOCreate.cc, + v2.0/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOEvent.h: + Propagate weight for x section diffs; TODO decide which version + +2019-01-30 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCreate.h, + v2.0/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOEvent.h: + Reformat for better readability + +2019-01-23 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/TODO: Fix HOPPET interface issues; respects MZ, asMZ, + NFlavor (new) and NLoop (new) changes; works with new HOPPET 1.2.x + +2019-01-23 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/configure.ac, + v2.0/toolkit/fastnlotoolkit/HoppetInterface.cc, + v2.0/toolkit/fastnlotoolkit/fastNLOHoppet.cc, + v2.0/toolkit/fastnlotoolkit/fastNLOHoppetAs.cc, + v2.0/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOHoppet.h, + v2.0/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOHoppetAs.h, + v2.0/toolkit/src/Makefile.am, v2.0/toolkit/src/fnlo-tk-cppread.cc: + Fix HOPPET interface issues; respects MZ, asMZ, NFlavor (new) and + NLoop (new) changes; works with new HOPPET 1.2.x + +2019-01-17 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/doxygen.cfg: Update doxygen.cfg to deal with + incompatibilty with ubuntu 18 + +2018-12-19 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/fastnlotoolkit/Makefile.am, + v2.0/toolkit/fortranext/Makefile.am: Fixes for Mac + +2018-11-26 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/fastnlotoolkit/fastNLOCreate.cc: Fix issue with zlib; + remove forbidden tabs; add additional weight factor to accommodate x + section differences to be filled with wgtfac = # jetsA - # jetsB + within same bin + +2018-11-26 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCreate.h, + v2.0/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOGeneratorConst + ants.h: Fix issue with zlib; remove forbidden tabs; add additional + weight factor to accommodate x section differences to be filled with + wgtfac = # jetsA - # jetsB within same bin + +2018-11-26 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/fastnlotoolkit/fastNLOTable.cc: Fix issues with + doxygen and zlib; make fortranext optional + +2018-11-26 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/Makefile.am, v2.0/toolkit/configure.ac, + v2.0/toolkit/fortranext/Makefile.am, + v2.0/toolkit/m4/ax_prog_doxygen.m4, + v2.0/toolkit/m4/ax_python_devel.m4, v2.0/toolkit/myfullconfig: Fix + issues with doxygen and zlib; make fortranext optional + +2018-11-20 Daniel Britzger <dnb@mppui4.t2.rzg.mpg.de> + + * v2.0/toolkit/fastnlotoolkit/fastNLOCreate.cc: Read References, + Name for generator and process also from steering. + +2018-11-19 Daniel Britzger <dnb@mppui4.t2.rzg.mpg.de> + + * v2.0/toolkit/fastnlotoolkit/fastNLOInterpolLinear.cc: bugfix. + linear interpolation + +2018-11-11 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/configure.ac: Fix missing DX_COND conditionals ...? + +2018-11-08 Daniel Britzger <dnb@mppui4.t2.rzg.mpg.de> + + * v2.0/toolkit/fastnlotoolkit/fastNLOCreate.cc, + v2.0/toolkit/fastnlotoolkit/fastNLOInterpolLagrange.cc, + v2.0/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCreate.h, + v2.0/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOGeneratorConst + ants.h, v2.0/toolkit/src/Makefile.am: Improved caching for flex + tables, when filling. + +2018-10-19 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/fastnlotoolkit/fastNLOReader.cc: Fix printout + +2018-10-19 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/check/fnlo-tk-cppnormtest.pl.in, + v2.0/toolkit/check/fnlo-tk-cppscalestest.pl.in, + v2.0/toolkit/check/fnlo-tk-cpptest.pl.in, + v2.0/toolkit/check/fnlo-tk-ziptest.pl.in: Adapt check to new cppread + options + +2018-10-18 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/fastnlotoolkit/fastNLOAlphas.cc, + v2.0/toolkit/src/fnlo-tk-cppread.cc: Add some command line options + to fnlo-tk-cppread + +2018-10-18 Daniel Britzger <dnb@mppui2.t2.rzg.mpg.de> + + * v2.0/toolkit/fastnlotoolkit/fastNLOReader.cc: do not 'exit' if + warmup values are empty. + +2018-10-04 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * + v2.0/toolkit/data/check/InclusiveNJetEvents_fnl5662i_v23_fix_0-0-2_ + cpp.log, + v2.0/toolkit/data/check/InclusiveNJetEvents_fnl5662i_v23_fix_2-2-2_ + cpp.log, + v2.0/toolkit/data/check/InclusiveNJetEvents_fnl5662i_v23_fix_2-2_cp + p.log, + v2.0/toolkit/data/check/InclusiveNJetEvents_fnl5662i_v23_fix_norm_1 + -12_cppnorm.log, + v2.0/toolkit/data/check/fnl1014_I902309_2-2_cpp.log, + v2.0/toolkit/data/check/fnl1014_I902309_2-2_cppscales.log, + v2.0/toolkit/src/fnlo-tk-cppread.cc: Fix log output for make check + +2018-09-26 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/README, v2.0/toolkit/TODO, v2.0/toolkit/mygittag: + Update README & TODO; add little script to git tag a release + +2018-09-21 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/README, v2.0/toolkit/TODO, v2.0/toolkit/configure.ac: + Fix some configure.ac inconsistencies; edit TODOs nd README + +2018-09-20 Daniel Britzger <dnb@mppui1.t2.rzg.mpg.de> + + * v2.0/toolkit/fastnlotoolkit/fastNLOCreate.cc, + v2.0/toolkit/fastnlotoolkit/fastNLOInterpolBase.cc, + v2.0/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCreate.h, + v2.0/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOInterpolBase.h: + improve printout when value is outside of bin + +2018-09-20 Daniel Britzger <dnb@mppui1.t2.rzg.mpg.de> + + * v2.0/toolkit/fastnlotoolkit/fastNLOCreate.cc: check if warmup + values are 1. + +2018-09-19 Daniel Britzger <dnb@mppui1.t2.rzg.mpg.de> + + * v2.0/toolkit/fastnlotoolkit/fastNLOCreate.cc: check if warmup + value is identical to lower bin boundary (only). If so, then take + this value as warmup value. + +2018-07-23 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/git_commits_and_tags: Correct tagging recipe + +2018-07-23 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/git_commits_and_tags: Add git tag description + +2018-07-21 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/src/fnlo-tk-cppread.cc: Added asymmetric scale1 + scale2 combinations to cppread + +2018-07-18 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/fastnlotoolkit/fastNLOCreate.cc, + v2.0/toolkit/fastnlotoolkit/fastNLOReader.cc, + v2.0/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCreate.h, + v2.0/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOGeneratorConst + ants.h, v2.0/toolkit/src/fnlo-tk-cppread.cc: Toolkit updates + +2018-06-11 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOReader.h: + Trivial: Remove tabs + +2018-05-08 Jakob Stark <jakob.stark@student.kit.edu> + + * v2.0/toolkit/fastnlotoolkit/fastNLOCoeffAddBase.cc: ignoring + non-existing parton-pairs on subprocess selection + +2018-04-19 Jakob Stark <jakob.stark@student.kit.edu> + + * v2.0/toolkit/fastnlotoolkit/fastNLOReader.cc: modifiers in + SelectProcesses are now interchangeable + +2018-04-13 Jakob Stark <jakob.stark@student.kit.edu> + + * v2.0/toolkit/fastnlotoolkit/fastNLOReader.cc: changed string + handling in SelectSubrocesses + +2018-03-24 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/configure.ac, v2.0/toolkit/doxygen.cfg, + v2.0/toolkit/fastnlotoolkit/fastNLOTable.cc, + v2.0/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOConstants.h.in + , v2.0/toolkit/src/fnlo-tk-config.in: SVNREV --> GITREV + +2018-03-23 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/data/.gitignore: Updated gitignore settings + +2018-03-23 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/.gitignore, v2.0/generators/nlojet++/.gitignore, + v2.0/toolkit/.gitignore, v2.0/toolkit/check/.gitignore, + v2.0/toolkit/fastnlotoolkit/include/fastnlotk/.gitignore, + v2.0/toolkit/fortranext/.gitignore, v2.0/toolkit/pyext/.gitignore, + v2.0/toolkit/src/.gitignore: Updated gitignore settings + +2018-03-13 Jakob Stark <jakob.stark@student.kit.edu> + + * v2.0/toolkit/pyext/Makefile.am: hopefully fixed bug with makefile + dependecies in pyext + +2018-03-10 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/fastnlotoolkit/fastNLOCreate.cc: astyle'd + +2018-03-10 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/fastnlotoolkit/fastNLOCreate.cc, + v2.0/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCreate.h: Work + on table creators + +2018-03-09 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * + v2.0/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOGeneratorConst + ants.h: NodesPerBin was old default, not NodesMax + +2018-03-08 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/fastnlotoolkit/include/fastnlotk/read_steer.h: Typos + +2018-03-02 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * tools/fnlosrc_install.csh, + v2.0/toolkit/fastnlotoolkit/fastNLOCoeffAddBase.cc, + v2.0/toolkit/fastnlotoolkit/fastNLOCreate.cc, + v2.0/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffAddBase.h + , v2.0/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCreate.h, + v2.0/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOGeneratorConst + ants.h, v2.0/toolkit/fastnlotoolkit/include/fastnlotk/read_steer.h: + Rearrange to allow steering files to be added to NNLOJET+fastNLO + configuration + +2018-02-21 Jakob Stark <jakob.stark@student.kit.edu> + + * v2.0/toolkit/configure.ac: fixed error with automake + +2018-02-20 Jakob Stark <jakob.stark@student.kit.edu> + + * v2.0/toolkit/pyext/Makefile.am, v2.0/toolkit/pyext/setup.py.in: + fixed make process of python bindings + +2018-02-19 Jakob Stark <jakob.stark@student.kit.edu> + + * v2.0/toolkit/fastnlotoolkit/fastNLOReader.cc, + v2.0/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOReader.h: added + symmetric flag to SelectProcesses + +2018-02-13 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * tools/fastnlo_utils.cxx: Corrected fastnlo_utils.cxx + +2018-02-12 Jakob Stark <jakob.stark@student.kit.edu> + + * v2.0/toolkit/fastnlotoolkit/fastNLOReader.cc: make check runs + again + +2018-02-12 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/fastnlotoolkit/fastNLOReader.cc: Some more FNLO_vars + replaced + +2018-02-12 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/configure.ac, + v2.0/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOConstants.h.in + , v2.0/toolkit/src/Makefile.am, + v2.0/toolkit/src/fnlo-tk-cppread.cc, + v2.0/toolkit/src/fnlo-tk-rootout.cc, + v2.0/toolkit/src/fnlo-tk-yodaout.cc: Add precompiler directives in + standard way + +2018-02-12 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/src/fnlo-tk-cppread.cc: Increase numerical precision + of const scales + +2018-02-09 Jakob Stark <jakob.stark@student.kit.edu> + + * v2.0/toolkit/fastnlotoolkit/fastNLOCoeffAddBase.cc: added more + subprocess information to contribution print out + +2018-02-08 Miguel Santos Correa <miguelsantoscorrea@gmail.com> + + * v2.0/toolkit/fastnlotoolkit/fastNLOReader.cc: fixed + SelectProcesses bug + +2018-02-07 Jakob Stark <jakob.stark@student.kit.edu> + + * + v2.0/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOConstants.h.in + , v2.0/toolkit/src/fnlo-tk-cppread.cc: fixed some preprocessor + issues + +2018-02-06 Jakob Stark <jakob.stark@student.kit.edu> + + * v2.0/toolkit/fastnlotoolkit/fastNLOReader.cc: some fixes + +2018-02-02 Daniel Britzger <britzger@nafhh-atlas02.desy.de> + + * v2.0/toolkit/fastnlotoolkit/fastNLOReader.cc, + v2.0/toolkit/fastnlotoolkit/fastNLOTable.cc, + v2.0/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffBase.h: + fixes + +2018-02-01 Daniel Britzger <britzger@naf-hone02.desy.de> + + * v2.0/toolkit/configure.ac, + v2.0/toolkit/fastnlotoolkit/fastNLODiffReader.cc, + v2.0/toolkit/fastnlotoolkit/fastNLOReader.cc, + v2.0/toolkit/fastnlotoolkit/include/fastnlotk/fastNLODiffReader.h, + v2.0/toolkit/fastnlotoolkit/read_steer.cc: updates to diffractive + code + +2018-01-31 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/configure.ac: Fix line length issue + +2018-01-30 Jakob Stark <jakob.stark@student.kit.edu> + + * v2.0/toolkit/fastnlotoolkit/fastNLOReader.cc, + v2.0/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOReader.h: added + overloaded function SelectProcesses(string) to fastNLOReader to + provide more advanced process selection + +2018-01-30 Jakob Stark <jakob.stark@student.kit.edu> + + * v2.0/toolkit/fastnlotoolkit/fastNLOReader.cc, + v2.0/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOReader.h: basic + Subprocess selection to fastNLOReader (SelectProcesses and + UpdateProcesses) + +2018-01-30 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/Makefile.am, v2.0/toolkit/configure.ac: Adapt + autotools setup to git + +2018-01-28 Jakob Stark <jakob.stark@student.kit.edu> + + * v2.0/toolkit/fastnlotoolkit/fastNLOCoeffAddBase.cc, + v2.0/toolkit/fastnlotoolkit/fastNLOReader.cc, + v2.0/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffAddBase.h: + added SubSelect to fastNLOCoeffAddBase to switch on/off subprocess + contributions based on a list of subprocesses git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2449 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2018-01-28 Jakob Stark <jakob.stark@student.kit.edu> + + * v2.0/toolkit/fastnlotoolkit/fastNLOCoeffAddBase.cc, + v2.0/toolkit/fastnlotoolkit/fastNLOReader.cc, + v2.0/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffAddBase.h: + added sub_enabled to fastNLOCoeffAddBase to switch on/off single + subprocess contributions. SetCalculateSingleSubprocess and + SetCalculateSubprocesses from the fastNLOReader class are now + depreciated and do nothing anymore but throw out a warning. A + functional replacement for those functions will be presented later git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2448 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2018-01-28 Jakob Stark <jakob.stark@student.kit.edu> + + * v2.0/toolkit/fastnlotoolkit/fastNLOReader.cc, + v2.0/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffBase.h, + v2.0/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOReader.h: added + enable switch to fastNLOCoeffBase class to enable/disable single + contributions without keeping track of it in fastNLOReader using + bUseSMCalc git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2447 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2018-01-23 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/fastnlotoolkit/fastNLOCreate.cc: Correct warmup + naming git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2444 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2018-01-19 Jakob Stark <jakob.stark@student.kit.edu> + + * v2.0/toolkit/fastnlotoolkit/fastNLOReader.cc, + v2.0/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOReader.h, + v2.0/toolkit/pyext/fastnlo.i: Added subprocess utils git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2443 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2018-01-17 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/src/fnlo-tk-cppread.cc: Extend cppread for constant + scale check git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2441 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2018-01-17 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/fastnlotoolkit/fastNLOReader.cc: Bugfix: Omitted PDF + cache regeneration git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2440 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2018-01-17 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/fastnlotoolkit/fastNLOReader.cc: Reformat only git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2439 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2018-01-16 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/src/fnlo-tk-cppread.cc: Print out fixed-scale x + sections, if possible git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2438 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2018-01-09 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/check/fnlo-tk-stattest.pl.in: Fix check problem with + table names for stat test git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2437 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2018-01-09 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/src/fnlo-tk-statunc.cc: Fix filename issue git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2435 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2018-01-09 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * + v2.0/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOConstants.h.in: + Update PDG values git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2434 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2017-12-07 Daniel Britzger <daniel.britzger@desy.de> + + * v2.0/toolkit/src/fnlo-tk-merge2.cc: improve usability and warning + messages git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2432 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2017-12-07 Daniel Britzger <daniel.britzger@desy.de> + + * v2.0/toolkit/fastnlotoolkit/fastNLOCoeffAddBase.cc, + v2.0/toolkit/fastnlotoolkit/fastNLOTable.cc, + v2.0/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffAddBase.h + , + v2.0/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOConstants.h.in + , v2.0/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOTable.h, + v2.0/toolkit/src/fnlo-tk-merge2.cc: enable to read NNLOJET weight + tables. (to be tested...) git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2431 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2017-12-05 Daniel Britzger <daniel.britzger@desy.de> + + * v2.0/toolkit/fastnlotoolkit/fastNLOReader.cc, + v2.0/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOReader.h: + Implement new feature: center-of-mass reweighting. Tested with CMS + jets. Not (yet) available for DIS git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2430 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2017-12-05 Daniel Britzger <daniel.britzger@desy.de> + + * v2.0/toolkit/fastnlotoolkit/fastNLOReader.cc, + v2.0/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOEvent.h, + v2.0/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOReader.h: add + option to calculate only a single subprocess git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2429 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2017-11-30 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/src/fnlo-tk-rootout.cc: Change fnlo-tk-rootout to + overwrite existing ROOT files; TBC git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2428 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2017-11-12 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/data/check/Makefile.am: Fix issue of superfluous data + installs git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2425 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2017-11-07 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/mydistconfig, v2.0/toolkit/myfullconfig: Add shortcut + commands for my usual configures; not for distribution git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2421 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2017-11-07 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/fastnlotoolkit/fastNLOCreate.cc: Autogenerate + nlojet++ table name as before; naming between constructors to be + checked and unified ... git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2420 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2017-09-20 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/fastnlotoolkit/fastNLOLHAPDF.cc, + v2.0/toolkit/fastnlotoolkit/fastNLOReader.cc, + v2.0/toolkit/fastnlotoolkit/fastNLOTools.cc, + v2.0/toolkit/src/fnlo-tk-rootout.cc: Allow one-member PDF sets for + fnlo-tk-rootout; PDF uncertainty will be zero git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2418 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2017-09-18 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/src/fnlo-tk-rootout.cc: Bugfix for root filename in + case of gzipped tables git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2417 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2017-08-15 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/m4/ax_check_zlib.m4, + v2.0/toolkit/m4/ax_cxx_compile_stdcxx.m4, + v2.0/toolkit/m4/ax_cxx_compile_stdcxx_11.m4, + v2.0/toolkit/m4/ax_require_defined.m4: Deal with m4 macro issues git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2409 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2017-08-15 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/check/fnlo-tk-zipapp.pl.in, + v2.0/toolkit/data/check/zipappdiff.log: Fix issue with zipapp check git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2408 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2017-08-15 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/fastnlotoolkit/fastNLOQCDNUMAS.cc, + v2.0/toolkit/pyext/setup.py.in: Fix missing include and issue with + ++11 standard for pyext git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2407 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2017-06-11 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/src/fnlo-tk-cppread.cc: Add scale option to cppread git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2404 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2017-06-09 Klaus Rabbertz <klaus.rabbertz@cern.ch> + + * v2.0/toolkit/fastnlotoolkit/fastNLOTable.cc: Fix div by zero error + in merge2 git-svn-id: + https://ekptrac.physik.uni-karlsruhe.de/svn/fastNLO/trunk@2403 + aa5437bd-d6fa-0310-9a40-cbaab9bf9339 + +2017-05-07 Public prerelease of the fastNLO_toolkit package version 2.3.1pre, revision 2402 + ================================================================================ + +2017-05-06 rabbertz + + * fastNLOCoeffAddBase.cc, fastNLOCoeffAddBase.h, fastNLOCoeffAddFix.cc, + fastNLOCoeffAddFix.h, fastNLOCoeffAddFlex.cc, fastNLOCoeffAddFlex.h, + fastNLOCoeffBase.cc, fastNLOCoeffBase.h, fastNLOCoeffData.cc, + fastNLOCoeffData.h, fastNLOCoeffMult.cc, fastNLOCoeffMult.h, + fastNLOCreate.cc, fastNLOTable.cc, fnlo-tk-cat.cc: Table version for + write-out settable; def. 23600 or version of first read in table for mods + +2017-04-26 DanielBritzger + + * fastNLOReader.cc, fastNLOTable.cc, fnlo-tk-merge2.cc: new option 'cutRMS' + implemented fully for flexible-scales + +2017-04-25 DanielBritzger + + * fastNLOCreate.cc, fastNLOReader.cc, read_steer.cc: minor fixes + +2017-03-12 rabbertz + + * Makefile.am, configure.ac: Add missing logo file to distro + + * configure.ac: Add check on epstopdf for crappy site installations + +2017-03-10 DanielBritzger + + * fastNLOReader.cc, fastNLOReader.h: Updates when running with only a single + contribution + +2017-03-08 DanielBritzger + + * fastNLOConstants.h.in: add missin .in file + + * fnlo-tk-merge2.cc: update + + * Makefile.am, fastNLOConstants.h.in, fastNLOTable.cc, fastNLOTable.h: + update + +2017-03-06 DanielBritzger + + * fastNLOReader.cc: more scale choices + + * fastNLOCoeffAddFlex.cc, fastNLOCoeffAddFlex.h, fastNLOCreate.cc, + fastNLODiffReader.cc, fastNLOReader.h, read_steer.cc: speed up reading of + (DIS) flexible scale tables + +2017-03-05 rabbertz + + * fnlo-tk-statunc.cc: Update statunc for gzipped tables and for NLO/NNLO + only evaluation + + * fnlo-tk-cppread.cc: Set back to WARNING verbosity + +2017-03-02 DanielBritzger + + * fastNLOTable.cc: bugfix. fixed scale: mergeing median and mean + + * fastNLOCoeffAddBase.h: correct counting of number of tables + + * fastNLOTable.cc: bugfix for median/mean for fixed scale tables + +2017-03-01 rabbertz + + * fnlo-tk-cppread.cc: Add single contribution output to 2- and 3-dim + observables + +2017-02-27 rabbertz + + * fastNLOReader.cc, fastNLOReader.h, fnlo-tk-cppread.cc: Enable output for + single fixed-order contributions even without LO etc. + +2017-02-24 rabbertz + + * configure.ac: Version no. correction + + * configure.ac: Added gcc version comment + + * Makefile.am, configure.ac: Update autotools requirements + +2017-02-15 rabbertz + + * Makefile.am, fastNLOConstants.h.in: Add in std11; no idea why Daniels + gcc4.8 needs this + + * Makefile.am: Kick out superfluous -std=gnu++11 + +2017-02-14 DanielBritzger + + * fastNLOCoeffAddFlex.cc: update + + * fastNLOTable.h, fnlo-tk-merge2.cc: memory safe fnlo-tk-merge2 and + simplifid code structure. + + * fastNLOCoeffAddBase.cc: tested version of mergeing options: kAdd, kAttach + + * fastNLOCoeffAddBase.cc, fastNLOTable.cc: revert reading of table header + + * fastNLOTools.cc: bugfix + + * fastNLOTable.cc: add namespace + +2017-02-14 rabbertz + + * Makefile.am: Add compile option because of C++11 conflict with Boost + +2017-02-14 DanielBritzger + + * fastNLOCoeffAddBase.cc, fastNLOCoeffAddFix.cc, fastNLOCoeffAddFlex.cc, + fastNLOConstants.h.in, fastNLOTable.cc, fastNLOTools.cc, + fnlo-tk-merge2.cc: updates for mergeing + +2017-02-13 DanielBritzger + + * fastNLOCoeffAddBase.cc, fastNLOCoeffAddFix.cc, fastNLOCoeffAddFlex.cc: + bugfix when appending + + * fastNLOCoeffAddBase.cc, fastNLOCoeffAddBase.h, fastNLOCoeffAddFlex.cc, + fastNLOConstants.h.in, fastNLOTable.cc, fnlo-tk-merge2.cc: updates + +2017-02-11 DanielBritzger + + * fastNLOCoeffAddBase.cc, fastNLOCoeffAddBase.h, fastNLOCoeffAddFix.cc, + fastNLOCoeffAddFix.h, fastNLOCoeffAddFlex.cc, fastNLOCoeffAddFlex.h, + fastNLOConstants.h.in, fastNLOTable.cc, fastNLOTable.h, fnlo-tk-merge2.cc: + improved mergeing + +2017-02-10 DanielBritzger + + * fastNLOCoeffAddFix.h, fastNLOCoeffAddFlex.h, fastNLOTable.cc, + fastNLOTable.h, fnlo-tk-merge2.cc: completed (first) version of + fnlo-tk-merge2 + +2017-02-09 rabbertz + + * fnlo-tk-cppread.cc: Add some commented a_s evolution printouts + +2017-02-09 DanielBritzger + + * Makefile.am, fastNLOCoeffAddBase.cc, fastNLOCoeffAddBase.h, + fastNLOCoeffAddFix.cc, fastNLOCoeffAddFix.h, fastNLOCoeffAddFlex.cc, + fastNLOCoeffAddFlex.h, fastNLOCreate.cc, fastNLOCreate.h, fastNLOTable.cc, + fastNLOTable.h, fnlo-tk-append.cc, fnlo-tk-merge.cc, fnlo-tk-merge2.cc: + new merger 'fnlo-tkmerge2' with lots of options. + +2017-02-07 DanielBritzger + + * fastNLOCoeffAddBase.cc: allow in principle for write-out in v2.2 + + * fastNLOCoeffAddBase.cc, fastNLOCoeffAddBase.h, fastNLOCoeffAddFlex.cc, + fastNLOCreate.cc, fastNLOCreate.h: put all wegihts into a struct. + + * fastNLOConstants.h.in, fastNLOTable.cc: remove debug printouts + + * fastNLOConstants.h.in: versionsing. + + * Makefile.am, fastNLOCoeffAddBase.cc, fastNLOCoeffAddBase.h, + fastNLOCoeffAddFix.cc, fastNLOCoeffAddFlex.cc, fastNLOCoeffAddFlex.h, + fastNLOCoeffBase.cc, fastNLOCoeffBase.h, fastNLOCreate.cc, + fastNLOCreate.h, fastNLOEvent.h, fastNLOReader.cc, fastNLOTable.cc, + fastNLOTools.cc, fastNLOTools.h: updates for create, new table format, + version checks, warmup, etc. + +2016-12-23 DanielBritzger + + * fastNLOCoeffAddBase.cc, fastNLOCreate.cc, fastNLOCreate.h, fastNLOEvent.h: + first test of additional caching. functional for flexible scale tables, + but something goes wrong for the weights. + +2016-12-08 rabbertz + + * Makefile.am: Add missing file to distro + + * m4.tar.gz: Add m4 macros for testing + + * AUTHORS: + +2016-12-08 stober + + * fnlo-tk-statunc.cc: missing include file + +2016-12-08 rabbertz + + * Makefile.am, configure.ac, fnlo-tk-zipapp.pl.in, fnlo-tk-ziptest.pl.in, + zipappdiff.log: Add optional check reading gzipped tables and writing + appendnormalised gzipped table + +2016-12-07 rabbertz + + * fnlo-tk-stattest.pl.in: Fix small issue with checks + + * Makefile, Makefile.Fred, Makefile.am, configure.ac, fastNLOFI_cc.cc, + fastNLOFI_f.f: Make Fred's fortranext compile/link within toolkit + +2016-12-05 rabbertz + + * fastNLOLHAPDF.cc: Add first version of alpha_s uncertainty functionality + + * fastNLOConstants.h.in, fastNLOLHAPDF.cc, fastNLOLHAPDF.h, + fnlo-tk-yodaout.cc: Add first version of alpha_s uncertainty functionality + +2016-12-04 DanielBritzger + + * configure.ac: nice output when compiling fastNLO + +2016-11-25 sieber + + * fastNLOCoeffAddBase.h, fastNLOCoeffAddFix.h, fastNLOCoeffAddFlex.h, + fastNLOCoeffData.h, fastNLOCoeffMult.h: make specific ctor calls explicit, + so that compiler may not do anyimplicit conversions beforehand + + * fastNLOCoeffAddBase.cc, fastNLOCoeffAddBase.h, fastNLOCoeffAddFix.cc, + fastNLOCoeffAddFix.h, fastNLOCoeffAddFlex.cc, fastNLOCoeffAddFlex.h, + fastNLOCoeffData.cc, fastNLOCoeffData.h, fastNLOCoeffMult.cc, + fastNLOCoeffMult.h: switch to covariant return types for Clone methods + + * fastNLOCoeffAddFix.cc, fastNLOCoeffAddFlex.cc, fastNLOCoeffData.cc, + fastNLOCoeffMult.cc: default construct members when calling ctor + + * fastNLOCoeffAddBase.cc: fastNLOCoeffAddBase.cc: default initialize the + default ctor + + * fastNLOCoeffBase.h: add comment for virtual destructor. + + * fastNLOCoeffAddBase.cc, fastNLOCoeffAddBase.h, fastNLOCoeffAddFix.cc, + fastNLOCoeffAddFix.h, fastNLOCoeffAddFlex.cc, fastNLOCoeffAddFlex.h, + fastNLOCoeffBase.cc, fastNLOCoeffBase.h, fastNLOCoeffData.cc, + fastNLOCoeffData.h, fastNLOCoeffMult.cc, fastNLOCoeffMult.h: do not create + a default ctor for the *Coeff classes + + * fastNLOTable.cc: fastNLOTable.cc: default initialize all members in + fastNLOTable default ctor + + * fastNLOCoeffAddBase.cc, fastNLOCoeffAddFix.cc, fastNLOCoeffBase.cc, + fastNLOCoeffData.cc, fastNLOCoeffMult.cc, fastNLOCoefficients.cc, + fastNLOConstants.h.in, fastNLOTable.cc, fastNLOTools.cc, fastNLOTools.h: + add separator variable fastNLO::sep which contains the delimitingcharacter + between two entries in a fastNLO table. Set to "\n". + + * fastNLOTable.cc, fastNLOTable.h: clean up code a bit, but writing still + not working as expected. + +2016-11-24 DanielBritzger + + * fastNLOInterpolBase.h: a bit documentation + + * fastNLOInterpolBase.h: fix sign issue + + * fastNLOInterpolBase.cc, fastNLOInterpolBase.h: third-root of log10(x) + + * fastNLOCreate.cc, fastNLOGeneratorConstants.h, fastNLOInterpolBase.cc, + fastNLOInterpolBase.h, fastNLOReader.cc, fastNLOTable.cc: new distance + measures, new option for number of x-nodes, improved warning message if no + LO contribution found. + +2016-11-23 sieber + + * zstr.hpp: add the corresponding license to the zstr header code. + + * fastNLOCreate.cc, fastNLOTable.cc, fastNLOTable.h: use std::ostream of + uncompressed file writing and zstr::ostream forcompressed output. + +2016-11-23 rabbertz + + * fastNLOConstants.h.in, fastNLOCreate.cc, fastNLOTable.cc, + fnlo-tk-example.cc, fnlo-tk-statunc.cc: Deal with config.h + +2016-11-23 sieber + + * fastNLOTable.cc: second try for correct variable name LIBZ + + * fastNLOConstants.h.in, fastNLOCreate.cc, fastNLOTable.cc: actually use + HAVE_... variable + +2016-11-23 rabbertz + + * fastNLOCreate.cc, fastNLOGeneratorConstants.h, fastNLOTable.cc, + fastNLOTable.h: Try writing gzipped tables + +2016-11-23 sieber + + * fastNLOTable.cc: add explizit check when reading file if zlib support is + compiled. + +2016-11-23 rabbertz + + * Makefile.am: Distribute header file + + * configure.ac: Require compiler with C++11 support + +2016-11-23 sieber + + * strict_fstream.hpp, zstr.hpp: adapt for no zlib found case + +2016-11-23 rabbertz + + * configure.ac: Add zlib if available + +2016-11-23 sieber + + * fastNLOTable.cc, fastNLOTable.h, strict_fstream.hpp, zstr.hpp: initial + commit with (not yet compiling) support for reading tab.gz files + +2016-11-22 sieber + + * COPYING: replace LICENSE link with real file. + +2016-11-21 DanielBritzger + + * fnlo-tk-append.cc: enable to use fnlo-tk-append to run with one table + only, e.g. if this one sold be normalised. + +2016-11-16 rabbertz + + * InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_stat.log, + InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_stat.log, + fnlo-tk-cattest.pl.in, fnlo-tk-cppnormtest.pl.in, + fnlo-tk-cppscalestest.pl.in, fnlo-tk-cpptest.pl.in, + fnlo-tk-erasetest.pl.in, fnlo-tk-erasetest2.pl.in, + fnlo-tk-mergetest.pl.in, fnlo-tk-stattest.pl.in: Remove fragile tail by + robust grep; add internal exec path for checks + +2016-11-03 rabbertz + + * fnlo-tk-yodaout.cc: Add optional NP factor for printout + +2016-11-03 DanielBritzger + + * fastNLOCreate.cc, fastNLOCreate.h, fastNLOReader.cc, fastNLOReader.h: + small improvements for warmup tables. + +2016-10-31 DanielBritzger + + * fastNLOCreate.cc, fastNLOCreate.h, fastNLOReader.cc: enable fixed scale + tables for DIS + +2016-10-27 DanielBritzger + + * fastNLOCreate.cc, fastNLOTable.cc: improve writing of warmup tables if a + fixed scale is used. + +2016-10-26 DanielBritzger + + * fastNLOCreate.cc: improve warmup writing + +2016-10-25 DanielBritzger + + * fastNLOCreate.cc: minor bugfixes + +2016-10-24 rabbertz + + * Makefile.am, NJetEvents_0-0-2.tab.gz, NJetEvents_0-0-2_cpp.log, + NJetEvents_2-2-2.tab.gz, NJetEvents_2-2-2_cpp.log, NJetEvents_2-2.tab.gz, + NJetEvents_2-2_cpp.log, NJetEvents_norm_1-12.tab.gz, + NJetEvents_norm_1-12_cppnorm.log, NJets.tab.gz, + NJets_born-2jet_0000.tab.gz, NJets_born-2jet_0001.tab.gz, + NJets_born-2jet_0002.tab.gz, NJets_born-2jet_stat.log, + NJets_born-2jet_stat_0000.tab.gz, NJets_born-2jet_stat_0001.tab.gz, + NJets_born-2jet_stat_0002.tab.gz, NJets_nlo-2jet_0100.tab.gz, + NJets_nlo-2jet_0101.tab.gz, NJets_nlo-2jet_0102.tab.gz, + NJets_nlo-2jet_stat.log, NJets_nlo-2jet_stat_0100.tab.gz, + NJets_nlo-2jet_stat_0101.tab.gz, NJets_nlo-2jet_stat_0102.tab.gz, + configure.ac, fnlo-tk-cattest.pl, fnlo-tk-cattest.pl.in, + fnlo-tk-cppnormtest.pl, fnlo-tk-cppnormtest.pl.in, + fnlo-tk-cppscalestest.pl, fnlo-tk-cppscalestest.pl.in, fnlo-tk-cpptest.pl, + fnlo-tk-cpptest.pl.in, fnlo-tk-erasetest.pl, fnlo-tk-erasetest.pl.in, + fnlo-tk-erasetest2.pl, fnlo-tk-erasetest2.pl.in, fnlo-tk-mergetest.pl, + fnlo-tk-mergetest.pl.in, fnlo-tk-stattest.pl, fnlo-tk-stattest.pl.in: + Finalise VPATH compatible checks for toolkit + +2016-10-22 rabbertz + + * InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_0000.tab.gz, + InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_0001.tab.gz, + InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_0002.tab.gz, + InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_stat.log, + InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_stat_0000.tab.gz, + InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_stat_0001.tab.gz, + InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_stat_0002.tab.gz, + InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_0100.tab.gz, + InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_0101.tab.gz, + InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_0102.tab.gz, + InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_stat.log, + InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_stat_0100.tab.gz, + InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_stat_0101.tab.gz, + InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_stat_0102.tab.gz, + InclusiveNJets_fnr0001midpHT_I723509_v23_fix.tab.gz, Makefile.am, + fnlo-tk-mergetest.pl, fnlo-tk-stattest.pl: Add merge and statunc tests + + * fnlo-tk-statunc.cc: Fix two empty space prints + + * Makefile.am, SteerModify_EraseBins.str, SteerModify_EraseBins2.str, + fnl1014_I902309_2.tab.gz, fnlo-tk-erasetest.pl, fnlo-tk-erasetest2.pl: Add + erase bin tests + + * InclusiveNJetEvents_fnl5662i_v23_fix_norm_1-12.tab.gz, + InclusiveNJetEvents_fnl5662i_v23_fix_norm_1-12_cppnorm.log, Makefile.am, + fnl1014_I902309_2-2_cppscales.log, fnlo-tk-cppnormtest.pl, + fnlo-tk-cppscalestest.pl: Tests 3 und 4 + +2016-10-21 rabbertz + + * configure.ac: One more fix + + * configure.ac: Establish test suite with two tests + working in rev 2279; doxygen not alway remade anymore + + * InclusiveNJetEvents_fnl5662i_v23_fix_0-0-2.tab.gz, + InclusiveNJetEvents_fnl5662i_v23_fix_0-0-2_cpp.log, + InclusiveNJetEvents_fnl5662i_v23_fix_2-2-2.tab.gz, + InclusiveNJetEvents_fnl5662i_v23_fix_2-2-2_cpp.log, + InclusiveNJetEvents_fnl5662i_v23_fix_2-2.tab.gz, + InclusiveNJetEvents_fnl5662i_v23_fix_2-2_cpp.log, Makefile.am, Modify, + check, configure.ac, fastNLOGeneratorConstants.h, + fnl1014_I902309_2-2_cpp.log, fnlo-tk-cattest.pl, fnlo-tk-cpptest.pl, + modify, scripts: Establish test suite with two tests working in rev 2279; + doxygen not alway remade anymore + + * Establish test suite with two tests working in rev + 2279; doxygen not alway remade anymore + +2016-10-20 DanielBritzger + + * fastNLOCoeffAddBase.cc, fastNLOCreate.cc, fastNLOPDFLinearCombinations.cc, + fastNLOPDFLinearCombinations.h, fastNLOReader.cc, fastNLOTable.cc: updates + for NNLOJET + +2016-10-20 rabbertz + + * Makefile.am, check, configure.ac, fnl1014_I902309_2-2.tab.gz, + fnl1014_I902309_2-2_cpp.log, fnlo-tk-cpptest.pl, scripts: Start test suite + +2016-10-19 DanielBritzger + + * fastNLOCreate.cc, fastNLOTable.cc, fastNLOTable.h: remove Ncontrib, Ndata, + Nmult + + * Makefile.am, fastNLOBase.cc, fastNLOBase.h, fastNLOCreate.h, + fastNLOTable.cc, fastNLOTable.h, fastnlo.i, fnlo-tk-modify.cc: remove + fastNLOBase. Now included in fastNLOTable + + * fastNLOCreate.cc, fastNLOEvent.h: small updates + + * fastNLOTable.cc: bugfix + +2016-10-18 rabbertz + + * fastNLOCreate.cc, fastNLOTable.cc: Fix issue in warmupfile naming; add + info writeout ncontrib in write table + +2016-10-18 DanielBritzger + + * fastNLOCreate.cc: read parton combinations from steering file only if + those are NOT passes by the processConstants + +2016-10-15 rabbertz + + * fnlo-tk-cppread.cc: Add option to loop over all PDF members instead of + scales + + * configure.ac, fnlo-tk-example.cc: Enable conditional compile w/o ROOT + +2016-10-14 rabbertz + + * fastNLOTable.cc, fastNLOTable.h, fnlo-tk-cppread.cc, fnlo-tk-statunc.cc: + Enable catenation also for INormFlag=2 tables + + * Makefile.am, configure.ac, fnlo-tk-statunc.cc: Make statunc available also + without YODA via preprocessor defines + +2016-10-11 rabbertz + + * fastNLOCreate.cc, fastNLOCreate.h, fastNLOGeneratorConstants.h, + speaker.cc: Fix issue with warmup filename when called via NLOjet++ + interface + +2016-10-07 rabbertz + + * fastNLOCoeffAddBase.cc, fastNLOCoeffBase.cc, fastNLOTable.cc: More fixes + of catenability check + + * fastNLOBase.cc, fastNLOTable.cc: Fix of catenability check + +2016-10-07 bschillinger + + * fastNLOTable.h: remove function declaration which does not exist. + +2016-10-07 DanielBritzger + + * fastNLOCoeffAddBase.h, fastNLOCreate.cc, fastNLOCreate.h: more ideas for + reference table + +2016-10-06 DanielBritzger + + * fastNLOCoeffAddBase.h, fastNLOCreate.cc, fastNLOCreate.h: remove redundant + IsRef flag + + * fastNLOCreate.cc, fastNLOCreate.h, fastNLOLHAPDF.h, fastNLOReader.h: first + code for refernce tables + +2016-10-04 rabbertz + + * fnlo-tk-statunc.cc: Common setup for all fnlo-tk- tools. Final checks to + be done. + + * fnlo-tk-yodaout.cc: Common setup for all fnlo-tk- tools. Final checks to + be done. + + * fnlo-tk-rootout.cc: Common setup for all fnlo-tk- tools. Final checks to + be done. + + * fnlo-tk-modify.cc: Common setup for all fnlo-tk- tools. Final checks to be + done. + + * fnlo-tk-merge.cc: Common setup for all fnlo-tk- tools. Final checks to be + done. + + * fnlo-tk-example.cc: Common setup for all fnlo-tk- tools. Final checks to + be done. + + * fnlo-tk-cppread.cc: Common setup for all fnlo-tk- tools. Final checks to + be done. + + * fnlo-tk-cat.cc: Common setup for all fnlo-tk- tools. Final checks to be + done. + + * fnlo-tk-append.cc: Common setup for all fnlo-tk- tools. Final checks to be + done. + + * speaker.cc, speaker.h: Common setup for all fnlo-tk- tools. Final checks + to be done. + +2016-09-30 rabbertz + + * fnlo-tk-append.cc, fnlo-tk-cat.cc: Fix Nevt normalisation problem with + catenated table bins + +2016-09-29 rabbertz + + * fastNLOCoeffAddBase.cc, fastNLOCoeffAddFix.cc, fastNLOCoeffAddFlex.cc, + fastNLOCoeffBase.cc, fastNLOCoeffData.cc, fastNLOCoeffData.h, + fastNLOCoeffMult.cc, fastNLOCoeffMult.h, fastNLOCreate.cc, + fastNLOReader.h, fastNLOTable.cc, fastNLOTable.h, read_steer.cc: Fix some + issues; more checks needed + + * fastNLOCoeffAddBase.cc, fastNLOCoeffAddBase.h, fastNLOCoeffAddFix.cc, + fastNLOCoeffAddFix.h, fastNLOCoeffAddFlex.cc, fastNLOCoeffAddFlex.h, + fastNLOCoeffBase.cc, fastNLOCoeffBase.h, fastNLOCoeffData.cc, + fastNLOCoeffData.h, fastNLOCoeffMult.cc, fastNLOCoeffMult.h, + fastNLOTable.cc, fnlo-tk-cat.cc, fnlo-tk-modify.cc: Some cleanup before + further testing + +2016-09-28 rabbertz + + * fastNLOTable.cc, fnlo-tk-cat.cc, fnlo-tk-modify.cc: Small corrections + +2016-09-27 rabbertz + + * Makefile.am, fastNLOBase.cc, fastNLOBase.h, fastNLOCoeffAddBase.cc, + fastNLOCoeffAddBase.h, fastNLOCoeffAddFix.cc, fastNLOCoeffAddFix.h, + fastNLOCoeffAddFlex.cc, fastNLOCoeffAddFlex.h, fastNLOCoeffBase.cc, + fastNLOCoeffBase.h, fastNLOCoeffData.cc, fastNLOCoeffData.h, + fastNLOCoeffMult.cc, fastNLOCoeffMult.h, fastNLOTable.cc, fastNLOTable.h, + fnlo-tk-cat.cc, fnlo-tk-modify.cc: First version of table bin concatenator + +2016-09-23 rabbertz + + * fnlo-tk-statunc.cc: Change error to warn + + * fastNLOTable.cc, fnlo-tk-merge.cc: Fix bug with Ncontrib I introduced + +2016-09-21 rabbertz + + * Makefile.am, Modify, SteerModify.str, configure.ac, data, + fastNLOCoeffAddBase.cc, fastNLOCoeffAddBase.h, fastNLOCoeffAddFix.cc, + fastNLOCoeffAddFix.h, fastNLOCoeffAddFlex.cc, fastNLOCoeffAddFlex.h, + fastNLOCoeffBase.cc, fastNLOCoeffBase.h, fastNLOTable.cc, fastNLOTable.h, + fnlo-tk-modify.cc, read_steer.cc, read_steer.h: + +2016-09-13 rabbertz + + * fnlo-tk-yodaout.cc: Transfer XsUncertainty fix to yodaout + +2016-09-13 DanielBritzger + + * fastNLOCoeffAddBase.cc: bugfix + + * fastNLOCoeffAddBase.cc: fix repeated output of 'GetX1 not implemented' + +2016-09-12 sieber + + * fastNLOLHAPDF.cc: do not call CalcCrossSection directly from constructor + +2016-09-12 DanielBritzger + + * fastNLOReader.cc: add warning message for correct usage of + GetCrossSection_vs_x1() + +2016-09-12 sieber + + * fastNLOReader.cc: force recalculation of alphas cache when MuR functional + form is set. + +2016-09-09 DanielBritzger + + * fastNLOCoeffAddBase.cc, fastNLOCoeffAddBase.h, fastNLOReader.cc, + fastNLOReader.h: Get cross section as function of x(PDF). Works for DIS + and pp (full-matrix). + +2016-09-09 sieber + + * fastnlo.i: fix pyext for xsunc changes. make clean neccesary. + + * fnlo-tk-example.cc: fix for xs unc. + +2016-09-09 DanielBritzger + + * fastNLOLHAPDF.cc, fastNLOReader.cc, fnlo-tk-rootout.cc: fixes for + XsUncertainty + + * fastNLOConstants.h.in, fastNLOReader.cc, fastNLOReader.h: new option: Set + scale to be constant for flex-scale tables. Fix for python-interface. + +2016-09-09 rabbertz + + * fastNLOTable.cc, fastNLOTable.h: Now SetBins is defined ... + +2016-09-09 sieber + + * fastNLOTable.h: remove undefined member. + +2016-09-06 rabbertz + + * fastNLOCoeffAddFlex.cc: Now should work for flex-tables as well + + * fastNLOBase.cc, fastNLOBase.h, fastNLOCoeffAddBase.cc, + fastNLOCoeffAddBase.h, fastNLOCoeffAddFix.cc, fastNLOCoeffAddFix.h, + fastNLOCoeffAddFlex.cc, fastNLOCoeffAddFlex.h, fastNLOCoeffBase.cc, + fastNLOCoeffBase.h, fastNLOCoeffData.cc, fastNLOCoeffData.h, + fastNLOCoeffMult.cc, fastNLOCoeffMult.h, fastNLOConstants.h.in, + fastNLOPDFLinearCombinations.cc, fastNLOReader.cc, fastNLOReader.h, + fastNLOTable.cc, fastNLOTable.h, fastNLOTools.h, fnlo-tk-cppread.cc, + fnlo-tk-example.cc, fnlo-tk-modify.cc, fnlo-tk-rootout.cc, + fnlo-tk-statunc.cc, fnlo-tk-yodaout.cc: fnlo-tk-modify works for fix + tables; flex to be done; heavily improved print-out setup + +2016-07-18 rabbertz + + * fnlo-tk-modify.cc: Reactivate fnlo-tk-modify within Toolkit; works but + only for trivial; needed bin cut out + +2016-06-20 DanielBritzger + + * read_steer.cc: minor bugfix if multiple include's are forming a table + + * read_steer.cc: minor bugfix if multiple include's are forming a table + +2016-06-17 DanielBritzger + + * fastNLOCRunDec.cc, fastNLOLHAPDF.cc: bugfixed from D. Maitre + +2016-06-13 sieber + + * fastnlo.i: redef struct for python wrapper. + + * fastnlo.i: also wrap fastNLOCRunDec. + + * fastNLOLHAPDF.h: make GetXFX and EvolveAlphas virtual so they can be + overridden. + +2016-06-07 rabbertz + + * fnlo-tk-cppread.cc: Set as to default + + * fnlo-tk-cppread.cc, fnlo-tk-statunc.cc, fnlo-tk-yodaout.cc: Some + consistency changes + +2016-05-22 rabbertz + + * fnlo-tk-example.cc, fnlo-tk-rootout.cc, fnlo-tk-yodaout.cc: Comment + improved + +2016-05-04 DanielBritzger + + * fastNLOGeneratorConstants.h: improve check of warmup values + + * fastNLOCreate.cc, fastNLOGeneratorConstants.h: improve check of warmup + values + + * fastNLOCreate.cc, fastNLOCreate.h, fastNLOGeneratorConstants.h: enable to + pass warmup-values in constructor + + * fastNLOCreate.cc, fastNLOCreate.h: modify constructor: warmup file is + needed for steering-less initialisation + + * fastNLOCreate.cc, fastNLOCreate.h, fastNLOGeneratorConstants.h: + restructure fastNLOCreate constructors and add possibility to pass all + steering flags in constructor (besides warmup-values) + +2016-04-27 DanielBritzger + + * fastNLOCreate.h: write table and pass event weight + +2016-03-19 rabbertz + + * fastNLOCreate.cc: Changes for use with nnlo-bridge + +2016-03-11 Public prerelease of the fastNLO_toolkit package version 2.3.1pre, revision 2212 + ================================================================================ + +2016-03-11 rabbertz + + * fnlo-tk-cppread.cc, fnlo-tk-statunc.cc, fnlo-tk-yodaout.cc: Change def. + PDF from CT10nlo to CT14nlo + + * fastNLOLHAPDF.h, fastNLOReader.cc: Fix pdf array size issue; allowed now + either 13 or 14; used only 13 + + * Makefile.am, configure.ac: Adapt toolkit to autotools-enabled QCDNUM; old + QCDNUM libs not supported anymore + +2016-03-03 DanielBritzger + + * fastNLOReader.cc: adjust warning/error message for photon PDF. + +2015-11-03 rabbertz + + * fnlo-tk-rootout.cc: Little issues fixed with ROOT histo producer + +2015-10-29 rabbertz + + * fnlo-tk-rootout.cc: Some improved labelling + + * Makefile.am, fastNLOTable.cc, fastNLOTable.h, fnlo-tk-rootout.cc: Add + producer for ROOT files with xsections & uncertainties + +2015-10-29 DanielBritzger + + * fastNLOCoeffBase.cc, fastNLOReader.cc: remove unneeded includes + +2015-10-27 rabbertz + + * fastNLOReader.cc: Remove leftover debug couts + + * fnlo-tk-cppread.cc, fnlo-tk-yodaout.cc: Adapt eval. codes to optional + normalization and changes for k factors + + * fastNLOCoeffAddFix.cc, fastNLOCoeffBase.cc, fastNLOLHAPDF.cc, + fastNLOLHAPDF.h, fastNLOReader.cc, fastNLOReader.h, fastNLOTable.cc, + fastNLOTable.h: Implement normalization for same table; add lnorm arg to + xs and uncertainty calc; deprecate kFactors and XSection_LO + +2015-10-21 sieber + + * fastNLOLHAPDF.cc, fastNLOLHAPDF.h, fastNLOReader.cc, fastNLOReader.h: add + constructors to calculate crosssections from fastNLOTable instances + without needingto writeout tables to files. + +2015-10-14 dhaitz + + * fastNLOCreate.cc: fastNLOCreate.cc: added warning + + * fastNLOReader.cc, fastNLOReader.h: fastNLOReader: add + GetScaleUncertaintyVec function, needed for python usage (like + GetPDFUncertaintyVec) + +2015-10-08 sieber + + * HoppetInterface.cc: possible fix for lhapdf <--> hoppet issue. + +2015-10-06 rabbertz + + * TODO, fastNLOBase.cc, fastNLOTable.cc, fnlo-tk-cppread.cc, + fnlo-tk-merge.cc, fnlo-tk-statunc.cc, fnlo-tk-yodaout.cc: Some output + unifications + +2015-10-01 rabbertz + + * fastNLOCreate.cc: Small change in info/warnings + + * read_steer.cc: Revert back overwriting from steering + +2015-09-30 rabbertz + + * read_steer.cc: Fix inversion of {} with if statement + + * read_steer.cc, read_steer.h: read_steer changes for use with mcgrid + + * Makefile.am, fnlo-tk-modify.cc: + + * fastNLOBase.h: Kill superfluous whitespace + +2015-09-28 rabbertz + + * fnlo-tk-statunc.cc: Add PDF choice to stat. uncertainty + +2015-09-24 rabbertz + + * read_steer.cc, read_steer.h: Reduced verbosity of read_steer, changed + philosophy so new values overwrite previous ones + + * fastNLOCreate.cc, fastNLOCreate.h, fastNLOGeneratorConstants.h: Added + checks on properly set process constants + +2015-09-18 sieber + + * fastNLOHoppet.cc, fastNLOHoppet.h, fastNLOHoppetAs.cc, fastNLOHoppetAs.h, + fastNLOQCDNUMAS.cc, fastNLOQCDNUMAS.h: fix namespaces in hoppet and + qcdnum. + +2015-09-17 sieber + + * fastNLOAlphas.h, fastNLOBase.h, fastNLOCRunDec.h, fastNLOCoeffAddBase.h, + fastNLOCoeffAddFix.h, fastNLOCoeffAddFlex.h, fastNLOCoeffBase.cc, + fastNLOCoeffBase.h, fastNLOCoeffData.h, fastNLOCoeffMult.h, + fastNLOCoefficients.h, fastNLOCreate.cc, fastNLOCreate.h, + fastNLODiffH12006FitB.h, fastNLODiffReader.h, fastNLODiffUser.cc, + fastNLODiffUser.h, fastNLOHoppet.h, fastNLOHoppetAs.h, + fastNLOInterpolBase.h, fastNLOInterpolCatmullRom.h, + fastNLOInterpolLagrange.h, fastNLOInterpolLinear.h, + fastNLOInterpolOneNode.h, fastNLOLHAPDF.cc, fastNLOLHAPDF.h, + fastNLOPDFLinearCombinations.h, fastNLOQCDNUMAS.h, fastNLOReader.h, + fastNLOTable.cc, fastNLOTable.h, fastNLOTools.h, fastNLOUserBlock.h: + removed all using namespaces ... from headers and set the std::/fastNLO:: + explicitly. + + * fastNLOLHAPDF.cc, fastNLOLHAPDF.h: adapt includes + + * fastNLOLHAPDF.cc, setup.py.in: swig is stronger than my :( + +2015-09-16 sieber + + * fastNLOLHAPDF.h: use correct namespace. + +2015-09-16 rabbertz + + * fnlo-tk-statunc.cc: Fix char concatenation issue + + * fnlo-tk-statunc.cc: Add / to paths; break loop to avoid multiple + occurrences of same table + +2015-09-15 rabbertz + + * fnlo-tk-statunc.cc: Work on print out + + * fnlo-tk-statunc.cc: Work on print out + + * fnlo-tk-statunc.cc: Add forgotten include + + * Makefile.am, fnlo-tk-statunc.cc: Add executable to derive stat. + uncertainty from sample of calculations with equal weight + + * fastNLOLHAPDF.cc, fnlo-tk-merge.cc, fnlo-tk-yodaout.cc: Some trivial + changes + +2015-09-10 Public prerelease of the fastNLO_toolkit package version 2.3.1pre, revision 2163 + ================================================================================ + +2015-09-10 rabbertz + + * NEWS: Edited ChangeLog & NEWS for new prerelease + + * fnlo-tk-yodaout.cc: Make yodaout fit for LO & NNLO output + +2015-09-09 DanielBritzger + + * fastNLOCoeffBase.cc, read_steer.h: missing commits + + * fastNLOCoeffAddBase.cc, fastNLOCoeffAddFix.cc, fastNLOCoeffAddFix.h, + fastNLOCoeffAddFlex.cc, fastNLOCoeffAddFlex.h, fastNLOTable.cc: Check more + carefully compatibility of tables for merging and adding. Print warning if + something goes wrong, but continueing. + +2015-09-07 DanielBritzger + + * fastNLOTable.h, read_steer.cc, read_steer.h: update for read_steer + +2015-09-04 rabbertz + + * fastNLOCoeffAddBase.h, fastNLOTable.cc: Fix issue with x-node info + printout + +2015-09-03 rabbertz + + * fastNLOLHAPDF.cc: Small fixes + + * fastNLOLHAPDF.cc: Fix issue with NNPDF uncertainty + +2015-09-02 DanielBritzger + + * read_steer.cc, read_steer.h: Update for read_steer when parsing the + command line + +2015-08-31 sieber + + * fastnlo.i: try to circumvent the nested struct problem in pyext with the + stone-age version of swig installed on slc6. + +2015-08-31 rabbertz + + * fnlo-tk-append.cc, fnlo-tk-merge.cc: Note, the -1 indicator is not active + in fnlo-tk-append. It again writes 1 for the moment to avoid + complications. + +2015-08-30 rabbertz + + * fastNLOTable.cc: Add printout of no. of x nodes + +2015-08-29 rabbertz + + * fnlo-tk-append.cc, fnlo-tk-merge.cc: Change Daniels no-merge indicator + from Nevt 1 to -1; Nevt filling in mcgrid currently only correct when + using 1 ... + + * fnlo-tk-cppread.cc, fnlo-tk-example.cc, fnlo-tk-yodaout.cc: Fix remaining + issues in example, cppread, and yodaout + + * configure.ac, fastNLOConstants.h.in, fastNLOLHAPDF.cc, fastNLOLHAPDF.h, + fastNLOReader.cc, fastNLOReader.h, fnlo-tk-cppread.cc, fnlo-tk-example.cc, + fnlo-tk-yodaout.cc: Simplify return object of uncertainties to struct of 3 + vectors; propagate changes into executables; fix RivetID issue in yodaout; + unify commands + +2015-08-28 rabbertz + + * configure.ac: Fix issue with LHAPDF6 in configure.ac + + * fnlo-tk-cppread.cc, fnlo-tk-yodaout.cc: Adapt printout for LHAPDF5/6; + apply same trick from Daniel to yodaout; accept unchanged Rivet_ID without + capital letter for 1-dim distro + + * fastNLOCreate.cc: Switch of unnecessary warning in parton combinations + +2015-08-26 DanielBritzger + + * fastNLOLHAPDF.cc, fastNLOLHAPDF.h, fnlo-tk-example.cc: Simple getter for + PDF uncertainties from LHAPDF + + * fnlo-tk-cppread.cc, fnlo-tk-example.cc: adapt example programs for LHAPDF6 + +2015-08-25 Public prerelease of the fastNLO_toolkit package version 2.3.1pre, revision 2143 + ================================================================================ + +2015-08-25 rabbertz + + * NEWS, README: Edited ChangeLog, NEWS, README for new prerelease + + * Makefile_root.am: Forgotten removal + + * Makefile.am: Fix docu rebuild problem + + * fnlo-tk-example.cc: Finalize root example + + * Makefile.am, configure.ac, fastNLOConstants.h.in, fnlo-tk-cppread.cc, + fnlo-tk-example.cc, fnlo-tk-example_root.cc: Integrate ROOT histo fill + example + +2015-08-12 sieber + + * fastnlo.i: remove 3d vector wrapping again. + +2015-08-07 DanielBritzger + + * read_steer.cc: catch some problems in ill-defined tables. + +2015-07-21 sieber + + * fastNLOLHAPDF.h: forgot to commit declaration for destructor. + + * fastNLOLHAPDF.cc: add destructor. + + * Makefile.am, fastNLOLHAPDF.h: include LHAPDF also in fastNLOLHAPDF, + otherwise the DEFINES only work arbitrarily. + + * fastnlo.i: include cstddef at correct position, currently it was included + too late. + +2015-06-04 rabbertz + + * Makefile_root.am, fnlo-tk-example_root.cc: Add not yet tested example with + root usage + +2015-06-03 rabbertz + + * fastNLOCreate.cc, fastNLOCreate.h: Change error to warning when skipping + nan/inf; include steering namespace mod. from Enrico for mcgrid + + * fastNLOCreate.cc, fastNLOCreate.h: Replace checkweightisnan by not + checkweightisfinite; activate check also for FASTER fixhhc filling code + +2015-06-01 rabbertz + + * fnlo-tk-merge.cc: Toolkit: Add some more safety measures and errors for + inf or nan when merging tables + + * fastNLOBase.cc, fastNLOCoeffBase.cc, fastNLOTable.cc, fastNLOTools.cc, + fnlo-tk-merge.cc: Toolkit: Add some more safety measures and errors for + inf or nan when merging tables + +2015-05-30 rabbertz + + * configure.ac: Require minimal doxygen version + +2015-05-11 rabbertz + + * fastNLOCreate.cc: Add option to avoid warmup binning check; useful for bin + borders in pi etc + +2015-05-05 stober + + * fastNLOHoppet.cc, fastNLOQCDNUMAS.cc: logging fixes + +2015-05-01 stober + + * fastNLOLHAPDF.cc: + + * fastNLOAlphas.cc, fastNLOBase.cc, fastNLOBase.h, fastNLOCRunDec.cc, + fastNLOCreate.cc, fastNLODiffReader.cc, fastNLOLHAPDF.cc, + fastNLOReader.cc, fastNLOTable.cc, speaker.h: logging is now done using + composition instead of inheritance + +2015-05-01 rabbertz + + * NEWS: Tag prerelease version + + * Makefile.am, configure.ac: Remove empty docu + +2015-04-30 stober + + * fastNLOFI_cc.cc: always recalculate cross section after mur muf changes + + * fastNLOFI_cc.cc, fastNLOFI_f.f: Added interface to + getobsbindimboundsRemoved some debug output + +2015-05-01 Public prerelease of the fastNLO_toolkit package version 2.3.1pre, revision 2087 + ================================================================================ + +2015-04-29 rabbertz + + * fastNLOConstants.h.in, fastNLOLHAPDF.cc, fastNLOLHAPDF.h, + fastNLOReader.cc, fastNLOReader.h, fnlo-tk-yodaout.cc: Add functionality + for PDF uncertainties in yoda-out + +2015-04-28 rabbertz + + * fnlo-tk-example.cc: Use same default PDF in all src files + +2015-04-27 stober + + * fastNLOCreate.cc, fastNLOCreate.h, read_steer.h: adding missing interfaces + for MCgrid + +2015-04-23 rabbertz + + * NEWS, TODO, ToDo_Toolkit.txt, configure.ac: Prepare toolkit prerelease + + * fastNLOCreate.cc: Elevate printout level for warmup + +2015-04-22 rabbertz + + * fastNLOCreate.cc: Workaround warmup binsize consistency check + +2015-04-21 rabbertz + + * fastNLOCreate.cc: Fix problem checking absolute precision of warmup vs. + steering + + * fnlo-tk-yodaout.cc: Reworked fnlo-tk-yodaout to use 2DScatter and not + 1DHIsto from YODA, allows to store scale uncetainties + + * fnlo-tk-append.cc, fnlo-tk-cppread.cc, fnlo-tk-example.cc, + fnlo-tk-merge.cc: Cleanup and changes mostly for doxygen + + * fastNLOTable.cc, fastNLOTable.h: Heavily reworked and rearranged bin + getter setup + + * fastNLOReader.cc, fastNLOReader.h: Fixed PDF a_s caching problem, ignore + mult. corrections; added GetScaleUncertainty; adapted to updated bin get + methods + + * HoppetInterface.h, fastNLOCoeffBase.h, fastNLOCreate.h, fastNLOHoppetAs.h, + fastNLOUserBlock.h: Some cleanup on the way + +2015-04-15 rabbertz + + * fastNLOReader.cc, fnx9999.f: Compatibility update for both readers: + Rescale to publication units if different from internal units + + * fastNLOTable.cc, fastNLOTable.h, fnlo-tk-cppread.cc: Some trivial textual + corrections in toolkit + +2015-02-20 rabbertz + + * fastNLOConstants.h.in, fastNLOReader.cc, fastNLOReader.h: Add product of + scales as one function + +2015-02-15 rabbertz + + * fnlo-tk-yodaout.cc: Remove forgotten debug lines + +2015-02-15 sieber + + * fastNLOConstants.h.in, fastnlo.i: add fastNLOConstants to pyext + +2015-02-12 DanielBritzger + + * fastNLOCreate.cc, read_steer.cc, speaker.cc, speaker.h: small adjustments + to the print-out + +2015-02-07 DanielBritzger + + * fastNLOLHAPDF.cc: LHAPDF6 patch. More work needed to adjust all methods + also for LHAPDF6 + +2015-02-06 DanielBritzger + + * fastNLOReader.cc: re-activate faster flexible-scale code + +2015-02-01 rabbertz + + * Makefile.am: Some adaptations for doxygen + + * Makefile.am, doxygen: Some adaptations for doxygen + + * Makefile.am, doxygen.cfg, fastNLOCreate.h: Some adaptations for doxygen + + * fastNLOReader.cc: Eliminate two warnings + +2015-01-30 rabbertz + + * fastNLOCreate.cc: Include Enrico´s bugfix + + * fastNLOReader.cc, fastNLOReader.h: Fix cross section rescaling in reader + and remove code multiplication + +2015-01-27 rabbertz + + * fastNLOPDFLinearCombinations.cc: Add some comment lines add typical + debugging intercept + +2015-01-27 DanielBritzger + + * read_steer.cc, read_steer.h: New feature for read_steer: set default + namespace name. + +2015-01-26 DanielBritzger + + * read_steer.cc, read_steer.h: update read_steer with some functionality + +2015-01-23 DanielBritzger + + * fastNLOCreate.cc, fastNLOReader.cc: test flex-scale fixes + +2015-01-21 DanielBritzger + + * fastNLOCreate.cc: fix + + * fastNLOCreate.cc: xmin->x1 fix also in 'fasterCode' + +2015-01-20 DanielBritzger + + * fastNLOReader.cc, fastNLOTable.cc: proper inheritance of default + constructors + + * fastNLOReader.cc: init member also in (protected) default constructor. + +2015-01-19 DanielBritzger + + * fastNLOCreate.cc, fastNLOCreate.h: temporary test of half matrix + + * fastNLOCreate.cc: temporary test of half matrix + +2015-01-19 rabbertz + + * fastNLOCreate.cc, read_steer.cc: small corrections in toolkit + +2015-01-18 rabbertz + + * read_steer.cc: Unify some read_steer messages + + * fastNLOCreate.cc, fastNLOGeneratorConstants.h, read_steer.cc: Finalized + 1st version of new setup for event cross sections; toolkit adaptations + +2015-01-15 DanielBritzger + + * fastNLOCreate.cc, fastNLOCreate.h: fix GetParameterFromSteering + + * fastNLOLHAPDF.cc: bugfix for LHAPDF5 + +2015-01-14 DanielBritzger + + * CRunDec.cc, CRunDec.h, fastNLOLHAPDF.cc, read_steer.cc, read_steer.h: some + updates to LHAPDF-interface. New options for read_steer. + + * read_steer.h: bugfix + +2015-01-14 rabbertz + + * fastNLOTable.cc: Fix inverted histo interval logic bug, introduced by me + and reported by Enrico + + * fastNLOTable.cc, fastNLOTable.h, read_steer.cc, read_steer.h: Create dijet + example for toolkit with NLOJet++ + +2015-01-13 sieber + + * CRunDec.h: change defines to static variables as Fred sugggested + +2015-01-08 rabbertz + + * read_steer.h: Test on vector in steering fix + +2014-12-22 DanielBritzger + + * read_steer.cc, read_steer.h: add keys to steering + +2014-12-22 rabbertz + + * ax_python_devel.m4: Add for now sometimes erroneous m4 macro + + * fnlo-tk-yodaout.cc: Adapt yodaout to method names renamed by Daniel + + * Makefile.am, configure.ac: Fix some docu/doxygen probs + +2014-12-19 DanielBritzger + + * fastNLOTable.cc, fastNLOTable.h: rename some bin-getters + + * fastNLOCreate.cc: rever overwritten changes + +2014-12-18 rabbertz + + * fnlo-paper.pdf: Clean up + + * Makefile.am, configure.ac, fnlo-paper.pdf: Abandon slc5 stuff and + reactivate Doxygen support + + * fastNLOTable.cc: Update for 3d output + + * fnlo-tk-cppread.cc: Update for 3d output + +2014-12-18 DanielBritzger + + * fastNLOCreate.cc, fastNLOInterpolBase.cc, fastNLOReader.cc: bugfix for + ambigously defined isnan in c++0x + +2014-12-17 rabbertz + + * fastNLOCreate.cc, fastNLOTable.cc, fastNLOTable.h, fnlo-tk-cppread.cc: + Remove debug output: table creation with 3d works + + * Makefile.am, configure.ac, doxygen.cfg, fastNLOCreate.cc, + fastNLODiffReader.cc, fastNLOReader.cc, fastNLOTable.cc, fastNLOTable.h, + fnlo-paper.pdf, fnlo-paper.tex, fnlo-tk-cppread.cc, speaker.h: More work + on triple-diff + +2014-12-15 rabbertz + + * fastNLOTable.cc, fastNLOTable.h, fnlo-tk-yodaout.cc: Further work and + tests on binning stuff + + * fastNLOCreate.cc, fastNLOReader.cc, fastNLOTable.cc, fastNLOTable.h, + fnlo-tk-yodaout.cc: Further work and tests on binning stuff + +2014-12-13 rabbertz + + * read_steer.cc: Remove unhelpful confusing error messages from read_steer + + * fastNLOCreate.cc, fastNLOTable.cc, fastNLOTable.h: Testing and improving + setup for GetBinBoundaries + +2014-12-10 DanielBritzger + + * fastNLOTable.cc, fastNLOTable.h: new gettes for binning. not tested. only + partially implemented. + +2014-12-10 rabbertz + + * fastNLOCreate.cc: Activate new n-dim. binning code; GetBinNumber for 3d + needed ... + +2014-12-10 DanielBritzger + + * read_steer.h: bugfix getexist + +2014-12-09 rabbertz + + * fastNLOCreate.cc, fastNLOCreate.h: Test Daniels read steer name check + + * fastNLOReader.cc: trivial + +2014-12-06 rabbertz + + * fastNLOReader.cc: Fix double inversion of x1bin, x2bin naming + +2014-12-05 DanielBritzger + + * fastNLOReader.cc: bugfix full-matrix notation calcpdflinearcombination + + * fastNLOReader.cc: bugfix full-matrix notation calcpdflinearcombination + +2014-12-04 DanielBritzger + + * fastNLOCreate.cc: x-mess cleanup part 1 (create) + +2014-12-04 rabbertz + + * fastNLOTable.cc: Comments + + * fastNLOCreate.cc: ND binning + +2014-12-04 DanielBritzger + + * fastNLOTable.h: draft for bin-getters + + * fastNLOTable.h: draft for bin-getters + +2014-11-24 DanielBritzger + + * fastNLOCreate.cc, fastNLOCreate.h, fnlo-paper.pdf, fnlo-paper.tex: + Schleife read_steer::GetExist() durch fastNLOCreate + +2014-11-20 rabbertz + + * fastNLOCreate.cc, fastNLOCreate.h, fastNLOTable.cc, fastNLOTable.h: Save + work from laptop ...; recharge failing + +2014-11-18 DanielBritzger + + * read_steer.h: Getters for existence of steering values + + * fastNLOLHAPDF.cc, fastNLOLHAPDF.h: fix get alpha_s(MZ) from LHAPDF + + * fastNLODiffH12006FitB.h: diffractive things + + * speaker.cc, speaker.h: bugfix speaker reported by D. Maitre + +2014-11-17 rabbertz + + * Alphas.cc, fastNLOBase.cc, fastNLOConstants.h.in, fastNLOCreate.cc, + fastNLOReader.cc, fastNLOTable.cc, fastNLOTable.h, fnlo-tk-cppread.cc, + fnlo-tk-yodaout.cc, speaker.cc: Fixed 2-dim/1-dim problem in yodaout; some + unifying in printouts + +2014-11-11 rabbertz + + * Makefile.am, configure.ac, fnlo-tk-config.in: Add fnlo-tk-config script + like in fastjet, lhapdf, rivet, ... + +2014-10-29 DanielBritzger + + * fastNLOReader.cc: bugfix calcpdfchecksum + +2014-10-08 DanielBritzger + + * fastNLOCreate.cc: reduce warmup-x a bit + +2014-10-01 DanielBritzger + + * fnlo-paper.pdf, fnlo-paper.tex: paper and manual first structure + +2014-09-03 rabbertz + + * fastNLOReader.cc: Put scaling for kPublicationUnits also into + CalcReferenceCrossSection and ScaleVariations + + * fastNLOBase.h, fastNLOReader.cc: tk reader: Rescale potentially different + IXSectionUnits to Ipublunits, if kPublicationUnits are requested + +2014-09-02 styros + + * fnlo-tk-yodaout.cc: Made it pretty + +2014-09-01 styros + + * fnlo-tk-yodaout.cc: fastnlo off naming + +2014-08-29 sieber + + * fnlo-tk-yodaout.cc: reindented source code, added some error messages and + offset counting + +2014-08-29 rabbertz + + * fnlo-tk-yodaout.cc: Fix initialization bug + +2014-08-29 styros + + * fnlo-tk-yodaout.cc: Finalised, more readable and with comments + +2014-08-13 styros + + * fnlo-tk-yodaout.cc: "Changed File naming to include PDF and scaling + factors" + +2014-07-30 styros + + * fnlo-tk-yodaout.cc: including scale factors + +2014-07-25 styros + + * fnlo-tk-yodaout.cc: Adapted to new RivetId naming + +2014-07-25 rabbertz + + * : Edit ChangeLog + +2014-07-24 Public prerelease of the fastNLO_toolkit package version 2.3.1pre, revision 1871 + ================================================================================ + +2014-07-24 rabbertz + + * Makefile.am, NEWS, README, configure.ac: Update Release file for new + prerelease; fix CPPFLAGS vs. CXXFLAGS problem for HOPPET support + + * fastNLOInterpolBase.h: Remove meaningless type qualifier on return type + (found by icc compiler) + +2014-07-24 sieber + + * fastNLOHoppet.cc, fastNLOHoppet.h: remove warning + +2014-07-24 rabbertz + + * fastNLOReader.cc, read_steer.cc: Fix two warnings from clang compiler + +2014-07-22 sieber + + * HoppetInterface.cc: Always use nfmax=5 + VFNS for Hoppet as default choice + +2014-07-21 sieber + + * HoppetInterface.cc, HoppetInterface.h, fastNLOHoppet.cc, fastNLOHoppet.h, + fastNLOLHAPDF.h: Modified Hoppet so it is always reinitialized when + InitPDF() is calledNot fully happy yet with initialization of nf. + +2014-07-21 rabbertz + + * Makefile.am, fastNLOConstants.h.in, fastNLOReader.cc, fnlo-tk-cppread.cc: + Some more changes to use FNLO_SOMETHING for the optional stuff + +2014-07-21 sieber + + * fastNLOReader.cc: removed all preprocessor #ifdefs and changed it to the + way Klaus implemented it in thefastNLOConstants. This works because gcc + removes constant conditionals which cannot the reached.Therefore no symbol + lookup error is thrown. + + * fnlo-tk-cppread.cc: accidentally committed commented code partaccidentally + committed commented code parts. Reverted. + + * fastNLOReader.cc, fnlo-tk-cppread.cc: renamed HAVEHOPPET + +2014-07-18 rabbertz + + * fastNLOConstants.h.in, fnlo-tk-cppread.cc: Found solution for tk-cppread + executable taking into account qcdnum and hoppet options + + * fastNLOHoppet.cc, fastNLOHoppetAs.cc, fastNLOLHAPDF.cc, + fastNLOQCDNUMAS.cc: Removed initialization to LHAPDF values for HOPPET, + because PDF might not yet be defined; use PDG instead as for QCDNUM + +2014-07-18 sieber + + * HoppetInterface.cc, fastNLOHoppet.cc, fastNLOHoppet.h, fastNLOHoppetAs.h: + made some function calls virtual. Instead of Hoppet As evolutionthe LHAPDF + evolution has been called. + + * fnlo-tk-cppread.cc: fixed commented include + +2014-07-18 rabbertz + + * Makefile.am: Always distribute fastnlo.i of pyext, also if I didnt use + --with-pyext myself for the distribution package + +2014-07-17 First public prerelease of the fastNLO_toolkit package version 2.3.1pre, revision 1854 + ====================================================================================== + +2014-07-16 rabbertz + + * NEWS, README: Update README etc. + + * configure.ac: No doc for prerelease + +2014-07-16 sieber + + * fastNLOReader.cc: Check explicitly if DIS table when enabling Hoppet scale + variations + +2014-07-15 rabbertz + + * fastNLOCoeffAddBase.cc, fastNLOCoeffAddBase.h, fastNLOCoeffAddFix.h, + fastNLOCoeffAddFlex.h, fastNLOCoeffMult.cc, fastNLOCoeffMult.h, + fastNLOReader.cc, fastNLOTable.cc, fastNLOTable.h, fnlo-tk-cppread.cc: Fix + some output issues of tk cppread + +2014-07-11 rabbertz + + * fnlo-tk-cppread.cc: Add NNLO output to reader + + * fnlo-tk-cppread.cc: Change printout + +2014-07-10 sieber + + * fastNLOReader.cc: added hoppet scale variations for full matrix notation + and partly for DIS.Not fully tested yet. + + * fastNLOCoeffAddBase.h, fastNLOReader.cc, fastNLOReader.h: Added + GetNevt(order) function to fastNLOReader class + +2014-07-09 sieber + + * fastNLOReader.cc: improved GetScaleDescription function + + * fastNLOInterpolBase.cc: renordered initialization list to avoid compiler + warning. + + * fastNLOReader.cc, fastNLOReader.h: getscaledescription function for + fastnloreader + +2014-07-09 rabbertz + + * configure.ac, fastNLOBase.cc, fastNLOConstants.h.in: Another adaptation + for welcome message + + * fastNLOCoeffAddFix.cc, fastNLODiffReader.cc, + fastNLOPDFLinearCombinations.cc, fnlo-tk-yodaout.cc: Fix some warnings + + * configure.ac, fastNLOBase.cc, fastNLOConstants.h.in, fnlo-tk-example.cc, + fnlo-tk-yodaout.cc: Update welcome message + + * fastNLOReader.cc: Restricted reader to pp/ppbar tables (no change in DIS) + + * fastNLOReader.cc, fnlo-tk-cppread.cc: Add warning for average scale when + using flex-tables; adapt write out + +2014-07-08 sieber + + * fastNLOReader.cc: Added fix for ppbar cross section calculation. When + calculating the PDF Linear combinations,the antihadron was not + 'calculated'. + + * fastNLOReader.cc: Commit for Daniel. I forgot about it... + +2014-06-30 styros + + * fnlo-tk-yodaout.cc: Fixed crosssection bug.Implemented ge s functions. + Checked that works with other table too. + +2014-06-27 styros + + * fnlo-tk-yodaout.cc: fixed cross section bug. ImplementedGeorg's functi on + naming + +2014-06-27 sieber + + * fastNLOConstants.h.in: replaced precompiler M_PI which mess up included + headers of yoda packagewith global variables. + +2014-06-27 rabbertz + + * Makefile.am, configure.ac: Optional YODA support implemented; new exe file + doesn´t compile yet + + * Makefile.am, configure.ac, fnlo-tk-yodaout.cc: Start integration of yoda + output + +2014-06-27 styros + + * fnlo-tk-yodaout.cc: yoda histogram code + +2014-06-27 sieber + + * fastNLOTable.cc, fastNLOTable.h: added GetRivetID method to fastNLOTable + (maybe fastNLOReader would be a better place?) + +2014-06-27 styros + + * fastNLOReader.cc: fixed bug in HoppetInterface, + +2014-06-25 sieber + + * fastNLOReader.cc, fastNLOReader.h, fastNLOTable.cc, fastNLOTable.h, + fastnlo.i: Added convenience functions for binning + + * fastNLOReader.cc: changed some precompiler statements to if conditionals + +2014-06-23 rabbertz + + * jheppub.sty, jheppub.sty.orig: Fix problem with jheppub.sty with SLC6 + +2014-06-23 DanielBritzger + + * fastNLODiffReader.cc: Use alpha_s and pdf cache for diffractive cross + sections + +2014-06-22 rabbertz + + * Makefile.am: Put back to previous libdir; add missing HOPPET include files + + * Makefile.am: Put back correct header include dirs + +2014-06-21 rabbertz + + * .svnignore.autotools, converter, nlojet++, reader, toolkit, userkr, v2.0: + Work on svn ignore settings + + * .svnignore.recursive, Makefile.am, arXiv_1109.1310, bits, blackhat, + common, configure.ac, creator, data, difftop, doc, doxygen, ep, example, + fastnlo, fastnloreader, fastnlotk, fastnlotoolkit, fig, figs, + fnl2342b_v22_fix.str, fnl2342b_v22_flex.str, fnl2352v22.str, + fnl2380ak57v22.str, fnl5002pt12.str, fnl5350eta0v22.str, fnlo_int_nlojet, + generators, hadron, include, interface, jetalgos, mcfm5.1-tools, merger, + modifier, nlo-core, nlojet++-4.1.3, paper, patches, proc-dis, proc-hhc, + processor, pyext, reader_cc, reader_f, src: Work on svn ignore settings; + distribute steering files as data to share; install headers and libs into + pkgdirs + + * .svnignore.autotools, converter, nlojet++, reader, toolkit, userkr, v2.0: + Work on svn ignore settings + + * .svnignore.autotools, converter, m4, nlojet++, reader, set_svnignores, + toolkit, userkr, v2.0: Work on svn ignore settings + + * .svnignore.recursive, arXiv_1109.1310, bits, blackhat, common, creator, + difftop, doc, doxygen, ep, example, fastnlo, fastnloreader, fastnlotk, + fastnlotoolkit, fig, figs, fnlo_int_nlojet, generators, hadron, include, + interface, jetalgos, m4, mcfm5.1-tools, merger, modifier, nlo-core, + nlojet++-4.1.3, paper, patches, proc-dis, proc-hhc, processor, pyext, + reader_cc, reader_f, set_svnignores, src: Work on svn ignore settings + + * .svnignore.autotools, .svnignore.m4, .svnignore.recursive, converter, m4, + nlojet++, reader, toolkit, userkr, v2.0: Set selective svnignore patterns + for autogenerated files; documented in .svnignore files + +2014-06-04 sieber + + * HoppetInterface.cc, HoppetInterface.h, fastNLOHoppet.cc, fastNLOReader.cc, + fastNLOReader.h: made GetXFX public and passed fnlo object to + HoppetInterface, so it can use thefnlo::GetXFX() to fill its internal + grids. + +2014-06-02 sieber + + * fastNLOCoeffAddFix.cc, fastNLOCoeffAddFix.h, fastNLOReader.cc, + fastNLOReader.h: Hoppet scale variations + + * Makefile.am: adapted Makefile + + * HoppetInterface.cc, HoppetInterface.h, fastNLOHoppet.cc, fastNLOHoppet.h: + dedicated hoppet interface + + * fastnlo.i, speaker.h: changes to speaker which couldn't be wrapped by + python swig. No Idea why. The declarationwill just be ignored when + wrapping the class. + +2014-05-26 rabbertz + + * Makefile.am, fastNLOCreate.cc, fastNLOCreate.h: Fix problem with ever + decreasing x limits + +2014-05-22 rabbertz + + * fastNLOBase.cc, read_steer.cc, speaker.cc: Some toolkit adaptations + + * Makefile.am: Fix for make distcheck + + * Makefile.am: Fix for make distcheck + + * Makefile.am: Makefile.am adaptations; does still not work with QCDNUM + + * figs: Trivial updates + + * Makefile.am: Trivial updates + + * Makefile.am, configure.ac: Trivial updates + +2014-05-21 rabbertz + + * fastNLOCreate.cc: Comment out x rounding; causes trouble going beloe 1e-6 + +2014-05-21 sieber + + * fastNLOCoeffAddFix.cc: ups. partly reverted. previous change. + + * fastNLOCoeffAddFix.cc, fastNLOCreate.cc, fastNLOCreate.h: Remove compiler + warning by changing int Roundvalues to void and by commenting outnsn and + nst, which are never used. + +2014-05-20 sieber + + * Makefile.am, fastNLOHoppet.cc, fastNLOHoppetAs.cc, fastNLOHoppetAs.h, + fnlo-tk-cppread.cc: Changed Hoppet Interface so that fastNLOHoppet uses + PDF+As interface from Hoppetwhile fastNLOHoppetAs uses PDF evolution from + LHAPDF and As evolution from Hoppet. + + * fastNLOHoppet.h, fastNLOQCDNUMAS.h: revert preprocessor statements from + hoppet/qcdnum headers + +2014-05-19 rabbertz + + * Makefile.am: Update toolkit + +2014-05-16 rabbertz + + * Makefile.am, configure.ac, fastNLOCoeffAddBase.cc, fastNLOCoeffAddFix.cc, + fastNLOCoeffAddFlex.cc, fastNLOCoeffBase.cc, fastNLOConstants.h.in, + fastNLOCreate.cc, fastNLOCreate.h, fastNLODiffReader.cc, + fastNLOInterpolBase.cc, fastNLOInterpolBase.h, + fastNLOPDFLinearCombinations.cc, fastNLOTools.cc: Deal with numerous + simple warnings + + * FastNLOSteering.str, Makefile_DB, blackhat, difftop, fnlttbar000.str, + fnlttbar100.str, interface: Some cleanup + + * Makefile.am: Add compile to cleanfiles + + * fastNLOEvent.h: Add include map + +2014-05-15 rabbertz + + * Makefile.am, configure.ac: Small changes + + * bits, configure.ac, dis-process.h, generators, hhc-process.h, hhc2jet.cc, + hhc3jet.cc, hhc4jet.cc, interface, main_calc.cc, nlo-basic_user.h, + nlo-core, nlo-process_i1f0.h, nlo-process_i2f0.h, nlojet++, + nlojet++-4.1.3, patches, proc-dis, proc-hhc, split.cc, src: Start + generator interfaces + +2014-05-13 sieber + + * fnlo-tk-cppread.cc: reverted old version of fnlo-tk-cppread.cc. Not + working as intended + +2014-05-13 rabbertz + + * fastNLOCoeffAddFix.cc, fastNLOReader.cc, fnlo-tk-cppread.cc: Fix bug in + toolkit reader; on/off switch of NLO was not checked for scale variations + +2014-05-12 DanielBritzger + + * Makefile.am: reactive diffractive DIS version for toolkit + + * fastNLODiffH12006FitB.h, fastNLODiffReader.cc, fastNLODiffReader.h, + fastNLODiffUser.cc, fastNLODiffUser.h: reactive diffractive DIS version + for toolkit + +2014-05-09 sieber + + * Makefile.am, fastNLOHoppet.h, fastNLOQCDNUMAS.h, fnlo-tk-cppread.cc: Pass + Makefile conditionals to preprocessor.Include Hoppet/QCDNUM headers + always, but they are empty if HAVEHOPPET/QCDNUM not defined. + +2014-05-08 rabbertz + + * fastNLOCreate.cc: Change toolkit table version 22000 + +2014-05-06 sieber + + * fastNLOEvent.h, fastNLOGeneratorConstants.h: std namespace types + explicitly mentioned. + +2014-04-26 DanielBritzger + + * fastNLOEvent.h: SetObservableX() + +2014-04-24 DanielBritzger + + * fastNLOCoeffAddBase.cc, fastNLOCoeffAddFlex.cc, fastNLOCoeffBase.cc, + fastNLOCoeffBase.h: fix issue when log^2 terms are included in some + contributions but not in others + +2014-04-19 DanielBritzger + + * fastNLOCreate.cc: force half-matrix notation if 121 or 169 subprocesses + are used + + * fnlo-tk-merge.cc: check if nevt=1 + + * fnlo-tk-example.cc: update + + * Makefile.am: new program fnlo-tk-append + + * fnlo-tk-append.cc: new program fnlo-tk-append + + * fastNLOCoeffAddBase.cc, fastNLOCoeffAddBase.h, fastNLOCoeffAddFix.cc, + fastNLOCoeffAddFix.h, fastNLOCoeffAddFlex.cc, fastNLOCoeffAddFlex.h, + fastNLOCreate.cc, fastNLOCreate.h, fastNLOPDFLinearCombinations.cc: new + program fnlo-tk-append + +2014-04-11 DanielBritzger + + * fnlo-tk-example.cc: Modify fnlo-tk-example + +2014-04-09 rabbertz + + * configure.ac: Changes for prerel. dist + + * Makefile.am, NEWS, README, configure.ac: Changes for prerel. dist + +2014-04-08 DanielBritzger + + * fastNLOPDFLinearCombinations.cc, fastNLOPDFLinearCombinations.h: enable + default 121 and 169 PDF LiCos also in the code + + * fastNLOCoeffAddBase.h, fastNLOCreate.cc, fastNLOCreate.h, + fastNLOGeneratorConstants.h, fastNLOPDFLinearCombinations.cc, + fastNLOPDFLinearCombinations.h: enable to specify PDF LiCos in steering + file and store them in table. + +2014-04-07 DanielBritzger + + * fastNLOCoeffAddBase.cc, fastNLOCoeffAddBase.h, fastNLOCreate.cc: include + possibility to store PDF LiCos in table (write/read routines) + + * fastNLOCoeffAddFlex.cc, fastNLOCreate.cc, fastNLOReader.cc, + fastNLOTools.h: update with option to have log-sqr-mur terms in NLO + +2014-04-06 rabbertz + + * JHEP-policy.pdf: Add JHEP policy statement; seems to fit our needs. + + * Makefile.am, configure.ac, fnlo-paper.tex: JHEP style paper doc in + toolkit/doc/paper works; now fill with content! + + * JHEP-author-manual.pdf, JHEP.bst, Makefile.am, example, + fnlo-old-paper-draft.pdf, fnlo-paper.tex, img1.pdf, img2.pdf, + jhepexample.pdf, jhepexample.tex, jheppub.sty, paper: Prepare JHEP paper + setup + +2014-02-19 DanielBritzger + + * fastNLOPDFLinearCombinations.cc: bugfix + +2014-02-19 sieber + + * Makefile.am, fastNLOAlphas.cc, fastNLOAlphas.h, fastNLOCRunDec.cc, + fastNLOCRunDec.h, fastNLOHoppet.cc, fastNLOHoppet.h, fastNLOLHAPDF.cc, + fastNLOLHAPDF.h, fastNLOQCDNUMAS.cc, fastNLOQCDNUMAS.h: commented out + included headers which are not neccesary for compilation + + * Makefile.am: added crundec to makefile.am + + * fastNLOCRunDec.cc, fastNLOCRunDec.h, fastNLOQCDNUMAS.cc, + fastNLOQCDNUMAS.h: splitted up fastNLOCrunDec and fastNLOQCDNUMAS + + * Makefile.am, fastNLOHoppet.cc, fastNLOHoppet.h: splitup fastNLOHoppet + + * Makefile.am, fastNLOAlphas.cc, fastNLOAlphas.h: splitted fastNLOAlphas + + * Makefile.am, fastNLOLHAPDF.cc, fastNLOLHAPDF.h: splitted fastNLOLHAPDF + + * fastNLOLHAPDF.h: made getters const since the getters in derived class + were const and hiding them. + + * speaker.h: clang complaining about unused parameter + +2014-02-19 stober + + * fastNLOCreate.cc: documentation: brief class description + +2014-02-18 DanielBritzger + + * fastNLOCreate.cc: bugfix. + +2014-02-17 DanielBritzger + + * fastNLOCoeffAddFlex.cc, fastNLOCoeffBase.cc, fastNLOCreate.cc, + fastNLOPDFLinearCombinations.cc, fastNLOPDFLinearCombinations.h, + fastNLOReader.cc, fastNLOTable.cc: enable ONLY LO tables for fixed-scales, + bugfix for printout + + * fastNLOCreate.cc, fastNLOTable.cc: some updates und bugfixes + +2014-02-16 rabbertz + + * configure.ac, fastNLOBase.cc, fastNLOCoeffAddBase.cc, + fastNLOCoeffAddBase.h, fastNLOConstants.h.in, fastNLOCreate.cc, + fastNLOCreate.h, fnlo-tk-cppread.cc, read_steer.cc: tk: Gives now + identical LO fixed-tables; in NLO some differences to be understood ... + +2014-02-15 rabbertz + + * fnlo-tk-cppread.cc: tk: Implement 1-dim printing in tk-cppread; use + speaker functionality + + * README, ToDo_Toolkit.txt, configure.ac, fastNLOTable.cc: tk: Write much + more nicer and elaborate README + + * fastNLOConstants.h.in, fastNLOReader.cc, fastNLOReader.h: tk: Kick out + superfluous parallel NewPhys structure + +2014-02-13 DanielBritzger + + * fastNLOCreate.cc: set ILOord correctly + + * fastNLOCreate.cc, fastNLOGeneratorConstants.h: Name and references for + process, and for generator + + * fastNLOLHAPDF.h: bugfix when changing PDF-filename + + * fastNLOCoeffAddFlex.cc, fastNLOCreate.cc, fastNLOGeneratorConstants.h, + fastNLOReader.cc: put LeadingOrder in ProcessConstants.+ one minor bugfix + +2014-02-12 rabbertz + + * README, fastNLOReader.cc: Update readme + + * Makefile.am: Add missing .h file + + * fastNLOReader.cc, fnlo-tk-example.cc: Adapt printout to 1 dim + +2014-02-12 DanielBritzger + + * fnlo-tk-example.cc: update example + + * fastNLOCoeffAddFlex.cc: update + + * fastNLOTable.h: printout + + * fastNLOCreate.cc: bugfix rounding, include steering flag for rounding + +2014-02-12 rabbertz + + * Makefile.am, fastNLOCreate.cc, fastNLOInterpolCatmulRom.cc, + fastNLOInterpolCatmulRom.h, fastNLOInterpolCatmullRom.cc, + fastNLOInterpolCatmullRom.h, fnlo-tk-cppread.cc: Correct CatmullRom + spelling + +2014-02-12 DanielBritzger + + * fastNLOCreate.cc, fastNLOCreate.h: set globalverbosity in steering + +2014-02-12 rabbertz + + * read_steer.h: Untabify + +2014-02-11 DanielBritzger + + * fastNLOCreate.cc, fastNLOInterpolBase.cc, read_steer.cc: improve output + (and sometimes suppress statements. + + * fastNLOCreate.cc: do not read LeadingOrder + + * fastNLOCreate.cc: hash also for warmup table + + * read_steer.cc: Raute als Kommentar. Info statt Warning wenn tabelle + unkonventionell formatiert. + + * fastNLOCoeffAddBase.cc: f + + * fastNLOBase.cc, fastNLOCoeffAddBase.cc, fastNLOCoeffAddBase.h, + fastNLOCoeffAddFix.cc, fastNLOCoeffAddFix.h, fastNLOCoeffAddFlex.cc, + fastNLOCoeffAddFlex.h, fastNLOCreate.cc, fastNLOCreate.h, + fastNLOPDFLinearCombinations.cc, fastNLOReader.cc, fastNLOTools.cc, + fastNLOTools.h: update. Nevt->double, some bugfixes + +2014-02-10 rabbertz + + * fastNLOCoeffAddFlex.cc: tk: Remove warning + + * fastNLOCoeffAddBase.cc, fastNLOCoeffAddFlex.cc: tk: Remove warning; + untabify + + * fastNLOCoeffAddBase.cc, fastNLOCoefficients.cc: tk: Remove warning; + untabify + + * fastNLOCoefficients.cc, fastNLOTable.cc: tk: Remove warning; untabify + +2014-02-10 sieber + + * setup.py: Deleted setup.py, which is created automatically by setup.py.in + +2014-02-10 rabbertz + + * CRunDec.cc: Fix two warnings in CRunDec + +2014-02-05 DanielBritzger + + * fastNLOCreate.cc, fastNLOCreate.h, fastNLOInterpolBase.cc: Improve x<xmin + warning messages and speed up code by using two x-interpolation instances + (caching is correct). + +2014-02-04 DanielBritzger + + * fastNLOCreate.cc, fastNLOCreate.h, read_steer.cc, read_steer.h: enable to + have multiple fastNLOCreate instance. + +2014-02-02 DanielBritzger + + * fnlo-tk-merge.cc: very minor bugfix + + * fastNLOBase.cc, fastNLOBase.h, fastNLOCoeffAddBase.cc, + fastNLOCoeffAddBase.h, fastNLOCoeffAddFix.cc, fastNLOCoeffAddFix.h, + fastNLOCoeffAddFlex.cc, fastNLOCoeffAddFlex.h, fastNLOCoeffBase.cc, + fastNLOCoeffBase.h, fastNLOCoeffData.cc, fastNLOCoeffData.h, + fastNLOCoeffMult.cc, fastNLOCoeffMult.h, fastNLOCreate.cc, + fastNLOCreate.h, fastNLOTable.cc, fastNLOTable.h, fastNLOTools.cc, + fastNLOTools.h, speaker.cc, speaker.h: 1) cleaned up reading routines, 2) + improve warmup run (needs approx. 30sec), 3) improve output of warmup + table following klaus' suggestion, 4) bugfix speaker + +2014-02-01 DanielBritzger + + * fastNLOBase.cc, fastNLOBase.h, fastNLOCoeffAddBase.cc, + fastNLOCoeffAddBase.h, fastNLOCoeffAddFix.cc, fastNLOCoeffAddFix.h, + fastNLOCoeffAddFlex.cc, fastNLOCoeffAddFlex.h, fastNLOCoeffBase.cc, + fastNLOCoeffBase.h, fastNLOCoeffData.cc, fastNLOCoeffData.h, + fastNLOCoeffMult.cc, fastNLOCoeffMult.h, fastNLOCreate.cc, + fastNLOCreate.h, fastNLOTable.cc, fastNLOTable.h, fastNLOTools.cc, + fastNLOTools.h: Simplify writing routines + + * fastNLOBase.cc, fastNLOBase.h, fastNLOCoeffAddBase.cc, + fastNLOCoeffAddBase.h, fastNLOCoeffAddFix.cc, fastNLOCoeffAddFix.h, + fastNLOCoeffAddFlex.cc, fastNLOCoeffAddFlex.h, fastNLOCoeffBase.cc, + fastNLOCoeffBase.h, fastNLOCoeffData.cc, fastNLOCoeffData.h, + fastNLOCoeffMult.cc, fastNLOCoeffMult.h, fastNLOTable.cc: improved proper + copy constructors. use 'clone' methods. Remove few unneeded functions + +2014-01-31 DanielBritzger + + * fastNLOBase.cc, fastNLOBase.h, fastNLOCoeffAddFix.h, fastNLOCoeffBase.h, + fastNLOReader.cc, fastNLOReader.h, fastNLOTable.cc, fastNLOTable.h: + implement proper copy constructors throughout + +2014-01-31 sieber + + * fastNLOReader.cc: try to implement copy constructor + +2014-01-31 DanielBritzger + + * fastNLOReader.cc, fastNLOReader.h: temporary include + + * fastNLOTable.cc: improved copy constructor + +2014-01-31 sieber + + * setup.py.in: Add missing file setup.py.in + +2014-01-30 sieber + + * fastNLOTable.cc, fastNLOTable.h: Copy constructor for fastNLOTable + + * Makefile.am, configure.ac, fastnlo.i, pyext, setup.py: python ext in + toolkit + +2014-01-29 DanielBritzger + + * ToDo_Toolkit.txt: update of todo list + + * Makefile.am, fastNLOCreate.cc, fastNLOInterpolLinear.cc, + fastNLOInterpolLinear.h: linear interpolation. Use 'Linear' in steering + file + + * Makefile.am, fastNLOCreate.cc, fastNLOInterpolBase.cc, + fastNLOInterpolBase.h, fastNLOInterpolCatmulRom.cc, + fastNLOInterpolLagrange.cc, fastNLOInterpolOneNode.cc, + fastNLOInterpolOneNode.h: Include 'one node' 'interpolation'. Use OneNode + in steering + + * Makefile.am, fastNLOCreate.cc, fastNLOCreate.h, + fastNLOInterpolLagrange.cc, fastNLOInterpolLagrange.h, fastNLOReader.cc: + Lagrange interpolation use 'Lagrange' in steering file + +2014-01-28 rabbertz + + * FastNLOReader.cc, fastNLOTable.cc, fx9999rw.f: reader & tk: unify printout + for each dimension; for idiffbin=1 initialize upbin to be equal to lobin + ==> always defined, but divbyzero if blindly dividing by this bin width + (shouldn't be done anyway) + +2014-01-28 sieber + + * fastNLOBase.h, fastNLOReader.h, fastNLOTable.h: Commented out methods in + toolkit, for which nodefinition is available. Otherwise symbol lookup in + python interfacefails. + +2014-01-28 rabbertz + + * fnlo-tk-cppread.cc: toolkit: output changes + +2014-01-27 rabbertz + + * fastNLOReader.cc, fastNLOTable.cc: toolkit: Account for inverted dim + ordering in output and IDIffBin0; more to do on flexibility here + +2014-01-27 DanielBritzger + + * fastNLOCreate.cc, fastNLOReader.cc: enable full-matrix for flexible scale + in reader and creator + + * fastNLOCreate.cc, fastNLOReader.cc: full-matrix notation for fixed scale + tables now working both in creator and reader. Some if-statements may need + some update. + +2014-01-26 DanielBritzger + + * ToDo_Toolkit.txt: update todo-list. + + * Makefile.am, fastNLOAlphas.h, fastNLOBase.cc, fastNLOCoeffAddFix.cc, + fastNLOCoeffAddFlex.cc, fastNLOCoeffAddFlex.h, fastNLOCoeffBase.cc, + fastNLOCoeffBase.h, fastNLOCreate.cc, fastNLOCreate.h, fastNLOEvent.h, + fastNLOGeneratorConstants.h, fastNLOInterpolCatmulRom.h, fastNLOTable.cc, + fastNLOTools.cc, fastNLOTools.h, read_steer.h: Fix issues with multiple + dimension; More user friendly steering file: optionally without + generator/process specific quantitites; fnloEvent and fnloScenario now in + own file; Read/write flexible scale now also in fastNLOTools.h + +2014-01-24 DanielBritzger + + * fastNLOCreate.cc, fastNLOCreate.h, fastNLOTable.cc: enable user to access + arbitrary labels from steering file. May be very useful for additional + cuts, but be careful with the warmup values! (Function will be necessary + if multiple fastNLOCreate instances are available in future.) + + * fastNLOCreate.cc, fastNLOReader.cc, fastNLOTable.cc: consistent usage of + 1st, 2nd and 3rd dimension internally and for function calls + +2014-01-22 rabbertz + + * ToDo_Reader.txt, ToDo_Toolkit.txt: Updated todo lists for toolkit and + reader + +2014-01-21 DanielBritzger + + * fastNLOCreate.h, fastNLOTools.h: correct doxygen documentation + +2014-01-17 DanielBritzger + + * fastNLOCoeffAddBase.cc, fastNLOCoeffAddBase.h, fastNLOCoeffAddFix.cc, + fastNLOCoeffAddFix.h, fastNLOCreate.cc, fastNLOTools.h: remove ugly + resizetable-functions + + * fastNLOTable.cc: enable merger for fixed scale tables + + * Makefile.am, fastNLOBase.cc, fastNLOBase.h, fastNLOCoeffAddBase.cc, + fastNLOCoeffAddBase.h, fastNLOCoeffAddFix.cc, fastNLOCoeffAddFlex.cc, + fastNLOCoeffBase.cc, fastNLOCoeffBase.h, fastNLOCreate.cc, + fastNLOTable.cc, fastNLOTools.cc, fastNLOTools.h, fastNLOUserBlock.cc, + fastNLOUserBlock.h: Restructure read, write, resize functions + +2014-01-16 DanielBritzger + + * fastNLOCreate.cc: make doxygen documentation + + * fastNLOCreate.h: Try Doxygen format comments + +2014-01-16 rabbertz + + * configure.ac: tk: Small text corrections + + * Makefile.am, fastNLO.cc, fnlo-tk-example.cc: tk: some cleanup + + * doxygen.cfg, fastNLO.cc, fnlo-tk-merge.cc: tk: some formatation fixes + + * ax_prog_doxygen.m4: tk: Add doxygen autoconf macro + + * fastNLO_logo.eps, fastNLO_logo.png, fastNLO_logo_01b_323x80.gif, + fastNLO_logo_01c.gif, fastNLO_logo_01c_280x69.gif, fastNLO_logo_01d.gif, + fastNLO_logo_01d_260x64.gif, fastNLO_logo_646x161.eps, + fastNLO_logo_646x161.png: Rearrange logo collection + +2014-01-15 rabbertz + + * Makefile.am, aminclude.am, configure.ac, doc, doxygen, doxygen.cfg, + fastNLO_logo.eps, fastNLO_logo.png, fastNLO_logo_01c.gif, + fastNLO_logo_01d.gif, fastNLO_logo_200x50.png, fig: tk: First version with + doxygen code documentation; use make doxygen-doc + +2014-01-13 DanielBritzger + + * fastNLOBase.cc, fnlo-tk-merge.cc: correct check for existence of file. + exiting, when fastNLOTable is initiated with non-existing file. + +2014-01-12 rabbertz + + * fnlo-tk-cppread.cc: tk: comment out agaig optional lines for qcdnum/hoppet + test + + * fastNLOReader.cc, fastNLOReader.h: tk: scale variations work now like in + reader + +2014-01-11 DanielBritzger + + * fnlo-tk-merge.cc: include unistd + +2014-01-11 rabbertz + + * Makefile.am, fnlo-merge.cc, fnlo-tk-merge.cc: tk: Fix fnlo-merge etc. cpp, + compile and link flags; nevertheless merge doesnt compile with error + +2014-01-11 DanielBritzger + + * Makefile.am, fastNLO.cc, fnlo-merge.cc: 1. merger, 2. playground + + * fastNLOBase.cc, fastNLOCoeffAddBase.cc, fastNLOCoeffAddBase.h, + fastNLOCoeffAddFix.cc, fastNLOCoeffAddFix.h, fastNLOCoeffAddFlex.cc, + fastNLOCoeffAddFlex.h, fastNLOCoeffBase.cc, fastNLOCoeffBase.h, + fastNLOCoeffData.cc, fastNLOCoeffData.h, fastNLOCoeffMult.cc, + fastNLOCoeffMult.h, fastNLOCreate.cc, fastNLOReader.cc, fastNLOTable.cc, + fastNLOTable.h: Proper definition of sigmatilde throughout + +2014-01-10 rabbertz + + * CRunDec.cc, CRunDec.h, Makefile.am, configure.ac, fastNLOCRunDec.h, + fastNLOConstants.h.in, fastNLOHoppet.h, fastNLOQCDNUMAS.h, + fastNLOTable.cc, fnlo-cppread.cc, fnlo-tk-cppread.cc: tk: central scale + running now also with all external alpha_s evolutions + +2014-01-10 DanielBritzger + + * fastNLOPDFLinearCombinations.cc: kleines Zeichen, grosser effekt + +2014-01-10 rabbertz + + * Alphas.cc, Alphas.h, Makefile.am, fastNLOAlphas.h, fastNLOCoeffAddFix.cc, + fastNLOLHAPDF.h, fastNLOReader.cc, fastNLOTable.cc, fnlo-cppread.cc: tk: + Add GRV a_s evolution; LHAPDF6 mods + +2014-01-09 DanielBritzger + + * fastNLOBase.cc: check correctly for existence of file + + * fastNLOBase.cc, fastNLOCreate.cc, fastNLOTable.cc: enable printout for + fixed tables + +2014-01-09 rabbertz + + * fastNLOCoeffBase.cc, fastNLOTable.cc: tk: Print out correct contr. Id; + implemented part of standard printout for fix tables + +2014-01-08 rabbertz + + * Makefile.am, fastNLOCoeffBase.h, fastNLOReader.cc, fastNLOReader.h: tk: + Avoid segfault in GetIsFlexibleScaleTable; rename exe files to fnlo-tk-... + +2014-01-08 DanielBritzger + + * ToDo_Toolkit.txt: NNLO reader and reorder priorities + +2014-01-07 rabbertz + + * AUTHORS, configure.ac: Add Georg to relevant files as author + +2013-11-24 DanielBritzger + + * Makefile.am, ToDo_Toolkit.txt, fastNLOBase.cc, fastNLOBase.h, + fastNLOCoeffAddBase.cc, fastNLOCoeffAddBase.h, fastNLOCoeffAddFix.cc, + fastNLOCoeffAddFix.h, fastNLOCoeffAddFlex.cc, fastNLOCoeffAddFlex.h, + fastNLOCoeffBase.cc, fastNLOCoeffBase.h, fastNLOCoeffData.cc, + fastNLOCoeffData.h, fastNLOCoeffMult.cc, fastNLOCoeffMult.h, + fastNLOCreate.cc, fastNLOCreate.h, fastNLOInterpolBase.cc, + fastNLOInterpolBase.h, fastNLOInterpolCatmulRom.cc, + fastNLOInterpolCatmulRom.h, fastNLOReader.cc, fastNLOReader.h, + fastNLOTable.cc, fastNLOTable.h, fnlo-cppread.cc, main.cc: New fnlo-merge, + new sandbox, coding style, reader currently not working. + +2013-11-10 DanielBritzger + + * fastNLOCoeffAddFix.cc, fastNLOCoeffAddFix.h, fastNLOCreate.cc: remove not + needed nscalevar + +2013-11-09 DanielBritzger + + * ToDo_Toolkit.txt, fastNLOCoeffAddBase.h, fastNLOCreate.cc, + fastNLOCreate.h: working version of fixed-scale for fastNLOCreate (maybe + more cross checks needed) + +2013-11-08 DanielBritzger + + * fastNLOCoeffAddBase.cc, fastNLOCreate.cc: fixed scale tabels. Work for + catmul-rom interpolatio nin leading order to 99.98%. nlo still wrong. no + scalevar support. + + * ToDo_Toolkit.txt, fnh5001v22.cc: updates + + * fastNLOCreate.cc: bugfix + +2013-11-07 DanielBritzger + + * ToDo_Toolkit.txt, fastNLOCreate.h: todo file + + * fastNLOCoeffAddFlex.cc, fastNLOCreate.cc, fastNLOCreate.h, + fastNLOInterpolBase.cc: toolkit working for DIS (flexible-scale) + +2013-10-06 Notes for very first autotools version of fastNLO_toolkit version 2.1.0, revision 1494: + ======================================================================================= + - Restructured like fastNLO_reader C++ part + - src contains code for one excutable to be made + - fastnlotoolkit contains code for linkable library libfastnlotoolkit to be compiled and linked + - subdir include/fastnlotk contains header files + ==> All include statements in code had to be complemented with "fastnlotk/" + ==> Change in library name and fastnlotk include directory allows simultaneous + installation and use of reader library AND toolkit library without problems + caused by identically named header files + +2013-11-05 DanielBritzger + + * fastNLOCreate.cc, fastNLOCreate.h, fastNLOTable.h: update for even more + convenient warmup-handling + +2013-11-05 rabbertz + + * fastNLOBase.cc: tk: Update copyright line + +2013-10-22 DanielBritzger + + * fastNLOCoeffAddBase.cc, fastNLOCoeffAddBase.h, fastNLOCreate.cc, + fastNLOReader.cc: remove NScale as member-variable. Fis + GetScaleDescription getter. + + * fastNLOTable.h: new getter for dimlabels, and coorrectec main.cc + + * main.cc: new getter for dimlabels, and coorrectec main.cc + + * main.cc: fix main.cc with properly initialized vectors. + +2013-10-22 rabbertz + + * fastNLOConstants.h.in: toolkit: Add missing .in file + +2013-10-21 DanielBritzger + + * fastNLOReader.cc: bugfix for fixed-scale variation when initializing + +2013-10-21 rabbertz + + * fastNLOCreate.cc, fastNLOReader.cc, fastNLOReader.h, fastNLOTable.h, + main.cc: Toolkit: Compilable version + +2013-10-19 DanielBritzger + + * fastNLOReader.cc, fastNLOReader.h: implement SetScaleFactorsMuRMuF + +2013-10-06 rabbertz + + * Alphas.cc, CRunDec.cc, FastNLOAlphas.h, FastNLOCRunDec.h, FastNLOReader.h, + NEWS, README, fastNLO, fastNLOVersion.cc, main.cc, toolkit: Renamed! + Daniel's toolkit resides now in toolkit subdir of fastNLO. + + * AUTHORS, COPYING, Makefile, Makefile.am, NEWS, README, configure.ac, + fastNLOBase.cc, fastNLOBase.h, fastNLOCoeffAddBase.cc, + fastNLOCoeffAddBase.h, fastNLOCoeffAddFix.cc, fastNLOCoeffAddFix.h, + fastNLOCoeffAddFlex.cc, fastNLOCoeffAddFlex.h, fastNLOCoeffBase.cc, + fastNLOCoeffBase.h, fastNLOCoeffData.cc, fastNLOCoeffData.h, + fastNLOCoeffMult.cc, fastNLOCoeffMult.h, fastNLOCoefficients.cc, + fastNLOCoefficients.h, fastNLOConstants.h, fastNLOCreate.cc, + fastNLOCreate.h, fastNLOInterpolBase.cc, fastNLOInterpolBase.h, + fastNLOInterpolCatmulRom.cc, fastNLOInterpolCatmulRom.h, fastNLOLHAPDF.h, + fastNLOPDFLinearCombinations.cc, fastNLOPDFLinearCombinations.h, + fastNLOReader.cc, fastNLOReader.h, fastNLOTable.cc, fastNLOTable.h, + fastNLOVersion.cc, fastnlotk, fastnlotoolkit, include, m4, main.cc, + read_steer.cc, read_steer.h, speaker.cc, speaker.h, src: ATTENTION: + Reworked Daniel's new toolkit into autotools package analogous to reader; + can be installed in parallel, since header files in separate include dir + fastnlotk + +2013-09-19 DanielBritzger + + * fastNLOCreate.cc: minimum x-value for warmup table. + + * fastNLOInterpolBase.h: make CheckX public + + * fastNLOInterpolBase.cc: printout + + * fastNLOInterpolBase.cc: pdf reweight warning. last node check. Reste + wegihts, but keep x values + + * fastNLOCreate.cc, fastNLOCreate.h, fastNLOInterpolBase.cc: pdf reweight + warning. last node check. Reste wegihts, but keep x values + + * fastNLOCreate.cc: more checks on reading of warmup values. + + * fastNLOCreate.cc: check order of calculation properly + +2013-09-18 DanielBritzger + + * fastNLOCreate.cc: bugfix when initalizing single-diff truely differential + binnings. + + * fastNLOCreate.cc: some more cross checks. + + * fastNLOInterpolBase.cc: some more cross checks. + + * fastNLOCreate.cc: some more cross checks. + + * fastNLOCreate.cc, fastNLOCreate.h, fastNLOInterpolBase.cc: some more cross + checks. + + * fastNLOBase.cc: add missing welcome message. + + * fastNLOCoeffAddBase.h, fastNLOCoeffAddFix.h, fastNLOCoeffAddFlex.h, + fastNLOCoeffBase.h, fastNLOCoeffData.h, fastNLOCoeffMult.h: fix virtual + destructors + + * fastNLOCoeffAddBase.h, fastNLOCoeffAddFix.h, fastNLOCoeffAddFlex.h, + fastNLOCoeffBase.h, fastNLOCoeffData.h, fastNLOCoeffMult.h, main.cc: fix + virtual destructors + +2013-09-17 DanielBritzger + + * fastNLOReader.cc, fastNLOReader.h: Enable to evaluate only LO tables + (needs more check for fixed scale tables.) + +2013-09-02 DanielBritzger + + * fastNLOBase.h, fastNLOReader.cc: add virtual destructor + + * fastNLOCreate.cc, fastNLOCreate.h: enable scalevar for fixed-scale tables + +2013-08-30 DanielBritzger + + * fastNLOCoeffAddBase.h, fastNLOCoeffAddFlex.cc, fastNLOCreate.cc, + fastNLOCreate.h: slight restructure of filling routines. + + * fastNLOCoeffAddFlex.cc, fastNLOCoeffAddFlex.h, fastNLOCoeffBase.cc, + fastNLOCreate.cc, fastNLOReader.cc: prepare for NNLO flexible scale tables + +2013-08-28 DanielBritzger + + * fastNLOPDFLinearCombinations.h: code cleanup + + * Makefile, Makefile_DB, fastNLOInterpolBase.h, fastNLOReader.h: code + cleanup + + * Makefile, Makefile_DB: change name: Pert is now Fix + + * fastNLOCoeffAddFix.cc, fastNLOCoeffAddFix.h, fastNLOCoeffAddPert.cc, + fastNLOCoeffAddPert.h, fastNLOCreate.cc, fastNLOReader.cc, + fastNLOReader.h, fastNLOTable.cc, fastNLOTable.h: change name: Pert is now + Fix + + * fastNLOBase.cc: remove commented code + + * fastNLOBase.h: update comments + + * NichtverwendeterCode, fastNLO: new directory + + * FastNLOSteering.str, Makefile, Makefile_DB, NichtverwendeterCode, fastNLO, + fastNLOBase.cc, fastNLOBase.h, fastNLOCoeffAddBase.cc, + fastNLOCoeffAddBase.h, fastNLOCoeffAddEvalBase.cc, + fastNLOCoeffAddEvalBase.h, fastNLOCoeffAddFlex.cc, fastNLOCoeffAddFlex.h, + fastNLOCoeffAddFlexEval.cc, fastNLOCoeffAddFlexEval.h, + fastNLOCoeffAddPert.cc, fastNLOCoeffAddPert.h, fastNLOCoeffBase.cc, + fastNLOCoeffBase.h, fastNLOCoeffData.cc, fastNLOCoeffData.h, + fastNLOCoeffMult.cc, fastNLOCoeffMult.h, fastNLOCoefficients.cc, + fastNLOCoefficients.h, fastNLOConstants.h, fastNLOCreate.cc, + fastNLOCreate.h, fastNLOInterpolBase.cc, fastNLOInterpolBase.h, + fastNLOInterpolCatmulRom.cc, fastNLOInterpolCatmulRom.h, fastNLOLHAPDF.h, + fastNLOPDFLinearCombinations.cc, fastNLOPDFLinearCombinations.h, + fastNLOReader.cc, fastNLOReader.h, fastNLOTable.cc, fastNLOTable.h, + fastNLOVersion.cc, fnlttbar000.str, fnlttbar100.str, main.cc, + read_steer.cc, read_steer.h, speaker.cc, speaker.h: fastNLO: creator, new + reader, new code structure diff --git a/v2.6/toolkit/Makefile.am b/v2.6/toolkit/Makefile.am new file mode 100644 index 0000000000000000000000000000000000000000..dda7785d7bfbbe0e1ba7a58590cd8d7799289505 --- /dev/null +++ b/v2.6/toolkit/Makefile.am @@ -0,0 +1,75 @@ +# -*- Automake -*- +# ----------------------------------------------------------------------------- +# +# K. Rabbertz, 06.10.2013 +# +# fastNLO_toolkit +# +# ----------------------------------------------------------------------------- +# Use GNU standards +AUTOMAKE_OPTIONS = gnu + +# Subdirectories +SUBDIRS = data doc fastnlotoolkit src check fortranext pyext + +# Provide local m4 macros in dir m4, copy also system-wide macros +ACLOCAL_AMFLAGS = -I m4 --install + +# Add git equivalent of subversion revision number (original svn recipe from Autotools by J. Calcote). +EXTRA_DIST = m4 GITREV +# This gives e.g. fastnlo-2.0.0-643M for svn revision 643 locally modified +distdir = $(PACKAGE)-$(VERSION)-$(GITREV) +# Don't put .git subdirs into distribution package +dist-hook: + rm -rf `find $(distdir) -name .git` + +# Installation of DOXYGEN documentation +# Docu is not remade anymore at each occasion! +# To be sure to have the actual one, do a 'make clean' first +# Include extra files even when doxygen not present on current system +EXTRA_DIST += aminclude.am doxygen.cfg +if HAVE_DOXYGEN +if DX_COND_doc +include aminclude.am +all-local-doxygen: doxygen-run doxygen-pdf + touch doc/doxygen/fastnlo_toolkit.tag + touch doc/doxygen/fastnlo_toolkit.pdf +.PHONY: all-local-doxygen +all-local: all-local-doxygen +MOSTLYCLEANFILES = $(DX_CLEANFILES) all-local-doxygen + +## This rule requires autoconf 2.62 or newer +install-data-local: + @$(NORMAL_INSTALL) + $(MKDIR_P) $(DESTDIR)$(datadir)/doc/$(PACKAGE)/html/search + $(MKDIR_P) $(DESTDIR)$(datadir)/doc/$(PACKAGE)/latex + $(INSTALL_DATA) doc/doxygen/html/search/* $(DESTDIR)$(datadir)/doc/$(PACKAGE)/html/search + $(INSTALL_DATA) doc/doxygen/html/*.* $(DESTDIR)$(datadir)/doc/$(PACKAGE)/html + $(INSTALL_DATA) doc/doxygen/latex/* $(DESTDIR)$(datadir)/doc/$(PACKAGE)/latex + $(INSTALL_DATA) doc/doxygen/*.* $(DESTDIR)$(datadir)/doc/$(PACKAGE) + +uninstall-local: + @$(NORMAL_UNINSTALL) + rm -f $(DESTDIR)$(datadir)/doc/$(PACKAGE)/html/search/* + rmdir $(DESTDIR)$(datadir)/doc/$(PACKAGE)/html/search + rm -f $(DESTDIR)$(datadir)/doc/$(PACKAGE)/html/* + rmdir $(DESTDIR)$(datadir)/doc/$(PACKAGE)/html + rm -f $(DESTDIR)$(datadir)/doc/$(PACKAGE)/latex/* + rmdir $(DESTDIR)$(datadir)/doc/$(PACKAGE)/latex + rm -f $(DESTDIR)$(datadir)/doc/$(PACKAGE)/* + rmdir $(DESTDIR)$(datadir)/doc/$(PACKAGE) + +endif DX_COND_doc +endif HAVE_DOXYGEN + +# Files that are required to build the project but that can be +# recreated IF the necessary autotools etc. are available by: +# "autoreconf -i; ./configure" +# Use "make maintainer-clean" (on a build machine) before git commits, +# but NOT before distribution with "make dist"! +# aclocal.m4 m4/libtool.m4 m4/ltoptions.m4 m4/ltsugar.m4 m4/ltversion.m4 m4/lt~obsolete.m4 \ +MAINTAINERCLEANFILES = INSTALL config.h.in config.guess config.sub configure Makefile.in \ + depcomp install-sh ltmain.sh missing compile \ + aclocal.m4 \ + GITREV py-compile test-driver + diff --git a/v2.6/toolkit/NEWS b/v2.6/toolkit/NEWS new file mode 100644 index 0000000000000000000000000000000000000000..d5e4cf5e90a36911516fe9f9537928040a0db519 --- /dev/null +++ b/v2.6/toolkit/NEWS @@ -0,0 +1,229 @@ +Notes for public release of the fastNLO_toolkit package version 2.5.1, tag 3034 +=============================================================================== +- Fix a missing LDFLAGS setting in case of HOPPET use +- Fix a few warnings for unused variables in conditional compiling of fnlo-tk-rootout +- Adapt hoppet test to new default a_s = 0.1180 instead of 0.1181 +- Require full C++17 functionality + + +Notes for public release of the fastNLO_toolkit package version 2.5.1, tag 3028 +=============================================================================== +- Make LHAPDF alpha_s evolution default in cppread, too, to avoid confusion. +- Update default alpha_s(mZ) to PDG2023 +- Implement possibility of 30 scale variations (for normalised x sections only) +- Bug fix for use of NodeDensity + + +Notes for public release of the fastNLO_toolkit package version 2.5.1, tag 3022 +=============================================================================== +- Unify x section and uncertainty print-outs. +- Respect and modify fastNLO verbosity settings. +- Add example python script for such print-outs. + + +Notes for public release of the fastNLO_toolkit package version 2.5.1, tag 3011 +=============================================================================== +Fixed table merge segfault depending on file order + + +Notes for public release of the fastNLO_toolkit package version 2.5.1, tag 3000 +=============================================================================== +Only printout fixed + + +Notes for public release of the fastNLO_toolkit package version 2.5.1, tag 2890 +=============================================================================== +Fix to table merger from Johannes for NodeDensity x binning + + +Notes for public release of the fastNLO_toolkit package version 2.5.1, tag 2890 +=============================================================================== +Remove leftover debug printout + + +Notes for public release of the fastNLO_toolkit package version 2.5.1, tag 2888 +=============================================================================== +Major improvement (Johannes Gäßler): +- optional on-the-fly x-binning extension with given bin density +Other: +- LHAPDF5 support removed +- By default NO Doxygen documentation anymore; must be switched on explicitly + + +Notes for public release of the fastNLO_toolkit package version 2.5.0, tag 2856 +=============================================================================== +autotools updates. + + +Notes for public release of the fastNLO_toolkit package version 2.5.0, tag 2848 +=============================================================================== +A few bug fixes for unit tests. + + +Notes for public release of the fastNLO_toolkit package version 2.5.0, tag 2844 +=============================================================================== +This release includes only some minor improvements: +- Added option for existing Ecms reweighting in fnlo-tk-cppread +- Added options for rescaling x-axis values or uncertainties for plotting in fnlo-tk-yodaout +- Added to fnlo-tk-modify the possibilities to + - multiply all coefficients by factor + - rescale bin borders e.g. for GeV -> TeV units +- Added option to recenter scale variations around factor*central scale to + fnlo-tk-cppread and fnlo-tk-yodaout, e.g. 2*ptjet instead of ptjet +- Some adaptations for stat. uncertainties with NLOJet++ + + +Notes for public release of the fastNLO_toolkit package version 2.5.0, tag 2826 +=============================================================================== +The major developments included in this release are: +- This release contains numerous updates from the development of grid productions for + NNLO calculations using the APPLfast interface (nnlo-bridge) to the NNLOJET program. + - In particular, the new grid format v2.5 allows additional information on the + numerical precision for each fixed-order contribution to be contained directly + within the grid in so-called InfoBlocks. The evaluation code is backwards compatible, + but new v2.5 grids require at least this release. + - The executable fnlo-tk-modify has been updated such that information on the + numerical precision can be added to the final interpolation grid directly from + NNLOJET dat files, log files produced by fnlo-tk-statunc from samples of e.g. + grids filled by NLOJet++, or from text files containing the relative + uncertainty. Details on which and how such modifications are configured, can + be found in share/fastnlo_toolkit/modify/SteerModify.str + - A printout of the relative statistical uncertainty can be achieved using + 'fnlo-tk-yodaout grid.tab.gz PDF ST order' + See 'fnlo-tk-yodaout -h' for more options. +- The publically accessible fastNLO repository has been migrated to the + gitlab server at KIT: + https://gitlab.etp.kit.edu/qcd-public/fastNLO + The Toolkit code can be found in the subdirectory v2.5/toolkit + and the exact release can be cloned by checking out the corresponding tag. + Note, however, that in order to install from a git checkout autotools and + compilers etc. must be available. Before doing a 'make -j cores install' + the steps of 'autoreconf -i' and './configure --prefix=/path/to/installation further options' + must be successful. + Some useful scripts can be found in tools and tools/plotting. Notably, fnlosrc_install.csh + might help to install a whole set of software packages. Run './fnlosrc_install.csh' without + options for more info. +- On suggestion by D. Kalinkin the pyext code has been updated to support fastNLOreader + subclasses for using custom PDFs. + + + +Notes for public prerelease of the fastNLO_toolkit package version 2.3.1pre, revision 2402: +================================================================================================= +Some major new developments are included in this release: +(Attention: compiler with C++11 support is mandatory!) +- In preparation of grid productions for NNLO calculations, many new features have been + implemented with respect to fastNLO table mass production and their statistical combination. + In particular, these are + - usage of the nnlo-bridge package (to be released) for filling fastNLO or APPLgrid + interpolation grids from NNLOJET + - extension of the fastNLO table format (2.36.00, backwards compatible) to store + statistical weight information for many new merging options addressing + statistical fluctuations in NNLO grid productions + - steering-less initialisation possible in addition to steering files + - improved warmup file generation and check + - more options for distribution of x nodes +- Support of transparent writing/reading of gzipped tables tab.gz to reduce significantly + the necessary disk space when storing large numbers of tables; + requires the zlib compression library to be present; +- Includes new test suite to check installation --> 'make check' +- Includes basic example for a bi-directional interface between + the C++ fastNLO toolkit and Fortran analysis / PDF fitting code (fortranext) +- The fastNLO table evaluation part is mostly unchanged, but has been + complemented with more tools to manipulate tables like + - cutting out unused bins or multiplying bins by a set of factors (fnlo-tk-modify) + - concatenating separately calculated phase-space bins into one common table (fnlo-tk-cat) + - printing out normalised cross sections directly for tables set up with normalisation flag + (fnlo-tk-cppread, fnlo-tk-yodaout) + - printing out partial cross sections for crosschecks, e.g. NLO contribution alone, + or of cross section for all members of a PDF set (fnlo-tk-cppread) + - new merger with many new options for table combination (fnlo-tk-merge2) +- Issue reported by D. Maitre fixed +- Some issues in Python wrapper fixed + + + +Notes for public prerelease of the fastNLO_toolkit package version 2.3.1pre, revision 2212: +================================================================================================= +Some little issues fixed and: +- Add producer for ROOT files with xsections & uncertainties. +- Added executable fnlo-tk-statunc to derive statistical uncertainty from + sample of calculations with equal weight. +- Installation adapted to new autotools-enabled QCDNUM versions. + Old-style QCDNUM versions not supported anymore. +- Some adaptations for use in newer xFitter version. +- Some adaptations for use with mcgrid 2.0. + + + +Notes for public prerelease of the fastNLO_toolkit package version 2.3.1pre, revision 2163: +================================================================================================= +Some little issues fixed and: +- PDF uncertainties calculable via fastNLO code or via LHAPDF6 (both not for HERAPDF). + A struct with 3 vectors is returned giving x section and rel. lower and upper uncertainty. +- fnlo-tk-yodaout acquired an additional option for the fixed-order to be used, def. is NLO. +- Standard table info printout now also prints no. of x nodes. +- Improvements in table checking when merging/appending. + + + +Notes for public prerelease of the fastNLO_toolkit package version 2.3.1pre, revision 2143: +================================================================================================= +Only some little issues have been fixed and improvements incorporated into this prerelease: +- Interface part to MCgrid v2.0 finalized. +- Option "IgnoreWarmupBinningCheck" added, avoids warmup binning check if set to true + (useful for bin borders in pi etc.). +- An example to fill ROOT histograms from within fastNLO is provided (with input from Giannis Flouris) +- Rebuild problem in Doxygen documentation is fixed. +- Improved problem catch for ill-formatted tables. +- Added some more safety measures with respect to inf or nan entries. +- Improved logging handling. + + + +Notes for public prerelease of the fastNLO_toolkit package version 2.3.1pre, revision 2087: +================================================================================================= +Major work went into this prelease: +- This prerelease is meant to work with the next release of MCgrid (> v1.2) and Sherpa + to include all NLO processes available via this chain. +- A new executable fnlo-tk-yodaout has been conceived (including work by Stefanos Tyros) + that provides YODA-formatted output for inclusion of fixed-oder table evaluations + in Data/MC comparisons via Rivet. Foreseen to be used in MCplots. +- Up to triple differential observable binnings are supported, numerous + Getter functions are provided. +- Functionality to derive scale and PDF uncertainties has been added and is used + in fnlo-tk-yodaout +- fnlo-tk-config executable is provided for easier compiling/linking. +- A first version of Doxygen documentation is included. +- Method added to derive scale uncertainties. +- Numerous little issues fixed + + + +Notes for public prerelease of the fastNLO_toolkit package version 2.3.1pre, revision 1870: +================================================================================================= +Only small changes to eliminate some installation hiccups for the optional parts and +to remove some additional warnings found by the clang and icc compilers. +Don't hesitate to contact the authors for any questions or problems. + + + +Notes for first public prerelease of the fastNLO_toolkit package version 2.3.1pre, revision 1854: +================================================================================================= +This is a prerelease for testing and numerous things are still in progress. +Proper documentation is missing. +Don't hesitate to contact the authors for any questions or problems. + + + +Notes for very first autotools version of fastNLO_toolkit version 2.1.0, revision 1494: +======================================================================================= + +- Restructured like fastNLO_reader C++ part +- src contains code for one excutable to be made +- fastnlotoolkit contains code for linkable library libfastnlotoolkit to be compiled and linked +- subdir include/fastnlotk contains header files +==> All include statements in code had to be complemented with "fastnlotk/" +==> Change in library name and fastnlotk include directory allows simultaneous + installation and use of reader library AND toolkit library without problems + caused by identically named header files diff --git a/v2.6/toolkit/README b/v2.6/toolkit/README new file mode 100644 index 0000000000000000000000000000000000000000..ba811370395c7af9680a3ee3dfa37edaff60d349 --- /dev/null +++ b/v2.6/toolkit/README @@ -0,0 +1,129 @@ +# -*-sh-*- +# fastNLO_toolkit version 2.5.0: +# ============================== +# Please contact the authors for any questions or problems. + + +# Content: +# -------- +# Generic C++ linkable library and code to create, fill, modify, read, and evaluate fastNLO v2 tables + + +# Requirements: +# ------------- +# For installation of toolkit package: LHAPDF version 6, see also http://lhapdf.hepforge.org +# For running executable: fastNLO table, PDF set from LHAPDF, see also http://fastnlo.hepforge.org + + +# Basic installation of distribution package fastnlo_toolkit-v.v.v-nnnn.tar.gz in six simple steps: +# ------------------------------------------------------------------------------------------------- +# 1. Unpack distribution tarball in directory of your choice: +tar xzvf fastnlo_toolkit-v.v.v-nnnn.tar.gz +# +# 2. Descend into created subdirectory: +cd fastnlo_toolkit-v.v.v-nnnn + +# 3. Configure the installation: +# (Prepared using the GNU autotools setup, which is NOT required for the installation itself.) +./configure --prefix=/path/to/your/local/installation_directory + +# If the same installation directory or other system-wide known installation directories +# contain already a version of LHAPDF version 6, LHAPDF will be found and used +# automatically. +# If not, please specify the path to where LHAPDF is installed, i.e. where +# 'bin/lhapdf-config' can be found: +./configure --prefix=/path/to/your/local/installation_directory --with-lhapdf=/path/to/your/lhapdf/installation + +# To see all available configure options do: +./configure --help + +# 4. Compile and link the project, use the '-j n' option to specify, +# how many cores, e.g. n=2, should be used in parallel in this step: +make -j n + +# 5. Run functionality test suite: +make check + +# 6. Install the products into the configured target directory: +make install + + +# Optional features: +# ------------------ +# 1. The fastNLO_toolkit supports multiple alternatives for the evolution of the strong coupling. +# Some of them require additional external software: HOPPET and QCDNUM, see also +# http://hoppet.hepforge.org and http://qcdnum.hepforge.org +# +# Note: On x86_64 systems the QCDNUM libraries must be compiled with the -fPIC option. +# Since this has to be adapted manually for each "makelibs" script in the original +# release qcdnum-17.00.06.tar.gz, we provide an already patched version from our +# web site: qcdnum-17.00.06-patched.tar.gz +# +# If these packages are found in the same installation directory or +# other system-wide known installation directories, the options +--with-hoppet +# or +--with-qcdnum +# can be used to support their alpha_s evolutions. +# Otherwise their installation paths have to be specified explicitly like +--with-hoppet=/path/to/your/hoppet/installation +# or +--with-qcdnum=/path/to/your/qcdnum/installation +# The libraries are then expected to be in /path/to/your/installation/lib and +# include files in /path/to/your/installation/include + +# 2. Output can be provided in YODA format for comparisons to data using +# Rivet analyses and rivet-mkhtml +--with-yoda + +# 3. Output can also be filled into ROOT histograms. A commented out example for this is +# provided in the fnlo-tk-example executable. For correct compile and link options +# the fastNLO_toolkit has to be configured with ROOT support like +--with-root +# or +--with-root=/path/to/your/root/installation + +# 4. The fastNLO_toolkit optionally allows access to its libraries via the PYTHON scripting language. +# If you have PYTHON and SWIG installed, the PYTHON extension can be enabled via +--enable-pyext + + +# Usage: +# ------ +# Please see the executables in the folder 'src' and run e.g. +fnlo-tk-example -h +# or +fnlo-tk-cppread -h +# for some usage explanations. +# For LHAPDF6, the PDF sets have to be specified without extension. + + +# For developers ONLY: +# -------------------- +# Instead of a distribution tarball experienced developers can also +# check out the latest fastNLO software directly using git: +git clone https://gitlab.ekp.kit.edu/qcd-public/fastNLO.git +# The fastNLO toolkit resides in the subdirectory v2.0/toolkit. +# To prepare this directory for installation the following command is needed: +autoreconf -i +# For this to work it is mandatory to have recent enough GNU autotools installed, i.e. +# autoconf for auto-conf, auto-header, auto-scan; +# automake for automake, aclocal; +# libtool for libtoolize +# +# If files related to these tools are not found in the usual system places as +# in the case of LCG environment setups, it might be necessary to set proper +# paths where these files can be found now, e.g. +csh: setenv ACLOCAL_PATH=/cvmfs/sft.cern.ch/lcg/releases/libtool/2.4.2-9ad34/x86_64-slc6-gcc62-opt/share/aclocal +sh: export ACLOCAL_PATH=/cvmfs/sft.cern.ch/lcg/releases/libtool/2.4.2-9ad34/x86_64-slc6-gcc62-opt/share/aclocal +# +# If macros still are not found like AX_CXX_COMPILE_STDCXX11, it might help to install +# the package autoconf-archive. +# +# After a successful reconfigure the configuration, make, and install steps should proceed +# as before. +# +# The GNU autotools also support incremental installations. If you modify something in or add something +# to the fastNLO_toolkit that requires recompilation or relinking, the install step can be restricted +# to only install updated files: +make install "INSTALL=/path/to/install-sh -C" diff --git a/v2.6/toolkit/TODO b/v2.6/toolkit/TODO new file mode 100644 index 0000000000000000000000000000000000000000..3b0224108c0afce7e6ea38a360110913d81294c2 --- /dev/null +++ b/v2.6/toolkit/TODO @@ -0,0 +1,63 @@ +----------------------------------------------------------------------- +TODO list for fastNLO_toolkit (ordered by priority) +----------------------------------------------------------------------- + +- Allow re-merge for normalised-reweighted NNLOJET grids +- Implement possibility to use two different PDF sets instead of 2x proton PDF +- Use argparse for commandlines of C++ executables +- Creator for Referenztabellen +- Add checks for HOPPET, CRunDec, QCDNUM +- Change everything to use LHAPDF6 features instead of deprecated LHAGLUE; + partially done in HOPPET interface +- Use binary read/write table to save storage space and read in times (Mark's suggestion) + (Not clear that binary storage actually saves anything ...! Test first.) +- Provide features to allow -> APPLgrid conversion and the inverse -> fastNLO +- Streamline usage of logger.messagelevel, shout|cout, error|warn|silent etc. in speaker +- Getter for PhaseSpace-check: a la: GetIsWithinPhaseSpace(double obs1, double obs2, etc.) (cache probably observables for later usage) +- Write documentation (e.g. twiki) +- converter aktualisieren ?? +- Benutzbarkeit gewaehrleisten, wenn binning- und bin-suche im generator gemacht werden (ist teils implementiert bspw 'fnloEvent::_iOB') +- fastNLOCreate fuer mehrere Tabellen - also (bspw.) mehrere fastNLOCreate instanzen (dazu muessen alle 'read-steer'-statements geaendert werden) + oder mehrere Coeffizienten Tabellen +- 'automatisches' Erkennen von PDF-LiCos beim warm-up run +- implement DIS fixed-scale (desired?) +- 'Generator-stamps': konsistente beschreibung und zitate fuer CodeDescr[]. Bspw: fastNLO::CodeDescr::NLOJET_hhc(vector<string>& contrdescr) +- fnloEvent: implementiere 'operator+' und/oder eine 'add-funktion' (ordentliche Klassendefinitionen??) +- Change int functions() to void functions of read and write routines +- punktweise-differentielle gemischt mit bin-integrierten doppelt-differentiellen tabllen + + + +======================================================================= +DONE +======================================================================= + - Test installation with lgcenv environment: + - works but depends a lot on lcgenv quality + - ok is for example lcg102_centos7-gcc11-opt + - Drop LHAPDF5 support + - Include stat. uncertainties into table + - Modifier & Concatenator for tables/bins + - fast Warmup-run (just some events and then 'guess' PS boundaries) + - 11x11 = 121 PDF-LiCos + - 13x13 PDF-LiCos + - Codieren der LiCo's in Tabelle (und lesen im reader) + - reader testen fuer NNLO + - Ensure NNLO compatibility of reader + - fastNLOConstants.h in fastNLOConstants.h.in with svn-variables + - implement DIS flexible-scale + - Write out constants of warmup-run into warmup-file + - implement fixed-scale hhc for nlojet + - Use 'const reference' or pointers as return values of interpolation grids + - Use 'const reference' for 'FillContribution' functions + - Division by binsize for coefficients + - Aergerniss mit BinBreite und IDiffBin==0 (in read- and write-routinen klaeren) + - merger aktualisieren + - fix labels in header of warmup-table bin-grid (dim1 <-> dim2) + - fnloEvent, fnloScenario: are now classes (stumps) instead of structs + - Steering file optionally without generator/interface specific quantitites + - fastNLOCreate::GetSteerParameter(string ... , double&); + - full-matrix schreibweise + - modifier aktualisieren + - bi-cubic interpolation + - 'one-point' interpolation (very useful) + - Linear interpolation diff --git a/v2.6/toolkit/aminclude.am b/v2.6/toolkit/aminclude.am new file mode 100644 index 0000000000000000000000000000000000000000..4eafc0155d1af5b98eb2c3dce78a68eaf17abf35 --- /dev/null +++ b/v2.6/toolkit/aminclude.am @@ -0,0 +1,210 @@ +# +# Automake Support extracted from AX_PROG_DOXYGEN autoconf macro +# +# =========================================================================== +# http://www.gnu.org/software/autoconf-archive/ax_prog_doxygen.html +# =========================================================================== +# +# The following is a template aminclude.am file for use with Automake. +# Make targets and variables values are controlled by the various +# DX_COND_* conditionals set by autoconf. +# +# The provided targets are: +# +# doxygen-doc: Generate all doxygen documentation. +# +# doxygen-run: Run doxygen, which will generate some of the +# documentation (HTML, CHM, CHI, MAN, RTF, XML) +# but will not do the post processing required +# for the rest of it (PS, PDF, and some MAN). +# +# doxygen-man: Rename some doxygen generated man pages. +# +# doxygen-ps: Generate doxygen PostScript documentation. +# +# doxygen-pdf: Generate doxygen PDF documentation. +# +# Note that by default these are not integrated into the automake targets. +# If doxygen is used to generate man pages, you can achieve this +# integration by setting man3_MANS to the list of man pages generated and +# then adding the dependency: +# +# $(man3_MANS): doxygen-doc +# +# This will cause make to run doxygen and generate all the documentation. +# +# The following variable is intended for use in Makefile.am: +# +# DX_CLEANFILES = everything to clean. +# +# Then add this variable to MOSTLYCLEANFILES. +# +# ----- begin aminclude.am ------------------------------------- + +## --------------------------------- ## +## Format-independent Doxygen rules. ## +## --------------------------------- ## + +if DX_COND_doc + +## ------------------------------- ## +## Rules specific for HTML output. ## +## ------------------------------- ## + +if DX_COND_html + +DX_CLEAN_HTML = @DX_DOCDIR@/html + +endif DX_COND_html + +## ------------------------------ ## +## Rules specific for CHM output. ## +## ------------------------------ ## + +if DX_COND_chm + +DX_CLEAN_CHM = @DX_DOCDIR@/chm + +if DX_COND_chi + +DX_CLEAN_CHI = @DX_DOCDIR@/@PACKAGE@.chi + +endif DX_COND_chi + +endif DX_COND_chm + +## ------------------------------ ## +## Rules specific for MAN output. ## +## ------------------------------ ## + +if DX_COND_man + +DX_CLEAN_MAN = @DX_DOCDIR@/man + +endif DX_COND_man + +## ------------------------------ ## +## Rules specific for RTF output. ## +## ------------------------------ ## + +if DX_COND_rtf + +DX_CLEAN_RTF = @DX_DOCDIR@/rtf + +endif DX_COND_rtf + +## ------------------------------ ## +## Rules specific for XML output. ## +## ------------------------------ ## + +if DX_COND_xml + +DX_CLEAN_XML = @DX_DOCDIR@/xml + +endif DX_COND_xml + +## ----------------------------- ## +## Rules specific for PS output. ## +## ----------------------------- ## + +if DX_COND_ps + +DX_CLEAN_PS = @DX_DOCDIR@/@PACKAGE@.ps + +DX_PS_GOAL = doxygen-ps + +doxygen-ps: @DX_DOCDIR@/@PACKAGE@.ps + +@DX_DOCDIR@/@PACKAGE@.ps: @DX_DOCDIR@/@PACKAGE@.tag + cd @DX_DOCDIR@/latex; \ + rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \ + $(DX_LATEX) refman.tex; \ + $(MAKEINDEX_PATH) refman.idx; \ + $(DX_LATEX) refman.tex; \ + countdown=5; \ + while $(DX_EGREP) 'Rerun (LaTeX|to get cross-references right)' \ + refman.log > /dev/null 2>&1 \ + && test $$countdown -gt 0; do \ + $(DX_LATEX) refman.tex; \ + countdown=`expr $$countdown - 1`; \ + done; \ + $(DX_DVIPS) -o ../@PACKAGE@.ps refman.dvi + +endif DX_COND_ps + +## ------------------------------ ## +## Rules specific for PDF output. ## +## ------------------------------ ## + +if DX_COND_pdf + +DX_CLEAN_PDF = @DX_DOCDIR@/@PACKAGE@.pdf + +DX_PDF_GOAL = doxygen-pdf + +doxygen-pdf: @DX_DOCDIR@/@PACKAGE@.pdf + +@DX_DOCDIR@/@PACKAGE@.pdf: @DX_DOCDIR@/@PACKAGE@.tag + cd @DX_DOCDIR@/latex; \ + rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \ + $(DX_PDFLATEX) refman.tex; \ + $(DX_MAKEINDEX) refman.idx; \ + $(DX_PDFLATEX) refman.tex; \ + countdown=5; \ + while $(DX_EGREP) 'Rerun (LaTeX|to get cross-references right)' \ + refman.log > /dev/null 2>&1 \ + && test $$countdown -gt 0; do \ + $(DX_PDFLATEX) refman.tex; \ + countdown=`expr $$countdown - 1`; \ + done; \ + mv refman.pdf ../@PACKAGE@.pdf + +endif DX_COND_pdf + +## ------------------------------------------------- ## +## Rules specific for LaTeX (shared for PS and PDF). ## +## ------------------------------------------------- ## + +if DX_COND_latex + +DX_CLEAN_LATEX = @DX_DOCDIR@/latex + +endif DX_COND_latex + +.PHONY: doxygen-run doxygen-doc $(DX_PS_GOAL) $(DX_PDF_GOAL) + +.INTERMEDIATE: doxygen-run $(DX_PS_GOAL) $(DX_PDF_GOAL) + +doxygen-run: @DX_DOCDIR@/@PACKAGE@.tag + +doxygen-doc: doxygen-run $(DX_PS_GOAL) $(DX_PDF_GOAL) + +@DX_DOCDIR@/@PACKAGE@.tag: $(DX_CONFIG) $(pkginclude_HEADERS) + rm -rf @DX_DOCDIR@ + $(DX_ENV) $(DX_DOXYGEN) $(srcdir)/$(DX_CONFIG) + +DX_CLEANFILES = \ + @DX_DOCDIR@/@PACKAGE@.tag \ + -r \ + $(DX_CLEAN_HTML) \ + $(DX_CLEAN_CHM) \ + $(DX_CLEAN_CHI) \ + $(DX_CLEAN_MAN) \ + $(DX_CLEAN_RTF) \ + $(DX_CLEAN_XML) \ + $(DX_CLEAN_PS) \ + $(DX_CLEAN_PDF) \ + $(DX_CLEAN_LATEX) + +endif DX_COND_doc + +# ----- end aminclude.am --------------------------------------- +# +# LICENSE +# +# Copyright (c) 2009 Oren Ben-Kiki <oren@ben-kiki.org> +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. diff --git a/v2.6/toolkit/check/.gitignore b/v2.6/toolkit/check/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..4605a8a5000da614e3ceb7413d6212bb7f04c861 --- /dev/null +++ b/v2.6/toolkit/check/.gitignore @@ -0,0 +1,6 @@ +# Ignore produced tests and test tables +fnlo-tk-*.pl +fnlo-tk-*.trs +*.tab +*.tab.gz +*.yoda diff --git a/v2.6/toolkit/check/Makefile.am b/v2.6/toolkit/check/Makefile.am new file mode 100644 index 0000000000000000000000000000000000000000..2bee6b0f83577e8ef15596694f4849e565f88710 --- /dev/null +++ b/v2.6/toolkit/check/Makefile.am @@ -0,0 +1,40 @@ +# -*- Automake -*- +# ----------------------------------------------------------------------------- +# +# K. Rabbertz, 20.10.2016 +# +# fastNLO_toolkit +# +# ----------------------------------------------------------------------------- +# Use GNU standards +AUTOMAKE_OPTIONS = gnu + +# +# Targets +# +# perl script targets to check the package (distributed, but not installed) +# +dist_check_SCRIPTS = fnlo-tk-cpptest1.pl fnlo-tk-cpptest2.pl fnlo-tk-rundecastest1.pl fnlo-tk-rundecastest2.pl \ + fnlo-tk-lhapdftest.pl fnlo-tk-cppnormtest.pl fnlo-tk-cppscalestest.pl fnlo-tk-cattest.pl \ + fnlo-tk-erasetest.pl fnlo-tk-erasetest2.pl fnlo-tk-mergetest.pl fnlo-tk-stattest.pl +if HAVE_LIBZ + dist_check_SCRIPTS += fnlo-tk-ziptest.pl fnlo-tk-zipapp.pl +endif +if HAVE_HOPPET + dist_check_SCRIPTS += fnlo-tk-hoppetastest1.pl fnlo-tk-hoppetastest2.pl +endif +if HAVE_QCDNUM + dist_check_SCRIPTS += fnlo-tk-qcdnumastest1.pl fnlo-tk-qcdnumastest2.pl +endif + +TESTS = $(dist_check_SCRIPTS) + +# Additional clean up for check targets +CLEANFILES = *.log *.tab *.tab.gz *.str *.txt *.yoda + +# Files that are required to build the project but that can be +# recreated IF the necessary autotools etc. are available by: +# "autoreconf -i; ./configure" +# Use "make maintainer-clean" (on a build machine) before svn commits, +# but not for distribution +MAINTAINERCLEANFILES = Makefile.in diff --git a/v2.6/toolkit/check/fnlo-tk-cattest.pl.in b/v2.6/toolkit/check/fnlo-tk-cattest.pl.in new file mode 100755 index 0000000000000000000000000000000000000000..6dc6f118b81da0a6e656923d0ff9645e89d6e602 --- /dev/null +++ b/v2.6/toolkit/check/fnlo-tk-cattest.pl.in @@ -0,0 +1,70 @@ +#!/usr/bin/env perl +# +# Unit test to catenate two fastNLO tables +# Version: +# +# created by K. Rabbertz: 20.10.2016 +# +#----------------------------------------------------------------------- +# +use Cwd; +use English; +use Getopt::Std; +use strict; +use warnings; + +# Define source dir as required for VPATH builds like in make distcheck +my $src = "@srcdir@"; + +# Remove potentially left-over temporary files +my @tabs = ("InclusiveNJetEvents_fnl5662i_v23_fix_2-2", "InclusiveNJetEvents_fnl5662i_v23_fix_0-0-2", "InclusiveNJetEvents_fnl5662i_v23_fix_2-2-2"); +my @tabd = ("NJetEvents_2-2.tab.gz", "NJetEvents_0-0-2.tab.gz", "NJetEvents_2-2-2.tab.gz"); +my @tabfls; +my @tabgzs; +foreach my $tab ( @tabs ) { + push @tabfls, ${tab}.".tab"; + push @tabgzs, ${tab}.".tab".".gz"; +} +foreach my $file ( "cattest.tab", "catdiff.log", @tabfls, @tabgzs ) { + if ( -e $file ) { + system("rm -f $file"); + } +} + +# Prepare test setup +# Copy gzipped default tables from data/check storage +for ( my $i=0; $i <= $#tabd ; $i++ ) { + my $cmd = "cp -f ${src}/../data/check/$tabd[$i] $tabgzs[$i]"; + print "Executing command: $cmd\n"; + my $ret = system("$cmd"); + if ( $ret ) {die "fnlo-tk-cattest: Copying test table $tabd[$i] failed: $ret, aborted!\n";} + $cmd = "gunzip $tabgzs[$i]"; + print "Executing command: $cmd\n"; + $ret = system("$cmd"); + if ( $ret ) {die "fnlo-tk-cattest: Ungzipping test table $tabgzs[$i] failed: $ret, aborted!\n";} +} + +# Catenate +my $cmd = "../src/fnlo-tk-cat $tabfls[0] $tabfls[1] cattest.tab"; +print "Executing command: $cmd\n"; +my $ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-cattest: Catenating test tables $tabfls[0] and $tabfls[1] failed: $ret, aborted!\n";} + +# Determine difference to default catenated table +$cmd = "diff $tabfls[2] cattest.tab > catdiff.log"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-cattest: Result comparison with 'diff' failed: $ret, aborted!\n";} + +# The diff.log must be empty +if ( ! -z "catdiff.log" ) { + print "fnlo-tk-cattest: Catenated test table differs from default:\n"; + $cmd = "cat catdiff.log"; + print "Executing command: $cmd\n"; + $ret = system("$cmd"); + die "fnlo-tk-cattest: Catenation unit test failed, please fix!\n"; +} + +print "fnlo-tk-cattest: Catenation unit test passed.\n"; + +exit 0; diff --git a/v2.6/toolkit/check/fnlo-tk-cppnormtest.pl.in b/v2.6/toolkit/check/fnlo-tk-cppnormtest.pl.in new file mode 100755 index 0000000000000000000000000000000000000000..59f26611bf5f855734f25d83f855310fac0f0d8d --- /dev/null +++ b/v2.6/toolkit/check/fnlo-tk-cppnormtest.pl.in @@ -0,0 +1,65 @@ +#!/usr/bin/env perl +# +# Unit test to read a normalisable fastNLO table +# Version: +# +# created by K. Rabbertz: 20.10.2016 +# +#----------------------------------------------------------------------- +# +use Cwd; +use English; +use Getopt::Std; +use strict; +use warnings; + +# Define source dir as required for VPATH builds like in make distcheck +my $src = "@srcdir@"; + +# Remove potentially left-over temporary files +my $tab = "InclusiveNJetEvents_fnl5662i_v23_fix_norm_1-12"; +my $tabd = "NJetEvents_norm_1-12.tab.gz"; +my $tabfl = ${tab}.".tab"; +my $tabgz = ${tabfl}.".gz"; +foreach my $file ( "cppnormtest.log", "cppnormdiff.log", "${tabfl}", "${tabgz}" ) { + if ( -e $file ) { + system("rm -f $file"); + } +} + +# Prepare test setup +# Copy gzipped default tables from data/check storage +my $cmd = "cp -f ${src}/../data/check/${tabd} ${tabgz}"; +print "Executing command: $cmd\n"; +my $ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-cppnormtest: Copying test table ${tabd} failed: $ret, aborted!\n";} +$cmd = "gunzip ${tabgz}"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-cppnormtest: Ungzipping test table ${tabgz} failed: $ret, aborted!\n";} + +# Evaluate, keep only result lines +$cmd = "../src/fnlo-tk-cppread ${tabfl} CT10nlo _ GRV norm _ _ 5 2 0.1185 _ | grep \"Calculate my cross sections\" -B1 -A19 > cppnormtest.log"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-cppnormtest: Evaluating test table ${tabfl} failed: $ret, aborted!\n";} + +# Determine difference to default evaluation output +$cmd = "diff ${src}/../data/check/NJetEvents_norm_1-12_cppnorm.log cppnormtest.log > cppnormdiff.log"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-cppnormtest: Result comparison with 'diff' failed: $ret, aborted!\n";} + +# The diff.log must be empty +if ( ! -z "cppnormdiff.log" ) { + print "fnlo-tk-cppnormtest: Evaluation of test table differs from default:\n"; + $cmd = "cat cppnormdiff.log"; + print "Executing command: $cmd\n"; + $ret = system("$cmd"); + print "fnlo-tk-cppnormtest: Do you use LHAPDF version 6? Do you have the CT10nlo PDF set installed? Is it found?\n"; + die "fnlo-tk-cppnormtest: Table evaluation unit test failed, please fix!\n"; +} + +print "fnlo-tk-cppnormtest: Table evaluation unit test passed.\n"; + +exit 0; diff --git a/v2.6/toolkit/check/fnlo-tk-cppscalestest.pl.in b/v2.6/toolkit/check/fnlo-tk-cppscalestest.pl.in new file mode 100755 index 0000000000000000000000000000000000000000..2a753dbf9919b8295d5c20c312fb6d1a1f6d4655 --- /dev/null +++ b/v2.6/toolkit/check/fnlo-tk-cppscalestest.pl.in @@ -0,0 +1,64 @@ +#!/usr/bin/env perl +# +# Unit test to evaluate a fastNLO table for 7 scale factor combinations +# Version: +# +# created by K. Rabbertz: 20.10.2016 +# +#----------------------------------------------------------------------- +# +use Cwd; +use English; +use Getopt::Std; +use strict; +use warnings; + +# Define source dir as required for VPATH builds like in make distcheck +my $src = "@srcdir@"; + +# Remove potentially left-over temporary files +my $tab = "fnl1014_I902309_2-2"; +my $tabfl = ${tab}.".tab"; +my $tabgz = ${tabfl}.".gz"; +foreach my $file ( "cppscalestest.log", "cppscalesdiff.log", "${tabfl}", "${tabgz}" ) { + if ( -e $file ) { + system("rm -f $file"); + } +} + +# Prepare test setup +# Copy gzipped default tables from data/check storage +my $cmd = "cp -f ${src}/../data/check/${tabgz} ."; +print "Executing command: $cmd\n"; +my $ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-cppscalestest: Copying test table ${tabgz} failed: $ret, aborted!\n";} +$cmd = "gunzip ${tabgz}"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-cppscalestest: Ungzipping test table ${tabgz} failed: $ret, aborted!\n";} + +# Evaluate, keep only result lines +$cmd = "../src/fnlo-tk-cppread ${tabfl} CT10nlo 7 GRV _ _ _ 5 2 0.1185 _ | grep \"Calculate my cross sections\" -B1 -A95 > cppscalestest.log"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-cppscalestest: Evaluating test table ${tabfl} failed: $ret, aborted!\n";} + +# Determine difference to default evaluation output +$cmd = "diff ${src}/../data/check/${tab}_cppscales.log cppscalestest.log > cppscalesdiff.log"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-cppscalestest: Result comparison with 'diff' failed: $ret, aborted!\n";} + +# The diff.log must be empty +if ( ! -z "cppscalesdiff.log" ) { + print "fnlo-tk-cppscalestest: Evaluation of test table differs from default:\n"; + $cmd = "cat cppscalesdiff.log"; + print "Executing command: $cmd\n"; + $ret = system("$cmd"); + print "fnlo-tk-cppscalestest: Do you use LHAPDF version 6? Do you have the CT10nlo PDF set installed? Is it found?\n"; + die "fnlo-tk-cppscalestest: Table evaluation unit test failed, please fix!\n"; +} + +print "fnlo-tk-cppscalestest: Table evaluation unit test passed.\n"; + +exit 0; diff --git a/v2.6/toolkit/check/fnlo-tk-cpptest1.pl.in b/v2.6/toolkit/check/fnlo-tk-cpptest1.pl.in new file mode 100755 index 0000000000000000000000000000000000000000..efe63a8a4f912b97645ea3eedc43595162c58cfb --- /dev/null +++ b/v2.6/toolkit/check/fnlo-tk-cpptest1.pl.in @@ -0,0 +1,64 @@ +#!/usr/bin/env perl +# +# Unit test to read a fastNLO table +# Version: +# +# created by K. Rabbertz: 20.10.2016 +# +#----------------------------------------------------------------------- +# +use Cwd; +use English; +use Getopt::Std; +use strict; +use warnings; + +# Define source dir as required for VPATH builds like in make distcheck +my $src = "@srcdir@"; + +# Remove potentially left-over temporary files +my $tab = "fnl1014_I902309_2-2"; +my $tabfl = ${tab}.".tab"; +my $tabgz = ${tabfl}.".gz"; +foreach my $file ( "cpptest1.log", "cppdiff1.log", "${tabfl}", "${tabgz}" ) { + if ( -e $file ) { + system("rm -f $file"); + } +} + +# Prepare test setup +# Copy gzipped default tables from data/check storage +my $cmd = "cp -f ${src}/../data/check/${tabgz} ."; +print "Executing command: $cmd\n"; +my $ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-cpptest1: Copying test table ${tabgz} failed: $ret, aborted!\n";} +$cmd = "gunzip ${tabgz}"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-cpptest1: Ungzipping test table ${tabgz} failed: $ret, aborted!\n";} + +# Evaluate, keep only result lines +$cmd = "../src/fnlo-tk-cppread ${tabfl} CT10nlo _ GRV | tail -4 > cpptest1.log"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-cpptest1: Evaluating test table ${tabfl} failed: $ret, aborted!\n";} + +# Determine difference to default evaluation output +$cmd = "diff ${src}/../data/check/${tab}_cpptest1.log cpptest1.log > cppdiff1.log"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-cpptest1: Result comparison with 'diff' failed: $ret, aborted!\n";} + +# The diff.log must be empty +if ( ! -z "cppdiff1.log" ) { + print "fnlo-tk-cpptest1: Evaluation of test table differs from default:\n"; + $cmd = "cat cppdiff1.log"; + print "Executing command: $cmd\n"; + $ret = system("$cmd"); + print "fnlo-tk-cpptest1: Do you use LHAPDF version 6? Do you have the CT10nlo PDF set installed? Is it found?\n"; + die "fnlo-tk-cpptest1: Table evaluation unit test failed, please fix!\n"; +} + +print "fnlo-tk-cpptest1: Table evaluation unit test passed.\n"; + +exit 0; diff --git a/v2.6/toolkit/check/fnlo-tk-cpptest2.pl.in b/v2.6/toolkit/check/fnlo-tk-cpptest2.pl.in new file mode 100755 index 0000000000000000000000000000000000000000..75a0c4225b60a68b9c57e869c12806d15bd74d3d --- /dev/null +++ b/v2.6/toolkit/check/fnlo-tk-cpptest2.pl.in @@ -0,0 +1,64 @@ +#!/usr/bin/env perl +# +# Unit test to read a fastNLO table +# Version: +# +# created by K. Rabbertz: 20.10.2016 +# +#----------------------------------------------------------------------- +# +use Cwd; +use English; +use Getopt::Std; +use strict; +use warnings; + +# Define source dir as required for VPATH builds like in make distcheck +my $src = "@srcdir@"; + +# Remove potentially left-over temporary files +my $tab = "fnl1014_I902309_2-2"; +my $tabfl = ${tab}.".tab"; +my $tabgz = ${tabfl}.".gz"; +foreach my $file ( "cpptest2.log", "cppdiff2.log", "${tabfl}", "${tabgz}" ) { + if ( -e $file ) { + system("rm -f $file"); + } +} + +# Prepare test setup +# Copy gzipped default tables from data/check storage +my $cmd = "cp -f ${src}/../data/check/${tabgz} ."; +print "Executing command: $cmd\n"; +my $ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-cpptest2: Copying test table ${tabgz} failed: $ret, aborted!\n";} +$cmd = "gunzip ${tabgz}"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-cpptest2: Ungzipping test table ${tabgz} failed: $ret, aborted!\n";} + +# Evaluate, keep only result lines +$cmd = "../src/fnlo-tk-cppread ${tabfl} CT10nlo _ GRV _ _ _ 5 2 0.1185 _ | tail -4 > cpptest2.log"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-cpptest2: Evaluating test table ${tabfl} failed: $ret, aborted!\n";} + +# Determine difference to default evaluation output +$cmd = "diff ${src}/../data/check/${tab}_cpptest2.log cpptest2.log > cppdiff2.log"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-cpptest2: Result comparison with 'diff' failed: $ret, aborted!\n";} + +# The diff.log must be empty +if ( ! -z "cppdiff2.log" ) { + print "fnlo-tk-cpptest2: Evaluation of test table differs from default:\n"; + $cmd = "cat cppdiff2.log"; + print "Executing command: $cmd\n"; + $ret = system("$cmd"); + print "fnlo-tk-cpptest2: Do you use LHAPDF version 6? Do you have the CT10nlo PDF set installed? Is it found?\n"; + die "fnlo-tk-cpptest2: Table evaluation unit test failed, please fix!\n"; +} + +print "fnlo-tk-cpptest2: Table evaluation unit test passed.\n"; + +exit 0; diff --git a/v2.6/toolkit/check/fnlo-tk-erasetest.pl.in b/v2.6/toolkit/check/fnlo-tk-erasetest.pl.in new file mode 100755 index 0000000000000000000000000000000000000000..babe21c21ae2f087047a5cfabe32b2d1f3ec2436 --- /dev/null +++ b/v2.6/toolkit/check/fnlo-tk-erasetest.pl.in @@ -0,0 +1,70 @@ +#!/usr/bin/env perl +# +# Unit test to erase bins from a fastNLO table +# Version: +# +# created by K. Rabbertz: 20.10.2016 +# +#----------------------------------------------------------------------- +# +use Cwd; +use English; +use Getopt::Std; +use strict; +use warnings; + +# Define source dir as required for VPATH builds like in make distcheck +my $src = "@srcdir@"; + +# Remove potentially left-over temporary files +my @tabs = ("InclusiveNJetEvents_fnl5662i_v23_fix_2-2-2", "InclusiveNJetEvents_fnl5662i_v23_fix_2-2"); +my @tabd = ("NJetEvents_2-2-2.tab.gz", "NJetEvents_2-2.tab.gz"); +my @tabfls; +my @tabgzs; +foreach my $tab ( @tabs ) { + push @tabfls, ${tab}.".tab"; + push @tabgzs, ${tab}.".tab".".gz"; +} +foreach my $file ( "erasetest.tab", "erasediff.log", @tabfls, @tabgzs ) { + if ( -e $file ) { + system("rm -f $file"); + } +} + +# Prepare test setup +# Copy gzipped default tables from data/check storage +for ( my $i=0; $i <= $#tabd ; $i++ ) { + my $cmd = "cp -f ${src}/../data/check/$tabd[$i] $tabgzs[$i]"; + print "Executing command: $cmd\n"; + my $ret = system("$cmd"); + if ( $ret ) {die "fnlo-tk-erasetest: Copying test table $tabgzs[$i] failed: $ret, aborted!\n";} + $cmd = "gunzip $tabgzs[$i]"; + print "Executing command: $cmd\n"; + $ret = system("$cmd"); + if ( $ret ) {die "fnlo-tk-erasetest: Ungzipping test table $tabgzs[$i] failed: $ret, aborted!\n";} +} + +# Erase +my $cmd = "../src/fnlo-tk-modify steerfile=${src}/../data/check/SteerModify_EraseBins.str"; +print "Executing command: $cmd\n"; +my $ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-erasetest: Erasing bins from test table $tabfls[0] failed: $ret, aborted!\n";} + +# Determine difference to default table with bins removed +$cmd = "diff $tabfls[1] erasetest.tab > erasediff.log"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-erasetest: Result comparison with 'diff' failed: $ret, aborted!\n";} + +# The diff.log must be empty +if ( ! -z "erasediff.log" ) { + print "fnlo-tk-erasetest: Test table with bins erased differs from default:\n"; + $cmd = "cat erasediff.log"; + print "Executing command: $cmd\n"; + $ret = system("$cmd"); + die "fnlo-tk-erasetest: Modification unit test failed, please fix!\n"; +} + +print "fnlo-tk-erasetest: Modification unit test passed.\n"; + +exit 0; diff --git a/v2.6/toolkit/check/fnlo-tk-erasetest2.pl.in b/v2.6/toolkit/check/fnlo-tk-erasetest2.pl.in new file mode 100755 index 0000000000000000000000000000000000000000..bfc506c3e438c3f2360f99a0a7745a3eb60b16de --- /dev/null +++ b/v2.6/toolkit/check/fnlo-tk-erasetest2.pl.in @@ -0,0 +1,69 @@ +#!/usr/bin/env perl +# +# Unit test 2 to erase bins from a fastNLO table +# Version: +# +# created by K. Rabbertz: 20.10.2016 +# +#----------------------------------------------------------------------- +# +use Cwd; +use English; +use Getopt::Std; +use strict; +use warnings; + +# Define source dir as required for VPATH builds like in make distcheck +my $src = "@srcdir@"; + +# Remove potentially left-over temporary files +my @tabs = ("fnl1014_I902309_2-2", "fnl1014_I902309_2"); +my @tabfls; +my @tabgzs; +foreach my $tab ( @tabs ) { + push @tabfls, ${tab}.".tab"; + push @tabgzs, ${tab}.".tab".".gz"; +} +foreach my $file ( "erasetest2.tab", "erasediff2.log", @tabfls, @tabgzs ) { + if ( -e $file ) { + system("rm -f $file"); + } +} + +# Prepare test setup +# Copy gzipped default tables from data/check storage +foreach my $tabgz ( @tabgzs ) { + my $cmd = "cp -f ${src}/../data/check/${tabgz} ."; + print "Executing command: $cmd\n"; + my $ret = system("$cmd"); + if ( $ret ) {die "fnlo-tk-erasetest2: Copying test table ${tabgz} failed: $ret, aborted!\n";} + $cmd = "gunzip ${tabgz}"; + print "Executing command: $cmd\n"; + $ret = system("$cmd"); + if ( $ret ) {die "fnlo-tk-erasetest2: Ungzipping test table ${tabgz} failed: $ret, aborted!\n";} +} + +# Erase +my $cmd = "../src/fnlo-tk-modify steerfile=${src}/../data/check/SteerModify_EraseBins2.str"; +print "Executing command: $cmd\n"; +my $ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-erasetest2: Erasing bins from test table $tabfls[0] failed: $ret, aborted!\n";} + +# Determine difference to default table with bins removed +$cmd = "diff $tabfls[1] erasetest2.tab > erasediff2.log"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-erasetest2: Result comparison with 'diff' failed: $ret, aborted!\n";} + +# The diff.log must be empty +if ( ! -z "erasediff2.log" ) { + print "fnlo-tk-erasetest2: Test table with bins erased differs from default:\n"; + $cmd = "cat erasediff2.log"; + print "Executing command: $cmd\n"; + $ret = system("$cmd"); + die "fnlo-tk-erasetest2: Modification unit test 2 failed, please fix!\n"; +} + +print "fnlo-tk-erasetest2: Modification unit test 2 passed.\n"; + +exit 0; diff --git a/v2.6/toolkit/check/fnlo-tk-hoppetastest1.pl.in b/v2.6/toolkit/check/fnlo-tk-hoppetastest1.pl.in new file mode 100755 index 0000000000000000000000000000000000000000..5116ad046cfa5bf7bd04814df93029e9baebaec7 --- /dev/null +++ b/v2.6/toolkit/check/fnlo-tk-hoppetastest1.pl.in @@ -0,0 +1,66 @@ +#!/usr/bin/env perl +# +# Unit test to read a fastNLO table +# Version: +# +# created by K. Rabbertz: 20.10.2016 +# +#----------------------------------------------------------------------- +# +use Cwd; +use English; +use Getopt::Std; +use strict; +use warnings; + +# Define source dir as required for VPATH builds like in make distcheck +my $src = "@srcdir@"; + +# Remove potentially left-over temporary files +my $tab = "fnl1014_I902309_2-2"; +my $tabfl = ${tab}.".tab"; +my $tabgz = ${tabfl}.".gz"; +foreach my $file ( "hoppetastest1.log", "hoppetasdiff1.log", "${tabfl}", "${tabgz}" ) { + if ( -e $file ) { + system("rm -f $file"); + } +} + +# Prepare test setup +# Copy gzipped default tables from data/check storage +my $cmd = "cp -f ${src}/../data/check/${tabgz} ."; +print "Executing command: $cmd\n"; +my $ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-hoppetastest1: Copying test table ${tabgz} failed: $ret, aborted!\n";} +$cmd = "gunzip ${tabgz}"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-hoppetastest1: Ungzipping test table ${tabgz} failed: $ret, aborted!\n";} + +# Evaluate, keep only result lines +$cmd = "../src/fnlo-tk-cppread ${tabfl} CT10nlo _ HOPPET | tail -4 > hoppetastest1.log"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-hoppetastest1: Evaluating test table ${tabfl} failed: $ret, aborted!\n";} + +# Determine difference to default evaluation output +$cmd = "diff ${src}/../data/check/${tab}_hoppetastest1.log hoppetastest1.log > hoppetasdiff1.log"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-hoppetastest1: Result comparison with 'diff' failed: $ret, aborted!\n";} + +# The diff.log must be empty +if ( ! -z "hoppetasdiff1.log" ) { + print "fnlo-tk-hoppetastest1: Evaluation of test table differs from default:\n"; + $cmd = "cat hoppetasdiff1.log"; + print "Executing command: $cmd\n"; + $ret = system("$cmd"); + print "fnlo-tk-hoppetastest1: Do you use LHAPDF version 6?\n"; + print "fnlo-tk-hoppetastest1: Do you have the CT10nlo PDF set installed? Is it found?\n"; + print "fnlo-tk-hoppetastest1: Do you have HOPPET installed? Is it found?\n"; + die "fnlo-tk-hoppetastest1: Table evaluation unit test failed, please fix!\n"; +} + +print "fnlo-tk-hoppetastest1: Table evaluation unit test passed.\n"; + +exit 0; diff --git a/v2.6/toolkit/check/fnlo-tk-hoppetastest2.pl.in b/v2.6/toolkit/check/fnlo-tk-hoppetastest2.pl.in new file mode 100755 index 0000000000000000000000000000000000000000..aecb18ba3af314240b6422c4761683a7154d03f4 --- /dev/null +++ b/v2.6/toolkit/check/fnlo-tk-hoppetastest2.pl.in @@ -0,0 +1,66 @@ +#!/usr/bin/env perl +# +# Unit test to read a fastNLO table +# Version: +# +# created by K. Rabbertz: 20.10.2016 +# +#----------------------------------------------------------------------- +# +use Cwd; +use English; +use Getopt::Std; +use strict; +use warnings; + +# Define source dir as required for VPATH builds like in make distcheck +my $src = "@srcdir@"; + +# Remove potentially left-over temporary files +my $tab = "fnl1014_I902309_2-2"; +my $tabfl = ${tab}.".tab"; +my $tabgz = ${tabfl}.".gz"; +foreach my $file ( "hoppetastest2.log", "hoppetasdiff2.log", "${tabfl}", "${tabgz}" ) { + if ( -e $file ) { + system("rm -f $file"); + } +} + +# Prepare test setup +# Copy gzipped default tables from data/check storage +my $cmd = "cp -f ${src}/../data/check/${tabgz} ."; +print "Executing command: $cmd\n"; +my $ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-hoppetastest2: Copying test table ${tabgz} failed: $ret, aborted!\n";} +$cmd = "gunzip ${tabgz}"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-hoppetastest2: Ungzipping test table ${tabgz} failed: $ret, aborted!\n";} + +# Evaluate, keep only result lines +$cmd = "../src/fnlo-tk-cppread ${tabfl} CT10nlo _ HOPPET _ _ _ 5 2 0.1185 _ | tail -4 > hoppetastest2.log"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-hoppetastest2: Evaluating test table ${tabfl} failed: $ret, aborted!\n";} + +# Determine difference to default evaluation output +$cmd = "diff ${src}/../data/check/${tab}_hoppetastest2.log hoppetastest2.log > hoppetasdiff2.log"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-hoppetastest2: Result comparison with 'diff' failed: $ret, aborted!\n";} + +# The diff.log must be empty +if ( ! -z "hoppetasdiff2.log" ) { + print "fnlo-tk-hoppetastest2: Evaluation of test table differs from default:\n"; + $cmd = "cat hoppetasdiff2.log"; + print "Executing command: $cmd\n"; + $ret = system("$cmd"); + print "fnlo-tk-hoppetastest2: Do you use LHAPDF version 6?\n"; + print "fnlo-tk-hoppetastest2: Do you have the CT10nlo PDF set installed? Is it found?\n"; + print "fnlo-tk-hoppetastest2: Do you have HOPPET installed? Is it found?\n"; + die "fnlo-tk-hoppetastest2: Table evaluation unit test failed, please fix!\n"; +} + +print "fnlo-tk-hoppetastest2: Table evaluation unit test passed.\n"; + +exit 0; diff --git a/v2.6/toolkit/check/fnlo-tk-lhapdftest.pl.in b/v2.6/toolkit/check/fnlo-tk-lhapdftest.pl.in new file mode 100755 index 0000000000000000000000000000000000000000..275e339c728c83790af0cf40357b33ba6fc8e695 --- /dev/null +++ b/v2.6/toolkit/check/fnlo-tk-lhapdftest.pl.in @@ -0,0 +1,64 @@ +#!/usr/bin/env perl +# +# Unit test to read a fastNLO table +# Version: +# +# created by K. Rabbertz: 20.10.2016 +# +#----------------------------------------------------------------------- +# +use Cwd; +use English; +use Getopt::Std; +use strict; +use warnings; + +# Define source dir as required for VPATH builds like in make distcheck +my $src = "@srcdir@"; + +# Remove potentially left-over temporary files +my $tab = "fnl1014_I902309_2-2"; +my $tabfl = ${tab}.".tab"; +my $tabgz = ${tabfl}.".gz"; +foreach my $file ( "lhapdftest.log", "lhapdfdiff.log", "${tabfl}", "${tabgz}" ) { + if ( -e $file ) { + system("rm -f $file"); + } +} + +# Prepare test setup +# Copy gzipped default tables from data/check storage +my $cmd = "cp -f ${src}/../data/check/${tabgz} ."; +print "Executing command: $cmd\n"; +my $ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-lhapdftest: Copying test table ${tabgz} failed: $ret, aborted!\n";} +$cmd = "gunzip ${tabgz}"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-lhapdftest: Ungzipping test table ${tabgz} failed: $ret, aborted!\n";} + +# Evaluate, keep only result lines +$cmd = "../src/fnlo-tk-cppread ${tabfl} CT10nlo _ LHAPDF | tail -4 > lhapdftest.log"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-lhapdftest: Evaluating test table ${tabfl} failed: $ret, aborted!\n";} + +# Determine difference to default evaluation output +$cmd = "diff ${src}/../data/check/${tab}_lhapdftest.log lhapdftest.log > lhapdfdiff.log"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-lhapdftest: Result comparison with 'diff' failed: $ret, aborted!\n";} + +# The diff.log must be empty +if ( ! -z "lhapdfdiff.log" ) { + print "fnlo-tk-lhapdftest: Evaluation of test table differs from default:\n"; + $cmd = "cat lhapdfdiff.log"; + print "Executing command: $cmd\n"; + $ret = system("$cmd"); + print "fnlo-tk-lhapdftest: Do you use LHAPDFTEST version 6? Do you have the CT10nlo PDF set installed? Is it found?\n"; + die "fnlo-tk-lhapdftest: Table evaluation unit test failed, please fix!\n"; +} + +print "fnlo-tk-lhapdftest: Table evaluation unit test passed.\n"; + +exit 0; diff --git a/v2.6/toolkit/check/fnlo-tk-mergetest.pl.in b/v2.6/toolkit/check/fnlo-tk-mergetest.pl.in new file mode 100755 index 0000000000000000000000000000000000000000..71a3d5f47de48a16e9965afc67b4a6a4ecddfb91 --- /dev/null +++ b/v2.6/toolkit/check/fnlo-tk-mergetest.pl.in @@ -0,0 +1,70 @@ +#!/usr/bin/env perl +# +# Unit test to catenate two fastNLO tables +# Version: +# +# created by K. Rabbertz: 20.10.2016 +# +#----------------------------------------------------------------------- +# +use Cwd; +use English; +use Getopt::Std; +use strict; +use warnings; + +# Define source dir as required for VPATH builds like in make distcheck +my $src = "@srcdir@"; + +# Remove potentially left-over temporary files +my @tabs = ("InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_0000", "InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_0001", "InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_0002", "InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_0100", "InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_0101", "InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_0102", "InclusiveNJets_fnr0001midpHT_I723509_v23_fix" ); +my @tabd = ("NJets_born-2jet_0000.tab.gz", "NJets_born-2jet_0001.tab.gz", "NJets_born-2jet_0002.tab.gz", "NJets_nlo-2jet_0100.tab.gz", "NJets_nlo-2jet_0101.tab.gz", "NJets_nlo-2jet_0102.tab.gz", "NJets.tab.gz" ); +my @tabfls; +my @tabgzs; +foreach my $tab ( @tabs ) { + push @tabfls, ${tab}.".tab"; + push @tabgzs, ${tab}.".tab".".gz"; +} +foreach my $file ( "mergetest.tab", "mergediff.log", @tabfls, @tabgzs ) { + if ( -e $file ) { + system("rm -f $file"); + } +} + +# Prepare test setup +# Copy gzipped default tables from data/check storage +for ( my $i=0; $i <= $#tabd ; $i++ ) { + my $cmd = "cp -f ${src}/../data/check/$tabd[$i] $tabgzs[$i]"; + print "Executing command: $cmd\n"; + my $ret = system("$cmd"); + if ( $ret ) {die "fnlo-tk-mergetest: Copying test table $tabd[$i] failed: $ret, aborted!\n";} + $cmd = "gunzip $tabgzs[$i]"; + print "Executing command: $cmd\n"; + $ret = system("$cmd"); + if ( $ret ) {die "fnlo-tk-mergetest: Ungzipping test table $tabgzs[$i] failed: $ret, aborted!\n";} +} + +# Merge +my $cmd = "../src/fnlo-tk-merge $tabfls[0] $tabfls[1] $tabfls[2] $tabfls[3] $tabfls[4] $tabfls[5] mergetest.tab"; +print "Executing command: $cmd\n"; +my $ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-mergetest: Merging test tables $tabfls[0] to $tabfls[5] failed: $ret, aborted!\n";} + +# Determine difference to default catenated table +$cmd = "diff $tabfls[6] mergetest.tab > mergediff.log"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-mergetest: Result comparison with 'diff' failed: $ret, aborted!\n";} + +# The diff.log must be empty +if ( ! -z "mergediff.log" ) { + print "fnlo-tk-mergetest: Merged test table differs from default:\n"; + $cmd = "cat mergediff.log"; + print "Executing command: $cmd\n"; + $ret = system("$cmd"); + die "fnlo-tk-mergetest: Catenation unit test failed, please fix!\n"; +} + +print "fnlo-tk-mergetest: Catenation unit test passed.\n"; + +exit 0; diff --git a/v2.6/toolkit/check/fnlo-tk-qcdnumastest1.pl.in b/v2.6/toolkit/check/fnlo-tk-qcdnumastest1.pl.in new file mode 100755 index 0000000000000000000000000000000000000000..e08064fe25c2ae4654fda12599241701e29dca36 --- /dev/null +++ b/v2.6/toolkit/check/fnlo-tk-qcdnumastest1.pl.in @@ -0,0 +1,66 @@ +#!/usr/bin/env perl +# +# Unit test to read a fastNLO table +# Version: +# +# created by K. Rabbertz: 20.10.2016 +# +#----------------------------------------------------------------------- +# +use Cwd; +use English; +use Getopt::Std; +use strict; +use warnings; + +# Define source dir as required for VPATH builds like in make distcheck +my $src = "@srcdir@"; + +# Remove potentially left-over temporary files +my $tab = "fnl1014_I902309_2-2"; +my $tabfl = ${tab}.".tab"; +my $tabgz = ${tabfl}.".gz"; +foreach my $file ( "qcdnumastest1.log", "qcdnumasdiff1.log", "${tabfl}", "${tabgz}" ) { + if ( -e $file ) { + system("rm -f $file"); + } +} + +# Prepare test setup +# Copy gzipped default tables from data/check storage +my $cmd = "cp -f ${src}/../data/check/${tabgz} ."; +print "Executing command: $cmd\n"; +my $ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-qcdnumastest1: Copying test table ${tabgz} failed: $ret, aborted!\n";} +$cmd = "gunzip ${tabgz}"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-qcdnumastest1: Ungzipping test table ${tabgz} failed: $ret, aborted!\n";} + +# Evaluate, keep only result lines +$cmd = "../src/fnlo-tk-cppread ${tabfl} CT10nlo _ QCDNUM | tail -4 > qcdnumastest1.log"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-qcdnumastest1: Evaluating test table ${tabfl} failed: $ret, aborted!\n";} + +# Determine difference to default evaluation output +$cmd = "diff ${src}/../data/check/${tab}_qcdnumastest1.log qcdnumastest1.log > qcdnumasdiff1.log"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-qcdnumastest1: Result comparison with 'diff' failed: $ret, aborted!\n";} + +# The diff.log must be empty +if ( ! -z "qcdnumasdiff1.log" ) { + print "fnlo-tk-qcdnumastest1: Evaluation of test table differs from default:\n"; + $cmd = "cat qcdnumasdiff1.log"; + print "Executing command: $cmd\n"; + $ret = system("$cmd"); + print "fnlo-tk-qcdnumastest1: Do you use LHAPDF version 6?\n"; + print "fnlo-tk-qcdnumastest1: Do you have the CT10nlo PDF set installed? Is it found?\n"; + print "fnlo-tk-qcdnumastest1: Do you have QCDNUM installed? Is it found?\n"; + die "fnlo-tk-qcdnumastest1: Table evaluation unit test failed, please fix!\n"; +} + +print "fnlo-tk-qcdnumastest1: Table evaluation unit test passed.\n"; + +exit 0; diff --git a/v2.6/toolkit/check/fnlo-tk-qcdnumastest2.pl.in b/v2.6/toolkit/check/fnlo-tk-qcdnumastest2.pl.in new file mode 100755 index 0000000000000000000000000000000000000000..5b5e54148080e4736fbd36799e8d3b0dcaa5e257 --- /dev/null +++ b/v2.6/toolkit/check/fnlo-tk-qcdnumastest2.pl.in @@ -0,0 +1,66 @@ +#!/usr/bin/env perl +# +# Unit test to read a fastNLO table +# Version: +# +# created by K. Rabbertz: 20.10.2016 +# +#----------------------------------------------------------------------- +# +use Cwd; +use English; +use Getopt::Std; +use strict; +use warnings; + +# Define source dir as required for VPATH builds like in make distcheck +my $src = "@srcdir@"; + +# Remove potentially left-over temporary files +my $tab = "fnl1014_I902309_2-2"; +my $tabfl = ${tab}.".tab"; +my $tabgz = ${tabfl}.".gz"; +foreach my $file ( "qcdnumastest2.log", "qcdnumasdiff2.log", "${tabfl}", "${tabgz}" ) { + if ( -e $file ) { + system("rm -f $file"); + } +} + +# Prepare test setup +# Copy gzipped default tables from data/check storage +my $cmd = "cp -f ${src}/../data/check/${tabgz} ."; +print "Executing command: $cmd\n"; +my $ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-qcdnumastest2: Copying test table ${tabgz} failed: $ret, aborted!\n";} +$cmd = "gunzip ${tabgz}"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-qcdnumastest2: Ungzipping test table ${tabgz} failed: $ret, aborted!\n";} + +# Evaluate, keep only result lines +$cmd = "../src/fnlo-tk-cppread ${tabfl} CT10nlo _ QCDNUM _ _ _ 5 2 0.1185 _ | tail -4 > qcdnumastest2.log"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-qcdnumastest2: Evaluating test table ${tabfl} failed: $ret, aborted!\n";} + +# Determine difference to default evaluation output +$cmd = "diff ${src}/../data/check/${tab}_qcdnumastest2.log qcdnumastest2.log > qcdnumasdiff2.log"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-qcdnumastest2: Result comparison with 'diff' failed: $ret, aborted!\n";} + +# The diff.log must be empty +if ( ! -z "qcdnumasdiff2.log" ) { + print "fnlo-tk-qcdnumastest2: Evaluation of test table differs from default:\n"; + $cmd = "cat qcdnumasdiff2.log"; + print "Executing command: $cmd\n"; + $ret = system("$cmd"); + print "fnlo-tk-qcdnumastest2: Do you use LHAPDF version 6?\n"; + print "fnlo-tk-qcdnumastest2: Do you have the CT10nlo PDF set installed? Is it found?\n"; + print "fnlo-tk-qcdnumastest2: Do you have QCDNUM installed? Is it found?\n"; + die "fnlo-tk-qcdnumastest2: Table evaluation unit test failed, please fix!\n"; +} + +print "fnlo-tk-qcdnumastest2: Table evaluation unit test passed.\n"; + +exit 0; diff --git a/v2.6/toolkit/check/fnlo-tk-rundecastest1.pl.in b/v2.6/toolkit/check/fnlo-tk-rundecastest1.pl.in new file mode 100755 index 0000000000000000000000000000000000000000..92870511539be77c3e5c43b2eaa4f84a33551b9d --- /dev/null +++ b/v2.6/toolkit/check/fnlo-tk-rundecastest1.pl.in @@ -0,0 +1,65 @@ +#!/usr/bin/env perl +# +# Unit test to read a fastNLO table +# Version: +# +# created by K. Rabbertz: 20.10.2016 +# +#----------------------------------------------------------------------- +# +use Cwd; +use English; +use Getopt::Std; +use strict; +use warnings; + +# Define source dir as required for VPATH builds like in make distcheck +my $src = "@srcdir@"; + +# Remove potentially left-over temporary files +my $tab = "fnl1014_I902309_2-2"; +my $tabfl = ${tab}.".tab"; +my $tabgz = ${tabfl}.".gz"; +foreach my $file ( "rundecastest1.log", "rundecasdiff1.log", "${tabfl}", "${tabgz}" ) { + if ( -e $file ) { + system("rm -f $file"); + } +} + +# Prepare test setup +# Copy gzipped default tables from data/check storage +my $cmd = "cp -f ${src}/../data/check/${tabgz} ."; +print "Executing command: $cmd\n"; +my $ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-rundecastest1: Copying test table ${tabgz} failed: $ret, aborted!\n";} +$cmd = "gunzip ${tabgz}"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-rundecastest1: Ungzipping test table ${tabgz} failed: $ret, aborted!\n";} + +# Evaluate, keep only result lines +$cmd = "../src/fnlo-tk-cppread ${tabfl} CT10nlo _ RUNDEC | tail -4 > rundecastest1.log"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-rundecastest1: Evaluating test table ${tabfl} failed: $ret, aborted!\n";} + +# Determine difference to default evaluation output +$cmd = "diff ${src}/../data/check/${tab}_rundecastest1.log rundecastest1.log > rundecasdiff1.log"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-rundecastest1: Result comparison with 'diff' failed: $ret, aborted!\n";} + +# The diff.log must be empty +if ( ! -z "rundecasdiff1.log" ) { + print "fnlo-tk-rundecastest1: Evaluation of test table differs from default:\n"; + $cmd = "cat rundecasdiff1.log"; + print "Executing command: $cmd\n"; + $ret = system("$cmd"); + print "fnlo-tk-rundecastest1: Do you use LHAPDF version 6?\n"; + print "fnlo-tk-rundecastest1: Do you have the CT10nlo PDF set installed? Is it found?\n"; + die "fnlo-tk-rundecastest1: Table evaluation unit test failed, please fix!\n"; +} + +print "fnlo-tk-rundecastest1: Table evaluation unit test passed.\n"; + +exit 0; diff --git a/v2.6/toolkit/check/fnlo-tk-rundecastest2.pl.in b/v2.6/toolkit/check/fnlo-tk-rundecastest2.pl.in new file mode 100755 index 0000000000000000000000000000000000000000..9ebe283928fb7de1f7bf0745a92408a2b93e8400 --- /dev/null +++ b/v2.6/toolkit/check/fnlo-tk-rundecastest2.pl.in @@ -0,0 +1,65 @@ +#!/usr/bin/env perl +# +# Unit test to read a fastNLO table +# Version: +# +# created by K. Rabbertz: 20.10.2016 +# +#----------------------------------------------------------------------- +# +use Cwd; +use English; +use Getopt::Std; +use strict; +use warnings; + +# Define source dir as required for VPATH builds like in make distcheck +my $src = "@srcdir@"; + +# Remove potentially left-over temporary files +my $tab = "fnl1014_I902309_2-2"; +my $tabfl = ${tab}.".tab"; +my $tabgz = ${tabfl}.".gz"; +foreach my $file ( "rundecastest2.log", "rundecasdiff2.log", "${tabfl}", "${tabgz}" ) { + if ( -e $file ) { + system("rm -f $file"); + } +} + +# Prepare test setup +# Copy gzipped default tables from data/check storage +my $cmd = "cp -f ${src}/../data/check/${tabgz} ."; +print "Executing command: $cmd\n"; +my $ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-rundecastest2: Copying test table ${tabgz} failed: $ret, aborted!\n";} +$cmd = "gunzip ${tabgz}"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-rundecastest2: Ungzipping test table ${tabgz} failed: $ret, aborted!\n";} + +# Evaluate, keep only result lines +$cmd = "../src/fnlo-tk-cppread ${tabfl} CT10nlo _ RUNDEC _ _ _ 5 2 0.1185 _ | tail -4 > rundecastest2.log"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-rundecastest2: Evaluating test table ${tabfl} failed: $ret, aborted!\n";} + +# Determine difference to default evaluation output +$cmd = "diff ${src}/../data/check/${tab}_rundecastest2.log rundecastest2.log > rundecasdiff2.log"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-rundecastest2: Result comparison with 'diff' failed: $ret, aborted!\n";} + +# The diff.log must be empty +if ( ! -z "rundecasdiff2.log" ) { + print "fnlo-tk-rundecastest2: Evaluation of test table differs from default:\n"; + $cmd = "cat rundecasdiff2.log"; + print "Executing command: $cmd\n"; + $ret = system("$cmd"); + print "fnlo-tk-rundecastest2: Do you use LHAPDF version 6?\n"; + print "fnlo-tk-rundecastest2: Do you have the CT10nlo PDF set installed? Is it found?\n"; + die "fnlo-tk-rundecastest2: Table evaluation unit test failed, please fix!\n"; +} + +print "fnlo-tk-rundecastest2: Table evaluation unit test passed.\n"; + +exit 0; diff --git a/v2.6/toolkit/check/fnlo-tk-stattest.pl.in b/v2.6/toolkit/check/fnlo-tk-stattest.pl.in new file mode 100755 index 0000000000000000000000000000000000000000..1c0593bc6afdfbfcb489913e85aa80a25ae89498 --- /dev/null +++ b/v2.6/toolkit/check/fnlo-tk-stattest.pl.in @@ -0,0 +1,89 @@ +#!/usr/bin/env perl +# +# Unit test to catenate two fastNLO tables +# Version: +# +# created by K. Rabbertz: 20.10.2016 +# +#----------------------------------------------------------------------- +# +use Cwd; +use English; +use Getopt::Std; +use strict; +use warnings; + +# Define source dir as required for VPATH builds like in make distcheck +my $src = "@srcdir@"; + +# Remove potentially left-over temporary files +my $tabl = "InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_stat_"; +my $tabn = "InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_stat_"; +my @tabs = ("InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_stat_0000", "InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_stat_0001", "InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_stat_0002", "InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_stat_0100", "InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_stat_0101", "InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_stat_0102" ); +my @tabd = ("NJets_born-2jet_stat_0000.tab.gz", "NJets_born-2jet_stat_0001.tab.gz", "NJets_born-2jet_stat_0002.tab.gz", "NJets_nlo-2jet_stat_0100.tab.gz", "NJets_nlo-2jet_stat_0101.tab.gz", "NJets_nlo-2jet_stat_0102.tab.gz"); +my @tabfls; +my @tabgzs; +foreach my $tab ( @tabs ) { + push @tabfls, ${tab}.".tab"; + push @tabgzs, ${tab}.".tab".".gz"; +} +foreach my $file ( "statlotest.log", "statnlotest.log", "statlodiff.log", "statnlodiff.log", @tabfls, @tabgzs ) { + if ( -e $file ) { + system("rm -f $file"); + } +} + +# Prepare test setup +# Copy gzipped default tables from data/check storage +for ( my $i=0; $i <= $#tabd ; $i++ ) { + my $cmd = "cp -f ${src}/../data/check/$tabd[$i] $tabgzs[$i]"; + print "Executing command: $cmd\n"; + my $ret = system("$cmd"); + if ( $ret ) {die "fnlo-tk-stattest: Copying test table $tabd[$i] failed: $ret, aborted!\n";} + $cmd = "gunzip $tabgzs[$i]"; + print "Executing command: $cmd\n"; + $ret = system("$cmd"); + if ( $ret ) {die "fnlo-tk-stattest: Ungzipping test table $tabgzs[$i] failed: $ret, aborted!\n";} +} + +# Statistical evaluation +# 05.10.2022: Dirty hack to remove one line from output giving difference in next-to-last digit +# Should be removed/consolidated within new proper unittest framework +my $cmd = "../src/fnlo-tk-statunc $tabl | grep \"Special info\" -B1 -A34 | grep -v \"^ 1 \" > statlotest.log"; +print "Executing command: $cmd\n"; +my $ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-stattest: Statistical evaluation of LO test tables ${tabl} failed: $ret, aborted!\n";} +$cmd = "../src/fnlo-tk-statunc $tabn | grep \"Special info\" -B1 -A34 | grep -v \"^ 1 \" > statnlotest.log"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-stattest: Statistical evaluation of NLO test tables ${tabn} failed: $ret, aborted!\n";} + +# Determine difference to default statistical uncertainties +$cmd = "diff ${src}/../data/check/NJets_born-2jet_stat.log statlotest.log > statlodiff.log"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-stattest: Result comparison with LO 'diff' failed: $ret, aborted!\n";} +$cmd = "diff ${src}/../data/check/NJets_nlo-2jet_stat.log statnlotest.log > statnlodiff.log"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-stattest: Result comparison with NLO 'diff' failed: $ret, aborted!\n";} + +# The diff.log must be empty +if ( ! -z "statlodiff.log" ) { + print "fnlo-tk-stattest: Statistical evaluation of LO test tables differs from default:\n"; + $cmd = "cat statlodiff.log"; + print "Executing command: $cmd\n"; + $ret = system("$cmd"); + die "fnlo-tk-stattest: Statistical evaluation unit test failed, please fix!\n"; +} +if ( ! -z "statnlodiff.log" ) { + print "fnlo-tk-stattest: Statistical evaluation of NLO test tables differs from default:\n"; + $cmd = "cat statnlodiff.log"; + print "Executing command: $cmd\n"; + $ret = system("$cmd"); + die "fnlo-tk-stattest: Statistical evaluation unit test failed, please fix!\n"; +} + +print "fnlo-tk-stattest: Statistical evaluation unit test passed.\n"; + +exit 0; diff --git a/v2.6/toolkit/check/fnlo-tk-zipapp.pl.in b/v2.6/toolkit/check/fnlo-tk-zipapp.pl.in new file mode 100755 index 0000000000000000000000000000000000000000..357bda7e6209ccf8368747e7395a3fe05160106c --- /dev/null +++ b/v2.6/toolkit/check/fnlo-tk-zipapp.pl.in @@ -0,0 +1,75 @@ +#!/usr/bin/env perl +# +# Unit test to read a fastNLO table +# Version: +# +# created by K. Rabbertz: 20.10.2016 +# +#----------------------------------------------------------------------- +# +use Cwd; +use English; +use Getopt::Std; +use strict; +use warnings; + +# Define source dir as required for VPATH builds like in make distcheck +my $src = "@srcdir@"; + +# Remove potentially left-over temporary files +my $tab = "fnl1014_I902309_2"; +my $tabfl = ${tab}.".tab"; +my $tabgz = ${tabfl}.".gz"; +foreach my $file ( "zipapp.tab.gz", "zipapp.log", "zipcpp0.log", "zipcpp1.log", "zipappdiff.log", "zipcppdiff.log", "${tabfl}", "${tabgz}" ) { + if ( -e $file ) { + system("rm -f $file"); + } +} + +# Prepare test setup +# Copy gzipped default tables from data/check storage +my $cmd = "cp -f ${src}/../data/check/${tabgz} ."; +print "Executing command: $cmd\n"; +my $ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-zipapp: Copying test table ${tabgz} failed: $ret, aborted!\n";} + +# Use append to normalise gzipped table directly and write out gzipped table +$cmd = "../src/fnlo-tk-append ${tabgz} zipapp.tab.gz > zipapp.log"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-zipapp: Appending with gzipped test table ${tabgz} failed: $ret, aborted!\n";} + +# Evaluate both tables, the only difference should be the NEVENT normalisation +$cmd = "../src/fnlo-tk-cppread ${tabgz} > zipcpp0.log"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-zipapp: Evaluation gzipped test table ${tabgz} failed: $ret, aborted!\n";} +$cmd = "../src/fnlo-tk-cppread zipapp.tab.gz > zipcpp1.log"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-zipapp: Evaluation gzipped test table zipapp.tab.gz failed: $ret, aborted!\n";} + +# Determine difference between the two outputs and compare to expectation +$cmd = "diff zipcpp0.log zipcpp1.log | grep -v '^[0-9]' > zipappdiff.log"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +# Do not check this $ret here, since a difference is EXPECTED! +$cmd = "diff ${src}/../data/check/zipappdiff.log zipappdiff.log > zipcppdiff.log"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +# Now check, since here the difference should be gone +if ( $ret ) {die "fnlo-tk-zipapp: Result comparison with 'diff' failed: $ret, aborted!\n";} + +# The diff.log must be empty +if ( ! -z "zipcppdiff.log" ) { + print "fnlo-tk-zipapp: Evaluation of gzipped test and of normalised gzipped test table differs from default:\n"; + $cmd = "cat zipcppdiff.log"; + print "Executing command: $cmd\n"; + $ret = system("$cmd"); + print "fnlo-tk-zipapp: Do you use LHAPDF version 6? Do you have the CT10nlo PDF set installed? Is it found?\n"; + die "fnlo-tk-zipapp: Table evaluation unit test failed, please fix!\n"; +} + +print "fnlo-tk-zipapp: Table evaluation unit test passed.\n"; + +exit 0; diff --git a/v2.6/toolkit/check/fnlo-tk-ziptest.pl.in b/v2.6/toolkit/check/fnlo-tk-ziptest.pl.in new file mode 100755 index 0000000000000000000000000000000000000000..4dfcfc95e70a271cb68c45d2e31dc6c203b63450 --- /dev/null +++ b/v2.6/toolkit/check/fnlo-tk-ziptest.pl.in @@ -0,0 +1,60 @@ +#!/usr/bin/env perl +# +# Unit test to read a fastNLO table +# Version: +# +# created by K. Rabbertz: 20.10.2016 +# +#----------------------------------------------------------------------- +# +use Cwd; +use English; +use Getopt::Std; +use strict; +use warnings; + +# Define source dir as required for VPATH builds like in make distcheck +my $src = "@srcdir@"; + +# Remove potentially left-over temporary files +my $tab = "fnl1014_I902309_2-2"; +my $tabfl = ${tab}.".tab"; +my $tabgz = ${tabfl}.".gz"; +foreach my $file ( "ziptest.log", "zipdiff.log", "${tabfl}", "${tabgz}" ) { + if ( -e $file ) { + system("rm -f $file"); + } +} + +# Prepare test setup +# Copy gzipped default tables from data/check storage +my $cmd = "cp -f ${src}/../data/check/${tabgz} ."; +print "Executing command: $cmd\n"; +my $ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-ziptest: Copying test table ${tabgz} failed: $ret, aborted!\n";} + +# Evaluate gzipped table directly, keep only result lines +$cmd = "../src/fnlo-tk-cppread ${tabgz} CT10nlo _ GRV _ _ 5 2 0.1185 _ | grep \"Calculate my cross sections\" -B1 -A11 > ziptest.log"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-ziptest: Evaluating gzipped test table ${tabgz} failed: $ret, aborted!\n";} + +# Determine difference to default evaluation output +$cmd = "diff ${src}/../data/check/${tab}_cpp.log ziptest.log > zipdiff.log"; +print "Executing command: $cmd\n"; +$ret = system("$cmd"); +if ( $ret ) {die "fnlo-tk-ziptest: Result comparison with 'diff' failed: $ret, aborted!\n";} + +# The diff.log must be empty +if ( ! -z "zipdiff.log" ) { + print "fnlo-tk-ziptest: Evaluation of test table differs from default:\n"; + $cmd = "cat zipdiff.log"; + print "Executing command: $cmd\n"; + $ret = system("$cmd"); + print "fnlo-tk-ziptest: Do you use LHAPDF version 6? Do you have the CT10nlo PDF set installed? Is it found?\n"; + die "fnlo-tk-ziptest: Table evaluation unit test failed, please fix!\n"; +} + +print "fnlo-tk-ziptest: Table evaluation unit test passed.\n"; + +exit 0; diff --git a/v2.6/toolkit/configure.ac b/v2.6/toolkit/configure.ac new file mode 100644 index 0000000000000000000000000000000000000000..08cd97271b5ac0328c25b0626038cdf1208d2f61 --- /dev/null +++ b/v2.6/toolkit/configure.ac @@ -0,0 +1,759 @@ +# -*- Autoconf -*- +# ----------------------------------------------------------------------------- +# +# K. Rabbertz, 06.10.2013 +# +# Create distribution and installation package for fastNLO toolkit +# +# ----------------------------------------------------------------------------- +# Process this file with autoconf to produce a configure script. +# Require minimal autoconf version, 2.71 is from 2021 +AC_PREREQ([2.71]) +# Define subproject fastNLO_toolkit +AC_INIT([fastNLO_toolkit],[2.6.0],[Daniel.Britzger@desy.de, Johannes.Gaessler@kit.edu, Klaus.Rabbertz@kit.edu]) +#Suppress verbose output when compiling (use make V=99 for verbose output) +m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) +# Properly include subprojects +AC_CONFIG_AUX_DIR([.]) +# Require minimal automake version, 1.13 is from 2013, switch on warnings +AM_INIT_AUTOMAKE([1.13 tar-ustar -Wall -Wno-override]) +# Require minimal libtool version, 2.4 is from 2011 +LT_PREREQ([2.4]) +# Allow opening precompiled modules at runtime +LT_INIT([dlopen]) +# +# ATTENTION: For conditional compilation etc ... +# AC_DEFINE preprocessor definitions are written to config.h +# which must be included first into all respective source files +AC_CONFIG_SRCDIR([config.h.in]) +AC_CONFIG_HEADERS([config.h]) +AC_CONFIG_MACRO_DIR([m4]) + +# Set default installation directory +AC_PREFIX_DEFAULT(${HOME}/local) + +# Checks for programs. +AC_PROG_AWK +AC_PROG_CXX +AC_PROG_CC +AC_PROG_CPP +AC_PROG_F77([gfortran g77]) +AC_PROG_FC([gfortran g77]) +AC_PROG_INSTALL +AC_PROG_LN_S +AC_PROG_MAKE_SET + +# Checks for sources. + +# Checks for libraries. +AC_F77_LIBRARY_LDFLAGS +AC_CHECK_LIB([g2c], [getenv_]) +AX_CHECK_ZLIB +AM_CONDITIONAL([HAVE_LIBZ],[test "x$HAVE_LIBZ" == "xtrue"]) + +# Checks for header files. + +# Checks for typedefs, structures, compiler characteristics and functionalities. +AC_HEADER_STDBOOL +AC_C_INLINE + +# Require full C++17 functionality, which has been supported by gcc since version 11 +# If the following macro is not found, you might want to install the autoconf-archive +# package and repeat the 'autoreconf -i' step. +AX_CXX_COMPILE_STDCXX_17 + +# Checks for library functions. +AC_FUNC_ERROR_AT_LINE +AC_CHECK_FUNCS([memset pow sqrt strstr]) + +# Announce checks particular for fastNLO_toolkit +AC_MSG_NOTICE([*************************************************]) +AC_MSG_NOTICE([Starting checks particular for $PACKAGE_NAME ...]) +AC_MSG_NOTICE([*************************************************]) + +# LHAPDF +AC_SUBST([TMPNAM],["LHAPDF"]) +AC_MSG_NOTICE([******************************************]) +AC_MSG_NOTICE([Looking for $TMPNAM installation ...]) +AC_MSG_NOTICE([******************************************]) + +AC_ARG_WITH([lhapdf], + [AS_HELP_STRING([--with-lhapdf], + [Specify location of $TMPNAM installation. This takes precedence over + an LHAPDF environment variable, the prefix path or other methods. + Please note: $TMPNAM is mandatory in order to use $PACKAGE_NAME!])], + [if test "x$withval" = "xno"; then + AC_MSG_ERROR([$PACKAGE_NAME CANNOT be used without $TMPNAM! Configuration aborted!]) + fi + if test "x$withval" != "xyes"; then + AC_SUBST([LHAPDF],[$withval]) + AC_MSG_NOTICE([Using given path $LHAPDF as location of $TMPNAM installation.]) + fi], + []) + +if test "x$with_lhapdf" != "xno"; then + if test "x$LHAPDF" = "x"; then + AC_MSG_NOTICE([No $TMPNAM installation path set. Try to find $TMPNAM in prefix path $prefix/bin ...]) + AC_PATH_PROG([LHAPDFBIN],[lhapdf-config],[],[$prefix/bin]) + if test "x$LHAPDFBIN" = "x"; then + AC_MSG_NOTICE([No $TMPNAM installation found in prefix path. Try to find $TMPNAM in system path ...]) + AC_PATH_PROG([LHAPDFBIN],[lhapdf-config]) + if test "x$LHAPDFBIN" = "x"; then + AC_MSG_ERROR([No $TMPNAM library found. Configuration aborted!]) + fi + fi + else + AC_PATH_PROG([LHAPDFBIN],[lhapdf-config],[],[$LHAPDF/bin]) + if test "x$LHAPDFBIN" = "x"; then + AC_MSG_ERROR([lhapdf-config not found in given path to $TMPNAM! Configuration aborted!]) + fi + fi + AC_MSG_NOTICE([******************************************]) + if test "x$LHAPDFBIN" != "x"; then + AC_MSG_NOTICE([$TMPNAM settings:]) + AC_SUBST([LHAPDFPREFIX], [`$LHAPDFBIN --prefix`]) + AC_SUBST([LHAPDFVERSION], [`$LHAPDFBIN --version`]) + LHAPDFVMIN="6" + LHAPDFVORD=`echo -e "$LHAPDFVERSION\n$LHAPDFVMIN" | sort -t"." -g | head -n1` + if test "x$LHAPDFVORD" = "x$LHAPDFVMIN"; then + AC_SUBST([LHAPDFSETPATH], [`$LHAPDFBIN --datadir`]) + else + AC_SUBST([LHAPDFSETPATH], [`$LHAPDFBIN --pdfsets-path`]) + fi + AC_SUBST([LHAPDFBINPATH], ["$LHAPDFPREFIX/bin"]) + AC_SUBST([LHAPDFLIBPATH], [`$LHAPDFBIN --libdir`]) + AC_SUBST([LHAPDFINCLUDEPATH],[`$LHAPDFBIN --incdir`]) + AC_SUBST([LHAPDFCPPFLAGS], [`$LHAPDFBIN --cflags`]) + AC_SUBST([LHAPDFLDFLAGS], [`$LHAPDFBIN --libs`]) + AC_MSG_RESULT([Using $TMPNAM version $LHAPDFVERSION]) + AC_MSG_RESULT([Using $LHAPDFPREFIX for the $TMPNAM installation path]) + AC_MSG_RESULT([Using $LHAPDFSETPATH for the PDF sets]) + AC_MSG_RESULT([Using $LHAPDFBINPATH for the binaries]) + AC_MSG_RESULT([Using $LHAPDFLIBPATH for the library]) + AC_MSG_RESULT([Using $LHAPDFINCLUDEPATH for the includes]) + AC_MSG_RESULT([Using $LHAPDFCPPFLAGS for the CPP flags]) + AC_MSG_RESULT([Using $LHAPDFLDFLAGS for the linker flags]) + else + AC_MSG_ERROR([No $TMPNAM library found. Configuration aborted!]) + fi +else + AC_MSG_NOTICE([******************************************]) + AC_MSG_ERROR([$PACKAGE_NAME CANNOT be used without $TMPNAM! Configuration aborted!]) +fi +AM_CONDITIONAL(HAVE_LHAPDF, test "x$LHAPDFPREFIX" != "x") +AM_CONDITIONAL(HAVE_LHAPDFCONFIG, test "x$LHAPDFBIN" != "x") + +# FastJet +AC_SUBST([TMPNAM],["FastJet"]) +AC_MSG_NOTICE([******************************************]) +AC_MSG_NOTICE([Looking for $TMPNAM installation ...]) +AC_MSG_NOTICE([******************************************]) + +AC_ARG_WITH([fastjet], + [AS_HELP_STRING([--with-fastjet], + [Specify location of $TMPNAM installation. This takes precedence over + a FASTJET environment variable, the prefix path or other methods. + Please note: $TMPNAM is not required but warmly recommended in order to apply jet algorithms!])], + [if test "x$withval" = "xno"; then + AC_MSG_NOTICE([Building $PACKAGE_NAME without $TMPNAM!]) + else + if test "x$withval" != "xyes"; then + AC_SUBST([FASTJET],[$withval]) + AC_MSG_NOTICE([Using given path $FASTJET as location of $TMPNAM installation.]) + fi + fi], + []) + +if test "x$withval" != "xno"; then + if test "x$FASTJET" = "x"; then + AC_MSG_NOTICE([No $TMPNAM installation path set. Try to find $TMPNAM in prefix path ...]) + AC_PATH_PROG([FASTJETBIN],[fastjet-config],[],[$prefix/bin]) + if test "x$FASTJETBIN" = "x"; then + AC_MSG_NOTICE([No $TMPNAM installation found in prefix path. Try to find $TMPNAM in system path ...]) + AC_PATH_PROG([FASTJETBIN],[fastjet-config]) + if test "x$FASTJETBIN" = "x"; then + AC_MSG_NOTICE([Building $PACKAGE_NAME without $TMPNAM!]) + fi + fi + else + AC_PATH_PROG([FASTJETBIN],[fastjet-config],[],[$FASTJET/bin]) + if test "x$FASTJETBIN" = "x"; then + AC_MSG_ERROR([fastjet-config not found in given path to $TMPNAM! Configuration aborted!]) + fi + fi + AC_MSG_NOTICE([******************************************]) + if test "x$FASTJETBIN" != "x"; then + AC_DEFINE([WITH_FASTJET],[1],[Enable conditional compilation with FASTJET]) + AC_MSG_NOTICE([$TMPNAM settings:]) + AC_SUBST([FASTJETPREFIX], [`$FASTJETBIN --prefix`]) + AC_SUBST([FASTJETVERSION], [`$FASTJETBIN --version`]) + AC_SUBST([FASTJETBINPATH], ["$FASTJETPREFIX/bin"]) + AC_SUBST([FASTJETLIBPATH], ["$FASTJETPREFIX/lib"]) + AC_SUBST([FASTJETINCLUDEPATH],["$FASTJETPREFIX/include"]) + AC_SUBST([FASTJETLIBS],[`$FASTJETBINPATH/fastjet-config --libs`]) + AC_MSG_RESULT([Using $TMPNAM version $FASTJETVERSION]) + AC_MSG_RESULT([Using $FASTJETPREFIX for the $TMPNAM installation path]) + AC_MSG_RESULT([Using $FASTJETBINPATH for the binaries]) + AC_MSG_RESULT([Using $FASTJETLIBPATH for the library]) + AC_MSG_RESULT([Using $FASTJETINCLUDEPATH for the includes]) + AC_MSG_RESULT([Using $FASTJETLIBS for the linker flags]) + else + AC_MSG_NOTICE([No $TMPNAM library found. Building $PACKAGE_NAME without $TMPNAM!]) + fi +else + AC_MSG_NOTICE([******************************************]) + AC_MSG_NOTICE([$TMPNAM support switched off by user. Building $PACKAGE_NAME without $TMPNAM!]) +fi +AM_CONDITIONAL(HAVE_FASTJET, test "x$FASTJETPREFIX" != "x") +AM_CONDITIONAL(HAVE_FASTJETCONFIG, test "x$FASTJETBIN" != "x") + +# QCDNUM +AC_SUBST([TMPNAM],["QCDNUM"]) +AC_MSG_NOTICE([******************************************]) +AC_MSG_NOTICE([Checking whether $TMPNAM support is requested ...]) +AC_MSG_NOTICE([******************************************]) + +AC_ARG_WITH([qcdnum], + [AS_HELP_STRING([--with-qcdnum], + [Specify location of $TMPNAM installation. This takes precedence over + a QCDNUM environment variable, the prefix path or other methods. + Please note: $TMPNAM can optionally be used in $PACKAGE_NAME!])], + [if test "x$withval" != "xyes" -a "x$withval" != "xno"; then + AC_SUBST([QCDNUM],[$withval]) + AC_MSG_NOTICE([Using given path $QCDNUM as location of $TMPNAM installation.]) + fi], + [with_qcdnum="no"]) + +if test "x$with_qcdnum" != "xno"; then + if test "x$QCDNUM" = "x"; then + AC_MSG_NOTICE([No $TMPNAM installation path set. Try to find $TMPNAM in prefix path ...]) + AC_PATH_PROG([QCDNUMBIN],[qcdnum-config],[],[$prefix/bin]) + if test "x$QCDNUMBIN" = "x"; then + AC_MSG_NOTICE([No $TMPNAM installation found in prefix path. Try to find $TMPNAM in system path ...]) + AC_PATH_PROG([QCDNUMBIN],[qcdnum-config]) + if test "x$QCDNUMBIN" = "x"; then + AC_MSG_NOTICE([Building $PACKAGE_NAME without $TMPNAM!]) + fi + fi + else + AC_PATH_PROG([QCDNUMBIN],[qcdnum-config],[],[$QCDNUM/bin]) + if test "x$QCDNUMBIN" = "x"; then + AC_MSG_ERROR([qcdnum-config not found in given path to $TMPNAM! Configuration aborted!]) + fi + fi + AC_MSG_NOTICE([******************************************]) + if test "x$QCDNUMBIN" != "x"; then + AC_DEFINE([WITH_QCDNUM],[1],[Enable conditional compilation with QCDNUM]) + AC_MSG_NOTICE([$TMPNAM settings:]) + AC_SUBST([QCDNUM], [`$QCDNUMBIN --prefix`]) + AC_SUBST([QCDNUMPREFIX], [`$QCDNUMBIN --prefix`]) + AC_SUBST([QCDNUMVERSION], [`$QCDNUMBIN --version`]) + AC_SUBST([QCDNUMBINPATH], ["$QCDNUMPREFIX/bin"]) + AC_SUBST([QCDNUMLIBPATH], [`$QCDNUMBIN --libdir`]) + AC_SUBST([QCDNUMINCLUDEPATH],["$QCDNUMPREFIX/include"]) + AC_SUBST([QCDNUMLDFLAGS], [`$QCDNUMBIN --ldflags`]) + AC_MSG_RESULT([Using $TMPNAM version $QCDNUMVERSION]) + AC_MSG_RESULT([Using $QCDNUMPREFIX for the $TMPNAM installation path]) + AC_MSG_RESULT([Using $QCDNUMBINPATH for the binaries]) + AC_MSG_RESULT([Using $QCDNUMLIBPATH for the libraries]) + AC_MSG_RESULT([Using $QCDNUMINCLUDEPATH for the includes]) + AC_MSG_RESULT([Using $QCDNUMLDFLAGS for the linker flags]) + else + AC_MSG_ERROR([No $TMPNAM library found. Configuration aborted!]) + fi +else + AC_MSG_NOTICE([No $TMPNAM support requested. Continue without $TMPNAM.]) + AC_MSG_NOTICE([******************************************]) +fi +AM_CONDITIONAL(HAVE_QCDNUM, test "x$QCDNUMPREFIX" != "x") + +# HOPPET +AC_SUBST([TMPNAM],["HOPPET"]) +AC_MSG_NOTICE([******************************************]) +AC_MSG_NOTICE([Checking whether $TMPNAM support is requested ...]) +AC_MSG_NOTICE([******************************************]) + +AC_ARG_WITH([hoppet], + [AS_HELP_STRING([--with-hoppet], + [Specify location of $TMPNAM installation. This takes precedence over + a HOPPET environment variable, the prefix path or other methods. + Please note: $TMPNAM can optionally be used in $PACKAGE_NAME!])], + [if test "x$withval" != "xyes" -a "x$withval" != "xno"; then + AC_SUBST([HOPPET],[$withval]) + AC_MSG_NOTICE([Using given path $HOPPET as location of $TMPNAM installation.]) + fi], + [with_hoppet="no"]) + +if test "x$with_hoppet" != "xno"; then + if test "x$HOPPET" = "x"; then + AC_MSG_NOTICE([No $TMPNAM installation path set. Try to find $TMPNAM in prefix path ...]) + AC_PATH_PROG([HOPPETBIN],[hoppet-config],[],[$prefix/bin]) + if test "x$HOPPETBIN" = "x"; then + AC_MSG_NOTICE([No $TMPNAM installation found in prefix path. Try to find $TMPNAM in system path ...]) + AC_PATH_PROG([HOPPETBIN],[hoppet-config]) + if test "x$HOPPETBIN" = "x"; then + AC_MSG_NOTICE([Building $PACKAGE_NAME without $TMPNAM!]) + fi + fi + else + AC_PATH_PROG([HOPPETBIN],[hoppet-config],[],[$HOPPET/bin]) + if test "x$HOPPETBIN" = "x"; then + AC_MSG_ERROR([hoppet-config not found in given path to $TMPNAM! Configuration aborted!]) + fi + fi + +# Look for library directly; might be useful if hoppet-config is not found +# AC_CHECK_FILE([$prefix/lib/libhoppet_v1.a], +# [prehoppet="$ac_cv_file_$prefix/lib/libhoppet_v1.a"], +# [prehoppet=""]) +# if test "x$prehoppet" = "x"; then +# AC_MSG_NOTICE([No $TMPNAM library found in prefix path. Try to link with systems $TMPNAM ...]) +# AC_CHECK_LIB([libhoppet_v1],[hoppetstart], +# [syshoppet=$ac_cv_lib_libhoppet_v1_hoppetstart], +# [syshoppet=""]) +# if test "x$syshoppet" = "x"; then +# AC_MSG_ERROR([No $TMPNAM library found. Please install $TMPNAM first. Configuration aborted!]) +# else +# AC_SUBST([HOPPETLIBPATH], [`dirname $syshoppet`]) +# fi +# else +# AC_SUBST([HOPPETLIBPATH], [`dirname $prehoppet`]) +# fi +# AC_SUBST([HOPPET], [`dirname $HOPPETLIBPATH`]) +# else +# AC_CHECK_FILE([$HOPPET/lib/libhoppet_v1.a], +# [], +# [AC_MSG_ERROR([$TMPNAM library not found at given path $HOPPET/lib. Please install $TMPNAM first. Configuration aborted!])]) +# fi + + AC_MSG_NOTICE([******************************************]) + if test "x$HOPPETBIN" != "x"; then + AC_DEFINE([WITH_HOPPET],[1],[Enable conditional compilation with HOPPET]) + AC_MSG_NOTICE([$TMPNAM settings:]) + AC_SUBST([HOPPET], [`$HOPPETBIN --prefix`]) + AC_SUBST([HOPPETPREFIX], [`$HOPPETBIN --prefix`]) + AC_SUBST([HOPPETBINPATH], ["$HOPPETPREFIX/bin"]) + AC_SUBST([HOPPETLIBPATH], ["$HOPPETPREFIX/lib"]) + AC_SUBST([HOPPETINCLUDEPATH],["$HOPPETPREFIX/include"]) + AC_SUBST([HOPPETLDFLAGS], [`$HOPPETBIN --ldflags`]) + AC_SUBST([HOPPETCXXFLAGS], [`$HOPPETBIN --cxxflags`]) + AC_MSG_RESULT([Using $HOPPETPREFIX for the $TMPNAM installation path]) + AC_MSG_RESULT([Using $HOPPETBINPATH for the binaries]) + AC_MSG_RESULT([Using $HOPPETLIBPATH for the libraries]) + AC_MSG_RESULT([Using $HOPPETINCLUDEPATH for the includes]) + AC_MSG_RESULT([Using $HOPPETCXXFLAGS for the compile flags]) + AC_MSG_RESULT([Using $HOPPETLDFLAGS for the linker flags]) + else + AC_MSG_ERROR([No $TMPNAM library found. Configuration aborted!]) + fi +else + AC_MSG_NOTICE([No $TMPNAM support requested. Continue without $TMPNAM.]) + AC_MSG_NOTICE([******************************************]) +fi +AM_CONDITIONAL(HAVE_HOPPET, test "x$HOPPETPREFIX" != "x") + +# YODA +AC_SUBST([TMPNAM],["YODA"]) +AC_MSG_NOTICE([******************************************]) +AC_MSG_NOTICE([Checking whether $TMPNAM support is requested ...]) +AC_MSG_NOTICE([******************************************]) + +AC_ARG_WITH([yoda], + [AS_HELP_STRING([--with-yoda], + [Specify location of $TMPNAM installation. This takes precedence over + a YODA environment variable, the prefix path or other methods. + Please note: $TMPNAM can optionally be used in $PACKAGE_NAME!])], + [if test "x$withval" != "xyes" -a "x$withval" != "xno"; then + AC_SUBST([YODA],[$withval]) + AC_MSG_NOTICE([Using given path $YODA as location of $TMPNAM installation.]) + fi], + [with_yoda="no"]) + +if test "x$with_yoda" != "xno"; then + if test "x$YODA" = "x"; then + AC_MSG_NOTICE([No $TMPNAM installation path set. Try to find $TMPNAM in prefix path ...]) + AC_PATH_PROG([YODABIN],[yoda-config],[],[$prefix/bin]) + if test "x$YODABIN" = "x"; then + AC_MSG_NOTICE([No $TMPNAM installation found in prefix path. Try to find $TMPNAM in system path ...]) + AC_PATH_PROG([YODABIN],[yoda-config]) + if test "x$YODABIN" = "x"; then + AC_MSG_ERROR([No $TMPNAM library found. Configuration aborted!]) + fi + fi + else + AC_PATH_PROG([YODABIN],[yoda-config],[],[$YODA/bin]) + if test "x$YODABIN" = "x"; then + AC_MSG_ERROR([yoda-config not found in given path to $TMPNAM! Configuration aborted!]) + fi + fi + AC_MSG_NOTICE([******************************************]) + if test "x$YODABIN" != "x"; then + AC_DEFINE([WITH_YODA],[1],[Enable conditional compilation with YODA]) + AC_MSG_NOTICE([$TMPNAM settings:]) + AC_SUBST([YODAPREFIX], [`$YODABIN --prefix`]) + AC_SUBST([YODAVERSION], [`$YODABIN --version`]) + AC_SUBST([YODABINPATH], ["$YODAPREFIX/bin"]) + AC_SUBST([YODALIBPATH], [`$YODABIN --libdir`]) + AC_SUBST([YODAINCLUDEPATH],[`$YODABIN --includedir`]) + AC_SUBST([YODACPPFLAGS], [`$YODABIN --cppflags`]) + AC_SUBST([YODALDFLAGS], [`$YODABIN --libs`]) + AC_MSG_RESULT([Using $TMPNAM version $YODAVERSION]) + AC_MSG_RESULT([Using $YODAPREFIX for the $TMPNAM installation path]) + AC_MSG_RESULT([Using $YODABINPATH for the binaries]) + AC_MSG_RESULT([Using $YODALIBPATH for the library]) + AC_MSG_RESULT([Using $YODAINCLUDEPATH for the includes]) + AC_MSG_RESULT([Using $YODACPPFLAGS for the CPP flags]) + AC_MSG_RESULT([Using $YODALDFLAGS for the linker flags]) + else + AC_MSG_ERROR([No $TMPNAM library found. Configuration aborted!]) + fi +else + AC_MSG_NOTICE([No $TMPNAM support requested. Continue without $TMPNAM.]) + AC_MSG_NOTICE([******************************************]) +fi +AM_CONDITIONAL(HAVE_YODA, test "x$YODAPREFIX" != "x") + +# ROOT +AC_SUBST([TMPNAM],["ROOT"]) +AC_MSG_NOTICE([******************************************]) +AC_MSG_NOTICE([Checking whether $TMPNAM support is requested ...]) +AC_MSG_NOTICE([******************************************]) + +AC_ARG_WITH([root], + [AS_HELP_STRING([--with-root], + [Specify location of $TMPNAM installation. This takes precedence over + a ROOTSYS environment variable, the prefix path or other methods. + Please note: $TMPNAM can optionally be used in $PACKAGE_NAME!])], + [if test "x$withval" != "xyes" -a "x$withval" != "xno"; then + AC_SUBST([ROOTSYS],[$withval]) + AC_MSG_NOTICE([Using given path $ROOTSYS as location of $TMPNAM installation.]) + fi], + [with_root="no"]) + +if test "x$with_root" != "xno"; then + if test "x$ROOTSYS" = "x"; then + AC_MSG_NOTICE([No $TMPNAM installation path set. Try to find $TMPNAM in prefix path ...]) + AC_PATH_PROG([ROOTBIN],[root-config],[],[$prefix/bin]) + if test "x$ROOTBIN" = "x"; then + AC_MSG_NOTICE([No $TMPNAM installation found in prefix/bin path. Try to find $TMPNAM in prefix/root/bin path ...]) + AC_PATH_PROG([ROOTBIN],[root-config],[],[$prefix/root/bin]) + if test "x$ROOTBIN" = "x"; then + AC_MSG_NOTICE([No $TMPNAM installation found in prefix path. Try to find $TMPNAM in system path ...]) + AC_PATH_PROG([ROOTBIN],[root-config]) + if test "x$ROOTBIN" = "x"; then + AC_MSG_ERROR([No $TMPNAM library found. Configuration aborted!]) + fi + fi + fi + else + AC_PATH_PROG([ROOTBIN],[root-config],[],[$ROOTSYS/bin]) + if test "x$ROOTBIN" = "x"; then + AC_MSG_ERROR([root-config not found in $ROOTSYS/bin path to $TMPNAM! Configuration aborted!]) + fi + fi + AC_MSG_NOTICE([******************************************]) + if test "x$ROOTBIN" != "x"; then + AC_DEFINE([WITH_ROOT],[1],[Enable conditional compilation with ROOT]) + AC_MSG_NOTICE([$TMPNAM settings:]) + AC_SUBST([ROOTPREFIX], [`$ROOTBIN --prefix`]) + AC_SUBST([ROOTVERSION], [`$ROOTBIN --version`]) + AC_SUBST([ROOTBINPATH], [`$ROOTBIN --bindir`]) + AC_SUBST([ROOTLIBPATH], [`$ROOTBIN --libdir`]) + AC_SUBST([ROOTINCLUDEPATH],[`$ROOTBIN --incdir`]) + AC_SUBST([ROOTCPPFLAGS], [`$ROOTBIN --cflags`]) + AC_SUBST([ROOTCXXFLAGS], [`$ROOTBIN --libs`]) + AC_SUBST([ROOTLDFLAGS], [`$ROOTBIN --ldflags`]) + AC_MSG_RESULT([Using $TMPNAM version $ROOTVERSION]) + AC_MSG_RESULT([Using $ROOTPREFIX for the $TMPNAM installation path]) + AC_MSG_RESULT([Using $ROOTBINPATH for the binaries]) + AC_MSG_RESULT([Using $ROOTLIBPATH for the library]) + AC_MSG_RESULT([Using $ROOTINCLUDEPATH for the includes]) + AC_MSG_RESULT([Using $ROOTCPPFLAGS for the precompiler flags]) + AC_MSG_RESULT([Using $ROOTCXXFLAGS for the compiler flags]) + AC_MSG_RESULT([Using $ROOTLDFLAGS for the linker flags]) + else + AC_MSG_ERROR([No $TMPNAM library found. Configuration aborted!]) + fi +else + AC_MSG_NOTICE([No $TMPNAM support requested. Continue without $TMPNAM.]) + AC_MSG_NOTICE([******************************************]) +fi +AM_CONDITIONAL(HAVE_ROOT, test "x$ROOTPREFIX" != "x") + +# Create code documentation with Doxygen +AC_MSG_NOTICE([******************************************]) +AC_MSG_NOTICE([Checking whether doxygen code documentation is requested ...]) +AC_MSG_NOTICE([Use --enable-doxygen-doc to switch on.]) +AC_MSG_NOTICE([******************************************]) +if test "x$enable_doxygen_chi" != "x"; then + AC_MSG_WARN([Option en/disable_doxygen_chi is not implemented and simply IGNORED!]) +fi +if test "x$enable_doxygen_chm" != "x"; then + AC_MSG_WARN([Option en/disable_doxygen_chm is not implemented and simply IGNORED!]) +fi +if test "x$enable_doxygen_html" != "x"; then + AC_MSG_WARN([Option en/disable_doxygen_html is not implemented and simply IGNORED!]) +fi +if test "x$enable_doxygen_man" != "x"; then + AC_MSG_WARN([Option en/disable_doxygen_man is not implemented and simply IGNORED!]) +fi +if test "x$enable_doxygen_pdf" != "x"; then + AC_MSG_WARN([Option en/disable_doxygen_pdf is not implemented and simply IGNORED!]) +fi +if test "x$enable_doxygen_ps" != "x"; then + AC_MSG_WARN([Option en/disable_doxygen_ps is not implemented and simply IGNORED!]) +fi +if test "x$enable_doxygen_rtf" != "x"; then + AC_MSG_WARN([Option en/disable_doxygen_rtf is not implemented and simply IGNORED!]) +fi +if test "x$enable_doxygen_xml" != "x"; then + AC_MSG_WARN([Option en/disable_doxygen_xml is not implemented and simply IGNORED!]) +fi +if test "x$enable_doxygen_dot" != "x"; then + AC_MSG_WARN([Option en/disable_doxygen_dot is not implemented. Dot will be used if available.]) +fi +if test "x$enable_doxygen_doc" != "x" && test "x$enable_doxygen_doc" != "xno"; then +# Check on DOXYGEN + AC_MSG_NOTICE([Doxygen code documentation desired.]) + AC_CHECK_PROGS(DOXYGEN, doxygen, doxygen) + if test "x$DOXYGEN" = "x"; then + AC_MSG_WARN([Did not find doxygen. Continue without doxygen documentation.]) + AC_MSG_NOTICE([******************************************]) + else +# Minimal version probably is 1.6 + DOXYVMIN="1.5" + DOXYVERS=`doxygen --version` + DOXYVORD=`echo -e "$DOXYVERS\n$DOXYVMIN" | sort -t"." -g | head -n1` + if test "x$DOXYVORD" = "x$DOXYVMIN"; then + AC_MSG_NOTICE([Creating code documentation using doxygen version $DOXYVERS.]) + DX_DOT_FEATURE(ON) + AC_CHECK_PROGS(DOT, dot, dot) + if test "x$DOT" = "x"; then + AC_MSG_WARN([Did not find dot. Continue doxygen documentation without dot graphics.]) + DX_DOT_FEATURE(OFF) + fi + DX_CHM_FEATURE(OFF) + DX_CHI_FEATURE(OFF) + DX_MAN_FEATURE(OFF) + DX_RTF_FEATURE(OFF) + DX_XML_FEATURE(OFF) + DX_PS_FEATURE(OFF) +# This if-then-else setup doesn't work as intended! +# if test "x$enable_doxygen_html" != "xno"; then + DX_HTML_FEATURE(ON) +# AC_MSG_NOTICE([Doxygen html code documentation switched on.]) +# else +# DX_HTML_FEATURE(OFF) +# AC_MSG_NOTICE([Doxygen html code documentation switched off.]) +# fi +# if test "x$enable_doxygen_pdf" != "xno"; then + DX_PDF_FEATURE(ON) +# AC_MSG_NOTICE([Doxygen pdf code documentation switched on.]) +# else +# DX_PDF_FEATURE(OFF) +# AC_MSG_NOTICE([Doxygen pdf code documentation switched off.]) +# fi + else + AC_MSG_WARN([Doxygen version $DOXYVERS too old. Continue without doxygen documentation.]) + AC_MSG_NOTICE([******************************************]) + DOXYGEN="" + fi + fi +else + AC_MSG_NOTICE([No doxygen code documentation desired. Continue without doxygen documentation.]) + AC_MSG_NOTICE([******************************************]) + DOXYGEN="" +fi + +# Additional check on epstopdf ... +AC_CHECK_PROG(EPSTOPDF, epstopdf, epstopdf) +if test "x$EPSTOPDF" = "x"; then + AC_MSG_WARN([Did not find epstopdf. Unable to create doxygen documentation, skipped! Please install epstopdf.]) + DOXYGEN="" +fi +AM_CONDITIONAL(HAVE_EPSTOPDF, test "x$EPSTOPDF" != "x") +AM_CONDITIONAL(HAVE_DOXYGEN, test "x$DOXYGEN" != "x" ) + +# Create documentation +# Check first on PDFLATEX ... +AC_MSG_NOTICE([******************************************]) +AC_MSG_NOTICE([Check for presence of pdflatex ...]) +AC_MSG_NOTICE([******************************************]) +AC_CHECK_PROG(PDFLATEX, pdflatex, pdflatex) +if test "x$PDFLATEX" = "x"; then + AC_MSG_WARN([Unable to create PDF documentation with pdflatex, check for latex & dvipdfm.]) +# Then LATEX & DVIPDFM + AC_MSG_NOTICE([******************************************]) + AC_MSG_NOTICE([Check for presence of latex & dvipdfm ...]) + AC_MSG_NOTICE([******************************************]) + AC_CHECK_PROG(LATEX, latex, latex) + if test "x$LATEX" = "x"; then + AC_MSG_WARN([Unable to create PDF documentation with latex & dvipdfm, continue without.]) + else + AC_CHECK_PROG(DVIPDFM, dvipdfm, dvipdfm) + if test "x$DVIPDFM" = "x"; then + AC_MSG_WARN([Unable to create PDF documentation with latex & dvipdfm, continue without.]) + else + AC_MSG_NOTICE([Creating PDF documentation using latex & dvipdfm.]) + AC_MSG_NOTICE([******************************************]) + fi + fi +else + AC_MSG_NOTICE([Creating PDF documentation using pdflatex.]) + AC_MSG_NOTICE([******************************************]) +fi +AM_CONDITIONAL(HAVE_PDFLATEX, test "x$PDFLATEX" != "x") +AM_CONDITIONAL(HAVE_LATEXDVIPDFM, test "x$LATEX" != "x" && test "x$DVIPDFM" != "x") + +# Python extension (requires Python3!) +AC_MSG_NOTICE([******************************************]) +AC_MSG_NOTICE([Checking whether Python extension is requested ...]) +AC_MSG_NOTICE([******************************************]) + +AC_ARG_ENABLE([pyext], + [AS_HELP_STRING([--enable-pyext],[Optionally build Python3 module to interface C++ library. Default is no.])], + [], + [enable_pyext="no"]) +# Basic Python checks +if test "x$enable_pyext" = "xyes"; then + AM_PATH_PYTHON([3]) + AX_PYTHON_DEVEL +fi + +# Check on existence of SWIG to interface to Python +if test \( "x$enable_pyext" = "xyes" \) -a ! -e pyext/FastNLOReader_wrap.cpp; then + AC_PATH_PROG(SWIG, swig) + if test "x$SWIG" = "x"; then + AC_MSG_ERROR([swig not found, interfacing to Python not possible! Please install swig first or disable Python extension. Configuration aborted!]) + else + AC_MSG_NOTICE([swig found, interface to Python possible.]) + fi +fi + +AC_MSG_NOTICE([******************************************]) + +if test "x$enable_pyext" = "xyes"; then + AC_MSG_NOTICE([All Python3 checks successful. Requested Python3 extension will be built.]) +else + AC_MSG_NOTICE([No Python extension requested. Continue without pyext.]) +fi + +AC_MSG_NOTICE([******************************************]) +AM_CONDITIONAL(ENABLE_PYEXT, [test "x$enable_pyext" = "xyes"]) + +# Fortran extension +AC_MSG_NOTICE([******************************************]) +AC_MSG_NOTICE([Checking whether Fortran extension is requested ...]) +AC_MSG_NOTICE([******************************************]) + +AC_ARG_ENABLE([fortranext], + [AS_HELP_STRING([--enable-fortranext],[Optionally compile basic example for bi-directional interface between Fortran analysis and C++ library. Default is no.])], + [], + [enable_fortranext="no"]) +# Basic Fortran check +if test "x$enable_fortranext" = "xyes"; then + AC_PROG_FC +# The following construct is required to make gfortran work on Mac +# Makefile.am recipe from Mark +#FRTLIB = $(shell gfortran -print-file-name=libgfortran.a) +#FRTLLIB = -L$(subst /libgfortran.a, ,$(FRTLIB) ) -lgfortran +# configure.ac version working without gmake extension + FRTLIB=`sh -c "gfortran -print-file-name=libgfortran.a 2> /dev/null"` + FRTLDFLAGS=`sh -c "echo $(echo "-L$FRTLIB" | sed 's/\/libgfortran\.a/\ -lgfortran/')"` + AC_SUBST(FRTLDFLAGS) + AC_MSG_NOTICE([******************************************]) + AC_MSG_NOTICE([Additional Fortran LDFLAGS are: $FRTLDFLAGS.]) + AC_MSG_NOTICE([******************************************]) +fi +AC_MSG_NOTICE([******************************************]) +if test "x$enable_fortranext" = "xyes"; then + AC_MSG_NOTICE([All Fortran checks successful. Requested Fortran extension will be built.]) +else + AC_MSG_NOTICE([No Fortran extension requested. Continue without fortranext.]) +fi +AC_MSG_NOTICE([******************************************]) +AM_CONDITIONAL(ENABLE_FORTRANEXT, [test "x$enable_fortranext" = "xyes"]) + +# Add subversion-like git revision number +GITREV=`sh -c "git describe 2> /dev/null"` +if { test "x$GITREV" = "x"; } ; + then GITREV=`cat $srcdir/GITREV` + else echo $GITREV>$srcdir/GITREV +fi +AC_SUBST(GITREV) +AC_MSG_NOTICE([******************************************]) +AC_MSG_NOTICE([You are using fastNLO git revision number $GITREV.]) +AC_MSG_NOTICE([******************************************]) + +# Initialize Doxygen doc +if test "x$DOXYGEN" != "x"; then + DX_INIT_DOXYGEN($PROJECT, doxygen.cfg, doc/doxygen) +fi +AM_CONDITIONAL(DX_COND_doc, [test "x$DOXYGEN" != "x"]) +AM_CONDITIONAL(DX_COND_dot, [test "x$DOXYGEN" != "x"]) +AM_CONDITIONAL(DX_COND_man, [test "x$DOXYGEN" != "x"]) +AM_CONDITIONAL(DX_COND_rtf, [test "x$DOXYGEN" != "x"]) +AM_CONDITIONAL(DX_COND_html, [test "x$DOXYGEN" != "x"]) +AM_CONDITIONAL(DX_COND_chm, [test "x$DOXYGEN" != "x"]) +AM_CONDITIONAL(DX_COND_chi, [test "x$DOXYGEN" != "x"]) +AM_CONDITIONAL(DX_COND_xml, [test "x$DOXYGEN" != "x"]) +AM_CONDITIONAL(DX_COND_latex, [test "x$DOXYGEN" != "x"]) +AM_CONDITIONAL(DX_COND_ps, [test "x$DOXYGEN" != "x"]) +AM_CONDITIONAL(DX_COND_pdf, [test "x$DOXYGEN" != "x"]) + +# Define project substitution variables (to be replaced e.g. in config files below) +AC_SUBST([AUTHORS],["D. Britzger, T. Kluge, K. Rabbertz, F. Stober, G. Sieber, M. Wobisch"]) +AC_SUBST([AUTHORSv14],["T. Kluge, K. Rabbertz, M. Wobisch"]) +AC_SUBST([AUTHORSv2],["D. Britzger, K. Rabbertz, F. Stober, M. Wobisch"]) +AC_SUBST([QUOTEv14],["Proc. DIS 2006, 483 (2006), hep-ph/0609285."]) +AC_SUBST([QUOTEv2],["Proc. DIS 2012, 217 (2012), arXiv:1208.3641."]) +AC_SUBST([SUBPROJECT],["toolkit"]) +AC_SUBST([WEBPAGE],["http://projects.hepforge.org/fastnlo"]) +AC_SUBST([YEARS],["2005-`date +%Y`"]) + +# Output +AC_CONFIG_FILES([Makefile + check/Makefile + data/Makefile + data/check/Makefile + data/modify/Makefile + doc/Makefile + doc/fig/Makefile + fastnlotoolkit/Makefile + fastnlotoolkit/include/Makefile + fastnlotoolkit/include/fastnlotk/Makefile + fastnlotoolkit/include/fastnlotk/fastNLOConstants.h + fortranext/Makefile + pyext/Makefile + src/Makefile + src/fnlo-tk-config + ]) + +AC_CONFIG_FILES([check/fnlo-tk-cpptest1.pl],[chmod +x check/fnlo-tk-cpptest1.pl]) +AC_CONFIG_FILES([check/fnlo-tk-cpptest2.pl],[chmod +x check/fnlo-tk-cpptest2.pl])cpp +AC_CONFIG_FILES([check/fnlo-tk-rundecastest1.pl],[chmod +x check/fnlo-tk-rundecastest1.pl]) +AC_CONFIG_FILES([check/fnlo-tk-rundecastest2.pl],[chmod +x check/fnlo-tk-rundecastest2.pl]) +AC_CONFIG_FILES([check/fnlo-tk-lhapdftest.pl],[chmod +x check/fnlo-tk-lhapdftest.pl]) +AC_CONFIG_FILES([check/fnlo-tk-cattest.pl],[chmod +x check/fnlo-tk-cattest.pl]) +AC_CONFIG_FILES([check/fnlo-tk-cppnormtest.pl],[chmod +x check/fnlo-tk-cppnormtest.pl]) +AC_CONFIG_FILES([check/fnlo-tk-cppscalestest.pl],[chmod +x check/fnlo-tk-cppscalestest.pl]) +AC_CONFIG_FILES([check/fnlo-tk-erasetest.pl],[chmod +x check/fnlo-tk-erasetest.pl]) +AC_CONFIG_FILES([check/fnlo-tk-erasetest2.pl],[chmod +x check/fnlo-tk-erasetest2.pl]) +AC_CONFIG_FILES([check/fnlo-tk-mergetest.pl],[chmod +x check/fnlo-tk-mergetest.pl]) +if test "x$ZLIBTEST" != "x"; then + AC_CONFIG_FILES([check/fnlo-tk-stattest.pl],[chmod +x check/fnlo-tk-stattest.pl]) + AC_CONFIG_FILES([check/fnlo-tk-zipapp.pl],[chmod +x check/fnlo-tk-zipapp.pl]) +fi +if test "x$HOPPETPREFIX" != "x"; then + AC_CONFIG_FILES([check/fnlo-tk-hoppetastest1.pl],[chmod +x check/fnlo-tk-hoppetastest1.pl]) + AC_CONFIG_FILES([check/fnlo-tk-hoppetastest2.pl],[chmod +x check/fnlo-tk-hoppetastest2.pl]) +fi +if test "x$QCDNUMPREFIX" != "x"; then + AC_CONFIG_FILES([check/fnlo-tk-qcdnumastest1.pl],[chmod +x check/fnlo-tk-qcdnumastest1.pl]) + AC_CONFIG_FILES([check/fnlo-tk-qcdnumastest2.pl],[chmod +x check/fnlo-tk-qcdnumastest2.pl]) +fi +AC_CONFIG_FILES([check/fnlo-tk-ziptest.pl],[chmod +x check/fnlo-tk-ziptest.pl]) + +AC_OUTPUT + +# doc/paper/Makefile diff --git a/v2.6/toolkit/data/.gitignore b/v2.6/toolkit/data/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..4ccb68f6c24d8744f176e5e1d797375b2ffe4862 --- /dev/null +++ b/v2.6/toolkit/data/.gitignore @@ -0,0 +1,2 @@ +# Ignore temporary files +Steering.tar.gz diff --git a/v2.6/toolkit/data/Makefile.am b/v2.6/toolkit/data/Makefile.am new file mode 100644 index 0000000000000000000000000000000000000000..ad47d410fdfa1ebb09f31b8e18f29499c335efb0 --- /dev/null +++ b/v2.6/toolkit/data/Makefile.am @@ -0,0 +1,57 @@ +# -*- Automake -*- +# ----------------------------------------------------------------------------- +# +# K. Rabbertz, 20.09.2016 +# +# Steering example for fastNLO toolkit +# +# ----------------------------------------------------------------------------- +# Use GNU standards +AUTOMAKE_OPTIONS = gnu + +# Subdirectories +SUBDIRS = modify check + +# Install all data files from gzipped tar archive to avoid limits in command line length! +FIRST = modify +MYDIRS = +ARCHIVE = Steering +TAR = $(ARCHIVE).tar +TARGZ = $(TAR).gz +# and distribute ... +pkgdata_DATA = $(TARGZ) +EXTRA_DIST = $(TARGZ) + +# Create archive +$(TARGZ): + tar cf $(TAR) $(FIRST)/*.str; \ + for i in $(MYDIRS); do \ + echo $$i; \ + tar rf $(TAR) $$i/*.str; \ + done; \ + gzip $(TAR) + +# Install archive hook +install-data-hook: + mv $(TARGZ) $(DESTDIR)$(pkgdatadir); \ + cd $(DESTDIR)$(pkgdatadir); \ + tar xfz $(TARGZ); \ + rm -f $(TARGZ); + +# Uninstall archive hook +uninstall-local: + cd $(DESTDIR)$(pkgdatadir); \ + for i in $(FIRST) $(MYDIRS); do \ + rm -f $$i/*.str; \ + rmdir $$i; \ + done + +# Built by make --> delete with make clean +MOSTLYCLEANFILES = $(TARGZ) + +# Files that are required to build the project but that can be +# recreated IF the necessary autotools etc. are available by: +# "autoreconf -i; ./configure" +# Use "make maintainer-clean" (on a build machine) before svn commits, +# but NOT before distribution with "make dist"! +MAINTAINERCLEANFILES = Makefile.in diff --git a/v2.6/toolkit/data/check/InclusiveNJetEvents_fnl5662i_v23_fix_0-0-2.tab.gz b/v2.6/toolkit/data/check/InclusiveNJetEvents_fnl5662i_v23_fix_0-0-2.tab.gz new file mode 100644 index 0000000000000000000000000000000000000000..ccf3ac424beacb7cfc834b69895748f2f9bbdf77 Binary files /dev/null and b/v2.6/toolkit/data/check/InclusiveNJetEvents_fnl5662i_v23_fix_0-0-2.tab.gz differ diff --git a/v2.5/toolkit/data/check/InclusiveNJetEvents_fnl5662i_v23_fix_0-0-2_cpp.log b/v2.6/toolkit/data/check/InclusiveNJetEvents_fnl5662i_v23_fix_0-0-2_cpp.log similarity index 100% rename from v2.5/toolkit/data/check/InclusiveNJetEvents_fnl5662i_v23_fix_0-0-2_cpp.log rename to v2.6/toolkit/data/check/InclusiveNJetEvents_fnl5662i_v23_fix_0-0-2_cpp.log diff --git a/v2.6/toolkit/data/check/InclusiveNJetEvents_fnl5662i_v23_fix_2-2-2.tab.gz b/v2.6/toolkit/data/check/InclusiveNJetEvents_fnl5662i_v23_fix_2-2-2.tab.gz new file mode 100644 index 0000000000000000000000000000000000000000..7b900d5cc5ec024298fe5f222d1ce8a908ac0b91 Binary files /dev/null and b/v2.6/toolkit/data/check/InclusiveNJetEvents_fnl5662i_v23_fix_2-2-2.tab.gz differ diff --git a/v2.5/toolkit/data/check/InclusiveNJetEvents_fnl5662i_v23_fix_2-2-2_cpp.log b/v2.6/toolkit/data/check/InclusiveNJetEvents_fnl5662i_v23_fix_2-2-2_cpp.log similarity index 100% rename from v2.5/toolkit/data/check/InclusiveNJetEvents_fnl5662i_v23_fix_2-2-2_cpp.log rename to v2.6/toolkit/data/check/InclusiveNJetEvents_fnl5662i_v23_fix_2-2-2_cpp.log diff --git a/v2.6/toolkit/data/check/InclusiveNJetEvents_fnl5662i_v23_fix_2-2.tab.gz b/v2.6/toolkit/data/check/InclusiveNJetEvents_fnl5662i_v23_fix_2-2.tab.gz new file mode 100644 index 0000000000000000000000000000000000000000..91d7a43f41b319d38a8b7bcff68674411c5d6b76 Binary files /dev/null and b/v2.6/toolkit/data/check/InclusiveNJetEvents_fnl5662i_v23_fix_2-2.tab.gz differ diff --git a/v2.5/toolkit/data/check/InclusiveNJetEvents_fnl5662i_v23_fix_2-2_cpp.log b/v2.6/toolkit/data/check/InclusiveNJetEvents_fnl5662i_v23_fix_2-2_cpp.log similarity index 100% rename from v2.5/toolkit/data/check/InclusiveNJetEvents_fnl5662i_v23_fix_2-2_cpp.log rename to v2.6/toolkit/data/check/InclusiveNJetEvents_fnl5662i_v23_fix_2-2_cpp.log diff --git a/v2.6/toolkit/data/check/InclusiveNJetEvents_fnl5662i_v23_fix_norm_1-12.tab.gz b/v2.6/toolkit/data/check/InclusiveNJetEvents_fnl5662i_v23_fix_norm_1-12.tab.gz new file mode 100644 index 0000000000000000000000000000000000000000..4b9ee0b71ffc5fc2e7cff5868a9d5d216835861e Binary files /dev/null and b/v2.6/toolkit/data/check/InclusiveNJetEvents_fnl5662i_v23_fix_norm_1-12.tab.gz differ diff --git a/v2.5/toolkit/data/check/InclusiveNJetEvents_fnl5662i_v23_fix_norm_1-12_cppnorm.log b/v2.6/toolkit/data/check/InclusiveNJetEvents_fnl5662i_v23_fix_norm_1-12_cppnorm.log similarity index 100% rename from v2.5/toolkit/data/check/InclusiveNJetEvents_fnl5662i_v23_fix_norm_1-12_cppnorm.log rename to v2.6/toolkit/data/check/InclusiveNJetEvents_fnl5662i_v23_fix_norm_1-12_cppnorm.log diff --git a/v2.6/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_0000.tab.gz b/v2.6/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_0000.tab.gz new file mode 100644 index 0000000000000000000000000000000000000000..e4f1f8492dde975ed253c2d677569fb9007955cd Binary files /dev/null and b/v2.6/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_0000.tab.gz differ diff --git a/v2.6/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_0001.tab.gz b/v2.6/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_0001.tab.gz new file mode 100644 index 0000000000000000000000000000000000000000..47af3b2bb03cdad0c75847f5801ed2d166b37797 Binary files /dev/null and b/v2.6/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_0001.tab.gz differ diff --git a/v2.6/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_0002.tab.gz b/v2.6/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_0002.tab.gz new file mode 100644 index 0000000000000000000000000000000000000000..7ea69030cd6d32e805fdbed133c3284340034141 Binary files /dev/null and b/v2.6/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_0002.tab.gz differ diff --git a/v2.5/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_stat.log b/v2.6/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_stat.log similarity index 100% rename from v2.5/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_stat.log rename to v2.6/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_stat.log diff --git a/v2.6/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_stat_0000.tab.gz b/v2.6/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_stat_0000.tab.gz new file mode 100644 index 0000000000000000000000000000000000000000..a4c908f82284beb96dbe83e22d6fc86411197933 Binary files /dev/null and b/v2.6/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_stat_0000.tab.gz differ diff --git a/v2.6/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_stat_0001.tab.gz b/v2.6/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_stat_0001.tab.gz new file mode 100644 index 0000000000000000000000000000000000000000..6d16a6091a5cae362abc015a17ade11865db3d37 Binary files /dev/null and b/v2.6/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_stat_0001.tab.gz differ diff --git a/v2.6/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_stat_0002.tab.gz b/v2.6/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_stat_0002.tab.gz new file mode 100644 index 0000000000000000000000000000000000000000..5b5578e7018bd1c2108af16859d5d010bf67592c Binary files /dev/null and b/v2.6/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_stat_0002.tab.gz differ diff --git a/v2.6/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_0100.tab.gz b/v2.6/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_0100.tab.gz new file mode 100644 index 0000000000000000000000000000000000000000..260caba4a47e800eb30a740ce011ddf1c8f53a12 Binary files /dev/null and b/v2.6/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_0100.tab.gz differ diff --git a/v2.6/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_0101.tab.gz b/v2.6/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_0101.tab.gz new file mode 100644 index 0000000000000000000000000000000000000000..2702dbbe9efa6f2f94634a089fd69fcb21d06856 Binary files /dev/null and b/v2.6/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_0101.tab.gz differ diff --git a/v2.6/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_0102.tab.gz b/v2.6/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_0102.tab.gz new file mode 100644 index 0000000000000000000000000000000000000000..9be3894b84d105ccb225d5a49335df872f08b910 Binary files /dev/null and b/v2.6/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_0102.tab.gz differ diff --git a/v2.5/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_stat.log b/v2.6/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_stat.log similarity index 100% rename from v2.5/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_stat.log rename to v2.6/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_stat.log diff --git a/v2.6/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_stat_0100.tab.gz b/v2.6/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_stat_0100.tab.gz new file mode 100644 index 0000000000000000000000000000000000000000..ff16246a1c3beaa19f2f2f96bb629159c51a4eee Binary files /dev/null and b/v2.6/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_stat_0100.tab.gz differ diff --git a/v2.6/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_stat_0101.tab.gz b/v2.6/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_stat_0101.tab.gz new file mode 100644 index 0000000000000000000000000000000000000000..7ecbc9123282f82876f9108e4a9895cd8b9adb86 Binary files /dev/null and b/v2.6/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_stat_0101.tab.gz differ diff --git a/v2.6/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_stat_0102.tab.gz b/v2.6/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_stat_0102.tab.gz new file mode 100644 index 0000000000000000000000000000000000000000..12190165983e19d98355fb830cdc77f67e6ad443 Binary files /dev/null and b/v2.6/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_stat_0102.tab.gz differ diff --git a/v2.6/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix.tab.gz b/v2.6/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix.tab.gz new file mode 100644 index 0000000000000000000000000000000000000000..6e651252e5906d0a546d027d091d056da6f145a4 Binary files /dev/null and b/v2.6/toolkit/data/check/InclusiveNJets_fnr0001midpHT_I723509_v23_fix.tab.gz differ diff --git a/v2.6/toolkit/data/check/Makefile.am b/v2.6/toolkit/data/check/Makefile.am new file mode 100644 index 0000000000000000000000000000000000000000..2e8a37c36c6587491ce1595da6627d6e8a92c9e3 --- /dev/null +++ b/v2.6/toolkit/data/check/Makefile.am @@ -0,0 +1,32 @@ +# -*- Automake -*- +# ----------------------------------------------------------------------------- +# +# K. Rabbertz, 20.10.2016 +# +# fastNLO_toolkit +# +# ----------------------------------------------------------------------------- +# Use GNU standards +AUTOMAKE_OPTIONS = gnu + +# Distribute for checks, but do not install +# Link filenames to avoid cmdline lengths > 99 for tar --> error in distribution +dist_check_DATA = NJetEvents_0-0-2.tab.gz NJetEvents_0-0-2_cpp.log NJetEvents_2-2-2.tab.gz NJetEvents_2-2-2_cpp.log \ +NJetEvents_2-2.tab.gz NJetEvents_2-2_cpp.log NJetEvents_norm_1-12.tab.gz NJetEvents_norm_1-12_cppnorm.log \ +NJets.tab.gz NJets_born-2jet_0000.tab.gz NJets_born-2jet_0001.tab.gz NJets_born-2jet_0002.tab.gz \ +NJets_born-2jet_stat.log NJets_born-2jet_stat_0000.tab.gz NJets_born-2jet_stat_0001.tab.gz NJets_born-2jet_stat_0002.tab.gz \ +NJets_nlo-2jet_0100.tab.gz NJets_nlo-2jet_0101.tab.gz NJets_nlo-2jet_0102.tab.gz \ +NJets_nlo-2jet_stat.log NJets_nlo-2jet_stat_0100.tab.gz NJets_nlo-2jet_stat_0101.tab.gz NJets_nlo-2jet_stat_0102.tab.gz \ +SteerModify_EraseBins.str SteerModify_EraseBins2.str fnl1014_I902309_2-2.tab.gz \ +fnl1014_I902309_2-2_cpptest1.log fnl1014_I902309_2-2_cpptest2.log fnl1014_I902309_2-2_lhapdftest.log \ +fnl1014_I902309_2-2_rundecastest1.log fnl1014_I902309_2-2_rundecastest2.log \ +fnl1014_I902309_2-2_hoppetastest1.log fnl1014_I902309_2-2_hoppetastest2.log \ +fnl1014_I902309_2-2_qcdnumastest1.log fnl1014_I902309_2-2_qcdnumastest2.log \ +fnl1014_I902309_2-2_cppscales.log fnl1014_I902309_2.tab.gz zipappdiff.log + +# Files that are required to build the project but that can be +# recreated IF the necessary autotools etc. are available by: +# "autoreconf -i; ./configure" +# Use "make maintainer-clean" (on a build machine) before svn commits, +# but NOT before distribution with "make dist"! +MAINTAINERCLEANFILES = Makefile.in diff --git a/v2.6/toolkit/data/check/NJetEvents_0-0-2.tab.gz b/v2.6/toolkit/data/check/NJetEvents_0-0-2.tab.gz new file mode 120000 index 0000000000000000000000000000000000000000..ee753271b1ed1a3b290161a79ad919f0c62b3054 --- /dev/null +++ b/v2.6/toolkit/data/check/NJetEvents_0-0-2.tab.gz @@ -0,0 +1 @@ +InclusiveNJetEvents_fnl5662i_v23_fix_0-0-2.tab.gz \ No newline at end of file diff --git a/v2.5/toolkit/data/check/NJetEvents_0-0-2_cpp.log b/v2.6/toolkit/data/check/NJetEvents_0-0-2_cpp.log similarity index 100% rename from v2.5/toolkit/data/check/NJetEvents_0-0-2_cpp.log rename to v2.6/toolkit/data/check/NJetEvents_0-0-2_cpp.log diff --git a/v2.6/toolkit/data/check/NJetEvents_2-2-2.tab.gz b/v2.6/toolkit/data/check/NJetEvents_2-2-2.tab.gz new file mode 120000 index 0000000000000000000000000000000000000000..a8dba2462548ba4a1dea5b264ed03ee145780552 --- /dev/null +++ b/v2.6/toolkit/data/check/NJetEvents_2-2-2.tab.gz @@ -0,0 +1 @@ +InclusiveNJetEvents_fnl5662i_v23_fix_2-2-2.tab.gz \ No newline at end of file diff --git a/v2.5/toolkit/data/check/NJetEvents_2-2-2_cpp.log b/v2.6/toolkit/data/check/NJetEvents_2-2-2_cpp.log similarity index 100% rename from v2.5/toolkit/data/check/NJetEvents_2-2-2_cpp.log rename to v2.6/toolkit/data/check/NJetEvents_2-2-2_cpp.log diff --git a/v2.6/toolkit/data/check/NJetEvents_2-2.tab.gz b/v2.6/toolkit/data/check/NJetEvents_2-2.tab.gz new file mode 120000 index 0000000000000000000000000000000000000000..98bf77984b3715409d8e15d6954b94c6e52d0d44 --- /dev/null +++ b/v2.6/toolkit/data/check/NJetEvents_2-2.tab.gz @@ -0,0 +1 @@ +InclusiveNJetEvents_fnl5662i_v23_fix_2-2.tab.gz \ No newline at end of file diff --git a/v2.5/toolkit/data/check/NJetEvents_2-2_cpp.log b/v2.6/toolkit/data/check/NJetEvents_2-2_cpp.log similarity index 100% rename from v2.5/toolkit/data/check/NJetEvents_2-2_cpp.log rename to v2.6/toolkit/data/check/NJetEvents_2-2_cpp.log diff --git a/v2.6/toolkit/data/check/NJetEvents_norm_1-12.tab.gz b/v2.6/toolkit/data/check/NJetEvents_norm_1-12.tab.gz new file mode 120000 index 0000000000000000000000000000000000000000..c95c4a6f1cc347b5181873da8b34a6305e9b3312 --- /dev/null +++ b/v2.6/toolkit/data/check/NJetEvents_norm_1-12.tab.gz @@ -0,0 +1 @@ +InclusiveNJetEvents_fnl5662i_v23_fix_norm_1-12.tab.gz \ No newline at end of file diff --git a/v2.5/toolkit/data/check/NJetEvents_norm_1-12_cppnorm.log b/v2.6/toolkit/data/check/NJetEvents_norm_1-12_cppnorm.log similarity index 100% rename from v2.5/toolkit/data/check/NJetEvents_norm_1-12_cppnorm.log rename to v2.6/toolkit/data/check/NJetEvents_norm_1-12_cppnorm.log diff --git a/v2.6/toolkit/data/check/NJets.tab.gz b/v2.6/toolkit/data/check/NJets.tab.gz new file mode 120000 index 0000000000000000000000000000000000000000..bd3f4e691d2f1db337f8538ea33303c7e96c67e0 --- /dev/null +++ b/v2.6/toolkit/data/check/NJets.tab.gz @@ -0,0 +1 @@ +InclusiveNJets_fnr0001midpHT_I723509_v23_fix.tab.gz \ No newline at end of file diff --git a/v2.6/toolkit/data/check/NJets_born-2jet_0000.tab.gz b/v2.6/toolkit/data/check/NJets_born-2jet_0000.tab.gz new file mode 120000 index 0000000000000000000000000000000000000000..4b8d4978abe1bf1c0b7da8ebda17fee537b41d97 --- /dev/null +++ b/v2.6/toolkit/data/check/NJets_born-2jet_0000.tab.gz @@ -0,0 +1 @@ +InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_0000.tab.gz \ No newline at end of file diff --git a/v2.6/toolkit/data/check/NJets_born-2jet_0001.tab.gz b/v2.6/toolkit/data/check/NJets_born-2jet_0001.tab.gz new file mode 120000 index 0000000000000000000000000000000000000000..df5ab5468a27ab995aa60d81c1bb20dc277708b5 --- /dev/null +++ b/v2.6/toolkit/data/check/NJets_born-2jet_0001.tab.gz @@ -0,0 +1 @@ +InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_0001.tab.gz \ No newline at end of file diff --git a/v2.6/toolkit/data/check/NJets_born-2jet_0002.tab.gz b/v2.6/toolkit/data/check/NJets_born-2jet_0002.tab.gz new file mode 120000 index 0000000000000000000000000000000000000000..0293668aa1c28ce2e87701b5f7abd3f8880051fc --- /dev/null +++ b/v2.6/toolkit/data/check/NJets_born-2jet_0002.tab.gz @@ -0,0 +1 @@ +InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_0002.tab.gz \ No newline at end of file diff --git a/v2.5/toolkit/data/check/NJets_born-2jet_stat.log b/v2.6/toolkit/data/check/NJets_born-2jet_stat.log similarity index 100% rename from v2.5/toolkit/data/check/NJets_born-2jet_stat.log rename to v2.6/toolkit/data/check/NJets_born-2jet_stat.log diff --git a/v2.6/toolkit/data/check/NJets_born-2jet_stat_0000.tab.gz b/v2.6/toolkit/data/check/NJets_born-2jet_stat_0000.tab.gz new file mode 120000 index 0000000000000000000000000000000000000000..e2345a7978e8ba62f3535762f0cf7bafa6c416cc --- /dev/null +++ b/v2.6/toolkit/data/check/NJets_born-2jet_stat_0000.tab.gz @@ -0,0 +1 @@ +InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_stat_0000.tab.gz \ No newline at end of file diff --git a/v2.6/toolkit/data/check/NJets_born-2jet_stat_0001.tab.gz b/v2.6/toolkit/data/check/NJets_born-2jet_stat_0001.tab.gz new file mode 120000 index 0000000000000000000000000000000000000000..90aa13e099281fe3684bfae001f56311f02e82ed --- /dev/null +++ b/v2.6/toolkit/data/check/NJets_born-2jet_stat_0001.tab.gz @@ -0,0 +1 @@ +InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_stat_0001.tab.gz \ No newline at end of file diff --git a/v2.6/toolkit/data/check/NJets_born-2jet_stat_0002.tab.gz b/v2.6/toolkit/data/check/NJets_born-2jet_stat_0002.tab.gz new file mode 120000 index 0000000000000000000000000000000000000000..64643a0971889f22336bb697cfabb7ee414c34b9 --- /dev/null +++ b/v2.6/toolkit/data/check/NJets_born-2jet_stat_0002.tab.gz @@ -0,0 +1 @@ +InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-born-2jet_stat_0002.tab.gz \ No newline at end of file diff --git a/v2.6/toolkit/data/check/NJets_nlo-2jet_0100.tab.gz b/v2.6/toolkit/data/check/NJets_nlo-2jet_0100.tab.gz new file mode 120000 index 0000000000000000000000000000000000000000..d84b395dbab0b5b4ce19ed3fe300100ee697a018 --- /dev/null +++ b/v2.6/toolkit/data/check/NJets_nlo-2jet_0100.tab.gz @@ -0,0 +1 @@ +InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_0100.tab.gz \ No newline at end of file diff --git a/v2.6/toolkit/data/check/NJets_nlo-2jet_0101.tab.gz b/v2.6/toolkit/data/check/NJets_nlo-2jet_0101.tab.gz new file mode 120000 index 0000000000000000000000000000000000000000..8e45e3a850089f7da126fe246bc242bec831e71a --- /dev/null +++ b/v2.6/toolkit/data/check/NJets_nlo-2jet_0101.tab.gz @@ -0,0 +1 @@ +InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_0101.tab.gz \ No newline at end of file diff --git a/v2.6/toolkit/data/check/NJets_nlo-2jet_0102.tab.gz b/v2.6/toolkit/data/check/NJets_nlo-2jet_0102.tab.gz new file mode 120000 index 0000000000000000000000000000000000000000..e549acd1f264313e5af6a91485002bab181418b9 --- /dev/null +++ b/v2.6/toolkit/data/check/NJets_nlo-2jet_0102.tab.gz @@ -0,0 +1 @@ +InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_0102.tab.gz \ No newline at end of file diff --git a/v2.5/toolkit/data/check/NJets_nlo-2jet_stat.log b/v2.6/toolkit/data/check/NJets_nlo-2jet_stat.log similarity index 100% rename from v2.5/toolkit/data/check/NJets_nlo-2jet_stat.log rename to v2.6/toolkit/data/check/NJets_nlo-2jet_stat.log diff --git a/v2.6/toolkit/data/check/NJets_nlo-2jet_stat_0100.tab.gz b/v2.6/toolkit/data/check/NJets_nlo-2jet_stat_0100.tab.gz new file mode 120000 index 0000000000000000000000000000000000000000..fc954e1de62ab7b85d86c1c130accff8fb68f85b --- /dev/null +++ b/v2.6/toolkit/data/check/NJets_nlo-2jet_stat_0100.tab.gz @@ -0,0 +1 @@ +InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_stat_0100.tab.gz \ No newline at end of file diff --git a/v2.6/toolkit/data/check/NJets_nlo-2jet_stat_0101.tab.gz b/v2.6/toolkit/data/check/NJets_nlo-2jet_stat_0101.tab.gz new file mode 120000 index 0000000000000000000000000000000000000000..a6233fcec4bf0746d557b7d498691822b7be359f --- /dev/null +++ b/v2.6/toolkit/data/check/NJets_nlo-2jet_stat_0101.tab.gz @@ -0,0 +1 @@ +InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_stat_0101.tab.gz \ No newline at end of file diff --git a/v2.6/toolkit/data/check/NJets_nlo-2jet_stat_0102.tab.gz b/v2.6/toolkit/data/check/NJets_nlo-2jet_stat_0102.tab.gz new file mode 120000 index 0000000000000000000000000000000000000000..3018c6782ed2f26e2fb125522ec8a1f0d1ef1315 --- /dev/null +++ b/v2.6/toolkit/data/check/NJets_nlo-2jet_stat_0102.tab.gz @@ -0,0 +1 @@ +InclusiveNJets_fnr0001midpHT_I723509_v23_fix-hhc-nlo-2jet_stat_0102.tab.gz \ No newline at end of file diff --git a/v2.6/toolkit/data/check/SteerModify_EraseBins.str b/v2.6/toolkit/data/check/SteerModify_EraseBins.str new file mode 100644 index 0000000000000000000000000000000000000000..09706a70935df7aa847fb468982043d8735352ce --- /dev/null +++ b/v2.6/toolkit/data/check/SteerModify_EraseBins.str @@ -0,0 +1,16 @@ +# ------------------------ +# Input and output +# ------------------------ +InTable InclusiveNJetEvents_fnl5662i_v23_fix_2-2-2.tab +OutTable erasetest.tab + +# ------------------------------------ +# Remove Bins +# Specify bin numbers to be removed +# within curly brackets. +# First bin is bin 1. +# Please use increasing bin numbering ## +# ------------------------------------ +RemoveBins { # An increasing bin numbering must be used! ## + 5 6 +} diff --git a/v2.6/toolkit/data/check/SteerModify_EraseBins2.str b/v2.6/toolkit/data/check/SteerModify_EraseBins2.str new file mode 100644 index 0000000000000000000000000000000000000000..df844f81f19db57e01cdbbf190740ad7edbc9d74 --- /dev/null +++ b/v2.6/toolkit/data/check/SteerModify_EraseBins2.str @@ -0,0 +1,16 @@ +# ------------------------ +# Input and output +# ------------------------ +InTable fnl1014_I902309_2-2.tab +OutTable erasetest2.tab + +# ------------------------------------ +# Remove Bins +# Specify bin numbers to be removed +# within curly brackets. +# First bin is bin 1. +# Please use increasing bin numbering ## +# ------------------------------------ +RemoveBins { # An increasing bin numbering must be used! ## + 1 2 +} diff --git a/v2.6/toolkit/data/check/fnl1014_I902309_2-2.tab.gz b/v2.6/toolkit/data/check/fnl1014_I902309_2-2.tab.gz new file mode 100644 index 0000000000000000000000000000000000000000..afb7c2a04788cbb0afa5316edbcbd39ee4db4316 Binary files /dev/null and b/v2.6/toolkit/data/check/fnl1014_I902309_2-2.tab.gz differ diff --git a/v2.5/toolkit/data/check/fnl1014_I902309_2-2_cppscales.log b/v2.6/toolkit/data/check/fnl1014_I902309_2-2_cppscales.log similarity index 100% rename from v2.5/toolkit/data/check/fnl1014_I902309_2-2_cppscales.log rename to v2.6/toolkit/data/check/fnl1014_I902309_2-2_cppscales.log diff --git a/v2.5/toolkit/data/check/fnl1014_I902309_2-2_cpptest1.log b/v2.6/toolkit/data/check/fnl1014_I902309_2-2_cpptest1.log similarity index 100% rename from v2.5/toolkit/data/check/fnl1014_I902309_2-2_cpptest1.log rename to v2.6/toolkit/data/check/fnl1014_I902309_2-2_cpptest1.log diff --git a/v2.5/toolkit/data/check/fnl1014_I902309_2-2_cpptest2.log b/v2.6/toolkit/data/check/fnl1014_I902309_2-2_cpptest2.log similarity index 100% rename from v2.5/toolkit/data/check/fnl1014_I902309_2-2_cpptest2.log rename to v2.6/toolkit/data/check/fnl1014_I902309_2-2_cpptest2.log diff --git a/v2.5/toolkit/data/check/fnl1014_I902309_2-2_hoppetastest1.log b/v2.6/toolkit/data/check/fnl1014_I902309_2-2_hoppetastest1.log similarity index 100% rename from v2.5/toolkit/data/check/fnl1014_I902309_2-2_hoppetastest1.log rename to v2.6/toolkit/data/check/fnl1014_I902309_2-2_hoppetastest1.log diff --git a/v2.5/toolkit/data/check/fnl1014_I902309_2-2_hoppetastest2.log b/v2.6/toolkit/data/check/fnl1014_I902309_2-2_hoppetastest2.log similarity index 100% rename from v2.5/toolkit/data/check/fnl1014_I902309_2-2_hoppetastest2.log rename to v2.6/toolkit/data/check/fnl1014_I902309_2-2_hoppetastest2.log diff --git a/v2.5/toolkit/data/check/fnl1014_I902309_2-2_lhapdftest.log b/v2.6/toolkit/data/check/fnl1014_I902309_2-2_lhapdftest.log similarity index 100% rename from v2.5/toolkit/data/check/fnl1014_I902309_2-2_lhapdftest.log rename to v2.6/toolkit/data/check/fnl1014_I902309_2-2_lhapdftest.log diff --git a/v2.5/toolkit/data/check/fnl1014_I902309_2-2_qcdnumastest1.log b/v2.6/toolkit/data/check/fnl1014_I902309_2-2_qcdnumastest1.log similarity index 100% rename from v2.5/toolkit/data/check/fnl1014_I902309_2-2_qcdnumastest1.log rename to v2.6/toolkit/data/check/fnl1014_I902309_2-2_qcdnumastest1.log diff --git a/v2.5/toolkit/data/check/fnl1014_I902309_2-2_qcdnumastest2.log b/v2.6/toolkit/data/check/fnl1014_I902309_2-2_qcdnumastest2.log similarity index 100% rename from v2.5/toolkit/data/check/fnl1014_I902309_2-2_qcdnumastest2.log rename to v2.6/toolkit/data/check/fnl1014_I902309_2-2_qcdnumastest2.log diff --git a/v2.5/toolkit/data/check/fnl1014_I902309_2-2_rundecastest1.log b/v2.6/toolkit/data/check/fnl1014_I902309_2-2_rundecastest1.log similarity index 100% rename from v2.5/toolkit/data/check/fnl1014_I902309_2-2_rundecastest1.log rename to v2.6/toolkit/data/check/fnl1014_I902309_2-2_rundecastest1.log diff --git a/v2.5/toolkit/data/check/fnl1014_I902309_2-2_rundecastest2.log b/v2.6/toolkit/data/check/fnl1014_I902309_2-2_rundecastest2.log similarity index 100% rename from v2.5/toolkit/data/check/fnl1014_I902309_2-2_rundecastest2.log rename to v2.6/toolkit/data/check/fnl1014_I902309_2-2_rundecastest2.log diff --git a/v2.6/toolkit/data/check/fnl1014_I902309_2.tab.gz b/v2.6/toolkit/data/check/fnl1014_I902309_2.tab.gz new file mode 100644 index 0000000000000000000000000000000000000000..8a528a1af66677a34eafe1dcdf99c8694da40d01 Binary files /dev/null and b/v2.6/toolkit/data/check/fnl1014_I902309_2.tab.gz differ diff --git a/v2.5/toolkit/data/check/zipappdiff.log b/v2.6/toolkit/data/check/zipappdiff.log similarity index 100% rename from v2.5/toolkit/data/check/zipappdiff.log rename to v2.6/toolkit/data/check/zipappdiff.log diff --git a/v2.6/toolkit/data/modify/Makefile.am b/v2.6/toolkit/data/modify/Makefile.am new file mode 100644 index 0000000000000000000000000000000000000000..eddfcfb747b2a683828df21be9f4f25c5e601c6f --- /dev/null +++ b/v2.6/toolkit/data/modify/Makefile.am @@ -0,0 +1,17 @@ +# -*- Automake -*- +# ----------------------------------------------------------------------------- +# +# K. Rabbertz, 20.09.2016 +# +# Steering examples for fastNLO toolkit +# +# ----------------------------------------------------------------------------- +# Use GNU standards +AUTOMAKE_OPTIONS = gnu + +# Files that are required to build the project but that can be +# recreated IF the necessary autotools etc. are available by: +# "autoreconf -i; ./configure" +# Use "make maintainer-clean" (on a build machine) before svn commits, +# but NOT before distribution with "make dist"! +MAINTAINERCLEANFILES = Makefile.in diff --git a/v2.6/toolkit/data/modify/SteerModify.str b/v2.6/toolkit/data/modify/SteerModify.str new file mode 100644 index 0000000000000000000000000000000000000000..973d309f505b7c30d58fae8d068046dbb87a1a94 --- /dev/null +++ b/v2.6/toolkit/data/modify/SteerModify.str @@ -0,0 +1,157 @@ +################################################################################## +# Steering example for program +# fnlo-tk-modify +# +# Necessary parameters are "InTable" and "OutTable". +# If you do not want to modify a value, keep it empty. +# +# Alternatively to this file, parameters can be passed to +# fnlo-tk-modify via the command line, e.g.: +# fnlo-tk-modify InTable=fnl4242.tab +# which will overwrite a potential "InTable" value in +# this steering file. +# +# A different steering filename than "SteerModify.str" +# can be specified via the command line +# fnlo-tk-modify steerfile=AnotherSteerfile.str +# +# You can also change all other values available for modification +# via the command line. For example, if you want to modify the table version: +# fnlo-tk-modify InTable=in.tab OutTable=out.tab Itabversion=30000 +# +# In order to change the Scenario Description +# AttachScDescription true # for adding to or false for replacing the description +# ScDescript { +# "First line to add" +# "Second line of add" +# "etc." +# } +# +################################################################################## + +#---------------------- +# Input and output +#---------------------- +InTable TableToModify.tab +OutTable ModifiedTable.tab + +#-------------------- +# Info print out +#-------------------- +Verbosity INFO # Set print out verbosity +PrintSteeringCard true # Print steering provided on command line or within this file +PrintInputA1 true # Print table header of input table +PrintInputA2 true # Print table scenario of input table +PrintOutputA1 true # Print table header of output table +PrintOutputA2 true # Print table scenario of output table + +#------------------------------------------- +# Modify parameters of the table header +# Leave value empty for no modification +#------------------------------------------- +#Itabversion 25000 # Change table version (Expert option!) +#ScenName fnlabcd # Change scenario name + +# -------------------------------------------- +# Modify parameters of the table scenario +# Leave value empty for no modification +# -------------------------------------------- +#Ipublunits # Adapt units to the ones published in HepData +#ILOord # Correct power in alpha_s of LO (Expert option! Must be consistent with original calculation!) +#Ecms # Correct centre-of-mass energy (Expert option! Must be consistent with original calculation!) +AttachScDescription false # Append to (true) or replace (false) existing scenario description +ScDescript { # Example of final scenario description for CMS inclusive jets + "d2sigma-jet_dpTdy_[pb_GeV]" + "CMS_Collaboration" + "Inclusive_Jet_pT" + "anti-kT_R=0.5" + "CMS-PAPER-QCD-10-011, arXiv:1106.0208, Phys. Rev. Lett. 107, 132001 (2011)." + "RIVET_ID=CMS_2011_S9086218/D01-x01-y01,SPIRES_ID=9086218,INSPIRE_RECORD=902309" + "THEORY_LABEL=NLOJet++" + "provided by:" + "fastNLO_2.5.0" + "If you use this table, please cite:" + " D. Britzger, K. Rabbertz, F. Stober, M. Wobisch, Proc. DIS 2012, 217 (2012), arXiv:1208.3641." +} + +#------------------------------------------------------ +# Modify bin sizes set in table scenario +# (Does not change differential cross sections, +# which are stored already in differential form!) +#------------------------------------------------------ +#BinSizeFactor 1. # Overall factor for bin sizes +#BinSize { # Individual bin size factors for each observable bin; one no. per bin! +# +#} + +# -------------------------------------------- +# Modify the table contributions +# -------------------------------------------- + +#-------------------------------------------------------------------- +# Modify tabulated coefficients +# (Changes the differential cross sections, which can be adapted +# such way to updated bin widths or normalisations!) +#-------------------------------------------------------------------- +#MultCoeff { # Individual factors to scale stored coefficients for each observable bin; one no. per bin! +# +#} + +#-------------------------------------------------------------------- +# Modify code description +# (Same description for all perturbative contributions!) +#-------------------------------------------------------------------- +#CodeDescript { +# "NNLOJET_rev5918, please cite: T. Gehrmann et al., PoS RADCOR2017, 074 (2018), arXiv:1801.06415." +# "APPLfast interface, please cite: D. Britzger et al., Eur. Phys. J. C79, 845 (2019), arXiv:1906.05303." +#} + +#-------------------------------------------------------------------- +# Add InfoBlocks with statistical/numerical uncertainty +#-------------------------------------------------------------------- +#InfoBlockFlag1 0 # Default: 0 Statistical/numerical uncertainty +#InfoBlockFlag2 1 # Default: 1 = quadratic addition; else: 0 = linear addition + +# Either read uncertainty from files ... +#InfoBlockFiles { # For each order separately: NNLOJET dat files, fastNLO statunc log files, txt files using 1 or 2 columns +# 2jet.LO.fnl3832_yb0_ys0_ptavgj12.dat +# 2jet.NLO_only.fnl3832_yb0_ys0_ptavgj12.dat +# 2jet.NNLO_only.fnl3832_yb0_ys0_ptavgj12.dat +#} + +#InfoBlockFileColumns { # Column(s) with rel. stat. uncertainty or with x section and abs. stat. uncertainty +# 4 +# 4 5 +#} + +# ... or provide them directly as columns inside this file +#InfoBlockStatUnc {{ +# dstrel_LO dstrel_NLO +# 0.001 0.01 +# 0.001 0.01 +# 0.001 0.01 +# 0.001 0.01 +#}} + +#InfoBlockDescr { # Same description for each contribution +# "Default statistical uncertainties from NNLOJET." +#} + +#InfoBlockOrders { # Attribution of dat files to respective orders +# "LO" +# "NLO" +# "NNLO" +#} + +#------------------------------------------------------------------------- +# Cut out unused observable bins or split table into multiples pieces +# Specify bin numbers to be removed within curly brackets. +# First bin is bin 1, last bin is NObsBin. +# An ordered numbering with INCREASING bin numbers must be used! +# Do NOT erase bins while adding InfoBlocks or vice versa! +#-------------------------------------------------------------------------- +#RemoveBins { # Gaps are fine, BUT an increasing bin numbering must be used! +# 1 2 3 +# 10 13 +# 111 +#} diff --git a/v2.6/toolkit/doc/Makefile.am b/v2.6/toolkit/doc/Makefile.am new file mode 100644 index 0000000000000000000000000000000000000000..89a6d54e990436df59fbc365298e8ff10cb8774b --- /dev/null +++ b/v2.6/toolkit/doc/Makefile.am @@ -0,0 +1,27 @@ +# -*- Automake -*- +# ----------------------------------------------------------------------------- +# +# K. Rabbertz, 18.12.2014 +# +# Include documentation into distribution tarball +# +# ----------------------------------------------------------------------------- +# Use GNU standards +AUTOMAKE_OPTIONS = gnu + +# Subdirectories +SUBDIRS = +if HAVE_DOXYGEN + SUBDIRS += fig +endif +if HAVE_PDFLATEX +# SUBDIRS += paper +endif +# What about HAVE_LATEXDVIPDFM ? TBD + +# Files that are required to build the project but that can be +# recreated IF the necessary autotools etc. are available by: +# "autoreconf -i; ./configure" +# Use "make maintainer-clean" (on a build machine) before svn commits, +# but NOT before distribution with "make dist"! +MAINTAINERCLEANFILES = Makefile.in diff --git a/v2.6/toolkit/doc/fig/Makefile.am b/v2.6/toolkit/doc/fig/Makefile.am new file mode 100644 index 0000000000000000000000000000000000000000..7b38a9a3b9a108492d6ff233066723bcc576aa0c --- /dev/null +++ b/v2.6/toolkit/doc/fig/Makefile.am @@ -0,0 +1,20 @@ +# -*- Automake -*- +# ----------------------------------------------------------------------------- +# +# K. Rabbertz, 12.03.2017 +# +# fastNLO_toolkit +# +# ----------------------------------------------------------------------------- +# Use GNU standards +AUTOMAKE_OPTIONS = gnu + +# Add logo to distribution for doxygen pages +EXTRA_DIST = fastNLO_logo_200x50.png + +# Files that are required to build the project but that can be +# recreated IF the necessary autotools etc. are available by: +# "autoreconf -i; ./configure" +# Use "make maintainer-clean" (on a build machine) before svn commits, +# but not for distribution +MAINTAINERCLEANFILES = Makefile.in diff --git a/v2.6/toolkit/doc/fig/fastNLO_logo_01b_323x80.gif b/v2.6/toolkit/doc/fig/fastNLO_logo_01b_323x80.gif new file mode 100644 index 0000000000000000000000000000000000000000..a4e34ec28fde209039efc820e0bb53fb7cec1516 Binary files /dev/null and b/v2.6/toolkit/doc/fig/fastNLO_logo_01b_323x80.gif differ diff --git a/v2.6/toolkit/doc/fig/fastNLO_logo_01c_280x69.gif b/v2.6/toolkit/doc/fig/fastNLO_logo_01c_280x69.gif new file mode 100644 index 0000000000000000000000000000000000000000..462264d319b8d8e9718043cffa0cb907632fa2e2 Binary files /dev/null and b/v2.6/toolkit/doc/fig/fastNLO_logo_01c_280x69.gif differ diff --git a/v2.6/toolkit/doc/fig/fastNLO_logo_01d_260x64.gif b/v2.6/toolkit/doc/fig/fastNLO_logo_01d_260x64.gif new file mode 100644 index 0000000000000000000000000000000000000000..a8fd526cd9ce36faaf8ce75023f27e73e22db0b5 Binary files /dev/null and b/v2.6/toolkit/doc/fig/fastNLO_logo_01d_260x64.gif differ diff --git a/v2.6/toolkit/doc/fig/fastNLO_logo_200x50.png b/v2.6/toolkit/doc/fig/fastNLO_logo_200x50.png new file mode 100644 index 0000000000000000000000000000000000000000..0839363405f1ab5d35704a5bd085caea48092843 Binary files /dev/null and b/v2.6/toolkit/doc/fig/fastNLO_logo_200x50.png differ diff --git a/v2.6/toolkit/doc/fig/fastNLO_logo_646x161.eps b/v2.6/toolkit/doc/fig/fastNLO_logo_646x161.eps new file mode 100644 index 0000000000000000000000000000000000000000..c99f6978c66a7bb730077b0d49edb7972dbdc5cc --- /dev/null +++ b/v2.6/toolkit/doc/fig/fastNLO_logo_646x161.eps @@ -0,0 +1,1407 @@ +%!PS-Adobe-3.0 EPSF-3.0 +%%psrip: (c) delta@clackas.de, http://www.clackas.de/ +%%psrip: borrowed from 051020Tev4LhcFastNLO.ps on Sun Mar 19 23:24:32 2006 +%%Creator: GIMP PostScript file plugin V 1.15 by Peter Kirchgessner +%%Title: /home/wobisch/gimp-files/fastNLO01.eps +%%CreationDate: Fri Apr 15 16:14:41 2005 +%%DocumentData: Clean7Bit +%%LanguageLevel: 2 +%%Pages: 1 +%%BoundingBox: 14 14 660 175 +%%EndComments +%%BeginProlog +% Use own dictionary to avoid conflicts +10 dict begin +%%EndProlog +%%Page: 1 1 +% Translate for offset +14.173228 14.173228 translate +% Translate to begin of first scanline +0.000000 160.000000 translate +645.000000 -160.000000 scale +% Image geometry +645 160 8 +% Transformation matrix +[ 645 0 0 160 0 0 ] +% Strings to hold RGB-samples per scanline +/rstr 645 string def +/gstr 645 string def +/bstr 645 string def +{currentfile /ASCII85Decode filter /RunLengthDecode filter rstr readstring pop} +{currentfile /ASCII85Decode filter /RunLengthDecode filter gstr readstring pop} +{currentfile /ASCII85Decode filter /RunLengthDecode filter bstr readstring pop} +true 3 +%%BeginData: 87111 ASCII Bytes +colorimage +JcC<$JcC<$JcGZJJ,~> +JcC<$JcC<$JcGZJJ,~> +JcC<$JcC<$JcGZJJ,~> +JcC<$JcC<$JcGZJJ,~> +JcC<$JcC<$JcGZJJ,~> +JcC<$JcC<$JcGZJJ,~> +JcC<$JcC<$JcGZJJ,~> +JcC<$JcC<$JcGZJJ,~> +JcC<$JcC<$JcGZJJ,~> +JcC<$JcC<$JcGZJJ,~> +JcC<$JcC<$JcGZJJ,~> +JcC<$JcC<$JcGZJJ,~> +JcC<$JcC<$JcGZJJ,~> +JcC<$JcC<$JcGZJJ,~> +JcC<$JcC<$JcGZJJ,~> +JcC<$JcC<$JcGZJJ,~> +JcC<$JcC<$JcGZJJ,~> +JcC<$JcC<$JcGZJJ,~> +JcC<$JcC<$JcGZJJ,~> +JcC<$JcC<$JcGZJJ,~> +JcC<$JcC<$JcGZJJ,~> +JcC<$JcC<$JcGZJJ,~> +JcC<$JcC<$JcGZJJ,~> +JcC<$JcC<$JcGZJJ,~> +JcC<$JcC<$JcGZJJ,~> +JcC<$JcC<$JcGZJJ,~> +JcC<$JcC<$JcGZJJ,~> +[f?@+qu-QoJcC<$JcC<$df4g~> +[f?@+qu-QoJcC<$JcC<$df4g~> +[f?@+qu-QoJcC<$JcC<$df4g~> +])N$7rVZQhq=jX^p':?eq>1!drVhBJJcC<$JcF@%J,~> +])N$7rVZQhq=jX^p':?eq>1!drVhBJJcC<$JcF@%J,~> +])N$7rVZQhq=jX^p':?eq>1!drVhBJJcC<$JcF@%J,~> +^&JuLrVQEaoAS<Oe'ZOgguIMZlL"*4pA"O`rdk*#s+13$s4[L'~> +^&JuLrVQEao=^fgS=5k6b2_UHlL"*4pA"O`rdk*#s+13$s4[L'~> +^&JuLrVQEao>[r7Wi2hmcK"$LlL"*4pA"O`rdk*#s+13$s4[L'~> +_#FW<rVQBOdD,@S$a[C^f%oBOnFcYUrdk*#s+13$s4mX)~> +_#FW<rVQB+Lf3mM$V"H^f%oBOnFcYUrdk*#s+13$s4mX)~> +_#FW<rVQB4RVh^N$Xn1If%oBOnFcYUrdk*#s+13$s4mX)~> +_Z'c<rVP`omA^Gq^<P?lme-GTJcC<$JcC<$h>`!~> +_Z'c<rVOH2m03hqXNfGZme-GTJcC<$JcC<$h>`!~> +_Z'c<rVOcWm4S`\Z-Ct_me-GTJcC<$JcC<$h>`!~> +`;]u>rVG$Ll)G#dZ,P;UnG)q\JcC<$JcC<$huA3~> +`;]u>rVDHrklqDdT>fCCnG)q\JcC<$JcC<$huA3~> +`;]u>rVE*Skq<<OUrCpHnG)q\JcC<$JcC<$huA3~> +`W$&>qpi"7WX,GjZ,thhp\b#As+13$s+14.s*t~> +`W$&>qhu]\"pbp"Z,thhp\b#As+13$s+14.s*t~> +`W$&>qjp7=0*jOsZ,thhp\b#As+13$s+14.s*t~> +a8Z8@r7/+5WX#8SU;5LLp\f[CJcC<$JcF[.J,~> +a8Z8@r/Dl["pY``U;5LLp\f[CJcC<$JcF[.J,~> +a8Z8@r1?F<0*a@]U;5LLp\f[CJcC<$JcF[.J,~> +aSu>?o"4Xr!*&9a#FBY(^>&)OrIP!"s+13$s5F!.~> +aSu>?i&gZ;!$1A0#8hZS^>&)OrIP!"s+13$s5F!.~> +aSu>?j]hI4!%[@g#<6ps^>&)OrIP!"s+13$s5F!.~> +ao;D?f(Q*FH5UMaWX!B`T>fg]qu20HJcC<$JcFa0J,~> +ao;D?NV3PX%2f`C"p[)0T>fg]qu20HJcC<$JcFa0J,~> +ao;D?TCso>-lFDu0*amfT>fg]qu20HJcC<$JcFa0J,~> +bPqYCo>L@&".0Z=2s[IKJl@0#dd-]-JcC<$JcC<$ir=N~> +bPqYCiE#XV!s]DV-0ka?'N9L_dd-]-JcC<$JcC<$ir=N~> +bPqYCj`:&J""Os%.dJ_m0N3J&dd-]-JcC<$JcC<$ir=N~> +bl7bDo!A"h"Aoj\6'(?3#!$1W_;b+bJcC<$JcC<$ir=N~> +bl7bDi$%at":5bi5p>Ou#!$1W_;b+bJcC<$JcC<$ir=N~> +bl7bDj[Snr"</%&5s=Ne#!$1W_;b+bJcC<$JcC<$ir=N~> +c2RkEl*Bu^"bmL.3aRR,WWtseI^%Joqu20HJcC<$JcFd1J,~> +c2RkE`?FjX":cJ6?=N4)#9cfjYh8IBrdk*#s+13$s5X-0~> +c2RkEc:.CZ"XX^#3aQUf0*`t$I^%Joqu20HJcC<$JcFd1J,~> +cMmqEi:ErP:_bT]I@oi*#>@9tU<i0$rdk*#s+13Qs8W).s*t~> +cMmqEWUg;u#SesjI@i%V"pYl+D5,ABq>PsFJcC<$Y5eP$\Gq'~> +cMmqE\+;6W)AOl'I@j-u0*`^bD5,ABq>PsFJcC<$Y5eP$\Gq'~> +ci4%Fi:ErRQOP$$CRMfLm&C:\1h)inkkG%,s+13$s1/10rr;rsr;QTjqYpBlr;Z`qrknbd~> +ci4%FWU^5t%3IfMRCesT"pY_s@[P7#p\f[CJcC<$\c;^/s8DuqrqlThrql`ns8Dus_uG5~> +ci4%F\+;6X.LdIaCRMf1ln8Sb1h)inkkG%,s+13$s1/10rr;rsr;QTjqYpBlr;Z`qrknbd~> +d/O.Gi:<lR@1t1jKX0"ZZ0eOr75%o/`9$^kJcC<$JcEF`%K?>(qtg-_p%7hFn*]TAlj`@Mn*oo> +p%S7Xqu$Ela8^Y~> +d/O.GWUU/t'.d(8ZI.A]m03e+03j[YjnAY(s+13$s1SFArr)clqYBmYo^_P@md9u>%INTPnFH2D +p\=U^r;HW8s*t~> +d/O.G\+20X*>9u&KX0"Z;XH+B*%tQ[`9$^kJcC<$JcEF`%K?>(qtg-_p%7hFn*]TAlj`@Mn*oo> +p%S7Xqu$Ela8^Y~> +dJj:Io<\"fru;5)BUd$#kg8^s#88^oOi-;SrIP"$s7$$5s6BU;s4mU9s8W'+r;6<`o>RhtCM@H] +q^iIG@q0%oT![>4jlu1%oCi"Wr;HW<s*t~> +dJj:Ii?@ar#RVP5BUd$#kcF.U#88^oOi-;SrIP"$s7$$5s6BU;s4mU9s8W'+r;6<`o?">1GBJ": +q`b`iDf9THUq#7>jlu1%oCi"Wr;HW<s*t~> +dJj:Ij[Seo#S.n:BUd$#kdBe2#88^oOi-;SrIP"$s7$$5s6BU;s4mU9s8W'+r;6<`oA.j7['R$: +qjS7mXKAV4_p$rqjlu1%oCi"Wr;HW<s*t~> +dJj7=Zgt+'Kb,S)IBV5go'!^SWX+q+11-<dk4eh*s7-*hrqlZer9F1Vr;Z]qro*nWrr;ror9F1V +r;Z`qrpB^err)fmr7h,Gr;Z]qrgj&orquWeaI6p3l7EEOKWWk_jQc4+p\Ogec2W:~> +dJj7++n5aC&11)!YL`(2k[<f_#8K"$Q,_t\rIP"=rrE&qrUp*Rqtp<kr;ciUs8W)urVQNXqtp<k +rVularrW2urVQNIqtp<kr;chfrs/Q$qY/4.GZ*fk$u:g,fA>TRn+?ANr;Ot@J,~> +dJj7/7e/2>-4hLtIBV5go&t;d0*j$B11-<dk4eh*s7-*hrqlZer9F1Vr;Z]qro*nWrr;ror9F1V +r;Z`qrpB^err)fmr7h,Gr;Z]qrgj&orquWei6&L'lC/3\[DgbSjQc4+p\Ogec2W:~> +df0@H]CDm/:_kinP/6/Lq!m7En>Zak)EMT(bj,!&JcG?A"TJ>qq"Oa\q"4g_oCDG@nG_nGnGMe\ +oCVeQqu-NVrs/Q$qYBjWoCDkMlL=cB#P.KYpA+R_rpp'orr)`ip\".KrUJY3rUC-`oC_kRqu-Mh +rs&K$qr4nu6K0R)>EHJJhrjG!q"t$hd/SU~> +df0@H4RiU`#8T+%P/6/Lq!m5pn-0.()EMT(bj,!&JcG?A"TJ>qq"Oa\q"4g_oCDG@nG_nGnGMe\ +oCVeQqu-NVrs/Q$qYBjWoCDkMlL=cB#P.KYpA+R_rpp'orr)`ip\".KrUJY3rUC-`oC_kRqu-Mh +rs&K$qrG84;W9nKB9p6^hrjG!q"t$hd/SU~> +df0@H>k'HT)&>#7P/6/Lq!m6;n1Xe[#!-Iibj,!&JcG?A"TJ>qq"Oa\q"4g_oCDG@nG_nGnGMe\ +oCVeQqu-NVrs/Q$qYBjWoCDkMlL=cB#P.KYpA+R_rpp'orr)`ip\".KrUJY3rUC-`oC_kRqu-Mh +rs&K$qsN%EUuIjOUp\7ohrjG!q"t$hd/SU~> +e,KIJcL@hB*?ILdUsJB%qtTL'X7E7sQOb?3Gc]H`qYl'Go`#-]hqZl6dEq[7#gKuSLN[</;aC7l +mq)lbT\SJfm.:#MrosFhrqlJrY&%ieB4p7:$D4!Hi8s7mo_A=_pAYHur;"I<Chm`uB@UT%H(_S% +iof[upA+XcVuHo!r;*a;gFWb6MoaE*kj\<Br;P.EJ,~> +e,KIJF79AB$Q_TRUsJB%qtTKi)=[n:%jXYiXOZb8rdk+ArrpHBV4jHLrL*PM#a^<a='K`S@8QlA +mrA`!VVL+lm.:#MrosFhrqlK#[!6b:F*$A^$DjWTi8s7mo_A=_pAYHur;"UFG^":PF4G:=K;Q39 +iof[upA+XcVuHo!r;*sMgHQ$TOiZ&0kj\<Br;P.EJ,~> +e,KIJMXW8-&0=,WUsJB%qtTKn54U?5.M!dpGc]H`qYl'Go`#-B[^30<W2KEf#c4,VM3P6DW1j0m +m]Qr1`8';5m.:#MrosFhrqlKAe$ZQgZ*<8l$H0p=i8s7mo_A=_pAYHur;#=$[^<?FYgoob[`$GI +iof[upA+XcVuHo!r;,'TgRAPDYfP>Okj\<Br;P.EJ,~> +eGfRKl0t\_Kb5_0K=0J(qu-EajMn1jWX(j-1L#gMht-bss7H<lrk.[!!-7-P#X"'bdGO9^qYfd\ +"9/7k=kG;49n:I=i9Kq0rVlWm!r^A_at3o_DPYY5jmMg=ri5u$rqtf26e<ms3G#87g#VPmq>C6A +s*t~> +eGfRK`U=!?&L^J.[G16KrVQ6JZl&B=#RMA)>E$2OoDF1>o`"sk4miLS+65Wl9TmBBhs9q2rTsOd +rr&a-fKT[HLs4H.lLXiMrqZQqrR$#857(&/W6j8[me-JVWrE5$r8j#=f09U6Dlq49jR)U8r;P4G +J,~> +eGfRKcL<Is-4qY&K=0J(qu-EajL@>D0*i@31L#gMht-bss7H<lra"qF!+4fV#bJ9>dGO9^qYfd\ +"9/8FYLo<NU9Vqni9Kq0rVlWm!r_5kb*r^/X1cm6jmMg=ri5u$rqu6&Ut2"AU:8>!jR)U8r;P4G +J,~> +eGfRJZgat*:_trrPf2YVrVlfmnD:mXor8<`(+Mq!Us8,trIP"@rrE#bWW6)Z/I,+N^!c!3q>Ka] +!rh:be1CqqT>&\2me?YYqu6]qEQ'L7A$s>.k48?HXoAM&r8WOZ/I>g[`RWu8o_JFaf)L7~> +eGfRJ+n,[H#8]4)Pf2YVrVlfmnD:5_o`b^/(+Mq!Us8,trIP"@rrE#b"op4656kGl^!c!3q>Ka] +!rh@re3=4<Tt\n4me?YYqu6]qIDnDUD7.C8k48?HXoAM&r8j$f57))$`RWu8o_JFaf)L7~> +eGfRJ7dr&A)&G,;Pf2YVrVlfmnD:E3oe-Uf(+Mq!Us8,trIP"@rrE#b0*$4URg5C\^!c!3q>Ka] +!rh_oe=-`6X1ls>me?YYqu6]q]#C-DT=)\jk48?HXoAM&r9qPNRgGXh`RWu8o_JFaf)L7~> +ec,[LcL7bE/fd2rUsSH'rr<#sq!HbIUA1_rQpV`@6tqn!h=:CAJcGEC!WM!DWW5*=/I+b-Y0,_n +qYos`!Tc_t/I+1fWl3ZYp\ash!W?6?/I+n;[*@V#q>IPt"9/5YL<V:V?(f'aipHF8rVkILJ,~> +ec,[LF70;E$6;BNUsSH'rr<#sq!HbI8,*8r#7VP#6tqn!h=:CAJcGEC!WK(c"opXA56k)KY0,_n +qYos`!U!G156jZ5Wl3ZYp\ash!W?`M56k5Y[*@V#q>IPt"9/5[ONfurB;38mipHF8rVkILJ,~> +ec,[LMXN20'-0>WUsSH'rr<#sq!HbI?MH/].iK9T6tqn!h=:CAJcGEC!WKOp0*%'lRg5":Y0,_n +qYos`!V*#7Rg5:BWl3ZYp\ash!WB7?Rg5.H[*@V#q>IPt"9/5e_p+YWR]OBUipHF8rVkILJ,~> +f)GdMoBrUa%jk#$ZeFsHrr2p&r:fO0]UY1HrMg9P=tD!W8nj<meEcl-JcGBB!WC:2WW8OG/I,1- +WQO8mqu6-c!W>F5/I+([T"j%Jq>L<m!WIql/I+k(Wla8kqu3o$!rh89aXmd'Xi&`OnFuhZg&HR~> +f)GdMiU-mU%jk#$ZeFsHrr2p&r:fO0]S\]mr<<Z=&K2uQ8nj<meEcl-JcGBB!W@',"oo(h56k;E +WQO8mqu6-c!W?!E56jQ(T"j%Jq>L<m!WJ;!56k,DWla8kqu3o$!rh>EaZg&CXi&`OnFuhZg&HR~> +f)GdMjmFc-%jk#$ZeFsHrr2p&r:fO0]T,cNr@\R-,9J6h8nj<meEcl-JcGBB!W@lC0*")kRg4+j +WQO8mqu6-c!WAnBRg51+T"j%Jq>L<m!WL'SRg4\)Wla8kqu3o$!rh]-adWR(Xi&`OnFuhZg&HR~> +f)GdL]C2a*F;-B4O20fKrVca5rquKUftaA;CK<ti3]]Ju>]l7;dHC3#rdk+ArrN)9m]$8;h^o'd +=+dU#kk=rFrrN+lc7KAiG+HP/o)&Fds5h!I#$HSZcKFp![/U7-r3\o4/I==cYfGJ^oD/=`g])d~> +f)GdL4RNCY'JE[O^uP+drVm`6r:]I0^nZX"<_,D83^68BFd'2[kOncPJcGBB!W?'e"ooOt56b8C +XO$,(r:9jgri"+,$;,K4_r1+_rr<#]^HVp,K<*;\pAD;t"9/51;o_*/7YJ"dg?J5)r;PINJ,~> +f)GdL>jj<O+qu\7O20fKrVca5rquKUftaA;CK<ti3]]Ju>]l7;dHC3#rdk+ArrN(<mOnQ=hjXk4 +@tUl/kk=rFrrN,GcC5/^G+HP/o)&Fds7*jn#%`FfcKFp![/U7-r7\!fS,\i\YfGJ^oD/=`g])d~> +fDbmNl0bPW58lOrT$-BnrVZ[2rquNXhTE3rML0>ZCiXrbV7kCAo_\W=s7?6jqsCB`<o,D51LQ0N +f^AS7oD\ji7*[@k/lI(qcft3&s8Iki/I+(=MRM4,qYmr'!rh8"_^u-cP.8isme6PWh#Dm~> +fDbmN`U3p9#T>^;T$-BnrVZ[2rquNXhTE3rML0>ZCiXrbV7kCAo_\W=s7?6jqs=Rf/D`Sr4^a5X +f^AS7oD\ji<6d]85#Qd,cft3&s8J4s56j>YMRM4,qYmr'!rh>0_`nE,Pdo&ume6PWh#Dm~> +fDbmNcL*=k()f2IT$-BnrVZ[2rquNXhTE3rML0>ZCiXrbV7kCAo_\W=s7?6jqs?$:GM\eoE+"X6 +f^AS7oD\jiV9YP;O&CA(cft3&s8L!PRg3n>MRM4,qYmr'!rh]"_j^pqT"*,*me6PWh#Dm~> +fDbmM]C)[)*?djqXOZe9rql^0rquQ]k1IefYG\+iW3O(]h<Xb2rdk+@rrN,_mA^.Wh(8jqD4AK' +oDAOZrrD-(/I==ANkF6?qu6O^^F][@6>`:8k4\b_rrN),^b#gLCoP>)kk"ZLh>`!~> +fDbmM4RNCZ$R%r_XOZe9rql^0rquQ]k1IefYG\+iW3O(]h<Xb2rdk+@rrN,;m03PGh*2-2D4AK' +oDAOZrrD3*57';UNkF6?qu6On^HVr`6>`:8k4\b_rrN)2^cr)mEiHt/kk"ZLh>`!~> +fDbmM>ja6N&0XJdXOZe9rql^0rquQ]k1IefYG\+iW3O(]h<Xb2rdk+@rrN,Dm4SHlh4"XMD4AK' +oDAOZrrDQ4RgDDfNkF6?qu6Pj^RGIY6>`:8k4\b_rrN)P^mbUqOf?7Nkk"ZLh>`!~> +f`)!Ol0bPWQOkTDL:Q14r:p:(rVH6VkMOtBdF$ItiT]n,r;M9Io)Aaiea9Bk/I#%#XO?G0rUp0k +rjBs%#U`,dWmgA2rVO8["tir4\_ZiS\c2a1rJ8-=#?[G(d,a`mrSIR)~> +f`)!O`U*j7&1LM3\_crUq#:s)qY'C@hq?N,dF?n/l1+NGrdk+?rrN+Ym0;?1#<Pb2XO?G0rUp0k +rk$B=#VAPjWmgA2rVO8m"tir4\_ZiS\c2a1rK=iY#@O"0d,a`mrSIR)~> +f`)!OcL*=k.M+%,L:Q14r:p:(rVH6VkMOtBdF$ItiT]n,r;M9Io)AaiTC";eRg4OAI]Uu`q#0mc +!WLfsRg;\XGH0-Zq>L3(Rg(KGLq2@4r42h/rr'gLRg4e=\'X4+q>K1MJ,~> +f`)!Oc0hS;F;6N:Pf2\WrV-=&rr)]fo^VA:mI0T;q"t$hJcG9?!WBq(WW7S(/I+1BOhKWBqu6<h +!W@et/I3U]AX^^'p\_G4/I*OiG,s0]qYn,,!rh;#].F:TNNL=\n+ch[i;\<~> +f`)!OEpX&9'es$Z`9$^kp\td'rVH9\na>f3n+$&Fqu-MFs7-*irDr=j!#aNU#<H:U^#&>Wrq??m +rK5;g#VJ)JR`O[dr4BX,#:N#aX4?Y7rk&13ro\[@56t#DXi]Miq#(-Ls*t~> +f`)!OM=*#&+r)h=Pf2\WrV-=&rr)]fo^VA:mI0T;q"t$hJcG9?!W@$+0*"r*Rg2_tOhKWBqu6<h +!WBs\Rg<F^AX^^'p\`aYRg2)FG,s0]qYn,,!rh`$]:0(aNNL=\n+ch[i;\<~> +f`(sLmA^Fg)EV`-cKk<*p&G'k#lOSsqYL*erVhBJmf*:bmA^.sgFWX]89LcRkkG&LrrN(;bUj)G +/Qe"Iiq<2U]e'I33bb52lM:FlrrW2]7(FlT3I7O?h!Fe5ro*m-~> +f`(sLm03h%)EV`-cKk<*p&G'k#lOSsqYL*erVhBJmf*:bm03P:gHPp*89LcRkkG&LrrN(GbWc@e +/Qe"Iiq<2[]fu`K3bb52lM:FlrrW2_<4P4!7sq/Oh!Fe5ro*m-~> +f`(sLm4\JX#!6UncKk<*p&G'k#lOSsqYL*erVhBJmf*:bm4SHTgRAG.89LcRkkG&LrrN)/baSlU +/Qe"Iiq<3%]pf6q3bb52lM:FlrrW2iV7E'$NeXCKh!Fe5ro*m-~> +g&D*PhsIEL0-E]-XOck:rdk+%rrN,_mA^.eg+<O`>DfrFnG<.YrrN%9bUj)F-VoE)hX^NL]e'I0 +116EfkP+qgrrW2]7(4`R13/u$g$AA0ro3s.~> +g&D*PWU0lq$Qql^XOck:rdk+%rrN,;m03PAg-5g%>DfrFnG<.YrrN%EbWc@d-VoE)hX^NR]fu`H +116EfkP+qgrrW2_<4>'t6?Jg6g$AA0ro3s.~> +g&D*P[d>^R'HfhgXOck:rdk+%rrN,Dm4SH`g7&=U>DfrFnG<.YrrN&-baSlS-VoE)hX^Nq]pf6n +116EfkP+qgrrW2iV72p"PCK1=g$AA0ro3s.~> +g&D*O`9jQ0%jt/*\)$ZRJcF@%!WLsCWnAs//44BLb3&Eqp\t9kDp0d=+sT^/ZJ+jEZFqgp*%kEV +_W:Fh^Ae96j[?L.#Vg1a]@Z?Ar;PaVJ,~> +g&D*O<p^(r%jt/*\)$ZRJcF@%!WK"a#2)3G4@=(\b3&Eqp\t9kHd"\[/gEu;ZJ+jE\@k*3+td&\ +_W:Fh^Ae96k>\iR#XNBs]@Z?Ar;PaVJ,~> +g&D*OEpYLb%jt/*\)$ZRJcF@%!WKLo0A2g"NC.ZXb3&Eqp\t9k\BLEJCa2Q$ZJ+jEf=dXY5V?6% +_W:Fh^Ae96nYNX_#a9P%]@Z?Ar;PaVJ,~> +g&D'MmA^GG'/!IM_;k4eJcF@%!WBq(WW8(3/I*n/L:#Y&qYp9i!W-cY/cR"!8:.SonG'<&/I*1F +=H:2WpAMc+!rh:LZRlG;BpQ<\lLt/TjSs`~> +g&D'Mlim\./m=@Qj7WA%s4@8OrDr=j!#!pK#<#V;[+XpErqQKoqg-IN#VI;lHa)2mppe"%#9YR" +Nkj]KrP/@6ro[7e56sPjQFYT3pAFpNs*t~> +g&D'Mm4S_l'/!IM_;k4eJcF@%!W@$+0*"MpRg3;$L:#Y&qYp9i!W0CNRg<gS8:.SonG(SJRg2// +=H:2WpAMc+!rh_dZ^V5`FdBShlLt/TjSs`~> +gA_3Qkj>AU@Mh%8S'(!jrdk+$rrN&'m]$8-f.@1iCRiE*p&+Ub!W0+F/I31;8U[ktnbM(U/I)n? +=c^D[pAMf,!rh:LYq658B9g$YlLt/Tjo9i~> +gA_3Q`9da7#8fC2S'(!jrdk+$rrN$@mKNY5eis=RSAsX_r:p9mqmO^5#Tb0]IBhMrq;K"O#8/Uk +O29oNrP8F7ro[7c56sMgQ+>K2pAFpOs*t~> +gA_3Qc0[.i*Z-hIS'(!jrdk+$rrN$dmOnQIf:)t9CRiE*p&+Ub!W1BjRg;,#8U[ktnbMLaRg0QX +=c^D[pAMf,!rh_dZ'u#^F-X;elLt/Tjo9i~> +gA_3Qea9@B5TN+0Vpau/rn[VSrr;rmr;Z`qrkSR6rr;rir;Z`qro*kXrpoHV!*7Z&##^#Vf'W;4 +q>UKna36+@(+)e.[bUHLp:`*a.24IBPf;eZrP8F6j[?:(#;BeU]%?9Br8ms/~> +gA_3QNU6oU#ou9NVpau/rn[VSrr;rmr;Z`qrkSR6rr;rir;Z`qro*kXro!/J!%c_d#<,P3Yh&4; +rqZQpr6*;K#T>$bK!sJ*q=_Ne#WWSQ?BiFkp\ho-!U!Fc56jGfQ+GT5p\a.QJ,~> +gA_3QTC"9;(EGb\Vpau/rn[VSrr;rmr;Z`qrkSR6rr;rir;Z`qro*kXroNN#!-d%a#AI(eYh&4; +rqZQpr85_f#VIH!K!sJ*q=_Ol#`9<M?BiFkp\ho-!V*"iRg5*tQ+GT5p\a.QJ,~> +gA_3P_sOH0+!XC+Z.eaFro*nWrWiE!qY9gXoCDkM$1d]\pA"L]rVlfas8N!!rVlfUs8W')rVZQh +q"OIRoCDeK$hEo]p%S7WqY^<kroX4]rnm+C!'8[_#<HLa_rC=drqcWqr:J5c$7QW><f=ZMo_S;t +^F]^7(cQ&sbN\g$_>aQ7>-0@]2K"kog?n\6k5Tr~> +gA_3P<p^(s%3nJnZ.eaFro*nWrWiE!qY9gXoCDkM$1d]\pA"L]rVlfas8N!!rVlfUs8W')rVZQh +q"OIRoCDeK$hEo]p%S7WqY^<kroX4]ri#2g!'&Oo#<ZXc_rC=drqcWqr:J5u$98bN<f=ZMo_S<+ +^HVuU(cQ&sbN\g$_>aQ7BWXK(6>i.&g?n\6k5Tr~> +gA_3PEU>Cb&gL"sZ.eaFro*nWrWiE!qY9gXoCDkM$1d]\pA"L]rVlfas8N!!rVlfUs8W')rVZQh +q"OIRoCDeK$hEo]p%S7WqY^<kroX4]rjM2I!0>^##=`?m_rC=drqcWqr:J7'$AoKJ<f=ZMo_S<i +^RGLD(cQ&sbN\g$_>aQ7YcXB"J8U^dg?n\6k5Tr~> +j8T,Yr;HWm!Vs%hWX>().8u#4h=:==r;-?lrp9Y(rquWfp"@sA^:_(h]",Stb2)";l0\$6q"jpf +p&G'k$N9o"qYBp\q"jpfkPl(lrVZNep%$bdeAT&5]=PTP\IZg)bLke7kj.[,p%S=\rVlBfs8Mrp +s82oo_sXN)S(0(q/5CVpe*Hf-qYpWqp41F?$5sd?A!k9upAFa'^F]^)*^OhEdd?o1_Z'Z8EN:Yr +3c^_+hXL@?kPp&~> +j8T,Yr;HWm!Vmo+"pkkj;hqp>nbN+\qY^Enm/J%(r;-3]US*9::JOVX9Os?Nh;IDZmIBlEqY^?c +s8W'*rVZQhq=s^ZqY^?Urso&,r;-3]ntD\HC/7T!:&IZqP*;0NiT04gmd]uEqY^<ko)Jahr;HZn +!W#ga"oo(^56j/CIB:o`q#1'h!r_hMc9DXZ))bul`od!mq8U06#T"OJEi7@QqYnA3!W@GI56jSs +S&*tNq>TRWJ,~> +j8T,Yr;HWm!Vo1P0+'0@.8u#4h=:==r;-?lrp9Y(rquWfortTcChdZtBP2[bU#"Ygl0\$6q"jpf +p&G'k$N9o"qYBp\q"jpfkPl(lrVZNep%#;gX+4u#BkV2YB+LZ/U<DNVkj.[,p%S=\rVlBfs8Mrp +s82ooEUGI[44Tf*F\[@de*Hf-qYpWqp:\b@$;)0oA!k9upAFa?^RGKZ*^OhEdd?o1_Z'Z8\uV;* +GB01hhXL@?kPp&~> +jo5J_r;-3_rq?Bb!VGXDWX<h]/m=7Ih!O_+p&"Fbq"jpfnc&gmrVQBE_6NU3$`pYKdFmLBn+HMS +rqufrrXf&+qtg*]o\nE:i90@npA=jTrs/Q%r;$'@aM7,B%'R%Sce@@@mIU)LrVlKi"9/5op\jgc +o`=Wgm]$8;e1Cn`A!=[coDAOarrW2qf$>oV.1[XlFf<aTq>L3[6,>,Y,n_Y'K!a;&qni@6rh$/A +#=Ng2a5Z^frojB4~> +jo5J_r;-3_rq?Bb!VG"1"pkqq>)g2MmIU#Dqt:-eqY^?_rs&K$qtR!e+S,dF)b#V2g#;/`p%eOb +r;Zfr&H2P(qY9dV]qJ?LkNVI/qu5p]#QF]"q=^V%;=+Pr0Lgu5g>V5^oCr.\rq69nrquTdrV$9a +!V.B$"ooOj56j5ZPJ?&Iqu6Km!ri#JcT_gu%jOMcW7(&.rVQ(]_*82\&h-Y/[+k-J_Z'Z9Vl;lc +8pI)Niq*'Hkl6/~> +jo5J_r;-3_rq?Bb!VG170+&m:/m=7Ih!O_+p&"Fbq"jpfnc&gmrVQAqDaa1M$U8$bdFmLBn+HMS +rqufrrXf&+qtg*]oZ"%Ne*#uapA=jTrs/Q%r;$&lKPg*0$rCE#_:ml2mIU)LrVlKi"9/5op\jgc +o`=VOmOnQ=e=-\=A!=[coDAOarrW2qim4)&M@Uq#Ff<aTq>L3[U;<<)H4hZ'K!a;&qni@6rm7X6 +#AA@Va5Z^frojB4~> +k5PYPhqZl6dEqj<!RALJWX*]:=`p"6_TU7%cN_bXl0n<ArUg*mrr)]L_X"39XLZL*ip?:3qu-Kk +qtg*]o\nE:\,E<3[)gSJlLk)Smf*IirVQ'4\`KgtXL-'thWXM(qu6?i"l\@nf@/.FcN)5WWW7)0 +<WG2B/I*h!Gc9!Sp\k!h"9/2fU!PA"',i]3Mn7a8qu6Ndcb_7?.1mU_AX:6op&2f.!WLBB/I#+' +Wm9f#r9402~> +k5PV+WMQ;ZS,SiUQiWOclimb-,!K=YMj0QqR/E?Ujlu7,qYg'd"TJArVc;sd'L.l*fAc/gq"t$g +r;6?cp@Q%k;E4UZ#=lk]gZnJ0rpKdirr)`MME9i'#qTl5e)'<Yp\XsarroI%UnF6HrgEeR!1*!V +!$C_^!''()#<GJ%W6ji(rVQTsrql5`cp%pT)DkZV]%urSrquH:_ES>e'-95HQG_bUrPSX9rmI]/ +##g&PcKFlukl6/~> +k5PY5[^30<W2KTk!Mt220*iaC0MH;<RA-PTV?Ws[l0n<ArUg*mrr)]#E9f.k>+Wmgip?:3qu-Kk +qtg*]oZ"%N=8acW@`ZmMlLk)Smf*IirVPTE=lh:C9Rb(3hWXM(qu6?i"h;"HY,\GuV?!FZ0*#AL +G6!]cRg4L:Gc9!Sp\k!h"9/2f`mC1`.iL6KMn7a8qu6NdgVTEdMB*a"AX:6op&2f.!WM5ZRg*2L +Wm9f#r9402~> +kPkS^`R:akYJe]>l1FlPpAY6nqp_q7WXYl/_9q3,o(D\IiRbiRpo4RnSZBW^meQkNrr`5sh7DOE +$)ji7bM27Oq#(-frrE#EWW5*@/I+%;Nk=-;qu6Km"9%rUPg_2q.2WmR9R!>XkkG&UrV5]J42icY +.2!UU<.M.$m.pXurrN'df.@1P,pjuf-nEq%#;9D?ZdnF;rTX?4~> +kPkS^=OIBY0>u,hl1FlPpAY6nqhu]]"q;uN_9q3,o(D\I]qA7_p]^soSZBW^meQkNrr`5sV`Wf@ +#o@$]bM27Oq#(-frrE#E"opXD56j/SNk=-;qu6Km"9%rURaXJ43?B"h9R!>XkkG&UrV5]P9>s+& +3><Gg<.M.$m.pXurrN'tf09Hn0etOA1cs>S#<cCMZdnF;rTX?4~> +kPkS^F4)]H:W1N3l1FlPpAY6nqjp7>0+CIG_9q3,o(D\I`ia/[pb)kYSZBW^meQkNrr`5sZs)B@ +#s34>bM27Oq#(-frrE#E0*%'oRg3#$Nk=-;qu6Km"9%rU\^R#ZMED_-9R!>XkkG&UrV5]oS].'* +MB3`m<.M.$m.pXurrN(pf:)t]DJsK6EK/V?#DHK@ZdnF;rTX?4~> +kPkP\dAdGFR&IgRm.gPSrr`8ue["58#+_d/`5]Huo;W%DE/1F;kkG&Grr`8ue["YD!J-d1WX,Jq +\'3^qpA=jerrN,WdAd29j"1Ke7WY?KkkG&QrrrDun(Xm=eh%LZ(EY>'DO8,pnb`=crql<GZX1^) +$Rm27+uN5@TZ6$ar58O8reT;\%j`5;*@*-i2`s>l6:!Xi0AA&`3,"SkhXUIAlMlA~> +kPkP\d09h4R&IgRm.gPSrr`8uN$73c#$%\<NI=S]o*,FiE/1F;kkG&Grr`8uN?R`p!>Gq2"pbs) +\'3^qpA=jerrN+ud09RZj$*c27WY?KkkG&QrrrDun(XpJeisd#)':P)DO8,pnb`=crql<G[:mWG +$TT[Q+uN5@TZ6$ar58O8rfZ##%l5LW*@*-i2`s>l6:!ds452t)5\QFshXUIAlMlA~> +kPkP\d4Y`#R&IgRm.gPSrr`8uSjhZm#%ssNRu_;co.L>JE/1F;kkG&Grr`8uT1.Ng#W\-Ybhh^[ +qu6Nn!WKRU0*")oRg4pBF/-tCp\k!h"oeAegUER$Rh9H]+#$<)QbVDIqu6Wpqt&d]a.!Hp>o+\B +;0JVPj7N8errN,<gRA_#:-osH.krtF5XIe';HeA#S,[.*Q+l,FqYod[J,~> +kl1\_l-ZL9GA;f.b3&Erq>UNpkd&F4#<be!R`4@]rUTsirTLl`WWei+4sqsfm]$MVUqbOGp&"ae +rrN,DdAd1si[kBg=c'WAnG<.]rs8StlI3+p=ZJ7o/Ij3T+W_j\4]HEc\C^*BrVlg&rV>j6]9cba +1XI]a.OHDb+Xf-7>C)jUh!b(<`;]l;cJ:&e.2s$B-SdkX<F9EXF*;_KE,&ib6SdIL#=ip2alW3n +rp0T7~> +kl1\_`R+kp5\btLb3&Erq>UNp`$*>/#<be!R`4@]rUTsirPUef"pG8C)CI-`mKNo%UqbOGp&"ae +rrN+?d09Rgi]dZ,=c'WAnG<.]rs8StlI3+r?U[0857T\-.3Kif4]HEc\C^*BrVlg%rV>j6]9cts +cT_q$1+jsu-o47qHC_k,n+lt$rrN,Ih*2W7,8_CJ1-S<1?YFA!G'7tHC1:=;5i"X08TgcLjn8QN +li2J~> +kl1\_cI"9M:25HZb3&Erq>UNpbsfi0#<be!R`4@]rUTsirQSR:0*NmR,:>*"mOnf\UqbOGp&"ae +rrN+Ud4YJuigU0\=c'WAnG<.]rs8StlI3,'IY3%)Rgt?o;(<eC4]HEc\C^*BrVlg&rV>j6]9e)% +IF+GoN,N,o+Xf-7>C)jUh!b(<`;]l;k1uLAMG,36-SdkX<F9EXF*;_KE,&ibBSYE5#?,c>alW3n +rp0T7~> +kl1\_hpJG/6qV6\_W(7dqu6`sr6=W/"IOCYHAgja#`9ojA<t0qpAOX`!ri/Cn>Z[l(*G1j8lb8Y +#D&5Ne*-K&rr2ourO^IW!+b(@#:r2ZT?66gr;6L+rql?Ne%)!#CKX=t4#]#R1GJ)G&HrOW+=oB6 +8QTYYT"EP;pAFpgrt#&$lIW_CL2L3i6Td:b1c51f!&Eai"s4'[(aCObr\OO1%5p4178R?3MPe8F +mJ$RsrrN'dh^o]p)\a>E4AB."I>X;]UoCDqWhuJXO+VOV2;]tj/lmV/eElu/li2J~> +kl1\_W6keS1.l>J_W(7dqu6`sr,V0/":#8B%1D5$#R_q@A<t0qpAOX`!ri.=n-0(*(*G1j8lb6_ +#@3\*e*-K&rr2ourB&C2!%$Vh#<Y=jT?66gr;6L+rql?Ne%)!#CKX=t4#]#R1H+M_&HrOW+=oB6 +8QTYYT"EP;pAFpgrt#&$lIW_CL2L3i6Td:b1c51f!&Eb&"tKog(aCObr\OO1%5p4178R?3MPe8F +mJ$RsrrN'th`hu=,8;1M4AB."I>X;]UoCDqWhuJXO+VOZ6f1*54B@*=eElu/li2J~> +kl1\_[a?`52G.bN_W(7dqu6`sr/'eo"=kcG-nF@3#V.2`A<t0qpAOX`!ri.Tn1Ote(*G1j8lb73 +#A0=3e*-K&rr2ourEIZ&!,LS`#E;&fT?66gr;6L+rql?Ne%)!#CKX=t4#]#R1K<Y/&HrOW+=oB6 +8QTYYT"EP;pAFpgrt#&$lIW_CL2L3i6Td:b1c51f!&Ec-#&"5O(aCObr\OO1%5p4178R?3MPe8F +mJ$RsrrN(phjYL@9,&Eu4AB."I>X;]UoCDqWhuJXO+VOnMr1!/K3!W/eElu/li2J~> +kl1\^`6tXkRO11-PeuJRrVZZsrpmDaWX>(j,TJ*`2a'B7Olr_MG9&_WSBC'jrUp0lrq"(uWX5%6 +(*tq8A9`g#m]$MaClu3Xm.gPYrrDuDWW5TJ/I#4/Ze4^Arql^,rqlBQfuC:gNIZ.hBkCpd:[0MC +#S\[N;e'`nMk.,ng["P0rqud,rquKUgrZstO+DIlBkCpfraZ"<kUd)`%3$rg<F00GAH$-LB52C2 +KT`.@c/7s`r;OY7!WJ_K/K>W>*%O3OBmu5?Z+\0%dacq#e^Mjd^p^2/KNU(g/I+.EPJ5oDqu5s^ +J,~> +kl1\^<mh0X#UV]EPeuJRrVZZsrnnsf"pkSK*$m6s4[1G0k6;1u*BIi'b38X!p&>*miE#FP#RhIp +3)4"/Kei'##7bR4\(9p@rVlfsr6PWJ1>tG&2cYR<f^AS7qu76,qt94,`j)+pJ9>aDAn>IPl9>gc +'IZ.D@rHaQS[$5ilh1/Sr;R<,r:]I3agIh'JTbpFAn>QQA,p*&57&kM)_XTZ?=RMVracOOC2eHO +P,,V4hsU7:rl"g;rhnX<*$Gk5.m?mGIZgJ2]uJ=Fe^i@&e'H.O[]#RH?UE[8#<cX^^>ADWrp9Z8~> +kl1\^EmcTH/LEVjPeuJRrVZZsroHW<0+'0K(*"VR2a'Ac1$:1q,oo$ZSBC'jrUp0lroJ1j0*s-@ +(*tq8A9`f&mOnf#Clu3Xm.gPYrrDuD0*$X`Rg3\.KsTG"q>U9k&H;S"l.O(]SrJ8CDJ<]o@s%"* +&-rsu5#Ys0I#FQ#a4oqQqu6Nn&,uM#leKUiToXbJDJ<]oAc?3?@d'9fBal"76rdQ'A7Y[N%;0Ep +H%_?V\BWq!p\b$/rrN,GhjYTX&0*2a;e^]DUTqMPc-k.nf@A?rahY?`R"TpPi0ss`AWsjbnb`=P +s*t~> +kl1\^ZdPiZHn.U$S]U'hrVc`srSR%C$r@KS.6:((ASlF*Bn5EI#XKLrE2CtKq>U*f!rhetnYuq; +$lCK^?[S0>[^#5"$?BpJ^>ADWrr;uUd&PtT#!?Xh`T-UgqYq**qtKR?fZLq8X/)D[S==Tb/Ir:5 +4^il,Up.MRfAuDpr;QQm%fZD#nE/HL^pL/=TUq^FrgWtVkUd)`'.HLfKThjpSGo&fT;&6d\&-JH +kjnNHrkna9jkq^&.2!@?2c".?S$9`Tg#;,[mdL/E$L[9Ej4r,'[\A:?i@P9c8TpoRkP"l@s*t~> +kl1\^+jpQ#%P'q`S]U'hrVc`srMf2h$j[C`.6:((ASlF*BfG5[#R_\<E2CtKq>U*f!rh.%n-01- +(b7s\I$Ue@C$c*3.Vk?ahXULBs8K"E#2_WL5&-P*j7N9Grt#,+p[@1qb.b6`UnF<LRsF9`%h0XE +@=XZ>Ye8*0jR;j@rqcX)rquN[k1\(q[&^$rSt2GOS,eu@57&kS.7n9-PFA#3rgaIiU8P0'_U%$$ +o(`.^_uB`"i'.f6()8&Q:MGHNYeeZ=iTKOpn,De`md0/tgsa9OU4Q5#56j;BG,3@FpAO@XJ,~> +kl1\^7a`pq.P!o'S]U'hrVc`srO2,I$lTZr.6:((ASlF*Bh@MA#T+UIE2CtKq>U*f!rh:NnLk4m +$lCK^?[S0>[X7Bp$9W*i^>ADWrr;u,cnF:G#"WKt`T-UgqYq**qtKR?fZLq8X/)D[S=>o2Rh#rN +4^il,Up.MRfAuDpr;QQm%fZD#nE/HL^pL/=TUq^FrgWtVkaMln'.HLfKThjpSGo&fT;&6d\&-JH +kjnNHrkna9n_flKMCTDd2c".?S$9`Tg#;,[mdL/E$L[9Ej4r,'[\A_?iL:(48TpoRkP"l@s*t~> +kl2+ip#EuZE)AhZ2)R3HSF*<\(CLs#.PN[V2#fE>2EF<6K<E_kq>UBn!WC:3WXkFJ'I#G1Ap]Q- +USalZOcnt/#Tk9_I'D;nqu6<h!V<YfWXG.5(G&*lN2jbCg=,Gh'q@p?V9S9!rVulnnCb1*@RrR= +2)I,VWX"jp%2U3=0J`S_!&E7[#:r`&YLMq7rVHO(rr)]dn*/ief$_pjc-):8/Ii@A:k#:Xce77? +n+HPUrqQL#rr)]enEJugf@&%FcMu,ibfK!"#pC0E@#M/'b0A31c3hnFeC`U<lga`HrPJR8reTMb +&KhZ&.RIHhRBjlbj6Q7.p\F[`q[32pp@@V5gW[1#?K!I@0Ns=Ag$ee:mJh\~> +kl2+ip#EuZE)AhZ2)R3H$ge-&"Uc%f.PN[V2#fE>2EF<6K<E_kq>UBn!W@*-"qCqR+uW2.H]FSj +VPTlH8a-Eb%3nGlYhAOCrq??mi?@[p$47S#88=*`_U@/Sm04:496R/Vl1b/Vrqc-;[#&6_4#SrQ +1[>5K%2U3=0J`S_!&E7m#<#G0YLMq7rVHO(rr)]dn*/ief$_pjc-)L>57S8S:k#:Xce77?n+HPU +rqQL#rr)]enEJugf@&%FcMu,ibfK!4#q[#Q@#M/'b0A31c3hnFeC`U<lga`HrPJR8rfZ5)&M+P3 +.RIHhRBjlbj6Q7.p\F[`q[32pp@@V5gW[1#B&PrZ3*M0Ig$ee:mJh\~> +kl2(hp#EuZE)AhZ2)R3Hln8PM$Pad60JiV`s"t*@3_!G.Y12k7rr2ourJBtr%k82++uW2.H]FSj +VPTlH>j3mI&gKtqYhAOCrq??mj[Sbn$RuZ'/4aN7Wl!3<`U#5l96R/Vl1b/Vrqc-;[#&6_4#SrQ +1[Qh#.L$=u+tG?&rA+F/g7&=];1Pk"m.pVVrso&,qXs=AinW,5d*BnZ\*BFm&LgP*VSUU3i99Y& +qYgEgrsJc(qY'FCj4r87d/M>jblQ&0kaMln))bl\Xhi0)c2PuqcdC7ph;mnlp\Xp+rrN,<iL:En +*>g7m?@80Ha4KA;nb)YPqY^3tqY9dTmH30I\=eoARg3A*M72++qYom^J,~> +kl2(ip?9i*O*GJQARo=\m&C6r'du7B>[mVAs()XOBlf'*`SpFcrr<#s`:']<QQ-_f5[A`'XhMs) +e'cIVYbp`d#aZ,Q;i&'Co_eF_!WBt+WXLBk-Uqs;[a=""nE[LLWY@^&N4[s<r;Q]mo&%?YKlUm> +ARofJWX!SR)_ONX?=WqE!+OV5#<-4Z_;Y"_rqZR&rr)`hp%%V?mHj0'V<TW@'/*UP^"V`?o_84\ +rq-3rrr)`hp%%V?mJcJPlN-;5kUd)b*Bn>4`nfhDli$/UmI0T:pA+Uark\U7jl%d&+:T8C8ns9a +`7O,>p%eL`rV6?urVZNcn`\`LZ?"qV#:r)VS]Bjbr9aN7~> +kl2(ip?9i*O*GJQARo=\limY#'du7B>[mVAs()XOBlf'*`SpFcrr<#s=7-8($5FpR?$hp?^<4gO +d`fP3-L(d?&Lp_8]AN8YpAY0l=7?DXISD3VKUiU$("2=1S^/mF:HhXg[Erql9D_kDd)BkCpe +:$`&g$l^fe<*j)5A,p)l56j8]Q,2GNqu6Ek%0$5&q"=4Imd9B,l)X)6$kk:!OM0B4nFZJOrVlHh +#laf"q"=4Imd:#?s6B^Nk3,#9/fd,mT>o^Mlg+N9#jq*NoCi"WrVjY5!9`<*&1e8001ou;Wl3NN +n+HMRrVcNj$2seup@7A$ag-0N56j;:D4S`/p&+4WJ,~> +kl2(ip?9i*O*GJQARo=\ln8PL'du7B>[mVAs()XOBlf'*`SpFcrr<#sEpkXn.Lm1@5[A`'XhMs) +e'cIVYX[q3#V$E9;i&'Co_eF_!W@'.0+8C*-Uqs;[a=""nEX*A0,-3HN4[s<r;Q]mo&%?YKlUm> +ARnj/0*`X/)_ONX?=WqE!+OWN#>\or_;Y"_rqZR&rr)`hp%%V?mHj0'b3GH)'/*UP^"V`?o_84\ +rq-3rrr)`hp%%V?mJcJPlN-;5kaMlo*Bn>4`nfhDli$/UmI0T:pA+Uark\U7n_orKBal"78ns9a +`7O,>p%eL`rV6?urVZNcn`\`LZBsR?#E;AnS]Bjbr9aN7~> +kl2(jq=!4`[]#mkSXc1@mA^D4%jOALIup)rSGo&eTVo0;h!On8s8W&9n#@"e*#0nkAr3J'e`#c[ +md9<!e[OkE#]pe:?^8Ump\jjd!WLC6WXXXk+$F1t\CKg7q"aR0mA^jt7sD#`meZq^r:]F-_Q]i. +SXc1AmA^CT'eE!oKp.u(S,eu1/I*h#HE,BXq#0ses8E)ur;6Ki!r;Snl7E>W11?Tlk4STKrr2Bd +"9/8squ$<jq#U9^kUd,c*^XtIdd$N#q>(!cs8)lqrVjS3!WIo7/Iim4)_k-/QF>-!me6MUrq$-q +rr)`gnE&37HJpF[<.hL.meQkMs*t~> +kl2(jq=!4`[]#mkSXc0^limY),=,dgOI?$:rgaFiVmOM"mJ-Y[s8?$e"q_1W.7Ij*W5@*Dl0[p+ +lJg?Fl37J.11-<ck4eiKrrN+?mfj10+$F1t\CKg7q"aQOm047C7sD#`meZq^r:]F-_Q]i.SXc0M +m03e#'eE!oKp.u(S,eu156j5CHE,BXq#0ses8E)ur;6Ki!r;Stl9>Ui11?Tlk4STKrr2Bd"9/8s +qu$<jq#U9^kW]D,*^XtIdd$N#q>(!cs8)lqrVjS3!WJ8A57T4R)_k-/QF>-!me6MUrq$-qrr)`g +nE&37JDrcu2cPF8fC&J6mf.e~> +kl2(jq=!4`[]#mkSXc0lm4S\f%jOALIup)rSGo&eTVo0;h!On8s8W%<mk5;'%M^E]Ar3J'e`#c[ +md9<!eW/rK#U1!=?^8Ump\jjd!WIuG0+B3:+$F1t\CKg7q"aQ\m4T/%7sD#`meZq^r:]F-_Q]i. +SXc0_m4\JS"Y<;_Kp.u(S,eu1Rg4L<HE,BXq#0ses8E)ur;6Ki!r;T>lC/+p11?Tlk4STKrr2Bd +"9/8squ$<jq#U9^kaMop*^XtIdd$N#q>(!cs8)lqrVjS3!WL'tRgs-A)_k-/QF>-!me6MUrq$-q +rr)`gnE&37TAl=FC/fhkfC&J6mf.e~> +kPkqfp[7+re'H=bc-*]cWX<2N0j040^WF^Ec2>iocdUS-me?YYs8Bn(WY-is-q.j2ZHhFro_A:[ +qY9^LgZtjF:`;E2U!E!"rqHEmoC&[h4VTJIK<Whhp&"aeq<bBRWYA&cBV!?2q#16lqXj(1f$Vgh +c-*H\WWsOc5%p+a_ohu'!R/X;/I+.@OM0NAqu6-cs8E&rZKa"H'f0?ibj,!%j8]/Y!WDfW/IE[D +6[#Q^n,!"^rjMh,jl.j$-k@1L:j/ABf')`$rVl9c#QF\up$CMS<oP\84)(,%j7W?<s*t~> +kPkqfp[7+re'H=bc-(+o"ptSN0j040^WF^Ec2>iocdUS-me?YYs8?$e"qh1U-q.j2ZHhFro_A:[ +qY9^LgZo%L#T>d?U!E!"rqHEmiU6s\#8AahK<Whhp&"aeq<]3j"r%_2BV!?2q#16lqXj(1f$Vgh +c-&QC"pYMW5%p+a_ohu'!R/X;56j2VOM0NAqu6-cs8E&r\EZ9`'f0?ibj,!%j8]/Y!WDfW570"b +6[#Q^n,!"^rjMh,kMe]83"[#^:j/ABf')`$rVl9c#QF\up$CMS@cBTV4_^>'j7W?<s*t~> +kPkqfp[7+re'H=bc-(b,0+&a90j040^WF^Ec2>iocdUS-me?YYs8@!+0+nj2-q.j2ZHhFro_A:[ +qY9^LgZpNm)?r9=U!E!"rqHEmjmOl&'FZQmK<Whhp&"aeq<^N:0,,QiBV!?2q#16lqXj(1f$Vgh +c-'P_0*`%05%p+a_ohu'!R/X;Rg2YqOM0NAqu6-cs8E&rf'8_0'f0?ibj,!%j8]/Y!WDfWRgNpQ +6[#Q^n,!"^rjMh,n`$#IMAmEe:j/ABf')`$rVl9c#QF\up$CMSTAl=E7qnC1j7W?<s*t~> +kPkqhr:opRmd0<+lfl(LWX;!35&Hq3h<4(hlhg#SmdTlEr;Q`qhsRKP:D"j<B99OLk48?Gr;Hfr +p[#EVWX(7#7<bian,!%YrrN,3n#HC-$pABsa5lmjrr;upo#L0u'LsocQ,Vn[rVuorqtK^NmHj0) +kcjHS#7r7XJ$.,Vl2KuLlK6_N#:i>gVU"H#rU9aer3GT>#8K%*SB^Bqro*kXrqYb0#U1?XGHBEc +qu4#'!WIo7/IN"'.nk#S^Y8#Iqu5p]#6+Pqn);AZj"1Ke:k5e$meQkNs*t~> +kPkqhr:opRmd0<+lfh44"ptYW5&Hq3h<4(hlhg#SmdTlEr;Q`qWU9ru#8&4IB99OLk48?Gr;Hfr +pZtQ>"pbSZ7<bian,!%YrrN*]mfj7/*'J).a5lmjrr;upnp^!2'G*$,Q,Vn[rVuorqtK^NmHj0) +kTB0r#7r7XJ$.,Vl2KuLlK6_`#<>=uVU"H#rU9aer4)#V#8K%*SB^Bqro*kXrqYbB#VI2dGHBEc +qu4#'!WJ8A577u;.nk#S^Y8#Iqu5p]#6+Pqn);Ahj$*c*:k5e$meQkNs*t~> +kPkqhr:opRmd0<+lfi0O0+&L95&Hq3h<4(hlhg#SmdTlEr;Q`q[dGdV)%e,[B99OLk48?Gr;Hfr +pZuMY0*i777<bian,!%YrrN+(mk5.]*'J).a5lmjrr;upnrW8m'HT#:Q,Vn[rVuorqtK^NmHj0) +kX4_j#7r7XJ$.,Vl2KuLlK6`g#D#EhVU"H#rU9aer7C5'#8K%*SB^Bqro*kXrqYcI#\tMLGHBEc +qu4#'!WL'tRgU)L.nk#S^Y8#Iqu5p]#6+Pqn);B[j-p9Z:k5e$meQkNs*t~> +k5PP_rVZQlqZ$?lp9O(c#9P0_IB_;hpAXmaq?Hiprr2rsl0bPZEt'0O?])2<kk+cOqu6ctr:I\h +WWs%^:P?45oDJ@_!;#WY#S&+QI^%GmqYpKo"9%uXY4&@q,VNDc_r^Ujrr39'rVZQhqYBpQmA^G6 +'JNdS^u4bWrqQTio@GQ!0O0RIh!k1>nG`OeZKa"H'f0Bjc0P3)iVrrXq<0C9+s00rXOlt=rjDb, +r']Qs$PX1!6u84(g?nY4roj@brV?!C\)T%F.m.L6`oZpmn,In~> +k5PP_rVZQlqZ$?lp)r`,#7VnMIB_;hpAXmaq?Hiprr2rs`U*j:%3@Q;MR1apo_\Xbrr`8uoMFlY +#7i1XKX]e/r:g3kiU-mU%O=\rYh/@?rr2p"rV,Lrmfj"003j[XjnAZPrs8W&r;6?eq=r\1"pYhr +>`lh[nb<%Y!Vl9<56j/QN4Ia5qYp!a!W9Im56hoZA=Up1q>T@Q!WMoY56rk`6[,W`nGE3mrrN$s +j$*ni&LBh]QbM2@p\b$Srri;rn`%+>56j84BUZs&pAOI[J,~> +k5PP_rVZQlqZ$?lp-e:$#8/7RIB_;hpAXmaq?Hiprr2rscL*=n+UoJR?])2<kk+cOqu6ctr:Fdk +0*`"8:P?45oDJ@_!9NW%#S&+QI^%GmqYpKo"9%uX616H3(GB$V_r^Ujrr39'rVZQhqYBpCm4S_h +'JNdS^u4bWrqQTio@KH:@9ec%h!k1>nG`OefBSh1'f0Bjc0P3)iVrrXq<4:RCEGofXOlt=rjDb, +r2&GC$TJ_E6u84(g?nY4roj@brV?!C_rI3kNBCmC`oZpmn,In~> +i;`iV!WDNSWX07e</J9GoDAOdo`"s`ZgOh#*#LD1JZR2\o_\X`rrW2qcL%V;F;-B4OMU#OrV6Bn +rlsl2#8&IeN5"9Cr;HWtrqc-,n>ZbK(,K?a`od$oq>^Ko!WCmBWX)E=3bb51lM1>WrW2umf.@4Y +6uesEkP"lDrrN&'l7E5U1M!$#lhUP=rrN,pkUd&a+%(7RfC8\:[f6C-[c8qH,RkeV@un.Pm.^J? +rri;rn_\oX/I*e(K='A%qYp!aJ,~> +i;`iV!WCmA"pkkk</J9GoDAOdo`"sN+moOA$5bKtJZR2\o_\X`rrW2qL?o*L'JE[P_;t=gq#:Bo +F7'5;&M$n@^>\_^rVm!!qXB^;"pYo"@$\gpp\jpfs8E&tVsOZo#T5[;T?QTqrVlcsrV4u/#<YCo +U<D`nrUBgfr4)#V#8K%*SB^Bqro*kXrqYbB#VI2dGHBEcqu4&(!WKal570.T*]mkm\Cg0BrT4%^ +rV?!@M;pf*02dG0g@4t<nGe"~> +i;`iV!WD'F0*r4?</J9GoDAOdo`"sR7d_o:%N$p#JZR2\o_\X`rrW2qR-cO4+qu\7OMU#OrV6Bn +re^%r#8&IeN5"9Cr;HWtrqc,Xn1P%o(,K?a`od$oq>^Ko!WBFn0*iI63bb51lM1>WrW2umf:*#) +6uesEkP"lDrrN&LlC/"n1M!$#lhUP=rrN,pkaMin+%(7RfC8\:[f6C-g>eY0GmtfV@un.Pm.^J? +rri;rn_^V3Rg2>ZK='A%qYp!aJ,~> +hZ!WUhsIELF;6N;Q,Vn[rU^$irP\-($;V6]89CQHj7E0Iq#:EpqU"W0#\"W1B:R00q#:'g!WBXu +WWs1j>a*.hp\k$i"9%rV[IL7&;&hZ4T?QTqrqHEnrPS$&#VR8eG,s0^qYpKo!WMoG/I*q1LUGh( +qYp$b!W97g/I*"HA=Up1q>T@Q!WMoY/I3OB6[,W`nGE3nrrN(%j"1TI(GJmBY0uS.r;PdW"TA/a +g.gW[#:_rUU!2cqrUBi;~> +hZ!WUW9a]n'es'\`THpnoD\ji=7-8"#8&=SFJ6e9oDAO^rrW2rM!YBP#8fF5SBL0lrqQKorB0KP +#88aqPJu\YrVZZtrV#DEnHK7**'7o-bj,!&p\t9m<p^(s$Qh`ZX4?\8rr2ourqY,0#<,_>[Ft$F +rpg!hr4)#V#8K%*SB^Bqro*kXrqYbB#VI2dGHBEcqu4&(!W?]l57.o;0NNh/dcpK'roF(^rV>m8 +>3%mQ3'V;Sbj"m#nGe"~> +hZ!WU[d>^R+r)h>Q,Vn[rU^$irGq<Z$5jF'89CQHj7E0Iq#:EpqO6e)#TagBB:R00q#:'g!W?6j +0*`.D>a*.hp\k$i"9%rVA+;2X)]UqST?QTqrqHEnrGh3X#S\@JG,s0^qYpKo!WMoGRg3;%LUGh( +qYp$b!W:R7Rg0ZaA=Up1q>T@Q!WMoYRg<dO6[,W`nGE3nrrN)&j-pAn(GJmBY0uS.r;PdW"TA/a +g7mYt#CesUU!2cqrUBi;~> +hZ!WTbjDD9:`2</TZufurq-3krn$S<$C;/@3b+>dh=1:?p\t<oqn_["#XBFsF/[RUqYp9i!;u5a +#;e)>PfDn\rVZZurqc->YOeb#F;$&rH`bidqYp6h!W9RsWWs%]:4p"2o)/Id!WMoG/I*gkD4S`/ +p&+@[!W97g/I*"HA=Up1q>T@Q!WMoY/I3OB6[,W`nGE3orrN,Ej"1TX&1'eeTuc<equ5UT"9%uZ +Y2_)<0Nj@Iht-d8s*t~> +hZ!WTEpX&:#T5[<TZufurq-3krf6@M#n.e7A!4O]nG<.YrrW2s<:'kq#p)BRW7122rqQKnr9X[n +&2.=R`om*pr;Qp!qXE9,o*,L+'.?P$Xjuk9rqHEnr&a9M#7i.VK=9V,r;HWrrqY,0#<Y:hS]Bjb +r:0dfr4)#V#8K%*SB^Bqro*kXrqYbB#VI2dGHBEcqu4))!WLO-57/_K,t;sLaQ3!jro3q[rV,T_ +j$*`'=cC#NoDJ+XJ,~> +hZ!WTM!Zi$)AtSNTZufurq-3krh/[4$7ZH(3b+>dh=1:?p\t<oqetjT#T"OJF/[RUqYp9i!;u4; +#8o1#PfDn\rVZZurqc->?1T]U+ql@uH`bidqYp6h!W60h0*`"7:4p"2o)/Id!WMoGRg4pGD4S`/ +p&+@[!W:R7Rg0ZaA=Up1q>T@Q!WMoYRg<dO6[,W`nGE3orrN,]j-pBX&1'eeTuc<equ5UT"9%uZ +`oENm4B[WUht-d8s*t~> +hZ!WS_sOH05T`@9Wn$S7rq-3ko<[kb#u;6c;1GatlhLGPrrN,rm&C:#,triqg[Y19rrN,_mA^D' +/Qn.NjRrKKrri;plHu[*WX3bZ+Zs;!^Yn_]p\t9nqsCBhKbH(BO20fKrVc`srqY%q##g/Zf'W;4 +o)AagZKa"H'f0Bjc0P3)iVrrXq<0C9+s00rXOlt=rjVn.reTSd#n@k4@$&%WnG<.Crri?!o]/g/ +/I*XnGH0-Zq>TpaJ,~> +hZ!WS<UBtr#p2NWWn$S7rq-3ki?@Un#mV.p;1GatlhLGPrrN,rlim\),triqg[Y19rrN,;m03e' +/Qn.NjRrKKrri;plHqfg"pkMH+Zs;!^Yn_]p\t9nqs4Ll'/!IL^uP+drVlotq:.\72cG@6f'W;4 +o)Aag\EZ9`'f0Bjc0P3)iVrrXq<1$K/g!H)XOlt=rjVn.rfZ;+#nS"6@$&%WnG<.Crri?!o]0<= +56ii3GH0-Zq>TpaJ,~> +hZ!WSEU>Cb(EZ"eWn$S7rq-3kj[SYk#oOF-;1GatlhLGPrrN,rln8SR,triqg[Y19rrN,Dm4S\g +/Qn.NjRrKKrri;plHrc-0*rg7+Zs;!^Yn_]p\t9nqs?$B-5/"8O20fKrVc`srqY*6#AR1iZ.A=< +rpp'ir7C5'#8K%*SB^Bqro*kXrqYcI#\tMLGHBEcqu4))!WL'uS,XB32dh`[h=1:?iVs&[r:K'H +jI6BV7sCu^mJ6bOs*t~> +hZ!TQm&C:4,trirh"(C8rrN,Dm]$V\$m%TIS&OF[r;QEi!WM<MWX+:k/6@eEiq<6ErrN,Vm&C:J +:kZ:3nb`=`rrrE!oAdrjpSnR3(*bkEKW`bhq#0se!WM!DWX*&N2eAK$l1k8VrrN,pe1CneBUH]s +o_e^[rrN&'l7E5U1M!$#lhUP=rrN,pkUd&a+%(7RfC8\:\,QL,7-#p+*"aPlHE,BXq#0+M"9//c +[H&nE.5tb'`T?glnc++~> +hZ!TQlim\(,trirh"(C8rrN+?m03k**^4>.`T-Ugrq??mrl".-#8/RhN5"<Er:p9mri#/f#:!&u +[bL?Lrqud"rql<Ia^=cH$47On3a79?dd-],p\t9nW9jcp#8fC2S'(!jrr)itrqY&.#<caf_rC=d +rq$-jr4)#V#8K%*SB^Bqro*kXrqYbB#VI2dGHBEcqu4))!W5pX57&YK-VSiddH^N*hu<fXqX:uU +5Q<YGA!b0rpAOO]J,~> +hZ!TQln8SV,trirh"(C8rrN+UmOnns$m%TIS&OF[r;QEi!WL@20*im;/6@eEiq<6ErrN,-ln8Sl +:kZ:3nb`=`rrrE!oAdr4pFcjs(*bkEKW`bhq#0se!WKOp0*iU92eAK$l1k8VrrN,pe=-\5BUH]s +o_e^[rrN&LlC/"n1M!$#lhUP=rrN,pkaMin+%(7RfC8\:\,QL,V<"*P=:loSHE,BXq#0+M"9//c +c/b?!IQ(c'`T?glnc++~> +hu<`Vkj>AUQOt`KMn\0Cr:U'jrorgM#u;3c;hMF/meQkTrrN,UmA^G$(H#`kaQWBsq#:Bnh<_-I +HpVkKbi\Tqrqud$rqc0C`hnr^rMg<Q=tCpQ6XG>AalN*krqHEnrQOZ/#XBCqEMq7PqYpHn!WMoE +/I*h&I]_)cq#0ga!W97g/I*"HA=Up1q>T@Q!WMoY/I3OB6[,W`nGE3prrN,[j"1QI)E;5k_;Y"_ +rndYWrV,MQj=LTd;M;L6o)&FWs*t~> +hu<`V`9[[5&M$n?^>\b_p&>'l`U*j9#88XeK<s4uq>U'e!WK"a"pbGM2.W,rkkG&NrrN(rlim_+ +6?8jFk4SWNr;R$$qXNL`PY*5""q;"R)C."(?@f#rjRi?Kp\t9mEpX&:#ou9NVpau/rr)itrqY&. +#<5M.XjcY3rU^$ir4)#V#8K%*SB^Bqro*kXrqYbB#VI2dGHBEcqu4,*!WM6A57%l>3+J2hiUcsG +hZ!]VpZPuF56i`;KXT\,qu60dJ,~> +hu<`Vc0[.i.M413Mn\0Cr:U'jrm'ma#oOC-;hMF/meQkTrrN,,m4S_d(H#`kaQWBsq#:Bn[-TFO +.RJ0Nbi\Tqrqud$rqc0C`gC!qr@\U.,9J0b6XG>AalN*krqHEnrJ9ho#T"LHEMq7PqYpHn!WMoE +Rg4(3I]_)cq#0ga!W:R7Rg0ZaA=Up1q>T@Q!WMoYRg<dO6[,W`nGE3prrN,gj.$&e#<64X_;Y"_ +rndYWrV,NQjI6B4;M;L6o)&FWs*t~> +hu<`VhX.<KF;6T>QH&+^rUp0krO_Hs#TOjIBq*0)p&+I^!WBq'WX(j15B*LImJ6bVrrN)Sl`(8P +A;R\Ckk"WJrr)j5rV>s?aJt/:=\1h=3^62<DMkI8i:6[CpAY0k_sOH/+!XC+Z.eaFr;Qfsq9po# +2Ihrdi:HjFo`"siZKa"H'f0Bjc0P3)iVrrXq<0C9+s00rXOlt=rj_t/rh&7'#p^$-8p[Pem.pY: +rr`8tnW2`_#:2]WVU=c+rpp)>~> +hu<`VVsFTm'f06``om*pp&>'k4RE=Y$6;6CS&aX`r:L!irDr:i#RMM9E2M%Mq>U0h!WAn]"pki= +M6tdroD/=`rVm]4q=*:_Wf(du8O#6s5=nspMQ4bUnbW7YrrN$um03e),>*Bhg@>(<rrN,pdm"'u +A!=^doDAOZrrN&-l9>Lg1M!$#lhUP=rrN,pkW]>*+%(7RfC8\:\GlU/VrU&K1(P['HE5N]q>T4M +"9/2fQfL@9/OFKTdHp].o)F4~> +hu<`V[I#UQ+r)nAQH&+^rUp0krES_C#S.q<Bq*0)p&+I^!W@$*0*i@75B*LImJ6bVrrN)*lRrPu +<f+35kk"WJrr)j5rV>s?aJt/:=\1h=3^62<DMkI8i:6[CpAY0kEU>Ca&gL"sZ.eaFr;Qfsq9tf< +:LfU(i:HjFo`"sifBSh1'f0Bjc0P3)iVrrXq<4:RCEGofXOlt=rj_t/rm0Yp$$d%-8p[Pem.pY: +rr`8tn\F4T#?F03VU=c+rpp)>~> +hu<`U_sOH0:`;E2U!E!"rq??mrorgM$$-\,:4KP#meZqTrrN&'mA^F6,>*Bhg%"t=q#:Bnh!(g_ +L6AskipHC6r;HWps8Dc_im5-.N-oV]CiOi]TXW5+nG3%UrrDr`WX+q'.ohJ>i:QsFrrN,pdk(eU +8pRA^lM1>MrrN&'l7E5U1M!$#lhUP=rrN,pkUd&a+%(7RfC8\:\GlU.>3%7@'GiQ3Oh]lHr7h5Q +rV,O:/I*[\@?ndmpAOR^J,~> +hu<`U<p^(s#T>d?U!E!"rq??mrl+4.#SAI[J$IVnqYp-e!W4,."pbY_8q!ttnb`=\rrN(pklr=p +P-rZrmI^5PrVlisrV>sBca][-HuWt=EI<_<\'F"&q>L!d!;l*e#8&IdMS.m>r;?QqrqY#-#<GJ& +W6ji)rUg*jr4)#V#8K%*SB^Bqro*kXrqYbB#VI2dGHBEcqu4,*!W?]m56r/D1L?3YiUd!%rrW/n +ki=r52Dej-`9$^ko)F4~> +hu<`UEU>FZ)?r9=U!E!"rq??mrm'ma#pBm/:4KP#meZqTrrN$dm4S_X,>*Bhg%"t=q#:BnZfs+e +:Qi-4ipHC6r;HWps8Dc_im5-.N-oV]CiOi]TXW5+nG3%UrrDr`0*j$>.ohJ>i:QsFrrN,pe!gSn +8pRA^lM1>MrrN&LlC/"n1M!$#lhUP=rrN,pkaMin+%(7RfC8\:\GlU.YN2/Y3>XJXOh]lHr7h5Q +rV,O:Rg4?u@?ndmpAOR^J,~> +hu<`T]'ZL'5p/R=X4Hb9rq??mrO_Hs#X9.`@?najp&+I^!WMZWWX+q'.TM><i:QsArrN)dkc,c# +SZBZYip610qY^?lrV?'KgWR:7Vk^#bYe805kjnQJp&>'lkj>AUF;?Z?QH&(]rVZZrrqXto#;]\I +]\`2Urq69lr3GT>#8K%*SB^Bqro*kXrqYb0#U1?XGHBEcqu4,*!9E/l#RqnDEi%.Kq#/tI"9/2e +BB1WK.8bf.h=CI6s*t~> +hu<`T47*4X$6V`[X4Hb9rq??mrB0HO#RD8)@?najp&+I^!WM$D"pY_i<JeBHo_eI`!WCg;"s=LE +RD[S7lgjfHr;Q]oq=Eh)bIt-XUSF`k]Z]$mo(i7WrrN,;lim\11LQNgk4eiPrrN,pdQ[sq?B;bU +nb`=YrrN&-l9>Lg1M!$#lhUP=rrN,pkW]>*+%(7RfC8\:\GlQkj$*eY+@C1Gd-LK*g]%BTqs\[f +56`Q6Kt#n/qssc;~> +hu<`T>O='L(a)4iX4Hb9rq??mrES_C#Sn77@?najp&+I^!WM3J0*j$>.TM><i:QsArrN)VkV"&: +=e3I\ip610qY^?lrV?'KgWR:7Vk^#bYe805kjnQJp&>'lc0[.i+r2tBQH&(]rVZZrrqY!3#>8Ba +]\`2Urq69lr7C5'#8K%*SB^Bqro*kXrqYcI#\tMLGHBEcqu4,*!:]$<#RqnDEi%.Kq#/tI"9/2e +YiM8X.8bf.h=CI6s*t~> +i;WiWqs:<f%jk&'[bUHOp&>$`m&C=#+[gIOdd6f/o`"skhsIELF;?Z?QH&(]rV-<mrV#?Q*2]jS +d,!mRo_A=]r;--Vl/C=FdF$Isi99\(qu-0e!WLX:WX(g.4D^b<lhUPXrrN,pdOb\T7WbHNkkG&K +rrN&'l7E5U1M!$#lhUP=rrN,pkUd&a+%(7RfC8\:\c2^0[H&nG+;-2'L:H%0qu5=L!r_hkj=LT^ +6ZoBWmeZqSs*t~> +i;WiWqs4Ll%jk&'[bUHOp&>$Nlim_)+[gIOdd6f/o`"skW9a]n(,K?a`od$op\t9mp>lJu-?d5P +h<48!q"t!eqY'FCiRu`.dF?k-kj\<CrUg*jrf-:L#RMG4Cnf8Aq>U<l!WMoC56j;?FJR1Fp\jdb +!W9Im56hoZA=Up1q>T@Q!WMoY56rk`6[,W`nGE3qrrN,2j?Er%&h?n8\D6ZPrn@ARrV!DT56iZ* +FfEjXqYp*dJ,~> +i;WiWqs5s@%jk&'[bUHOp&>$Rln8VR+[gIOdd6f/o`"sk[d>^R+r2tBQH&(]rV-<mrV#>+*(GUt +d,!mRo_A=]r;--Vl/C=FdF$Isi99\(qu-0e!WJ_Y0*i=44D^b<lhUPXrrN,pd[LK$7WbHNkkG&K +rrN&LlC/"n1M!$#lhUP=rrN,pkaMin+%(7RfC8\:\c2^0g>n_0BbDppL:H%0qu5=L!r_i:jI6BG +6ZoBWmeZqSs*t~> +i;WiWhsIELQP(iNNPFKGrV$6lrlsi1#]gV0<J\3Bo)&%Y!WC70WX(g.4D^b<lhUPSrrW/o^Z2=2 +W4'duiTfq*q>1!ap[n"EmHsB4o_84\rq$-jrPS$&#VR>jH*,]equ6Nn!WMoB/I*t5MR_F1qYp3g +!W97g/I*"HA=Up1q>T@Q!WMoY/I3OB6[,W`nGE3qrrN(Rj=LWP))l,pa6**og&D-Qq<d5p#:)6> +S&smgrU^&>~> +i;WiWW9a]n&hI+D^Z+qbpAY0mF6j)9&hI%=\_coSoD\jiEpX&:#oc!CU<i0$rqHEorV07M"rL*u +aO]>8nFcVRqt^!YnaGl4n+$&EqYgEbrrN(!m03h(+\$aZfC/V9r;Qfsq9_D33*M3Lg[P(=pAY0k +\EZ9`'f0Bjc0P3)iVrrXq<1$K/g!H)XOlt=rji%0rK6/*#TFX?AXUU$pAN\E!ri#_j?El%2eAK# +kkG&Is*t~> +i;WiW[d>^R.M=:6NPFKGrV$6lre^"q#U'g3<J\3Bo)&%Y!W@iA0*i=44D^b<lhUPSrrW/oD<!8d +A=LZkiTfq*q>1!ap[n"EmHsB4o_84\rq$-jrGh3X#S\FOH*,]equ6Nn!WMoBRg3A*MR_F1qYp3g +!W:R7Rg0ZaA=Up1q>T@Q!WMoYRg<dO6[,W`nGE3qrrN):jI6E9))l,pa6**og&D-Qq<d74#@KK% +S&smgrU^&>~> +i;WiVea9@BF;?]BR)nIbrV$6kr9UEh58cFlR`O[drU^$ir4D?r#VR>jH*,]equ6?i!ri#AiMm3_ +XLug2jQuL4qYg<kq?-WmrVl<d!;u2`#7r:\Kt-"2r;6KprqXqn#:r5]TZQ?ir:^-kr3GT>#8K%* +SB^Bqro*kXrqYb0#U1?XGHBEcqu4/+!W6*]/I2e/7<Y]\mJ?h7rrW,iB]UfN,V<,X^Z+qaoDa=~> +i;WiVN9g`R(,TKfaQN<rpAY-jlim_$))u2raQN<roD\jh47*4X$R%ubXk3%=rqHEorqV<-"pl)C +Wm05Xm.9uJrVQWk"8i#prp]pfr9OUm&1CD0\DHiTqu6]rq9_D34@=(\al`<ppAY0k\EZ9`'f0Bj +c0P3)iVrrXq<1$K/g!H)XOlt=rji%0r+G(T#RqqGG,j'ZqYo.I!rVY3jZ`u(/Qe"Iiq<6@s*t~> +i;WiVT'\0:+r3"ER)nIbrV$6kr9Q'B()])CR`O[drU^$ir*/PA#S\FOH*,]equ6?i!ri"_i@bL! +BWfV5jQuL4qYg<kq?-WmrVl<d!;u1:#7r:\Kt-"2r;6KprqXs2#E;)iTZQ?ir:^-kr7C5'#8K%* +SB^Bqro*kXrqYcI#\tMLGHBEcqu4/+!W9.^Rg9HH7<Y]\mJ?h7rrW,iZ/qG[DCntM^Z+qaoDa=~> +i;WiV_sOH0;&_W7UX8B'rqHEnrnm(B#TY$UG,j'[qYp-e!WMu_WWs(`;2)O:oDJ=^!ri)dhPps^ +Z,>#IlLO]HrVlf_rrN,hmA^G6'JNdT_W:Fhqu6]rq<BO3)X&aX/lm\5f^AS7p\t9lZKa"H'f0Bj +c0P3)iVrrXq<0C9+s00rXOlt=rji%/qrB=7,S;M)LUl:5r7CrMrV)T</I!LpJ@+)%qt'i<~> +i;WiV<p^(s#TGmCUX8B'rqHEnri,5g#R_bCG,j'[qYp-e!WMu_"pY\f;2)O:oDJ=^!ri)dh?F?: +NPj3%lLO]HrVlf_rrN,Vlim\/0O0dXjS&QLrrN,pl9>7okW];3<e[p5meQkVrrN&-l9>Lg1M!$# +lhUP=rrN,pkW]>*+%(7RfC8\:\c2[,j?Eo*&Lp_7\_crUfDbpNpRUA0"slrn[+k0KoDa=~> +i;WiVEU>Cb)B1eUUX8B'rqHEnrjM/H#S8+HG,j'[qYp-e!WMu_0*`%:;2)O:oDJ=^!ri)dhCf7- +QG_/.lLO]HrVlf_rrN,[m4S_h'JNdT_W:Fhqu6]rq<FFL=6Q+YCK?.rf^AS7p\t9lfBSh1'f0Bj +c0P3)iVrrXq<4:RCEGofXOlt=rji%/qrF4PH4_W*LUl:5r7CrMrV+:lRg(04J@+)%qt'i<~> +i;WiUZL+Xt5p/R>XOck;rqHEnrP\*'#aZ)N;2)O9o)/+Z!WM!DWX*\\0O0dXjS&QFrrW,j_VM3u +V5_/ShWj_.r;Q'_!WM!DWX)E=3G>#.lM1AUrrN,pl7E#L+m:K^4_gJ*jRiBErrN&'l7E5U1M!$# +lhUP=rrN,pkUd&a+%(7RfC8\:])Mg1c/^G^+VlnCQH&(]rR_&Nrq`bX/I*FcF/d[WqYp-eJ,~> +i;WiU+mfI>$6V`\XOck;rqHEnrDr7h#7r:\Kt,t0r:Bphri#/f#8AjsP/?;RrUp0lr:FXX"plW1 +^!GR#oD/=`m/I+cW9jcp#T5X9T$6Kprql]rrqYhD!>mEO56Yek`T6[hp\t9l\EZ9`'f0Bjc0P3) +iVrrXq<1$K/g!H)XOlt=rjr+1rmBdk#V?fK@@"pqp\i_D!ri&&j?Ekq6?B-UmeZqTs*t~> +i;WiU7I;`6(a)4jXOck;rqHEnrGq9Y#V$B6;2)O9o)/+Z!WKOp0*ia90O0dXjS&QFrrW,jIbcX` +7ZP1.hWj_.r;Q'_!WKOp0*iI63G>#.lM1AUrrN,plC.f4C?V,k8SXa6jRiBErrN&LlC/"n1M!$# +lhUP=rrN,pkaMin+%(7RfC8\:])Mg1jlDm:C)/X7QH&(]rR_&Nrqb((Rg1r?F/d[WqYp-eJ,~> +iVrrXqs:<f%jk&'[b^NPpAY-jm&C>5'es$Y`9$^koD\jiea9@B:`29,T$6Kprq69nrV,NYgo:XU +VS(:6m.L5RmJd4c_sOH05T`@9WmpJ5rql]rrqYh2!>H11/I*h(J?RMjq>U0h!W97g/I*"HA=Up1 +q>T@Q!WMoY/I3OB6[,W`nGE3rrrN,+j=LWQ*'J28d-UT-f)GdJn`28,+?4&+bj,!&o`'F~> +iVrrXqs4Ll%jk&'[b^NPpAY-jlNRS/0j^'^jnAZErrN(Xm03h%)*)B%bj,!&p&>-mpZNUP"pcN> +][5U'p%nXSrrN(!m03h&+%(1NeF*24qu6]rq<C0F)AMC"#<#G0YLW%9rqQKor4)#V#8K%*SB^Bq +ro*kXrqYbB#VI2dGHBEcqu42,!WK[k5Q;]-4`7(Bm.pY3rrN#ej?Ekr3,"o-lM1ANs*t~> +iVrrXqs5s@%jk&'[b^NPpAY-jln8Vg'es$Y`9$^koD\jiTC"9;)AtPKT$6Kprq69nrV,MAgb/q$ +RCpo)m.L5RmJd4cEU>Cb(EZ"eWmpJ5rql]rrqYiK!B;.aRg3Y)J?RMjq>U0h!W:R7Rg0ZaA=Up1 +q>T@Q!WMoYRg<dO6[,W`nGE3rrrN,PjI6E9*'J28d-UT-f)GdJn`6/E6o\kObj,!&o`'F~> +iVrrXhsIELQP(iNNPFKGrV-<mroi^K#Z)F#C7ri;q>U!c!WBq'WX(j36ZoEYmeZqUrr`8snB]gg +#b%^-e`QDtrVl9c!W97jWWs%]9nB_-o)&:`!WMo[/cQRd/*JPi3G"MniUd!Hq>UKnZKa"H'f0Bj +c0P3)iVrrXq<0C9+s00rXOlt=rjr+1rG^gL#SA7OH`u)kqu51H!r_dljXg]`0O9m[jnAZFs*t~> +iVrrXW9a]n&hI+D^Z+qbp\t9n`9[[6#T>a=TZufurq$-jrDr:i#RMS?FfNsZqYp0f"9//dX4da` +;Q.C]k4/9GrpTjfr#tG3#7i.UJ[O;(qtg<nrqYhD!ZVt5kW];6AX:3loDJU`rrN&-l9>Lg1M!$# +lhUP=rrN,pkW]>*+%(7RfC8\:])Mg0I,mKt&gBknYLr@Armq)NrUj[^56ins?'E1fpAOX`J,~> +iVrrX[d>^R.M=:6NPFKGrV-<mrlsd_ru))&C7ri;q>U!c!W@$*0*i@96ZoEYmeZqUrr`8sn?gn& +#\9mLe`QDtrVl9c!W5CR0*`"79nB_-o)&:`!WMo[RfYVdB]toj7V.n&iUd!Hq>UKnfBSh1'f0Bj +c0P3)iVrrXq<4:RCEGofXOlt=rjr+1rOM!Y#TY*[H`u)kqu51H!r_emjdQKm0O9m[jnAZFs*t~> +iVrrWbjDD9F;?]BR)nIbrV-<mrlsf0#XKP#G,s0^qYp*d!;u2`#7i.UJ[O;(qt'girV#Bgg8YFN +Qa+]jme?YYnc&XhqsCBhKbH%?NkaTHrVHNprqYh2!uDt80^1.o/5:Jldd-],q>UKnZKa"H'f0Bj +c0P3)iVrrXq<0C9+s00rXOlt=rjr+1r,:XJ#7r:\L:Z:7r71fKrV(*h/I*LL;i&'Do_e@]J,~> +iVrrWEpNu8(,TKfaQN<rp\t9nEpNu9$6MZZX4?\8rq$-ir9OUm%jk#%[G:?MoD\pkp?%4c"pc?* +Z-(tlp\b$\rrN,rlim\./Qe%Jiq<9HrrN,pl9G:h!B!.,56j5DH`PT\q#1$g!W9Im56hoZA=Up1 +q>T@Q!WMoY56rk`6[,W`nGE3rrrN%Ej?Ek\-rG`1ht6isrrW/nGND$o0.BhU]AW>Zo`'F~> +iVrrWM!Zi$+r3"ER)nIbrV-<mre]tp#T+XOG,s0^qYp*d!;u1:#7i.UJ[O;(qt'girV#B>g+N^s +MQt=]me?YYnc&Xhqs?$B-5.t5NkaTHrVHNprqYiK"$@S]P3JG@JPCKldd-],q>UKnfBSh1'f0Bj +c0P3)iVrrXq<4:RCEGofXOlt=rjr+1r41mX#7r:\L:Z:7r71fKrV*_]Rg3dZ;i&'Do_e@]J,~> +iVrrV_sOH0;&_W7UX8B'rqHEnrPS!%#7`%SJ[O;(r:BphrpfBU#_`pD=H:/Up&4L^"TJ8egpYq: +#bm0O_V4>Lr;Q9e!WM!DWX*&M2Ir8ukkP,QrrN,pl7E)T,!\]_/I+.AP.oiEqu6Hl!W97g/I*"H +A=Up1q>T@Q!WMoY/I3OB6[,W`nGE3rrrN!ajXg`e'/*RP_r^Ujec,^Mq1@][#::]hJ$[o#r:L#>~> +iVrrV<p^(s#TGmCUX8B'rqHEnrDr7h#7`%SJ[O;(r:Bphrnm&H#88[kNkaTHrU^$lrqc->J(b)4 +&U1%fg?\J1rpp'iri#2g#R;/(A=CX(q#1'h!WMo[56DrN5Z$Z/#<?4U^>JMYrqcWqr4)#V#8K%* +SB^Bqro*kXrqYbB#VI2dGHBEcqu42,!W,gW56s7_03aRVjnAZ'rrW2qN9*8/1aG_DZeP'Ko`'F~> +iVrrVEU>Cb)B1eUUX8B'rqHEnrGh0W#7`%SJ[O;(r:BphroEH"#UU3:=H:/Up&4L^"TJ8egl:#@ +#W7"*_V4>Lr;Q9e!WKOp0*iU82Ir8ukkP,QrrN,plC.l=,!^G;Rg2YrP.oiEqu6Hl!W:R7Rg0Za +A=Up1q>T@Q!WMoYRg<dO6[,W`nGE3rrrN"njdQO5'/*RP_r^Ujec,^Mq7l$\#C@^hJ$[o#r:L#>~> +iVroTm&C=W+@LFTf'iM8p\t6kl`(1%.oqVCiq<9ArrN,VmA^G$(H,fmalrNuo)AjkpZp>5g8YFP +I[e"%lh:8UoD\jibjDD95TN(/VUFl-rqcWqrqYh2";rLVD*[>;#:iAiVpFW%rVHNpr3GT>#8K%* +SB^Bqro*kXrqYb0#U1?XGHBEcqu45-!WMuW/I3L82.W3!l1k8.rrW2sY2h/>+%(4QfC8\:p&BO~> +iVroTlim_&+@LFTf'iM8p\t6klNRS+.oqVCiq<9ArrN+tm03h$(H,fmalrNuo)AjkpZp=Sg'.fn +Cn&)hlh:8UoD\jiEpX&:#ou6MVUFl-rqcWqrqYhD"<Sp\D,0=[#<>A"VpFW%rVHNpr4)#V#8K%* +SB^Bqro*kXrqYbB#VI2dGHBEcqu45-!WMuW56rhV2.W3!l1k8.rrW2s[,aFV+%(4QfC8\:p&BO~> +iVroTln8V]+@LFTf'iM8p\t6klRrJT.oqVCiq<9ArrN,-m4S_d(H,fmalrNuo)AjkpZp=ag+N^g +ELXVmlh:8UoD\jiM!Zi$(EG_[VUFl-rqcWqrqYiK"?n,&D3a@T#D#HjVpFW%rVHNpr7C5'#8K%* +SB^Bqro*kXrqYcI#\tMLGHBEcqu45-!WMuWRg<aE2.W3!l1k8.rrW2se)Zu'+%(4QfC8\:p&BO~> +ir9&Yna*7\%jk&'[b^NPp\t9nqWt3fF;6Q<QH&+^rU^$irPS$¼pEMh1Oq>Tsb#6+PnkKpB/ +gStLOGaH%pm.^JMrrN&0mA^F6,>*Bhg%"t=qYpTqq<BO7)CJ7(Icr?g10omOh=:CAqu6]pZKa"H +'f0Bjc0P3)iVrrXq<0C9+s00rXOlt=rk&12rqb\-#TXgFD55JEqYo"E!W0pu/I*4XDl(nMqYp0f +J,~> +ir9&Yhs:OP%jk&'[b^NPp\t9nqWe=j'f'-^`om*poD\ji<p^(s#ou6MVUFl-rpp'nrquHPd#&Rm +"pYWMQb1o:p\j^`!W5%H"pbY_8q!ttnb`=^rrN,pl9>Co-V\i;kW];3?&cJPnb`=_rrN&-l9>Lg +1M!$#lhUP=rrN,pkW]>*+%(7RfC8\:]Dhp2qW'jH-Q5'`UX8B(rm^rKqoe%b#9,gEV:+f.rq6;A~> +ir9&YjQnN)%jk&'[b^NPp\t9nqWoj@+r)k?QH&+^rU^$irGh3X#T"LGEMh1Oq>Tsb#6+PnkKoDQ +gFidfCR;Zcm.^JMrrN%%m4S_X,>*Bhg%"t=qYpTqq<FFP4ss'LQKXeC<aC]sh=:CAqu6]pfBSh1 +'f0Bjc0P3)iVrrXq<4:RCEGofXOlt=rk&12rqb]F#[/-.D55JEqYo"E!W1d8Rg0lqDl(nMqYp0f +J,~> +ir9&YhX.<KQP(iNNPFKGrV-<mrnm(B#]pnCBV*K7q>U!c!W97jWX'[k8q!ttnb`=Urs&K"oB"9$ +SD1%KMK"rsh!b(<p&>'lqsCBhQOt]IM7hd=r;$?nrqYh2"WAddJ>631/I*gqEhgkApAOmg!W97g +/I*"HA=Up1q>T@Q!WMoY/I3OB6[,W`nGE3srrN,,j=LWQ*^Y"Mf'iM8eGfRIo].S/*B7`)cKk<* +p&BO~> +ir9&YVsFTm&hI+D^Z+qbp\t9nW9a]o#8fF6T$?Tsrq$-jr#tG3#Rr"NIBhJqqu6-c#6+Mkjj(%q +gBIm'E1"Apn+ltUrrN,rlim\,.TM><i:QsCrrN,pl9>Fp-rGMiA*H2_4@O:cbie]uqu6]p\EZ9` +'f0Bjc0P3)iVrrXq<1$K/g!H)XOlt=rk&12rk%5U#TOmPFfX*^qu5+F!W;TN56i>kBV3T9q>U'e +J,~> +ir9&Y[I#UQ.M=:6NPFKGrV-<mrjM/H#U1*FBV*K7q>U!c!W5CR0*i188q!ttnb`=Urs&K"oB"9$ +=PGJ63,k8!h!b(<p&>'lqs?$B.M4.1M7hd=r;$?nrqYiK"[4>3J>8h&Rg4pAEhgkApAOmg!W:R7 +Rg0ZaA=Up1q>T@Q!WMoYRg<dO6[,W`nGE3srrN,QjI6E:*^Y"Mf'iM8eGfRIo]2JH2)o9AcKk<* +p&BO~> +ir9&X_sOH0F;?]BR)nIbrV-<mrSHn@#^%(MDl1tMqYp-e!WMu`WX+q'.TM><i:Qs9rs/Q"oB"?* +R%<$4#@V_H`oH^hrq??mrnm+C#]ph<@$\gpp\jpf!WMo[/Hm%A;M;0SkUd#m=GXE>n,!%]rrN&' +l7E5U1M!$#lhUP=rrN,pkUd&a+%(7RfC8\:]Dhp1[,`eD(a;P"Z.eaFe,KIIp>de1*A_/mam&U" +p&BO~> +ir9&X<p^(s#8T.*R)nIbrV-<mrMSud#R;;4Dl1tMqYp-e!WMu_"pY_i<JeBHo_e1X#QFSkjj:>U +*o$r)4`m=9j7N9KpAY0mWU'fo(,K?a`od$oq>UKpq<C0J+=U3AXfpqQ#<,b@[bC3Hrqucsr4)#V +#8K%*SB^Bqro*kXrqYbB#VI2dGHBEcqu45-!WBUj56i5R8U[ktnb^f8!WD`Q56iDh@[Y@&q#9sd +J,~> +ir9&XEU>Cb+r3"ER)nIbrV-<mrO(uF#U:9PDl1tMqYp-e!WMu`0*j$>.TM><i:Qs9rs/Q"oB"?* +I6QF>#=`g-`oH^hrq??mrjM2I#U1$?@$\gpp\jpf!WMo[Rftu);M;0_kaMfb=GXE>n,!%]rrN&L +lC/"n1M!$#lhUP=rrN,pkaMin+%(7RfC8\:]Dhp1g#SV-4<d@FZ.eaFe,KIIp>h\J68N)=am&U" +p&BO~> +ir9&W]BuU(;&_W7UX8B'rqHEnrRC26#Z2[2G,s3_qu66f!WM!DWX*\^1LQNgk4eiBrs8W#oB4W9 +T8B#nWX"SaJ?@8cq#0pd!WCR9WX(g.4D^b<lhUPUrrN,pl7E2Y.8u#/bAlbu#:r,XT#g$dr;?Qq +r3GT>#8K%*SB^Bqro*kXrqYb0#U1?XGHBEcqu45-!WB@c/I*.?:4p%3oDI);!WDfS/I*7K>a*.h +p\jdbJ,~> +ir9&W47*4X#TGmCUX8B'rqHEnrJ^(I#RMS?G,s3_qu66f!WK%a"pYo"@$\gpp\jO[#la\lkL@/: +AK0J1#7sjbXjZP1rV$6lrJg1K#RMG4Cnf8Aq>U3i!WMo[56`5Z;hqa'Hg*a"4@3qWaQ<*mr;Qfq +\EZ9`'f0Bjc0P3)iVrrXq<1$K/g!H)XOlt=rk&12rOLuR#9P9fK=B\.r6tZHrV5G<#9kg+PJu\Y +rUp2@~> +ir9&W>O='L)B1eUUX8B'rqHEnrLW@/#TFjQG,s3_qu66f!WKOp0*ia;1LQNgk4eiBrs8W#oB4W9 +T5HaH0*YC+XjZP1rV$6lrL`I1#Sn@ACnf8Aq>U3i!WMo[Rg)&*;hqa'Y3DD\ND+5]aQ<*mr;Qfq +fBSh1'f0Bjc0P3)iVrrXq<4:RCEGofXOlt=rk&12rRg2##<jJ0K=B\.r6tZHrV5HC#='qIPJu\Y +rUp2@~> +j8T/Zqs:<g5p/R>XOck;rqHEnr57m$#=0P(Ha)2nqt'ggrQOZ/#X97jCnf8Aq>Td]$NBqqleBI^ +P'r.Yi2QuNA!=^eoDJ=^!WBq'WX(7$7X;,fn,*+[rrN,pl7E5Z.8u&4eC?_G/I#1-ZIeO?rr)it +r3GT>#8K%*SB^Bqro*kXrqYb0#U1?XGHBEcqu45-!WB=b/I*%?;i/0Fo_d2<!ri!^jXg]U/6IqJ +j7`HEs*t~> +j8T/Zqs4Lm$6V`\XOck;rqHEnr)N(f#7D_GHa)2nqt'ggrGq90#RMG4Cnf8Aq>Td]$NBqqleBI^ +P%uWZi!'BBA!=^eoDJ=^!W?'d"pbS[7X;,fn,*+[rrN,pl9>Lr.8u&4eC@:X56j,HKX04tq>U?m +!W9Im56hoZA=Up1q>T@Q!WMoY56rk`6[,W`nGE3srrN).j?Ekf.8u)9i:QrrrrW2q;WU+J+=pWT +^uP.ep&BO~> +j8T/Zqs5sA(a)4jXOck;rqHEnr,M'V#8eXTHa)2nqt'ggrJ9ho#Sn@ACnf8Aq>Td]$NBqqleBI^ +P&E`Di%G9pA!=^eoDJ=^!W@$*0*i787X;,fn,*+[rrN,plC/#B.8u&4eCC2URg3\-KX04tq>U?m +!W:R7Rg0ZaA=Up1q>T@Q!WMoYRg<dO6[,W`nGE3srrN)MjI6B-.8u)9i:QrrrrW2qUue'N5:fos +^uP.ep&BO~> +j8T/Zkj5;S%jk&'[b^NPpAY0k_X+9-66o6T[G:?NoD\jh]BuU(*[+%!Y1N1?rp9XmrquNZj3t`? +O*G\rii35l97*bimJ6bUrrDr_WWs(`:kcF9oDJC`!WMo[/I*1C</J3?iJ?\L#!?Uf`8gLfrVlor +ZKa"H'f0Bjc0P3)iVrrXq<0C9+s00rXOlt=rk&12r1)h"#8&IfNPOTIrR:cJrqUEm/I*:F</SBJ +p&+L_J,~> +j8T/Z`9[[5%jk&'[b^NPpAY0k<U9np$RADr[G:?NoD\jh47*4X$mA,dY1N1?rp9XmrquNZj3t`? +O*FDIiW]W)97*bimJ6bUrrDr_"pY\f:kcF9oDJC`!WMo[56i;[</J3?iK37f#!Qah`8gLfrVlor +\EZ9`'f0Bjc0P3)iVrrXq<1$K/g!H)XOlt=rk&12r1rC<#8&IfNPOTIrR:cJrqUj$56iJ`</SBJ +p&+L_J,~> +j8T/Zc0R(g%jk&'[b^NPpAY0kE9o4_)'hn+[G:?NoD\jh>O='L&KsYiY1N1?rp9XmrquNZj3t`? +O*F_hi\(Ne97*bimJ6bUrrDr_0*`%::kcF9oDJC`!WMo[Rg2,+</J3?iOS0A#"WHr`8gLfrVlor +fBSh1'f0Bjc0P3)iVrrXq<4:RCEGofXOlt=rk&12r6=;l#8&IfNPOTIrR:cJrqX"aRg2\;</SBJ +p&+L_J,~> +j8T/ZhX.<KKbH%@Nkj]JrV$6lqnh^"#=Bk7Kt-"2r:Bpgqs:<f&1LM3\_m#VlMh=mrVH0Php9!8 +Q%<dpPi\nMH9#T+aQN<rq#:Bokj>AUF;-E6Oi$2QrV6BnrqYh2#T>-kM7_U.i'-BW#:r]#Y12h5 +rVlftr3GT>#8K%*SB^Bqro*kXrqYb0#U1?XGHBEcqu45-!W6ls/I)n@>EZqdp\iS@!ri%5jXg]^ +-W#Q.ht6j>s*t~> +j8T/ZVsFTm'.m@I^uP+dpAY0j<U9np$n"i)\DHiToD\gflim\+.8ko2ht-d2rseu+qXj+2cb6<C +JSdUdjTYr!3G+`$kP+rMrrN,;lim\/0O0aWjS&QIrrN,pl9>Os.9)/9h<Eimks#D2:k#Rsm.gPY +rrN&-l9>Lg1M!$#lhUP=rrN,pkW]>*+%(7RfC8\:]Dhp0HfRBr&h[CO`9$ale,KLKqK_0e#;7H$ +L:Q46r:U)?~> +j8T/Z[I#UQ-5.t6Nkj]JrV$6lqf(mT#9"scKt-"2r:Bpgqs5s@&1LM3\_m#VlMh=mrVH0Php9!8 +Q%<dG2<?Ir-okn.aQN<rq#:Boc0[.i+qu_9Oi$2QrV6BnrqYiK#X0\:M7_U.i1T>(#AI"`Y12h5 +rVlftr7C5'#8K%*SB^Bqro*kXrqYcI#\tMLGHBEcqu45-!W9IgRg0QY>EZqdp\iS@!ri&)jdQKk +-W#Q.ht6j>s*t~> +j8T/Y_sOH0F;HfFR`XdgrV$6lqnh^"#=Bn;LV)L:r:L!iroiaL#]pe9?B`=hpAOR^s8E#srVZWm% +K#qklJL%-Z_<D+DhO_GWX">2<f4QJo_eLa!WLsCWX*&O3+nf+l1k8QrrN,pl7E8[.9)/:hsTg9k +Ud0$A<k!ioDAOes891f/I*"HA=Up1q>T@Q!WMoY/I3OB6[,W`nGE3srrN%9j=LTM0OL-dkkP/+r +rW2rD<3>S,:-$7[G:?Np&BO~> +j8T/Y<p^(s#8]7.R`XdgrV$6lqc)nd#7W(ZLV)L:r:L!irl".-#8Jt"PJlSVrUU!grW)oqr;HR' +qtTaIhpTEKToOJ*.1PJF#72q^MS.m>r:p9mrho,f#R;5,B:[92q#:'g!WMo[56rA\</J9Fmd%=F +579P`Q,2GNqu6Wqr4)#V#8K%*SB^Bqro*kXrqYbB#VI2dGHBEcqu45-!W7<*56hiU?^Aarq#8bB +!ri%AjZ`u',trlth"(C9s*t~> +j8T/YEU>Cb+r<+IR`XdgrV$6lqf(mT#9#!gLV)L:r:L!irlsg`#U1!<?B`=hpAOR^s8E#srVZWm% +K#qklJL%-Z_<D+@R)[30*`pW<f4QJo_eLa!WKLo0*iU:3+nf+l1k8QrrN,plC/&C.9)/:hsTgQk +aMrUA<k!ioDAOes8:L6Rg0ZaA=Up1q>T@Q!WMoYRg<dO6[,W`nGE3srrN&-jI6Af0OL-dkkP/+r +rW2r\)j(aCaDc+[G:?Np&BO~> +j8T/XZL+Xt59)k*V:"]+rqHEorqjOuWWtm?;i/0Go_e@]!WLX:WX)E=3bk;3lM:GOruD%:qY9aT +o()DFp\Ogdr;69\m,ZjE^93r\F+BnIWWj_@IBhMrqtU0lrPS$¿tF/d[WqYp9i!WMo[/I<=E +</J9Gnakj=kq*8o9R<_dlM1>Xs891f/I*"HA=Up1q>T@Q!WMoY/I3OB6[,W`nGE3srrN"7j=LTN +11?TnlM:G.rrW2sDWNJM+pCPdZJ+jGp&BO~> +j8T/X+mfI>#ol-IV:"]+rqHEorqf[]"pYSd;i/0Go_e@]!WJ)G"pbJP3bk;3lM:GOruD%:qY9aT +o()DFp\Ogdr;69\m,ZjE^93r\F#XZo"pQ>FIBhMrqtU0lrDr:i#RMP=F/d[WqYp9i!WMo[57&G] +</J9GnakjKks#P:9R<_dlM1>Xs89Cl56hoZA=Up1q>T@Q!WMoY56rk`6[,W`nGE3srrN"Cj?Ek` +11?TnlM:G.rrW2sHK@?r/g<l8ZJ+jGp&BO~> +j8T/X7I;`6(*#MVV:"]+rqHEorqgX#0*`CE;i/0Go_e@]!WJ_Y0*iI63bk;3lM:GOruD%:qY9aT +o()DFp\Ogdr;69\m,ZjE^93r\F%S4P0*W[oIBhMrqtU0lrGh3X#T"OKF/d[WqYp9i!WMo[RgD8- +</J9Gnakk=l'i'39R<_dlM1>Xs8:L6Rg0ZaA=Up1q>T@Q!WMoYRg<dO6[,W`nGE3srrN#,jI6Ag +11?TnlM:G.rrW2s\)j(aCa)H!ZJ+jGp&BO~> +jSo8[qs:<g*[4.%YhAOCrqHEorqjOuWWtm?;i/0Go_e@]!WBq'WX(7"6[#N\n,!%Wru_7=nD(jp +]t;J7h;[VcoD&4]rVZKanESu`aLS13Js>Q##9?*OWR^J6rqZQpr3G^i#7`%RJ@+)%qtL*krqYh2 +#oY6lM7hg=p[?2e/IF@COM0NAqu6WnZKa"H'f0Bjc0P3)iVrrXq<0C9+s00rXOlt=rk&12qekIH +#8K%)S':3ormUlKrqgTp/I*IC7XD8jnb`"ZJ,~> +jSo8[qs4Lm$mJ5hYhAOCrqHEorqf[]"pYSd;i/0Go_e@]!W?'d"pbSY6[#N\n,!%Wru_7=hPF1L +:JR.Uh;[VcoD&4]rVZKanESu`aLS13E$jiS#9?*OWR^J6rqZQpr#tG3#7`%RJ@+)%qtL*krqYhD +#p:ZrM7hg=p[?8g570DYOM0NAqu6Wn\EZ9`'f0Bjc0P3)iVrrXq<1$K/g!H)XOlt=rk&12qg.<f +#8K%)S':3ormUlKrqh$'56iea7XD8jnb`"ZJ,~> +jSo8[qs5sA&L'bmYhAOCrqHEorqgX#0*`CE;i/0Go_e@]!W@$*0*i766[#N\n,!%Wru_7=j0NZ@ +CMBNNh;[VcoD&4]rVZKanESu`aLS13F@,7G#9?*OWR^J6rqZQpr'g!+#7`%RJ@+)%qtL*krqYiK +#sKe;M7hg=p[?VqRgMktOM0NAqu6WnfBSh1'f0Bjc0P3)iVrrXq<4:RCEGofXOlt=rk&12qmb^V +#8K%)S':3ormUlKrqj1dRg3^P7XD8jnb`"ZJ,~> +jSo8[hs@?J&1LP5]&3/XpAY3nqn_X!#=Bq=LqM[<r:L!ir3G^i#7i.VK!sM+r:^-lrpm\sWYV_J +aOT89p%nXdrr)`ho^Cu!d(uoQSEm0[)*2T/dI$f0qYpTqqsCBhKb>q<N5"<Er:g3lrqYh2$5t?m +M7hg>qY'/rkq*5m89UlUl1b/Ur3GT>#8K%*SB^Bqro*kXrqYb0#U1?XGHBEcqu48.!ri(7j=LTO +1M!$"lhUP/rrW2sDWNGU+s9=!Xk3(>rq?AB~> +jSo8[W9a]n&1LP5]&3/XpAY3nqc)nd#7W+\LqM[<r:L!ir#tG3#7i.VK!sM+r:^-lrnop7"r8eV +aOT89p%nXdrr)`ho^Cu!d(uoQ0'`]H)*2T/dI$f0qYpTqqs4Ll&hI+C^>eh`p\t9nq<C0O+=U9H +]]&MZp?@(k570DAG,ERLp\k*h\EZ9`'f0Bjc0P3)iVrrXq<1$K/g!H)XOlt=rk/74rqh$&56hoZ +A=Um0q>SkC!ri(CjZa#'+@UOWfC8\:pA]X~> +jSo8[[d5XP&1LP5]&3/XpAY3nqetgS#9#$iLqM[<r:L!ir'g!+#7i.VK!sM+r:^-lroIA[0,@9S +aOT89p%nXdrr)`ho^Cu!d(uoQ9'\,8)*2T/dI$f0qYpTqqs?$B-5%k2N5"<Er:g3lrqYiK$9fn< +M7hg>qY'0Zl'i$289UlUl1b/Ur7C5'#8K%*SB^Bqro*kXrqYcI#\tMLGHBEcqu48.!ri)+jI6Ah +1M!$"lhUP/rrW2s\)j(bCEQ&jXk3(>rq?AB~> +jSo8Zea9@BF;6N:Pf2\WrUp0kqoS3)#A#;\L:Z:7r:U'jrpfBU#_`pD=c^AYp&4Xb!WM$MWX#<$ +_:@Z<q>L<m$NBu"p[[\1f#4\bm&C:,2e\l1m/$_XrrN,VmA^G6(,TKfaQN<rp\t9nq<BO>)C\XB +]]&M[qXVfmkq*2q>`?5KnG<+]ZKa"H'f0Bjc0P3)iVrrXq<0C9+s00rXOlt=rk/74rqgTo/I*"H +A=Up1q>SkC!ri(7jXg`^+%1=TfC8\:pA]X~> +jSo8ZN9g`R'es$Z`9$^kp&>'iDsRZ5$7Jc+]&3/Xp&>'lhs:OP'.m@J^uP+dp\t9nWV$H#8ZfhZ +jmr6Grr3?)r;-0Ym,HU7XYfAK#8]=4T[3!$rqcWqri#2g#R;,%@[P7"p\jjd!WMo[578S_</J9H +o_\LUbt[Fe#rl1K\_Q]NrVX1j56hoZA=Up1q>T@Q!WMoY56rk`6[,W`nGE3trrW2sHK79q'f0Bj +c0P3)e,KLKqg.?g#VI2eGHKKdqu6<hJ,~> +jSo8ZT'\0:+r)h=Pf2\WrUp0kqh=Ai#9bKmL:Z:7r:U'jroEH"#UU3:=c^AYp&4Xb!WKS$0*bjd +_:@Z<q>L<m$NBu"p[[\1f#4[eln8S[2e\l1m/$_XrrN,-m4S_h(,TKfaQN<rp\t9nq<FFW4t0Hf +]]&M[qXW:2l'huf>`?5KnG<+]f'8_0'f0Bjc0P3)iVrrXq<4:RCEGofXOlt=rk/74rqj1cRg0Za +A=Up1q>SkC!ri)+jdQNk+%1=TfC8\:pA]X~> +jSo8Z_sOH0:`29-T?ZZsrq69lqq:>9#BhCgK=B\.r:U'jrnm+C#]pk?A=CX(q#1!f!WM$KWX##Z +Z-;1rq>L9l#laf#q=O+8d^\\E#acDeBV<]<qYp?k!WCmBWX)H@4Dgk?m.pYTrrN,pl7EA^.9)/: +iUm'Hq!3e$/I<srEM:S=pAFiol7E5U1M!$#lhUP=rrN,pkUd&a+%(7RfC8\:]`/'4qekIH#8K%* +SB^BqrmUlKrqgTp/I3OB7!GcbnGE4Ys*t~> +jSo8Z<p^(s#T5X:T?ZZsrq69lqkNK^#72\OK=B\.r:U'jri#2g#R;/'A=CX(q#1!f!WK(i"pZ`G +Z-;1rq>L9l#laf#q=O+8d\c@8#8]=4T[3!$rqcWqrMT#e#RDA3D55JEq>U-g!WMo[578S_</J9H +o_e[_l]LEr#s:UqU!)Wmr;=(i56hoZA=Up1q>T@Q!WMoY56rk`6[,W`nGE3trrW2sHK79q'f0Bj +c0P3)e,KLKqg.?g#VI2eGHKKdqu6<hJ,~> +jSo8ZEU>Cb)AtPLT?ZZsrq69lqloE?#:(TjK=B\.r:U'jrjM2I#U1'BA=CX(q#1!f!WKS"0*b(7 +Z-;1rq>L9l#laf#q=O+8d];ag#V-]MBV<]<qYp?k!WBFn0*iI84Dgk?m.pYTrrN,plC//F.9)/: +iUm'Hq!5NURgG'BEM:S=pAFj>lC/"n1M!$#lhUP=rrN,pkaMin+%(7RfC8\:]`/'4qmYXU#8K%* +SB^BqrmUlKrqj1dRg<dO7!GcbnGE4Ys*t~> +jSo5Xm&C=W+%(1NeaNA6p&>'jg?bgELEfB=ZJ+jGp&>'k_sOH0;&_Z9Us\Q)rqQKnoC8gcN/":P +iUQdDqu6m"r;$!MfWaeD#]pqECSK2CqYp?k!WBq'WX(m57<blcn,*+YrrN,pl7ED_.9)/:iV!-J +qt/l3kq*/o=,43:n+ljdl7E5U1M!$#lhUP=rrN,pkUd&a+%(7RfC8\:]`/'4qekIH#8K%)SBU<p +rmUlKrqgTp/I3OC7<kufnGE4Ys*t~> +jSo5Xlim_&+%(1NeaNA6p&>'jU[/0i#U;ohZJ+jGp&>'k<p^(s#TGpEUs\Q)rqQKniUI*W0nuXJ +iUQdDqu6m"r;$!MfL,'2#R;5-CSK2CqYp?k!W?'d"pbPY7<blcn,*+YrrN,pl9>\".9)/:iV!-J +qt/lCks#G4=,43:n+ljjl9>Lg1M!$#lhUP=rrN,pkW]>*+%(7RfC8\:]`/'4qg.<f#8K%)SBU<p +rmUlKrqh$'56rka7<kufnGE4Ys*t~> +jSo5Xln8V]+%(1NeaNA6p&>'jZ0X+K-R232ZJ+jGp&>'kEU>Cb)B1hWUs\Q)rqQKnjmau/8;=(a +iUQdDqu6m"r;$!MfO!u!#U1-HCSK2CqYp?k!W@$*0*iC;7<blcn,*+YrrN,plC/2G.9)/:iV!-J +qt/m@l'hrc=,43:n+lk3lC/"n1M!$#lhUP=rrN,pkaMin+%(7RfC8\:]`/'4qmYXU#8K%)SBU<p +rmUlKrqj1dRg<dP7<kufnGE4Ys*t~> +jo5A\na*7\%jk#%[G:?No`"sio]rL^+%(1Of'iJ7pAY0k]'ZL'5p&L=XOck;rqZQprk.a##BkZs +b2i0krqcWtrquKUaR6&6;&hf?Vpt/2rqcWqr5.j$#9P6dJ[O;(r:^-krqYh2$lUQoM7hg?r;Q]k +m]u%.#<lsoa5lmgZKa"H'f0Bjc0P3)iVrrXq<0C9+s00rXOlt=rk&12qlo-5#8K%)S'1*mrmUlK +rqgTp/I*(87s_Dmnb`"ZJ,~> +jo5A\hs:OP%jk#%[G:?No`"sio]l\d+%(1Of'iJ7pAY0k47*4X$6MZ[XOck;rqZQpr]KZS#=!d< +b2i0krqcWtrquKUOmWDZ#TQ'KVpt/2rqcWqr)N+g#7VtRJ[O;(r:^-krqYhD$m6uuM7hg?r;Q]k +m^D=D#=**qa5lmg\EZ9`'f0Bjc0P3)iVrrXq<1$K/g!H)XOlt=rk&12qmPQM#8K%)S'1*mrmUlK +rqh$'56i2P7s_Dmnb`"ZJ,~> +jo5A\jQnN)%jk#%[G:?No`"sio]n.8+%(1Of'iJ7pAY0k>O='L(`u.iXOck;rqZQpr`nqG#>KcJ +b2i0krqcWtrquKUTC+?<)B:t]Vpt/2rqcWqr,D$V#8/=WJ[O;(r:^-krqYiK$pH+>M7hg?r;Q]k +m`Oa_#>/g&a5lmgf'8_0'f0Bjc0P3)iVrrXq<4:RCEGofXOlt=rk&12qpa\r#8K%)S'1*mrmUlK +rqj1dRg2&!7s_Dmnb`"ZJ,~> +jo5A\hsIELKbH%@NkaTHrUg*krV!M_WWtRICnf8Bq>U-g!WMr^WWtg78q+,$o)&4^!:'$Q#G#CX +XjH;*r;$?prquK<m]$LF,"Hs_f^\k7rrN#&mA^C&.9)2<iV!-BrrN,pl7EG`.9)/:iV!-Ks8;QO +;!9J8;Lu(&m.R^L/I*"HA=Up1q>T@Q!WMoY/I3OB6[,W`nGE46rr`9!r;6Hh"8i#prq69lqlo-5 +#95I,R*"UfrmUlJrqkb.#8e[XI^@f"qt9u>~> +jo5A\W9a]n'.m@I^Z+qbo`#!kp)iW*#8TF<U<i3%rqHEnrqbsc#7DbKI^@f"qtU0k`pX*:$rV_[ +d-13$q>UQrr:ZWJ"pYM[7s_Aknb`.^!W+&-"pY\g</SBJp&+O`!WMo[57J_a</J9Hp&+jir:T/X +ks#D3;Lu(&m.RpR56hoZA=Up1q>T@Q!WMoY56rk`6[,W`nGE46rr`9!r;6Hh"8i#prq69lqmPQM +#9km2R*"UfrmUlJrqkb@#9G*^I^@f"qt9u>~> +jo5A\[d>^R-5.t6NkaTHrUg*krUrYG0*`R]Cnf8Bq>U-g!WMr^0*`==8q+,$o)&4^!71*e#;B22 +XjH;*r;$?prquJhmOneZ,"Hs_f^\k7rrN!cm4S\U.9)2<iV!-BrrN,plC/5H.9)/:iV!-Ks8;QO +V<OHSBi9Mdea3"\lC/"n1M!$#lhUP=rrN,pkaMin+%(7RfC8\:e,KOLrVZQkq?-WmrVlKi!W1F. +Rg256@@51$q#8bB!WMuWRg2q+,$o)&+[J,~> +jo5A[bjDD9@M^q5R`XdgrUg*krV4.oWX!2n@@,!rp\jjd!W9k%WWtj;:4p%3oDJFa!WL[<WX!fX +NO[[1q>U3i!ri&Jn#?Y[&LgV4\_crUqYpTqqs:<f&hR:L_r^UjpAY0mq<BO@)C\XB]]&P]s8W)p +nAsfF#!-C`_r:-il7E5U1M!$#lhUP=rrN,pkUd&a+%(7RfC8\:f)H?]rVQE`o'l)7mI'H6p%\C^ +rqQKor3><7#95C&Q,`"]rR:cIrqb\-#8ea^K=B\.r:U)?~> +jo5A[EpX&:#8]:/R`XdgrUg*krV07V"pYSn@@,!rp\jjd!W6!b"pYM_:4p%3oDJFa!WJ)H"pZ2X +NO[[1q>U3i!ri%imKNn..8ko2hXg[ArrN,rlim\-/R":SjnAZHrrN,pl9>_#.9)/:iV!-Ks8Mla +b32%o4D1"uiUOAA56hoZA=Up1q>T@Q!WMoY56rk`6[,W`nGE49rt58/qt]pUnF#]2mdK`>q"jsg +q#:Bm\)]aY+tm5e`om*pe,KIJqW'jG*[OR6\)$ZRp&BO~> +jo5A[M!Zi$*Z$_FR`XdgrUg*krV16r0*`aY@@,!rp\jjd!W6s(0*`@A:4p%3oDJFa!WJ_Z0*a@C +NO[[1q>U3i!ri&!mk4qr&LgV4\_crUqYpTqqs5s@&hR:L_r^UjpAY0mq<FFY4t0Hf]]&P]s8W)p +nC6Zk#"E6l_r:.8lC/"n1M!$#lhUP=rrN,pkaMin+%(7RfC8\:f)H?]rVQE`o'l)7mI'H6p%\C^ +rqQKor79qu#='qJQ,`"]rR:cIrqb]F#<aA.K=B\.r:U)?~> +jo5AZ]BuU(5TN+0VUFl.rq-3lrqY13WWtL_LUc11qu6Hl!ri,9l`(1h-;T<(hXg[@rrN):mA^@d +DOe`-o_eLa!W1U>WX)E;1glTejnAZLrrN,qm&C:(03sj_kP+rKrrN,pl7E5Z.9)/:iV!-Jrr`5o +k]Q,A"tWMtXO?=7l7E5U1M!$#lhUP=rrN,pkUd&a+%(7RfC8\:fDc!Qqm:9Cr@J@R@u8+WiTTb( +qYg6i!W97a/I*4H=cgM^pANJ?!WMrV/I*1B;MVmBo_eC^J,~> +jo5AZ47*4X#ou9NVUFl.rq-3lrqW5Q"pZJSLUc11qu6Hl!ri*ulNRS%-;T<(hXg[@rrN(!m03bX +DOe`-o_eLa!W/Y\"pbGM1glTejnAZLrrN,qlim\.03sj_kP+rKrrN,pl9>Lr.9)/:iV!-Jrr`5o +k^Vh]"uoA+XO?==l9>Lg1M!$#lhUP=rrN,pkW]>*+%(7RfC8\:fDc!Qqmq,crBCWrDir#miTTb( +qYg6i!W9Ig56i>`=cgM^pANJ?!WMrV56i;Z;MVmBo_eC^J,~> +jo5AZ>O='L(EGb\VUFl.rq-3lrqW__0*a",LUc11qu6Hl!ri+<lRrJ`-;T<(hXg[@rrN(=m4SZ1 +DOe`-o_eLa!W0.j0*iF31glTejnAZLrrN,qln8SW03sj_kP+rKrrN,plC/#B.9)/:iV!-Jrr`5o +kd'HB#'E[hXO?=\lC/"n1M!$#lhUP=rrN,pkaMin+%(7RfC8\:fDc!Qqq/E\rL4.lXh)j4iTTb( +qYg6i!W:O0Rg221=cgM^pANJ?!WMrVRg2,*;MVmBo_eC^J,~> +jo5>Xm&C=$,YNTlg@>(>o`#!lqs`pO#CJp]VU"H"r;6KqrqjUuWX+A*9RjD&nb`=`rr`9!qSMX" +#BNdoYgr.:rqZQpr5.p&#Tb'REM_%Jq>U6j!WMr^WWt@7?BrRop\jgc!WDiZ/I*1C</J9Hp&+gh +"TJ;hb<>)A"ZBkS^YPpT/I*"HA=Up1q>T@Q!WMoY/I3OB6[,W`nGE4;rrW.k7.r2<BW]G0jm`'C +rql]rrSQZf#9>9oMn\3DrR:cIrqYV,#8AXfMn\3DrUp2@~> +jo5>Xlim_*,YNTlg@>(>o`#!lqs`nU#7j4EVU"H"r;6Kqrqfa]"pbJ[9RjD&nb`=`rr`9!qGlne +#8g?iYgr.:rqZQpr)N1i#Rhe@EM_%Jq>U6j!WMr^"pY\n?BrRop\jgc!WDiZ56i;[</J9Hp&+gh +"TJ;hbt[Fe"Zg.W^YQ-Z56hoZA=Up1q>T@Q!WMoY56rk`6[,W`nGE4;rrW.s;t`E]Ej*X<jm`'C +rql]rrScg%#:1j"Mn\3DrR:cIrqYV>#8SdhMn\3DrUp2@~> +jo5>Xln8VS,YNTlg@>(>o`#!lqs`o)#:`,`VU"H"r;6Kqrqg^#0*isO9RjD&nb`=`rr`9!qJbdS +##^#Vea<23q>UKnE:5Fc&Ka;YV9nQ(rqcWqrqbt7#8o4%Q,i(^rV$6lrV>`J#<jS9M7hg?r;Q^! +rql9=TBVgK:LfU'h9P;T#8K%*SB^Bqro*kXrqYcI#\tMLGHBEcqu57J!r^KBp6u>a\]WRdnG)q\ +qu6]qlf=N?:+B8%^>ehae,KIJq;e"M+=^BL^>ehap&BO~> +k5PJ]kj>AUKb>q<N4n3Br:9jhr:IYfWX`]JNOda/pA=gfrr)`WZKS:n5"'OldH^H%rVQfqq=jNs +m&C7OB:-Wtp&+[d!ri)&n>Ze('J*1:[bL?LrqcWqrqbu]#\GYkO29lLr;QTn"oeK!r;63Q/I*1C +</J9Hp&+dg"9&#\M<QSq/4t/bc(sVV#8K%*SB^Bqro*kXrqYb0#U1?XGHBEcqu5:K!W@$0/I4>! +[*%4lp\b$grrN)lj=LT]-W#Q.ht6iqrrN,+j=LTL/Qn1PjS&QFs*t~> +k5PJ]`9[[5&hI+C^#AV]o)AdhoM=cW%No&:\_6?Cqu-NnrVOJUkQV817!5HUlLt)Qqulomp[hAM +"pR/%R)J%Xr;-Eprqdl."pkMK/5q82g[Y1?qYpTqqWnCl$S>MB_;k4drql^!rr)fnqtB;>#9YHp +M7hg?r;HWtrV5]@ks#>48pI8YWp2eR'f0Bjc0P3)iVrrXq<1$K/g!H)XOlt=rn7;PrI+9%#Y:2e +b2)IZr;QWo!WD`Q56ihh:klO<o_d2<!WK[k56hfQ=cgM]pAO[aJ,~> +k5PJ]c0[.i-5%k2N4n3Br:9jhr:Fai0+KaCNOda/pA=gfrr)`<7HcB0,=H[QdH^H%rVQfqq=jN! +ln8Q)B:-Wtp&+[d!ri'cn1P(h'J*1:[bL?LrqcWqrqbt7#U1j'O29lLr;QTn"oeK!r;63QRg2,+ +</J9Hp&+dg"9&#\]'5[fJP(0bc,f1>#8K%*SB^Bqro*kXrqYcI#\tMLGHBEcqu5:K!WBV$Rg>FS +[*%4lp\b$grrN)ljI6Bj-W#Q.ht6iqrrN,PjI6Ae/Qn1PjS&QFs*t~> +k5PJ]hX.<K@M^n3RE4RcrUTsirV,%2WXFW$S&!_Ao(MkRp<)Nt&=Qp9PePl9nFQ;ElHm?#jj!.l +#@gP[Z.JI@rql]rroijO$'u)C5&-S-jnAZKrrW2rZL"Rr2,Ah1f^8G1rVQotqYBmQoCDD9/I*1C +</J9Hp&+dg"TJ>ki]cTY">X;D\=;b8#8K%*SB^Bqro*kXrqYb0#U1?XGHBEcqu5=L!WI*//I++[ +UVY[Oq#1-j!WDcR/I*LG97XD)o)-u:!WBCd/I)qC?BrOnp\jdbJ,~> +k5PJ]VsOZo#8]7-RE4RcrUTsirV*bc"q)AgS&!_Ao(MkRp2K-u&-sXoPePl9nFQ;EfSEJ7jd,6; +#9$BgZ.JI@rql]rrl"70#Rqk>C7E9*pAOge!ri$=lim\>:P,q*mJ$MVr!3,qq=iY8o'kp/#9YHp +M7hg?r;HWurquEJ:?atG3*qWTU$=iI'f0Bjc0P3)iVrrXq<1$K/g!H)XOlt=rn@AQrdF<$#=O$9 +_:n;OrVZZrrV,A;#;7>qJ@+,&r6tZHrOV&S#88dtQ,`"]rUp2@~> +k5PJ][I#UQ*Z$\DRE4RcrUTsirV+(l0+0[VS&!_Ao(MkRp4h]_&1obMPePl9nFQ;Eh3r5rjeV5r +#:rZ$Z.JI@rql]rrlspc#q?B+5&-S-jnAZKrrW2r7-lQ3-r5H$f^8G1rVQotqYBmCoCDD9Rg2,+ +</J9Hp&+dg"TJ>kih5P*"BSoi\A7C!#8K%*SB^Bqro*kXrqYcI#\tMLGHBEcqu5=L!WK_$Rg578 +UVY[Oq#1-j!WDcRRg3aT97XD)o)-u:!WC[3Rg0T\?BrOnp\jdbJ,~> +k5PJ\_sOH05TN(.V:"]+rpp'krqc)jlDb,_PG,S6guQr'ql0[lQKkIUT:)I__o]s3Yl:X(bK7cj +WX"DDBq3<.p\k!h!WBY"WX16o0NEe4fC&M7q>UNqqS;Ht':NlXS\s7JnFQ;EoBFlAZ+&WKiT`!" +)C\XB]]&P]r;Qluq<kQQ/HdUoEhJNZ/I*"HA=Up1q>T@Q!WMoY/I3OB6[,W`nGE4>rrN,.mk"c+ +Gb)Y+nG<._rrW2pCud/Q+@^XZf^Se;eGfRJLZL)n,o&7HR`amirq6;A~> +k5PJ\<p^(s#ou6LV:"]+rpp'krqc(?l37M(3,6%NguOu@qZ['6([;21%P2FGN0A]c+8uHGbK7-X +"pYMuBq3<.p\k!h!W>.M"pkSQ0NEe4fC&M7q>UNqqGZ_b'+$%(S\s7JnFQ;Eo@K[6+#i*8iT`W4 ++=U9H]]&P]r;Qluq<k]U56O)<EhJ``56hoZA=Up1q>T@Q!WMoY56rk`6[,W`nGE4>rrN,4mlq%I +Gb)Y+nG<._rrW2pGiV'o+@^XZf^Se;eGfRJOl\e51)2WUR`amirq6;A~> +k5PJ\EU>Cb(EG_ZV:"]+rpp'krqc(_l7WE!:O'IsguPJdq_%t.2sN%%1.QYMR\5aW6iJ_?bK79\ +0*a!iBq3<.p\k!h!W?6l0*r7.0NEe4fC&M7q>UNqqJPXQ'.l4^S\s7JnFQ;EoA$Kc6s&:(iTcm; +4t0Hf]]&P]r;Qluq<lDiRfn^?EhKf)Rg0ZaA=Up1q>T@Q!WMoYRg<dO6[,W`nGE4>rrN,Sn!aQ9 +Gb)Y+nG<._rrW2p[H*e^+@^XZf^Se;eGfRJ`9!HoH5/8HR`amirq6;A~> +k5PJ[]'ZL'+!aI,Z.\[Erpg!ir:JOpWWJnp;r=SXW1g&kXmE%l3`UsFh=CI@rrN)Un>ZdZ'IZLn +TZQ<gr:p9nrqb:4WX,8eVROFabe1UdWWTT?_92$p#9#$jM7hg?r;6Krr:T/Jkq)uj=GDFm/I*"H +A=Up1q>T@Q!WMoY/I3OB6[,W`nGE4>rrN(%mO\W;GG<1?p&+dg!ri"4j=LTV5B3UMmeZq4rrN%9 +jXg`](cZ6&cg:K,p&BO~> +k5PJ[47*4X%4"PoZ.\[Erpg!ir:I8L"p,?'0Acs:4/&LS5jS[Z-rl&4h=CI@rrN(sn-01)'IZLn +TZQ<gr:p9nrq`>R"pb_l?%@irPtk*P"p7u?_92%-#9YHpM7hg?r;6Krr:T/Xks#8/=GDXs56hoZ +A=Up1q>T@Q!WMoY56rk`6[,W`nGE4>rrN(3mQUnOGG<1?p&+dg!ri"@j?Ekh5B3UMmeZq4rrN%E +jZa#&(cZ6&cg:K,p&BO~> +k5PJ[>O='L&gU(tZ.\[Erpg!ir:ISU0*4"%38Z@l<hZ@n>O4!I/6.J8h=CI@rrN),n1P(`'IZLn +TZQ<gr:p9nrq`h`0*j@*DiU6YUM=QA0*?.*_92&4#<jS9M7hg?r;6Krr:T0Jl'hc_=GE^<Rg0Za +A=Up1q>T@Q!WMoYRg<dO6[,W`nGE4>rrN)&m[FD`GG<1?p&+dg!ri#(jI6Ao5B3UMmeZq4rrN&. +jdQNj(cZ6&cg:K,p&BO~> +kPkS^qsCBhKb>q;MnS*Ar:'^grV5]jhPp^E9fY7hi2Qp<FFfg[m&C:r6Zf6Sm.pY[rrN)gn>Zg[ +'.#qXPJ#]?qYp6h!W2EBWWSWNS[%H3#9#$jM7hg?r;6Krrqc-*kq)ug6#1N+/I*"HA=Up1q>T@Q +!WMoY/I3OB6[,W`nGE4>rrD0J/I*t2KX04tqYpKo!ri%Kj=LTW3GG/3lhUP0rrN!ajXg`Y*'S>> +e*d)3p&BO~> +kPkS^qs4Ll&hI(A^#AV]nG`Uhq!2AF"p>`(3BA&9"p@87JXDkl"pYi0FJmRRq>UBn!WCpF"ptVL +,sc4.]\N#QrqHEnqsiGG"(@=_Z0FOY+=U9H]]&P]qu6ctqXDYl56F#6CO#,/#8K%*SB^Bqro*kX +rqYbB#VI2dGHBEcqu5@M!9``6#<5e<ZIeO@rr2p!rq_W856i>lBqWc;q>SnD!W,gW56rVV5&dFK +meZqUs*t~> +kPkS^qs?$B-5%k1MnS*Ar:'^grV5]&hCf!i5<1b]i%G44FFfgMln8Sk6Zf6Sm.pY[rrN)Zn1P+a +'.#qXPJ#]?qYp6h!W2EB0*?-TS[%IL#<jS9M7hg?r;6Krrqc-6l'hd76#2eORg0ZaA=Up1q>T@Q +!WMoYRg<dO6[,W`nGE4>rrDTVRg3A'KX04tqYpKo!ri&3jI6B43GG/3lhUP0rrN"njdQNZ*'S>> +e*d)3p&BO~> +kPkS^hsIEL@M^n2R)eCarUBgirql<EXPg)_KetVL:1p<[WWc^+C5f4!mA^P>2.Dljjn8QMrVPF? +WX:s),sPmtZde=8rV$6mr:S1fWrH]4I\#aU#9#$jM7hg?r;-EqrV,MukUcg5@-T<K'f0Bjc0P3) +iVrrXq<0C9+s00rXOlt=rnRMSrjM2G#:_oPSB0jerVc`sqlf'4#9Yd1QcJ=arRLoKrqb\-#T"UP +GcfTequ69gJ,~> +kPkS^W9jcp#8]7,R)eCarUBgirql<E)rLo)(c4'4:/qnb"pI%bC5f3?m03q,2.Dljjn8QMrVNM^ +"ptYN,sPmtZde=8rV$6mr:PWs"p7k<I\#ag#9YHpM7hg?r;-EqrV,N*ks#5.;J,2Y#8K%*SB^Bq +ro*kXrqYbB#VI2dGHBEcqu5CN!WKb!56j/3C7NB-p\k'j!W0:c56iSl@@,$up\iYB!WMrV56r8P +7<krdnGE4Xs*t~> +kPkS^[d>^R*Z$\CR)eCarUBgirql<E5N"1!1GgpO:0KO60*O^?C5f3Mm4Shp2.Dljjn8QMrVNtk +0+&I/,sPmtZde=8rV$6mr:Q900*>BjI\#bn#<jS9M7hg?r;-EqrV,N]l'h`h;MFD*#8K%*SB^Bq +ro*kXrqYcI#\tMLGHBEcqu5CN!WLg?Rg4I-C7NB-p\k'j!W1C-Rg2bF@@,$up\iYB!WMrVRg;,! +7<krdnGE4Xs*t~> +kPkS]ea9@B5TN(-UsSK(rpTjirV5^)X5^,a@OWuq<cX(eii36D1IYo;[DfQ@WX1+PKso_'p@msk +nZ!"a0,H$&@u7D9kOncPpAY6nq!"s=WW\kU:2cH`/I*1C</J9Hp&+[d"TJ;hb<>)A!BEp?/I*"H +A=Up1q>T@Q!WMoY/I3OB6[,W`nGE4?rrN(;lR`9?Lq;I7r;HWrr:Au$#:(j&Nkj]JrRLoKrjCf= +#8&7VJ[O;(r:L#>~> +kPkS]N9pfT#ou6KUsSK(rpTjirV5]k)<(i*)(@7(<cX(/iW]Vt1IYo;[DdU^"pl_VKso_'p@m<@ +n-07.(FVRZM6G:hp&+g_rr`5pkoJXc":RFgDjKZQ#9YHpM7hg?r;-Errql92:$FkC4&kK0#8K%* +SB^Bqro*kXrqYbB#VI2dGHBEcqu5CN!W@E456`]>Lq;I7r;HWrr:Au6#;@]2Nkj]JrRLoKrk%5U +#88CXJ[O;(r:L#>~> +kPkS]T'\0:(EG_YUsSK(rpTjirV5]p52n4#/1E8;<cX(<i\(Nh1IYo;[De*l0*s(*Kso_'p@mH` +nLk;#'Gi/`@u7D9kOncPpAY6nput*%0*Esl:2cH`Rg2,+</J9Hp&+[d"TJ;hfUqDt!Ch.qRg0Za +A=Up1q>T@Q!WMoYRg<dO6[,W`nGE4?rrN)0m$e22<J\6CoDJRe!W;QMRg3d]=H:2Wp&3G@!WLg6 +Rg0r[9nB_-o)/.[J,~> +kPkS]_sOH0%O=\rZJ"dFrpTjjrquEL`Mqt!$CX%#/j`fjS@#u5jf/]'4t/EeFeH\(d'BS<WWu9d +Ehgb0e%"nI$tBnj01]`6YKl8$qu69g"TJ;geuRc0"e/CF96-Qf/I*1C</J9Hp&+Xc"9&#\M<QSm +.mE5M#8K%*SB^Bqro*kXrqYb0#U1?XGHBEcqu5CN!W6*e/I*LiGc]KbqYpKo!r_dYjXg]e-;K3% +h=CKorrN(RjXg`e&h@"@^#AY^o`'F~> +kPkS]<p^(s%O=\rZJ"dFrpTjjrquELZP_d.$4%Fl/j`fjS@#tSjTZ)')C[UAFeH\(d!HPs"pYr3 +EhgasSN60D$j[Id01]`6YKl8$qu69g"TJ;g`#@S="UQ,'96-Qf56i;[</J9Hp&+Xc"9&#\Om,(2 +2+6^o#8K%*SB^Bqro*kXrqYbB#VI2dGHBEcqu5CN!W6Ts56iK(Gc]KbqYpKo!r_dijZ`u2-;K3% +h=CKorrN(\jZa#2&h@"@^#AY^o`'F~> +kPkS]EU>Cb%O=\rZJ"dFrpTjjrquEL[lib*$7m;D/j`fjS@#tajY$ug,:PQJFeH\(d"sgP0*`dj +Ehgb#W`\aD$m-*&01]`6YKl8$qu69g"TJ;ga?JQ9"YM5Z96-QfRg2,+</J9Hp&+Xc"9&#\]'5[b +BO^7r#8K%*SB^Bqro*kXrqYcI#\tMLGHBEcqu5CN!W9.fRg1T9Gc]KbqYpKo!r_eejdQL5-;K3% +h=CKorrN):jdQO5&h@"@^#AY^o`'F~> +kPkS\ZL4^uKbH%>N4n3Br9aLfrqc-?^8C(n%945i1J)/3VS^m<d'KY8WXjkT*$m:'<,e&2f&br= +Yat9`".=e'U[G,kL*@Na4&g6aZd@h*qYp*d"9%rWalBB+M+]$D5@&uEl7E5Z.9)/:iV!-Erri?! +o\r(!/H@Hh/I*"HA=Up1q>T@Q!WMoY/I3OB6[,W`nGE4?rrDr^/I*C[CSB&>q>UBn!r_k/j=LT[ +7!G]^n,!%7rrN%#jXg`\(,K?a`od$oo`'F~> +kPkS\+mfI='.m:E^#AV]mJd@hqXE=B-g([C$lC3F8S*UQ_U[DfNu%!b%gW^d,qqP_E0If_jl=^Z +6LY0]#SeR/mKO+*&/lrY<-"2/d,jlqrq$-mrV#Ha(utl+$5Fa95@&uEl9>Lr.9)/:iV!-Erri?! +o\rX156*Y-56hoZA=Up1q>T@Q!WMoY56rk`6[,W`nGE4?rrDr^56iMsCSB&>q>UBn!r_k;j?Eko +7!G]^n,!%7rrN%1jZa#%(,K?a`od$oo`'F~> +kPkS\7IDf7-5.t4N4n3Br9aLfrqc-?YXdk0%3??21J)/3VS^m<d$QlZ0+THP*$m:'<,e&2f&br= +UKR(>""Z/j6gcT:-PRII4&g6aZd@h*qYp*d"TA&X]KP=/#:^oA/3dEoXQl8[4t0Hf]]&P]q>UTs +r:K!Al'hZ[lC/"n1M!$#lhUP=rrN,pkaMin+%(7RfC8\:h#@BOl^J,J4):P8lhUPZrrW/n[,d\] +/jsoaeaNA6f)GdKYN;5ZC)/U5QH&(]rUg,?~> +kl1\_na3=^:`)-&R`XdfrTsOfrV5d5]V=\k&7d%,.m@!SOg*$dm-a#aZ^pNa'UViH+"9*:<bd2T +\'jI0n`A-'QB9q&%V.F:-T=\/JY0U*kO\QLo)AmmqsrXZV<FodLfZ)O/3-=2J>:!H/I*1C</J9H +p&+Ub"9/,aZI(6/'f0Bjc0P3)iVrrXq<0C9+s00rXOlt=rn[STrql"5#9G[0R)nLcrVlfurqWYV +/I*I\C7i`8q#8nF!WM0@/I3444):P8lhUPPs*t~> +kl1\_hsCUR#T,L3R`XdfrTsOfrV5d5]LV5k&.&si.m@!SOg*$dm-a#aZU=-b'F,$\+"9*:<bd2T +\'jI0n`A-'E])YW%LNdf-T=\/JY0U*kO\QLo)AmmqsrXH39UPR#S%^s/3-=2J>:!H56i;[</J9H +p&+Ub"9/,a[a@;E'f0Bjc0P3)iVrrXq<1$K/g!H)XOlt=rn[STrql"G#:)*6R)nLcrVlfurqWk\ +56iZ!C7i`8q#8nF!WM6B56rDN4):P8lhUPPs*t~> +kl1\_jR"T+)AkDER`XdfrTsOfrV5d5]O'kV&0M`/.m@!SOg*$dm-a#aZWZ]L'It4B+"9*:<bd2T +\'jI0n`A-'HVE6K%NlZ0-T=\/JY0U*kO\QLo)AmmqsrXM;s5kA-m9TU/3-=2J>:!HRg2,+</J9H +p&+Ub"9/,ab0c[`'f0Bjc0P3)iVrrXq<4:RCEGofXOlt=rn[STrql#N#=:4TR)nLcrVlfurqXt& +Rg2kQC7i`8q#8nF!WMTLRg;V)4):P8lhUPPs*t~> +kl1\_hsIEL*[!jnWRL82rp0Rgr:fO0]Ub;TWYK%i*@X$FBS<(le)g,pq=Eds[?c`;oVrgcB/q%] +1-eZFFbuZo`7O5Eq>'XEe%2*(KU(St&9^M]+tYlN@="0Aa5$"Rqu6*b#6">bg:a,SmA^VO<[o7B +2+(8PG`\rDfBOpm)C\XB]]&P]p\t?np#T#u/I*"HA=Up1q>T@Q!WMoY/I3OB6[,W`nGE4@rrN,q +lR`>]/mFIUjnAZPrrW2s`T/TU-SSef_W1=ffDbmN[H&nF'-K_fXOck:rq-5@~> +kl1\_W9jcp$m7r\WRL82rp0Rgr:fO0]Sef<"r.IX*@X$FBS<(le)g,pq=Eds[=gmaoEH3>$l'j3 +1-eZFFbuZo`7O5Eq>'XEe%2)k3u6i\&.&jc+tYlN@="0Aa5$"Rqu6*b#6">bg:_/5m04"*%N$?= +2+(8PG`\rDfBPR*+=U9H]]&P]p\t?np#TN.56hoZA=Up1q>T@Q!WMoY56rk`6[,W`nGE4@rrN,q +lTYUu/mFIUjnAZPrrW2salGYk2)&9t_W1=ffDbmN]Au0^(Ec.jXOck:rq-5@~> +kl1\_[d>^R&KjJaWRL82rp0Rgr:fO0]T5nW0,5TG*@X$FBS<(le)g,pq=Eds[>@mCoIh+2,9@pS +1-eZFFbuZo`7O5Eq>'XEe%2)o9fD#b&0r87+tYlN@="0Aa5$"Rqu6*b#6">bg:_Ygm4Sns+<2OS +2+(8PG`\rDfBSh14t0Hf]]&P]p\t?np#W$uRg0ZaA=Up1q>T@Q!WMoYRg<dO6[,W`nGE4@rrN,q +l^J,E/mFIUjnAZPrrW2sh;k%1I5"og_W1=ffDbmNg>n_/.j.9)XOck:rq-5@~> +kl1\^bjMJ:EtU!%L:H(1r9F:grquKUg;0SAKoGZ(7!D->,;),TAU^#PakZ1RqYgBio]Xi<TnI3% +B7thcIXQT[:JW8c0/l3m?>kF\Vn'q$j6cO:rVcWclIs7\Q@3CcI$!Zo'7":b+!rU#7osGSPcDOK +jRDpArpKdkr:fO0^7L=Ho;WCHB1a6m/iQ-p@<.$eWP-X8kis`))C\XB]]&P]p\t?pqXDSS/I*"H +A=Up1q>T@Q!WMoY/I3OB6[,W`nGE4@rrN,qlR`>[.p%_Fj7WBLrrW,i60'U&-r,B$g[Y1?f`)!N +E9&SU&1CA.\)$ZRoDa=~> +kl1\^EpX&9&h?n8\D?`RlMh1ir:]I1_5)9<+7ob*$4n+#/j3!AI[IF_h!4P.rVcWckgd>>KPNY' +(DIJn%hB9i)'p^b2aU8GDh=7P\]NI`mIgATrVQ6Pg;^:]I:kSb&aKW7$k<sn-8%;K=)*2KWkd-F +nFuk[mf*OipZpJGSlR-."q_1O'-APR2a^GNEeKaX^!GU"l9>Lr.9)/:iV!-Crr`8snB00D#8K%* +SB^Bqro*kXrqYbB#VI2dGHBEcqu5FO!WMr]56i;]=,juTp&4jh!rVXej?El!:4fk-nb`=<rrN(G +j?Ek\-r>T+h=LR9s*t~> +kl1\^M!co%+VH;(L:H(1r9F:grquKUg;0S4:HJ,$6mWlm,;),TAU^#PakZ1RqYgBio]Xi<TnI2Q +4u+cC/1W1u-71#f0/l3m?>kF\Vn'q$j6cO:rVcWclIs7\Q@3C:3&0_P'.5(M+!rU#7osGSPcDOK +jRDpArpKdkr:fO0^7Jk"o.L\%,9\-U/iQ-p@<.$eWP-X8kj"WB4t0Hf]]&P]p\t?pqXE"_Rg0Za +A=Up1q>T@Q!WMoYRg<dO6[,W`nGE4@rrN,ql^J,D.p%_Fj7WBLrrW,iUZ@mL1erY0g[Y1?f`)!N +\`B4b&1CA.\)$ZRoDa=~> +kl1\]]C)[)/K-T[R)\:^rTX>rrquNXhTE-lIq`S/Ck@1dI=-E<:F.GD3_3@gJ=!FWfB)Mrr;Q`r +rqlBSgrZmnLj!H:;bT\M77KgB<*X'WJs)n9`6mE(n+HMSrr<#tqtKR>eAAAWLNR329P%R8AUo8Z +It3*&KS11p>$4ot/M8b84$u_GBR,N,YeniIm.L5Rm/JI4r:]L3`N"r>DJFHKJ:;ooCemh`-nR27 +6;:QoFbQ*X[`-_Ql1+?0/I*1C</J9Hp&+O`"9%uXFjhoI'f0Bjc0P3)iVrrXq<0C9+s00rXOlt= +rn[STrqYk3#9#'lMn\3DrVc`trUta%/I*RfEM_%Jq>T(I!WM0@/I3I50O0aWjS&QDs*t~> +kl1\]473:Y#oYd7R)\:^rTX>jrquNXhTE-lIq_;*,S^q(&.]9g)'p^c3_3@gJ=!FWfB)Mrr;Q`r +rqlBSgrZmnLj!H:;bT\M77KgB<*X'WJs)n9`6mE(n+HMSrr<#tqtKR>eAAAWLNR329J._=*"r5_ +*>0&%(D[c2+sA3`/ho4F6VU`tH&J5t_U@E0p%nXRs!RgDp?^PQWfD-m1EI8D&J,Hc(`=MG/M]=Q +9iu"MKpAOD`RE`/nabs0#9YHpM7hg?r:^-mrV,N*dm"'P1M!$#lhUP=rrN,pkW]>*+%(7RfC8\: +h>[NTq<L6M+=^BL^>eharVlrtp5.ip#;&5]V9nQ(rn7;ProW9+#V6ZD>`lnapAOU_J,~> +kl1\]>OF-M&fN`@R)\:^rTX?#rquNXhTE-lIq_V@2D?a7.k3"q-7()p3_3@gJ=!FWfB)Mrr;Q`r +rqlBSgrZmnLj!H:;bT\M77KgB<*X'WJs)n9`6mE(n+HMSrr<#tqtKR>eAAAWLNR329KY3g/hS_, +/M8\21,:R=0J4q/&hYmr4$u_GBR,N,YeniIm.L5Rm/I[sr:]L3`N"r>;aE8p/hAM&./kP+-nR27 +6;:QoFbQ*X[`-_Ql1+?0Rg2,+</J9Hp&+O`"9%uXZI>9J'f0Bjc0P3)iVrrXq<4:RCEGofXOlt= +rn[STrqYlL#<s\<Mn\3DrVc`trV!nbRg2qZEM_%Jq>T(I!WMTLRg<aC0O0aWjS&QDs*t~> +l2Le`qsLHjQOb?4H)oH^q>TUX,6%N8n`JE@YagPqCL:+<8k)6<7ncieC3kf0ZGb;Rme-GTr;Rr> +r:f^BfZC\(SWS_YI!L!`I=d<=S>`j4ce@IHo(W"Yrqud6rr)Zbm,HR9\>bsWIroF7>?4Ws91hfL +9MGFY'MVD'=C#HRG(G[EXLu^-ip?:4r;Q!]-N<r;n);X*V2p"??WBim7R]d;9N##%C3>&dS#Nm9 +dG3jNoD&1Vl7E5Z.9)/:iV!-Brri>uo#j2G/I*"HA=Up1q>T@Q!WMoY/I3OB6[,W`nGE4@rrN,p +lR`>[.TD;=iV!0JrrW2q_;m0Q.PkFq_W1=eg&D*PTB%R0'cK,JT?QTqrq$/?~> +l2Le`qs=Rn%jX\kX46P4rojA+rquQ]k17JTS;DN,?WKrp7R]a99N,53HAeB#`7<o9p%nXbruqC> +p[I:sagnFBObeO8H$O^aJr,Y\W3sLgg>qVkp\Oger;RZ6rV?*Piml)ZWLJlsFD>8h<`2[c8kM`M +9`@[!9i+ek?"@bpJW?;&]ZSjcm.:&Nrp'M1rquNZiR#35O*kbN<DH+T77KgA;H[FCFb#I@WOKjo +gu[qpq"jaM56i;[</J9Hp&+O`"TJ;hbtZ\P#8K%*SB^Bqro*kXrqYbB#VI2dGHBEcqu5FO!WMo\ +56i;\</SBJp&4jh!ri#7j?El11LH?_j7W?'rrN+sj?Enh)EMW*bj,!&oDa=~> +l2Le`qsH*D.M!dqH)oH^q>TUX,6%N8n`JE@YagPqCL:+<8k)6<7ncieC3kf0ZGb;Rme-GTr;Rr> +r:f^BfZC\(SWS_YI!L!`I=d<=S>`j4ce@IHo(W"Yrqud6rr)Zbm,HR9\>bsWIroF7>?4Ws91hfL +9MGFY'MVD'=C#HRG(G[EXLu^-ip?:4r;Q!]-N<r;n);X*V2p"??WBim7R]d;9N##%C3>&dS#Nm9 +dG3jNoD&1VlC/#B.9)/:iV!-Brri>uo%9SaRg0ZaA=Up1q>T@Q!WMoYRg<dO6[,W`nGE4@rrN,p +l^J,C.TD;=iV!0JrrW2qg#SV-N&+h)_W1=eg&D*PcfCQ$3Z:%oT?QTqrq$/?~> +l2Le`hsRKM:_kciNkOBBr8mr#rVH3Tj4DDaXIti;KRS8nH$k1!P+SkhbLknCo_JFaq>VK6qY'C@ +hUTfd]!S]EY-5+=]YhqAgZ.VipA+XbrqQL.rquTamcNBUahG-^TU:k"L4Xl$H@#R9'RG.VKSb_R +R\Hjj^rt<ekjS3?r;PjY,lRQ1lJ9b"YG%5>K7/&kH@:@"NgHE=[(j`4h<""opA+XbrV>_1#9#$j +M7hg?r:U'lrV5]8e1Cn?1M!$#lhUP=rrN,pkUd&a+%(7RfC8\:h>[NTq<KU;)C\XC^#AY^rVlru +qs`Vt#:N>tZJ"aDrn@AQr']Tt#RqtJH*,ZdqYp*dJ,~> +l2Le`W9siq#8T$uNkOBBr8mr#rVH3Tj4DDaXIti;KRS8nH$k1!P+SkhbLknCo_JFaq>VK6qY'C@ +hUTfd]!S]EY-5+=]YhqAgZ.VipA+XbrqQL.rquTamcNBUahG-^TU:k"L4Xl$H@#R9'RG.VKSb_R +R\Hjj^rt<ekjS3?r;PjY,lRQ1lJ9b"YG%5>K7/&kH@:@"NgHE=[(j`4h<""opA+XbrV>_C#9YHp +M7hg?r:U'lrV5]@e3=0Q1M!$#lhUP=rrN,pkW]>*+%(7RfC8\:h>[NTq<L6M+=U9I^#AY^rVlru +qs`W1#:rW#ZJ"aDrn@AQr)D`A#RqtJH*,ZdqYp*dJ,~> +l2Le`[dGdS)&=r2NkOBBr8mr#rVH3Tj4DDaXIti;KRS8nH$k1!P+SkhbLknCo_JFaq>VK6qY'C@ +hUTfd]!S]EY-5+=]YhqAgZ.VipA+XbrqQL.rquTamcNBUahG-^TU:k"L4Xl$H@#R9'RG.VKSb_R +R\Hjj^rt<ekjS3?r;PjY,lRQ1lJ9b"YG%5>K7/&kH@:@"NgHE=[(j`4h<""opA+XbrV>`J#<jS9 +M7hg?r:U'lrV5]ie=-[X1M!$#lhUP=rrN,pkaMin+%(7RfC8\:h>[NTq<OLT4t0Hg^#AY^rVlru +qs`X8#=)%7ZJ"aDrn@AQr2&JD#RqtJH*,ZdqYp*dJ,~> +l2Le_bjVP<QOY0*EMLeCq#0:R*<,m3p$_)$f$;7K\?iBAY->:F_p$]ikj\9Ar;QEi)?0U2p[dh; +jl"qJf\"m2h;RJ[mdg)Iqu-Ncs!dsFqY0ULki1@IccO)=]!eoJY-+n0Y-5(9\%KMqb0\_pj6?%) +q"jpfj8UA'r:ojJiRlGp]sb5MY-5+<]"lA3e_K0Jmdp/Jr;HWps8MiZ/I*1C</J9Hp&+L_"TJ>k +i]bmE#8K%*SB^Bqro*kXrqYb0#U1?XGHBEcqu5FO!WMo\/I*1C</SBJp&+af!rV\)j=LTc5&?k7 +kkG&1rrN,Dj=LW[&hI(@]AN5Xo)F4~> +l2Le_Epa,;%O"/YUWr&urT*turquTbn)rTZcGdN-Z`gO7YdD$[bgt_9nFcYUrq?@0rr)]foBtl) +i8!&=f\,!7iT9=lo(MnVrVlEg.K98Ap[dh:inN#0ahtj([^**>Y-"k0YHY@B]YMM/d+7"4l0n9> +qY^?Qs!.O@q"!_/fZqIL[^**>YHbLH^rOaNgu@PcoCi"XrVlisrqYhD#9YHpM7hg?r:U'mrquEJ +:=VQ6'f0Bjc0P3)iVrrXq<1$K/g!H)XOlt=rn[STrqYkE#9YHpMS8!Ar;?Qrr:G-m56j,2CnJo7 +p\ikH!WLL-56reQ/67Y?ht-d:s*t~> +l2Le_M!lu'.LmUgEMLeCq#0:R*<,m3p$_)$f$;7K\?iBAY->:F_p$]ikj\9Ar;QEi)?0U2p[dh; +jl"qJf\"m2h;RJ[mdg)Iqu-Ncs!dsFqY0ULki1@IccO)=]!eoJY-+n0Y-5(9\%KMqb0\_pj6?%) +q"jpfj8UA'r:ojJiRlGp]sb5MY-5+<]"lA3e_K0Jmdp/Jr;HWps8MiZRg2,+</J9Hp&+L_"TJ>k +ih4hk#8K%*SB^Bqro*kXrqYcI#\tMLGHBEcqu5FO!WMo\Rg2,+</SBJp&+af!rV\rjI6C(5&?k7 +kkG&1rrN,\jI6Eh&hI(@]AN5Xo)F4~> +l2Le^]C2a+4r,eQLpu./qu5UT)#jL1p[dk>k2P7Pg">!3gu.;Zn+?DPrVl?e#QFYtq=aIPo)A.b +o(2PKq"jperpB^qrquWfp%%S<kiLg^h:pW[fFHWjhVmMWl0Rm0p%\C]rnm_prr)`ho^M2/iSE8A +f\,!7i8j+fn+-/HqY^<kr;Qfsq<BO:)C\XB]]&P]o`#$mq<kQ=/I*"HA=Up1q>T@Q!WMoY/I3OB +6[,W`nGE4@rrN,plR`>[.9)/:iV!-HrrW/oWoGZ9/m+"Ah=:CAh#@ER>3%:8)$W'4R`O[drUTu=~> +l2Le^47<@[#8SsoLpu./qu5UT)#jL1p[dk>k2P7Pg">!3gu.;Zn+?DPrVl?e#QFYtq=aIPo)A.b +o(2PKq"jperpB^qrquWfp%%S<kiLg^h:pW[fFHWjhVmMWl0Rm0p%\C]rnm_prr)`ho^M2/iSE8A +f\,!7i8j+fn+-/HqY^<kr;Qfsq<C0L+=U9H]]&P]o`#$mq<k]A56hoZA=Up1q>T@Q!WMoY56rk` +6[,W`nGE4@rrN,plTYUs.9)/:iV!-HrrW/oYi@qQ10BFEh=:CAh#@ERB]MA`+W37OR`O[drUTu=~> +l2Le^>OO3O'c&H(Lpu./qu5UT)#jL1p[dk>k2P7Pg">!3gu.;Zn+?DPrVl?e#QFYtq=aIPo)A.b +o(2PKq"jperpB^qrquWfp%%S<kiLg^h:pW[fFHWjhVmMWl0Rm0p%\C]rnm_prr)`ho^M2/iSE8A +f\,!7i8j+fn+-/HqY^<kr;Qfsq<FFS4t0Hf]]&P]o`#$mq<lDURg0ZaA=Up1q>T@Q!WMoYRg<dO +6[,W`nGE4@rrN,pl^J,C.9)/:iV!-HrrW/ocf:K"7TbPYh=:CAh#@ERYiM8Z8f9U#R`O[drUTu=~> +lMgnaqsUNkKao:nDkP89pANkJ#QFYuq=jRSo)A.ao(2PKq>:*hm/R+bs8Dfls8Duskl:\^$2sf! +q=s^Xo^hYMnc/.eo_%qPq>1!drVlfMrs/Q$qt^!ZoCDnN$M*f\pA"I\r;HWoq>UKpq<BO:)C\XB +]]&P]oD\pjp#T$$/I*"HA=Up1q>T@Q!WMoY/I3OB6[,W`nGE4@rrN,plR`>[.9)/:iV!-Hrr`8s +mm,qc#:i2_Us8/urS@JSrm'OU#RqtIGH96]qYp'cJ,~> +lMgnaqsFXo%O+5XTZZHkrSIPZrquZhp\"1Lrp^6aoC_kRqu$H[s8W)urVHHlrVul\s8W')rVZQg +q"OLSoCDbJs7-Nhp%J.UqYU3hrr1XO#QFYuq=jRRo)A.do(2MIq"agbrVlflrrN,pl9>Lr.9)/: +iV!-?rr`2lj^-MK%*SB^Bqro*kXrqYbB#VI2dGHBEcqu5FO!WMo\56i;[</J9Hp&+af"9//c +:ujhG3CIn`c0>!$h>[NTdc3Ot%3e8cX46S6rpp)>~> +lMgnaqsQ0E-4V4dDkP89pANkJ#QFYuq=jRSo)A.ao(2PKq>:*hm/R+bs8Dfls8Duskl:\^$2sf! +q=s^Xo^hYMnc/.eo_%qPq>1!drVlfMrs/Q$qt^!ZoCDnN$M*f\pA"I\r;HWoq>UKpq<FFS4t0Hf +]]&P]oD\pjp#W%$Rg0ZaA=Up1q>T@Q!WMoYRg<dO6[,W`nGE4@rrN,pl^J,C.9)/:iV!-Hrr`8s +n"Sm4#Co3_Us8/urS@JSroW71#RqtIGH96]qYp'cJ,~> +lMgnahs[QO/Jp6GM7;7/qYo7L!ri/sqY^Bls8K_3s8N&so_e^es8LIH!ri/sqY^Bls8MZj!WMo[ +/I*1C</J9Hp&+F]"9//daOVpJ'f0Bjc0P3)iVrrXq<0C9+s00rXOlt=rn[STrqYk3#9#$jM7hg? +r;6Kqr:H-3/I*t6Mn.X4qYo@O!W>FI/I3=0/6.P<hXg[8s*t~> +lMgnaW:'os#oGF#M7;7/qYo7L!ri/sqY^Bls8K_3s8N&so_e^es8LIH!ri/sqY^Bls8MZj!WMo[ +56i;[</J9Hp&+F]"9//db18c^'f0Bjc0P3)iVrrXq<1$K/g!H)XOlt=rn[STrqYkE#9YHpM7hg? +r;6Kqr:HE;56j)NMn.X4qYo@O!W?!Y56rSL/6.P<hXg[8s*t~> +lMgna[dPjU&f<B,M7;7/qYo7L!ri/sqY^Bls8K_3s8N&so_e^es8LIH!ri/sqY^Bls8MZj!WMo[ +Rg2,+</J9Hp&+F]"9//deCL)o'f0Bjc0P3)iVrrXq<4:RCEGofXOlt=rn[STrqYlL#<jS9M7hg? +r;6Kqr:IhcRg2qtMn.X4qYo@O!WAkURg<.1/6.P<hXg[8s*t~> +lMgn``:0c5@1ahWFJR.Ep\f[CW;cntq<BO:)C\XB]]&P]o)AgjpZQbO/I*"HA=Up1q>T@Q!WMoY +/I3OB6[,W`nGE4@rrN,plR`>[.9)/:iV!-GrrW/oeDi+c/4"9Lb3&Bphu<`VTAqL/&fWlFSB9sg +rUKo<~> +lMgn`<pp4u&LL%jUs/&srIP!IrrN,pl9>Lr.9)/:iV!->rr`5ok^V2K#8K%*SB^Bqro*kXrqYbB +#VI2dGHBEcqu5FO!WMo\56i;[</J9Hp&+^e!r_oFj$*c26ZJgBk4SZ0rrN+sj$*eb)`hZ&aliEs +nc++~> +lMgn`Ept^g*>'VhFJR.Ep\f[CW;cntq<FFS4t0Hf]]&P]o)AgjpZSp7Rg0ZaA=Up1q>T@Q!WMoY +Rg<dO6[,W`nGE4@rrN,pl^J,C.9)/:iV!-GrrW/oi8^:3ND=Jeb3&Bphu<`Vcf:K#.N:E^SB9sg +rUKo<~> +lMgk^n>Zh^%37H<OhKWAqu20HW;cntq<BO:)C\XB]]&P]o)Agkqsqq^/I*"HA=Up1q>T@Q!WMoY +/I3OB6[,W`nGE4@rrN,plR`>[.9)/:iV!-Grr`8sn7L]4#;0)4Ze+U>rSdbWroE)k#p^$-973nn +meZqQs*t~> +lMgk^mfj(-*B@Sk^#&;Vrdk*JrrN,pl9>Lr.9)/:iV!->rr`8to$,cN#8K%*SB^Bqro*kXrqYbB +#VI2dGHBEcqu5FO!WMo\56i;[</J9Hp&+^e"9//dEoT@h3*1j@fBrA3iVrrXk2SZ41(P[(I'2&g +qYp$bJ,~> +lMgk^n1P+u%37H<OhKWAqu20HW;cntq<FFS4t0Hf]]&P]o)AgkqsrCkRg0ZaA=Up1q>T@Q!WMoY +Rg<dO6[,W`nGE4@rrN,pl^J,C.9)/:iV!-Grr`8sn?CrB#A[CqZe+U>rSdbWrp\s;$$d%-973nn +meZqQs*t~> +li."bkjYSY/Jg$<J?@8cq#,dDVuHesq<BO:)C\XB]]&P]nc&^iq!3dh/I*"HA=Up1q>T@Q!WMoY +/I3OB6[,W`nGE4@rrN,plR`>[.9)/:iV!-FrrW,k]](LJ3GFhrhspRBir9&W7,oj))&G)8OMKiI +r:'`:~> +li."b`:*s;#o>3mJ?@8cq#,dDVuHesq<C0L+=U9H]]&P]nc&^iq!4'p56hoZA=Up1q>T@Q!WMoY +56rk`6[,W`nGE4@rrN,plTYUs.9)/:iV!-FrrW,k^u7K^BpZZnnbW7ErrN$sj$*em(GfBZ^u=q` +nGe"~> +li."bc1!@m&f30!J?@8cq#,dDVuHesq<FFS4t0Hf]]&P]nc&^iq!5NDRg0ZaA=Up1q>T@Q!WMoY +Rg<dO6[,W`nGE4@rrN,pl^J,C.9)/:iV!-FrrW,keDcr&?>5bBhspRBir9&WV;n$N8f'9iOMKiI +r:'`:~> +li."abjh\?:_G*EE1Y)0o_e]>s/5ktrqYh2#9#$jMS8!Ar:0dirquBI51qLm'f0Bjc0P3)iVrrX +q<0C9+s00rXOlt=rn[STrqYk3#9#$jM7hg?r;-EqrqYqZi[kC,H)8^Go_\XKrrN(<j"1Qc%O"2[ +V9eH%rUBi;~> +li."aEq'>@#8/@QE1Y)0o_e]>s/5ktrqYhD#9YHpMS8!Ar:0dirquBI:>%i:'f0Bjc0P3)iVrrX +q<1$K/g!H)XOlt=rn[STrqYkE#9YHpM7hg?r;-EqrqYqhi]dZ@H)8^Go_\XKrrN(Hj$*i0%O"2[ +V9eH%rUBi;~> +li."aM"*,*)%n8cE1Y)0o_e]>s/5ktrqYiK#<jS9MS8!Ar:0dirquBIT\5e>'f0Bjc0P3)iVrrX +q<4:RCEGofXOlt=rn[STrqYlL#<jS9M7hg?r;-EqrqYr[igU0RH)8^Go_\XKrrN)0j-p@4%O"2[ +V9eH%rUBi;~> +li-t_nYuq;%j3uEOLj38q>PsFVZ-\rq<BO:)C\XB]]&P]nG`Uiq<ad,/I*"HA=Up1q>T@Q!WMoY +/I3OB6[,W`nGE4@rrN,plR`>[.9)/:iV!-ErrW,i\`,1H/l[P.dHL9$roX4]rGggK#oFC0=,=BA +nb`=Ts*t~> +li-t_n-010+?X.q]%c]Lrdk*HrrN,pl9>Lr.9)/:iV!-<rr`8rmA/E"#8K%*SB^Bqro*kXrqYbB +#VI2dGHBEcqu5FO!WMo\56i;[</J9Hp&+Xc!rVZ'i]d]4<e[a)kk4lQk5PJ\IH!Ht+;HM1Lq)71 +qu6*bJ,~> +li-t_nLk4m%j3uEOLj38q>PsFVZ-\rq<FFS4t0Hf]]&P]nG`Uiq<c&PRg0ZaA=Up1q>T@Q!WMoY +Rg<dO6[,W`nGE4@rrN,pl^J,C.9)/:iV!-ErrW,idGgW$O'm[FdHL9$roX4]rOV!X#tYja=,=BA +nb`=Ts*t~> +m/I+cfCGpKQOOol=bO!,lM(7.s/#_rrqYh2#9#$jM7hg?r9sXfr:T/Ig+<OE1M!$#lhUP=rrN,p +kUd&a+%(7RfC8\:h>[NTq<KU;)C\XB]]&P]q>UQqq!(`9/I4"8Nj[C$p&"aPrrN(<i[kHb%3RoQ +T???jrU9c:~> +m/I+cNq!;[%3.6.KWihhp\f[CV>gSqq<C0L+=U9H]]&P]n,ELfp#TK556hoZA=Up1q>T@Q!WMoY +56rk`6[,W`nGE4@rrN,plTYUs.9)/:iV!-Err`5pl<iL7#@EM!eEQZ'roj@_rI*Zi#riA:5]*.9 +kP"lCs*t~> +m/I+cT^j`C.Ld@T=bO!,lM(7.s/#_rrqYiK#<jS9M7hg?r9sXfr:T0Jg7&<^1M!$#lhUP=rrN,p +kaMin+%(7RfC8\:h>[NTq<OLT4t0Hf]]&P]q>UQqq!+d:Rg>*iNj[C$p&"aPrrN)0igU73%3RoQ +T???jrU9c:~> +m/I+b]CW$1QQ6qt;1#1_jn/HLJcDSH!WMo[/I*1C</J9Hp&+:Y"9//c[+[):'f0Bjc0P3)iVrrX +q<0C9+s00rXOlt=rn[STrqYk3#9#$jM7hg?r;$?prql8qi@P<h@Zn4Mkk+`Nli.%cr,CUH#oFC0 +<JIp8nG<.Qs*t~> +m/I+b4Rr[`$Q1WqH`"sIo_\W=s/#_rrqYhD#9YHpM7hg?r9sXfrqc)ng-5fW1M!$#lhUP=rrN,p +kW]>*+%(7RfC8\:h>[NTq<L6M+=U9H]]&P]q>UQrqsqAW56k_^\('X6qYog\!ri+FiBIVk'eWL@ +[G(-HrpTl;~> +m/I+b>OsKU.M*IO;1#1_jn/HLJcDSH!WMo[Rg2,+</J9Hp&+:Y"9//cbhANk'f0Bjc0P3)iVrrX +q<4:RCEGofXOlt=rn[STrqYlL#<jS9M7hg?r;$?prql94iL:+8DN_KYkk+`Nli.%cr4:jV#tYja +<JIp8nG<.Qs*t~> +mJd4dl1:n_QQ-ho9QQfDi:6[CJcDPG!WMo[/I<=E;i/0Fo_\XenG`Uhp?-PP/I*"HA=Up1q>TFS +s8E&tpuj::+s00qXOck:rVlfns6fm_s8W'!rV5\1#9#$jM7hg?r:p9orV5Z#i%548P-r]unbE%] +n,ELhrSq&>/I<[4+[L";al`<qmf.e~> +mJd4d`UX3?$5b?gF.U>.nbW69s.oYqrqYhD#p:ZqM7hd=qu6Tarr`5nkC2/M#8K%*SB^Bqro=%Y +rW2umkW]D,+%(4Qf'iJ6rr2fpmf*(_s8E&tq!1-L+=U9H]]&P]q#:Hpq!*@e56tMW[F+(*q#(-[ +rr`9!j_*O:#r2u66#N:9k4\cAs*t~> +mJd4dcLW[s.M!@J9QQfDi:6[CJcDPG!WMo[RgD8-;i/0Fo_\XenG`Uhp?/^8Rg0ZaA=Up1q>TFS +s8E&tpun1SCEGoeXOck:rVlfns6fm_s8W'!rV5]J#<jS9M7hg?r:p9orV5Z`i0t"!P-r]unbE%] +n,ELhrU@#LRgF?M+[L";al`<qmf.e~> +mJd4c]C`*2QQ6no8oL*2g[=n9JcDSH"9/8sp?F4?)C\R>\_ZfOqtp<hrVc`ppAY6oqshh`/I*"H +A=Up1q>Ta\s8N&sr;?Tl!W)KQ/IE[D6?T<Wm.^ARqu$BYqtp<kqZ6QdlR`>[.9)/:iV!-Drr`8t +o#ooB#sj0Gakl@Uq>C6`rri?"qjg+4/I<"*0j'7?g@+n;mf.e~> +mJd4c4S&aa$Q(EeDj\8nmeQg4s/#_trr)cgl9>e%.8kr3h=:=<qu$BjrVlfirr`8tn]]`P#8K%* +SB^Bqrp9[brr;rpr;ZWpqXs&:$8*DeFfNpWp\Odar;>pYqu$Kk!W)KT56i;[</J9Hp&+Ub"9/2g +c/1_l9n][khWsh0r;Q<f"TJAsV,Q;:#o+72=GXE>n,!%Os*t~> +mJd4c>kBZW.M*FJ8oL*2g[=n9JcDSH"9/8sp?J+X4t0Bb\_ZfOqtp<hrVc`ppAY6oqsi7lRg0Za +A=Up1q>Ta\s8N&sr;?Tl!W)KQRgNpQ6?T<Wm.^ARqu$BYqtp<kqZ6Qdl^J,C.9)/:iV!-Drr`8t +o%;ih$&XeHakl@Uq>C6`rri?"qp)%rRgCM[0j'7?g@+n;mf.e~> +mf*=el1Ct`QQ@"r8oBs,f^/A2JcDYJ#6+T!qY0XLl7EVd-Vo;ueE62gnaZ2BpA"L^rVlTl"9&#[ +LtjQe'f0Bjc0P3)mf*Okr;-6_o^hYQnc/(Zn*B0h#9k0RE2(M7m/HMQn`oWAnc/(Zn*B9k#9#$j +M7hg?r:g3nrV5]7hCT(?UV>4:mI^2Nr;HEi"TA8pb$!UR#p9d)7WY<IkP"lAs*t~> +mf*=e`Ua9@$lLWhDO.oem.^I0s/5l$rr)ckp[mk<58#%c:P#e#k3ha/nac>Gq"jperqQKqrV5Z> +gcl#Y1M!$#lhUPJrs/Q$qYBjWoCDnNs6p'Xlf^P</fd2rU<;K^rp]mVlL=`As6p'Xlg$b?+=U9H +]]&P]p\t?oq!4$u571ts^=2*/o_A=]rV6?prVZN;BAYo[/.a'rF/$k@pAOCYJ,~> +mf*=ecL`at.M3OM8oBs,f^/A2JcDYJ#6+T!qY0XLlC/DM-Vo;ueE62gnaZ2BpA"L^rVlTl"9&#[ +\_NYZ'f0Bjc0P3)mf*Okr;-6_o^hYQnc/(Zn*B2,#AY>FE2(M7m/HMQn`oWAnc/(Zn*B;/#<jS9 +M7hg?r:g3nrV5]hhO=k4UV>4:mI^2Nr;HEi"TA8pii_1.$#'qr7WY<IkP"lAs*t~> +mf*=e]Ci03F:K6C9Q-6.fB`/.JcDYJ#QFV[Z#+8jB'Lr]-7UoB;dEmEArND)hrEthoD&4]q>UTs +qt&c1h(8jH1M!$#lhUPLrsA]%pp.&=C2%<nr+5t@AEYTM.46i7:0M(;gh$RuAEtfP)C\XB]]&P] +p\tBqqt&cAh(8t<T>T1;lL=H?q>1$d"T%odYZTa6$7HE(2d_TWh!t7?mJh\~> +mf*=e4S/gb%N@&pDjIudlh:7-s/5l%rqkccH$=COl9>q=2F:8JBlA!3PbuX]j6?"'q"t$crri>u +oANI#56hoZA=Up1q>Tm`$3'hs\?pL(F`VX%EWL0!kW];41HeB7Ao2PCEWL0!lTYUs.9)/:iV!-C +rri>uoANs1571tq_pmZ1nFZJNqY^3nqY9`lB&5`Z3"[)g?]MbRnbW7Ps*t~> +mf*=e>kK`X+q>PF9Q-6.fB`/.JcDYJ#QFVgf!_rkYNhSjHZO[sS>WHkYJ%m)hrEthoD&4]q>UTs +qt&d=h4"Wa1M!$#lhUPLrsA]%pt!p%['Hs@ql^"%kaMg8E-dA.UoUZQY5k]jRg2,+</J9Hp&+Ra +"TJ;iiM>;!$C@g2eD]]^o_81Xr;-Wnq"<1>hO=k0)]L_CNk=*:qYom^J,~> +mf*:bor8F0&K`f*F-sPilLt/TJcD_L"9/7k7+a't9Rk47hs'_,r;QQm"9&&_S_Yk&'f0Bjc0P3) +o)AgkrL[5W/I*1C</J9Hp&+O`"9&&__qQaL3G+;`fAG]TmI1&D!lUF@gF`F>#:iStWmL&*rTsQ7~> +mf*:bo`bg0&K`f*F-sPilLt/TJcD_L"9/7s;qO;@>)18Mhs'_,r;QQm"9&&_UYS->'f0Bjc0P3) +o)AgkrMO:m56i;[</J9Hp&+O`"9&&_`S3T`8T9p-fAG]TmI1&D!m%!XgHPu_'Iut,WmL&*rTsQ7~> +mf*:boe-^p&K`f*F-sPilLt/TJcD_L"9/8FV:_7DU9Meihs'_,r;QQm"9&&__VL[d'f0Bjc0P3) +o)AgkrQh[3Rg2,+</J9Hp&+O`"9&&_d+b#rR\R1/fAG]TmI1&D!o1l)gRAL0'Iut,WmL&*rTsQ7~> +mf*:apSn[h5ntY+=*^@Nf^&8/rdk*KrrW2]>1>,03fgr!hX't5rqcWsr:T,HhCSsI1M!$#lhUPO +rrW2]>*:HB)C\XB]]&P]p&>-lp#^qZ/I#He@Us%]5hIXq+:o__C72uuoDAORs*t~> +mf*:ap'(p4'dPhAH(D\%lh:8UJcD_L!rh@re3=42PJ#2tm.U>UqYpZqp#KE856hoZA=Up1q>U!c +!rh@rP!90o.9)/:iV!-Arr`2lk)@nV#&%diE,fkofKT]o&0aDTRD\"Tqu5s^J,~> +mf*:apFct*(_n;W=*^@Nf^&8/rdk*KrrW2iYg]'HVnC=3m.U>UqYpZqp#Mt+Rg0ZaA=Up1q>U!c +!rh_oP+)\?.9)/:iV!-Arr`2lk-`g1#,S<"Xfek%fUE4^&0aDTRD\"Tqu5s^J,~> +n,EFfqY7'"F<MSS6XYJ?_V=GNr;M9IW;cn\7+!RkD5P)"l1OuRqu6ctqX:fJ/I*"HA=Up1q>U!c +!Tle4/I*1C</J9Hp&+L_"TJ8fh-I!3$7HH)2I)*HfBrD4li2J~> +n,EFfqY17(#7hb)6XYJ?_V=GNr;M9IW;cn^<7*o8F/H_(l1OuRqu6ctqX:rN56hoZA=Up1q>U!c +!U*LF56i;[</J9Hp&+L_"TJ8fh.`iQ$9/Y;2I)*HfBrD4li2J~> +n,EFfqY2]Q+qknH6XYJ?_V=GNr;M9IW;cnhV9tb;P,?"Gl1OuRqu6ctqX;YbRg0ZaA=Up1q>U!c +!V3(LRg2,+</J9Hp&+L_"TJ8fh5@6A$AofB2I)*HfBrD4li2J~> +n,EFfqYI3%QnT=%2G\.JXN9;ep\b#As/>qurEIT"#&fj<e`uo-qYpZrp?-PT/I*"HA=Up1q>U$d +!WH;b/I*1C</J9Hp&+I^"TA,]_E=hM#n@_&:j]+bkP"i=s*t~> +n,EFfqY:=)$l:0I:MbukaPZF[r;M9IW;cnsC!T!JEL42clM(8Rrr`5nkC2;Q#8K%*SB^Bqrq-3k +rb7HY#9YHpM7hg?r:L!lrV5]s9WC;`&/HioH`,-OpAF4UJ,~> +n,EFfqYDiT.hrjG2G\.JXN9;ep\b#As/>qurNOV;#()]He`uo-qYpZrp?/^<Rg0ZaA=Up1q>U$d +!WK<bRg2,+</J9Hp&+I^"TA,]cCV&*#oXR2:j]+bkP"i=s*t~> +n,EFfq>@6&RTC:K0L];pRC:H%nbN-7s/5ktrh.Og#<Qde]A)fNrql]trql6.h^o'J1M!$#lhUPP +rrCB+/I*1C</J9Hp&+I^"oeGmjgmOT/IE1*-Ur$D_r1+_rp'N6~> +n,EFfq>:F,#n@ap0L];pRC:H%nbN-7s/5ktri"+,#=WKo]A)fNrql]trql60h`h>\1M!$#lhUPP +rrCK.56i;[</J9Hp&+I^"oeGmjh+6f57/;B-Ur$D_r1+_rp'N6~> +n,EFfq>;lU/KkoR0L];pRC:H%nbN-7s/5ktrm8r[#C(*M]A)fNrql]trql6:hjXic1M!$#lhUPP +rrD5CRg2,+</J9Hp&+I^"oeGmji3glRgM.h-Ur$D_r1+_rp'N6~> +n,EFfqYmK*S8g).0L8c[NN'hJkk"ZLJcDVI!W>F2/I"gfTZQ?irVHNrrV5Z6i%50K1M!$#lhUPQ +rrN+=O"CST.9)/:iV!-?rri>tn_]G1/IEI0,!TY$]%QNIrTX?4~> +n,EFfqYg[0*@NHe0L8c[NN'hJkk"ZLJcDVI!W?!B56a`#TZQ?irVHNrrV5Z>i'.G]1M!$#lhUPQ +rrN+IO$<jl.9)/:iV!-?rri>tn_]Y757/_L,!TY$]%QNIrTX?4~> +n,EFfqYi,Y4ZY,B0L8c[NN'hJkk"ZLJcDVI!WAk>Rg)K*TZQ?irVHNrrV5Zgi0srd1M!$#lhUPQ +rrN,1O.-A<.9)/:iV!-?rri>tn_^aVRgN:1,!TY$]%QNIrTX?4~> +n,F(#qQdc5HWN^/=Dinf]$TF(pA=i?s/#_qjNK1\033h9g[Y1?qu6fuqt&c1i@P9L1M!$#lhUPQ +rrN'dO"CST.9)/:iV!->rri;qmb3W'/IEU2+$!Y`ZIA+5r9402~> +n,F(#qB07$HWN^/=Dinf]$TF(pA=i?s/#_qk0-$p1KK7=g[Y1?qu6fuqt&cAiBIP^1M!$#lhUPQ +rrN'tO$<jl.9)/:iV!->rri;qmb3i-57/qP+$!Y`ZIA+5r9402~> +n,F(#qF,XhHWN^/=Dinf]$TF(pA=i?s/#_qnB@@,7okAQg[Y1?qu6fuqt&d=iL:&e1M!$#lhUPQ +rrN(pO.-A<.9)/:iV!->rri;qmb4nKRgNm@+$!Y`ZIA+5r9402~> +n,F%"qs`=LP'CqjMP.E#h!+G+r;M9IV>gSq[EL3-,XQLHd-LN,qYpZrq<aa3/I*"HA=Up1q>U'e +!;hd.#9#$jM7hg?r:0dir:fL,Lp8N>+:fMO=FmKsk4JTNkl6/~> +n,F%"qs`=LP'CqjMP.E#h!+G+r;M9IV>gSq]?EJE.RJ-Nd-LN,qYpZrq<as956hoZA=Up1q>U'e +!;hd@#9YHpM7hg?r:0dir:fL,Nj1eV/.Wd[=FmKsk4JTNkl6/~> +n,F%"qs`=LP'CqjMP.E#h!+G+r;M9IV>gSqg<?#k8O@Emd-LN,qYpZrq<c&XRg0ZaA=Up1q>U'e +!;heG#<jS9M7hg?r:0dir:fL,XKe6&C(D@D=FmKsk4JTNkl6/~> +mf*gqo]43$U7eNtbM).Lp\b#As.fSprG]t4#:;99Q,VnZrV?Hqr:T,Hi[kBM1M!$#lhUPRrrN,- +N\(JS.9)/:iV!-=rrrE"p#j_UZRlP-%NRB+IAP$Eo)&FLs*t~> +mf*gqo]43$U7eNtbM).Lp\b#As.fSprHugR#;S,EQ,VnZrV?Hqr:T,Vi]dY_1M!$#lhUPRrrN,3 +N^!ak.9)/:iV!-=rrrE"p#j_[ZTegK%NRB+IAP$Eo)&FLs*t~> +mf*gqo]43$U7eNtbM).Lp\b#As.fSprOU4B#B)G-Q,VnZrV?Hqr:T-IigU/f1M!$#lhUPRrrN,Q +Ngg8;.9)/:iV!-=rrrE"p#j`%Z^V>;%NRB+IAP$Eo)&FLs*t~> +mf*dqq=!7ib0/8ikj\<CrVhBJUAk8lE6Km=,V)lP]\rG[q>UQrqX:fN/I*"HA=Up1q>U*f!WKHd +/I*1C</J9Hp&+=Z"oeDkjj&Ld/IN[3*Ag`AU;c'\qYoXWJ,~> +mf*dqq=!7ib0/8ikj\<CrVhBJUAk8lI*=e[0Ip.\]\rG[q>UQrqX:rR56hoZA=Up1q>U*f!WKZj +56i;[</J9Hp&+=Z"oeDkjj&^j579"Q*Ag`AU;c'\qYoXWJ,~> +mf*dqq=!7ib0/8ikj\<CrVhBJUAk8l\]gNJD(AVD]\rG[q>UQrqX;YfRg0ZaA=Up1q>U*f!WLc4 +Rg2,+</J9Hp&+=Z"oeDkjj'g4RgWsA*Ag`AU;c'\qYoXWJ,~> +mf*^pr:f^Gk324'p\XpgJcDDC!W6l[/I*LH9nB_-o)/:_"9%rVFQ4qX'f0Bjc0P3)pAY0l[#Q^C +)C\XB]]&P]n,ERjqX`dmK"!<>+:fMM<-k7VhXC:=jo9i~> +mf*^pr:f^Gk324'p\XpgJcDDC!W7;g56ihf9nB_-o)/:_"9%rVIcEWt'f0Bjc0P3)pAY0l\rJu[ ++=U9H]]&P]n,ERjqX`dmLpoSV/.WdY<-k7VhXC:=jo9i~> +mf*^pr:f^Gk324'p\XpgJcDDC!W9IORg3aU9nB_-o)/:_"9%rVZ/_;Y'f0Bjc0P3)pAY0lfT)F+ +4t0Hf]]&P]n,ERjqX`dmVmi-'C(D@B<-k7VhXC:=jo9i~> +mJdLlr;-0]p\Facrdk*@rrN"7bUri="\=$Gg@>(8rr`8tn]KlD#8K%*SB^Bqrq??mrNhM9#9#$j +MS8!Ar9jRhrqc6Ic%7mc/INO0+#[,FTu5aUq#0:RJ,~> +mJdLlr;-0]p\Facrdk*@rrN"CbWc=b,"R*dg@>(8rr`8tn]^#X#8K%*SB^Bqrq??mrOIqQ#9YHp +MS8!Ar9jRhrqc6Ic%nm$578eL+#[,FTu5aUq#0:RJ,~> +mJdLlr;-0]p\Facrdk*@rrN#,baSiR,"R*dg@>(8rr`8tn^c`i#8K%*SB^Bqrq??mrRd."#<jS9 +MS8!Ar9jRhrqc6Ic)6u@RgW@1+#[,FTu5aUq#0:RJ,~> +li.+erVc`pJcD5>!W.Sp/I*@A8:.Sonb`(\"9&#[Lu^,m'f0Bjc0P3)pAY0lZApLA)C\XC^#AY^ +mJdCiqXW^lTJsM8$PjC"3EU^(`89tXrT!p.~> +li.+erVc`pJcD5>!W.r%56iV]8:.Sonb`(\"9&#[OQ8V2'f0Bjc0P3)pAY0l\;icY+=U9I^#AY^ +mJdCiqXW^lU.;j\$QKg(3EU^(`89tXrT!p.~> +li.+erVc`pJcD5>!W0^WRg31B8:.Sonb`(\"9&#[\`B4b'f0Bjc0P3)pAY0lf8c=*4t0Hg^#AY^ +mJdCiqXW^lXI6_j$T\qF3EU^(`89tXrT!p.~> +JcC<$!rr/%bUj&:,>*Ejg@G.8rri>uoAMmp/I*"HA=Up1q>U*f!WD_P/I*1D</SBJp&+1V#6+Ji +jNaJo^F]jC&/HWX?@erlhXC7<ir=N~> +JcC<$!rr/+bWc=R,>*Ejg@G.8rri>uoANI+56hoZA=Up1q>U*f!WD_P56i;\</SBJp&+1V#6+Ji +jNaQ(^HW,e&f)iZ?@erlhXC7<ir=N~> +JcC<$!rr/JbaSi",>*Ejg@G.8rri>uoAQ>'Rg0ZaA=Up1q>U*f!WD_PRg2,,</SBJp&+1V#6+Ji +jNaoo^RGXh*#9nd?@erlhXC7<ir=N~> +JcC<$!rr2SbUj&4-VoE)hXg[=rr`5qm@E>j#8K%*SB^Bqrq??nrV&X>/I*1D<K"TNp&44V#6+Jj +k0^SK_(?'=',rMmAVdA.i:$I>iW"E~> +JcC<$!rr2UbWc=H-VoE)hXg[=rr`5qmA&c-#8K%*SB^Bqrq??nrV'3N56i;\<K"TNp&44V#6+Jj +k0^SS_*8>['cS_oAVdA.i:$I>iW"E~> +JcC<$!rr2_baShY-VoE)hXg[=rr`5qmD@tS#8K%*SB^Bqrq??nrV*+KRg2/-<K"TNp&44V#6+Jj +k0^T'_4(jJ*uce$AVdA.i:$I>iW"E~> +JcC<$"98>m6I%.g.2+:8NPFKGrUp0mr:T,Hjt-fQ1h<-$lhUPRrrW2pCl^.Q'J*=F^uP+dlMh+g +qXj"%]8o.p/Ia-F'I#G3Diq<LipljCi;\<~> +JcC<$"98>m;U.K43>3uHNPFKGrUp0mr:T,Vk!'(c1h<-$lhUPRrrW2pG`P&o(+`OH^uP+dlMh+g +qXj"%]9,e+57KUn'I#G3Diq<LipljCi;\<~> +JcC<$"98>mUX#>7MA%RDNPFKGrUp0mr:T-Ik*lSj1h<-$lhUPRrrW2p[?$d^+=pTR^uP+dlMh+g +qXj"%]:5&(Rgk6;'I#G3Diq<LipljCi;\<~> +JcC<$"98>oQ-Lre)AtMGR`O[drUp0mrqc)jjt-fQ1h<-$lhUPRrrW2r_iHAS'JE^S_r^Ujl2M%g +qt97._PLQpa=RiE'H8Pg>^N!Pe)p5trSRX*~> +JcC<$"98>oS^'G*+W37NR`O[drUp0mrqc)nk!'(c1h<-$lhUPRrrW2ra,`Fi'JE^S_r^Ujl2M%g +qt97._PLj3a?L+c()nbi>^N!Pe)p5trSRX*~> +JcC<$"98>o`QjqY8f9U"R`O[drUp0mrqc*-k*lSj1h<-$lhUPRrrW2rgQ.g/'JE^S_r^Ujl2M%g +qt97._PN<YaI<WS+<)gs>^N!Pe)p5trSRX*~> +JcC<$"TSJsm6K#M#q6E27sCu^mJ6bRrr`5nkB,l=#8K(+S^$Krrq69mqse<]/I3L:2Ir8ukkP,? +rs8W%p[6q^Z%u,t/Ij'B(aV+:C5Jk+g?SA.rnd[*~> +JcC<$"TSJsm82.o#rrPB7sCu^mJ6bRrr`5nkC2SY#8K(+S^$Krrq69mqse`i56rhX2Ir8ukkP,? +rs8W%p[6q^Z&2W+57TIf(aV+:C5Jk+g?SA.rnd[*~> +JcC<$"TSJsm@hmr$&T9>7sCu^mJ6bRrr`5nkHX3>#8K(+S^$Krrq69mqsgnQRg<aG2Ir8ukkP,? +rs8W%p[6q^Z':-hRgsct(aV+:C5Jk+g?SA.rnd[*~> +JcC<$s8N2uo?0;F/I<j<*B.;b]\`8WoD\plqshhl/I*%KAtI<7q>U'e"9%oR5*@K''d,e^V:"Z* +roX4drV?!Ge@q]+8C&ju,o.=C1e;#%RC1;tme?YYh>`!~> +JcC<$s8N2uo?C"X57'=`*B.;b]\`8WoD\plqshnn56hr]AtI<7q>U'e"9%oR:6IgI)'D4bV:"Z* +roX4drV?!Ge@q]-;U7Q<1E%)U1e;#%RC1;tme?YYh>`!~> +JcC<$s8N2uo@KV_RgFrm*B.;b]\`8WoD\plqsi8#Rg0]dAtI<7q>U'e"9%oRTTYcM/Kd?!V:"Z* +roX4drV?!Ge@q]7L!Q5!HS--\1e;#%RC1;tme?YYh>`!~> +JcC<$s8N6#pZ]@^e1D"R'HJr,I&PBUp\j[_"9&#[RcuC0,oAUUT[3!$rq69orqYs!=d1KE(`>#- +KXKP(qu5^W$2sbom,#pmRW_0L/Is-C)'h"->]l.._q=/Cq>K(JJ,~> +JcC<$s8N6#pZ]Fne3=9r(*,/.I&PBUp\j[_"9&#[T]nZH1Di)cT[3!$rq69orqYs#AX#Cc*Z6Y3 +KXKP(qu5^W$2sbom,#pmRWqZX57]Og)'h"->]l.._q=/Cq>K(JJ,~> +JcC<$s8N6#pZ]eke=-el+<<48I&PBUp\j[_"9&#[^Zh3nH5JVUT[3!$rq69orqYs-U6M,R4;fhQ +KXKP(qu5^W$2sbom,#pmRY$1@Rh'j!)'h"->]l.._q=/Cq>K(JJ,~> +JcC<$s8N<&qsr[_CH^<%$n!,9-9+qIS\sCVqu60d"TJ;iia:t&#Tb!MDl1tNqYp-e"oS#RabiTU +/IEjD*\U0+T#]scrT!ncrquQ]k1IYVQ?5eTfI[XV)&jn[7pL.qVS1C:me6PWgAc[~> +JcC<$s8N<&qsr[_F%b.M$oB=N-9+qIS\sCVqu60d"TJ;iibRgD#Ug]WDl1tNqYp-e"oS#Rac9;e +5707h*\U0+T#]scrT!ncrquQ]k1IYVQ?H4nfKTor*?-=_7pL.qVS1C:me6PWgAc[~> +JcC<$s8N<&qsr[_S<MTp%"(kj-9+qIS\sCVqu60d"TJ;iii).3#[8<5Dl1tNqYp-e"oS#RaeFob +RgONu*\U0+T#]scrT!ncrquQ]k1IYVQ@O@GfUEFW0cMGs7pL.qVS1C:me6PWgAc[~> +JcC<$rr3E*q<m"PSpaC"0eP",r@-qYs!\F'-7()p3_Ee.T"j%Jq>Kg_"TJ5bfQld7#T"m^H`u)k +qu66f%0$+mho)=C;F<2l/1UTIW$qZp%4!8H.5="aE0RremeQk@rsSf&p?ptj_QB,Q>!Cao&geP8 ++Y>cL@!7R,]?]9uoD/=`g&HR~> +JcC<$rr3E*q<m"PSpaU.4ZYP\rAEdqs"t99/0u`!3_Ee.T"j%Jq>Kg_"TJ5bfR`?Q#T5$`H`u)k +qu66f%0$+mho)=C=@k\;3&^^mW&4N3%4WnV.5="aE0RremeQk@rsSf&p?ptj_QB,Q?:Wg9&i:aL ++Y>cL@!7R,]?]9uoD/=`g&HR~> +JcC<$rr3H+q<m"PSpb]lHZsUSF5q9N8P19X0KMg6I@e4.meQhNrri>smb"Q*Rg:5e97*kpnGE4W +rseu(nDD0[K6M!VG]e+LUN-f88hhbL5#Q?a]%QNIro*kbrVQ<Vj4(rJQ@<k#h4#%(5T(^s4%s%* +NhsA5hWj_.r;PCLJ,~> +JcC<$rVmE+p[$YQWfVRA>Z4<d779Q-6iTO`77U$M>\SPHWl3ZYp\aIZ#Q4;Zc_"Q/0_-e&.OH2a +4^jDbi:Hm;rt#)'n(u-hQ@E^W;bT\M6q!t@s$R8a7ncfcCOhnbe`ul+hu=2cr;$!PimblLR=oKV +3\]YI'Ib:K*?m$n794,NP,Q%=hWaV+r;P=JJ,~> +JcC<$rVmE+p[$YQWfVRA>Z4<d779Q-6iTO`77U$M>\SPHWl3ZYp\aIZ#Q4;Zc_4uE5k7,H3\hg* +4^jDbi:Hm;rt#)'n(u-hQ@E^W;bT\M6q!t@s$R8a7ncfcCOhnbe`ul+hu=2cr;$!PimblLR=oKZ +6pB]s'KIim+!N6p794,NP,Q%=hWaV+r;P=JJ,~> +JcC<$rVmE+p[$YQWfVRA>Z4<d779Q-6iTO`77U$M>\SPHWl3ZYp\aIZ#Q4;Zc`<.`On+tKN,L0n +4^jDbi:Hm;rt#)'n(u-hQ@E^W;bT\M6q!t@s$R8a7ncfcCOhnbe`ul+hu=2cr;$!PimblLR=oKn +GD>4K'T6fp.3^<%794,NP,Q%=hWaV+r;P=JJ,~> +JcC<$rVmE-r:fX<d(ZWRP)+X9H$FStGQ2msH$k-uP+Jeid,FEer;Q-a%0$.qjNOcdEEYt"3B$jn +r%n=/#rat<@"PB'l1b/Hrso#&nDr*9Z(R;:JUD`fGc5idGRSkFJ;98ZZ,PD\p&"aErt,2-q=O(7 +f#G+mOF:nK68gOc/Jfl_-6OHW.l0:Y<Fg9/S?KcVhWj\+qu,(FJ,~> +JcC<$rVmE-r:fX<d(ZWRP)+X9H$FStGQ2msH$k-uP+Jeid,FEer;Q-a%0$.qjNOcdEEYt"3B$jn +r%n=/#rat<@"PB'l1b/Hrso#&nDr*9Z(R;:JUD`fGc5idGRSkFJ;98ZZ,PD\p&"aErt58.q=O(7 +f#G+mOF:nK83f:!mlqUL0et(#,V(Z586'2DLn(ZbdGF0Zp\Xp>s*t~> +JcC<$rVmE-r:fX<d(ZWRP)+X9H$FStGQ2msH$k-uP+Jeid,FEer;Q-a%0$.qjNOcdEEYt"3B$jn +r%n=/#rat<@"PB'l1b/Hrso#&nDr*9Z(R;:JUD`fGc5idGRSkFJ;98ZZ,PD\p&"aErt58.q=O(7 +f#G+mOF:nKB6/?Mn!b,ODJqrq,V(Z586'2DLn(ZbdGF0Zp\Xp>s*t~> +JcC<$r;R3)rV?'Mi7?,h]<nfFriPIeriHU3YdD$Zbgt_;oD/@am/IImqXW^o\Y5"2Ebf=eAc-*= +AI<$_DL.>Ba5HOcrp]pqrVH0Qj4MVo]<nfFriN3%riHR2YdD!Ybh(nCpA=jCs#9rTq=X1;gWmU= +TTF\EAQ_bp3&E<A/1W5#.4HSi-7C8l/MK%D6;(<dD0h&,WOg4'ip611qu,"DJ,~> +JcC<$r;R3)rV?'Mi7?,h]<nfFriPIeriHU3YdD$Zbgt_;oD/@am/IImqXW^o\Y5"2Ebf=eAc-*= +AI<$_DL.>Ba5HOcrp]pqrVH0Qj4MVo]<nfFriN3%riHR2YdD!Ybh(nCpA=jCs#9rTq=X1;gWmU= +TTF\EAQ_br4utSY3&`cS2)R!:/1rJ'/MK%D6;(<dD0h&,WOg4'ip611qu,"DJ,~> +JcC<$r;R3)rV?'Mi7?,h]<nfFriPIeriHU3YdD$Zbgt_;oD/@am/IImqXW^o\Y5"2Ebf=eAc-*= +AI<$_DL.>Ba5HOcrp]pqrVH0Qj4MVo]<nfFriN3%riHR2YdD!Ybh(nCpA=jCs#9rTq=X1;gWmU= +TTF\EAQ_c'?!(*)G'.nJF)k>S92%T#/MK%D6;(<dD0h&,WOg4'ip611qu,"DJ,~> +JcC<$qYpm$qtTgPlK-sZgAT[hfDX>.g>(WJlL4B?qu5j[$N9hml.aFqZ)FChrgitWrga=eUoh8R +i:$I>mf*Umr;$$TlK-sZgAT[(fDX>.g>(WIl0n<@r;P=J1]I@Lp@7G-fZh7>Vj`WtG].5&>#nNr +8k2<=7S-<O<*<O=Cit5bQD1Ooa4&o.n+?GRrR(Xq~> +JcC<$qYpm$qtTgPlK-sZgAT[hfDX>.g>(WJlL4B?qu5j[$N9hml.aFqZ)FChrgitWrga=eUoh8R +i:$I>mf*Umr;$$TlK-sZgAT[(fDX>.g>(WIl0n<@r;P=J1]I@Lp@7G-fZh7>Vj`WtG].5&>#nNr +8k2<=7S-<O<*<O=Cit5bQD1Ooa4&o.n+?GRrR(Xq~> +JcC<$qYpm$qtTgPlK-sZgAT[hfDX>.g>(WJlL4B?qu5j[$N9hml.aFqZ)FChrgitWrga=eUoh8R +i:$I>mf*Umr;$$TlK-sZgAT[(fDX>.g>(WIl0n<@r;P=J1]I@Lp@7G-fZh7>Vj`WtG].5&>#nNr +8k2<=7S-<O<*<O=Cit5bQD1Ooa4&o.n+?GRrR(Xq~> +JcC<$q#:Tur;-6_o^hYPn`oWBnH\XVo_/+Wr;PjY$3'hrnEJoce^;_BcMYrdc3M\DfAGf^q#0OY +#QF]!q=jRRo)8*YnGVk^o(2MIq"t!ge,M*#rVQB_nET&gd`K84XehVTOGemHIsZHdH@:@!MN=!k +UT:`6`m<;qkO%m8qY^?=s*t~> +JcC<$q#:Tur;-6_o^hYPn`oWBnH\XVo_/+Wr;PjY$3'hrnEJoce^;_BcMYrdc3M\DfAGf^q#0OY +#QF]!q=jRRo)8*YnGVk^o(2MIq"t!ge,M*#rVQB_nET&gd`K84XehVTOGemHIsZHdH@:@!MN=!k +UT:`6`m<;qkO%m8qY^?=s*t~> +JcC<$q#:Tur;-6_o^hYPn`oWBnH\XVo_/+Wr;PjY$3'hrnEJoce^;_BcMYrdc3M\DfAGf^q#0OY +#QF]!q=jRRo)8*YnGVk^o(2MIq"t!ge,M*#rVQB_nET&gd`K84XehVTOGemHIsZHdH@:@!MN=!k +UT:`6`m<;qkO%m8qY^?=s*t~> +JcC<$pAb0ls8DimlMLJVs8Dusj8TA`rVQB_naGlDm/62JlilhHoCr.\kl:\^s8DimWr)\ks8Dus +cMoBnrVQB_o'PZ$h:L*"a25R%\$N<AY-5.=\\5hubL"hpiTKRso_84[rVk(AJ,~> +JcC<$pAb0ls8DimlMLJVs8Dusj8TA`rVQB_naGlDm/62JlilhHoCr.\kl:\^s8DimWr)\ks8Dus +cMoBnrVQB_o'PZ$h:L*"a25R%\$N<AY-5.=\\5hubL"hpiTKRso_84[rVk(AJ,~> +JcC<$pAb0ls8DimlMLJVs8Dusj8TA`rVQB_naGlDm/62JlilhHoCr.\kl:\^s8DimWr)\ks8Dus +cMoBnrVQB_o'PZ$h:L*"a25R%\$N<AY-5.=\\5hubL"hpiTKRso_84[rVk(AJ,~> +JcC<$m/QAMf)GjOrVZQjqY^0eq?-WmrVkXQWrBj7,l[c?qY9aTnF#W+jl54TgY1<4g"Y??ioK:f +mI9]>p\F^brr1(?J,~> +JcC<$m/QAMf)GjOrVZQjqY^0eq?-WmrVkXQWrBj7,l[c?qY9aTnF#W+jl54TgY1<4g"Y??ioK:f +mI9]>p\F^brr1(?J,~> +JcC<$m/QAMf)GjOrVZQjqY^0eq?-WmrVkXQWrBj7,l[c?qY9aTnF#W+jl54TgY1<4g"Y??ioK:f +mI9]>p\F^brr1(?J,~> +JcC<$UAt)hJcE@^s8EE)r;6?dq"OLTo^_SPnI5![o_%qPq>1!drVlf9s*t~> +JcC<$UAt)hJcE@^s8EE)r;6?dq"OLTo^_SPnI5![o_%qPq>1!drVlf9s*t~> +JcC<$UAt)hJcE@^s8EE)r;6?dq"OLTo^_SPnI5![o_%qPq>1!drVlf9s*t~> +JcC<$JcC<$ci=%Es8D]irr)lr_>f#~> +JcC<$JcC<$ci=%Es8D]irr)lr_>f#~> +JcC<$JcC<$ci=%Es8D]irr)lr_>f#~> +JcC<$JcC<$JcGZJJ,~> +JcC<$JcC<$JcGZJJ,~> +JcC<$JcC<$JcGZJJ,~> +%%EndData +showpage +%%Trailer +end +%%EOF + diff --git a/v2.6/toolkit/doc/fig/fastNLO_logo_646x161.png b/v2.6/toolkit/doc/fig/fastNLO_logo_646x161.png new file mode 100644 index 0000000000000000000000000000000000000000..6132e526c33bdf510ff14c126a8d133221444dc2 Binary files /dev/null and b/v2.6/toolkit/doc/fig/fastNLO_logo_646x161.png differ diff --git a/v2.6/toolkit/doc/paper/JHEP-author-manual.pdf b/v2.6/toolkit/doc/paper/JHEP-author-manual.pdf new file mode 100644 index 0000000000000000000000000000000000000000..8837bdb526ed8a834c1e6ad8464389ea6d305103 Binary files /dev/null and b/v2.6/toolkit/doc/paper/JHEP-author-manual.pdf differ diff --git a/v2.6/toolkit/doc/paper/JHEP-policy.pdf b/v2.6/toolkit/doc/paper/JHEP-policy.pdf new file mode 100644 index 0000000000000000000000000000000000000000..c876d7885461935c2a6a02b499601973bd0068d5 Binary files /dev/null and b/v2.6/toolkit/doc/paper/JHEP-policy.pdf differ diff --git a/v2.6/toolkit/doc/paper/JHEP.bst b/v2.6/toolkit/doc/paper/JHEP.bst new file mode 100644 index 0000000000000000000000000000000000000000..db3defad0062bb47c524bc248c4ab3e0c7397beb --- /dev/null +++ b/v2.6/toolkit/doc/paper/JHEP.bst @@ -0,0 +1,1097 @@ +% UT Physics bibliographic style, ver. 1.2.1 Based on: +% +%X IEEE Transactions bibliography style (29-Jan-88 version) +%X numeric labels, order-of-reference, IEEE abbreviations, +%X quotes around article titles, commas separate all fields +%X except after book titles and before "notes". Otherwise, +%X much like the "plain" family, from which this is adapted. +%X +%X History +%X 9/30/85 (HWT) Original version, by Howard Trickey. +%X 1/29/88 (OP&HWT) Updated for BibTeX version 0.99a, Oren Patashnik; +%X THIS `ieeetr' VERSION DOES NOT WORK WITH BIBTEX 0.98i. +% +% Modifications: 1) added hypertex support and "archive" and "eprint" fields. +% 2) parentheses around dates, and no "pp." for article entries +% 3) "publisher, address" instead of "address: publisher" +% 4) added "report" field for article entries. +% 5) particle physics-oriented abbreviations, rather than ieee. +% 6) added "collaboration" field, as per +% Jonathan Flynn' suggestion. SPIRES now supports this field. +% 7) added support for new arXIv identifier format +% 8) minor corrections (mg 27/2/2012) +% +% Modified by Jacques Distler, 7/97 +% History: ver 1.0 9/96 +% ver 1.1 10/96 - added "collaboration" field +% ver 1.2 7/97 - added a "\providecommand{\href}[2]{#2}" +% to handle case where \href is not defined +% +% HyperTeX Wizardry: +% +% The following are equivalent: +% archive = "hep-th" +% eprint = "9605023" +% and +% eprint = "hep-th/9605023" +% both produce +% \href{http://arxiv.org/abs/hep-th/9605023}{{\tt hep-th/9605023}} +% in the bibliographic output at the appropriate point. If you are using a +% hypertex macropackage, like hyperref.sty, this will create a link to Los +% Alamos. +% +% The bibtex output produced by SPIRES, while far from perfect, is pretty +% suitable for use with this style. Indeed, this style was designed with +% SPIRES in mind. + +ENTRY + { address + author + booktitle + chapter + edition + editor + howpublished + institution + journal + key + month + note + number + organization + pages + publisher + school + series + title + type + volume + year + archive + eprint + report + collaboration + } + {} + { label } + +INTEGERS { output.state before.all mid.sentence after.quote after.sentence + after.quoted.block after.block } + +FUNCTION {init.state.consts} +{ #0 'before.all := + #1 'mid.sentence := + #2 'after.quote := + #3 'after.sentence := + #4 'after.quoted.block := + #5 'after.block := +} + +STRINGS { s t } + +FUNCTION {output.nonnull} +{ 's := + output.state mid.sentence = + { ", " * write$ } + { output.state after.quote = + { " " * write$ } + { output.state after.block = + { add.period$ write$ + newline$ + "\newblock " write$ + } + { output.state before.all = + 'write$ + { output.state after.quoted.block = + { write$ + newline$ + "\newblock " write$ + } + { add.period$ " " * write$ } + if$ + } + if$ + } + if$ + } + if$ + mid.sentence 'output.state := + } + if$ + s +} + +FUNCTION {output} +{ duplicate$ empty$ + 'pop$ + 'output.nonnull + if$ +} + +FUNCTION {output.check} +{ 't := + duplicate$ empty$ + { pop$ "empty " t * " in " * cite$ * warning$ } + 'output.nonnull + if$ +} + +FUNCTION {output.bibitem} +{ newline$ + "\bibitem{" write$ + cite$ write$ + "}" write$ + newline$ + "" + before.all 'output.state := +} + +FUNCTION {blank.sep} +{ after.quote 'output.state := +} + +FUNCTION {fin.entry} +{ output.state after.quoted.block = + 'skip$ + 'add.period$ + if$ + write$ + newline$ +} + +FUNCTION {new.block} +{ output.state before.all = + 'skip$ + { output.state after.quote = + { after.quoted.block 'output.state := } + { after.block 'output.state := } + if$ + } + if$ +} + +FUNCTION {new.sentence} +{ output.state after.block = + 'skip$ + { output.state before.all = + 'skip$ + { after.sentence 'output.state := } + if$ + } + if$ +} + +FUNCTION {not} +{ { #0 } + { #1 } + if$ +} + +FUNCTION {and} +{ 'skip$ + { pop$ #0 } + if$ +} + +FUNCTION {or} +{ { pop$ #1 } + 'skip$ + if$ +} + +FUNCTION {new.block.checka} +{ empty$ + 'skip$ + 'new.block + if$ +} + +FUNCTION {new.block.checkb} +{ empty$ + swap$ empty$ + and + 'skip$ + 'new.block + if$ +} + +FUNCTION {new.sentence.checka} +{ empty$ + 'skip$ + 'new.sentence + if$ +} + +FUNCTION {field.or.null} +{ duplicate$ empty$ + { pop$ "" } + 'skip$ + if$ +} + +FUNCTION {emphasize} +{ duplicate$ empty$ + { pop$ "" } + { "{\em " swap$ * "}" * } + if$ +} + +INTEGERS { nameptr namesleft numnames } + +FUNCTION {format.names} +{ 's := + #1 'nameptr := + s num.names$ 'numnames := + numnames 'namesleft := + { namesleft #0 > } + { s nameptr "{f.~}{vv~}{ll}{, jj}" format.name$ 't := + nameptr #1 > + { namesleft #1 > + { ", " * t * } + { numnames #2 > + { "," * } + 'skip$ + if$ + t "others" = + { " et~al." * } + { " and " * t * } + if$ + } + if$ + } + 't + if$ + nameptr #1 + 'nameptr := + namesleft #1 - 'namesleft := + } + while$ +} + +FUNCTION {format.authors} +{ author empty$ + { "" } + { author format.names } + if$ +} + +FUNCTION {format.eprint.newarXivid} +{ eprint #1 #6 substring$ "arXiv:" = + {"\href{http://xxx.lanl.gov/abs/" eprint #7 #9 substring$ * "}" * + "{{\tt " * eprint #7 #9 substring$ * "}}" *} + {"\href{http://xxx.lanl.gov/abs/" eprint #1 #9 substring$ * "}" * + "{{\tt arXiv:" * eprint #1 #9 substring$ * "}}" *} + if$ +} + +FUNCTION {format.eprint.oldarXivid} +{ archive empty$ + {"\href{http://xxx.lanl.gov/abs/" eprint * "}" * + "{{\tt " * eprint * "}}" *} + {"\href{http://xxx.lanl.gov/abs/" archive * "/" * eprint * "}" * + "{{\tt " * archive * "/" * eprint * "}}" *} + if$ +} + + +FUNCTION {format.eprint} +{ eprint empty$ + { ""} + { eprint #1 #6 substring$ "arXiv:" = + eprint #5 #1 substring$ "." = + or + { format.eprint.newarXivid } + { format.eprint.oldarXivid } + if$ + } + if$ +} + + +FUNCTION {format.eprint.paren} +{ eprint missing$ { "" } { eprint empty$ { "" } {"[" format.eprint * "]" *} + if$ + } + if$ +} + + + +FUNCTION {format.report} +{ report empty$ + { ""} + { report} + if$ +} + + + +FUNCTION {format.editors} +{ editor empty$ + { "" } + { editor format.names + editor num.names$ #1 > + { ", eds." * } + { ", ed." * } + if$ + } + if$ +} + +FUNCTION {format.title} +{ title empty$ + { "" } + { "{\it " title "t" change.case$ * "}, " * } + if$ +} + +FUNCTION {format.title.p} +{ title empty$ + { "" } + { "``" title "t" change.case$ * ".''" * } + if$ +} + +FUNCTION {n.dashify} +{ 't := + "" + { t empty$ not } + { t #1 #1 substring$ "-" = + { t #1 #2 substring$ "--" = not + { "--" * + t #2 global.max$ substring$ 't := + } + { { t #1 #1 substring$ "-" = } + { "-" * + t #2 global.max$ substring$ 't := + } + while$ + } + if$ + } + { t #1 #1 substring$ * + t #2 global.max$ substring$ 't := + } + if$ + } + while$ +} + +FUNCTION {format.date} +{ year empty$ + { month empty$ + { "" } + { "there's a month but no year in " cite$ * warning$ + month + } + if$ + } + { month empty$ + 'year + { month ", " * year * } + if$ + } + if$ +} + +FUNCTION {format.date.paren} +{ year empty$ + { month empty$ + { "" } + { "there's a month but no year in " cite$ * warning$ + month + } + if$ + } + { month empty$ + {"(" year * ")" *} + {"(" month * ", " * year * ")" *} + if$ + } + if$ +} + +FUNCTION {format.collaboration} +{ collaboration empty$ + { "" } + { "{\bf " collaboration * "} " * "Collaboration" * } + if$ +} + + +FUNCTION {format.btitle} +{ title emphasize +} + +FUNCTION {tie.or.space.connect} +{ duplicate$ text.length$ #3 < + { "~" } + { " " } + if$ + swap$ * * +} + +FUNCTION {either.or.check} +{ empty$ + 'pop$ + { "can't use both " swap$ * " fields in " * cite$ * warning$ } + if$ +} + +FUNCTION {format.bvolume} +{ volume empty$ + { "" } + { "vol.~" volume * + series empty$ + 'skip$ + { " of " * series emphasize * } + if$ + "volume and number" number either.or.check + } + if$ +} + +FUNCTION {format.number.series} +{ volume empty$ + { number empty$ + { series field.or.null } + { output.state mid.sentence = + { "no.~" } + { "No.~" } + if$ + number * + series empty$ + { "there's a number but no series in " cite$ * warning$ } + { " in " * series * } + if$ + } + if$ + } + { "" } + if$ +} + +FUNCTION {format.edition} +{ edition empty$ + { "" } + { edition "l" change.case$ "~ed." * } + if$ +} + +INTEGERS { multiresult } + +FUNCTION {multi.page.check} +{ 't := + #0 'multiresult := + { multiresult not + t empty$ not + and + } + { t #1 #1 substring$ + duplicate$ "-" = + swap$ duplicate$ "," = + swap$ "+" = + or or + { #1 'multiresult := } + { t #2 global.max$ substring$ 't := } + if$ + } + while$ + multiresult +} + +FUNCTION {format.pages} +{ pages empty$ + { "" } + { pages multi.page.check + { "pp.~" pages n.dashify * } + { "p.~" pages * } + if$ + } + if$ +} + +FUNCTION {format.pages.nopp} +{ pages empty$ + { "" } + { pages multi.page.check + { pages n.dashify } + { pages } + if$ + } + if$ +} + + +FUNCTION {format.volume} +{ volume empty$ + { "" } + { "{\bf " volume * "}" * } + if$ +} + +FUNCTION {format.number} +{ number empty$ + { "" } + { "no.~" number * } + if$ +} + +FUNCTION {format.chapter.pages} +{ chapter empty$ + 'format.pages + { type empty$ + { "ch.~" chapter * } + { type "l" change.case$ chapter tie.or.space.connect } + if$ + pages empty$ + 'skip$ + { ", " * format.pages * } + if$ + } + if$ +} + +FUNCTION {format.in.ed.booktitle} +{ booktitle empty$ + { "" } + { "in " booktitle emphasize * + editor empty$ + 'skip$ + { " (" * format.editors * ")" * } + if$ + } + if$ +} + +FUNCTION {format.thesis.type} +{ type empty$ + 'skip$ + { pop$ + output.state after.block = + { type "t" change.case$ } + { type "l" change.case$ } + if$ + } + if$ +} + +FUNCTION {empty.misc.check} +{ author empty$ title empty$ howpublished empty$ + month empty$ year empty$ note empty$ + and and and and and + { "all relevant fields are empty in " cite$ * warning$ } + 'skip$ + if$ +} + +FUNCTION {format.tr.number} +{ type empty$ + { "Tech. Rep." } + 'type + if$ + number empty$ + { "l" change.case$ } + { number tie.or.space.connect } + if$ +} + +FUNCTION {format.paddress} +{ address empty$ + { "" } + { "(" address * ")" * } + if$ +} + +FUNCTION {format.article.crossref} +{ key empty$ + { journal empty$ + { "need key or journal for " cite$ * " to crossref " * crossref * + warning$ + "" + } + { "in {\em " journal * "\/}" * } + if$ + } + { "in " key * } + if$ + " \cite{" * crossref * "}" * +} + +FUNCTION {format.crossref.editor} +{ editor #1 "{vv~}{ll}" format.name$ + editor num.names$ duplicate$ + #2 > + { pop$ " et~al." * } + { #2 < + 'skip$ + { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = + { " et~al." * } + { " and " * editor #2 "{vv~}{ll}" format.name$ * } + if$ + } + if$ + } + if$ +} + +FUNCTION {format.book.crossref} +{ volume empty$ + { "empty volume in " cite$ * "'s crossref of " * crossref * warning$ + "In " + } + { "Vol.~" volume * + " of " * + } + if$ + editor empty$ + editor field.or.null author field.or.null = + or + { key empty$ + { series empty$ + { "need editor, key, or series for " cite$ * " to crossref " * + crossref * warning$ + "" * + } + { "{\em " * series * "\/}" * } + if$ + } + { key * } + if$ + } + { format.crossref.editor * } + if$ + " \cite{" * crossref * "}" * +} + +FUNCTION {format.incoll.inproc.crossref} +{ editor empty$ + editor field.or.null author field.or.null = + or + { key empty$ + { booktitle empty$ + { "need editor, key, or booktitle for " cite$ * " to crossref " * + crossref * warning$ + "" + } + { "in {\em " booktitle * "\/}" * } + if$ + } + { "in " key * } + if$ + } + { "in " format.crossref.editor * } + if$ + " \cite{" * crossref * "}" * +} + +FUNCTION {article} +{ output.bibitem + format.collaboration output + format.authors "author" output.check + format.title "title" output.check + blank.sep + crossref missing$ + { journal missing$ + { format.eprint output } + { journal empty$ { format.eprint output } { + journal emphasize "journal" output.check + blank.sep + format.volume output + blank.sep + format.date.paren "year" output.check + month empty$ { format.number output } + 'skip$ if$ + blank.sep + format.pages.nopp output } + if$ + } + if$ + report missing$ + { journal empty$ {} { format.eprint.paren output} if$ } + {blank.sep format.report output format.eprint.paren output} + if$ + } + { format.article.crossref output.nonnull + format.pages output + format.eprint.paren output + } + if$ + new.sentence + note output + fin.entry +} + +FUNCTION {book} +{ output.bibitem + format.collaboration output + author empty$ + { format.editors "author and editor" output.check } + { format.authors output.nonnull + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + format.btitle "title" output.check + crossref missing$ + { format.bvolume output + new.block + format.number.series output + new.sentence + publisher "publisher" output.check + address output + } + { new.block + format.book.crossref output.nonnull + } + if$ + format.edition output + format.date "year" output.check + new.block + note output + fin.entry +} + +FUNCTION {booklet} +{ output.bibitem + format.collaboration output + format.authors output + title empty$ + { "empty title in " cite$ * warning$ + howpublished new.sentence.checka + } + { howpublished empty$ not + address empty$ month empty$ year empty$ and and + or + { format.title.p output.nonnull } + { format.title output.nonnull } + if$ + blank.sep + } + if$ + howpublished output + address output + format.date output + new.block + note output + fin.entry +} + +FUNCTION {inbook} +{ output.bibitem + format.collaboration output + author empty$ + { format.editors "author and editor" output.check } + { format.authors output.nonnull + crossref missing$ + { "author and editor" editor either.or.check } + 'skip$ + if$ + } + if$ + format.btitle "title" output.check + crossref missing$ + { format.bvolume output + format.chapter.pages "chapter and pages" output.check + new.block + format.number.series output + new.block + publisher "publisher" output.check + address output + } + { format.chapter.pages "chapter and pages" output.check + new.block + format.book.crossref output.nonnull + } + if$ + format.edition output + format.date "year" output.check + new.block + format.eprint output + new.block + note output + fin.entry +} + +FUNCTION {incollection} +{ output.bibitem + format.collaboration output + format.authors "author" output.check + format.title "title" output.check + blank.sep + crossref missing$ + { format.in.ed.booktitle "booktitle" output.check + format.bvolume output + format.number.series output + format.chapter.pages output + new.block + publisher "publisher" output.check + address output + format.edition output + format.date "year" output.check + } + { format.incoll.inproc.crossref output.nonnull + format.chapter.pages output + } + if$ + new.block + format.eprint output + new.block + note output + fin.entry +} + +FUNCTION {inproceedings} +{ output.bibitem + format.collaboration output + format.authors "author" output.check + format.title "title" output.check + blank.sep + crossref missing$ + { format.in.ed.booktitle "booktitle" output.check + format.bvolume output + format.number.series output + format.paddress output + format.pages output + organization output + publisher output + format.date "year" output.check + } + { format.incoll.inproc.crossref output.nonnull + format.pages output + } + if$ + new.block + format.eprint output + new.block + note output + fin.entry +} + +FUNCTION {conference} { inproceedings } + +FUNCTION {manual} +{ output.bibitem + format.collaboration output + author empty$ + { organization empty$ + 'skip$ + { organization output.nonnull + address output + } + if$ + } + { format.authors output.nonnull } + if$ + format.btitle "title" output.check + author empty$ + { organization empty$ + { address new.block.checka + address output + } + 'skip$ + if$ + } + { organization address new.block.checkb + organization output + address output + } + if$ + format.edition output + format.date output + new.block + note output + fin.entry +} + +FUNCTION {mastersthesis} +{ output.bibitem + format.authors "author" output.check + format.title "title" output.check + blank.sep + "Master's thesis" format.thesis.type output.nonnull + school "school" output.check + address output + format.date "year" output.check + new.block + note output + fin.entry +} + +FUNCTION {misc} +{ output.bibitem + format.collaboration output + format.authors output + title empty$ + { howpublished new.sentence.checka } + { howpublished empty$ not + month empty$ year empty$ and + or + { format.title.p output.nonnull } + { format.title output.nonnull } + if$ + blank.sep + } + if$ + howpublished output + format.date output + new.block + note output + fin.entry + empty.misc.check +} + +FUNCTION {phdthesis} +{ output.bibitem + format.authors "author" output.check + format.btitle "title" output.check + new.block + "PhD thesis" format.thesis.type output.nonnull + school "school" output.check + address output + format.date "year" output.check + new.block + format.eprint output + new.block + note output + fin.entry +} + +FUNCTION {proceedings} +{ output.bibitem + editor empty$ + { organization output } + { format.editors output.nonnull } + if$ + format.btitle "title" output.check + format.bvolume output + format.number.series output + format.paddress output + editor empty$ + 'skip$ + { organization output } + if$ + publisher output + format.date "year" output.check + new.block + note output + fin.entry +} + +FUNCTION {techreport} +{ output.bibitem + format.collaboration output + format.authors "author" output.check + format.title "title" output.check + blank.sep + format.tr.number output.nonnull + institution "institution" output.check + address output + format.date "year" output.check + new.block + note output + fin.entry +} + +FUNCTION {unpublished} +{ output.bibitem + format.collaboration output + format.authors "author" output.check + format.title.p "title" output.check + blank.sep + note "note" output.check + format.date output + fin.entry +} + +FUNCTION {default.type} { misc } + +MACRO {jan} {"Jan."} + +MACRO {feb} {"Feb."} + +MACRO {mar} {"Mar."} + +MACRO {apr} {"Apr."} + +MACRO {may} {"May"} + +MACRO {jun} {"June"} + +MACRO {jul} {"July"} + +MACRO {aug} {"Aug."} + +MACRO {sep} {"Sept."} + +MACRO {oct} {"Oct."} + +MACRO {nov} {"Nov."} + +MACRO {dec} {"Dec."} + +MACRO {nup} {"Nucl. Phys."} + +MACRO {cmp} {"Comm. Math. Phys."} + +MACRO {prl} {"Phys. Rev. Lett."} + +MACRO {pl} {"Phys. Lett."} + +MACRO {rmp} {"Rev. Mod. Phys."} + +MACRO {ijmp} {"Int. Jour. Mod. Phys."} + +MACRO {mpl} {"Mod. Phys. Lett."} + +MACRO {pr} {"Phys. Rev."} + +READ + +STRINGS { longest.label } + +INTEGERS { number.label longest.label.width } + +FUNCTION {initialize.longest.label} +{ "" 'longest.label := + #1 'number.label := + #0 'longest.label.width := +} + +FUNCTION {longest.label.pass} +{ number.label int.to.str$ 'label := + number.label #1 + 'number.label := + label width$ longest.label.width > + { label 'longest.label := + label width$ 'longest.label.width := + } + 'skip$ + if$ +} + +EXECUTE {initialize.longest.label} + +ITERATE {longest.label.pass} + +FUNCTION {begin.bib} +{ preamble$ empty$ + 'skip$ + { preamble$ write$ newline$ } + if$ + "\providecommand{\href}[2]{#2}" + "\begingroup\raggedright\begin{thebibliography}{" * longest.label * + "}" * write$ newline$ } + +EXECUTE {begin.bib} + +EXECUTE {init.state.consts} + +ITERATE {call.type$} + +FUNCTION {end.bib} +{ newline$ + "\end{thebibliography}\endgroup" write$ newline$ +} + +EXECUTE {end.bib} diff --git a/v2.6/toolkit/doc/paper/Makefile.am b/v2.6/toolkit/doc/paper/Makefile.am new file mode 100644 index 0000000000000000000000000000000000000000..c60ca557a5fa8ba68b1ef377cd423112300bcd81 --- /dev/null +++ b/v2.6/toolkit/doc/paper/Makefile.am @@ -0,0 +1,50 @@ +# -*- Automake -*- +# ----------------------------------------------------------------------------- +# +# K. Rabbertz, 06.04.2014 +# +# Include documentation into distribution tarball +# +# ----------------------------------------------------------------------------- +# Use GNU standards +AUTOMAKE_OPTIONS = gnu + +# Normally, it's not necessary to define docdir! Accommodate feature +# lacking in autoconf-2.59, automake-1.9.6 +#docdir = ${datadir}/doc/${PACKAGE} +docfiles = fnlo-paper.pdf + +DOCNAM = fnlo-paper +DOCSRC = $(DOCNAM).tex +DOCAUX = $(DOCNAM).aux +DOCPDF = $(DOCNAM).pdf + +EXTRA_DIST = $(DOCSRC) figs fnlo-paper.pdf +CLEANFILES = $(DOCAUX) $(DOCPDF) $(DOCNAM).log + +# +# Requires pdflatex or latex & dvipdfm +# +if HAVE_PDFLATEX +$(DOCPDF): $(srcdir)/$(DOCSRC) + $(PDFLATEX) $< + $(PDFLATEX) $< + $(PDFLATEX) $< +else +if HAVE_LATEXDVIPDFM +$(DOCPDF): $(srcdir)/$(DOCSRC) + $(LATEX) $< + $(LATEX) $< + $(LATEX) $< + $(DVIPDFM) $< +endif +endif + +dist_doc_DATA = $(docfiles) + +# Files that are required to build the project but that can be +# recreated IF the necessary autotools etc. are available by: +# "autoreconf -i; ./configure" +# Use "make maintainer-clean" (on a build machine) before svn commits, +# but NOT before distribution with "make dist"! +MAINTAINERCLEANFILES = Makefile.in diff --git a/v2.6/toolkit/doc/paper/example/img1.pdf b/v2.6/toolkit/doc/paper/example/img1.pdf new file mode 100644 index 0000000000000000000000000000000000000000..9389105071fd93bccf7b90f14750d0ca2dbf5713 Binary files /dev/null and b/v2.6/toolkit/doc/paper/example/img1.pdf differ diff --git a/v2.6/toolkit/doc/paper/example/img2.pdf b/v2.6/toolkit/doc/paper/example/img2.pdf new file mode 100644 index 0000000000000000000000000000000000000000..881791a2a76042cdc8944c8334bec85673e4cbd0 Binary files /dev/null and b/v2.6/toolkit/doc/paper/example/img2.pdf differ diff --git a/v2.6/toolkit/doc/paper/example/jhepexample.pdf b/v2.6/toolkit/doc/paper/example/jhepexample.pdf new file mode 100644 index 0000000000000000000000000000000000000000..24d0a43448bebc67e15353633840396c8c1cce99 Binary files /dev/null and b/v2.6/toolkit/doc/paper/example/jhepexample.pdf differ diff --git a/v2.6/toolkit/doc/paper/example/jhepexample.tex b/v2.6/toolkit/doc/paper/example/jhepexample.tex new file mode 100644 index 0000000000000000000000000000000000000000..0f8a14b74118e2b77c2095763148feed727f23a0 --- /dev/null +++ b/v2.6/toolkit/doc/paper/example/jhepexample.tex @@ -0,0 +1,198 @@ +\documentclass[a4paper,11pt]{article} +\pdfoutput=1 % if your are submitting a pdflatex (i.e. if you have + % images in pdf, png or jpg format) + +\usepackage{jheppub} % for details on the use of the package, please + % see the JHEP-author-manual + +\usepackage[T1]{fontenc} % if needed + + + +\title{\boldmath A title with some math: $x=1$} + + +%% %simple case: 2 authors, same institution +%% \author{A. Uthor} +%% \author{and A. Nother Author} +%% \affiliation{Institution,\\Address, Country} + +% more complex case: 4 authors, 3 institutions, 2 footnotes +\author[a,b,1]{F. Irst,\note{Corresponding author.}} +\author[c]{S. Econd,} +\author[a,2]{T. Hird\note{Also at Some University.}} +\author[a,2]{and Fourth} + +% The "\note" macro will give a warning: "Ignoring empty anchor..." +% you can safely ignore it. + +\affiliation[a]{One University,\\some-street, Country} +\affiliation[b]{Another University,\\different-address, Country} +\affiliation[c]{A School for Advanced Studies,\\some-location, Country} + +% e-mail addresses: one for each author, in the same order as the authors +\emailAdd{first@one.univ} +\emailAdd{second@asas.edu} +\emailAdd{third@one.univ} +\emailAdd{fourth@one.univ} + + + + +\abstract{Abstract...} + + + +\begin{document} +\maketitle +\flushbottom + +\section{Some examples and best-practices} +\label{sec:intro} + +For internal references use label-refs: see section~\ref{sec:intro}. +Bibliographic citations can be done with cite: refs.~\cite{a,b,c}. +When possible, align equations on the equal sign. The package +\texttt{amsmath} is already loaded. See \eqref{eq:x}. +\begin{equation} +\label{eq:x} +\begin{split} +x &= 1 \,, +\qquad +y = 2 \,, +\\ +z &= 3 \,. +\end{split} +\end{equation} +Also, watch out for the punctuation at the end of the equations. + + +If you want some equations without the tag (number), please use the available +starred-environments. For example: +\begin{equation*} +x = 1 +\end{equation*} + +The amsmath package has many features. For example, you can use use +\texttt{subequations} environment: +\begin{subequations}\label{eq:y} +\begin{align} +\label{eq:y:1} +a & = 1 +\\ +\label{eq:y:2} +b & = 2 +\end{align} +and it will continue to operate across the text also. +\begin{equation} +\label{eq:y:3} +c = 3 +\end{equation} +\end{subequations} +The references will work as you'd expect: \eqref{eq:y:1}, +\eqref{eq:y:2} and \eqref{eq:y:3} are all part of \eqref{eq:y}. + +A similar solution is available for figures via the \texttt{subfigure} +package (not loaded by default and not shown here). +All figures and tables should be referenced in the text and should be +placed at the top of the page where they are first cited or in +subsequent pages. Positioning them in the source file +after the paragraph where you first reference them usually yield good +results. See figure~\ref{fig:i} and table~\ref{tab:i}. + +\begin{figure}[tbp] +\centering % \begin{center}/\end{center} takes some additional vertical space +\includegraphics[width=.45\textwidth,trim=0 380 0 200,clip]{img1.pdf} +\hfill +\includegraphics[width=.45\textwidth,origin=c,angle=180]{img2.pdf} +% "\includegraphics" is very powerful; the graphicx package is already loaded +\caption{\label{fig:i} Always give a caption.} +\end{figure} + +\begin{table}[tbp] +\centering +\begin{tabular}{|lr|c|} +\hline +x&y&x and y\\ +\hline +a & b & a and b\\ +1 & 2 & 1 and 2\\ +$\alpha$ & $\beta$ & $\alpha$ and $\beta$\\ +\hline +\end{tabular} +\caption{\label{tab:i} We prefer to have borders around the tables.} +\end{table} + +We discourage the use of inline figures (wrapfigure), as they may be +difficult to position if the page layout changes. + +We suggest not to abbreviate: ``section'', ``appendix'', ``figure'' +and ``table'', but ``eq.'' and ``ref.'' are welcome. Also, please do +not use \texttt{\textbackslash emph} or \texttt{\textbackslash it} for +latin abbreviaitons: i.e., et al., e.g., vs., etc. + + + +\section{Sections} +\subsection{And subsequent} +\subsubsection{Sub-sections} +\paragraph{Up to paragraphs.} We find that having more levels usually +reduces the clarity of the article. Also, we strongly discourage the +use of non-numbered sections (e.g.~\texttt{\textbackslash + subsubsection*}). Please also see the use of +``\texttt{\textbackslash texorpdfstring\{\}\{\}}'' to avoid warnings +from the hyperref package when you have math in the section titles + + + +\appendix +\section{Some title} +Please always give a title also for appendices. + + + + + +\acknowledgments + +This is the most common positions for acknowledgments. A macro is +available to maintain the same layout and spelling of the heading. + +\paragraph{Note added.} This is also a good position for notes added +after the paper has been written. + + + + + +% The bibliography will probably be heavily edited during typesetting. +% We'll parse it and, using the arxiv number or the journal data, will +% query inspire, trying to verify the data (this will probalby spot +% eventual typos) and retrive the document DOI and eventual errata. +% We however suggest to always provide author, title and journal data: +% in short all the informations that clearly identify a document. + +\begin{thebibliography}{99} + +\bibitem{a} +Author, \emph{Title}, \emph{J. Abbrev.} {\bf vol} (year) pg. + +\bibitem{b} +Author, \emph{Title}, +arxiv:1234.5678. + +\bibitem{c} +Author, \emph{Title}, +Publisher (year). + + +% Please avoid comments such as "For a review'', "For some examples", +% "and references therein" or move them in the text. In general, +% please leave only references in the bibliography and move all +% accessory text in footnotes. + +% Also, please have only one work for each \bibitem. + + +\end{thebibliography} +\end{document} diff --git a/v2.6/toolkit/doc/paper/example/jheppub.sty b/v2.6/toolkit/doc/paper/example/jheppub.sty new file mode 100644 index 0000000000000000000000000000000000000000..95efdc965281743499407143187073b6614d84e5 --- /dev/null +++ b/v2.6/toolkit/doc/paper/example/jheppub.sty @@ -0,0 +1,371 @@ +%% jheppub.sty +%% Copyright 2013 SISSA Medialab +% +% This work may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status `author-maintained'. +% +% The Current Maintainer of this work is +% SISSA Medialab <info@medialab.sissa.it> +% +% This work consists of the file jheppub.sty. +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{jheppub}[2013/03/21 r534] + + +\gdef\@fpheader{Prepared for submission to JHEP} +\gdef\@journal{jhep} + +\RequirePackage{amsmath} +\RequirePackage{amssymb} +\RequirePackage{epsfig} +\RequirePackage{graphicx} +\RequirePackage[numbers,sort&compress]{natbib} +\RequirePackage{color} +\RequirePackage[colorlinks=true +,urlcolor=blue +,anchorcolor=blue +,citecolor=blue +,filecolor=blue +,linkcolor=blue +,menucolor=blue +,pagecolor=blue +,linktocpage=true +,pdfproducer=medialab +,pdfa=true +]{hyperref} + +\newif\ifnotoc\notocfalse +\newif\ifemailadd\emailaddfalse +\newif\iftoccontinuous\toccontinuousfalse + +\def\@subheader{\@empty} +\def\@keywords{\@empty} +\def\@abstract{\@empty} +\def\@xtum{\@empty} +\def\@dedicated{\@empty} +\def\@arxivnumber{\@empty} +\def\@collaboration{\@empty} +\def\@collaborationImg{\@empty} +\def\@proceeding{\@empty} +\def\@preprint{\@empty} + +\newcommand{\subheader}[1]{\gdef\@subheader{#1}} +\newcommand{\keywords}[1]{\if!\@keywords!\gdef\@keywords{#1}\else% +\PackageWarningNoLine{\jname}{Keywords already defined.\MessageBreak Ignoring last definition.}\fi} +\renewcommand{\abstract}[1]{\gdef\@abstract{#1}} +\newcommand{\dedicated}[1]{\gdef\@dedicated{#1}} +\newcommand{\arxivnumber}[1]{\gdef\@arxivnumber{#1}} +\newcommand{\proceeding}[1]{\gdef\@proceeding{#1}} +\newcommand{\xtumfont}[1]{\textsc{#1}} +\newcommand{\correctionref}[3]{\gdef\@xtum{\xtumfont{#1} \href{#2}{#3}}} +\newcommand\jname{JHEP} +\newcommand\acknowledgments{\section*{Acknowledgments}} +\newcommand\notoc{\notoctrue} +\newcommand\preprint[1]{\gdef\@preprint{\hfill #1}} + + + +%Equivalent to ``\footnote'', but can be used inside the \author macro +% because it does not write the footnote mark +% it has an optional argument that will be used as footnote mark when given +% WARNING: when the optional argument is used, the footnotecounter is not increased +% WARNING: the character ``!'' cannot be used. +% If you really need it use somthing like [\relax !] as the optional arg. +\newcommand\note[2][]{% +\if!#1!% +\stepcounter{footnote}\footnotetext{#2}% +\else% +{\renewcommand\thefootnote{#1}% +\footnotetext{#2}}% +\fi} + + + +%Use this if you want to try to keep some piece of the abstract on a +%very long first page +\newcommand\compress{% +\renewcommand\afterProceedingsSpace{\bigskip}% +\renewcommand\afterTitleSpace{\bigskip}% +\renewcommand\afterRuleSpace{\bigskip\bigskip} +\renewcommand\afterEmailSpace{\par\bigskip}} + +%authors and affiliations +\newtoks\auth@toks +\renewcommand{\author}[2][]{% + \if!#1!% + \auth@toks=\expandafter{\the\auth@toks#2\ }% + \else + \auth@toks=\expandafter{\the\auth@toks#2$^{#1}$\ }% + \fi +} + +\newtoks\affil@toks\newif\ifaffil\affilfalse +\newcommand{\affiliation}[2][]{% +\affiltrue + \if!#1!% + \affil@toks=\expandafter{\the\affil@toks{\item[]#2}}% + \else + \affil@toks=\expandafter{\the\affil@toks{\item[$^{#1}$]#2}}% + \fi +} + +%emails +%automatically put a comma between emails +\newtoks\email@toks\newcounter{email@counter}% +\setcounter{email@counter}{0}% +\newcommand{\emailAdd}[1]{% +\emailaddtrue% +\ifnum\theemail@counter>0\email@toks=\expandafter{\the\email@toks, \@email{#1}}% +\else\email@toks=\expandafter{\the\email@toks\@email{#1}}% +\fi\stepcounter{email@counter}} +\newcommand{\@email}[1]{\href{mailto:#1}{\tt #1}} + + +% Collaboration macros +\newcommand*\collaboration[1]{\gdef\@collaboration{#1}} +\newcommand*\collaborationImg[2][]{\gdef\@collaborationImg{#2}} + +%all pieces get a ``after'' spacing +\newcommand\afterLogoSpace{\smallskip} +\newcommand\afterSubheaderSpace{\vskip3pt plus 2pt minus 1pt} +\newcommand\afterProceedingsSpace{\vskip21pt plus0.4fil minus15pt} +\newcommand\afterTitleSpace{\vskip23pt plus0.06fil minus13pt} +\newcommand\afterRuleSpace{\vskip23pt plus0.06fil minus13pt} +\newcommand\afterCollaborationSpace{\vskip3pt plus 2pt minus 1pt} +\newcommand\afterCollaborationImgSpace{\vskip3pt plus 2pt minus 1pt} +\newcommand\afterAuthorSpace{\vskip5pt plus4pt minus4pt} +\newcommand\afterAffiliationSpace{\vskip3pt plus3pt} +\newcommand\afterEmailSpace{\vskip16pt plus9pt minus10pt\filbreak} +\newcommand\afterXtumSpace{\par\bigskip} +\newcommand\afterAbstractSpace{\vskip16pt plus9pt minus13pt} +\newcommand\afterKeywordsSpace{\vskip16pt plus9pt minus13pt} +\newcommand\afterArxivSpace{\vskip3pt plus0.01fil minus10pt} +\newcommand\afterDedicatedSpace{\vskip0pt plus0.01fil} +\newcommand\afterTocSpace{\bigskip\medskip} +\newcommand\afterTocRuleSpace{\bigskip\bigskip} +%this is the ``itemsep'' of the affiliations list +\newlength{\affiliationsSep}\setlength{\affiliationsSep}{-3pt} +%this hook is needed if the toc starts on the first page +\newcommand\beforetochook{\pagestyle{myplain}\pagenumbering{roman}} + +\DeclareFixedFont\trfont{OT1}{phv}{b}{sc}{11} + +%first page +\renewcommand\maketitle{ +%% First page +\pagestyle{empty} +\thispagestyle{titlepage} +\setcounter{page}{0} +\noindent{\small\scshape\@fpheader}\@preprint\par +\afterLogoSpace +% Subheader +\if!\@subheader!\else\noindent{\trfont{\@subheader}}\fi +\afterSubheaderSpace +% Proceedings +\if!\@proceeding!\else\noindent{\sc\@proceeding}\fi +\afterProceedingsSpace +% Title +{\LARGE\flushleft\sffamily\bfseries\@title\par} +\afterTitleSpace +% Rule +\hrule height 1.5\p@% +\afterRuleSpace +% Collaboration +\if!\@collaboration!\else +{\Large\bfseries\sffamily\raggedright\@collaboration}\par +\afterCollaborationSpace +\fi +% +\if!\@collaborationImg!\else +{\normalsize\bfseries\sffamily\raggedright\@collaborationImg}\par +\afterCollaborationImgSpace +%% I leave the size and font so that if there are two collaboration +%% they can be linked with an 'and' +\fi +% Author +{\bfseries\raggedright\sffamily\the\auth@toks\par} +\afterAuthorSpace +% Affiliation +\ifaffil\begin{list}{}{% +\setlength{\leftmargin}{0.28cm}% +\setlength{\labelsep}{0pt}% +\setlength{\itemsep}{\affiliationsSep}% +\setlength{\topsep}{-\parskip}} +\itshape\small% +\the\affil@toks +\end{list}\fi +\afterAffiliationSpace +% E-mail +\ifemailadd %% if emailadd is true +\noindent\hspace{0.28cm}\begin{minipage}[l]{.9\textwidth} +\begin{flushleft} +\textit{E-mail:} \the\email@toks +\end{flushleft} +\end{minipage} +\else %% if emailaddfalse do nothing +\PackageWarningNoLine{\jname}{E-mails are missing.\MessageBreak Plese use \protect\emailAdd\space macro to provide e-mails.} +\fi +\afterEmailSpace +%Erratum or addendum +\if!\@xtum!\else\noindent{\@xtum}\afterXtumSpace\fi +% Abstract +\if!\@abstract!\else\noindent{\renewcommand\baselinestretch{.9}\textsc{Abstract:}}\ \@abstract\afterAbstractSpace\fi +% Keywords +\if!\@keywords!\else\noindent{\textsc{Keywords:}} \@keywords\afterKeywordsSpace\fi +% Arxivnumber +\if!\@arxivnumber!\else\noindent{\textsc{ArXiv ePrint:}} \href{http://arxiv.org/abs/\@arxivnumber}{\@arxivnumber}\afterArxivSpace\fi +% Dedication +\if!\@dedicated!\else\vbox{\small\it\raggedleft\@dedicated}\afterDedicatedSpace\fi +% +\ifnotoc\else +\iftoccontinuous\else\newpage\fi +\beforetochook\hrule +\tableofcontents +\afterTocSpace +\hrule +\afterTocRuleSpace +\fi +\setcounter{footnote}{0} +\pagestyle{myplain}\pagenumbering{arabic} +} % close the \renewcommand\maketitle{ + + +% Page layout +\renewcommand{\baselinestretch}{1.1}\normalsize +\setlength\lineskip{1\p@} +\setlength\parindent{1.2\parindent} +\setlength\normallineskip{1\p@} +\setlength\parskip{0\p@ \@plus \p@} +\@lowpenalty 51 +\@medpenalty 151 +\@highpenalty 301 +\widowpenalty 1000 +\clubpenalty 1000 + +\setcounter{topnumber}{4} +\renewcommand\topfraction{1} +\setcounter{bottomnumber}{1} +\renewcommand\bottomfraction{.6} +\setcounter{totalnumber}{5} +\renewcommand\textfraction{0} +\renewcommand\floatpagefraction{1} + +\textwidth .72\paperwidth +\setlength\@tempdima{.76\paperheight} +\divide\@tempdima\baselineskip +\@tempcnta=\@tempdima +\setlength\textheight{\@tempcnta\baselineskip} +\addtolength\textheight{\topskip} + +\voffset -1in +\topmargin .05\paperheight +\headheight .02\paperheight +\headsep .03\paperheight +\footskip .07\paperheight + +\marginparsep 9\p@ +\marginparpush 6\p@ + +\hoffset -1in +\oddsidemargin .14\paperwidth +\evensidemargin .14\paperwidth +\marginparwidth .11\paperwidth + +\setlength\arraycolsep{2\p@} +\setlength\tabcolsep{6\p@} +\setlength\arrayrulewidth{.4\p@} +\setlength\doublerulesep{2\p@} +\setlength\tabbingsep{\labelsep} +\skip\@mpfootins = \skip\footins +\setlength\fboxsep{3\p@} +\setlength\fboxrule{.4\p@} + +% No dots in the table of contents +\renewcommand{\@dotsep}{10000} + +% Footer and header of the body +% the command ``\pagestyle{myplain}'' must be inserted +% just after ``\begin{document}'' +\newcommand\ps@myplain{ +\pagenumbering{arabic} +\renewcommand\@oddfoot{\hfill-- \thepage\ --\hfill} +\renewcommand\@oddhead{}} +\let\ps@plain=\ps@myplain + + + +% no header or footer in the title page +\newcommand\ps@titlepage{\renewcommand\@oddfoot{}\renewcommand\@oddhead{}} + + + +%number equations after the sections +\renewcommand{\theequation}{\thesection.\arabic{equation}} +\numberwithin{equation}{section} + + +%headings style +\renewcommand\section{\@startsection{section}{1}{\z@}% + {-3.5ex \@plus -1.3ex \@minus -.7ex}% + {2.3ex \@plus.4ex \@minus .4ex}% + {\normalfont\large\bfseries}} +\renewcommand\subsection{\@startsection{subsection}{2}{\z@}% + {-2.3ex\@plus -1ex \@minus -.5ex}% + {1.2ex \@plus .3ex \@minus .3ex}% + {\normalfont\normalsize\bfseries}} +\renewcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}% + {-2.3ex\@plus -1ex \@minus -.5ex}% + {1ex \@plus .2ex \@minus .2ex}% + {\normalfont\normalsize\bfseries}} +\renewcommand\paragraph{\@startsection{paragraph}{4}{\z@}% + {1.75ex \@plus1ex \@minus.2ex}% + {-1em}% + {\normalfont\normalsize\bfseries}} +\renewcommand\subparagraph{\@startsection{subparagraph}{5}{\parindent}% + {1.75ex \@plus1ex \@minus .2ex}% + {-1em}% + {\normalfont\normalsize\bfseries}} + + +%Caption of figure and table +\def\fnum@figure{\textbf{\figurename\nobreakspace\thefigure}} +\def\fnum@table{\textbf{\tablename\nobreakspace\thetable}} + +%redefining \@makecaption, to have captions with \small font size +%taken from article.cls l.489--498 +%the only differences are the ``\small '' commands added on two lines +\long\def\@makecaption#1#2{% + \vskip\abovecaptionskip + \sbox\@tempboxa{\small #1. #2}% + \ifdim \wd\@tempboxa >\hsize + \small #1. #2\par + \else + \global \@minipagefalse + \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}% + \fi + \vskip\belowcaptionskip} + + + + + +%apply some formatting on the biblio +%without redefining the whole env +\let\oldthebibliography=\thebibliography +\let\endoldthebibliography=\endthebibliography +\renewenvironment{thebibliography}[1]{% +\begin{oldthebibliography}{#1}% +\small% +\raggedright% +\setlength{\itemsep}{5pt plus 0.2ex minus 0.05ex}% +}% +{% +\end{oldthebibliography}% +} diff --git a/v2.6/toolkit/doc/paper/fnlo-old-paper-draft.pdf b/v2.6/toolkit/doc/paper/fnlo-old-paper-draft.pdf new file mode 100644 index 0000000000000000000000000000000000000000..ef7396c9cc5a1477d9690beb1f34be91e089a25d Binary files /dev/null and b/v2.6/toolkit/doc/paper/fnlo-old-paper-draft.pdf differ diff --git a/v2.6/toolkit/doc/paper/fnlo-paper.tex b/v2.6/toolkit/doc/paper/fnlo-paper.tex new file mode 100644 index 0000000000000000000000000000000000000000..dd7274f25bed319cd8ba8f25f91602e626fecea2 --- /dev/null +++ b/v2.6/toolkit/doc/paper/fnlo-paper.tex @@ -0,0 +1,353 @@ +\documentclass[a4paper,11pt]{article} +\pdfoutput=1 % if your are submitting a pdflatex (i.e. if you have + % images in pdf, png or jpg format) + +\usepackage{jheppub} % for details on the use of the package, please + % see the JHEP-author-manual + +\usepackage[T1]{fontenc} % if needed + +%% KR Don´t know/have this one. TBD +%% lisings package for c++ code syntax highlighting +%%\input{listingsinclude2.tex} + + +\title{\boldmath A title with some math: $x=1$} + + +%% %simple case: 2 authors, same institution +%% \author{A. Uthor} +%% \author{and A. Nother Author} +%% \affiliation{Institution,\\Address, Country} + +% more complex case: 4 authors, 3 institutions, 2 footnotes +\author[a,b,1]{F. Irst,\note{Corresponding author.}} +\author[c]{S. Econd,} +\author[a,2]{T. Hird\note{Also at Some University.}} +\author[a,2]{and Fourth} + +% The "\note" macro will give a warning: "Ignoring empty anchor..." +% you can safely ignore it. + +\affiliation[a]{One University,\\some-street, Country} +\affiliation[b]{Another University,\\different-address, Country} +\affiliation[c]{A School for Advanced Studies,\\some-location, Country} + +% e-mail addresses: one for each author, in the same order as the authors +\emailAdd{daniel.britzger@desy.de} +\emailAdd{klaus.rabbertz@cern.ch} +\emailAdd{georg.sieber@cern.ch} +\emailAdd{fred.stober@cern.ch} +\emailAdd{mwobisch@fnal.gov} + + + + +\abstract{Abstract...} + + + +\begin{document} +\maketitle +\flushbottom + +\section{Paper} +\subsection{Introduction} + +\subsection{PDF and $\alpha_s$-indepenent representation of hadron induced cross sections} + +\subsubsection{General expression of pQCD cross section} + +\subsubsection{Concept: fastNLO interpolation} + +\subsubsection{Factorize PDF dependence in cross sections} + +\subsubsection{Factorize $\alpha_s$-dependence in cross sections} + +\subsubsection{Factorize scale dependence in cross sections} + +\paragraph{`Fixed-scale' approach} +\subparagraph{Renormalization scale dependence} +\subparagraph{Factorization scale dependence} + +\paragraph{`Flexible-scale' approach} + +\subsection{Technical implementation} + +\subsection{Example applications} + +\subsubsection{Jets in hadron-hadron collisions} + +\subsubsection{DiffTop} + +\subsubsection{Jets in NC DIS} + +\subsection{fastNLO for diffractive processes} + +\subsection{Outlook} + +\subsection{Summary} + + +\clearpage +\section{fastNLO manual v2.2} +\subsection{Preambel} +The term `NLO program' denotes any kind of program in the following. + +\subsection{Requirements} + +\subsection{Download and installation} + +\subsection{fastNLO table format v2.2} + +\subsection{fastNLO table format v2.3} +todo + +\subsection{Table creation: Interface fastNLO to NLO program} +\subsubsection{Requirements} +\subsubsection{Classes and class descriptions} +\subsubsection{Conceptional working principle} +\subsubsection{Interfacing fastNLO to new NLO program} +\subsubsection{Useful hints} +vector<table> .... + +then merge or append + +\subsubsection{Example implementation: nlojet++} +\paragraph{nlojet++ interface} +\paragraph{Creation of new scenario} +\paragraph{Usage of pre-define scenarios} +\subsection{The fastNLOCreate steering card} +\subsubsection{Generator specific keys} +\subsubsection{Process specific keys} +\subsubsection{Scenario specific keys} + +\subsection{Table creation} +\subsubsection{Warmup run} +\subsubsection{Running order by order separately} + +\subsection{Contribution flags} +additive + +multiplicative + +data + +non-perturbative corrections + +fixed-order + +etc... + +\subsection{Merging tables} +\subsubsection{fastNLO programs} +\paragraph{fnlo-tk-merge} +\paragraph{fnlo-tk-append} +\subsubsection{fastNLO c++ functionality} + +\subsection{Modifying tables} +\subsubsection{fastNLO stand-alone programs} +Not much available at the moment. Once we had the `fnlo-modifier', but this is not ported to the toolkit. +Maybe we have to provide some few functions for, e.g., removing data points, changing the binwidth, etc... +\subsubsection{fastNLO function calls} +USE THEM WITH CARE ! + +\subsection{Evaluation of a fastNLO table: Cross section calculation} +\subsubsection{Requirements} +\subsubsection{fastNLO stand-alone programs using LHAPDF} +\paragraph{fnlo-tk-cppread} +\paragraph{fnlo-tk-example} + +\paragraph{fnlo-tk-minexample} + +\subsubsection{fastNLO c++ functionality} + +How to use fastNLOReader: +%\lstinputlisting[label=yourLabel,caption=Your caption]{ +%%sourceCode/yourcode.c} + +% \begin{lstlisting}[language=C++]{Name=test2} +% /* +% * Project: ATFOC -> Autonomous Trainer For Object Classification +% * Name: Main.cc +% * Autor: Bla Blub +% * Date: 03.09.2013 +% * Description: main class for +% * 1) executing a web search for images and store them +% * 2) and image comparison to filter good from bad samples +% */ + +% #include ``stdafx.h'' + +% #include ``WebSearch.h'' +% #include ``ImageComparison.h'' + +% using namespace std; + +% #define NUMBER_OF_IMAGES 50 // default +% #define NUMBER_OF_QUERIES 3 // default + +% int main(int argc, char** argv) +% { +% vector<string> input_vector; +% string input; + +% uint i; + +% \end{lstlisting} + + +\paragraph{Inheritance structure of fastNLOReader} +\paragraph{fastNLOReader} +\subsubsection{Predefined fastNLOReader interfaces} +\paragraph{LHAPDF6} +\paragraph{QCDNUM} +\paragraph{Hoppet} +\subsection{Implementing a new PDF interface} +\subsection{Implementing a new $\alpha_s$ evolution code} + +\subsection{Python interface to fastNLOReader} + +\subsection{Rivet and YODA interface to fastNLOReader} + +\subsection{Independent Fortran reading code} + + +\clearpage +\appendix +\section{JHEP example} +\label{sec:intro} + +For internal references use label-refs: see section~\ref{sec:intro}. +Bibliographic citations can be done with cite: refs.~\cite{a,b,c}. +When possible, align equations on the equal sign. The package +\texttt{amsmath} is already loaded. See \eqref{eq:x}. +\begin{equation} +\label{eq:x} +\begin{split} +x &= 1 \,, +\qquad +y = 2 \,, +\\ +z &= 3 \,. +\end{split} +\end{equation} +Also, watch out for the punctuation at the end of the equations. + + +If you want some equations without the tag (number), please use the available +starred-environments. For example: +\begin{equation*} +x = 1 +\end{equation*} + +The amsmath package has many features. For example, you can use use +\texttt{subequations} environment: +\begin{subequations}\label{eq:y} +\begin{align} +\label{eq:y:1} +a & = 1 +\\ +\label{eq:y:2} +b & = 2 +\end{align} +and it will continue to operate across the text also. +\begin{equation} +\label{eq:y:3} +c = 3 +\end{equation} +\end{subequations} +The references will work as you'd expect: \eqref{eq:y:1}, +\eqref{eq:y:2} and \eqref{eq:y:3} are all part of \eqref{eq:y}. + +A similar solution is available for figures via the \texttt{subfigure} +package (not loaded by default and not shown here). +All figures and tables should be referenced in the text and should be +placed at the top of the page where they are first cited or in +subsequent pages. Positioning them in the source file +after the paragraph where you first reference them usually yield good +results. See figure~\ref{fig:i} and table~\ref{tab:i}. + +\begin{figure}[tbp] +\centering % \begin{center}/\end{center} takes some additional vertical space +%\includegraphics[width=.45\textwidth,trim=0 380 0 200,clip]{img1.pdf} +\hfill +%\includegraphics[width=.45\textwidth,origin=c,angle=180]{img2.pdf} +% "\includegraphics" is very powerful; the graphicx package is already loaded +\caption{\label{fig:i} Always give a caption.} +\end{figure} + +\begin{table}[tbp] +\centering +\begin{tabular}{|lr|c|} +\hline +x&y&x and y\\ +\hline +a & b & a and b\\ +1 & 2 & 1 and 2\\ +$\alpha$ & $\beta$ & $\alpha$ and $\beta$\\ +\hline +\end{tabular} +\caption{\label{tab:i} We prefer to have borders around the tables.} +\end{table} + +We discourage the use of inline figures (wrapfigure), as they may be +difficult to position if the page layout changes. + +We suggest not to abbreviate: ``section'', ``appendix'', ``figure'' +and ``table'', but ``eq.'' and ``ref.'' are welcome. Also, please do +not use \texttt{\textbackslash emph} or \texttt{\textbackslash it} for +latin abbreviaitons: i.e., et al., e.g., vs., etc. + +\subsection{And subsequent} +\subsubsection{Sub-sections} +\paragraph{Up to paragraphs.} We find that having more levels usually +reduces the clarity of the article. Also, we strongly discourage the +use of non-numbered sections (e.g.~\texttt{\textbackslash +subsubsection*}). Please also see the use of +``\texttt{\textbackslash texorpdfstring\{\}\{\}}'' to avoid warnings +from the hyperref package when you have math in the section titles + +\acknowledgments + +This is the most common positions for acknowledgments. A macro is +available to maintain the same layout and spelling of the heading. + +\paragraph{Note added.} This is also a good position for notes added +after the paper has been written. + + + + + +% The bibliography will probably be heavily edited during typesetting. +% We'll parse it and, using the arxiv number or the journal data, will +% query inspire, trying to verify the data (this will probalby spot +% eventual typos) and retrive the document DOI and eventual errata. +% We however suggest to always provide author, title and journal data: +% in short all the informations that clearly identify a document. + +\begin{thebibliography}{99} + +\bibitem{a} +Author, \emph{Title}, \emph{J. Abbrev.} {\bf vol} (year) pg. + +\bibitem{b} +Author, \emph{Title}, +arxiv:1234.5678. + +\bibitem{c} +Author, \emph{Title}, +Publisher (year). + + +% Please avoid comments such as "For a review'', "For some examples", +% "and references therein" or move them in the text. In general, +% please leave only references in the bibliography and move all +% accessory text in footnotes. + +% Also, please have only one work for each \bibitem. + + +\end{thebibliography} +\end{document} diff --git a/v2.6/toolkit/doc/paper/jheppub.sty b/v2.6/toolkit/doc/paper/jheppub.sty new file mode 100644 index 0000000000000000000000000000000000000000..c787a75ed6f8798144263982b1dacad7c0b81089 --- /dev/null +++ b/v2.6/toolkit/doc/paper/jheppub.sty @@ -0,0 +1,372 @@ +%% jheppub.sty +%% Copyright 2013 SISSA Medialab +% +% This work may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status `author-maintained'. +% +% The Current Maintainer of this work is +% SISSA Medialab <info@medialab.sissa.it> +% +% This work consists of the file jheppub.sty. +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{jheppub}[2013/03/21 r534] + + +\gdef\@fpheader{Prepared for submission to JHEP} +\gdef\@journal{jhep} + +\RequirePackage{amsmath} +\RequirePackage{amssymb} +\RequirePackage{epsfig} +\RequirePackage{graphicx} +\RequirePackage[numbers,sort&compress]{natbib} +\RequirePackage{color} +\RequirePackage[colorlinks=true +,urlcolor=blue +,anchorcolor=blue +,citecolor=blue +,filecolor=blue +,linkcolor=blue +,menucolor=blue +,pagecolor=blue +,linktocpage=true +,pdfproducer=medialab +% Option not available in LaTeX of SLC6 +%,pdfa=true +]{hyperref} + +\newif\ifnotoc\notocfalse +\newif\ifemailadd\emailaddfalse +\newif\iftoccontinuous\toccontinuousfalse + +\def\@subheader{\@empty} +\def\@keywords{\@empty} +\def\@abstract{\@empty} +\def\@xtum{\@empty} +\def\@dedicated{\@empty} +\def\@arxivnumber{\@empty} +\def\@collaboration{\@empty} +\def\@collaborationImg{\@empty} +\def\@proceeding{\@empty} +\def\@preprint{\@empty} + +\newcommand{\subheader}[1]{\gdef\@subheader{#1}} +\newcommand{\keywords}[1]{\if!\@keywords!\gdef\@keywords{#1}\else% +\PackageWarningNoLine{\jname}{Keywords already defined.\MessageBreak Ignoring last definition.}\fi} +\renewcommand{\abstract}[1]{\gdef\@abstract{#1}} +\newcommand{\dedicated}[1]{\gdef\@dedicated{#1}} +\newcommand{\arxivnumber}[1]{\gdef\@arxivnumber{#1}} +\newcommand{\proceeding}[1]{\gdef\@proceeding{#1}} +\newcommand{\xtumfont}[1]{\textsc{#1}} +\newcommand{\correctionref}[3]{\gdef\@xtum{\xtumfont{#1} \href{#2}{#3}}} +\newcommand\jname{JHEP} +\newcommand\acknowledgments{\section*{Acknowledgments}} +\newcommand\notoc{\notoctrue} +\newcommand\preprint[1]{\gdef\@preprint{\hfill #1}} + + + +%Equivalent to ``\footnote'', but can be used inside the \author macro +% because it does not write the footnote mark +% it has an optional argument that will be used as footnote mark when given +% WARNING: when the optional argument is used, the footnotecounter is not increased +% WARNING: the character ``!'' cannot be used. +% If you really need it use somthing like [\relax !] as the optional arg. +\newcommand\note[2][]{% +\if!#1!% +\stepcounter{footnote}\footnotetext{#2}% +\else% +{\renewcommand\thefootnote{#1}% +\footnotetext{#2}}% +\fi} + + + +%Use this if you want to try to keep some piece of the abstract on a +%very long first page +\newcommand\compress{% +\renewcommand\afterProceedingsSpace{\bigskip}% +\renewcommand\afterTitleSpace{\bigskip}% +\renewcommand\afterRuleSpace{\bigskip\bigskip} +\renewcommand\afterEmailSpace{\par\bigskip}} + +%authors and affiliations +\newtoks\auth@toks +\renewcommand{\author}[2][]{% + \if!#1!% + \auth@toks=\expandafter{\the\auth@toks#2\ }% + \else + \auth@toks=\expandafter{\the\auth@toks#2$^{#1}$\ }% + \fi +} + +\newtoks\affil@toks\newif\ifaffil\affilfalse +\newcommand{\affiliation}[2][]{% +\affiltrue + \if!#1!% + \affil@toks=\expandafter{\the\affil@toks{\item[]#2}}% + \else + \affil@toks=\expandafter{\the\affil@toks{\item[$^{#1}$]#2}}% + \fi +} + +%emails +%automatically put a comma between emails +\newtoks\email@toks\newcounter{email@counter}% +\setcounter{email@counter}{0}% +\newcommand{\emailAdd}[1]{% +\emailaddtrue% +\ifnum\theemail@counter>0\email@toks=\expandafter{\the\email@toks, \@email{#1}}% +\else\email@toks=\expandafter{\the\email@toks\@email{#1}}% +\fi\stepcounter{email@counter}} +\newcommand{\@email}[1]{\href{mailto:#1}{\tt #1}} + + +% Collaboration macros +\newcommand*\collaboration[1]{\gdef\@collaboration{#1}} +\newcommand*\collaborationImg[2][]{\gdef\@collaborationImg{#2}} + +%all pieces get a ``after'' spacing +\newcommand\afterLogoSpace{\smallskip} +\newcommand\afterSubheaderSpace{\vskip3pt plus 2pt minus 1pt} +\newcommand\afterProceedingsSpace{\vskip21pt plus0.4fil minus15pt} +\newcommand\afterTitleSpace{\vskip23pt plus0.06fil minus13pt} +\newcommand\afterRuleSpace{\vskip23pt plus0.06fil minus13pt} +\newcommand\afterCollaborationSpace{\vskip3pt plus 2pt minus 1pt} +\newcommand\afterCollaborationImgSpace{\vskip3pt plus 2pt minus 1pt} +\newcommand\afterAuthorSpace{\vskip5pt plus4pt minus4pt} +\newcommand\afterAffiliationSpace{\vskip3pt plus3pt} +\newcommand\afterEmailSpace{\vskip16pt plus9pt minus10pt\filbreak} +\newcommand\afterXtumSpace{\par\bigskip} +\newcommand\afterAbstractSpace{\vskip16pt plus9pt minus13pt} +\newcommand\afterKeywordsSpace{\vskip16pt plus9pt minus13pt} +\newcommand\afterArxivSpace{\vskip3pt plus0.01fil minus10pt} +\newcommand\afterDedicatedSpace{\vskip0pt plus0.01fil} +\newcommand\afterTocSpace{\bigskip\medskip} +\newcommand\afterTocRuleSpace{\bigskip\bigskip} +%this is the ``itemsep'' of the affiliations list +\newlength{\affiliationsSep}\setlength{\affiliationsSep}{-3pt} +%this hook is needed if the toc starts on the first page +\newcommand\beforetochook{\pagestyle{myplain}\pagenumbering{roman}} + +\DeclareFixedFont\trfont{OT1}{phv}{b}{sc}{11} + +%first page +\renewcommand\maketitle{ +%% First page +\pagestyle{empty} +\thispagestyle{titlepage} +\setcounter{page}{0} +\noindent{\small\scshape\@fpheader}\@preprint\par +\afterLogoSpace +% Subheader +\if!\@subheader!\else\noindent{\trfont{\@subheader}}\fi +\afterSubheaderSpace +% Proceedings +\if!\@proceeding!\else\noindent{\sc\@proceeding}\fi +\afterProceedingsSpace +% Title +{\LARGE\flushleft\sffamily\bfseries\@title\par} +\afterTitleSpace +% Rule +\hrule height 1.5\p@% +\afterRuleSpace +% Collaboration +\if!\@collaboration!\else +{\Large\bfseries\sffamily\raggedright\@collaboration}\par +\afterCollaborationSpace +\fi +% +\if!\@collaborationImg!\else +{\normalsize\bfseries\sffamily\raggedright\@collaborationImg}\par +\afterCollaborationImgSpace +%% I leave the size and font so that if there are two collaboration +%% they can be linked with an 'and' +\fi +% Author +{\bfseries\raggedright\sffamily\the\auth@toks\par} +\afterAuthorSpace +% Affiliation +\ifaffil\begin{list}{}{% +\setlength{\leftmargin}{0.28cm}% +\setlength{\labelsep}{0pt}% +\setlength{\itemsep}{\affiliationsSep}% +\setlength{\topsep}{-\parskip}} +\itshape\small% +\the\affil@toks +\end{list}\fi +\afterAffiliationSpace +% E-mail +\ifemailadd %% if emailadd is true +\noindent\hspace{0.28cm}\begin{minipage}[l]{.9\textwidth} +\begin{flushleft} +\textit{E-mail:} \the\email@toks +\end{flushleft} +\end{minipage} +\else %% if emailaddfalse do nothing +\PackageWarningNoLine{\jname}{E-mails are missing.\MessageBreak Plese use \protect\emailAdd\space macro to provide e-mails.} +\fi +\afterEmailSpace +%Erratum or addendum +\if!\@xtum!\else\noindent{\@xtum}\afterXtumSpace\fi +% Abstract +\if!\@abstract!\else\noindent{\renewcommand\baselinestretch{.9}\textsc{Abstract:}}\ \@abstract\afterAbstractSpace\fi +% Keywords +\if!\@keywords!\else\noindent{\textsc{Keywords:}} \@keywords\afterKeywordsSpace\fi +% Arxivnumber +\if!\@arxivnumber!\else\noindent{\textsc{ArXiv ePrint:}} \href{http://arxiv.org/abs/\@arxivnumber}{\@arxivnumber}\afterArxivSpace\fi +% Dedication +\if!\@dedicated!\else\vbox{\small\it\raggedleft\@dedicated}\afterDedicatedSpace\fi +% +\ifnotoc\else +\iftoccontinuous\else\newpage\fi +\beforetochook\hrule +\tableofcontents +\afterTocSpace +\hrule +\afterTocRuleSpace +\fi +\setcounter{footnote}{0} +\pagestyle{myplain}\pagenumbering{arabic} +} % close the \renewcommand\maketitle{ + + +% Page layout +\renewcommand{\baselinestretch}{1.1}\normalsize +\setlength\lineskip{1\p@} +\setlength\parindent{1.2\parindent} +\setlength\normallineskip{1\p@} +\setlength\parskip{0\p@ \@plus \p@} +\@lowpenalty 51 +\@medpenalty 151 +\@highpenalty 301 +\widowpenalty 1000 +\clubpenalty 1000 + +\setcounter{topnumber}{4} +\renewcommand\topfraction{1} +\setcounter{bottomnumber}{1} +\renewcommand\bottomfraction{.6} +\setcounter{totalnumber}{5} +\renewcommand\textfraction{0} +\renewcommand\floatpagefraction{1} + +\textwidth .72\paperwidth +\setlength\@tempdima{.76\paperheight} +\divide\@tempdima\baselineskip +\@tempcnta=\@tempdima +\setlength\textheight{\@tempcnta\baselineskip} +\addtolength\textheight{\topskip} + +\voffset -1in +\topmargin .05\paperheight +\headheight .02\paperheight +\headsep .03\paperheight +\footskip .07\paperheight + +\marginparsep 9\p@ +\marginparpush 6\p@ + +\hoffset -1in +\oddsidemargin .14\paperwidth +\evensidemargin .14\paperwidth +\marginparwidth .11\paperwidth + +\setlength\arraycolsep{2\p@} +\setlength\tabcolsep{6\p@} +\setlength\arrayrulewidth{.4\p@} +\setlength\doublerulesep{2\p@} +\setlength\tabbingsep{\labelsep} +\skip\@mpfootins = \skip\footins +\setlength\fboxsep{3\p@} +\setlength\fboxrule{.4\p@} + +% No dots in the table of contents +\renewcommand{\@dotsep}{10000} + +% Footer and header of the body +% the command ``\pagestyle{myplain}'' must be inserted +% just after ``\begin{document}'' +\newcommand\ps@myplain{ +\pagenumbering{arabic} +\renewcommand\@oddfoot{\hfill-- \thepage\ --\hfill} +\renewcommand\@oddhead{}} +\let\ps@plain=\ps@myplain + + + +% no header or footer in the title page +\newcommand\ps@titlepage{\renewcommand\@oddfoot{}\renewcommand\@oddhead{}} + + + +%number equations after the sections +\renewcommand{\theequation}{\thesection.\arabic{equation}} +\numberwithin{equation}{section} + + +%headings style +\renewcommand\section{\@startsection{section}{1}{\z@}% + {-3.5ex \@plus -1.3ex \@minus -.7ex}% + {2.3ex \@plus.4ex \@minus .4ex}% + {\normalfont\large\bfseries}} +\renewcommand\subsection{\@startsection{subsection}{2}{\z@}% + {-2.3ex\@plus -1ex \@minus -.5ex}% + {1.2ex \@plus .3ex \@minus .3ex}% + {\normalfont\normalsize\bfseries}} +\renewcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}% + {-2.3ex\@plus -1ex \@minus -.5ex}% + {1ex \@plus .2ex \@minus .2ex}% + {\normalfont\normalsize\bfseries}} +\renewcommand\paragraph{\@startsection{paragraph}{4}{\z@}% + {1.75ex \@plus1ex \@minus.2ex}% + {-1em}% + {\normalfont\normalsize\bfseries}} +\renewcommand\subparagraph{\@startsection{subparagraph}{5}{\parindent}% + {1.75ex \@plus1ex \@minus .2ex}% + {-1em}% + {\normalfont\normalsize\bfseries}} + + +%Caption of figure and table +\def\fnum@figure{\textbf{\figurename\nobreakspace\thefigure}} +\def\fnum@table{\textbf{\tablename\nobreakspace\thetable}} + +%redefining \@makecaption, to have captions with \small font size +%taken from article.cls l.489--498 +%the only differences are the ``\small '' commands added on two lines +\long\def\@makecaption#1#2{% + \vskip\abovecaptionskip + \sbox\@tempboxa{\small #1. #2}% + \ifdim \wd\@tempboxa >\hsize + \small #1. #2\par + \else + \global \@minipagefalse + \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}% + \fi + \vskip\belowcaptionskip} + + + + + +%apply some formatting on the biblio +%without redefining the whole env +\let\oldthebibliography=\thebibliography +\let\endoldthebibliography=\endthebibliography +\renewenvironment{thebibliography}[1]{% +\begin{oldthebibliography}{#1}% +\small% +\raggedright% +\setlength{\itemsep}{5pt plus 0.2ex minus 0.05ex}% +}% +{% +\end{oldthebibliography}% +} diff --git a/v2.6/toolkit/doc/paper/jheppub.sty.orig b/v2.6/toolkit/doc/paper/jheppub.sty.orig new file mode 100644 index 0000000000000000000000000000000000000000..95efdc965281743499407143187073b6614d84e5 --- /dev/null +++ b/v2.6/toolkit/doc/paper/jheppub.sty.orig @@ -0,0 +1,371 @@ +%% jheppub.sty +%% Copyright 2013 SISSA Medialab +% +% This work may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either version 1.3 +% of this license or (at your option) any later version. +% The latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of LaTeX +% version 2005/12/01 or later. +% +% This work has the LPPL maintenance status `author-maintained'. +% +% The Current Maintainer of this work is +% SISSA Medialab <info@medialab.sissa.it> +% +% This work consists of the file jheppub.sty. +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{jheppub}[2013/03/21 r534] + + +\gdef\@fpheader{Prepared for submission to JHEP} +\gdef\@journal{jhep} + +\RequirePackage{amsmath} +\RequirePackage{amssymb} +\RequirePackage{epsfig} +\RequirePackage{graphicx} +\RequirePackage[numbers,sort&compress]{natbib} +\RequirePackage{color} +\RequirePackage[colorlinks=true +,urlcolor=blue +,anchorcolor=blue +,citecolor=blue +,filecolor=blue +,linkcolor=blue +,menucolor=blue +,pagecolor=blue +,linktocpage=true +,pdfproducer=medialab +,pdfa=true +]{hyperref} + +\newif\ifnotoc\notocfalse +\newif\ifemailadd\emailaddfalse +\newif\iftoccontinuous\toccontinuousfalse + +\def\@subheader{\@empty} +\def\@keywords{\@empty} +\def\@abstract{\@empty} +\def\@xtum{\@empty} +\def\@dedicated{\@empty} +\def\@arxivnumber{\@empty} +\def\@collaboration{\@empty} +\def\@collaborationImg{\@empty} +\def\@proceeding{\@empty} +\def\@preprint{\@empty} + +\newcommand{\subheader}[1]{\gdef\@subheader{#1}} +\newcommand{\keywords}[1]{\if!\@keywords!\gdef\@keywords{#1}\else% +\PackageWarningNoLine{\jname}{Keywords already defined.\MessageBreak Ignoring last definition.}\fi} +\renewcommand{\abstract}[1]{\gdef\@abstract{#1}} +\newcommand{\dedicated}[1]{\gdef\@dedicated{#1}} +\newcommand{\arxivnumber}[1]{\gdef\@arxivnumber{#1}} +\newcommand{\proceeding}[1]{\gdef\@proceeding{#1}} +\newcommand{\xtumfont}[1]{\textsc{#1}} +\newcommand{\correctionref}[3]{\gdef\@xtum{\xtumfont{#1} \href{#2}{#3}}} +\newcommand\jname{JHEP} +\newcommand\acknowledgments{\section*{Acknowledgments}} +\newcommand\notoc{\notoctrue} +\newcommand\preprint[1]{\gdef\@preprint{\hfill #1}} + + + +%Equivalent to ``\footnote'', but can be used inside the \author macro +% because it does not write the footnote mark +% it has an optional argument that will be used as footnote mark when given +% WARNING: when the optional argument is used, the footnotecounter is not increased +% WARNING: the character ``!'' cannot be used. +% If you really need it use somthing like [\relax !] as the optional arg. +\newcommand\note[2][]{% +\if!#1!% +\stepcounter{footnote}\footnotetext{#2}% +\else% +{\renewcommand\thefootnote{#1}% +\footnotetext{#2}}% +\fi} + + + +%Use this if you want to try to keep some piece of the abstract on a +%very long first page +\newcommand\compress{% +\renewcommand\afterProceedingsSpace{\bigskip}% +\renewcommand\afterTitleSpace{\bigskip}% +\renewcommand\afterRuleSpace{\bigskip\bigskip} +\renewcommand\afterEmailSpace{\par\bigskip}} + +%authors and affiliations +\newtoks\auth@toks +\renewcommand{\author}[2][]{% + \if!#1!% + \auth@toks=\expandafter{\the\auth@toks#2\ }% + \else + \auth@toks=\expandafter{\the\auth@toks#2$^{#1}$\ }% + \fi +} + +\newtoks\affil@toks\newif\ifaffil\affilfalse +\newcommand{\affiliation}[2][]{% +\affiltrue + \if!#1!% + \affil@toks=\expandafter{\the\affil@toks{\item[]#2}}% + \else + \affil@toks=\expandafter{\the\affil@toks{\item[$^{#1}$]#2}}% + \fi +} + +%emails +%automatically put a comma between emails +\newtoks\email@toks\newcounter{email@counter}% +\setcounter{email@counter}{0}% +\newcommand{\emailAdd}[1]{% +\emailaddtrue% +\ifnum\theemail@counter>0\email@toks=\expandafter{\the\email@toks, \@email{#1}}% +\else\email@toks=\expandafter{\the\email@toks\@email{#1}}% +\fi\stepcounter{email@counter}} +\newcommand{\@email}[1]{\href{mailto:#1}{\tt #1}} + + +% Collaboration macros +\newcommand*\collaboration[1]{\gdef\@collaboration{#1}} +\newcommand*\collaborationImg[2][]{\gdef\@collaborationImg{#2}} + +%all pieces get a ``after'' spacing +\newcommand\afterLogoSpace{\smallskip} +\newcommand\afterSubheaderSpace{\vskip3pt plus 2pt minus 1pt} +\newcommand\afterProceedingsSpace{\vskip21pt plus0.4fil minus15pt} +\newcommand\afterTitleSpace{\vskip23pt plus0.06fil minus13pt} +\newcommand\afterRuleSpace{\vskip23pt plus0.06fil minus13pt} +\newcommand\afterCollaborationSpace{\vskip3pt plus 2pt minus 1pt} +\newcommand\afterCollaborationImgSpace{\vskip3pt plus 2pt minus 1pt} +\newcommand\afterAuthorSpace{\vskip5pt plus4pt minus4pt} +\newcommand\afterAffiliationSpace{\vskip3pt plus3pt} +\newcommand\afterEmailSpace{\vskip16pt plus9pt minus10pt\filbreak} +\newcommand\afterXtumSpace{\par\bigskip} +\newcommand\afterAbstractSpace{\vskip16pt plus9pt minus13pt} +\newcommand\afterKeywordsSpace{\vskip16pt plus9pt minus13pt} +\newcommand\afterArxivSpace{\vskip3pt plus0.01fil minus10pt} +\newcommand\afterDedicatedSpace{\vskip0pt plus0.01fil} +\newcommand\afterTocSpace{\bigskip\medskip} +\newcommand\afterTocRuleSpace{\bigskip\bigskip} +%this is the ``itemsep'' of the affiliations list +\newlength{\affiliationsSep}\setlength{\affiliationsSep}{-3pt} +%this hook is needed if the toc starts on the first page +\newcommand\beforetochook{\pagestyle{myplain}\pagenumbering{roman}} + +\DeclareFixedFont\trfont{OT1}{phv}{b}{sc}{11} + +%first page +\renewcommand\maketitle{ +%% First page +\pagestyle{empty} +\thispagestyle{titlepage} +\setcounter{page}{0} +\noindent{\small\scshape\@fpheader}\@preprint\par +\afterLogoSpace +% Subheader +\if!\@subheader!\else\noindent{\trfont{\@subheader}}\fi +\afterSubheaderSpace +% Proceedings +\if!\@proceeding!\else\noindent{\sc\@proceeding}\fi +\afterProceedingsSpace +% Title +{\LARGE\flushleft\sffamily\bfseries\@title\par} +\afterTitleSpace +% Rule +\hrule height 1.5\p@% +\afterRuleSpace +% Collaboration +\if!\@collaboration!\else +{\Large\bfseries\sffamily\raggedright\@collaboration}\par +\afterCollaborationSpace +\fi +% +\if!\@collaborationImg!\else +{\normalsize\bfseries\sffamily\raggedright\@collaborationImg}\par +\afterCollaborationImgSpace +%% I leave the size and font so that if there are two collaboration +%% they can be linked with an 'and' +\fi +% Author +{\bfseries\raggedright\sffamily\the\auth@toks\par} +\afterAuthorSpace +% Affiliation +\ifaffil\begin{list}{}{% +\setlength{\leftmargin}{0.28cm}% +\setlength{\labelsep}{0pt}% +\setlength{\itemsep}{\affiliationsSep}% +\setlength{\topsep}{-\parskip}} +\itshape\small% +\the\affil@toks +\end{list}\fi +\afterAffiliationSpace +% E-mail +\ifemailadd %% if emailadd is true +\noindent\hspace{0.28cm}\begin{minipage}[l]{.9\textwidth} +\begin{flushleft} +\textit{E-mail:} \the\email@toks +\end{flushleft} +\end{minipage} +\else %% if emailaddfalse do nothing +\PackageWarningNoLine{\jname}{E-mails are missing.\MessageBreak Plese use \protect\emailAdd\space macro to provide e-mails.} +\fi +\afterEmailSpace +%Erratum or addendum +\if!\@xtum!\else\noindent{\@xtum}\afterXtumSpace\fi +% Abstract +\if!\@abstract!\else\noindent{\renewcommand\baselinestretch{.9}\textsc{Abstract:}}\ \@abstract\afterAbstractSpace\fi +% Keywords +\if!\@keywords!\else\noindent{\textsc{Keywords:}} \@keywords\afterKeywordsSpace\fi +% Arxivnumber +\if!\@arxivnumber!\else\noindent{\textsc{ArXiv ePrint:}} \href{http://arxiv.org/abs/\@arxivnumber}{\@arxivnumber}\afterArxivSpace\fi +% Dedication +\if!\@dedicated!\else\vbox{\small\it\raggedleft\@dedicated}\afterDedicatedSpace\fi +% +\ifnotoc\else +\iftoccontinuous\else\newpage\fi +\beforetochook\hrule +\tableofcontents +\afterTocSpace +\hrule +\afterTocRuleSpace +\fi +\setcounter{footnote}{0} +\pagestyle{myplain}\pagenumbering{arabic} +} % close the \renewcommand\maketitle{ + + +% Page layout +\renewcommand{\baselinestretch}{1.1}\normalsize +\setlength\lineskip{1\p@} +\setlength\parindent{1.2\parindent} +\setlength\normallineskip{1\p@} +\setlength\parskip{0\p@ \@plus \p@} +\@lowpenalty 51 +\@medpenalty 151 +\@highpenalty 301 +\widowpenalty 1000 +\clubpenalty 1000 + +\setcounter{topnumber}{4} +\renewcommand\topfraction{1} +\setcounter{bottomnumber}{1} +\renewcommand\bottomfraction{.6} +\setcounter{totalnumber}{5} +\renewcommand\textfraction{0} +\renewcommand\floatpagefraction{1} + +\textwidth .72\paperwidth +\setlength\@tempdima{.76\paperheight} +\divide\@tempdima\baselineskip +\@tempcnta=\@tempdima +\setlength\textheight{\@tempcnta\baselineskip} +\addtolength\textheight{\topskip} + +\voffset -1in +\topmargin .05\paperheight +\headheight .02\paperheight +\headsep .03\paperheight +\footskip .07\paperheight + +\marginparsep 9\p@ +\marginparpush 6\p@ + +\hoffset -1in +\oddsidemargin .14\paperwidth +\evensidemargin .14\paperwidth +\marginparwidth .11\paperwidth + +\setlength\arraycolsep{2\p@} +\setlength\tabcolsep{6\p@} +\setlength\arrayrulewidth{.4\p@} +\setlength\doublerulesep{2\p@} +\setlength\tabbingsep{\labelsep} +\skip\@mpfootins = \skip\footins +\setlength\fboxsep{3\p@} +\setlength\fboxrule{.4\p@} + +% No dots in the table of contents +\renewcommand{\@dotsep}{10000} + +% Footer and header of the body +% the command ``\pagestyle{myplain}'' must be inserted +% just after ``\begin{document}'' +\newcommand\ps@myplain{ +\pagenumbering{arabic} +\renewcommand\@oddfoot{\hfill-- \thepage\ --\hfill} +\renewcommand\@oddhead{}} +\let\ps@plain=\ps@myplain + + + +% no header or footer in the title page +\newcommand\ps@titlepage{\renewcommand\@oddfoot{}\renewcommand\@oddhead{}} + + + +%number equations after the sections +\renewcommand{\theequation}{\thesection.\arabic{equation}} +\numberwithin{equation}{section} + + +%headings style +\renewcommand\section{\@startsection{section}{1}{\z@}% + {-3.5ex \@plus -1.3ex \@minus -.7ex}% + {2.3ex \@plus.4ex \@minus .4ex}% + {\normalfont\large\bfseries}} +\renewcommand\subsection{\@startsection{subsection}{2}{\z@}% + {-2.3ex\@plus -1ex \@minus -.5ex}% + {1.2ex \@plus .3ex \@minus .3ex}% + {\normalfont\normalsize\bfseries}} +\renewcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}% + {-2.3ex\@plus -1ex \@minus -.5ex}% + {1ex \@plus .2ex \@minus .2ex}% + {\normalfont\normalsize\bfseries}} +\renewcommand\paragraph{\@startsection{paragraph}{4}{\z@}% + {1.75ex \@plus1ex \@minus.2ex}% + {-1em}% + {\normalfont\normalsize\bfseries}} +\renewcommand\subparagraph{\@startsection{subparagraph}{5}{\parindent}% + {1.75ex \@plus1ex \@minus .2ex}% + {-1em}% + {\normalfont\normalsize\bfseries}} + + +%Caption of figure and table +\def\fnum@figure{\textbf{\figurename\nobreakspace\thefigure}} +\def\fnum@table{\textbf{\tablename\nobreakspace\thetable}} + +%redefining \@makecaption, to have captions with \small font size +%taken from article.cls l.489--498 +%the only differences are the ``\small '' commands added on two lines +\long\def\@makecaption#1#2{% + \vskip\abovecaptionskip + \sbox\@tempboxa{\small #1. #2}% + \ifdim \wd\@tempboxa >\hsize + \small #1. #2\par + \else + \global \@minipagefalse + \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}% + \fi + \vskip\belowcaptionskip} + + + + + +%apply some formatting on the biblio +%without redefining the whole env +\let\oldthebibliography=\thebibliography +\let\endoldthebibliography=\endthebibliography +\renewenvironment{thebibliography}[1]{% +\begin{oldthebibliography}{#1}% +\small% +\raggedright% +\setlength{\itemsep}{5pt plus 0.2ex minus 0.05ex}% +}% +{% +\end{oldthebibliography}% +} diff --git a/v2.6/toolkit/doxygen.cfg b/v2.6/toolkit/doxygen.cfg new file mode 100644 index 0000000000000000000000000000000000000000..f3f91ef406ec2a416857b858aff659c096977125 --- /dev/null +++ b/v2.6/toolkit/doxygen.cfg @@ -0,0 +1,2443 @@ +# Doxyfile 1.8.13 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project. +# +# All text after a double hash (##) is considered a comment and is placed in +# front of the TAG it is preceding. +# +# All text after a single hash (#) is considered a comment and will be ignored. +# The format is: +# TAG = value [value, ...] +# For lists, items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (\" \"). + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all text +# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv +# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv +# for the list of possible encodings. +# The default value is: UTF-8. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by +# double-quotes, unless you are using Doxywizard) that should identify the +# project for which the documentation is generated. This name is used in the +# title of most generated pages and in a few other places. +# The default value is: My Project. + +PROJECT_NAME = $(PROJECT) + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. This +# could be handy for archiving the generated documentation or if some version +# control system is used. + +PROJECT_NUMBER = $(VERSION)-$(GITREV) + +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer a +# quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = "fast pQCD calculations for hadron-induced processes" + +# With the PROJECT_LOGO tag one can specify a logo or an icon that is included +# in the documentation. The maximum height of the logo should not exceed 55 +# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy +# the logo to the output directory. + +PROJECT_LOGO = doc/doxygen/../fig/fastNLO_logo_200x50.png + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path +# into which the generated documentation will be written. If a relative path is +# entered, it will be relative to the location where doxygen was started. If +# left blank the current directory will be used. + +OUTPUT_DIRECTORY = doc/doxygen + +# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- +# directories (in 2 levels) under the output directory of each output format and +# will distribute the generated files over these directories. Enabling this +# option can be useful when feeding doxygen a huge amount of source files, where +# putting all generated files in the same directory would otherwise causes +# performance problems for the file system. +# The default value is: NO. + +CREATE_SUBDIRS = NO + +# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII +# characters to appear in the names of generated files. If set to NO, non-ASCII +# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode +# U+3044. +# The default value is: NO. + +ALLOW_UNICODE_NAMES = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, +# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), +# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, +# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), +# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, +# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, +# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, +# Ukrainian and Vietnamese. +# The default value is: English. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member +# descriptions after the members that are listed in the file and class +# documentation (similar to Javadoc). Set to NO to disable this. +# The default value is: YES. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief +# description of a member or function before the detailed description +# +# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. +# The default value is: YES. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator that is +# used to form the text in various listings. Each string in this list, if found +# as the leading text of the brief description, will be stripped from the text +# and the result, after processing the whole list, is used as the annotated +# text. Otherwise, the brief description is used as-is. If left blank, the +# following values are used ($name is automatically replaced with the name of +# the entity):The $name class, The $name widget, The $name file, is, provides, +# specifies, contains, represents, a, an and the. + +ABBREVIATE_BRIEF = + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# doxygen will generate a detailed section even if there is only a brief +# description. +# The default value is: NO. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. +# The default value is: NO. + +INLINE_INHERITED_MEMB = NO + +# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path +# before files name in the file list and in the header files. If set to NO the +# shortest path that makes the file name unique will be used +# The default value is: YES. + +FULL_PATH_NAMES = YES + +# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. +# Stripping is only done if one of the specified strings matches the left-hand +# part of the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the path to +# strip. +# +# Note that you can specify absolute paths here, but also relative paths, which +# will be relative from the directory where doxygen is started. +# This tag requires that the tag FULL_PATH_NAMES is set to YES. + +STRIP_FROM_PATH = $(SRCDIR) + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the +# path mentioned in the documentation of a class, which tells the reader which +# header file to include in order to use a class. If left blank only the name of +# the header file containing the class definition is used. Otherwise one should +# specify the list of include paths that are normally passed to the compiler +# using the -I flag. + +STRIP_FROM_INC_PATH = $(SRCDIR) + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but +# less readable) file names. This can be useful is your file systems doesn't +# support long names like on DOS, Mac, or CD-ROM. +# The default value is: NO. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the +# first line (until the first dot) of a Javadoc-style comment as the brief +# description. If set to NO, the Javadoc-style will behave just like regular Qt- +# style comments (thus requiring an explicit @brief command for a brief +# description.) +# The default value is: NO. + +JAVADOC_AUTOBRIEF = NO + +# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first +# line (until the first dot) of a Qt-style comment as the brief description. If +# set to NO, the Qt-style will behave just like regular Qt-style comments (thus +# requiring an explicit \brief command for a brief description.) +# The default value is: NO. + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a +# multi-line C++ special comment block (i.e. a block of //! or /// comments) as +# a brief description. This used to be the default behavior. The new default is +# to treat a multi-line C++ comment block as a detailed description. Set this +# tag to YES if you prefer the old behavior instead. +# +# Note that setting this tag to YES also means that rational rose comments are +# not recognized any more. +# The default value is: NO. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the +# documentation from any documented member that it re-implements. +# The default value is: YES. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new +# page for each member. If set to NO, the documentation of a member will be part +# of the file/class/namespace that contains it. +# The default value is: NO. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen +# uses this value to replace tabs by spaces in code fragments. +# Minimum value: 1, maximum value: 16, default value: 4. + +TAB_SIZE = 2 + +# This tag can be used to specify a number of aliases that act as commands in +# the documentation. An alias has the form: +# name=value +# For example adding +# "sideeffect=@par Side Effects:\n" +# will allow you to put the command \sideeffect (or @sideeffect) in the +# documentation, which will result in a user-defined paragraph with heading +# "Side Effects:". You can put \n's in the value part of an alias to insert +# newlines. + +ALIASES = + +# This tag can be used to specify a number of word-keyword mappings (TCL only). +# A mapping has the form "name=value". For example adding "class=itcl::class" +# will allow you to use the command class in the itcl::class meaning. + +TCL_SUBST = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources +# only. Doxygen will then generate output that is more tailored for C. For +# instance, some of the names that are used will be different. The list of all +# members will be omitted, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or +# Python sources only. Doxygen will then generate output that is more tailored +# for that language. For instance, namespaces will be presented as packages, +# qualified scopes will look different, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources. Doxygen will then generate output that is tailored for Fortran. +# The default value is: NO. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for VHDL. +# The default value is: NO. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given +# extension. Doxygen has a built-in mapping, but you can override or extend it +# using this tag. The format is ext=language, where ext is a file extension, and +# language is one of the parsers supported by doxygen: IDL, Java, Javascript, +# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: +# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: +# Fortran. In the later case the parser tries to guess whether the code is fixed +# or free formatted code, this is the default for Fortran type files), VHDL. For +# instance to make doxygen treat .inc files as Fortran files (default is PHP), +# and .f files as C (default is Fortran), use: inc=Fortran f=C. +# +# Note: For files without extension you can use no_extension as a placeholder. +# +# Note that for custom extensions you also need to set FILE_PATTERNS otherwise +# the files are not read by doxygen. + +EXTENSION_MAPPING = inc=Fortran + +# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments +# according to the Markdown format, which allows for more readable +# documentation. See http://daringfireball.net/projects/markdown/ for details. +# The output of markdown processing is further processed by doxygen, so you can +# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in +# case of backward compatibilities issues. +# The default value is: YES. + +MARKDOWN_SUPPORT = YES + +# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up +# to that level are automatically included in the table of contents, even if +# they do not have an id attribute. +# Note: This feature currently applies only to Markdown headings. +# Minimum value: 0, maximum value: 99, default value: 0. +# This tag requires that the tag MARKDOWN_SUPPORT is set to YES. + +TOC_INCLUDE_HEADINGS = 0 + +# When enabled doxygen tries to link words that correspond to documented +# classes, or namespaces to their corresponding documentation. Such a link can +# be prevented in individual cases by putting a % sign in front of the word or +# globally by setting AUTOLINK_SUPPORT to NO. +# The default value is: YES. + +AUTOLINK_SUPPORT = YES + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should set this +# tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); +# versus func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. +# The default value is: NO. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. +# The default value is: NO. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: +# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen +# will parse them like normal C++ but will assume all classes use public instead +# of private inheritance when no explicit protection keyword is present. +# The default value is: NO. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate +# getter and setter methods for a property. Setting this option to YES will make +# doxygen to replace the get and set methods by a property in the documentation. +# This will only work if the methods are indeed getting or setting a simple +# type. If this is not the case, or you want to show the methods anyway, you +# should set this option to NO. +# The default value is: YES. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. +# The default value is: NO. + +DISTRIBUTE_GROUP_DOC = NO + +# If one adds a struct or class to a group and this option is enabled, then also +# any nested class or struct is added to the same group. By default this option +# is disabled and one has to add nested compounds explicitly via \ingroup. +# The default value is: NO. + +GROUP_NESTED_COMPOUNDS = NO + +# Set the SUBGROUPING tag to YES to allow class member groups of the same type +# (for instance a group of public functions) to be put as a subgroup of that +# type (e.g. under the Public Functions section). Set it to NO to prevent +# subgrouping. Alternatively, this can be done per class using the +# \nosubgrouping command. +# The default value is: YES. + +SUBGROUPING = YES + +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions +# are shown inside the group in which they are included (e.g. using \ingroup) +# instead of on a separate page (for HTML and Man pages) or section (for LaTeX +# and RTF). +# +# Note that this feature does not work in combination with +# SEPARATE_MEMBER_PAGES. +# The default value is: NO. + +INLINE_GROUPED_CLASSES = NO + +# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions +# with only public data fields or simple typedef fields will be shown inline in +# the documentation of the scope in which they are defined (i.e. file, +# namespace, or group documentation), provided this scope is documented. If set +# to NO, structs, classes, and unions are shown on a separate page (for HTML and +# Man pages) or section (for LaTeX and RTF). +# The default value is: NO. + +INLINE_SIMPLE_STRUCTS = NO + +# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or +# enum is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically be +# useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. +# The default value is: NO. + +TYPEDEF_HIDES_STRUCT = NO + +# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This +# cache is used to resolve symbols given their name and scope. Since this can be +# an expensive process and often the same symbol appears multiple times in the +# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small +# doxygen will become slower. If the cache is too large, memory is wasted. The +# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range +# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 +# symbols. At the end of a run doxygen will report the cache usage and suggest +# the optimal cache size from a speed point of view. +# Minimum value: 0, maximum value: 9, default value: 0. + +LOOKUP_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in +# documentation are documented, even if no documentation was available. Private +# class members and static file members will be hidden unless the +# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. +# Note: This will also disable the warnings about undocumented members that are +# normally produced when WARNINGS is set to YES. +# The default value is: NO. + +EXTRACT_ALL = NO + +# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will +# be included in the documentation. +# The default value is: NO. + +EXTRACT_PRIVATE = NO + +# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal +# scope will be included in the documentation. +# The default value is: NO. + +EXTRACT_PACKAGE = NO + +# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be +# included in the documentation. +# The default value is: NO. + +EXTRACT_STATIC = NO + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined +# locally in source files will be included in the documentation. If set to NO, +# only classes defined in header files are included. Does not have any effect +# for Java sources. +# The default value is: YES. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. If set to YES, local methods, +# which are defined in the implementation section but not in the interface are +# included in the documentation. If set to NO, only methods in the interface are +# included. +# The default value is: NO. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base name of +# the file that contains the anonymous namespace. By default anonymous namespace +# are hidden. +# The default value is: NO. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all +# undocumented members inside documented classes or files. If set to NO these +# members will be included in the various overviews, but no documentation +# section is generated. This option has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. If set +# to NO, these classes will be included in the various overviews. This option +# has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend +# (class|struct|union) declarations. If set to NO, these declarations will be +# included in the documentation. +# The default value is: NO. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any +# documentation blocks found inside the body of a function. If set to NO, these +# blocks will be appended to the function's detailed documentation block. +# The default value is: NO. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation that is typed after a +# \internal command is included. If the tag is set to NO then the documentation +# will be excluded. Set it to YES to include the internal documentation. +# The default value is: NO. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file +# names in lower-case letters. If set to YES, upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. +# The default value is: system dependent. + +CASE_SENSE_NAMES = YES + +# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with +# their full class and namespace scopes in the documentation. If set to YES, the +# scope will be hidden. +# The default value is: NO. + +HIDE_SCOPE_NAMES = NO + +# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will +# append additional text to a page's title, such as Class Reference. If set to +# YES the compound reference will be hidden. +# The default value is: NO. + +HIDE_COMPOUND_REFERENCE= NO + +# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of +# the files that are included by a file in the documentation of that file. +# The default value is: YES. + +SHOW_INCLUDE_FILES = YES + +# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each +# grouped member an include statement to the documentation, telling the reader +# which file to include in order to use the member. +# The default value is: NO. + +SHOW_GROUPED_MEMB_INC = NO + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include +# files with double quotes in the documentation rather than with sharp brackets. +# The default value is: NO. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the +# documentation for inline members. +# The default value is: YES. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the +# (detailed) documentation of file and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. +# The default value is: YES. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief +# descriptions of file, namespace and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. Note that +# this will also influence the order of the classes in the class list. +# The default value is: NO. + +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the +# (brief and detailed) documentation of class members so that constructors and +# destructors are listed first. If set to NO the constructors will appear in the +# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. +# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief +# member documentation. +# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting +# detailed member documentation. +# The default value is: NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy +# of group names into alphabetical order. If set to NO the group names will +# appear in their defined order. +# The default value is: NO. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by +# fully-qualified names, including namespaces. If set to NO, the class list will +# be sorted only by class name, not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the alphabetical +# list. +# The default value is: NO. + +SORT_BY_SCOPE_NAME = NO + +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper +# type resolution of all parameters of a function it will reject a match between +# the prototype and the implementation of a member function even if there is +# only one candidate or it is obvious which candidate to choose by doing a +# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still +# accept a match between prototype and implementation in such cases. +# The default value is: NO. + +STRICT_PROTO_MATCHING = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo +# list. This list is created by putting \todo commands in the documentation. +# The default value is: YES. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test +# list. This list is created by putting \test commands in the documentation. +# The default value is: YES. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug +# list. This list is created by putting \bug commands in the documentation. +# The default value is: YES. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) +# the deprecated list. This list is created by putting \deprecated commands in +# the documentation. +# The default value is: YES. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional documentation +# sections, marked by \if <section_label> ... \endif and \cond <section_label> +# ... \endcond blocks. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the +# initial value of a variable or macro / define can have for it to appear in the +# documentation. If the initializer consists of more lines than specified here +# it will be hidden. Use a value of 0 to hide initializers completely. The +# appearance of the value of individual variables and macros / defines can be +# controlled using \showinitializer or \hideinitializer command in the +# documentation regardless of this setting. +# Minimum value: 0, maximum value: 10000, default value: 30. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at +# the bottom of the documentation of classes and structs. If set to YES, the +# list will mention the files that were used to generate the documentation. +# The default value is: YES. + +SHOW_USED_FILES = YES + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This +# will remove the Files entry from the Quick Index and from the Folder Tree View +# (if specified). +# The default value is: YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces +# page. This will remove the Namespaces entry from the Quick Index and from the +# Folder Tree View (if specified). +# The default value is: YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command command input-file, where command is the value of the +# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided +# by doxygen. Whatever the program writes to standard output is used as the file +# version. For an example see the documentation. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. To create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. You can +# optionally specify a file name after the option, if omitted DoxygenLayout.xml +# will be used as the name of the layout file. +# +# Note that if you run doxygen from a directory containing a file called +# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE +# tag is left empty. + +LAYOUT_FILE = + +# The CITE_BIB_FILES tag can be used to specify one or more bib files containing +# the reference definitions. This must be a list of .bib files. The .bib +# extension is automatically appended if omitted. This requires the bibtex tool +# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. +# For LaTeX the style of the bibliography can be controlled using +# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the +# search path. See also \cite for info how to create references. + +CITE_BIB_FILES = + +#--------------------------------------------------------------------------- +# Configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated to +# standard output by doxygen. If QUIET is set to YES this implies that the +# messages are off. +# The default value is: NO. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES +# this implies that the warnings are on. +# +# Tip: Turn warnings on while writing the documentation. +# The default value is: YES. + +WARNINGS = YES + +# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate +# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag +# will automatically be disabled. +# The default value is: YES. + +WARN_IF_UNDOCUMENTED = NO + +# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some parameters +# in a documented function, or documenting parameters that don't exist or using +# markup commands wrongly. +# The default value is: YES. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that +# are documented, but have no documentation for their parameters or return +# value. If set to NO, doxygen will only warn about wrong or incomplete +# parameter documentation, but not about the absence of documentation. +# The default value is: NO. + +WARN_NO_PARAMDOC = NO + +# If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when +# a warning is encountered. +# The default value is: NO. + +WARN_AS_ERROR = NO + +# The WARN_FORMAT tag determines the format of the warning messages that doxygen +# can produce. The string should contain the $file, $line, and $text tags, which +# will be replaced by the file and line number from which the warning originated +# and the warning text. Optionally the format may contain $version, which will +# be replaced by the version of the file (if it could be obtained via +# FILE_VERSION_FILTER) +# The default value is: $file:$line: $text. + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning and error +# messages should be written. If left blank the output is written to standard +# error (stderr). + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# Configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag is used to specify the files and/or directories that contain +# documented source files. You may enter file names like myfile.cpp or +# directories like /usr/src/myproject. Separate the files or directories with +# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING +# Note: If this tag is empty the current directory is searched. + +INPUT = $(SRCDIR) + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses +# libiconv (or the iconv built into libc) for the transcoding. See the libiconv +# documentation (see: http://www.gnu.org/software/libiconv) for the list of +# possible encodings. +# The default value is: UTF-8. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and +# *.h) to filter out the source-files in the directories. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# read by doxygen. +# +# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, +# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, +# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, +# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, +# *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf and *.qsf. + +FILE_PATTERNS = + +# The RECURSIVE tag can be used to specify whether or not subdirectories should +# be searched for input files as well. +# The default value is: NO. + +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should be +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. +# +# Note that relative paths are relative to the directory from which doxygen is +# run. + +EXCLUDE = $(SRCDIR)/autom4te.cache \ + $(SRCDIR)/m4 \ + $(SRCDIR)/doc + +# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or +# directories that are symbolic links (a Unix file system feature) are excluded +# from the input. +# The default value is: NO. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories use the pattern */test/* + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or directories +# that contain example code fragments that are included (see the \include +# command). + +EXAMPLE_PATH = $(SRCDIR) + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and +# *.h) to filter out the source-files in the directories. If left blank all +# files are included. + +EXAMPLE_PATTERNS = + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude commands +# irrespective of the value of the RECURSIVE tag. +# The default value is: NO. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or directories +# that contain images that are to be included in the documentation (see the +# \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command: +# +# <filter> <input-file> +# +# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the +# name of an input file. Doxygen will then use the output that the filter +# program writes to standard output. If FILTER_PATTERNS is specified, this tag +# will be ignored. +# +# Note that the filter must not add or remove lines; it is applied before the +# code is scanned, but not when the output code is generated. If lines are added +# or removed, the anchors will not be placed correctly. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: pattern=filter +# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how +# filters are used. If the FILTER_PATTERNS tag is empty or if none of the +# patterns match the file name, INPUT_FILTER is applied. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# properly processed by doxygen. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will also be used to filter the input files that are used for +# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). +# The default value is: NO. + +FILTER_SOURCE_FILES = NO + +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and +# it is also possible to disable source filtering for a specific pattern using +# *.ext= (so without naming a filter). +# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. + +FILTER_SOURCE_PATTERNS = + +# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that +# is part of the input, its contents will be placed on the main page +# (index.html). This can be useful if you have a project on for instance GitHub +# and want to reuse the introduction page also for the doxygen output. + +USE_MDFILE_AS_MAINPAGE = + +#--------------------------------------------------------------------------- +# Configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will be +# generated. Documented entities will be cross-referenced with these sources. +# +# Note: To get rid of all source code in the generated output, make sure that +# also VERBATIM_HEADERS is set to NO. +# The default value is: NO. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body of functions, +# classes and enums directly into the documentation. +# The default value is: NO. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any +# special comment blocks from generated source code fragments. Normal C, C++ and +# Fortran comments will always remain visible. +# The default value is: YES. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES then for each documented +# function all documented functions referencing it will be listed. +# The default value is: NO. + +REFERENCED_BY_RELATION = NO + +# If the REFERENCES_RELATION tag is set to YES then for each documented function +# all documented entities called/used by that function will be listed. +# The default value is: NO. + +REFERENCES_RELATION = NO + +# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set +# to YES then the hyperlinks from functions in REFERENCES_RELATION and +# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will +# link to the documentation. +# The default value is: YES. + +REFERENCES_LINK_SOURCE = YES + +# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the +# source code will show a tooltip with additional information such as prototype, +# brief description and links to the definition and documentation. Since this +# will make the HTML file larger and loading of large files a bit slower, you +# can opt to disable this feature. +# The default value is: YES. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +SOURCE_TOOLTIPS = YES + +# If the USE_HTAGS tag is set to YES then the references to source code will +# point to the HTML generated by the htags(1) tool instead of doxygen built-in +# source browser. The htags tool is part of GNU's global source tagging system +# (see http://www.gnu.org/software/global/global.html). You will need version +# 4.8.6 or higher. +# +# To use it do the following: +# - Install the latest version of global +# - Enable SOURCE_BROWSER and USE_HTAGS in the config file +# - Make sure the INPUT points to the root of the source tree +# - Run doxygen as normal +# +# Doxygen will invoke htags (and that will in turn invoke gtags), so these +# tools must be available from the command line (i.e. in the search path). +# +# The result: instead of the source browser generated by doxygen, the links to +# source code will now point to the output of htags. +# The default value is: NO. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a +# verbatim copy of the header file for each class for which an include is +# specified. Set to NO to disable this. +# See also: Section \class. +# The default value is: YES. + +VERBATIM_HEADERS = YES + +# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the +# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the +# cost of reduced performance. This can be particularly helpful with template +# rich C++ code for which doxygen's built-in parser lacks the necessary type +# information. +# Note: The availability of this option depends on whether or not doxygen was +# generated with the -Duse-libclang=ON option for CMake. +# The default value is: NO. + +CLANG_ASSISTED_PARSING = NO + +# If clang assisted parsing is enabled you can provide the compiler with command +# line options that you would normally use when invoking the compiler. Note that +# the include paths will already be set by doxygen for the files and directories +# specified with INPUT and INCLUDE_PATH. +# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. + +CLANG_OPTIONS = + +#--------------------------------------------------------------------------- +# Configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all +# compounds will be generated. Enable this if the project contains a lot of +# classes, structs, unions or interfaces. +# The default value is: YES. + +ALPHABETICAL_INDEX = YES + +# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in +# which the alphabetical index list will be split. +# Minimum value: 1, maximum value: 20, default value: 5. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all classes will +# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag +# can be used to specify a prefix (or a list of prefixes) that should be ignored +# while generating the index headers. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output +# The default value is: YES. + +GENERATE_HTML = $(GENERATE_HTML) + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. +# The default directory is: html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each +# generated HTML page (for example: .htm, .php, .asp). +# The default value is: .html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a user-defined HTML header file for +# each generated HTML page. If the tag is left blank doxygen will generate a +# standard header. +# +# To get valid HTML the header file that includes any scripts and style sheets +# that doxygen needs, which is dependent on the configuration options used (e.g. +# the setting GENERATE_TREEVIEW). It is highly recommended to start with a +# default header using +# doxygen -w html new_header.html new_footer.html new_stylesheet.css +# YourConfigFile +# and then modify the file new_header.html. See also section "Doxygen usage" +# for information on how to generate the default header that doxygen normally +# uses. +# Note: The header is subject to change so you typically have to regenerate the +# default header when upgrading to a newer version of doxygen. For a description +# of the possible markers and block names see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each +# generated HTML page. If the tag is left blank doxygen will generate a standard +# footer. See HTML_HEADER for more information on how to generate a default +# footer and what special commands can be used inside the footer. See also +# section "Doxygen usage" for information on how to generate the default footer +# that doxygen normally uses. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style +# sheet that is used by each HTML page. It can be used to fine-tune the look of +# the HTML output. If left blank doxygen will generate a default style sheet. +# See also section "Doxygen usage" for information on how to generate the style +# sheet that doxygen normally uses. +# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as +# it is more robust and this tag (HTML_STYLESHEET) will in the future become +# obsolete. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_STYLESHEET = + +# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined +# cascading style sheets that are included after the standard style sheets +# created by doxygen. Using this option one can overrule certain style aspects. +# This is preferred over using HTML_STYLESHEET since it does not replace the +# standard style sheet and is therefore more robust against future updates. +# Doxygen will copy the style sheet files to the output directory. +# Note: The order of the extra style sheet files is of importance (e.g. the last +# style sheet in the list overrules the setting of the previous ones in the +# list). For an example see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_STYLESHEET = + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that the +# files will be copied as-is; there are no commands or markers available. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_FILES = + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen +# will adjust the colors in the style sheet and background images according to +# this color. Hue is specified as an angle on a colorwheel, see +# http://en.wikipedia.org/wiki/Hue for more information. For instance the value +# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 +# purple, and 360 is red again. +# Minimum value: 0, maximum value: 359, default value: 220. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_HUE = 220 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors +# in the HTML output. For a value of 0 the output will use grayscales only. A +# value of 255 will produce the most vivid colors. +# Minimum value: 0, maximum value: 255, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_SAT = 100 + +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the +# luminance component of the colors in the HTML output. Values below 100 +# gradually make the output lighter, whereas values above 100 make the output +# darker. The value divided by 100 is the actual gamma applied, so 80 represents +# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not +# change the gamma. +# Minimum value: 40, maximum value: 240, default value: 80. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_GAMMA = 80 + +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML +# page will contain the date and time when the page was generated. Setting this +# to YES can help to show when doxygen was last run and thus if the +# documentation is up to date. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_TIMESTAMP = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_DYNAMIC_SECTIONS = NO + +# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries +# shown in the various tree structured indices initially; the user can expand +# and collapse entries dynamically later on. Doxygen will expand the tree to +# such a level that at most the specified number of entries are visible (unless +# a fully collapsed tree already exceeds this amount). So setting the number of +# entries 1 will produce a full collapsed tree by default. 0 is a special value +# representing an infinite number of entries and will result in a full expanded +# tree by default. +# Minimum value: 0, maximum value: 9999, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_INDEX_NUM_ENTRIES = 100 + +# If the GENERATE_DOCSET tag is set to YES, additional index files will be +# generated that can be used as input for Apple's Xcode 3 integrated development +# environment (see: http://developer.apple.com/tools/xcode/), introduced with +# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a +# Makefile in the HTML output directory. Running make will produce the docset in +# that directory and running make install will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at +# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html +# for more information. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_DOCSET = NO + +# This tag determines the name of the docset feed. A documentation feed provides +# an umbrella under which multiple documentation sets from a single provider +# (such as a company or product suite) can be grouped. +# The default value is: Doxygen generated docs. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# This tag specifies a string that should uniquely identify the documentation +# set bundle. This should be a reverse domain-name style string, e.g. +# com.mycompany.MyDocSet. Doxygen will append .docset to the name. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify +# the documentation publisher. This should be a reverse domain-name style +# string, e.g. com.mycompany.MyDocSet.documentation. +# The default value is: org.doxygen.Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_ID = org.doxygen.Publisher + +# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. +# The default value is: Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_NAME = Publisher + +# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three +# additional HTML index files: index.hhp, index.hhc, and index.hhk. The +# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop +# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on +# Windows. +# +# The HTML Help Workshop contains a compiler that can convert all HTML output +# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML +# files are now used as the Windows 98 help format, and will replace the old +# Windows help format (.hlp) on all Windows platforms in the future. Compressed +# HTML files also contain an index, a table of contents, and you can search for +# words in the documentation. The HTML workshop also contains a viewer for +# compressed HTML files. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_HTMLHELP = $(GENERATE_CHM) + +# The CHM_FILE tag can be used to specify the file name of the resulting .chm +# file. You can add a path in front of the file if the result should not be +# written to the html output directory. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_FILE = ../$(PROJECT).chm + +# The HHC_LOCATION tag can be used to specify the location (absolute path +# including file name) of the HTML help compiler (hhc.exe). If non-empty, +# doxygen will try to run the HTML help compiler on the generated index.hhp. +# The file has to be specified with full path. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +HHC_LOCATION = $(HHC_PATH) + +# The GENERATE_CHI flag controls if a separate .chi index file is generated +# (YES) or that it should be included in the master .chm file (NO). +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +GENERATE_CHI = $(GENERATE_CHI) + +# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) +# and project file content. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_INDEX_ENCODING = + +# The BINARY_TOC flag controls whether a binary table of contents is generated +# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it +# enables the Previous and Next buttons. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members to +# the table of contents of the HTML help documentation and to the tree view. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that +# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help +# (.qch) of the generated HTML documentation. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify +# the file name of the resulting .qch file. The path specified is relative to +# the HTML output folder. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help +# Project output. For more information please see Qt Help Project / Namespace +# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_NAMESPACE = org.doxygen.Project + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt +# Help Project output. For more information please see Qt Help Project / Virtual +# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- +# folders). +# The default value is: doc. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_VIRTUAL_FOLDER = doc + +# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom +# filter to add. For more information please see Qt Help Project / Custom +# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see Qt Help Project / Custom +# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +# project's filter section matches. Qt Help Project / Filter Attributes (see: +# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_SECT_FILTER_ATTRS = + +# The QHG_LOCATION tag can be used to specify the location of Qt's +# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the +# generated .qhp file. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be +# generated, together with the HTML files, they form an Eclipse help plugin. To +# install this plugin and make it available under the help contents menu in +# Eclipse, the contents of the directory containing the HTML and XML files needs +# to be copied into the plugins directory of eclipse. The name of the directory +# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. +# After copying Eclipse needs to be restarted before the help appears. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the Eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have this +# name. Each documentation set should have its own identifier. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# If you want full control over the layout of the generated HTML pages it might +# be necessary to disable the index and replace it with your own. The +# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top +# of each HTML page. A value of NO enables the index and the value YES disables +# it. Since the tabs in the index contain the same information as the navigation +# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +DISABLE_INDEX = NO + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. If the tag +# value is set to YES, a side panel will be generated containing a tree-like +# index structure (just like the one that is generated for HTML Help). For this +# to work a browser that supports JavaScript, DHTML, CSS and frames is required +# (i.e. any modern browser). Windows users are probably better off using the +# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can +# further fine-tune the look of the index. As an example, the default style +# sheet generated by doxygen has an example that shows how to put an image at +# the root of the tree instead of the PROJECT_NAME. Since the tree basically has +# the same information as the tab index, you could consider setting +# DISABLE_INDEX to YES when enabling this option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_TREEVIEW = NO + +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that +# doxygen will group on one line in the generated HTML documentation. +# +# Note that a value of 0 will completely suppress the enum values from appearing +# in the overview section. +# Minimum value: 0, maximum value: 20, default value: 4. +# This tag requires that the tag GENERATE_HTML is set to YES. + +ENUM_VALUES_PER_LINE = 4 + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used +# to set the initial width (in pixels) of the frame in which the tree is shown. +# Minimum value: 0, maximum value: 1500, default value: 250. +# This tag requires that the tag GENERATE_HTML is set to YES. + +TREEVIEW_WIDTH = 250 + +# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to +# external symbols imported via tag files in a separate window. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +EXT_LINKS_IN_WINDOW = NO + +# Use this tag to change the font size of LaTeX formulas included as images in +# the HTML documentation. When you change the font size after a successful +# doxygen run you need to manually remove any form_*.png images from the HTML +# output directory to force them to be regenerated. +# Minimum value: 8, maximum value: 50, default value: 10. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_FONTSIZE = 10 + +# Use the FORMULA_TRANPARENT tag to determine whether or not the images +# generated for formulas are transparent PNGs. Transparent PNGs are not +# supported properly for IE 6.0, but are supported on all modern browsers. +# +# Note that when changing this option you need to delete any form_*.png files in +# the HTML output directory before the changes have effect. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_TRANSPARENT = YES + +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see +# http://www.mathjax.org) which uses client side Javascript for the rendering +# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX +# installed or if you want to formulas look prettier in the HTML output. When +# enabled you may also need to install MathJax separately and configure the path +# to it using the MATHJAX_RELPATH option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +USE_MATHJAX = NO + +# When MathJax is enabled you can set the default output format to be used for +# the MathJax output. See the MathJax site (see: +# http://docs.mathjax.org/en/latest/output.html) for more details. +# Possible values are: HTML-CSS (which is slower, but has the best +# compatibility), NativeMML (i.e. MathML) and SVG. +# The default value is: HTML-CSS. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_FORMAT = HTML-CSS + +# When MathJax is enabled you need to specify the location relative to the HTML +# output directory using the MATHJAX_RELPATH option. The destination directory +# should contain the MathJax.js script. For instance, if the mathjax directory +# is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax +# Content Delivery Network so you can quickly see the result without installing +# MathJax. However, it is strongly recommended to install a local copy of +# MathJax from http://www.mathjax.org before deployment. +# The default value is: http://cdn.mathjax.org/mathjax/latest. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest + +# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax +# extension names that should be enabled during MathJax rendering. For example +# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_EXTENSIONS = + +# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces +# of code that will be used on startup of the MathJax code. See the MathJax site +# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an +# example see the documentation. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_CODEFILE = + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box for +# the HTML output. The underlying search engine uses javascript and DHTML and +# should work on any modern browser. Note that when using HTML help +# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) +# there is already a search function so this one should typically be disabled. +# For large projects the javascript based search engine can be slow, then +# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to +# search using the keyboard; to jump to the search box use <access key> + S +# (what the <access key> is depends on the OS and browser, but it is typically +# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down +# key> to jump into the search results window, the results can be navigated +# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel +# the search. The filter options can be selected when the cursor is inside the +# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> +# to select a filter and <Enter> or <escape> to activate or cancel the filter +# option. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +SEARCHENGINE = YES + +# When the SERVER_BASED_SEARCH tag is enabled the search engine will be +# implemented using a web server instead of a web client using Javascript. There +# are two flavors of web server based searching depending on the EXTERNAL_SEARCH +# setting. When disabled, doxygen will generate a PHP script for searching and +# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing +# and searching needs to be provided by external tools. See the section +# "External Indexing and Searching" for details. +# The default value is: NO. +# This tag requires that the tag SEARCHENGINE is set to YES. + +SERVER_BASED_SEARCH = NO + +# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP +# script for searching. Instead the search results are written to an XML file +# which needs to be processed by an external indexer. Doxygen will invoke an +# external search engine pointed to by the SEARCHENGINE_URL option to obtain the +# search results. +# +# Doxygen ships with an example indexer (doxyindexer) and search engine +# (doxysearch.cgi) which are based on the open source search engine library +# Xapian (see: http://xapian.org/). +# +# See the section "External Indexing and Searching" for details. +# The default value is: NO. +# This tag requires that the tag SEARCHENGINE is set to YES. + +EXTERNAL_SEARCH = NO + +# The SEARCHENGINE_URL should point to a search engine hosted by a web server +# which will return the search results when EXTERNAL_SEARCH is enabled. +# +# Doxygen ships with an example indexer (doxyindexer) and search engine +# (doxysearch.cgi) which are based on the open source search engine library +# Xapian (see: http://xapian.org/). See the section "External Indexing and +# Searching" for details. +# This tag requires that the tag SEARCHENGINE is set to YES. + +SEARCHENGINE_URL = + +# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed +# search data is written to a file for indexing by an external tool. With the +# SEARCHDATA_FILE tag the name of this file can be specified. +# The default file is: searchdata.xml. +# This tag requires that the tag SEARCHENGINE is set to YES. + +SEARCHDATA_FILE = searchdata.xml + +# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the +# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is +# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple +# projects and redirect the results back to the right project. +# This tag requires that the tag SEARCHENGINE is set to YES. + +EXTERNAL_SEARCH_ID = + +# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen +# projects other than the one defined by this configuration file, but that are +# all added to the same external search index. Each project needs to have a +# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of +# to a relative location where the documentation can be found. The format is: +# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... +# This tag requires that the tag SEARCHENGINE is set to YES. + +EXTRA_SEARCH_MAPPINGS = + +#--------------------------------------------------------------------------- +# Configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. +# The default value is: YES. + +GENERATE_LATEX = $(GENERATE_LATEX) + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. +# The default directory is: latex. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. +# +# Note that when enabling USE_PDFLATEX this option is only used for generating +# bitmaps for formulas in the HTML output, but not in the Makefile that is +# written to the output directory. +# The default file is: latex. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate +# index for LaTeX. +# The default file is: makeindex. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX +# documents. This may be useful for small projects and may help to save some +# trees in general. +# The default value is: NO. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used by the +# printer. +# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x +# 14 inches) and executive (7.25 x 10.5 inches). +# The default value is: a4. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +PAPER_TYPE = $(PAPER_SIZE) + +# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names +# that should be included in the LaTeX output. The package can be specified just +# by its name or with the correct syntax as to be used with the LaTeX +# \usepackage command. To get the times font for instance you can specify : +# EXTRA_PACKAGES=times or EXTRA_PACKAGES={times} +# To use the option intlimits with the amsmath package you can specify: +# EXTRA_PACKAGES=[intlimits]{amsmath} +# If left blank no extra packages will be included. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the +# generated LaTeX document. The header should contain everything until the first +# chapter. If it is left blank doxygen will generate a standard header. See +# section "Doxygen usage" for information on how to let doxygen write the +# default header to a separate file. +# +# Note: Only use a user-defined header if you know what you are doing! The +# following commands have a special meaning inside the header: $title, +# $datetime, $date, $doxygenversion, $projectname, $projectnumber, +# $projectbrief, $projectlogo. Doxygen will replace $title with the empty +# string, for the replacement values of the other commands the user is referred +# to HTML_HEADER. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_HEADER = + +# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the +# generated LaTeX document. The footer should contain everything after the last +# chapter. If it is left blank doxygen will generate a standard footer. See +# LATEX_HEADER for more information on how to generate a default footer and what +# special commands can be used inside the footer. +# +# Note: Only use a user-defined footer if you know what you are doing! +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_FOOTER = + +# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined +# LaTeX style sheets that are included after the standard style sheets created +# by doxygen. Using this option one can overrule certain style aspects. Doxygen +# will copy the style sheet files to the output directory. +# Note: The order of the extra style sheet files is of importance (e.g. the last +# style sheet in the list overrules the setting of the previous ones in the +# list). +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_EXTRA_STYLESHEET = + +# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the LATEX_OUTPUT output +# directory. Note that the files will be copied as-is; there are no commands or +# markers available. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_EXTRA_FILES = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is +# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will +# contain links (just like the HTML output) instead of page references. This +# makes the output suitable for online browsing using a PDF viewer. +# The default value is: YES. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +PDF_HYPERLINKS = YES + +# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate +# the PDF file directly from the LaTeX files. Set this option to YES, to get a +# higher quality PDF documentation. +# The default value is: YES. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +USE_PDFLATEX = YES + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode +# command to the generated LaTeX files. This will instruct LaTeX to keep running +# if errors occur, instead of asking the user for help. This option is also used +# when generating formulas in HTML. +# The default value is: NO. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_BATCHMODE = YES + +# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the +# index chapters (such as File Index, Compound Index, etc.) in the output. +# The default value is: NO. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_HIDE_INDICES = NO + +# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source +# code with syntax highlighting in the LaTeX output. +# +# Note that which sources are shown also depends on other settings such as +# SOURCE_BROWSER. +# The default value is: NO. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_SOURCE_CODE = NO + +# The LATEX_BIB_STYLE tag can be used to specify the style to use for the +# bibliography, e.g. plainnat, or ieeetr. See +# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. +# The default value is: plain. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_BIB_STYLE = plain + +# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated +# page will contain the date and time when the page was generated. Setting this +# to NO can help when comparing the output of multiple runs. +# The default value is: NO. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_TIMESTAMP = NO + +#--------------------------------------------------------------------------- +# Configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The +# RTF output is optimized for Word 97 and may not look too pretty with other RTF +# readers/editors. +# The default value is: NO. + +GENERATE_RTF = $(GENERATE_RTF) + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. +# The default directory is: rtf. +# This tag requires that the tag GENERATE_RTF is set to YES. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF +# documents. This may be useful for small projects and may help to save some +# trees in general. +# The default value is: NO. +# This tag requires that the tag GENERATE_RTF is set to YES. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will +# contain hyperlink fields. The RTF file will contain links (just like the HTML +# output) instead of page references. This makes the output suitable for online +# browsing using Word or some other Word compatible readers that support those +# fields. +# +# Note: WordPad (write) and others do not support links. +# The default value is: NO. +# This tag requires that the tag GENERATE_RTF is set to YES. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's config +# file, i.e. a series of assignments. You only have to provide replacements, +# missing definitions are set to their default value. +# +# See also section "Doxygen usage" for information on how to generate the +# default style sheet that doxygen normally uses. +# This tag requires that the tag GENERATE_RTF is set to YES. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an RTF document. Syntax is +# similar to doxygen's config file. A template extensions file can be generated +# using doxygen -e rtf extensionFile. +# This tag requires that the tag GENERATE_RTF is set to YES. + +RTF_EXTENSIONS_FILE = + +# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code +# with syntax highlighting in the RTF output. +# +# Note that which sources are shown also depends on other settings such as +# SOURCE_BROWSER. +# The default value is: NO. +# This tag requires that the tag GENERATE_RTF is set to YES. + +RTF_SOURCE_CODE = NO + +#--------------------------------------------------------------------------- +# Configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for +# classes and files. +# The default value is: NO. + +GENERATE_MAN = $(GENERATE_MAN) + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. A directory man3 will be created inside the directory specified by +# MAN_OUTPUT. +# The default directory is: man. +# This tag requires that the tag GENERATE_MAN is set to YES. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to the generated +# man pages. In case the manual section does not start with a number, the number +# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is +# optional. +# The default value is: .3. +# This tag requires that the tag GENERATE_MAN is set to YES. + +MAN_EXTENSION = .1 + +# The MAN_SUBDIR tag determines the name of the directory created within +# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by +# MAN_EXTENSION with the initial . removed. +# This tag requires that the tag GENERATE_MAN is set to YES. + +MAN_SUBDIR = + +# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it +# will generate one additional man file for each entity documented in the real +# man page(s). These additional files only source the real man page, but without +# them the man command would be unable to find the correct page. +# The default value is: NO. +# This tag requires that the tag GENERATE_MAN is set to YES. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# Configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that +# captures the structure of the code including all documentation. +# The default value is: NO. + +GENERATE_XML = $(GENERATE_XML) + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. +# The default directory is: xml. +# This tag requires that the tag GENERATE_XML is set to YES. + +XML_OUTPUT = xml + +# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program +# listings (including syntax highlighting and cross-referencing information) to +# the XML output. Note that enabling this will significantly increase the size +# of the XML output. +# The default value is: YES. +# This tag requires that the tag GENERATE_XML is set to YES. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# Configuration options related to the DOCBOOK output +#--------------------------------------------------------------------------- + +# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files +# that can be used to generate PDF. +# The default value is: NO. + +GENERATE_DOCBOOK = NO + +# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in +# front of it. +# The default directory is: docbook. +# This tag requires that the tag GENERATE_DOCBOOK is set to YES. + +DOCBOOK_OUTPUT = docbook + +# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the +# program listings (including syntax highlighting and cross-referencing +# information) to the DOCBOOK output. Note that enabling this will significantly +# increase the size of the DOCBOOK output. +# The default value is: NO. +# This tag requires that the tag GENERATE_DOCBOOK is set to YES. + +DOCBOOK_PROGRAMLISTING = NO + +#--------------------------------------------------------------------------- +# Configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an +# AutoGen Definitions (see http://autogen.sf.net) file that captures the +# structure of the code including all documentation. Note that this feature is +# still experimental and incomplete at the moment. +# The default value is: NO. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# Configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module +# file that captures the structure of the code including all documentation. +# +# Note that this feature is still experimental and incomplete at the moment. +# The default value is: NO. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary +# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI +# output from the Perl module output. +# The default value is: NO. +# This tag requires that the tag GENERATE_PERLMOD is set to YES. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely +# formatted so it can be parsed by a human reader. This is useful if you want to +# understand what is going on. On the other hand, if this tag is set to NO, the +# size of the Perl module output will be much smaller and Perl will parse it +# just the same. +# The default value is: YES. +# This tag requires that the tag GENERATE_PERLMOD is set to YES. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file are +# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful +# so different doxyrules.make files included by the same Makefile don't +# overwrite each other's variables. +# This tag requires that the tag GENERATE_PERLMOD is set to YES. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all +# C-preprocessor directives found in the sources and include files. +# The default value is: YES. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names +# in the source code. If set to NO, only conditional compilation will be +# performed. Macro expansion can be done in a controlled way by setting +# EXPAND_ONLY_PREDEF to YES. +# The default value is: NO. +# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. + +MACRO_EXPANSION = NO + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then +# the macro expansion is limited to the macros specified with the PREDEFINED and +# EXPAND_AS_DEFINED tags. +# The default value is: NO. +# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES, the include files in the +# INCLUDE_PATH will be searched if a #include is found. +# The default value is: YES. +# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by the +# preprocessor. +# This tag requires that the tag SEARCH_INCLUDES is set to YES. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will be +# used. +# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that are +# defined before the preprocessor is started (similar to the -D option of e.g. +# gcc). The argument of the tag is a list of macros of the form: name or +# name=definition (no spaces). If the definition and the "=" are omitted, "=1" +# is assumed. To prevent a macro definition from being undefined via #undef or +# recursively expanded use the := operator instead of the = operator. +# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. + +PREDEFINED = + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this +# tag can be used to specify a list of macro names that should be expanded. The +# macro definition that is found in the sources will be used. Use the PREDEFINED +# tag if you want to use a different macro definition that overrules the +# definition found in the source code. +# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will +# remove all references to function-like macros that are alone on a line, have +# an all uppercase name, and do not end with a semicolon. Such function macros +# are typically used for boiler-plate code, and will confuse the parser if not +# removed. +# The default value is: YES. +# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration options related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES tag can be used to specify one or more tag files. For each tag +# file the location of the external documentation should be added. The format of +# a tag file without this location is as follows: +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where loc1 and loc2 can be relative or absolute paths or URLs. See the +# section "Linking to external documentation" for more information about the use +# of tag files. +# Note: Each tag file must have a unique name (where the name does NOT include +# the path). If a tag file is not located in the directory in which doxygen is +# run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create a +# tag file that is based on the input files it reads. See section "Linking to +# external documentation" for more information about the usage of tag files. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES, all external class will be listed in +# the class index. If set to NO, only the inherited external classes will be +# listed. +# The default value is: NO. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will be +# listed. +# The default value is: YES. + +EXTERNAL_GROUPS = YES + +# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in +# the related pages index. If set to NO, only the current project's pages will +# be listed. +# The default value is: YES. + +EXTERNAL_PAGES = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of 'which perl'). +# The default file (with absolute path) is: /usr/bin/perl. + +PERL_PATH = $(PERL_PATH) + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram +# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to +# NO turns the diagrams off. Note that this option also works with HAVE_DOT +# disabled, but it is recommended to install and use dot, since it yields more +# powerful graphs. +# The default value is: YES. + +CLASS_DIAGRAMS = YES + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see: +# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the +# documentation. The MSCGEN_PATH tag allows you to specify the directory where +# the mscgen tool resides. If left empty the tool is assumed to be found in the +# default search path. + +MSCGEN_PATH = + +# You can include diagrams made with dia in doxygen documentation. Doxygen will +# then run dia to produce the diagram and insert it in the documentation. The +# DIA_PATH tag allows you to specify the directory where the dia binary resides. +# If left empty dia is assumed to be found in the default search path. + +DIA_PATH = + +# If set to YES the inheritance and collaboration graphs will hide inheritance +# and usage relations if the target is undocumented or is not a class. +# The default value is: YES. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz (see: +# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent +# Bell Labs. The other options in this section have no effect if this option is +# set to NO +# The default value is: YES. + +HAVE_DOT = $(HAVE_DOT) + +# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed +# to run in parallel. When set to 0 doxygen will base this on the number of +# processors available in the system. You can set it explicitly to a value +# larger than 0 to get control over the balance between CPU load and processing +# speed. +# Minimum value: 0, maximum value: 32, default value: 0. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_NUM_THREADS = 0 + +# When you want a differently looking font in the dot files that doxygen +# generates you can specify the font name using DOT_FONTNAME. You need to make +# sure dot is able to find the font, which can be done by putting it in a +# standard location or by setting the DOTFONTPATH environment variable or by +# setting DOT_FONTPATH to the directory containing the font. +# The default value is: Helvetica. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_FONTNAME = Helvetica + +# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of +# dot graphs. +# Minimum value: 4, maximum value: 24, default value: 10. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_FONTSIZE = 10 + +# By default doxygen will tell dot to use the default font as specified with +# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set +# the path where dot can find it using this tag. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_FONTPATH = + +# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for +# each documented class showing the direct and indirect inheritance relations. +# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a +# graph for each documented class showing the direct and indirect implementation +# dependencies (inheritance, containment, and class references variables) of the +# class with other documented classes. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for +# groups, showing the direct groups dependencies. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. +# The default value is: NO. +# This tag requires that the tag HAVE_DOT is set to YES. + +UML_LOOK = NO + +# If the UML_LOOK tag is enabled, the fields and methods are shown inside the +# class node. If there are many fields or methods and many nodes the graph may +# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the +# number of items for each type to make the size more manageable. Set this to 0 +# for no limit. Note that the threshold may be exceeded by 50% before the limit +# is enforced. So when you set the threshold to 10, up to 15 fields may appear, +# but if the number exceeds 15, the total amount of fields shown is limited to +# 10. +# Minimum value: 0, maximum value: 100, default value: 10. +# This tag requires that the tag HAVE_DOT is set to YES. + +UML_LIMIT_NUM_FIELDS = 10 + +# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and +# collaboration graphs will show the relations between templates and their +# instances. +# The default value is: NO. +# This tag requires that the tag HAVE_DOT is set to YES. + +TEMPLATE_RELATIONS = NO + +# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to +# YES then doxygen will generate a graph for each documented file showing the +# direct and indirect include dependencies of the file with other documented +# files. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +INCLUDE_GRAPH = YES + +# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are +# set to YES then doxygen will generate a graph for each documented file showing +# the direct and indirect include dependencies of the file with other documented +# files. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH tag is set to YES then doxygen will generate a call +# dependency graph for every global function or class method. +# +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable call graphs for selected +# functions only using the \callgraph command. Disabling a call graph can be +# accomplished by means of the command \hidecallgraph. +# The default value is: NO. +# This tag requires that the tag HAVE_DOT is set to YES. + +CALL_GRAPH = NO + +# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller +# dependency graph for every global function or class method. +# +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable caller graphs for selected +# functions only using the \callergraph command. Disabling a caller graph can be +# accomplished by means of the command \hidecallergraph. +# The default value is: NO. +# This tag requires that the tag HAVE_DOT is set to YES. + +CALLER_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical +# hierarchy of all classes instead of a textual one. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the +# dependencies a directory has on other directories in a graphical way. The +# dependency relations are determined by the #include relations between the +# files in the directories. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. For an explanation of the image formats see the section +# output formats in the documentation of the dot tool (Graphviz (see: +# http://www.graphviz.org/)). +# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order +# to make the SVG files visible in IE 9+ (other browsers do not have this +# requirement). +# Possible values are: png, png:cairo, png:cairo:cairo, png:cairo:gd, png:gd, +# png:gd:gd, jpg, jpg:cairo, jpg:cairo:gd, jpg:gd, jpg:gd:gd, gif, gif:cairo, +# gif:cairo:gd, gif:gd, gif:gd:gd, svg, png:gd, png:gd:gd, png:cairo, +# png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and +# png:gdiplus:gdiplus. +# The default value is: png. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_IMAGE_FORMAT = png + +# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to +# enable generation of interactive SVG images that allow zooming and panning. +# +# Note that this requires a modern browser other than Internet Explorer. Tested +# and working are Firefox, Chrome, Safari, and Opera. +# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make +# the SVG files visible. Older versions of IE do not have SVG support. +# The default value is: NO. +# This tag requires that the tag HAVE_DOT is set to YES. + +INTERACTIVE_SVG = NO + +# The DOT_PATH tag can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_PATH = $(DOT_PATH) + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the \dotfile +# command). +# This tag requires that the tag HAVE_DOT is set to YES. + +DOTFILE_DIRS = + +# The MSCFILE_DIRS tag can be used to specify one or more directories that +# contain msc files that are included in the documentation (see the \mscfile +# command). + +MSCFILE_DIRS = + +# The DIAFILE_DIRS tag can be used to specify one or more directories that +# contain dia files that are included in the documentation (see the \diafile +# command). + +DIAFILE_DIRS = + +# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the +# path where java can find the plantuml.jar file. If left blank, it is assumed +# PlantUML is not used or called during a preprocessing step. Doxygen will +# generate a warning when it encounters a \startuml command in this case and +# will not generate output for the diagram. + +PLANTUML_JAR_PATH = + +# When using plantuml, the PLANTUML_CFG_FILE tag can be used to specify a +# configuration file for plantuml. + +PLANTUML_CFG_FILE = + +# When using plantuml, the specified paths are searched for files specified by +# the !include statement in a plantuml block. + +PLANTUML_INCLUDE_PATH = + +# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes +# that will be shown in the graph. If the number of nodes in a graph becomes +# larger than this value, doxygen will truncate the graph, which is visualized +# by representing a node as a red box. Note that doxygen if the number of direct +# children of the root node in a graph is already larger than +# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that +# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. +# Minimum value: 0, maximum value: 10000, default value: 50. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_GRAPH_MAX_NODES = 50 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs +# generated by dot. A depth value of 3 means that only nodes reachable from the +# root by following a path via at most 3 edges will be shown. Nodes that lay +# further from the root node will be omitted. Note that setting this option to 1 +# or 2 may greatly reduce the computation time needed for large code bases. Also +# note that the size of a graph can be further restricted by +# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. +# Minimum value: 0, maximum value: 1000, default value: 0. +# This tag requires that the tag HAVE_DOT is set to YES. + +MAX_DOT_GRAPH_DEPTH = 0 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, because dot on Windows does not seem +# to support this out of the box. +# +# Warning: Depending on the platform used, enabling this option may lead to +# badly anti-aliased labels on the edges of a graph (i.e. they become hard to +# read). +# The default value is: NO. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) support +# this, this feature is disabled by default. +# The default value is: NO. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_MULTI_TARGETS = YES + +# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page +# explaining the meaning of the various boxes and arrows in the dot generated +# graphs. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot +# files that are used to generate the various graphs. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_CLEANUP = YES diff --git a/v2.6/toolkit/fastnlotoolkit/Alphas.cc b/v2.6/toolkit/fastnlotoolkit/Alphas.cc new file mode 100644 index 0000000000000000000000000000000000000000..a52d3057ea420c3593e98618f45f4d5cc77f2b4d --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/Alphas.cc @@ -0,0 +1,188 @@ +#include <cstdio> +#include <cstdlib> +#include <iostream> +#include <math.h> +#include "fastnlotk/Alphas.h" +#include "fastnlotk/speaker.h" +#include "fastnlotk/fastNLOConstants.h" + +using namespace std; + + +//______________________________________________________ +// +// Class Alphas +// +// Calculation of alpha_s in the MSbar scheme for given alpha_s(Mz) +// using exact, iterative solution of 2-/3-/4-loop formulas +// as used by GRV hep-ph/9806404 +// +// So far, the code is written for nf=5, and no flavor thresholds +// have been implemented. Therefore the code should be used only +// for mu_r > m_bottom (which is safe for jet observables) +// +// +// Authors : D. Britzger, M. Wobisch +// Created : 2011 +// +//_____________________________________________________ + +double Alphas::fMz = 91.1876; // mass of Z0, PDG 2012. +double Alphas::fAlphasMz = 0.1184; // alpha_s at starting scale of Mz, PDG 2012; previous was 0.1185, Bethke 2011. +int Alphas::fNf = 5; // MAXIMUM number of active flavours. e.g. at low scales mu, number of flavors is calculated with respecting flavor thresholds if FlavorMatching is ON. +int Alphas::fnLoop = 2; // n-loop solution of the RGE +bool Alphas::bFlavorMatching = false; // switch flavor matching on or off +double Alphas::fTh[6] = {0.0023, 0.0048, 0.095, 1.275, 4.18, 173.5}; // PDG 2012; check on pole mass, running mass when using in theory ...! + + +Alphas::Alphas() { + // private constructor since this is a Singleton class +} + +Alphas::~Alphas() { +} + +void Alphas::SetFlavorMatchingThresholds(double th1, double th2, double th3, double th4, double th5, double th6) { + // in GeV + fTh[0] = th1; + fTh[1] = th2; + fTh[2] = th3; + fTh[3] = th4; + fTh[4] = th5; + fTh[5] = th6; +} + + +void Alphas::GetFlavorMatchingThresholds(double& th1, double& th2, double& th3, double& th4, double& th5, double& th6) { + th1 = fTh[0]; + th2 = fTh[1]; + th3 = fTh[2]; + th4 = fTh[3]; + th5 = fTh[4]; + th6 = fTh[5]; +} + + +int Alphas::CalcNf(double mu) { + // + // calculate number of active flavors + // if your scale would result in a larger number of + // active flavors than defined in fNf, then return + // 'only' fNf + // If flavor matching is turned of, then always use + // fixed number of flavors. + // + if (!bFlavorMatching) return fNf; + int nf = 0; + while (mu > fTh[nf] && nf < 6) nf++; + if (nf > fNf) return fNf ; + else return nf; +} + + +double Alphas::CalcAlphasMu(double mu, double alphasMz, int nLoop, int nFlavors) { + + nLoop = nLoop == 0 ? fnLoop : nLoop; + double asmz = alphasMz==0 ? fAlphasMz : alphasMz; + int nf = nFlavors == 0 ? CalcNf(mu) : nFlavors; + double Q2 = pow(mu,2); + + // - initialize pi and do some initial print out + static bool first = true; + static const double twopi = 2. * 4. * atan(1.); + if (first) { + first = false; + cout << endl; + cout << fastNLO::_CSEPSC << endl; + say::shout["ALPHAS-GRV"] << "First call:\n"; + PrintInfo(); + } + + // - initialize beta functions + // static const double twopi = 6.28318530717958647692528; + const double beta0 = 11. - 2./3. * nf; + const double beta1 = 102. - 38./3. * nf; + const double beta10 = beta1 / beta0 / beta0; + const double MZ2 = pow(fMz,2); + + // - exact formula -> extract Lambda from alpha_s(Mz) + double LAM2 = MZ2 / exp(FBeta(asmz,nLoop,nf)); + + + // - extract approx alpha_s(mu) value - 2 loop approx is fine + double LL2 = MZ2 * exp(-2.*twopi/beta0/asmz + beta10 * log(2*twopi/beta0/asmz + beta10)); + double LQ2 = log(Q2 / LL2); + double as = 2*twopi/beta0/LQ2 * (1. - beta10*log(LQ2)/LQ2); + + // - exact 4-loop value by Newton procedure + for (int i = 1 ; i <=3 ; i++) { + double F = log(Q2/LAM2) - FBeta(as,nLoop,nf); + double FP = - FBeta(as*1.01,nLoop,nf); + double FM = - FBeta(as*0.99,nLoop,nf); + as -= F/(FP-FM)*0.02*as ; + //printf(" i = %d , alphas = %8.6f , mu = %7.4f\n",i,as,mu); + } + + return as; +} + + +void Alphas::PrintInfo() { + // - Print info + char buffer[1024]; + static const double twopi = 2. * 4. * atan(1.); + cout << fastNLO::_CSEPSC << endl; + snprintf(buffer, sizeof(buffer), "PI = %#18.15f",twopi/2.); + say::shout["ALPHAS-GRV"] << buffer << endl; + snprintf(buffer, sizeof(buffer), "M_Z/GeV = %#9.6f",fMz); + say::shout["ALPHAS-GRV"] << buffer << endl; + snprintf(buffer, sizeof(buffer), "a_s(M_Z) = %#9.6f",fAlphasMz); + say::shout["ALPHAS-GRV"] << buffer << endl; + snprintf(buffer, sizeof(buffer), "a_s loop = %2i",fnLoop); + say::shout["ALPHAS-GRV"] << buffer << endl; + snprintf(buffer, sizeof(buffer), "flavor-matching = %s",(bFlavorMatching?" T":" F")); + say::shout["ALPHAS-GRV"] << buffer << endl; + snprintf(buffer, sizeof(buffer), "nf (M_Z) = %2d",CalcNf(fMz)); + say::shout["ALPHAS-GRV"] << buffer << endl; + cout << fastNLO::_CSEPSC << endl; +} + + + +double Alphas::FBeta(double alphasMz, int nLoop, int nf) { + + // - initialize pi and beta functions + static const double Pi = 3.14159265358979312; + static const double zeta3 = 1.202056903; + const double beta0 = (11. - 2./3. * nf) / 4.; + const double beta1 = (102. - 38./3. * nf) / 16.; + const double beta2 = (2857./2. - 5033./18.*nf + 325./54.*pow(nf,2)) / 64.; + const double beta10 = beta1 / beta0; + const double beta102 = pow(beta10,2); + const double beta103 = pow(beta10,3); + const double beta20 = beta2 / beta0; + const double C10 = beta10 / beta0 *log(beta0); + + double aspi = alphasMz/Pi; + double aspi2 = pow(aspi,2); + + // if ( nLoop == 2 ){ // 1-loop + // return 1./( beta0 * aspi ); + // } + if (nLoop == 2) { // 2-loop RGE + return C10 + 1./beta0 * (1./aspi + beta10 * log(aspi) + (-beta102) * aspi + (beta103/2.)*aspi2); + } else if (nLoop == 3) { // 3-loop RGE + return C10 + 1./beta0 * (1./aspi + beta10 * log(aspi) + (beta20-beta102) * aspi + (beta10*beta20 + beta103/2.)*aspi2); + } else if (nLoop == 4) { // 4-loop RGE + double beta3 = ((149753./6. + 3564.*zeta3) - + (1078361./162. + 6508./27.*zeta3) * nf + + (50065./162. + 6472./81.*zeta3) * pow(nf,2) + + 1093./729. * pow(nf,3)) /256.; + double beta30 = beta3 / beta0; + return C10 + 1./beta0 * (1./aspi + beta10 * log(aspi) + (beta20-beta102) * aspi + (beta30/2. - beta10*beta20 + beta103/2.)*aspi2); + } else { + printf("Alphas::FBeta(). Error. Only 2-, 3- or 4-loop solution implemented.\n"); + exit(1); + } + +} diff --git a/v2.6/toolkit/fastnlotoolkit/CRunDec.cc b/v2.6/toolkit/fastnlotoolkit/CRunDec.cc new file mode 100644 index 0000000000000000000000000000000000000000..e46939ab7e061e12e870fb3794d681c210263e8d --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/CRunDec.cc @@ -0,0 +1,3092 @@ +/* + CRunDec.cpp, v3.0 + + Authors: Florian Herren and Matthias Steinhauser (Feb 2017) + + F. Herren, M. Steinhauser, + "Version 3 of RunDec and CRunDec" + arXiv:1703.03751, TTP17-011 + + Changes since v2.1: + Dec 2016: added five-loop beta function (see arXiv:1606.08659); + extended LamExpl, LamImpl, AlphasLam to five loops; + ported DecAsDownMS, DecMqDownMS and DecMq{Up,Down}SI from RunDec; + extended Dec{As,Mq}{Up,Down}{MS,SI} to four loops; + Jan 2017: fixed Segmentation fault in case null pointer is passed as "mq" in + mass conversion routines, minor bugfixes in threshold mass routines + added DecLambdaUp/Down to 5 loops + extended mRGI2mMS/mMS2mRGI/mMS2mRGImod to 5 loops + included light quark mass effects in MS-OS relation up to three loops (arXiv:0708.1729) +*/ + +/* + CRunDec.cpp, v2.1 + + Authors: Florian Herren and Matthias Steinhauser (Jun 2016) + + Changes since v2.0: + Jun 2016: improved 4-loop coefficients in mMS2mOS, mOS2mSI, mOS2mMS +*/ + +/* + Based on: + + CRunDec.cpp, v2.0 + + Authors: Florian Herren and Matthias Steinhauser (Jan 2016) + + Changes since v1.1: + Sep 2015: extended mOS2mMS, mMS2mOS to four loops (see arXiv:1502.01030); + mMS2mMS to five loops (see arXiv:1402.6611); + DecMqUp/DownOS to four loops (see hep-ph/0512058, hep-ph/0512060 + and arXiv:1502.04719); + prepared AsmMSrunexact, AlphasExact for five loops + Oct 2015: implemented PS, 1S and RS masses, now requires C++11 for tgamma, + extended mOS2mSI to four loops (see arXiv:1502.01030) + Dec 2015: bugfix: nl -> nlq in fas6to5ms, ported DecAsDownSI/DecAsUpSI from RunDec + Jan 2016: Add RS' mass relations (see arXiv:1502.01030) +*/ + +/* + Based on: + + CRunDec.cpp, v1.1 + + Author: Barbara Schmidt + + For documentation see + + CRunDec: a C++ package for running and decoupling of the + strong coupling and quark masses + + by + + Barbara Schmidt, Matthias Steinhauser + + Comput.Phys.Commun. 183 (2012) 1845-1848 + arXiv:1201.6149 + SFB/CPP-12-03 + TTP12-02 + + See also: + K.G. Chetyrkin, J.H. Kuhn and M. Steinhauser, + "RunDec: A Mathematica package for running and decoupling of the strong + coupling and quark masses" + Comput. Phys. Commun. 133 (2000) 43, + arXiv:hep-ph/0004189 + + May 2013: minor modifications to avoid "-Wunused-parameter" + during compilation with g++ -Wall -Wextra + Sep 2013: bug fix in fRungeKuttaImpl (thanks to Stephen Jones) + Oct 2014: bug fix in AsmMSrunexact +*/ + +// K. Rabbertz, 24.01.2019: +// Version for use within fastNLOReader +// - Move location for include file + +/* +License: + +CRunDec is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + +#include <iostream> +#include <iomanip> +#include <cmath> + +// KR Adapt to fastnlo environment +//#include "CRunDec.h" +#include "fastnlotk/CRunDec.h" + +// Some constants: +#define cf 4./3. +#define ca 3. +#define tr 1./2. +#define B4 -1.762800087073770864061897634679818807215137274389016762629478603776 +#define A4 0.5174790616738993863307581618988629456223774751413792582443193479770 +#define A5 0.5084005792422687074591088492585899413195411256648216487244977963526 +#define Pi M_PI +#define Zeta2 (Pi*Pi)/6. +#define Zeta3 1.20205690315959428539973816151144999076498629234049888179227155534 +#define Zeta4 (Pi*Pi*Pi*Pi)/90. +#define Zeta5 1.03692775514336992633136548645703416805708091950191281197419267790 +#define Zeta6 (Pi*Pi*Pi*Pi*Pi*Pi)/945. +#define Zeta7 1.00834927738192282683979754984979675959986356056523870641728313657160147831735573534609696891385132 +#define ln2 log(2) + +using namespace std; + +// Default constructor: +CRunDec::CRunDec(){ + for(int i=0; i<4; i++){ + mq[i].first = 0.; + mq[i].second = 0.; + nfMmu[i].Mth=0.; + nfMmu[i].muth=0.; + nfMmu[i].nf=0; + } + AM.Asexact=0.; + AM.mMSexact=0.; +} + +// Constructor called with number for active flavours nf +CRunDec::CRunDec(int n){ + this->SetConstants(n); + for(int i=0; i<4; i++) { + mq[i].first = 0.; + mq[i].second = 0.; + nfMmu[i].Mth=0.; + nfMmu[i].muth=0.; + nfMmu[i].nf=0; + } + AM.Asexact=0.; + AM.mMSexact=0.; +} + +// Define constants (if not already done in constructor) +void CRunDec::SetConstants(int n){ + double nf=(double) n; + Nf=nf; + double nl = nf-1; + Beta[0]= (double)0.25*(11.0 - 2.*nf/3.0); + Beta[1]= (double)(102.0 - 38.*nf/3.0)/16.0; + Beta[2]= (double)(0.5*2857. - 5033.*nf/18.0 + 325.*nf*nf/54.0)/64.0; + Beta[3]= (double)(149753./6.0 + 3564.*Zeta3 + + (-1078361./162.0 - 6508.*Zeta3/27.0)*nf + + (50065./162.0 + 6472.*Zeta3/81.0)*nf*nf + + 1093.*nf*nf*nf/729.0)/256.0; + Beta[4]= (double)(8157455.0/16.0 + 621885.0/2.0*Zeta3 - 88209.0/2.0*Zeta4 - 288090.0*Zeta5 + + (-336460813./1944. - 4811164./81.*Zeta3 + 33935./6.*Zeta4 + 1358995./27.*Zeta5)*nf + + (25960913./1944. + 698531./81.*Zeta3 - 10526./9.*Zeta4 - 381760./81.*Zeta5)*nf*nf + + (-630559./5832. - 48722./243.*Zeta3 + 1618./27.*Zeta4 + 460./9.*Zeta5)*nf*nf*nf + + (1205./2916. - 152./81.*Zeta3)*nf*nf*nf*nf)/1024.0; + Betap[0]= (double)0.25*(11.0 - 2.*nl/3.0); + Betap[1]= (double)(102.0 - 38.*nl/3.0)/16.0; + Betap[2]= (double)(0.5*2857. - 5033.*nl/18.0 + 325.*nl*nl/54.0)/64.0; + Betap[3]= (double)(149753./6.0 + 3564.*Zeta3 + + (-1078361./162.0 - 6508.*Zeta3/27.0)*nl + + (50065./162.0 + 6472.*Zeta3/81.0)*nl*nl + + 1093.*nl*nl*nl/729.0)/256.0; + Betap[4]= (double)(8157455.0/16.0 + 621885.0/2.0*Zeta3 - 88209.0/2.0*Zeta4 - 288090.0*Zeta5 + + (-336460813./1944. - 4811164./81.*Zeta3 + 33935./6.*Zeta4 + 1358995./27.*Zeta5)*nl + + (25960913./1944. + 698531./81.*Zeta3 - 10526./9.*Zeta4 - 381760./81.*Zeta5)*nl*nl + + (-630559./5832. - 48722./243.*Zeta3 + 1618./27.*Zeta4 + 460./9.*Zeta5)*nl*nl*nl + + (1205./2916. - 152./81.*Zeta3)*nl*nl*nl*nl)/1024.0; + + Gamma[0]=(double)1.0; + Gamma[1]=(double)(202./3.-20.*nf/9.)/16.; + Gamma[2]=(double)(1249. + (-2216./27. - 160.*Zeta3/3.)*nf- + 140.*nf*nf/81.)/64.; + Gamma[3]=(double)(4603055./162. + 135680.*Zeta3/27. - 8800.*Zeta5 + + (-91723./27. - 34192.*Zeta3/9. + + 880.*Zeta4 + 18400.*Zeta5/9.)*nf + + (5242./243. + 800.*Zeta3/9. - 160.*Zeta4/3.)*nf*nf + + (-332./243. + 64.*Zeta3/27.)*nf*nf*nf)/256.; + Gamma[4]=(double)(99512327./162. + 46402466.*Zeta3/243. + 96800.*Zeta3*Zeta3 - 698126.*Zeta4/9. + -231757160.*Zeta5/243. + 242000.*Zeta6 + 412720.*Zeta7 + +nf*(-150736283./1458. - 12538016.*Zeta3/81. - 75680.*Zeta3*Zeta3/9. + 2038742.*Zeta4/27. + + 49876180.*Zeta5/243. - 638000.*Zeta6/9. - 1820000.*Zeta7/27.) + +nf*nf*(1320742./729. + 2010824.*Zeta3/243. + 46400.*Zeta3*Zeta3/27. - 166300.*Zeta4/27. - 264040.*Zeta5/81. + 92000.*Zeta6/27.) + +nf*nf*nf*(91865./1458. + 12848.*Zeta3/81. + 448.*Zeta4/9. - 5120.*Zeta5/27.) + +nf*nf*nf*nf*(-260./243 - 320.*Zeta3/243. + 64.*Zeta4/27.) + )/(4*4*4*4*4); + + + for(int i=0; i<5; i++) { + B[i]=Beta[i]/Beta[0]; + Bp[i]=Betap[i]/Betap[0]; + C[i]=Gamma[i]/Beta[0]; + } +} + + +// Function int CRunDec::GetNf() +// Returns number of active flavours. +int CRunDec::GetNf(){ + return (int)Nf; +} + +// Function void CRunDec::SetNf(int nf) +// Set the private component Nf to the number of active flavours. +void CRunDec::SetNf(int nf){ + this->SetConstants(nf); +} + +// Aux. function to exit function. +int CRunDec::Abbruch(void){ + RETURN +} + +// PolyLog[n,x] for -1 < x < 1 and positive integer n +double CRunDec::PolyLog(unsigned int n, double x) { + if(x >= 1 || x <= -1 || n == 0){ + cout << "PolyLog NOT IMPLEMENTED FOR n = " << n << " and x = " << x << endl; + RETURN + } + double m = n; + double ret = 0.0; + double sav1 = 1.0; + double sav2 = 0.0; + double diff = 1.0; + double k = 1.0; + while(abs(diff) > 1e-16) { + sav2 = sav1; + sav1 = pow(x,k)*pow(k,-m); + ret += sav1; + diff = sav2 - sav1; + k += 1.0; + } + return ret; +} + +// Function double CRunDec::LamExpl(double AlphaS, double Mu, int nl) +// Compute \Lambda using eq.(4) of [RunDec]. +double CRunDec::LamExpl(double AlphaS, double Mu, int nl){ + if(nl<1||nl>5){ + cout<<"PROCEDURE IS NOT IMPLEMENTED FOR "<< nl<<" LOOPS"<<endl; + RETURN + } + double A=AlphaS/Pi; + double sum[5]; + sum[0]= 1./(A*Beta[0]); + sum[1]= (B[1]*log(A))/Beta[0] + + (B[1]/Beta[0])*log(Beta[0]); + sum[2]= (B[2]*A - B[1]*B[1]*A )/Beta[0]; + sum[3]= (0.5*B[3]*A*A-B[1]*B[2]*A*A+ 0.5*B[1]*B[1]*B[1]*A*A)/Beta[0]; + sum[4]= (B[4]/3.-2.*B[3]*B[1]/3. - B[2]*B[2]/3. + B[2]*B[1]*B[1] - B[1]*B[1]*B[1]*B[1]/3.)*A*A*A/Beta[0]; + + double LogM2L2=0.0; + for(int i=1; i<=nl; i++){ + LogM2L2+=sum[i-1]; + } + + double Lambda= Mu*exp(-0.5*LogM2L2); + return Lambda; +} + +// Function double CRunDec::AlphasLam(double Lambda, double Mu, int nl) +// Compute \alpha_s using eq.(5) of [RunDec]. +double CRunDec::AlphasLam(double Lambda, double Mu, int nl){ + if(nl<1||nl>5){ + cout<<"PROCEDURE IS NOT IMPLEMENTED FOR "<< nl<<" LOOPS"<<endl; + RETURN + } + if(Mu/Lambda<1.5){ + cout<<"WARNING: the ratio \\mu/\\lambda = "<< Mu/Lambda + <<" is very small!"<<endl; + RETURN + } + double L=log(Mu*Mu/(Lambda*Lambda)); + double h=1/(L*Beta[0]); + double c=log(L); + double sum[4]; + sum[0]= h; + sum[1]= -h*h*B[1]*c; + sum[2]= + h*h*h*(B[1]*B[1]*(c*c-c-1)+B[2]); + sum[3]= h*h*h*h*(B[1]*B[1]*B[1]*(-c*c*c+2.5*c*c+2*c-0.5) + -3*B[1]*B[2]*c +0.5*B[3]); + sum[4]= h*h*h*h*h*(B[4]/3. + B[3]*B[1]*(-1./6.-2.*c) + 5.*B[2]*B[2]/3. + + B[2]*B[1]*B[1]*(6.*c*c-3.*c-3.)+B[1]*B[1]*B[1]*B[1]*(c*c*c*c-13.*c*c*c/3.-3.*c*c/2.+4.*c+7./6.)); + double a=0.0; + for(int i=1; i<=nl; i++){ + a+=sum[i-1]; + } + return a*Pi; +} + +// Eq.(5) rewritten in a form suitable to determine zero. +double CRunDec::fSetAsL(double Lambda, double Mu, int nl, double AlphaS){ + double L=log(Mu*Mu/(Lambda*Lambda)); + double h=1/(L*Beta[0]); + double c=log(L); + double sum[4]; + sum[0]= h; + sum[1]= -h*h*B[1]*c; + sum[2]= + h*h*h*(B[1]*B[1]*(c*c-c-1)+B[2]); + sum[3]= h*h*h*h*(B[1]*B[1]*B[1]*(-c*c*c+2.5*c*c+2*c-0.5) + -3*B[1]*B[2]*c +0.5*B[3]); + sum[4]= h*h*h*h*h*(B[4]/3. + B[3]*B[1]*(-1./6.-2.*c) + 5.*B[2]*B[2]/3. + + B[2]*B[1]*B[1]*(6.*c*c-3.*c-3.)+B[1]*B[1]*B[1]*B[1]*(c*c*c*c-13.*c*c*c/3.-3.*c*c/2.+4.*c+7./6.)); + double Add=0.0; + for(int i=1; i<=nl; i++) Add+=sum[i-1]; + return (Add-(AlphaS/Pi)); +} + +// Function double CRunDec::LamImpl(double AlphaS, double Mu,int nl) +// Compute \Lambda using eq.(5) of [RunDec]. +double CRunDec::LamImpl(double AlphaS, double Mu,int nl){ + if(nl<1||nl>5){ + cout<<"PROCEDURE IS NOT IMPLEMENTED FOR "<< nl<<" LOOPS"<<endl; + RETURN + } + double epsilonX= 1e-8; + double Lambda0=LamExpl(AlphaS,Mu,nl); + double x0=Lambda0 - 0.2*Lambda0; + double x1=Lambda0 + 0.2*Lambda0; + double f0= this->fSetAsL(x0,Mu,nl,AlphaS); + double f1= this->fSetAsL(x1,Mu,nl,AlphaS); + if(f0*f1>0){ + cout<<"WARNING: No root can be calculatet!"<<endl; + RETURN + } + double xTest; + double fTest; + do{ + xTest= (x0+x1)/2; + fTest= fSetAsL(xTest,Mu,nl,AlphaS); + if(f0*fTest<0){x1= xTest;} + else {x0= xTest;} + } + while(abs(x1-x0)>= epsilonX); + double Lambda=xTest; + return Lambda; +} + +// Right-hand side of differential equation for \alpha_s times 1/\mu^2, +// see eq.(1) of [1]. +double fSetdydx(CRunDec S, double A,int nl){ + double f=0.0; + double sum[5]; + double B=A*A; + sum[0]=-S.Beta[0]*B; + sum[1]=-S.Beta[1]*B*A; + sum[2]=-S.Beta[2]*B*B; + sum[3]=-S.Beta[3]*B*B*A; + sum[4]=-S.Beta[4]*B*B*B; + for(int i=1; i<= nl; i++) { + f+=sum[i-1]; + } + return (f*2); +} + +// Implicit Runge-Kutte step (4th order) +// Call with x=\mu^2, y=\alpha_s(\mu)/\pi, step size h, number of loops nl +// New y value is returned at x+h +double CRunDec::fRungeKuttaImpl(double &x, double y, double &htry, int nl, + double (*f)(CRunDec, double, int)){ + // Precision + double eps=1e-10; + double yerr,ytemp,htemp, hnext; + double h=htry; + double xnew; // new variable + double k1,k2,k3,k4,k5,k6; + for(;;){ + k1=h*f(*this,y,nl); + k2=h*f(*this,y+b21*k1,nl); + k3=h*f(*this,y+b31*k1+b32*k2,nl); + k4=h*f(*this,y+b41*k1+b42*k2+b43*k3,nl); + k5=h*f(*this,y+b51*k1+b52*k2+b53*k3+b54*k4,nl); + k6=h*f(*this,y+b61*k1+b62*k2+b63*k3+b64*k4+b65*k5,nl); + // y value at x+h as a sum of the previous value and the + // correspondingly weighted function evaluations + ytemp= y+ c1*k1+ c2*k2+ c3*k3+ c4*k4+ c5*k5+ c6*k6; + // Estimate of uncertainty + yerr=dc1*k1 + dc2*k2 + dc3*k3 + dc4*k4 + dc5*k5 + dc6*k6; + double err=0.; + err=fmax(err,fabs(yerr/eps)); + + // Uncertainty too big? -> Discard result and reduce step size + if(err>1.){ + htemp=0.9*h*pow(err,-0.25); + if(h>=0.){h=fmax(htemp,0.1*h);} + else{h=fmin(htemp,0.1*h);} + xnew=x+h; // modification to previous code + //decide whether reduced stepsize is still big enough + //(in order to prevent a closed loop) + if(xnew==x){cout<<"stepsize too small"<<endl; RETURN} + continue; + } + else{ + if(err>1.89e-4){ + hnext=0.9*h*pow(err,-0.2); + } + // Uncertainty OK? -> take y value, increase h + else{ + hnext=5.*h; + } + x+=h; + + y=ytemp; + htry=hnext; + break; + } + } + return y; +} + +// Function: double CRunDec::AlphasExact(double AlphaS0, double Mu0, +// double MuEnd, int nl) +// Compute \alpha_s using eq.(1) of [RunDec] +double CRunDec::AlphasExact(double AlphaS0, double Mu0, double MuEnd, int nl){ + if(nl<1||nl>5){ + cout<<"PROCEDURE IS NOT IMPLEMENTED FOR "<< nl<<" LOOPS"<<endl; + RETURN + } + double Lambda=LamExpl(AlphaS0,Mu0,nl); + if(MuEnd/Lambda<1.5){ + cout<<"WARNING: the ratio \\mu/\\lambda = "<< MuEnd/Lambda + <<" is very small!"<<endl; + RETURN + } + double x,y; + x=log(Mu0); + y=AlphaS0/Pi; + double h; + + if(Mu0<MuEnd){ + h=1e-4; + while(x<(log(MuEnd))){ + y=this->fRungeKuttaImpl(x,y,h,nl,fSetdydx); + if(x+h>=log(MuEnd)){ + h=log(MuEnd)-x; + } + } + return(y*Pi); + } + else{h=-1e-4;} + while(x>(log(MuEnd))){ + y=this->fRungeKuttaImpl(x,y,h,nl,fSetdydx); + if(x+h<=log(MuEnd)){ + h=log(MuEnd)-x; + } + } + return(y*Pi); +} + +// Eq.(10) of [RunDec] +double CRunDec::fSetcx(double x, int nl){ + double sum[5]; + sum[0]=1; + sum[1]=(C[1]-B[1]*C[0])*x; + sum[2]=0.5*((C[1]-B[1]*C[0])*(C[1]-B[1]*C[0]) + C[2] - B[1]*C[1]+ + B[1]*B[1]*C[0] - B[2]*C[0])*x*x; + sum[3]=((C[1]-B[1]*C[0])*(C[1]-B[1]*C[0])*(C[1]-B[1]*C[0])/6. + + 0.5*(C[1]-B[1]*C[0])*(C[2]-B[1]*C[1]+B[1]*B[1]*C[0]-B[2]*C[0])+ + (C[3]-B[1]*C[2]+B[1]*B[1]*C[1]-B[2]*C[1]-B[1]*B[1]*B[1]*C[0] + + 2.*B[1]*B[2]*C[0] - B[3]*C[0])/3.)*x*x*x; + sum[4]=((C[1]-B[1]*C[0])*(C[1]-B[1]*C[0])*(C[1]-B[1]*C[0])*(C[1]-B[1]*C[0])/24. + +(C[1]-B[1]*C[0])*(C[1]-B[1]*C[0])*(C[2]/2. - B[1]*C[1]/2.+ B[1]*B[1]*C[0]/2. - B[2]*C[0]/2.)/2. + +(C[2]/2. - B[1]*C[1]/2.+ B[1]*B[1]*C[0]/2. - B[2]*C[0]/2.)*(C[2]/2. - B[1]*C[1]/2.+ B[1]*B[1]*C[0]/2. - B[2]*C[0]/2.)/2. + +((C[1]-B[1]*C[0])*(C[3]-B[1]*C[2]+B[1]*B[1]*C[1]-B[2]*C[1]-B[1]*B[1]*B[1]*C[0] + 2.*B[1]*B[2]*C[0] - B[3]*C[0])/3.) + +B[1]*B[1]*B[1]*B[1]*C[0]/4. - 3.*B[1]*B[1]*B[2]*C[0]/4. + B[2]*B[2]*C[0]/4. + B[1]*B[3]*C[0]/2. - B[4]*C[0]/4. + -B[1]*B[1]*B[1]*C[1]/4. + B[1]*B[2]*C[1]/2. - B[3]*C[1]/4. + B[1]*B[1]*C[2]/4. - B[2]*C[2]/4. - B[1]*C[3]/4. + C[4]/4.)*x*x*x*x; + double erg=0.0; + for(int i=1; i<=nl; i++){ + erg+=sum[i-1]; + } + return (pow(x,C[0])*erg); +} + +// Function double CRunDec::mMS2mMS(double mmu0, double AlphaS0, +// double AlphaSEnd, int nl) +// Compute m_q(\mu) using eqs.(9) and (10) of [RunDec] +double CRunDec::mMS2mMS(double mmu0, double AlphaS0, double AlphaSEnd, int nl){ + if(nl<0||nl>5){ + cout<<"PROCEDURE IS NOT IMPLEMENTED FOR "<< nl<<" LOOPS"<<endl; + RETURN + } + if(nl==0){ + return mmu0; + } + double cAlphaS0= this->fSetcx(AlphaS0/Pi, nl); + double cAlphaSEnd= this->fSetcx(AlphaSEnd/Pi, nl); + return mmu0*cAlphaSEnd/cAlphaS0; +} + +// Aux. functions (r.h.s of diff. eqs. for alpha_s and m_q) +double fSetdydxM1(CRunDec S, double A, double M){ + return (M*(S.Gamma[0])/(S.Beta[0]*A)); +} + +double fSetdydxa1(CRunDec S, double x, double A){ + if (x == 1.) x=1.; + return (-2.*(S.Beta[0]*A*A)); +} + +double fSetdydxM2(CRunDec S, double A, double M){ + return (M*(S.Gamma[0]+S.Gamma[1]*A)/(S.Beta[0]*A+S.Beta[1]*A*A)); +} + +double fSetdydxa2(CRunDec S, double x, double A){ + if (x == 1.) x=1.; + return (-2.*(S.Beta[0]*A*A+S.Beta[1]*A*A*A)); +} + +double fSetdydxM3(CRunDec S, double A, double M){ + return (M*(S.Gamma[0]+S.Gamma[1]*A+S.Gamma[2]*A*A)/ + (S.Beta[0]*A+S.Beta[1]*A*A+S.Beta[2]*A*A*A)); +} + +double fSetdydxa3(CRunDec S, double x, double A){ + if (x == 1.) x=1.; + return (-2.*(S.Beta[0]*A*A+S.Beta[1]*A*A*A+S.Beta[2]*A*A*A*A)); +} + +double fSetdydxM4(CRunDec S, double A, double M){ + return (M*(S.Gamma[0]+S.Gamma[1]*A+S.Gamma[2]*A*A+S.Gamma[3]*A*A*A)/ + (S.Beta[0]*A+S.Beta[1]*A*A+S.Beta[2]*A*A*A+S.Beta[3]*A*A*A*A)); +} + +double fSetdydxa4(CRunDec S, double x, double A){ + if (x == 1.) x=1.; + return (-2.*(S.Beta[0]*A*A+S.Beta[1]*A*A*A+S.Beta[2]*A*A*A*A+ + S.Beta[3]*A*A*A*A*A)); +} + +double fSetdydxM5(CRunDec S, double A, double M){ + return (M*(S.Gamma[0]+S.Gamma[1]*A+S.Gamma[2]*A*A+S.Gamma[3]*A*A*A + S.Gamma[4]*A*A*A*A)/ + (S.Beta[0]*A+S.Beta[1]*A*A+S.Beta[2]*A*A*A+S.Beta[3]*A*A*A*A+S.Beta[4]*A*A*A*A*A)); +} + +double fSetdydxa5(CRunDec S, double x, double A){ + if (x == 1.) x=1.; + return (-2.*(S.Beta[0]*A*A+S.Beta[1]*A*A*A+S.Beta[2]*A*A*A*A+ + S.Beta[3]*A*A*A*A*A+S.Beta[4]*A*A*A*A*A*A)); +} + +// Runge-Kutta step for implicit procedure +double CRunDec::fRKSchritt(double x, double y, double h, double &yerr, + double (*f)(CRunDec, double , double)){ + double k1,k2,k3,k4,k5,k6; + k1=h*f(*this,x,y); + k2=h*f(*this,x+a2*h,y+b21*k1); + k3=h*f(*this,x+a3*h,y+b31*k1+b32*k2); + k4=h*f(*this,x+a4*h,y+b41*k1+b42*k2+b43*k3); + k5=h*f(*this,x+a5*h,y+b51*k1+b52*k2+b53*k3+b54*k4); + k6=h*f(*this,x+a6*h,y+b61*k1+b62*k2+b63*k3+b64*k4+b65*k5); + + yerr=(dc1*k1 + dc2*k2 + dc3*k3 + dc4*k4 + dc5*k5 + dc6*k6); + return (y+ c1*k1+ c2*k2+ c3*k3+ c4*k4+ c5*k5+ c6*k6); +} + +// Function AsmMS CRunDec::AsmMSrunexact(double mMu, double AlphaS0, double Mu0, +// double MuEnd, int nl) +// Compute \alpha_s and m_q solving diff. eqs. simultaneously. +AsmMS CRunDec::AsmMSrunexact(double mMu, double AlphaS0, double Mu0, + double MuEnd, int nl){ + AsmMS Erg; + if(nl<0||nl>5){ + cout<<"PROCEDURE IS NOT IMPLEMENTED FOR "<< nl<<" LOOPS"<<endl; + this->Abbruch(); + } + if(nl==0){ + Erg.Asexact=AlphaS0; + Erg.mMSexact=mMu; + return Erg; + } + double yerr0,ytemp0,xnew,h=1e-3; + float eps=1e-15; + float errmax; + double x0=log(Mu0); + double y0=AlphaS0/Pi; + double xEnd=log(MuEnd); + double yscal0=abs(x0)+abs(h*y0); + + double (*falpha)(CRunDec, double , double); + double (*fmMS)(CRunDec, double , double); + + if(nl==1){ + falpha=fSetdydxa1; + fmMS=fSetdydxM1; + } + if(nl==2){ + falpha=fSetdydxa2; + fmMS=fSetdydxM2; + } + if(nl==3){ + falpha=fSetdydxa3; + fmMS=fSetdydxM3; + } + if(nl==4){ + falpha=fSetdydxa4; + fmMS=fSetdydxM4; + } + if(nl==5){ + falpha=fSetdydxa5; + fmMS=fSetdydxM5; + } + + if(Mu0<MuEnd){ + h=1e-2; + while(x0<xEnd){ + for(;;){ + ytemp0=fRKSchritt(x0,y0,h,yerr0,falpha); + errmax=0.; + errmax=fmax(errmax,fabs((float)yerr0/yscal0)); + errmax/=eps; + if(errmax>1){ + h*=0.9; + xnew=x0+h; + if(xnew==x0){cout<<"stepsize too small!"<<endl;} + continue; + } //if + else{ + x0+=h; + y0=ytemp0; + if(errmax>1.89e-4){h=0.9*h*pow((double)errmax,-0.2);} + else{h=5.*h;} + break; + }//else + }//for + if(x0+h>=xEnd){ + h=xEnd-x0; + }//if + }//while + Erg.Asexact=y0*Pi; + + x0=AlphaS0/Pi; + xEnd=y0; + y0=mMu; + yscal0=abs(x0)+abs(h*y0); + eps=1e-10; + h=-1e-3; + + while(x0>xEnd){ + for(;;){ + ytemp0=fRKSchritt(x0,y0,h,yerr0,fmMS); + errmax=0.; + errmax=fmax(errmax,fabs((float)yerr0/yscal0)); + errmax/=eps; + if(errmax>1){ + h*=0.9; + xnew=x0+h; + if(xnew==x0){cout<<"stepsize too small!"<<endl;} + continue; + } //if + else{ + x0+=h; + y0=ytemp0; + if(errmax>1.89e-4){h=0.9*h*pow((double)errmax,-0.2);} + else{h=5.*h;} + break; + }//else + }//for + if(x0+h<=xEnd){ + h=xEnd-x0; + }//if + }//while + Erg.mMSexact=y0; + return Erg; + }//if + else{ + h=-1e-2; + while(x0>xEnd){ + for(;;){ + ytemp0=fRKSchritt(x0,y0,h,yerr0,falpha); + errmax=0.; + errmax=fmax(errmax,fabs((float)yerr0/yscal0)); + errmax/=eps; + if(errmax>1){ + h*=0.9; + xnew=x0+h; + if(xnew==x0){cout<<"stepsize too small!"<<endl;} + continue; + } //if + else{ + x0+=h; + y0=ytemp0; + if(errmax>1.89e-4){h=0.9*h*pow((double)errmax,-0.2);} + else{h=5.*h;} + break; + }//else + }//for + if(x0+h<=xEnd){ + h=xEnd-x0; + }//if + }//while + Erg.Asexact=y0*Pi; + + x0=AlphaS0/Pi; + xEnd=y0; + y0=mMu; + yscal0=abs(x0)+abs(h*y0); + eps=1e-10; + h=1e-3; + while(x0<xEnd){ + for(;;){ + ytemp0=fRKSchritt(x0,y0,h,yerr0,fmMS); + errmax=0.; + errmax=fmax(errmax,fabs((float)yerr0/yscal0)); + errmax/=eps; + if(errmax>1){ + h*=0.9; + xnew=x0+h; + if(xnew==x0){cout<<"stepsize too small!"<<endl;} + continue; + } //if + else{ + x0+=h; + y0=ytemp0; + if(errmax>1.89e-4){h=0.9*h*pow((double)errmax,-0.2);} + else{h=5.*h;} + break; + }//else + }//for + if(x0+h>=xEnd){ + h=xEnd-x0; + }//if + }//while + Erg.mMSexact=y0; + return Erg; + }//else +} + +// Coefficients of eq.(13) of [RunDec] +double CRunDec::fMsFromOs1(double mu, double M){ + double lmM=log((mu*mu)/(M*M)); + double erg; + erg= (double) (-cf - (3.*cf*lmM)/4.); + return erg; +} + +double CRunDec::fMsFromOs2(double mu, double M, double nl){ + double lmM=log((mu*mu)/(M*M)); + double erg; + erg= (double) ((-1111.*ca*cf)/384. + (7.*cf*cf)/128. - + (185.*ca*cf*lmM)/96. + (21.*cf*cf*lmM)/32. - (11.*ca*cf*lmM*lmM)/32. + + (9.*cf*cf*lmM*lmM)/32. + (143.*cf*tr)/96. + (13.*cf*lmM*tr)/24. + + (cf*lmM*lmM*tr)/8. + + (71.*cf*nl*tr)/96. + (13.*cf*lmM*nl*tr)/24. + (cf*lmM*lmM*nl*tr)/8. + + (ca*cf*Zeta2)/2 - (15.*cf*cf*Zeta2)/8. - (3.*ca*cf*log(2)*Zeta2)/2. + + 3.*cf*cf*log(2)*Zeta2 - + cf*tr*Zeta2 + (cf*nl*tr*Zeta2)/2. + (3.*ca*cf*Zeta3)/8. - + (3.*cf*cf*Zeta3)/4.); + return erg; +} + +double CRunDec::fMsFromOs3(double mu, double M, double nl){ + double lmM=log((mu*mu)/(M*M)); + double erg; + erg= (double) (lmM*lmM*(-2341.*ca*ca*cf + 1962.*ca*cf*cf - 243.*cf*cf*cf + + 1492.*ca*cf*tr - + 468.*cf*cf*tr + 1492.*ca*cf*nl*tr - 468.*cf*cf*nl*tr - 208.*cf*tr*tr - + 416.*cf*nl*tr*tr - 208.*cf*nl*nl*tr*tr))/1152. + + (lmM*lmM*lmM*(-242.*ca*ca*cf + 297.*ca*cf*cf - 81.*cf*cf*cf + + 176.*ca*cf*tr - 108.*cf*cf*tr + 176.*ca*cf*nl*tr - 108.*cf*cf*nl*tr - + 32.*cf*tr*tr - 64.*cf*nl*tr*tr - 32.*cf*nl*nl*tr*tr))/1152. + + (lmM*(-105944.*ca*ca*cf + 52317.*ca*cf*cf - 13203.*cf*cf*cf + + 74624.*ca*cf*tr - + 5436.*cf*cf*tr + 55616.*ca*cf*nl*tr + 2340.*cf*cf*nl*tr - + 12608.*cf*tr*tr - + 18304.*cf*nl*tr*tr - 5696.*cf*nl*nl*tr*tr + 12672.*ca*ca*cf*Zeta2 - + 52704.*ca*cf*cf*Zeta2 + 19440.*cf*cf*cf*Zeta2 - + 38016.*ca*ca*cf*log(2)*Zeta2 + + 91584.*ca*cf*cf*log(2)*Zeta2 - 31104.*cf*cf*cf*log(2)*Zeta2 - + 29952.*ca*cf*tr*Zeta2 + + 27648.*cf*cf*tr*Zeta2 + 13824.*ca*cf*log(2)*tr*Zeta2 - + 27648.*cf*cf*log(2)*tr*Zeta2 + + 8064.*ca*cf*nl*tr*Zeta2 + 12096.*cf*cf*nl*tr*Zeta2 + + 13824.*ca*cf*log(2)*nl*tr*Zeta2 - + 27648.*cf*cf*log(2)*nl*tr*Zeta2 + 9216.*cf*tr*tr*Zeta2 + + 4608.*cf*nl*tr*tr*Zeta2 - + 4608.*cf*nl*nl*tr*tr*Zeta2 + 9504.*ca*ca*cf*Zeta3 - + 22896.*ca*cf*cf*Zeta3 + + 7776.*cf*cf*cf*Zeta3 + 6912.*ca*cf*tr*Zeta3 - 3456.*cf*cf*tr*Zeta3 + + 6912.*ca*cf*nl*tr*Zeta3 - 3456.*cf*cf*nl*tr*Zeta3))/13824.; + return erg; +} + +//z[3,m](M) according to eq.(15) +double CRunDec::fZmM(double nl){ + double erg; + erg= (double) -9478333./93312. + 55.*log(2)*log(2)*log(2)*log(2)/162. + + (-644201./6480. + 587.*log(2)/27. + 44.*log(2)*log(2)/27.)*Zeta2 - + 61.*Zeta3/27. + 3475*Zeta4/432. + 1439.*Zeta2*Zeta3/72. - + 1975.*Zeta5/216. + 220.*A4/27. + nl*(246643./23328. - + log(2)*log(2)*log(2)*log(2)/81. +(967./108. + 22.*log(2)/27. - + 4.*log(2)*log(2)/27.)*Zeta2 + 241.*Zeta3/72. - 305.*Zeta4/108. - + 8.*A4/27.) + nl*nl*(-2353./23328. - 13.*Zeta2/54 - 7.*Zeta3/54.); + return erg; +} + +double CRunDec::fMsFromOs4(double mu, double M, double nl, double err){ + double lmM=log((mu*mu)/(M*M)); + double erg; + + erg = - 3654.15040757339*err - 1524.2292266911543*lmM - 288.778291935394*lmM*lmM - 32.54735725308642*lmM*lmM*lmM - + 1.85546875*lmM*lmM*lmM*lmM + + nl*nl*nl*(0. + 0.678141025604516*err + 0.3205521521864135*lmM + 0.0800290327210927*lmM*lmM + + 0.010030864197530864*lmM*lmM*lmM) + + nl*nl*(0. - 43.48241924867489*err - 19.82672048099557*lmM - 4.482957520194182*lmM*lmM - + 0.5270061728395061*lmM*lmM*lmM - 0.04108796296296297*lmM*lmM*lmM*lmM) + + nl*(0. + 756.9421565599532*err + 330.1770776731065*lmM + 67.99849534415492*lmM*lmM + + 7.595293209876542*lmM*lmM*lmM + 0.48119212962962954*lmM*lmM*lmM*lmM); + return erg; +} + +// Function: double CRunDec::mOS2mMS(double mOS, std::pair<double,double>* mq, double asmu, +// double Mu, int nl, double fdelm) +double CRunDec::mOS2mMS(double mOS, std::pair<double,double>* mq, double asmu, double Mu,int nl, double fdelm){ + if(nl<0||nl>4){ + cout<<"PROCEDURE IS NOT IMPLEMENTED FOR "<< nl<<" LOOPS"<<endl; + RETURN + } + if(nl == 4 && (Nf<4||Nf>6)){ + cout<<"PROCEDURE IS NOT IMPLEMENTED FOR 4 LOOPS and "<< nl << " FLAVORS" <<endl; + RETURN + } + double sum[5]; + double deltalight = deltamOS2mMS(mOS, mq, asmu/Pi, Mu, Nf-1, nl); + sum[0]=(double) 1.; + sum[1]=asmu*(this ->fMsFromOs1(Mu, mOS))/Pi; + sum[2]=asmu*asmu*(this-> fMsFromOs2(Mu, mOS, Nf-1))/(Pi*Pi); + sum[3]=asmu*asmu*asmu*(this-> fMsFromOs3(Mu, mOS, Nf-1)+this->fZmM(Nf-1))/(Pi*Pi*Pi); + sum[4]=asmu*asmu*asmu*asmu*(this->fMsFromOs4(Mu, mOS, Nf-1, fdelm))/(Pi*Pi*Pi*Pi); + double erg=0.0; + if(nl==0){ + erg=1; + } + else{ + for(int i=0; i<=nl; i++){ + erg+=sum[i]; + } + } + erg += deltalight; + return mOS*erg; +} + +// Function: double CRunDec::mMS2mSI(double mMS, double asmu, double mu, int nl) +double CRunDec::mMS2mSI(double mMS, double asmu, double mu, int nl){ + double epsilonX = 1e-8; + AsmMS asmq; + asmq.Asexact = asmu; + asmq.mMSexact = mMS; + for (;;) { + double mbold = asmq.mMSexact; + asmq = AsmMSrunexact(mMS, asmu, mu, mbold, nl); + if (abs(asmq.mMSexact - mbold) < epsilonX) break; + } + return asmq.mMSexact; +} + +// Coefficients of eq.(18) of [RunDec] +double CRunDec::fMsFromRi1(void){ + return (double) -4./3.; +} +double CRunDec::fMsFromRi2(void){ + double erg= (double) -995./72. + 19.*Zeta3/6. + 89.*Nf/144.; + return erg; +} +double CRunDec::fMsFromRi3(void){ + double erg= (double) -6663911./41472. + 408007.*Zeta3/6912. -185.*Zeta5/36. + + (118325./7776. + 5*Zeta4/12. - 617.*Zeta3/216.)*Nf + + (-4459./23328. - Zeta3/54.)*Nf*Nf; + return erg; +} + +// Function: double CRunDec::mRI2mMS(double mRI, double asmu, int nl) +double CRunDec::mRI2mMS(double mRI, double asmu, int nl){ + if(nl<0||nl>3){ + cout<<"PROCEDURE IS NOT IMPLEMENTED FOR "<< nl<<" LOOPS"<<endl; + RETURN + } + double sum[4]; + sum[0]=(double) 1.; + sum[1]=asmu*(this ->fMsFromRi1())/Pi; + sum[2]=asmu*asmu*(this-> fMsFromRi2())/(Pi*Pi); + sum[3]=asmu*asmu*asmu*(this-> fMsFromRi3())/(Pi*Pi*Pi); + double erg=0.0; + if(nl==0){ + erg=1; + } + else{ + for(int i=0; i<=nl; i++){ + erg+=sum[i]; + } + } + return mRI*erg; +} + +// Function: double CRunDec::mMS2mRGI(double mMS, double asmu, int nl) +double CRunDec::mMS2mRGI(double mMS, double asmu, int nl){ + if(nl<0||nl>5){ + cout<<"PROCEDURE IS NOT IMPLEMENTED FOR "<< nl<<" LOOPS"<<endl; + RETURN + } + if(nl==0){ + return (double) mMS; + } + else{ + double cAsmu= this->fSetcx(asmu/Pi, nl); + return (double) mMS/cAsmu; + } +} + +// Function: double CRunDec::mRGI2mMS(double mRGI, double asmu, int nl) +double CRunDec::mRGI2mMS(double mRGI, double asmu, int nl){ + if(nl<0||nl>5){ + cout<<"PROCEDURE IS NOT IMPLEMENTED FOR "<< nl<<" LOOPS"<<endl; + RETURN + } + if(nl==0){ + return (double) mRGI; + } + double cAsmu= this->fSetcx(asmu/Pi, nl); + return (double) mRGI*cAsmu; +} + +// Coefficients of eq.(17) of [RunDec] +double CRunDec::fOsFromMs1(double mu, double M){ + double lmM=log((mu*mu)/(M*M)); + double erg; + erg= (double) (cf + (3.*cf*lmM)/4.); + return erg; +} + +double CRunDec::fOsFromMs2(double mu, double M, double nl){ + double lmM=log((mu*mu)/(M*M)); + double erg; + erg= (double) ((1111.*ca*cf)/384. - (71.*cf*cf)/128. - + (143.*cf*tr)/96. - (71.*cf*nl*tr)/96. + + lmM*((185.*ca*cf)/96. - (9.*cf*cf)/32. - (13.*cf*tr)/24. - + (13.*cf*nl*tr)/24.) + + lmM*lmM*((11.*ca*cf)/32. + (9.*cf*cf)/32. - (cf*tr)/8. - (cf*nl*tr)/8.) - + (ca*cf*Zeta2)/2. + (15.*cf*cf*Zeta2)/8. + (3.*ca*cf*log(2)*Zeta2)/2. + - 3.*cf*cf*log(2)*Zeta2 + + cf*tr*Zeta2 - (cf*nl*tr*Zeta2)/2. - (3.*ca*cf*Zeta3)/8. + + (3.*cf*cf*Zeta3)/4.); + return erg; +} + +double CRunDec::fOsFromMs3(double mu, double M, double nl){ + double lmM=log((mu*mu)/(M*M)); + double erg; + + erg= (double) (lmM*lmM*lmM*((121.*ca*ca*cf)/576. + (33.*ca*cf*cf)/128. + + (9.*cf*cf*cf)/128. - (11.*ca*cf*tr)/72. - (3.*cf*cf*tr)/32. - + (11.*ca*cf*nl*tr)/72. - + (3.*cf*cf*nl*tr)/32. + (cf*tr*tr)/36. + (cf*nl*tr*tr)/18. + + (cf*nl*nl*tr*tr)/36.) + lmM*lmM*((2341.*ca*ca*cf)/1152. + + (21.*ca*cf*cf)/64. - + (63.*cf*cf*cf)/128. - (373.*ca*cf*tr)/288. - (3.*cf*cf*tr)/32. - + (373.*ca*cf*nl*tr)/288. - (3.*cf*cf*nl*tr)/32. + (13.*cf*tr*tr)/72. + + (13.*cf*nl*tr*tr)/36. + (13.*cf*nl*nl*tr*tr)/72.) + + lmM*((13243.*ca*ca*cf)/1728. - (4219.*ca*cf*cf)/1536. + + (495.*cf*cf*cf)/512. - + (583.*ca*cf*tr)/108. - (307.*cf*cf*tr)/384. - (869.*ca*cf*nl*tr)/216. - + (91.*cf*cf*nl*tr)/384. + (197.*cf*tr*tr)/216. + (143.*cf*nl*tr*tr)/108. + + (89.*cf*nl*nl*tr*tr)/216. - (11.*ca*ca*cf*Zeta2)/12. + + (49.*ca*cf*cf*Zeta2)/16. + + (45.*cf*cf*cf*Zeta2)/32. + (11.*ca*ca*cf*log(2)*Zeta2)/4. - + (35.*ca*cf*cf*log(2)*Zeta2)/8. - + (9.*cf*cf*cf*log(2)*Zeta2)/4. + (13.*ca*cf*tr*Zeta2)/6. - + (cf*cf*tr*Zeta2)/2. - + ca*cf*log(2)*tr*Zeta2 + 2.*cf*cf*log(2)*tr*Zeta2 - + (7.*ca*cf*nl*tr*Zeta2)/12. - + (13.*cf*cf*nl*tr*Zeta2)/8. - ca*cf*log(2)*nl*tr*Zeta2 + + 2.*cf*cf*log(2)*nl*tr*Zeta2 - + (2.*cf*tr*tr*Zeta2)/3. - (cf*nl*tr*tr*Zeta2)/3. + + (cf*nl*nl*tr*tr*Zeta2)/3. - + (11.*ca*ca*cf*Zeta3)/16. + (35.*ca*cf*cf*Zeta3)/32. + + (9.*cf*cf*cf*Zeta3)/16. - + (ca*cf*tr*Zeta3)/2. + (cf*cf*tr*Zeta3)/4. - (ca*cf*nl*tr*Zeta3)/2. + + (cf*cf*nl*tr*Zeta3)/4.)); + return erg; +} + +double CRunDec::fOsFromMs4(double mu, double M, double nl, double err){ + double lmM=log((mu*mu)/(M*M)); + double erg; + erg = 3567.602784989066*err + 1727.2260148986106*lmM + 409.2429990574718*lmM*lmM + 66.93663194444443*lmM*lmM*lmM + + 8.056278935185185*lmM*lmM*lmM*lmM + + nl*nl*nl*(-0.678141025604516*err - 0.3205521521864134*lmM - 0.0800290327210927*lmM*lmM - + 0.010030864197530864*lmM*lmM*lmM) + + nl*(-745.7207145811878*err - 358.29765085086774*lmM - 87.39262571554698*lmM*lmM - + 11.883873456790122*lmM*lmM*lmM - 1.2705439814814814*lmM*lmM*lmM*lmM) + + nl*nl*(43.396250117985666*err + 20.528466368867228*lmM + 4.971905254812516*lmM*lmM + + 0.6304012345679011*lmM*lmM*lmM + 0.06655092592592593*lmM*lmM*lmM*lmM); + return erg; +} + +// Compute 2 Loop contribution to mOS2mMS at 3 loops for MS light quarks +double CRunDec::deltamOS2mMS(double mOS, std::pair<double,double>* mq, double asmu, double mu, int nlq, int nloops){ + double erg=0.0; + if(!mq) + return 0.0; + + for(int i = 0; i < 4; i++) { + if(mq[i].first == 0.0) + continue; + + double x = mq[i].first/mOS; + double muf = mq[i].second; + int nl = nlq-i; + if(nloops >= 2) { + erg += asmu*asmu*2./3.*(48.*x*x*x*x*log(x)*log(x) + 48.*x*x*log(x)+72.*x*x + 8.*Pi*Pi*(x*x*x*x-3.*x*x*x-3.*x) + -48.*(x+1.)*(x+1.)*(x*x - x + 1.)*(log(x)*log(x+1) + PolyLog(2,-x)) + -48.*(x-1.)*(x-1.)*(x*x + x + 1.)*(log(x)*log(1-x) + PolyLog(2,x)))/96.; + } + if(nloops >= 3) { + erg += asmu*asmu*asmu*(-21.8714*x - 4.348*x*x - 1.02211*x*x*x - 0.0493333*x*x*x*x + nl*(0.982667*x + 0.300333*x*x) + + log(mu*mu/(mOS*mOS))*(-6.61056*x + 2.46511*x*x - 0.724333*x*x*x + nl*(0.534667*x - 0.22*x*x + 0.067*x*x*x)) + + log(x)*(16.9477*x - 1.10133*nl*x + 2.78756*x*x - 0.0343333*x*x*x) + + 8./9.*(3./2.*log(muf*muf/(mq[i].first*mq[i].first))+2.)*x/24.*(24.*x*x*x*log(x)*log(x) + 12.*x*log(x)+ 24.*x + + Pi*Pi*(4.*x*x*x-9.*x*x-3.) - 6.*(4.*x*x*x + 3.*x*x + 1.)*(log(x)*log(x+1) + PolyLog(2,-x)) + -6.*(x-1.)*(4.*x*x + x + 1.)*(log(x)*log(1-x) + PolyLog(2,x)))); + } + } + + return erg; +} + +// Compute 2 Loop contribution to mMS2mOS at 3 loops for MS light quarks +double CRunDec::deltamMS2mOS(double mMS, std::pair<double,double>* mq, double asmu, double mu, int nlq, int nloops){ + double erg=0.0; + double lmu = log(mu*mu/(mMS*mMS)); + if(!mq) + return 0.0; + + for(int i = 0; i < 4; i++) { + if(mq[i].first == 0.0) + continue; + + double x = mq[i].first/mMS; + double muf = mq[i].second; + int nl = nlq-i; + if(nloops >= 2) { + erg += -asmu*asmu*2./3.*(48.*x*x*x*x*log(x)*log(x) + 48.*x*x*log(x)+72.*x*x + 8.*Pi*Pi*(x*x*x*x-3.*x*x*x-3.*x) + -48.*(x+1.)*(x+1.)*(x*x - x + 1.)*(log(x)*log(x+1) + PolyLog(2,-x)) + -48.*(x-1.)*(x-1.)*(x*x + x + 1.)*(log(x)*log(1-x) + PolyLog(2,x)))/96.; + } + if(nloops >= 3) { + erg += -asmu*asmu*asmu*(-21.8714*x - 4.348*x*x - 1.02211*x*x*x - 0.0493333*x*x*x*x + nl*(0.982667*x + 0.300333*x*x) + + lmu*(-6.61056*x + 2.46511*x*x - 0.724333*x*x*x + nl*(0.534667*x - 0.22*x*x + 0.067*x*x*x)) + + log(x)*(16.9477*x - 1.10133*nl*x + 2.78756*x*x - 0.0343333*x*x*x) + + 8./9.*(3./2.*log(muf*muf/(mq[i].first*mq[i].first))+2.)*x/24.*(24.*x*x*x*log(x)*log(x) + 12.*x*log(x)+ 24.*x + + Pi*Pi*(4.*x*x*x-9.*x*x-3.) - 6.*(4.*x*x*x + 3.*x*x + 1.)*(log(x)*log(x+1) + PolyLog(2,-x)) + -6.*(x-1.)*(4.*x*x + x + 1.)*(log(x)*log(1-x) + PolyLog(2,x)))) + + asmu*asmu*asmu*8./9.*(48.*(3.*lmu + 7.)*x*x*x*x*log(x)*log(x) + 144.*x*x*log(x)+312.*x*x + + 8.*Pi*Pi*(7.*x*x*x*x-15.*x*x*x-3.*x) - lmu*(-72.*x*x + + + 12.*Pi*Pi*(-2.*x*x*x*x+3.*x*x*x - 3*x)) + - 48.*((7.*x+5.)*x*x*x + x + 3.*lmu/2.*(2.*x*x*x*x+x*x*x-x-2.) -1.)*(log(x)*log(x+1) + PolyLog(2,-x)) + - 48.*(x-1.)*(3.*lmu/2.*(2.*x*x*x+x*x+x+2.) + 7.*x*x*x + 2.*x*x + 2.*x + 1.)*(log(x)*log(1-x) + PolyLog(2,x)))/192.; + } + } + + return erg; +} + +// z_m^inv +double CRunDec::fZmInvM(double nl){ + double erg; + erg=(8481925./93312. + + (137.*nl)/216. + (652841.*Pi*Pi)/38880. - (nl*Pi*Pi)/27. - + (695.*Pi*Pi*Pi*Pi)/7776. - (575.*Pi*Pi*log(2))/162. - + (22.*Pi*Pi*log(2)*log(2))/81. - + (55.*log(2)*log(2)*log(2)*log(2))/162. - (220.*A4)/27. - + nl*nl*(-2353./23328. - (13.*Pi*Pi)/324. - (7.*Zeta3)/54.) + + (58.*Zeta3)/27. - + (1439.*Pi*Pi*Zeta3)/432. - nl*(246643./23328. + (967.*Pi*Pi)/648. - + (61.*Pi*Pi*Pi*Pi)/1944. + (11.*Pi*Pi*log(2))/81. - + (2.*Pi*Pi*log(2)*log(2))/81. - + log(2)*log(2)*log(2)*log(2)/81. - (8.*A4)/27. + + (241.*Zeta3)/72.) + + (1975.*Zeta5)/216.); + return erg; +} + +// Function: double CRunDec::mMS2mOS(double mMS, std::pair<double,double>* mq, double asmu, +// double mu,int nl) +double CRunDec::mMS2mOS(double mMS, std::pair<double,double>* mq, double asmu, double mu, int nl, double fdelm){ + if(nl<0||nl>4){ + cout<<"PROCEDURE IS NOT IMPLEMENTED FOR "<< nl<<" LOOPS"<<endl; + RETURN + } + if(nl == 4 && (Nf<4||Nf>6)){ + cout<<"PROCEDURE IS NOT IMPLEMENTED FOR 4 LOOPS and "<< nl << " FLAVORS"<<endl; + RETURN + } + double deltalight = deltamMS2mOS(mMS, mq, asmu/Pi, mu, Nf-1, nl); + double sum[5]; + sum[0]=(double) 1.; + sum[1]=asmu*(this ->fOsFromMs1(mu, mMS))/Pi; + sum[2]=asmu*asmu*((this-> fOsFromMs2(mu, mMS, Nf-1)))/(Pi*Pi); + sum[3]=asmu*asmu*asmu*(this-> fOsFromMs3(mu, mMS, Nf-1)+ + this->fZmInvM(Nf-1))/(Pi*Pi*Pi); + sum[4]=asmu*asmu*asmu*asmu*(this->fOsFromMs4(mu, mMS, Nf-1, fdelm))/(Pi*Pi*Pi*Pi); + double erg=0.0; + if(nl==0){ + erg=1; + } + else{ + for(int i=0; i<=nl; i++){ + erg+=sum[i]; + } + } + erg += deltalight; + return mMS*erg; +} + +// Function: double CRunDec::mMS2mOSmod(double mMS, std::pair<double,double>* mq, double asmu, +// double mu, int nf, int nloop, double fdelm), needed for several other mass relations +double CRunDec::mMS2mOSmod(double mMS, std::pair<double,double>* mq, double asmu, double mu,int nf, int nloop, double fdelm){ + if(nloop<0||nloop>4){ + cout<<"PROCEDURE IS NOT IMPLEMENTED FOR "<< nloop <<" LOOPS"<<endl; + RETURN + } + if(nloop == 4 && (nf<4||nf>6)){ + cout<<"PROCEDURE IS NOT IMPLEMENTED FOR 4 LOOPS and "<< nf << " FLAVORS"<<endl; + RETURN + } + SetConstants(nf); + double sum[5]; + double lmm = log((mu*mu)/(mMS*mMS)); + sum[0]=(double) 1.; + + + sum[1]=asmu*(this ->fOsFromMs1(mu, mMS))/(Pi); + sum[2]=asmu*asmu*((this-> fOsFromMs2(mu, mMS, Nf-1)))/(Pi*Pi) + + asmu*asmu*(lmm)/(6.*Pi)*(this ->fOsFromMs1(mu, mMS))/(Pi); + sum[3]=asmu*asmu*asmu*(this-> fOsFromMs3(mu, mMS, Nf-1)+this->fZmInvM(Nf-1))/(Pi*Pi*Pi)+ + asmu*asmu*asmu*2.*(lmm)/(6.*Pi)*((this-> fOsFromMs2(mu, mMS, Nf-1)))/(Pi*Pi)+ + asmu*asmu*asmu*(-11./72. + (11.*lmm)/24. + lmm*lmm/36.)/(Pi*Pi)*(this ->fOsFromMs1(mu, mMS))/(Pi); + sum[4]=asmu*asmu*asmu*asmu*(this->fOsFromMs4(mu, mMS, Nf-1, fdelm))/(Pi*Pi*Pi*Pi) + + asmu*asmu*asmu*asmu*3.*(lmm)/(6.*Pi)*(this-> fOsFromMs3(mu, mMS, Nf-1)+this->fZmInvM(Nf-1))/(Pi*Pi*Pi) + + asmu*asmu*asmu*asmu*2.*(-11./72. + (11.*lmm)/24. + lmm*lmm/36.)/(Pi*Pi)* + ((this-> fOsFromMs2(mu, mMS, Nf-1)))/(Pi*Pi) + + asmu*asmu*asmu*asmu*(-564731./124416. + (2645.*lmm)/1728. + (167.*lmm*lmm)/576. + lmm*lmm*lmm/216. + + (2633./31104. - (67.*lmm)/576. + lmm*lmm/36.)*(Nf-1) + (82043.*Zeta3)/27648.)/(Pi*Pi*Pi) + *(this ->fOsFromMs1(mu, mMS))/(Pi) + + asmu*asmu*asmu*asmu*(lmm)/(6.*Pi)*(lmm)/(6.*Pi)*((this-> fOsFromMs2(mu, mMS, Nf-1)))/(Pi*Pi); + + double erg=0.0; + if(nloop==0){ + erg=1; + } + else{ + for(int i=0; i<=nloop; i++){ + erg+=sum[i]; + } + } + return mMS*erg; +} + +// Coefficients of eq.(16) of [RunDec] +double CRunDec::fMumFromOs1(void){ + return (double) -cf; +} + +double CRunDec::fMumFromOs2(void){ + double erg; + erg= (double) ((-1111.*ca*cf)/384. + (199.*cf*cf)/128. + (143.*cf*tr)/96. + + (71.*cf*(Nf-1)*tr)/96. + (ca*cf*Zeta2)/2. - (15.*cf*cf*Zeta2)/8. - + (3.*ca*cf*log(2)*Zeta2)/2. + + 3.*cf*cf*log(2)*Zeta2 - cf*tr*Zeta2 + (cf*(Nf-1)*tr*Zeta2)/2. + + (3.*ca*cf*Zeta3)/8. - + (3.*cf*cf*Zeta3)/4.); + return erg; +} + +// z_m^SI +double CRunDec::fMumFromOs3(void){ + double erg; + erg= (double) -7172965./93312. - + (293.*(Nf-1))/216. - (618281.*Pi*Pi)/38880. - ((Nf-1)*Pi*Pi)/9. + + (695.*Pi*Pi*Pi*Pi)/7776. + (623.*Pi*Pi*log(2))/162. + + (22.*Pi*Pi*log(2)*log(2))/81. + + (55.*log(2)*log(2)*log(2)*log(2))/162. + (220.*A4)/27. + + (Nf-1)*(Nf-1)*(-2353./23328. - (13.*Pi*Pi)/324. - (7.*Zeta3)/54.) - + (70.*Zeta3)/27. + + (1439.*Pi*Pi*Zeta3)/432. + (Nf-1)*(246643./23328. + (967.*Pi*Pi)/648. - + (61.*Pi*Pi*Pi*Pi)/1944. + (11.*Pi*Pi*log(2))/81. - + (2*Pi*Pi*log(2)*log(2))/81. - + log(2)*log(2)*log(2)*log(2)/81. - (8.*A4)/27. + (241.*Zeta3)/72.) - + (1975.*Zeta5)/216.; + return erg; +} + +double CRunDec::fMumFromOs4(double err){ + double erg; + erg = err*(-3214.227044839041 + 692.4809215366435*(-1. + Nf) - 41.95978562498058*(-1. + Nf)*(-1. + Nf) + + 0.678141025604516*(-1. + Nf)*(-1. + Nf)*(-1. + Nf)); + return erg; +} + +// Function: double CRunDec::mOS2mSI(double mOS, std::pair<double,double>* mq, double asM, +// int nl) +double CRunDec::mOS2mSI(double mOS, std::pair<double,double>* mq, double asM, int nl, double fdelm){ + if(nl<0||nl>4){ + cout<<"PROCEDURE IS NOT IMPLEMENTED FOR "<< nl<<" LOOPS"<<endl; + RETURN + } + if(nl == 4 && (Nf<4||Nf>6)){ + cout<<"PROCEDURE IS NOT IMPLEMENTED FOR 4 LOOPS and "<< Nf << " FLAVORS"<<endl; + RETURN + } + + double sum[5]; + double deltalight = deltamOS2mMS(mOS, mq, asM/Pi, mOS, Nf-1, nl); + sum[0]=(double) 1.; + sum[1]=asM*(this ->fMumFromOs1())/Pi; + sum[2]=asM*asM*(this-> fMumFromOs2())/(Pi*Pi); + sum[3]=asM*asM*asM*(this-> fMumFromOs3())/(Pi*Pi*Pi); + sum[4]=asM*asM*asM*asM*(this->fMumFromOs4(fdelm))/(Pi*Pi*Pi*Pi); + + + double erg=0.0; + if(nl==0){ + erg=1; + } + else{ + for(int i=0; i<=nl; i++){ + erg+=sum[i]; + } + } + erg += deltalight; + return mOS*erg; + +} + +// Function: double CRunDec::mOS2mMSrun(double mOS, std::pair<double,double>* mq, double asmu, +// double mu, int nl) +double CRunDec::mOS2mMSrun(double mOS, std::pair<double,double>* mq, double asmu, double mu, + int nl){ + double asM=0.0; + asM= this-> AlphasExact(asmu, mu, mOS, nl); + double mum= this-> mOS2mSI(mOS, mq, asM, nl); + double asmum= this-> AlphasExact(asmu, mu, mum, nl); + double newM= this->mMS2mMS(mum, asmum, asmu, nl); + return newM; +} + +// Function: double CRunDec::mMS2mOSrun(double mMS, std::pair<double,double>* mq, double asmu, +// double mu, int nl) +double CRunDec::mMS2mOSrun(double mMS, std::pair<double,double>* mq, double asmu, double mu, + int nl){ + double mNeu = mMS2mSI(mMS, asmu, mu, nl); + double asmNeu = AlphasExact(asmu, mu, mNeu, nl); + return mMS2mOS(mNeu, mq, asmNeu, mNeu, nl); +} + +// Coefficients of eq.(19) of [RunDec] +double CRunDec::fRiFromMs(double alpha, double nl){ + double sum[4]; + sum[0]= 1.; + sum[1]= (4.*alpha)/3.; + sum[2]= alpha*alpha*((1123./72. - (89.*Nf)/144. - (19.*Zeta3)/6.)); + sum[3]= alpha*alpha*alpha*(6663911./41472. - (118325.*Nf)/7776. + + (4459.*Nf*Nf)/23328. + + (4.*(1123./72. - (89.*Nf)/144. - (19.*Zeta3)/6.))/3. - + (408007.*Zeta3)/6912. + + (617.*Nf*Zeta3)/216. + (Nf*Nf*Zeta3)/54. - (4.*(-995./72. + + (89.*Nf)/144. + (19.*Zeta3)/6.))/3. - + (5.*Nf*Zeta4)/12. + (185.*Zeta5)/36.); + double erg=0.0; + if(nl==0){ + erg=1.; + } + else{ + erg=0.; + for(int i=0; i<=nl; i++){ + erg+=sum[i]; + } + } + return (erg); +} + +// Function: double CRunDec::mMS2mRI(double mMS, double asmu, int nl) +double CRunDec::mMS2mRI(double mMS, double asmu, int nl){ + if(nl<0||nl>3){ + cout<<"PROCEDURE IS NOT IMPLEMENTED FOR "<< nl<<" LOOPS"<<endl; + RETURN + } + return (double) mMS*(this->fRiFromMs((asmu/Pi), nl)); +} + +// Coefficients needed for the transformation of mOS to mMSit +double CRunDec::fHelpmOS2mMSit(double mMS, double mOS, std::pair<double,double>* mq, double asmu, + double mu, int nl){ + double sum[4]; + double deltalight = deltamMS2mOS(mMS,mq,asmu/Pi,mu,Nf-1,nl); + sum[0]=(double) 1.; + sum[1]=asmu*(this ->fOsFromMs1(mu, mMS))/Pi; + sum[2]=asmu*asmu*((this-> fOsFromMs2(mu, mMS, Nf-1)))/(Pi*Pi); + sum[3]=asmu*asmu*asmu*(this-> fOsFromMs3(mu, mMS,Nf-1)+ + +this->fZmInvM(Nf-1))/(Pi*Pi*Pi); + double erg=0.0; + if(nl==0){ + erg=1; + } + else{ + for(int i=0; i<=nl; i++){ + erg+=sum[i]; + } + } + erg += deltalight; + return erg; +} + +// Function: double CRunDec::mOS2mMSit(double mOS, std::pair<double,double>* mq, double asmu, +// double mu, int nl) +double CRunDec::mOS2mMSit(double mOS, std::pair<double,double>* mq, double asmu, double mu, + int nl){ + if(nl<0||nl>4){ + cout<<"PROCEDURE IS NOT IMPLEMENTED FOR "<< nl<<" LOOPS"<<endl; + RETURN + } + double epsilonX= 1e-8; + double x0=mOS-0.1*mOS; + double x1=mOS+0.1*mOS; + double f0= (x0*(this->fHelpmOS2mMSit(x0,mOS, mq, asmu, mu, nl))-mOS); + double f1= (x1*(this->fHelpmOS2mMSit(x1,mOS, mq, asmu, mu, nl))-mOS); + if(f0*f1>0){ + cout<<"WARNING: No root can be calculatet!"<<endl; + RETURN + } + double xTest; + double fTest; + do{ + xTest= (x0+x1)/2.; + fTest= (xTest*(this->fHelpmOS2mMSit(xTest,mOS, mq, asmu, mu, nl))-mOS); + if(f0*fTest<=0){x1= xTest;} + else {x0= xTest;} + } + while(abs(x1-x0)>= epsilonX); + double mNeu=xTest; + return mNeu; +} + +double CRunDec::PSdelta(double asmu, double muf, double mu, int nl, int nloops) { + if(nloops<0||nloops>4){ + cout<<"PROCEDURE IS NOT IMPLEMENTED FOR "<< nloops<<" LOOPS"<<endl; + RETURN + } + double lf = log(mu*mu/(muf*muf)); + double api = asmu; + double ret[5]; + ret[0] = 0.0; + ret[1] = api*4./3.; + ret[2] = api*api*(97./9. + nl*(-22./27. - (2.*lf)/9.) + (11.*lf)/3.); + ret[3] = api*api*api*(33623./216. + 3.*Pi*Pi - (3.*Pi*Pi*Pi*Pi)/16. + (610.*lf)/9. + + (121.*lf*lf)/12. + nl*nl*(157./243. + (22.*lf)/81. + lf*lf/27.) + + nl*(-7145./324. - (493.*lf)/54. - (11.*lf*lf)/9. - (13.*Zeta3)/9.) + (11.*Zeta3)/2.); + ret[4] = api*api*api*api*(3567.723056629293 + (7271.*lf*lf)/24. + (1331.*lf*lf*lf)/48. + + nl*nl*nl*(-2951./4374. - (157.*lf)/486. - (11.*lf*lf)/162. - + lf*lf*lf/162.) + nl*(-701.2303148875468 - (8485.*lf*lf)/144. - (121.*lf*lf*lf)/24. + + lf*(-253189./864. - (3.*Pi*Pi)/2. + (3.*Pi*Pi*Pi*Pi)/32. + - (44.*Zeta3)/3.)) + nl*nl*(1751971./46656. + Pi*Pi*Pi*Pi/135. + (773.*lf*lf)/216. + + (11.*lf*lf*lf)/36. + lf*(15355./864. + (13.*Zeta3)/18.) + + (259.*Zeta3)/108.) + lf*(26125./18. + (99.*Pi*Pi)/4. - (99.*Pi*Pi*Pi*Pi)/64. + (363.*Zeta3)/8.)); + + double delta = 0.0; + for(int i = 0; i <= nloops; i++) { + delta += ret[i]; + } + return delta; +} + +// Function: double CRunDec::mOS2mPS(double mOS, std::pair<double,double>* mq, double asmu, double mu, double muf, int nl, int nloops) +double CRunDec::mOS2mPS(double mOS, std::pair<double,double>* mq, double asmu, double mu, double muf, int nl, int nloops) { + if(nloops<0||nloops>4){ + cout<<"PROCEDURE IS NOT IMPLEMENTED FOR "<< nloops<<" LOOPS"<<endl; + RETURN + } + + return mOS - muf*PSdelta(asmu/Pi, muf, mu, nl, nloops); +} + +// Function: double CRunDec::mMS2mPS(double mMS, std::pair<double,double>* mq, double asmu, +// double mu, double muf, int nl, int nloops, double fdelm) +double CRunDec::mMS2mPS(double mMS, std::pair<double,double>* mq, double asmu, + double mu, double muf, int nl, int nloops, double fdelm) { + if(nloops<0||nloops>4){ + cout<<"PROCEDURE IS NOT IMPLEMENTED FOR "<< nloops<<" LOOPS"<<endl; + RETURN + } + + double delmuf = PSdelta(asmu/Pi, muf, mu, nl, nloops); + double exmOS = mMS2mOSmod(mMS, this->mq, asmu, mu, nl+1, nloops, fdelm); + return (exmOS - muf*delmuf); +} + +// Function: double CRunDec::mPS2mMS(double mPS, std::pair<double,double>* mq, double asmu, +// double mu, double muf, int nl, int nloops, double fdelm) +double CRunDec::mPS2mMS(double mPS, std::pair<double,double>* mq, double asmu, + double mu, double muf, int nl, int nloops, double fdelm) { + if(nloops<0||nloops>4){ + cout<<"PROCEDURE IS NOT IMPLEMENTED FOR "<< nloops<<" LOOPS"<<endl; + RETURN + } + + double lowbound = mPS - mPS/4.; + double highbound = mPS + mPS/4.; + bool found = false; + double f1 = mMS2mPS(lowbound, mq, asmu, mu, muf, nl, nloops, fdelm) - mPS; + double f2 = mMS2mPS(highbound, mq, asmu, mu, muf, nl, nloops, fdelm) - mPS; + for(int j = 0; j < 1000; j++) { + if(f1*f2 < 0.0) { + found = true; + break; + } + if(fabs(f1) < fabs(f2)) { + lowbound += 1.5*(lowbound - highbound); + if(lowbound < 0.0) + lowbound = 0.0; + f1 = mMS2mPS(lowbound, mq, asmu, mu, muf, nl, nloops, fdelm) - mPS; + } else { + highbound -= 1.5*(lowbound - highbound); + f2 = mMS2mPS(highbound, mq, asmu, mu, muf, nl, nloops, fdelm) - mPS; + } + } + if(found) { + double acc = 10e-10; + double dx; + double xmid; + double mMS = f1 < 0.0 ? (dx=highbound-lowbound,lowbound) : (dx=lowbound-highbound,highbound); + for(int j = 0; j < 1000; j++) { + f2 = mMS2mPS(xmid = mMS+(dx *= 0.5), mq, asmu, mu, muf, nl, nloops, fdelm) - mPS; + if(f2 <= 0.0) + mMS = xmid; + if(fabs(dx) < acc || f2 == 0.0) + return mMS; + } + } + return 0.0; +} + +// Function: double CRunDec::mPS2mSI(double mPS, std::pair<double,double>* mq, +// double (*as)(double), double muf, int nl, int nloops, double fdelm) +// The function pointer passed should contain the adress of a function computing alpha_s in dependence of mu +double CRunDec::mPS2mSI(double mPS, std::pair<double,double>* mq, + double (*as)(double), double muf, int nl, int nloops, double fdelm) { + if(as == NULL) { + cout << "Pointer to as == NULL! Aborting..." << endl; + RETURN + } + double mMS1 = 0; + double mMS = mPS; + double acc = 10e-6; + while(fabs(mMS1 - mMS) > acc) { + mMS1 = mMS; + mMS = mPS2mMS(mPS, mq, as(mMS1), mMS1, muf, nl, nloops, fdelm); + } + return mMS; +} + + +double CRunDec::E1p(double mOS, double asmu, double mu, int nl, int nloops) { + if(nloops<0||nloops>4){ + cout<<"PROCEDURE IS NOT IMPLEMENTED FOR "<< nloops<<" LOOPS"<<endl; + RETURN + } + double lmm = log(mu/mOS); + double lmm34 = log(3.*mu/(4.*asmu*mOS)); + double api = asmu/(Pi); + double ret[5]; + + ret[0] = 0.0; + ret[1] = 1.0; + ret[2] = api*(97./6. + nl*(-11./9. - (2.*lmm34)/ + 3.) + 11.*lmm34); + ret[3] = api*api*(1793./12. + (2917./216. - (11.*nl)/18. + nl*nl/54.)*Pi*Pi - + (9.*Pi*Pi*Pi*Pi)/32. + (927.*lmm34)/4. + + (363.*lmm34*lmm34)/4. + nl*(-1693./72. - + (193.*lmm34)/6. - 11.*lmm34*lmm34 - (19.*Zeta3)/2.) + nl*nl*(77./108. + + lmm34 + lmm34*lmm34/3. + + (2.*Zeta3)/9.) + (275.*Zeta3)/4.); + ret[4] = api*api*api*(1267919./1728. + Pi*Pi*Pi*Pi*(-723119./51840. + (11.*nl*nl)/ + 1080. - nl*nl*nl/4860. + nl*(59677./77760. + (3.*lmm34)/8.) - (99.*lmm34)/16.) + + (4521.*lmm34*lmm34)/2. + (1331.* + lmm34*lmm34*lmm34)/2. + (114917.*Zeta3)/48. + + lmm34*(247675./96. + (3025.*Zeta3)/2.) + + Pi*Pi*(265.389067842508 + (865.*lmm)/18. + + (26897.*lmm34)/108. + nl*nl*(905./432. + + (11.*lmm34)/9. - (11.*Zeta3)/6.) + + nl*nl*nl*(-19./486. - (2.*lmm34)/81. + + Zeta3/27.) + nl*(-397591./7776. - (5095.*lmm34)/162. + (121.*Zeta3)/4.)) + (13432.614375 - + 3289.906669391583*nl - (1000.*nl*nl*nl)/729. + nl*nl* + ((14002./81. - (416.*Zeta3)/3.)/3. + (3.*(12541./243. + (64.*Pi*Pi*Pi*Pi)/ + 135. + (368.*Zeta3)/3.))/4.))/32. + nl*(-52033./288. - + (10955.*lmm34*lmm34)/24. - + 121.*lmm34*lmm34*lmm34 + lmm34* + (-166309./288. - (902.*Zeta3)/3.) - (8797.*Zeta3)/18. - + 363.*Zeta5) + nl*nl*nl*(-98./729. - (5.*lmm34*lmm34)/ + 9. - (4.*lmm34*lmm34*lmm34)/27. + + lmm34*(-50./81. - (8.*Zeta3)/27.) - + (44.*Zeta3)/81. - (4.*Zeta5)/9.) + (3993.*Zeta5)/2. + + nl*nl*(3073./288. + (1027.*lmm34*lmm34)/36. + + (22.*lmm34*lmm34*lmm34)/3. + (3239.*Zeta3)/108. + + lmm34*(10351./288. + (158.*Zeta3)/9.) + + 22.*Zeta5)); + + + double E = 0.0; + for(int i = 0; i <= nloops; i++) { + E += ret[i]; + } + return -E*(4.*asmu*asmu*mOS)/9.; +} + +// Function: double CRunDec::mOS2m1S(double mOS, std::pair<double,double>* mq, +// double asmu, double mu, int nl, int nloops) +double CRunDec::mOS2m1S(double mOS, std::pair<double,double>* mq, double asmu, double mu, int nl, int nloops) { + if(nloops<0||nloops>4){ + cout<<"PROCEDURE IS NOT IMPLEMENTED FOR "<< nloops<<" LOOPS"<<endl; + RETURN + } + return mOS + 0.5*E1p(mOS, asmu, mu, nl, nloops); +} + +// Function: double CRunDec::mMS2m1S(double mMS, std::pair<double,double>* mq, +// double asmu, double mu, int nl, int nloops, double fdelm) +double CRunDec::mMS2m1S(double mMS, std::pair<double,double>* mq, + double asmu, double mu, int nl, int nloops, double fdelm) { + if(nloops<0||nloops>4){ + cout<<"PROCEDURE IS NOT IMPLEMENTED FOR "<< nloops<<" LOOPS"<<endl; + RETURN + } + if(nl<3||nl>5){ + cout<<"PROCEDURE IS NOT IMPLEMENTED FOR 4 LOOPS and " << nl << " FLAVORS"<<endl; + RETURN + } + double lmm = log(mu*mu/(mMS*mMS)); + double log34 = log((3.*mu)/(4.*asmu*mMS)); + double m1S = mMS; + switch(nloops) { + case 1: m1S += asmu*mMS*(12. - 2.*asmu*Pi + 9.*lmm)/(9.*Pi); + break; + case 2: m1S += asmu*mMS*(-(2.*asmu)/9. + asmu*asmu*(-291. + 22.*nl - 198.*log34 + + 12.*nl*log34 - 3.*(8. + 6.*lmm))/(81.*Pi) + (4. + 3.*lmm)/(3.*Pi) + + (asmu*(2763. - 142.*nl + 96.*Pi*Pi - 16.*nl*Pi*Pi + 32.*Pi*Pi*ln2 + + 2036.*lmm - 104.*nl*lmm + 564.*lmm*lmm - 24.*nl*lmm*lmm - 48.*Zeta3))/(288.*Pi*Pi)); + break; + case 3: m1S += asmu*mMS*(-(2.*asmu)/9. + asmu*asmu*(-291. + 22.*nl - 198.*log34 + + 12.*nl*log34)/(81.*Pi) + (4. + 3.*lmm)/(3.*Pi) - (2.*asmu*asmu*(4. + 3.*lmm))/(27.*Pi) + + asmu*asmu*asmu*(-372. + 40.*nl - 792.*log34 + + 48.*nl*log34 - 279.*lmm + 30.*nl*lmm - + 594.*log34*lmm + 36.*nl*log34*lmm)/(243.*Pi*Pi) + + (asmu*(2763. - 142.*nl + 96.*Pi*Pi - 16.*nl*Pi*Pi + 32.*Pi*Pi*ln2 + 2036.*lmm - 104.*nl*lmm + + 564.*lmm*lmm - 24.*nl*lmm*lmm - 48.*Zeta3))/(288.*Pi*Pi) + asmu*asmu*asmu*(-2763.+ 142.*nl - + 96.*Pi*Pi + 16.*nl*Pi*Pi - 32.*Pi*Pi*ln2 - + 2036.*lmm + 104.*nl*lmm - 564.*lmm*lmm + + 24.*nl*lmm*lmm + 48.*Zeta3)/(1296.*Pi*Pi) + + asmu*asmu*asmu*(-129096. + 20316.*nl - 616.*nl*nl - + 11668.*Pi*Pi + 528.*nl*Pi*Pi - 16.*nl*nl*Pi*Pi + 243.*Pi*Pi*Pi*Pi - + 200232.*log34 + 27792.*nl*log34 - 864.*nl*nl*log34 - + 78408.*log34*log34 + 9504.*nl*log34*log34 - + 288.*nl*nl*log34*log34 - 59400.*Zeta3 + 8208.*nl*Zeta3 - + 192.*nl*nl*Zeta3)/(3888*Pi*Pi) + + (asmu*asmu*(42314585. - 4636940.*nl + 47060.*nl*nl + 7834092.*Pi*Pi - + 713520.*nl*Pi*Pi + 18720.*nl*nl*Pi*Pi - 41700.*Pi*Pi*Pi*Pi + 14640.*nl*Pi*Pi*Pi*Pi - + 1656000.*Pi*Pi*ln2 - 63360.*nl*Pi*Pi*ln2 - 126720.*Pi*Pi*ln2*ln2 + + 11520.*nl*Pi*Pi*ln2*ln2 - 158400.*ln2*ln2*ln2*ln2 + 5760.*nl*ln2*ln2*ln2*ln2 + + 33620760.*lmm - 3723120.*nl*lmm + 64080.*nl*nl*lmm + 1010880.*Pi*Pi*lmm - 220320.*nl*Pi*Pi*lmm + 8640.*nl*nl*Pi*Pi*lmm + + 336960.*Pi*Pi*ln2*lmm - 17280.*nl*Pi*Pi*ln2*lmm + 11726100.*lmm*lmm - 1247400.*nl*lmm*lmm + 28080.*nl*nl*lmm*lmm + + 2009880.*lmm*lmm*lmm - 185760.*nl*lmm*lmm*lmm + 4320.*nl*nl*lmm*lmm*lmm - 3801600.*A4 + 138240.*nl*A4 + 1002240.*Zeta3 - + 1561680.*nl*Zeta3 + 60480.*nl*nl*Zeta3 - 1554120.*Pi*Pi*Zeta3 - 894240.*lmm*Zeta3 - 362880.*nl*lmm*Zeta3 + 4266000.*Zeta5))/ + (466560.*Pi*Pi*Pi)); + break; + case 4: m1S += - (2*asmu*asmu*mMS)/9 + (-291*asmu*asmu*asmu*mMS + 22*asmu*asmu*asmu*mMS*nl - + 198*asmu*asmu*asmu*mMS*log34 + + 12*asmu*asmu*asmu*mMS*nl*log34)/(81*Pi) + + (asmu*mMS*(4 + 3*lmm))/(3*Pi) - + (2*(4*asmu*asmu*asmu*mMS + 3*asmu*asmu*asmu*mMS*lmm))/(27*Pi) + + (-372*asmu*asmu*asmu*asmu*mMS + 40*asmu*asmu*asmu*asmu*mMS*nl - + 792*asmu*asmu*asmu*asmu*mMS*log34 + + 48*asmu*asmu*asmu*asmu*mMS*nl*log34 - + 279*asmu*asmu*asmu*asmu*mMS*lmm + 30*asmu*asmu*asmu*asmu*mMS*nl*lmm - + 594*asmu*asmu*asmu*asmu*mMS*log34*lmm + + 36*asmu*asmu*asmu*asmu*mMS*nl*log34*lmm)/(243*Pi*Pi) + + 1.5139171475883256E-8*(-3.6643425048120157E6*asmu*asmu*asmu*asmu*mMS - + 3.670703784417217E9*asmu*asmu*asmu*asmu*asmu*mMS + 292307.7010004199*asmu*asmu*asmu*asmu*mMS*nl + + 6.48095550442438E8*asmu*asmu*asmu*asmu*asmu*mMS*nl - + 3.6315792483681194E7*asmu*asmu*asmu*asmu*asmu*mMS*nl*nl + + 595364.9557740748*asmu*asmu*asmu*asmu*asmu*mMS*nl*nl*nl - + 2.245324461595123E8*asmu*asmu*asmu*asmu*asmu*mMS*log(mu/mMS) - + 3.062101652047988E9*asmu*asmu*asmu*asmu*asmu*mMS*log34 + + 5.902121099662828E8*asmu*asmu*asmu*asmu*asmu*mMS*nl*log34 - + 3.325469404123189E7*asmu*asmu*asmu*asmu*asmu*mMS*nl*nl*log34 + + 576205.4055744545*asmu*asmu*asmu*asmu*asmu*mMS*nl*nl*nl*log34 - + 1.1274215864457371E9*asmu*asmu*asmu*asmu*asmu*mMS*log34*log34 + + 2.230344299450968E8*asmu*asmu*asmu*asmu*asmu*mMS*nl*log34*log34 - + 1.3715687063042711E7*asmu*asmu*asmu*asmu*asmu*mMS*nl*nl*log34*log34 + + 263004.5457918066*asmu*asmu*asmu*asmu*asmu*mMS*nl*nl*nl*log34*log34 - + 3.1505314540400505E8*asmu*asmu*asmu*asmu*asmu*mMS*log34*log34*log34 + + 5.728239007345548E7*asmu*asmu*asmu*asmu*asmu*mMS*nl*log34*log34*log34 - + 3.4716600044518467E6*asmu*asmu*asmu*asmu*asmu*mMS*nl*nl*log34*log34*log34 + + 70134.54554448176*asmu*asmu*asmu*asmu*asmu*mMS*nl*nl*nl*log34*log34*log34 + + 7.228435160639514E7*asmu*asmu*asmu*asmu*mMS*lmm - + 1.061086986213349E8*asmu*asmu*asmu*asmu*asmu*mMS*lmm - + 9.657775840868242E6*asmu*asmu*asmu*asmu*mMS*nl*lmm + + 1.3033590170779591E7*asmu*asmu*asmu*asmu*asmu*mMS*nl*lmm + + 221297.1713327142*asmu*asmu*asmu*asmu*mMS*nl*nl*lmm - + 323617.3768070282*asmu*asmu*asmu*asmu*asmu*mMS*nl*nl*lmm - + 6.0602822464077026E7*asmu*asmu*asmu*asmu*asmu*mMS*log34* + lmm + 8.924620920535302E6*asmu*asmu*asmu*asmu*asmu*mMS*nl*log34*lmm - + 271771.36398486677*asmu*asmu*asmu*asmu*asmu*mMS*nl*nl*log34* + lmm - 4.2961792555091605E7*asmu*asmu*asmu*asmu*asmu*mMS*log34*log34*lmm + + 5.20749000667777E6*asmu*asmu*asmu*asmu*asmu*mMS*nl*log34*log34* + lmm - 157802.72747508393*asmu*asmu*asmu*asmu*asmu*mMS*nl*nl*log34*log34*lmm + + 3.6846948160874695E7*asmu*asmu*asmu*asmu*mMS*lmm*lmm - + 1.4084441353288308E7*asmu*asmu*asmu*asmu*asmu*mMS*lmm*lmm - + 4.890850849173104E6*asmu*asmu*asmu*asmu*mMS*nl*lmm*lmm + + 1.826785740978923E6*asmu*asmu*asmu*asmu*asmu*mMS*nl*lmm*lmm + + 108536.53795824476*asmu*asmu*asmu*asmu*mMS*nl*nl*lmm*lmm - + 50409.20461009625*asmu*asmu*asmu*asmu*asmu*mMS*nl*nl*lmm*lmm - + 1.0198001263077298E7*asmu*asmu*asmu*asmu*asmu*mMS*log34* + lmm*lmm + 1.0520181831672261E6*asmu*asmu*asmu*asmu*asmu*mMS*nl*log34*lmm*lmm - + 26300.454579180656*asmu*asmu*asmu*asmu*asmu*mMS*nl*nl*log34* + lmm*lmm + 9.281070040868293E6*asmu*asmu*asmu*asmu*mMS* + lmm*lmm*lmm - 2.039381082160633E6*asmu*asmu*asmu*asmu*asmu*mMS* + lmm*lmm*lmm - 919055.1091884745*asmu*asmu*asmu*asmu*mMS*nl* + lmm*lmm*lmm + 188486.5911507947*asmu*asmu*asmu*asmu*asmu*mMS*nl* + lmm*lmm*lmm + 20406.00584022232*asmu*asmu*asmu*asmu*mMS*nl*nl* + lmm*lmm*lmm - 4383.409096530109*asmu*asmu*asmu*asmu*asmu*mMS*nl*nl* + lmm*lmm*lmm + 1.3530751564824337E6*asmu*asmu*asmu*asmu*mMS* + lmm*lmm*lmm*lmm - 130284.49882603479*asmu*asmu*asmu*asmu*mMS*nl* + lmm*lmm*lmm*lmm + 3139.3855138803565*asmu*asmu*asmu*asmu*mMS*nl*nl* + lmm*lmm*lmm*lmm + 678107.270998157*asmu*asmu*asmu*asmu*mMS* + this->fOsFromMs4(mu,mMS,nl,fdelm)) + + (asmu*asmu*mMS*(2763 - 142*nl + 96*Pi*Pi - 16*nl*Pi*Pi + 32*Pi*Pi*ln2 + + 2036*lmm - 104*nl*lmm + 564*lmm*lmm - 24*nl*lmm*lmm - 48*Zeta3))/ + (288*Pi*Pi) + (-2763*asmu*asmu*asmu*asmu*mMS + 142*asmu*asmu*asmu*asmu*mMS*nl - + 96*asmu*asmu*asmu*asmu*mMS*Pi*Pi + 16*asmu*asmu*asmu*asmu*mMS*nl*Pi*Pi - + 32*asmu*asmu*asmu*asmu*mMS*Pi*Pi*ln2 - 2036*asmu*asmu*asmu*asmu*mMS*lmm + + 104*asmu*asmu*asmu*asmu*mMS*nl*lmm - 564*asmu*asmu*asmu*asmu*mMS*lmm*lmm + + 24*asmu*asmu*asmu*asmu*mMS*nl*lmm*lmm + 48*asmu*asmu*asmu*asmu*mMS*Zeta3)/(1296*Pi*Pi) + + (-129096*asmu*asmu*asmu*asmu*mMS + 20316*asmu*asmu*asmu*asmu*mMS*nl - 616*asmu*asmu*asmu*asmu*mMS*nl*nl - + 11668*asmu*asmu*asmu*asmu*mMS*Pi*Pi + 528*asmu*asmu*asmu*asmu*mMS*nl*Pi*Pi - + 16*asmu*asmu*asmu*asmu*mMS*nl*nl*Pi*Pi + 243*asmu*asmu*asmu*asmu*mMS*Pi*Pi*Pi*Pi - + 200232*asmu*asmu*asmu*asmu*mMS*log34 + + 27792*asmu*asmu*asmu*asmu*mMS*nl*log34 - + 864*asmu*asmu*asmu*asmu*mMS*nl*nl*log34 - + 78408*asmu*asmu*asmu*asmu*mMS*log34*log34 + + 9504*asmu*asmu*asmu*asmu*mMS*nl*log34*log34 - + 288*asmu*asmu*asmu*asmu*mMS*nl*nl*log34*log34 - + 59400*asmu*asmu*asmu*asmu*mMS*Zeta3 + 8208*asmu*asmu*asmu*asmu*mMS*nl*Zeta3 - + 192*asmu*asmu*asmu*asmu*mMS*nl*nl*Zeta3)/(3888*Pi*Pi) + + (asmu*asmu*asmu*mMS*(42314585 - 4636940*nl + 47060*nl*nl + 7834092*Pi*Pi - + 713520*nl*Pi*Pi + 18720*nl*nl*Pi*Pi - 41700*Pi*Pi*Pi*Pi + 14640*nl*Pi*Pi*Pi*Pi - + 1656000*Pi*Pi*ln2 - 63360*nl*Pi*Pi*ln2 - 126720*Pi*Pi*ln2*ln2 + + 11520*nl*Pi*Pi*ln2*ln2 - 158400*ln2*ln2*ln2*ln2 + 5760*nl*ln2*ln2*ln2*ln2 + + 33620760*lmm - 3723120*nl*lmm + + 64080*nl*nl*lmm + 1010880*Pi*Pi*lmm - + 220320*nl*Pi*Pi*lmm + 8640*nl*nl*Pi*Pi*lmm + + 336960*Pi*Pi*ln2*lmm - + 17280*nl*Pi*Pi*ln2*lmm + 11726100*lmm*lmm - + 1247400*nl*lmm*lmm + 28080*nl*nl*lmm*lmm + + 2009880*lmm*lmm*lmm - 185760*nl*lmm*lmm*lmm + + 4320*nl*nl*lmm*lmm*lmm - 3801600*A4 + + 138240*nl*A4 + 1002240*Zeta3 - 1561680*nl*Zeta3 + + 60480*nl*nl*Zeta3 - 1554120*Pi*Pi*Zeta3 - + 894240*lmm*Zeta3 - 362880*nl*lmm*Zeta3 + + 4266000*Zeta5))/(466560*Pi*Pi*Pi); + break; + } + + + + return m1S; +} + +// Function: double CRunDec::m1S2mMS(double m1S, std::pair<double,double>* mq, +// double asmu, double mu, int nl, int nloops, double fdelm) +double CRunDec::m1S2mMS(double m1S, std::pair<double,double>* mq, + double asmu, double mu, int nl, int nloops, double fdelm) { + if(nloops<0||nloops>4){ + cout<<"PROCEDURE IS NOT IMPLEMENTED FOR "<< nloops<<" LOOPS"<<endl; + RETURN + } + + double lowbound = m1S - m1S/5.; + double highbound = m1S + m1S/5.; + bool found = false; + double f1 = mMS2m1S(lowbound, mq, asmu, mu, nl, nloops, fdelm) - m1S; + double f2 = mMS2m1S(highbound,mq, asmu, mu, nl, nloops, fdelm) - m1S; + for(int j = 0; j < 1000; j++) { + if(f1*f2 < 0.0) { + found = true; + break; + } + if(fabs(f1) < fabs(f2)) + f1 = mMS2m1S(lowbound += 1.5*(lowbound - highbound), mq, asmu, mu, nl, nloops, fdelm) - m1S; + else + f2 = mMS2m1S(highbound -= 1.5*(lowbound - highbound), mq, asmu, mu, nl, nloops, fdelm) - m1S; + } + if(found) { + double acc = 10e-10; + double dx; + double xmid; + double mMS = f1 < 0.0 ? (dx=highbound-lowbound,lowbound) : (dx=lowbound-highbound,highbound); + for(int j = 0; j < 1000; j++) { + f2 = mMS2m1S(xmid = mMS+(dx *= 0.5), mq, asmu, mu, nl, nloops, fdelm) - m1S; + if(f2 <= 0.0) + mMS = xmid; + if(fabs(dx) < acc || f2 == 0.0) + return mMS; + } + } + return 0.0; +} + +// Function: double CRunDec::m1S2mSI(double m1S, std::pair<double,double>* mq, +// double (*as)(double), int nl, int nloops, double fdelm) +// The function pointer passed should contain the adress of a function computing alpha_s in dependence of mu +double CRunDec::m1S2mSI(double m1S, std::pair<double,double>* mq, + double (*as)(double), int nl, int nloops, double fdelm) { + if(as == NULL) { + cout << "Pointer to as == NULL! Aborting..." << endl; + RETURN + } + double mMS1 = 0; + double mMS = m1S; + double acc = 10e-6; + while(fabs(mMS1 - mMS) > acc) { + mMS1 = mMS; + mMS = m1S2mMS(m1S, mq, as(mMS1), mMS1, nl, nloops, fdelm); + } + return mMS; +} + +double CRunDec::exOS2RS(double api, double mmu, double nnuf, int nnl, int nloops) { + if(nloops<0||nloops>4){ + cout<<"PROCEDURE IS NOT IMPLEMENTED FOR "<< nloops<<" LOOPS"<<endl; + RETURN + } + double lmm = log(mmu*mmu/(nnuf*nnuf)); + double ret[5]; + double Nm[] = {1.0, 1.0, 1.0, 0.563, 0.547, 0.527}; + double nu[] = {1.0, 1.0, 1.0, 0.3951, 0.3696, 0.3289}; + double ctil[4][6]; + ctil[1][3] = -0.1638; + ctil[1][4] = -0.1054; + ctil[1][5] = 0.0238; + ctil[2][3] = 0.2372; + ctil[2][4] = 0.2736; + ctil[2][5] = 0.3265; + ctil[3][3] = -0.1205; + ctil[3][4] = -0.161; + ctil[3][5] = -0.2681; + ctil[0][0] = 1; + ctil[0][1] = 1; + ctil[0][2] = 1; + ctil[0][3] = 1; + ctil[0][4] = 1; + ctil[0][5] = 1; + + + ret[0] = 0.0; + ret[1] = api*nnuf*Pi*(1. + ctil[1][nnl] + ctil[2][nnl] + ctil[3][nnl])*Nm[nnl]; + ret[2] = api*api*(((11. - (2.*nnl)/3.)*nnuf*Pi*((ctil[3][nnl]*tgamma(-1. + nu[nnl]))/ + tgamma(-2. + nu[nnl]) + (ctil[2][nnl]*tgamma(nu[nnl]))/ + tgamma(-1. + nu[nnl]) + (ctil[1][nnl]*tgamma(1. + nu[nnl]))/ + tgamma(nu[nnl]) + tgamma(2. + nu[nnl])/tgamma(1. + nu[nnl]))*Nm[nnl])/ + 2. - (nnuf*Pi*(1. + ctil[1][nnl] + ctil[2][nnl] + ctil[3][nnl])* + (-33.*lmm + 2.*nnl*lmm)*Nm[nnl])/12.); + + ret[3] = api*api*api*(((11. - (2.*nnl)/3.)*(11. - (2.*nnl)/3.)*nnuf*Pi*((ctil[3][nnl]*tgamma(nu[nnl]))/ + tgamma(-2. + nu[nnl]) + (ctil[2][nnl]*tgamma(1. + nu[nnl]))/ + tgamma(-1. + nu[nnl]) + (ctil[1][nnl]*tgamma(2. + nu[nnl]))/ + tgamma(nu[nnl]) + tgamma(3. + nu[nnl])/tgamma(1. + nu[nnl]))*Nm[nnl])/ + 4. + nnuf*Pi*(1. + ctil[1][nnl] + ctil[2][nnl] + ctil[3][nnl])* + lmm*((102. - (38.*nnl)/3.)/16. + + ((11. - (2.*nnl)/3.)*(11. - (2.*nnl)/3.)*lmm)/16.)*Nm[nnl] + + ((11. - (2.*nnl)/3.)*nnuf*Pi*((ctil[3][nnl]*tgamma(-1. + nu[nnl]))/ + tgamma(-2. + nu[nnl]) + (ctil[2][nnl]*tgamma(nu[nnl]))/ + tgamma(-1. + nu[nnl]) + (ctil[1][nnl]*tgamma(1. + nu[nnl]))/ + tgamma(nu[nnl]) + tgamma(2. + nu[nnl])/tgamma(1. + nu[nnl]))* + ((11.*lmm)/2. - (nnl*lmm)/3.)*Nm[nnl])/2.); + + ret[4] = api*api*api*api*(((11. - (2.*nnl)/3.)*(11. - (2.*nnl)/3.)*(11. - (2.*nnl)/3.)*nnuf*Pi*((ctil[3][nnl]*tgamma(1. + nu[nnl]))/ + tgamma(-2. + nu[nnl]) + (ctil[2][nnl]*tgamma(2. + nu[nnl]))/ + tgamma(-1. + nu[nnl]) + (ctil[1][nnl]*tgamma(3. + nu[nnl]))/ + tgamma(nu[nnl]) + tgamma(4. + nu[nnl])/tgamma(1. + nu[nnl]))*Nm[nnl])/ + 8. + ((11. - (2.*nnl)/3.)*(11. - (2.*nnl)/3.)*nnuf*Pi*((ctil[3][nnl]*tgamma(nu[nnl]))/ + tgamma(-2. + nu[nnl]) + (ctil[2][nnl]*tgamma(1. + nu[nnl]))/ + tgamma(-1. + nu[nnl]) + (ctil[1][nnl]*tgamma(2. + nu[nnl]))/ + tgamma(nu[nnl]) + tgamma(3. + nu[nnl])/tgamma(1. + nu[nnl]))* + ((33.*lmm)/4. - (nnl*lmm)/2.)*Nm[nnl])/4. + + nnuf*Pi*(1. + ctil[1][nnl] + ctil[2][nnl] + ctil[3][nnl])* + lmm*((2857./2. - (5033.*nnl)/18. + (325.*nnl*nnl)/54.)/64. + + (5.*(102. - (38.*nnl)/3.)*(11. - (2.*nnl)/3.)*lmm)/128. + + ((11. - (2.*nnl)/3.)*(11. - (2.*nnl)/3.)*(11. - (2.*nnl)/3.)*lmm*lmm)/64.)*Nm[nnl] + + ((11. - (2.*nnl)/3.)*nnuf*Pi*((ctil[3][nnl]*tgamma(-1. + nu[nnl]))/ + tgamma(-2. + nu[nnl]) + (ctil[2][nnl]*tgamma(nu[nnl]))/ + tgamma(-1. + nu[nnl]) + (ctil[1][nnl]*tgamma(1. + nu[nnl]))/ + tgamma(nu[nnl]) + tgamma(2. + nu[nnl])/tgamma(1. + nu[nnl]))* + (612.*lmm - 76.*nnl*lmm + + 1089.*lmm*lmm - 132.*nnl*lmm*lmm + + 4.*nnl*nnl*lmm*lmm)*Nm[nnl])/96.); + + + double res = 0.0; + for(int i = 0; i <= nloops; i++) { + res += ret[i]; + } + return res; +} + +double CRunDec::exOS2RSp(double api, double mmu, double nnuf, int nnl, int nloops) { + if(nloops<0||nloops>4){ + cout<<"PROCEDURE IS NOT IMPLEMENTED FOR "<< nloops<<" LOOPS"<<endl; + RETURN + } + double lmm = log(mmu*mmu/(nnuf*nnuf)); + double ret[5]; + double Nm[] = {1.0, 1.0, 1.0, 0.563, 0.547, 0.527}; + double nu[] = {1.0, 1.0, 1.0, 0.3951, 0.3696, 0.3289}; + double ctil[4][6]; + ctil[1][3] = -0.1638; + ctil[1][4] = -0.1054; + ctil[1][5] = 0.0238; + ctil[2][3] = 0.2372; + ctil[2][4] = 0.2736; + ctil[2][5] = 0.3265; + ctil[3][3] = -0.1205; + ctil[3][4] = -0.161; + ctil[3][5] = -0.2681; + ctil[0][0] = 1; + ctil[0][1] = 1; + ctil[0][2] = 1; + ctil[0][3] = 1; + ctil[0][4] = 1; + ctil[0][5] = 1; + + + ret[0] = 0.0; + ret[1] = 0.0; + ret[2] = api*api*((11. - (2.*nnl)/3.)*nnuf*Pi*((ctil[3][nnl]*tgamma(-1. + nu[nnl]))/ + tgamma(-2. + nu[nnl]) + (ctil[2][nnl]*tgamma(nu[nnl]))/ + tgamma(-1. + nu[nnl]) + (ctil[1][nnl]*tgamma(1. + nu[nnl]))/ + tgamma(nu[nnl]) + tgamma(2. + nu[nnl])/tgamma(1. + nu[nnl]))*Nm[nnl])/2.; + + ret[3] = api*api*api*(((11. - (2.*nnl)/3.)*(11. - (2.*nnl)/3.)*nnuf*Pi*((ctil[3][nnl]*tgamma(nu[nnl]))/ + tgamma(-2. + nu[nnl]) + (ctil[2][nnl]*tgamma(1. + nu[nnl]))/ + tgamma(-1. + nu[nnl]) + (ctil[1][nnl]*tgamma(2. + nu[nnl]))/ + tgamma(nu[nnl]) + tgamma(3. + nu[nnl])/tgamma(1. + nu[nnl]))*Nm[nnl])/ + 4. + ((11. - (2.*nnl)/3.)*nnuf*Pi*((ctil[3][nnl]*tgamma(-1. + nu[nnl]))/ + tgamma(-2. + nu[nnl]) + (ctil[2][nnl]*tgamma(nu[nnl]))/ + tgamma(-1. + nu[nnl]) + (ctil[1][nnl]*tgamma(1. + nu[nnl]))/ + tgamma(nu[nnl]) + tgamma(2. + nu[nnl])/tgamma(1. + nu[nnl]))* + ((11.*lmm)/2. - (nnl*lmm)/3.)*Nm[nnl])/2.); + + ret[4] = api*api*api*api*(((11. - (2.*nnl)/3.)*(11. - (2.*nnl)/3.)*(11. - (2.*nnl)/3.)*nnuf*Pi*((ctil[3][nnl]*tgamma(1. + nu[nnl]))/ + tgamma(-2. + nu[nnl]) + (ctil[2][nnl]*tgamma(2. + nu[nnl]))/ + tgamma(-1. + nu[nnl]) + (ctil[1][nnl]*tgamma(3. + nu[nnl]))/ + tgamma(nu[nnl]) + tgamma(4. + nu[nnl])/tgamma(1. + nu[nnl]))*Nm[nnl])/ + 8. + ((11. - (2.*nnl)/3.)*(11. - (2.*nnl)/3.)*nnuf*Pi*((ctil[3][nnl]*tgamma(nu[nnl]))/ + tgamma(-2. + nu[nnl]) + (ctil[2][nnl]*tgamma(1. + nu[nnl]))/ + tgamma(-1. + nu[nnl]) + (ctil[1][nnl]*tgamma(2. + nu[nnl]))/ + tgamma(nu[nnl]) + tgamma(3. + nu[nnl])/tgamma(1. + nu[nnl]))* + ((33.*lmm)/4. - (nnl*lmm)/2.)*Nm[nnl])/4. + + ((11. - (2.*nnl)/3.)*nnuf*Pi*((ctil[3][nnl]*tgamma(-1. + nu[nnl]))/ + tgamma(-2. + nu[nnl]) + (ctil[2][nnl]*tgamma(nu[nnl]))/ + tgamma(-1. + nu[nnl]) + (ctil[1][nnl]*tgamma(1. + nu[nnl]))/ + tgamma(nu[nnl]) + tgamma(2. + nu[nnl])/tgamma(1. + nu[nnl]))* + (612.*lmm - 76.*nnl*lmm + + 1089.*lmm*lmm - 132.*nnl*lmm*lmm + + 4.*nnl*nnl*lmm*lmm)*Nm[nnl])/96.); + + double res = 0.0; + for(int i = 0; i <= nloops; i++) { + res += ret[i]; + } + return res; +} + +// Function: CRunDec::mOS2mRS(double mOS, std::pair<double,double>* mq, double asmu, +// double mu, double nuf, int nl, int nloops, bool prime) +double CRunDec::mOS2mRS(double mOS, std::pair<double,double>* mq, double asmu, + double mu, double nuf, int nl, int nloops, bool prime) { + if(nloops<0||nloops>4){ + cout<<"PROCEDURE IS NOT IMPLEMENTED FOR "<< nloops<<" LOOPS"<<endl; + RETURN + } + if(prime) { + return mOS - exOS2RSp(asmu/Pi, mu, nuf, nl, nloops); + } else { + return mOS - exOS2RS(asmu/Pi, mu, nuf, nl, nloops); + } +} + +// Function: double CRunDec::mMS2mRS(double mMS, std::pair<double,double>* mq, double asmu, +// double mu, double nuf, int nl, int nloops, double fdelm, bool prime) +double CRunDec::mMS2mRS(double mMS, std::pair<double,double>* mq, double asmu, + double mu, double nuf, int nl, int nloops, double fdelm, bool prime) { + if(nloops<0||nloops>4){ + cout<<"PROCEDURE IS NOT IMPLEMENTED FOR "<< nloops<<" LOOPS"<<endl; + RETURN + } + if(prime) { + return mMS2mOSmod(mMS, mq, asmu, mu, nl+1, nloops, fdelm) - exOS2RSp(asmu/Pi, mu, nuf, nl, nloops); + } else { + return mMS2mOSmod(mMS, mq, asmu, mu, nl+1, nloops, fdelm) - exOS2RS(asmu/Pi, mu, nuf, nl, nloops); + } +} + +// Function: double CRunDec::mRS2mMS(double mRS, std::pair<double,double>* mq, double asmu, +// double mu, double muf, int nl, int nloops, double fdelm, bool prime) +double CRunDec::mRS2mMS(double mRS, std::pair<double,double>* mq, double asmu, + double mu, double muf, int nl, int nloops, double fdelm, bool prime) { + if(nloops<0||nloops>4){ + cout<<"PROCEDURE IS NOT IMPLEMENTED FOR "<< nloops<<" LOOPS"<<endl; + RETURN + } + + double lowbound = mRS - mRS/5.; + double highbound = mRS + mRS/5.; + bool found = false; + double f1 = mMS2mRS(lowbound, mq, asmu, mu, muf, nl, nloops, fdelm, prime) - mRS; + double f2 = mMS2mRS(highbound, mq, asmu, mu, muf, nl, nloops, fdelm, prime) - mRS; + for(int j = 0; j < 1000; j++) { + if(f1*f2 < 0.0) { + found = true; + break; + } + if(fabs(f1) < fabs(f2)) + f1 = mMS2mRS(lowbound += 1.5*(lowbound - highbound), mq, asmu, mu, muf, nl, nloops, fdelm, prime) - mRS; + else + f2 = mMS2mRS(highbound -= 1.5*(lowbound - highbound), mq, asmu, mu, muf, nl, nloops, fdelm, prime) - mRS; + } + if(found) { + double acc = 10e-10; + double dx; + double xmid; + double mMS = f1 < 0.0 ? (dx=highbound-lowbound,lowbound) : (dx=lowbound-highbound,highbound); + for(int j = 0; j < 1000; j++) { + f2 = mMS2mRS(xmid = mMS+(dx *= 0.5), mq, asmu, mu, muf, nl, nloops, fdelm, prime) - mRS; + if(f2 <= 0.0) + mMS = xmid; + if(fabs(dx) < acc || f2 == 0.0) + return mMS; + } + } + return 0.0; +} + +// Function: double CRunDec::mRS2mSI(double mRS, std::pair<double,double>* mq, double (*as)(double), +// double muf, int nl, int nloops, double fdelm, bool prime) +// The function pointer passed should contain the adress of a function computing alpha_s in dependence of mu +double CRunDec::mRS2mSI(double mRS, std::pair<double,double>* mq, double (*as)(double), + double muf, int nl, int nloops, double fdelm, bool prime) { + if(as == NULL) { + cout << "Pointer to as == NULL! Aborting..." << endl; + RETURN + } + double mMS1 = 0; + double mMS = mRS; + double acc = 10e-6; + while(fabs(mMS1 - mMS) > acc) { + mMS1 = mMS; + mMS = mRS2mMS(mRS, mq, as(mMS1), mMS1, muf, nl, nloops, fdelm, prime); + } + return mMS; +} + +// Function: double CRunDec::mMS2mRGImod(double mMS, double asmu, int nl) +// See 'mMS2mRGI' but 'Alphas/Pi -> AlphaS*2*Beta0/Pi' +double CRunDec::mMS2mRGImod(double mMS, double asmu, int nl){ + if(nl<0||nl>5){ + cout<<"PROCEDURE IS NOT IMPLEMENTED FOR "<< nl<<" LOOPS"<<endl; + RETURN + } + if(nl==0){ + return (double) mMS; + } + double bet0= 11./4. - Nf/6.; + double cAsmu= this->fSetcx((2*bet0*asmu)/Pi, nl); + return (double) mMS/cAsmu; +} + +// Coefficients of eq.(22) of [RunDec] +double CRunDec::fas5to6os(double A, double mass, double mu, double nlq, double nl){ + double lmM = log((mu*mu)/(mass*mass)); + if(nl==1){ + return 1; + } + double sum[5]; + sum[0]=1.; + sum[1]=A*(-lmM)/6.; + sum[2]=A*A*(-7./24. - (19.*lmM)/24. + (lmM*lmM)/36.); + sum[3]=A*A*A*(-58933./124416. - (8521.*lmM)/1728. - (131.*lmM*lmM)/576. - + (lmM*lmM*lmM)/216. + + nlq*(2479./31104. + (409.*lmM)/1728. + Zeta2/9.) - (2.*Zeta2)/3. - + (2.*Zeta2*log(2))/9. - + (80507.*Zeta3)/27648.); + sum[4]= + A*A*A*A*(-141841753./24494400. - + (7693.*lmM*lmM)/1152. - (8371.*lmM*lmM*lmM)/10368. + lmM*lmM*lmM*lmM/1296. - + (644201.*Pi*Pi)/116640. - (71102219.*Pi*Pi*Pi*Pi)/195955200. - (49.*Zeta2)/18. - + (49*log(2)*Zeta2)/54 + (49*Zeta3)/216 + (587*Pi*Pi*log(2))/486 + + (9318467*Pi*Pi*Pi*Pi*log(2))/32659200 - (2913037*Pi*Pi*log(2)*log(2))/1306368 + + (340853*Pi*Pi*log(2)*log(2)*log(2))/816480 + (3179149*log(2)*log(2)*log(2)*log(2))/1306368 - + (340853*log(2)*log(2)*log(2)*log(2)*log(2))/1360800 + (3179149*A4)/54432 + + (340853*A5)/11340 + lmM*(-19696909./746496. - (29*Zeta2)/9 - + (29*log(2)*Zeta2)/27 + (59*Zeta3)/108 - (2529743*Zeta3)/165888) + + nlq*nlq*(-140825./1492992. - (493*lmM*lmM)/20736 - (13*Pi*Pi)/972 + + lmM*(-1679./186624. - Zeta2/27) - (19*Zeta3)/1728) - + (2428169183*Zeta3)/87091200 + (1439*Pi*Pi*Zeta3)/1296 + + nlq*(1773073./746496. + (6661*lmM*lmM)/10368 + (107*lmM*lmM*lmM)/1728 + + (967*Pi*Pi)/1944 - (697709*Pi*Pi*Pi*Pi)/14929920 + (49*Zeta2)/108 + + (11*Pi*Pi*log(2))/243 - (1709*Pi*Pi*log(2)*log(2))/124416 + + (173*log(2)*log(2)*log(2)*log(2))/124416 + (173*A4)/5184 + + (4756441*Zeta3)/995328 + lmM*(1110443./373248. + (41*Zeta2)/54 + + (2*log(2)*Zeta2)/27 + (7*Zeta3)/27 + (110779*Zeta3)/82944) + + (115*Zeta5)/576) - (40596749*Zeta5)/1451520); + + double erg=0.0; + for(int i=1;i<=nl;i++){ + erg+=sum[i-1]; + } + return erg; +} + +// Function double CRunDec::DecAsDownOS(double als, double massth, double muth, +// int nl) +double CRunDec::DecAsDownOS(double als, double massth, double muth, int nl){ + if(nl<1||nl>5){ + cout<<"PROCEDURE IS NOT IMPLEMENTED FOR "<< nl <<" LOOPS"<<endl; + RETURN + } + double erg=(this->fas5to6os(als/Pi, massth, muth, Nf,nl)); + return als*erg; +} + +// Coefficients of eq.(25) of [RunDec] +double CRunDec::fas6to5os(double A, double mass, double mu, double nlq, double nl){ + double lmM=log((mu*mu)/(mass*mass)); + if(nl==1){ + return 1; + } + double sum[5]; + sum[0]=1.; + sum[1]=A*(lmM)/6.; + sum[2]=A*A*(7./24. + (19.*lmM)/24. + (lmM*lmM)/36.); + sum[3]=A*A*A*(58933./124416. + (2.*Zeta2)/3. + (2.*Zeta2*log(2))/9. + + (80507.*Zeta3)/27648. + (8941.*lmM)/1728. + + (511.*lmM*lmM)/576. + (lmM*lmM*lmM)/216. + + nlq*(-2479./31104. - Zeta2/9. - (409.*lmM)/1728)); + sum[4]=A*A*A*A* + (2313952./382725. + (47039.*lmM*lmM)/3456. + (14149.*lmM*lmM*lmM)/10368. + + lmM*lmM*lmM*lmM/1296. + (644201.*Pi*Pi)/116640. + (71102219.*Pi*Pi*Pi*Pi)/195955200. + + (49.*Zeta2)/18. + (49.*log(2)*Zeta2)/54. - (49.*Zeta3)/216. - (587.*Pi*Pi*log(2))/486. - + (9318467.*Pi*Pi*Pi*Pi*log(2))/32659200. + (2913037.*Pi*Pi*log(2)*log(2))/1306368. - + (340853.*Pi*Pi*log(2)*log(2)*log(2))/816480. - (3179149.*log(2)*log(2)*log(2)*log(2))/1306368. + + (340853.*log(2)*log(2)*log(2)*log(2)*log(2))/1360800. - (3179149.*A4)/54432. - + (340853.*A5)/11340. + nlq*nlq*(140825./1492992. + + (493.*lmM*lmM)/20736. + (13.*Pi*Pi)/972. + lmM*(1679./186624. + Zeta2/27.) + + (19.*Zeta3)/1728.) + (2428169183.*Zeta3)/87091200. - + (1439.*Pi*Pi*Zeta3)/1296. + lmM*(21084715./746496. + (35.*Zeta2)/9. + + (35.*log(2)*Zeta2)/27. - (65.*Zeta3)/108. + (3022001.*Zeta3)/165888.) + + nlq*(-1773073./746496. - (9115.*lmM*lmM)/10368. - (107.*lmM*lmM*lmM)/1728. - + (967.*Pi*Pi)/1944. + (697709.*Pi*Pi*Pi*Pi)/14929920. - (49.*Zeta2)/108. - + (11.*Pi*Pi*log(2))/243. + (1709.*Pi*Pi*log(2)*log(2))/124416. - + (173.*log(2)*log(2)*log(2)*log(2))/124416. - (173.*A4)/5184. + + lmM*(-1140191./373248. - (47.*Zeta2)/54. - (2.*log(2)*Zeta2)/27. - (7.*Zeta3)/27. - + (110779.*Zeta3)/82944.) - (4756441.*Zeta3)/995328. - + (115.*Zeta5)/576.) + (40596749.*Zeta5)/1451520.); + + double erg=0.0; + for(int i=1;i<=nl;i++){ + erg+=sum[i-1]; + } + return erg; +} + +// Function double CRunDec::DecAsUpOS(double als, double massth, double muth, +// int nl) +double CRunDec::DecAsUpOS(double als, double massth, double muth, int nl){ + if(nl<1||nl>5){ + cout<<"PROCEDURE IS NOT IMPLEMENTED FOR "<< nl <<" LOOPS"<<endl; + RETURN + } + double erg=(this->fas6to5os(als/Pi, massth, muth, Nf,nl)); + return als*erg; +} + + +double CRunDec::fas6to5ms(double A, double mass, double mu, double nlq, double nl){ + double lmm=log((mu*mu)/(mass*mass)); + if(nl==1){ + return 1; + } + double sum[5]; + sum[0]= 1.; + sum[1]=A*(lmm)/6.; + sum[2]=A*A*(-11./72. + (11.*lmm)/24. + lmm*lmm/36.); + sum[3]=A*A*A*(-564731./124416. + (2645.*lmm)/1728. + (167.*lmm*lmm)/576. + lmm*lmm*lmm/216. + + (2633./31104. - (67.*lmm)/576. + lmm*lmm/36.)*nlq + (82043.*Zeta3)/27648.); + sum[4]=A*A*A*A*(-1165152397./24494400. - (3031309*A4)/54432 - (340853*A5)/11340 + +(1837*lmm*lmm)/1152 + (2909*lmm*lmm*lmm)/10368 + lmm*lmm*lmm*lmm/1296 + -(3031309*log(2)*log(2)*log(2)*log(2))/1306368 + (340853*log(2)*log(2)*log(2)*log(2)*log(2))/1360800 + +(3031309*log(2)*log(2)*Pi*Pi)/1306368 - (340853*log(2)*log(2)*log(2)*Pi*Pi)/816480 + +(76940219*Pi*Pi*Pi*Pi)/195955200 - (9318467*log(2)*Pi*Pi*Pi*Pi)/32659200 + nlq*nlq*(271883./4478976. + -(6865*lmm)/186624 + (77*lmm*lmm)/20736 - lmm*lmm*lmm/324 - (167*Zeta3)/5184) + +(2362581983*Zeta3)/87091200 + lmm*(-11093717./746496. + (3022001*Zeta3)/165888) + nlq*(4770941./2239488. + -(685*A4)/5184 + (277*lmm*lmm)/10368 + (271*lmm*lmm*lmm)/5184 - (685*log(2)*log(2)*log(2)*log(2))/124416 + +(685*log(2)*log(2)*Pi*Pi)/124416 + (541549*Pi*Pi*Pi*Pi)/14929920 + lmm*(141937./373248. + -(110779*Zeta3)/82944) - (3645913*Zeta3)/995328 - (115*Zeta5)/576) + (12057583*Zeta5)/483840); + double erg=0.0; + for(int i=1;i<=nl;i++){ + erg+=sum[i-1]; + } + return erg; +} + +// Function double CRunDec::DecAsUpMS(double als, double massth, double muth, +// int nl) +double CRunDec::DecAsUpMS(double als, double massth, double muth, int nl){ + if(nl<1||nl>5){ + cout<<"PROCEDURE IS NOT IMPLEMENTED FOR "<< nl <<" LOOPS"<<endl; + RETURN + } + double erg=(this->fas6to5ms(als/Pi, massth, muth, Nf,nl)); + return als*erg; +} + +double CRunDec::fas5to6ms(double A, double mass, double mu, double nlq, double nl){ + double lmm=log((mu*mu)/(mass*mass)); + if(nl==1){ + return 1; + } + double sum[5]; + sum[0]= 1.; + sum[1]=A*(-lmm)/6.; + sum[2]=A*A*(11./72. - (11*lmm)/24 + lmm*lmm/36.); + sum[3]=A*A*A*(564731./124416. - (955.*lmm)/576. + (53.*lmm*lmm)/576. - lmm*lmm*lmm/216. + +(-2633./31104. + (67.*lmm)/576. - lmm*lmm/36.)*nlq - (82043.*Zeta3)/27648.); + sum[4]=A*A*A*A*(291716893./6123600. + (3031309*A4)/54432 + (340853*A5)/11340 + +(2177*lmm*lmm)/3456 - (1883*lmm*lmm*lmm)/10368 + lmm*lmm*lmm*lmm/1296 + +(3031309*log(2)*log(2)*log(2)*log(2))/1306368 + -(340853*log(2)*log(2)*log(2)*log(2)*log(2))/1360800 + -(3031309*log(2)*log(2)*Pi*Pi)/1306368 + (340853*log(2)*log(2)*log(2)*Pi*Pi)/816480 + -(76940219*Pi*Pi*Pi*Pi)/195955200 + (9318467*log(2)*Pi*Pi*Pi*Pi)/32659200 + +lmm*(7391699./746496. - (2529743*Zeta3)/165888) + nlq*nlq*(-271883./4478976. + +(6865*lmm)/186624 - (77*lmm*lmm)/20736 + lmm*lmm*lmm/324 + (167*Zeta3)/5184) + -(2362581983*Zeta3)/87091200 + nlq*(-4770941./2239488. + (685*A4)/5184 + -(1483*lmm*lmm)/10368 - (127*lmm*lmm*lmm)/5184 + (685*log(2)*log(2)*log(2)*log(2))/124416 + -(685*log(2)*log(2)*Pi*Pi)/124416 - (541549*Pi*Pi*Pi*Pi)/14929920 + (3645913*Zeta3)/995328 + +lmm*(-110341./373248. + (110779*Zeta3)/82944) + (115*Zeta5)/576) - (12057583*Zeta5)/483840); + double erg=0.0; + for(int i=1;i<=nl;i++){ + erg+=sum[i-1]; + } + return erg; +} + +// Function double CRunDec::DecAsDownMS(double als, double massth, double muth, +// int nl) +double CRunDec::DecAsDownMS(double als, double massth, double muth, int nl){ + if(nl<1||nl>5){ + cout<<"PROCEDURE IS NOT IMPLEMENTED FOR "<< nl <<" LOOPS"<<endl; + RETURN + } + double erg=(this->fas5to6ms(als/Pi, massth, muth, Nf,nl)); + return als*erg; +} + + +double CRunDec::fas6to5si(double A, double mass, double mu, double nlq, double nl){ + double lmmu=log((mu*mu)/(mass*mass)); + if(nl==1){ + return 1; + } + double sum[5]; + sum[0] = 1.0; + sum[1] = (A*lmmu)/6.; + sum[2] = A*A*(-11./72. + (19.*lmmu)/24. + lmmu*lmmu/36.); + sum[3] = A*A*A*(-564731./124416. + (2191.*lmmu)/576. + (511.*lmmu*lmmu)/576. + lmmu*lmmu*lmmu/216. + + (2633./31104. - (281.*lmmu)/1728.)*nlq + (82043.*Zeta3)/27648.); + sum[4] = A*A*A*A*(-1165152397./24494400. - (3031309*A4)/54432 - (340853*A5)/11340 + (33887*lmmu*lmmu)/3456 + +(14149*lmmu*lmmu*lmmu)/10368 + lmmu*lmmu*lmmu*lmmu/1296 + -(3031309*log(2)*log(2)*log(2)*log(2))/1306368 + (340853*log(2)*log(2)*log(2)*log(2)*log(2))/1360800 + +(3031309*log(2)*log(2)*Pi*Pi)/1306368 - (340853*log(2)*log(2)*log(2)*Pi*Pi)/816480 + +(76940219*Pi*Pi*Pi*Pi)/195955200 - (9318467*log(2)*Pi*Pi*Pi*Pi)/32659200 + nlq*nlq*(271883./4478976. + -(8545*lmmu)/186624 + (79*lmmu*lmmu)/6912 - (167*Zeta3)/5184) + (2362581983*Zeta3)/87091200 + +lmmu*(-1531493./746496. + (2975921*Zeta3)/165888) + nlq*(4770941./2239488. - (685*A4)/5184 + -(515*lmmu*lmmu)/1152 - (107*lmmu*lmmu*lmmu)/1728 - (685*log(2)*log(2)*log(2)*log(2))/124416 + +(685*log(2)*log(2)*Pi*Pi)/124416 + (541549*Pi*Pi*Pi*Pi)/14929920 + lmmu*(-158687./373248. + -(133819*Zeta3)/82944) - (3645913*Zeta3)/995328 - (115*Zeta5)/576) + (12057583*Zeta5)/483840); + double erg=0.0; + for(int i=1;i<=nl;i++){ + erg+=sum[i-1]; + } + return erg; +} + +// Function double CRunDec::DecAsUpSI(double als, double massth, double muth, +// int nl) +double CRunDec::DecAsUpSI(double als, double massth, double muth, int nl){ + if(nl<1||nl>5){ + cout<<"PROCEDURE IS NOT IMPLEMENTED FOR "<< nl <<" LOOPS"<<endl; + RETURN + } + double erg=(this->fas6to5si(als/Pi, massth, muth, Nf,nl)); + return als*erg; +} + +double CRunDec::fas5to6si(double A, double mass, double mu, double nlq, double nl){ + double lmmu=log((mu*mu)/(mass*mass)); + if(nl==1){ + return 1; + } + double sum[5]; + sum[0] = 1; + sum[1] = -(A*lmmu)/6.; + sum[2] = A*A*(11./72. - (19.*lmmu)/24. + lmmu*lmmu/36.); + sum[3] = A*A*A*(564731./124416. - (6793.*lmmu)/1728. - (131.*lmmu*lmmu)/576. - lmmu*lmmu*lmmu/216. + + (-2633./31104. + (281.*lmmu)/1728.)*nlq - (82043.*Zeta3)/27648.); + sum[4] = A*A*A*A*(291716893./6123600. + (3031309*A4)/54432 + (340853*A5)/11340 - (14023*lmmu*lmmu)/3456 + -(8371*lmmu*lmmu*lmmu)/10368 + lmmu*lmmu*lmmu*lmmu/1296 + +(3031309*log(2)*log(2)*log(2)*log(2))/1306368 - (340853*log(2)*log(2)*log(2)*log(2)*log(2))/1360800 + -(3031309*log(2)*log(2)*Pi*Pi)/1306368 + (340853*log(2)*log(2)*log(2)*Pi*Pi)/816480 + -(76940219*Pi*Pi*Pi*Pi)/195955200 + (9318467*log(2)*Pi*Pi*Pi*Pi)/32659200 + lmmu*(-2398621./746496. + -(2483663*Zeta3)/165888) + nlq*nlq*(-271883./4478976. + (8545*lmmu)/186624 - (79*lmmu*lmmu)/6912 + +(167*Zeta3)/5184) - (2362581983*Zeta3)/87091200 + nlq*(-4770941./2239488. + (685*A4)/5184 + +(983*lmmu*lmmu)/3456 + (107*lmmu*lmmu*lmmu)/1728 + (685*log(2)*log(2)*log(2)*log(2))/124416 + -(685*log(2)*log(2)*Pi*Pi)/124416 - (541549*Pi*Pi*Pi*Pi)/14929920 + (3645913*Zeta3)/995328 + +lmmu*(190283./373248. + (133819*Zeta3)/82944) + (115*Zeta5)/576) - (12057583*Zeta5)/483840); + double erg=0.0; + for(int i=1;i<=nl;i++){ + erg+=sum[i-1]; + } + return erg; +} + +// Function double CRunDec::DecAsDownSI(double als, double massth, double muth, +// int nl) +double CRunDec::DecAsDownSI(double als, double massth, double muth, int nl){ + if(nl<1||nl>5){ + cout<<"PROCEDURE IS NOT IMPLEMENTED FOR "<< nl <<" LOOPS"<<endl; + RETURN + } + double erg=(this->fas5to6si(als/Pi, massth, muth, Nf,nl)); + return als*erg; +} + + +// Coefficients of eq.(33) of [RunDec] +double CRunDec::fmq6to5os(double A, double mass, double mu, double nlq, double nl){ + double lmM=log((mu*mu)/(mass*mass)); + if(nl==1){ + return 1; + } + double sum[5]; + sum[0]=1.; + sum[1]=0.; + sum[2]=-A*A*(89./432. - (5.*lmM)/36. + lmM*lmM/12.); + sum[3]=-A*A*A*(1871./2916. - (4.*A4)/9. - log(2)*log(2)*log(2)*log(2)/54. + (299.*lmM)/2592. + + (299.*lmM*lmM)/432. + (35.*lmM*lmM*lmM)/216. + (1327.*nlq)/11664. + - (53.*lmM*nlq)/432. - (lmM*lmM*lmM*nlq)/108. + (log(2)*log(2)*Zeta2)/9. - (407.*Zeta3)/864. + - (5.*lmM*Zeta3)/6. - (2.*nlq*Zeta3)/27. + (103.*Zeta4)/72.); + sum[4]=A*A*A*A*(-122722873709./3292047360. - (6941*lmM*lmM*lmM)/2592 - + (1147*lmM*lmM*lmM*lmM)/3456 - (16187201*Pi*Pi*Pi*Pi)/52254720 + (787*Pi*Pi*Pi*Pi*Pi*Pi)/81648 + + (5*Zeta2)/9 + (5*log(2)*Zeta2)/27 - (5*Zeta3)/108 + (145*Pi*Pi*Pi*Pi*log(2))/1944 - + (1924649*Pi*Pi*log(2)*log(2))/4354560 + (59*Pi*Pi*log(2)*log(2)*log(2))/972 + + (1924649*log(2)*log(2)*log(2)*log(2))/4354560 - (59*log(2)*log(2)*log(2)*log(2)*log(2))/1620 - (4*log(2)*log(2)*log(2)*log(2)*log(2)*log(2))/81 + + (log(2)*log(2)*log(2)*log(2)*log(2)*log(16))/81 + (1924649*A4)/181440 + + (118*A5)/27 + nlq*nlq*(-17671./124416. - (31*lmM*lmM)/1296 - + lmM*lmM*lmM*lmM/864 + (7*Pi*Pi*Pi*Pi)/8640 + lmM*(3401./46656. - (7*Zeta3)/108) + + (5*Zeta3)/864) + (443509931*Zeta3)/40642560 - + (1061*Zeta3*Zeta3)/576 + lmM*lmM*(-34297./3456. + (175*Zeta3)/48) + + lmM*(99319./41472. - (481*Pi*Pi*Pi*Pi)/2880 - (2*Zeta2)/3 - (2*log(2)*Zeta2)/9 + + Zeta3/18 - (11*Pi*Pi*log(2)*log(2))/72 + (11*log(2)*log(2)*log(2)*log(2))/72 + + (11*A4)/3 + (47317*Zeta3)/3072 - (575*Zeta5)/72) + + nlq*(2403419./746496. + (10237*lmM*lmM)/10368 + (47*lmM*lmM*lmM)/288 + + (17*lmM*lmM*lmM*lmM)/432 + (245*Pi*Pi*Pi*Pi)/62208 - (5*Zeta2)/54 - + (49*Pi*Pi*Pi*Pi*log(2))/6480 + (49*Pi*Pi*log(2)*log(2))/2592 - + (Pi*Pi*log(2)*log(2)*log(2))/162 - (49*log(2)*log(2)*log(2)*log(2))/2592 + log(2)*log(2)*log(2)*log(2)*log(2)/270 - + (49*A4)/108 - (4*A5)/9 + + lmM*(-26443./93312. + (163*Pi*Pi*Pi*Pi)/12960 + Zeta2/9 + (Pi*Pi*log(2)*log(2))/108 - + log(2)*log(2)*log(2)*log(2)/108 - (2*A4)/9 - (599*Zeta3)/1728) + + (1075*Zeta3)/1728 - (497*Zeta5)/288) + (59015*Zeta5)/1728); + + double erg=0.0; + for(int i=1;i<=nl;i++){ + erg+=sum[i-1]; + } + return erg; +} + +double CRunDec::fmq6to5ms(double A, double mass, double mu, double nlq, double nl){ + double lmm=log((mu*mu)/(mass*mass)); + if(nl==1){ + return 1; + } + double sum[5]; + sum[0]=1.; + sum[1]=0.; + sum[2]=A*A*(-89./432. + (5*lmm)/36 - lmm*lmm/12); + sum[3]=A*A*A*(-2951./2916. + (16*A4+2./3.*log(2)*log(2)*log(2)*log(2)-2./3.*Pi*Pi*log(2)*log(2)-13./180.*Pi*Pi*Pi*Pi)/36 + -(155*lmm*lmm)/432 - (35*lmm*lmm*lmm)/216 - Pi*Pi*Pi*Pi/72 + +nl*(-1327./11664. + (53*lmm)/432 + lmm*lmm*lmm/108 + (2*Zeta3)/27) + +lmm*(133./2592. + (5*Zeta3)/6) + (407*Zeta3)/864); + sum[4]=A*A*A*A*(-131621265869./3292047360. + (1924649*A4)/181440 + (118*A5)/27 + -(3161*lmm*lmm*lmm)/2592 - (1147*lmm*lmm*lmm*lmm)/3456 + +(1924649*log(2)*log(2)*log(2)*log(2))/4354560 - (59*log(2)*log(2)*log(2)*log(2)*log(2))/1620 + +(log(16)*log(2)*log(2)*log(2)*log(2)*log(2))/81 - (4*log(2)*log(2)*log(2)*log(2)*log(2)*log(2))/81 + -(1924649*log(2)*log(2)*Pi*Pi)/4354560 + (59*log(2)*log(2)*log(2)*Pi*Pi)/972 + -(16187201*Pi*Pi*Pi*Pi)/52254720 + (145*log(2)*Pi*Pi*Pi*Pi)/1944 + (787*Pi*Pi*Pi*Pi*Pi*Pi)/81648 + +nlq*nlq*(-17671./124416. - (31*lmm*lmm)/1296 - lmm*lmm*lmm*lmm/864 + (7*Pi*Pi*Pi*Pi)/8640 + +lmm*(3401./46656. - (7*Zeta3)/108) + (5*Zeta3)/864) + (353193131*Zeta3)/40642560 + -(1061*Zeta3*Zeta3)/576 + lmm*lmm*(-16193./3456. + (175*Zeta3)/48) + lmm*(279367./41472. + +(11*A4)/3 + (11*log(2)*log(2)*log(2)*log(2))/72 - (11*log(2)*log(2)*Pi*Pi)/72 + -(481*Pi*Pi*Pi*Pi)/2880 + (42197*Zeta3)/3072 - (575*Zeta5)/72) + nlq*(2261435./746496. + -(49*A4)/108 - (4*A5)/9 + (8461*lmm*lmm)/10368 + (23*lmm*lmm*lmm)/288 + (17*lmm*lmm*lmm*lmm)/432 + -(49*log(2)*log(2)*log(2)*log(2))/2592 + log(2)*log(2)*log(2)*log(2)*log(2)/270 + +(49*log(2)*log(2)*Pi*Pi)/2592 - (log(2)*log(2)*log(2)*Pi*Pi)/162 + (245*Pi*Pi*Pi*Pi)/62208 + -(49*log(2)*Pi*Pi*Pi*Pi)/6480 + lmm*(-55315./93312. - (2*A4)/9 - log(2)*log(2)*log(2)*log(2)/108 + +(log(2)*log(2)*Pi*Pi)/108 + (163*Pi*Pi*Pi*Pi)/12960 - (599*Zeta3)/1728) + +(1075*Zeta3)/1728 - (497*Zeta5)/288) + (59015*Zeta5)/1728); + double erg=0.0; + for(int i=1;i<=nl;i++){ + erg+=sum[i-1]; + } + return erg; +} + +double CRunDec::fmq6to5si(double A, double mass, double mu, double nlq, double nl){ + double lmmu=log((mu*mu)/(mass*mass)); + if(nl==1){ + return 1; + } + double sum[5]; + sum[0]=1.; + sum[1]=0.; + sum[2]=A*A*(-89./432. + (5*lmmu)/36 - lmmu*lmmu/12); + sum[3]=A*A*A*(-2951./2916. - (299*lmmu*lmmu)/432 - (35*lmmu*lmmu*lmmu)/216 - Pi*Pi*Pi*Pi/72 + (16*A4 + +(2*log(2)*log(2)*log(2)*log(2))/3 - (2*log(2)*log(2)*Pi*Pi)/3 - (13*Pi*Pi*Pi*Pi)/180)/36 + +nlq*(-1327./11664. + (53*lmmu)/432 + lmmu*lmmu*lmmu/108 + (2*Zeta3)/27) + lmmu*(853./2592. + +(5*Zeta3)/6) + (407*Zeta3)/864); + sum[4]=A*A*A*A*(-131621265869./3292047360. + (1924649*A4)/181440 + (118*A5)/27 - (6941*lmmu*lmmu*lmmu)/2592 + -(1147*lmmu*lmmu*lmmu*lmmu)/3456 + (1924649*log(2)*log(2)*log(2)*log(2))/4354560 + -(59*log(2)*log(2)*log(2)*log(2)*log(2))/1620 + (log(16)*log(2)*log(2)*log(2)*log(2)*log(2))/81 + -(4*log(2)*log(2)*log(2)*log(2)*log(2)*log(2))/81 - (1924649*log(2)*log(2)*Pi*Pi)/4354560 + +(59*log(2)*log(2)*log(2)*Pi*Pi)/972 - (16187201*Pi*Pi*Pi*Pi)/52254720 + +(145*log(2)*Pi*Pi*Pi*Pi)/1944 + (787*Pi*Pi*Pi*Pi*Pi*Pi)/81648 + nlq*nlq*(-17671./124416. + -(31*lmmu*lmmu)/1296 - lmmu*lmmu*lmmu*lmmu/864 + (7*Pi*Pi*Pi*Pi)/8640 + lmmu*(3401./46656. + -(7*Zeta3)/108) + (5*Zeta3)/864) + (353193131*Zeta3)/40642560 - (1061*Zeta3*Zeta3)/576 + +lmmu*lmmu*(-8531./1152. + (175*Zeta3)/48) + lmmu*(330503./41472. + (11*A4)/3 + +(11*log(2)*log(2)*log(2)*log(2))/72 - (11*log(2)*log(2)*Pi*Pi)/72 - (481*Pi*Pi*Pi*Pi)/2880 + +(47317*Zeta3)/3072 - (575*Zeta5)/72) + nlq*(2261435./746496. - (49*A4)/108 - (4*A5)/9 + +(8701*lmmu*lmmu)/10368 + (47*lmmu*lmmu*lmmu)/288 + (17*lmmu*lmmu*lmmu*lmmu)/432 + -(49*log(2)*log(2)*log(2)*log(2))/2592 + log(2)*log(2)*log(2)*log(2)*log(2)/270 + +(49*log(2)*log(2)*Pi*Pi)/2592 - (log(2)*log(2)*log(2)*Pi*Pi)/162 + (245*Pi*Pi*Pi*Pi)/62208 + -(49*log(2)*Pi*Pi*Pi*Pi)/6480 + lmmu*(-36019./93312. - (2*A4)/9 - log(2)*log(2)*log(2)*log(2)/108 + +(log(2)*log(2)*Pi*Pi)/108 + (163*Pi*Pi*Pi*Pi)/12960 - (599*Zeta3)/1728) + (1075*Zeta3)/1728 + -(497*Zeta5)/288) + (59015*Zeta5)/1728); + double erg=0.0; + for(int i=1;i<=nl;i++){ + erg+=sum[i-1]; + } + return erg; +} + +// Function double CRunDec::DecMqUpOS(double als, double massth, double muth, +// int nl) +double CRunDec::DecMqUpOS(double mq, double als, double massth, double muth, + int nl){ + if(nl<1||nl>5){ + cout<<"PROCEDURE IS NOT IMPLEMENTED FOR "<< nl<<" LOOPS"<<endl; + RETURN + } + double erg=(this->fmq6to5os(als/Pi, massth, muth, Nf,nl)); + return mq*erg; +} + +// Function double CRunDec::DecMqUpMS(double als, double massth, double muth, +// int nl) +double CRunDec::DecMqUpMS(double mq, double als, double massth, double muth, + int nl){ + if(nl<1||nl>5){ + cout<<"PROCEDURE IS NOT IMPLEMENTED FOR "<< nl<<" LOOPS"<<endl; + RETURN + } + double erg=(this->fmq6to5ms(als/Pi, massth, muth, Nf,nl)); + return mq*erg; +} + +// Function double CRunDec::DecMqUpSI(double als, double massth, double muth, +// int nl) +double CRunDec::DecMqUpSI(double mq, double als, double massth, double muth, + int nl){ + if(nl<1||nl>5){ + cout<<"PROCEDURE IS NOT IMPLEMENTED FOR "<< nl<<" LOOPS"<<endl; + RETURN + } + double erg=(this->fmq6to5si(als/Pi, massth, muth, Nf,nl)); + return mq*erg; +} + +// Coefficients of eq.(30) of [RunDec] +double CRunDec::fmq5to6os(double A, double mass, double mu, double nlq, double nl){ + double lmM=log((mu*mu)/(mass*mass)); + if(nl==1){ + return 1; + } + double sum[5]; + sum[0]=1.; + sum[1]=0.; + sum[2]=A*A*(89./432. - (5.*lmM)/36. + lmM*lmM/12.); + sum[3]=A*A*A*(1871./2916. - (4.*A4)/9. - ln2*ln2*ln2*ln2/54. + (121.*lmM)/2592. + +(319.*lmM*lmM)/432. + (29.*lmM*lmM*lmM)/216. + (1327.*nlq)/11664. + -(53.*lmM*nlq)/432. - (lmM*lmM*lmM*nlq)/108. + (ln2*ln2*Zeta2)/9. + -(407.*Zeta3)/864. - (5.*lmM*Zeta3)/6. - (2.*nlq*Zeta3)/27. + (103.*Zeta4)/72.); + sum[4]=A*A*A*A*(122466970229./3292047360. - (1924649.*A4)/181440. - (118.*A5)/27. + -(1924649.*ln2*ln2*ln2*ln2)/4354560. + (59.*ln2*ln2*ln2*ln2*ln2)/1620. + -(1126487.*lmM)/373248. - (31.*A4*lmM)/9.-(31.*ln2*ln2*ln2*ln2*lmM)/216. + +(104803.*lmM*lmM)/10368. + (1403.*lmM*lmM*lmM)/648. + (305.*lmM*lmM*lmM*lmM)/1152. + -(2403419.*nlq)/746496. + (49.*A4*nlq)/108. + (4.*A5*nlq)/9. + (49.*ln2*ln2*ln2*ln2*nlq)/2592. + -(ln2*ln2*ln2*ln2*ln2*nlq)/270. + (7045.*lmM*nlq)/31104. + (2.*A4*lmM*nlq)/9. + +1./108.*ln2*ln2*ln2*ln2*lmM*nlq - (9601.*lmM*lmM*nlq)/10368. - (47.*lmM*lmM*lmM*nlq)/288. + -(5.*lmM*lmM*lmM*lmM*nlq)/144. + (17671.*nlq*nlq)/124416. - (3401.*lmM*nlq*nlq)/46656. + +(31.*lmM*lmM*nlq*nlq)/1296. + (lmM*lmM*lmM*lmM*nlq*nlq)/864. - (5.*Zeta2)/9. + -(5.*ln2*Zeta2)/27. + (1924649.*ln2*ln2*Zeta2)/725760. - (59.*ln2*ln2*ln2*Zeta2)/162. + +(2.*lmM*Zeta2)/3. + (2.*ln2*lmM*Zeta2)/9. + 31./36.*ln2*ln2*lmM*Zeta2 + (5.*nlq*Zeta2)/54. + -49./432.*ln2*ln2*nlq*Zeta2 + 1./27.*ln2*ln2*ln2*nlq*Zeta2 - (lmM*nlq*Zeta2)/9. + - 1./18.*ln2*ln2*lmM*nlq*Zeta2 - (441628331.*Zeta3)/40642560. - (420877.*lmM*Zeta3)/27648. + -(155.*lmM*lmM*Zeta3)/48. - (1075.*nlq*Zeta3)/1728. + (221.*lmM*nlq*Zeta3)/576. + -(5.*nlq*nlq*Zeta3)/864. + 7./108.*lmM*nlq*nlq*Zeta3 + (1061.*Zeta3*Zeta3)/576. + +(16187201.*Zeta4)/580608. - (725.*ln2*Zeta4)/108. + (4123.*lmM*Zeta4)/288. + -(1225.*nlq*Zeta4)/3456. + (49.*ln2*nlq*Zeta4)/72. - (163.*lmM*nlq*Zeta4)/144. + -(7.*nlq*nlq*Zeta4)/96. - (59015.*Zeta5)/1728. + (575.*lmM*Zeta5)/72. + +(497.*nlq*Zeta5)/288. - (3935.*Zeta6)/432.); + + double erg=0.0; + for(int i=1;i<=nl;i++){ + erg+=sum[i-1]; + } + return erg; +} + +double CRunDec::fmq5to6ms(double A, double mass, double mu, double nlq, double nl){ + double lmm=log((mu*mu)/(mass*mass)); + if(nl==1){ + return 1; + } + double sum[5]; + sum[0]=1.; + sum[1]=0.; + sum[2]=A*A*(89./432. - (5.*lmm)/36. + lmm*lmm/12.); + sum[3]=A*A*A*(2951./2916. - (16*A4+2./3.*log(2)*log(2)*log(2)*log(2)-2./3.*Pi*Pi*log(2)*log(2)-13./180.*Pi*Pi*Pi*Pi)/36 + +(175*lmm*lmm)/432 + (29*lmm*lmm*lmm)/216 + Pi*Pi*Pi*Pi/72 + +lmm*(-311./2592. - (5*Zeta3)/6) + +nlq*(1327./11664. - (53*lmm)/432 - lmm*lmm*lmm/108 - (2*Zeta3)/27) - (407*Zeta3)/864); + sum[4]=A*A*A*A*(131968227029./3292047360. - (1924649*A4)/181440 - (118*A5)/27 + +(301*lmm*lmm*lmm)/324 + (305*lmm*lmm*lmm*lmm)/1152 - (1924649*log(2)*log(2)*log(2)*log(2))/4354560 + +(59*log(2)*log(2)*log(2)*log(2)*log(2))/1620 - (log(16)*log(2)*log(2)*log(2)*log(2)*log(2))/81 + +(4*log(2)*log(2)*log(2)*log(2)*log(2)*log(2))/81 + (1924649*log(2)*log(2)*Pi*Pi)/4354560 + -(59*log(2)*log(2)*log(2)*Pi*Pi)/972 + (16187201*Pi*Pi*Pi*Pi)/52254720 + -(145*log(2)*Pi*Pi*Pi*Pi)/1944 - (787*Pi*Pi*Pi*Pi*Pi*Pi)/81648 + lmm*lmm*(51163./10368. + -(155*Zeta3)/48) + nlq*nlq*(17671./124416. + (31*lmm*lmm)/1296 + lmm*lmm*lmm*lmm/864 + -(7*Pi*Pi*Pi*Pi)/8640 + lmm*(-3401./46656. + (7*Zeta3)/108) - (5*Zeta3)/864) + -(353193131*Zeta3)/40642560 + (1061*Zeta3*Zeta3)/576 - (59015*Zeta5)/1728 + +nlq*(-2261435./746496. + (49*A4)/108 + (4*A5)/9 - (7825*lmm*lmm)/10368 - (23*lmm*lmm*lmm)/288 + -(5*lmm*lmm*lmm*lmm)/144 + (49*log(2)*log(2)*log(2)*log(2))/2592 + -log(2)*log(2)*log(2)*log(2)*log(2)/270 - (49*log(2)*log(2)*Pi*Pi)/2592 + +(log(2)*log(2)*log(2)*Pi*Pi)/162 - (245*Pi*Pi*Pi*Pi)/62208 + (49*log(2)*Pi*Pi*Pi*Pi)/6480 + +lmm*(16669./31104. + (2*A4)/9 + log(2)*log(2)*log(2)*log(2)/108 - (log(2)*log(2)*Pi*Pi)/108 + -(163*Pi*Pi*Pi*Pi)/12960 + (221*Zeta3)/576) - (1075*Zeta3)/1728 + (497*Zeta5)/288) + +lmm*(-2810855./373248. - (31*A4)/9 - (31*log(2)*log(2)*log(2)*log(2))/216 + +(31*log(2)*log(2)*Pi*Pi)/216 + (4123*Pi*Pi*Pi*Pi)/25920 - (373261*Zeta3)/27648 + (575*Zeta5)/72)); + + double erg=0.0; + for(int i=1;i<=nl;i++){ + erg+=sum[i-1]; + } + return erg; +} + +double CRunDec::fmq5to6si(double A, double mass, double mu, double nlq, double nl){ + double lmmu=log((mu*mu)/(mass*mass)); + if(nl==1){ + return 1; + } + double sum[5]; + sum[0]=1.; + sum[1]=0.; + sum[2]=A*A*(89./432. - (5*lmmu)/36 + lmmu*lmmu/12); + sum[3]=A*A*A*(2951./2916. + (319*lmmu*lmmu)/432 + (29*lmmu*lmmu*lmmu)/216 + Pi*Pi*Pi*Pi/72 + (-16*A4 + -(2*log(2)*log(2)*log(2)*log(2))/3 + (2*log(2)*log(2)*Pi*Pi)/3 + (13*Pi*Pi*Pi*Pi)/180)/36 + +lmmu*(-1031./2592. - (5*Zeta3)/6) + nlq*(1327./11664. - (53*lmmu)/432 - lmmu*lmmu*lmmu/108 + -(2*Zeta3)/27) - (407*Zeta3)/864); + sum[4]=A*A*A*A*(131968227029./3292047360. - (1924649*A4)/181440 - (118*A5)/27 + (1403*lmmu*lmmu*lmmu)/648 + +(305*lmmu*lmmu*lmmu*lmmu)/1152 - (1924649*log(2)*log(2)*log(2)*log(2))/4354560 + +(59*log(2)*log(2)*log(2)*log(2)*log(2))/1620 - (log(16)*log(2)*log(2)*log(2)*log(2)*log(2))/81 + +(4*log(2)*log(2)*log(2)*log(2)*log(2)*log(2))/81 + (1924649*log(2)*log(2)*Pi*Pi)/4354560 + -(59*log(2)*log(2)*log(2)*Pi*Pi)/972 + (16187201*Pi*Pi*Pi*Pi)/52254720 - (145*log(2)*Pi*Pi*Pi*Pi)/1944 + -(787*Pi*Pi*Pi*Pi*Pi*Pi)/81648 + lmmu*lmmu*(81763./10368. - (155*Zeta3)/48) + nlq*nlq*(17671./124416. + +(31*lmmu*lmmu)/1296 + lmmu*lmmu*lmmu*lmmu/864 - (7*Pi*Pi*Pi*Pi)/8640 + lmmu*(-3401./46656. + +(7*Zeta3)/108) - (5*Zeta3)/864) - (353193131*Zeta3)/40642560 + (1061*Zeta3*Zeta3)/576 + -(59015*Zeta5)/1728 + nlq*(-2261435./746496. + (49*A4)/108 + (4*A5)/9 - (8065*lmmu*lmmu)/10368 + -(47*lmmu*lmmu*lmmu)/288 - (5*lmmu*lmmu*lmmu*lmmu)/144 + (49*log(2)*log(2)*log(2)*log(2))/2592 + -log(2)*log(2)*log(2)*log(2)*log(2)/270 - (49*log(2)*log(2)*Pi*Pi)/2592 + (log(2)*log(2)*log(2)*Pi*Pi)/162 + -(245*Pi*Pi*Pi*Pi)/62208 + (49*log(2)*Pi*Pi*Pi*Pi)/6480 + lmmu*(10237./31104. + (2*A4)/9 + +log(2)*log(2)*log(2)*log(2)/108 - (log(2)*log(2)*Pi*Pi)/108 - (163*Pi*Pi*Pi*Pi)/12960 + (221*Zeta3)/576) + -(1075*Zeta3)/1728 + (497*Zeta5)/288) + lmmu*(-3322343./373248. - (31*A4)/9 + -(31*log(2)*log(2)*log(2)*log(2))/216 + (31*log(2)*log(2)*Pi*Pi)/216 + (4123*Pi*Pi*Pi*Pi)/25920 + -(419341*Zeta3)/27648 + (575*Zeta5)/72)); + + double erg=0.0; + for(int i=1;i<=nl;i++){ + erg+=sum[i-1]; + } + return erg; +} + +// Function double CRunDec::DecMqDownOS(double als, double massth, double muth, +// int nl) +double CRunDec::DecMqDownOS(double mq, double als, double massth, double muth, + int nl){ + if(nl<1||nl>5){ + cout<<"PROCEDURE IS NOT IMPLEMENTED FOR "<< nl<<" LOOPS"<<endl; + RETURN + } + double erg=(this->fmq5to6os(als/Pi, massth, muth, Nf,nl)); + return mq*erg; +} + +// Function double CRunDec::DecMqDownMS(double als, double massth, double muth, +// int nl) +double CRunDec::DecMqDownMS(double mq, double als, double massth, double muth, + int nl){ + if(nl<1||nl>5){ + cout<<"PROCEDURE IS NOT IMPLEMENTED FOR "<< nl<<" LOOPS"<<endl; + RETURN + } + double erg=(this->fmq5to6ms(als/Pi, massth, muth, Nf,nl)); + return mq*erg; +} + +// Function double CRunDec::DecMqDownSI(double als, double massth, double muth, +// int nl) +double CRunDec::DecMqDownSI(double mq, double als, double massth, double muth, + int nl){ + if(nl<1||nl>5){ + cout<<"PROCEDURE IS NOT IMPLEMENTED FOR "<< nl<<" LOOPS"<<endl; + RETURN + } + double erg=(this->fmq5to6si(als/Pi, massth, muth, Nf,nl)); + return mq*erg; +} + +// Function double CRunDec::DecLambdaDown(double lam, double massth, int nl, +// int nloops) +double CRunDec::DecLambdaDown(double lam, double massth, int nl, + int nloops){ + if(nl<1||nl>5){ + cout<<"PROCEDURE IS NOT IMPLEMENTED FOR "<< nl<<" LOOPS"<<endl; + RETURN + } + SetConstants(nl+1); + double l=log((massth*massth)/(lam*lam)); + double sum[5]; + double b0p2 = Betap[0]*2.; + double c2 = 11./72.; + double c3 = (564731./124416. - 2633./31104.*(nl) - (82043.*Zeta3)/27648.); + double c4 = (291716893./6123600. + (3031309.*A4)/54432. + (340853.*A5)/11340. + +(3031309.*log(2)*log(2)*log(2)*log(2))/1306368. - (340853.*log(2)*log(2)*log(2)*log(2)*log(2))/1360800. + -(3031309.*log(2)*log(2)*Pi*Pi)/1306368. + (340853.*log(2)*log(2)*log(2)*Pi*Pi)/816480. + -(76940219.*Pi*Pi*Pi*Pi)/195955200. + (9318467.*log(2)*Pi*Pi*Pi*Pi)/32659200. + +(nl)*(nl)*(-271883./4478976. + +(167.*Zeta3)/5184.) - (2362581983.*Zeta3)/87091200. + (nl)*(-4770941./2239488. + (685.*A4)/5184. + +(685.*log(2)*log(2)*log(2)*log(2))/124416. + -(685.*log(2)*log(2)*Pi*Pi)/124416. - (541549.*Pi*Pi*Pi*Pi)/14929920. + (3645913.*Zeta3)/995328. + +(115.*Zeta5)/576.) - (12057583.*Zeta5)/483840.); + sum[0]= l*(Betap[0]-Beta[0])/b0p2; + sum[1]= ((Bp[1]-B[1])*log(l) - Bp[1]*log(Betap[0]/Beta[0]))/b0p2; + sum[2]= (c2 + B[2] - Bp[2] - B[1]*B[1] + Bp[1]*Bp[1] + log(l)*B[1]*(Bp[1]-B[1]))/(b0p2*Beta[0]*l); + sum[3]= (c3 - (Bp[3]-B[3])/2. + Bp[1]*(Bp[2]-B[2]-c2) - Bp[1]*Bp[1]*Bp[1]/2. - B[1]*(Bp[1]*Bp[1] - Bp[2] + B[2] + c2)*log(l) + -Bp[1]*B[1]*B[1]*(log(l)*log(l)/2. - log(l) - 1.) + B[1]*B[1]*B[1]*(log(l)*log(l)-1.)/2.)/(b0p2*Beta[0]*Beta[0]*l*l); + sum[4]= (c4 - (Bp[4]-B[4])/3. - B[1]*B[3]/6. + Bp[1]*(2*Bp[3]/3. - B[3]/2. - c3) - c2*c2 + (Bp[2]-B[2])*(Bp[2]/3. - 2.*B[2]/3. - c2) + -Bp[1]*Bp[1]*(Bp[2]-B[2]-c2) + Bp[1]*Bp[1]*Bp[1]*Bp[1]/3. + B[1]*log(l)*(Bp[1]*Bp[1]*Bp[1] - 2.*Bp[1]*(Bp[2] - B[2] - c2) + + Bp[3] - B[3] - 2.*c3) + B[1]*B[1]*(Bp[1]*Bp[1] - Bp[2] + B[2] + c2)*(log(l)*log(l) - log(l) - 1.) + + Bp[1]*B[1]*B[1]*B[1]*(log(l)*log(l)*log(l)/3.-3.*log(l)*log(l)/2. - log(l) + 1./2.) - B[1]*B[1]*B[1]*B[1]*( + log(l)*log(l)*log(l)/3. - log(l)*log(l)/2. - log(l) - 1./6.))/(b0p2*Beta[0]*Beta[0]*Beta[0]*l*l*l); + double erg=0.0; + for(int i=0;i<nloops;i++){ + erg+=sum[i]; + } + + return (lam*exp(erg)); +} + +// Function double CRunDec::DecLambdaUp(double lam, double massth, int nl, +// int nloops) +double CRunDec::DecLambdaUp(double lam, double massth, int nl, + int nloops){ + if(nl<1||nl>5){ + cout<<"PROCEDURE IS NOT IMPLEMENTED FOR "<< nl<<" LOOPS"<<endl; + RETURN + } + SetConstants(nl+1); + double l=log((massth*massth)/(lam*lam)); + double sum[5]; + double b02 = Beta[0]*2.; + double c2 = 11./72.; + double c3 = (564731./124416. - 2633./31104.*(nl) - (82043.*Zeta3)/27648.); + double c4 = (291716893./6123600. + (3031309.*A4)/54432. + (340853.*A5)/11340. + +(3031309.*log(2)*log(2)*log(2)*log(2))/1306368. - (340853.*log(2)*log(2)*log(2)*log(2)*log(2))/1360800. + -(3031309.*log(2)*log(2)*Pi*Pi)/1306368. + (340853.*log(2)*log(2)*log(2)*Pi*Pi)/816480. + -(76940219.*Pi*Pi*Pi*Pi)/195955200. + (9318467.*log(2)*Pi*Pi*Pi*Pi)/32659200. + +(nl)*(nl)*(-271883./4478976. + +(167.*Zeta3)/5184.) - (2362581983.*Zeta3)/87091200. + (nl)*(-4770941./2239488. + (685.*A4)/5184. + +(685.*log(2)*log(2)*log(2)*log(2))/124416. + -(685.*log(2)*log(2)*Pi*Pi)/124416. - (541549.*Pi*Pi*Pi*Pi)/14929920. + (3645913.*Zeta3)/995328. + +(115.*Zeta5)/576.) - (12057583.*Zeta5)/483840.); + sum[0]= l*(Beta[0]-Betap[0])/b02; + sum[1]= ((B[1]-Bp[1])*log(l) - B[1]*log(Beta[0]/Betap[0]))/b02; + sum[2]= (-c2 + Bp[2] - B[2] - Bp[1]*Bp[1] + B[1]*B[1] + log(l)*Bp[1]*(B[1]-Bp[1]))/(b02*Betap[0]*l); + sum[3]= (-c3 + (Bp[3]-B[3])/2. + B[1]*(B[2]-Bp[2]+c2) - B[1]*B[1]*B[1]/2. - Bp[1]*(B[1]*B[1] - B[2] + Bp[2] - c2)*log(l) + -B[1]*Bp[1]*Bp[1]*(log(l)*log(l)/2. - log(l) - 1.) + Bp[1]*Bp[1]*Bp[1]*(log(l)*log(l)-1.)/2.)/(b02*Betap[0]*Betap[0]*l*l); + sum[4]= (-c4 + (Bp[4]-B[4])/3. - Bp[1]*Bp[3]/6. + B[1]*(2*B[3]/3. - Bp[3]/2. + c3) - c2*c2 + (B[2]-Bp[2])*(B[2]/3. - 2.*Bp[2]/3. + c2) + -B[1]*B[1]*(B[2]-Bp[2]+c2) + B[1]*B[1]*B[1]*B[1]/3. + Bp[1]*log(l)*(B[1]*B[1]*B[1] - 2.*B[1]*(B[2] - Bp[2] + c2) + + B[3] - Bp[3] + 2.*c3) + Bp[1]*Bp[1]*(B[1]*B[1] - B[2] + Bp[2] - c2)*(log(l)*log(l) - log(l) - 1.) + + Bp[1]*Bp[1]*Bp[1]*B[1]*(log(l)*log(l)*log(l)/3.-3.*log(l)*log(l)/2. - log(l) + 1./2.) - Bp[1]*Bp[1]*Bp[1]*Bp[1]*( + log(l)*log(l)*log(l)/3. - log(l)*log(l)/2. - log(l) - 1./6.))/(b02*Betap[0]*Betap[0]*Betap[0]*l*l*l); + double erg=0.0; + for(int i=0;i<nloops;i++){ + erg+=sum[i]; + } + + return (lam*exp(erg)); +} + +// Function double CRunDec::AlL2AlH(double asl, double mu1, TriplenfMmu decpar[], +// double mu2, int nl) +double CRunDec::AlL2AlH(double asl, double mu1, TriplenfMmu decpar[], double mu2, + int nl){ + int n=0; + int help; + double help2; + double asini=asl; + double muini=mu1; + for(int i=0; i<4; i++){ + if(decpar[i].nf!=0){ + n+=1; + } + } + int zaehler=4; + while (zaehler!=0){ + for(int i=0; i<zaehler-1; i++){ + if(decpar[i].nf>decpar[i+1].nf){ + help=decpar[i].nf; + decpar[i].nf=decpar[i+1].nf; + decpar[i+1].nf=help; + help2=decpar[i].Mth; + decpar[i].Mth=decpar[i+1].Mth; + decpar[i+1].Mth=help2; + help2=decpar[i].muth; + decpar[i].muth=decpar[i+1].muth; + decpar[i+1].muth=help2; + } + } + zaehler-=1; + } + for(int i=3-n+2;i<=3;i++){ + if(decpar[i].nf-decpar[i-1].nf!=1){ + cout<<"WARNING: THERE IS A GAP IN NUMBER OF FLAVOURS. EXIT."<<endl; + RETURN + } + } + double erg1,erg2; + int i; + for(i=3-n+1;i<=3;i++){ + erg1= AlphasExact(asini, muini, decpar[i].muth,decpar[i].nf-1,nl); + erg2= DecAsUpOS(erg1,decpar[i].Mth,decpar[i].muth,decpar[i].nf-1,nl); + asini=erg2; + muini=decpar[i].muth; + } + double alpha= AlphasExact(asini,muini,mu2,decpar[i-1].nf,nl); + for(int j=0;j<=3;j++){ + decpar[j].nf=0; + decpar[j].Mth=0.; + decpar[j].muth=0.; + } + return alpha; +} + +// Function double CRunDec::AlH2AlL(double ash, double mu1, TriplenfMmu decpar[], +// double mu2, int nl) +double CRunDec::AlH2AlL(double ash, double mu1, TriplenfMmu decpar[], double mu2, + int nl){ + int n=0; + int help; + double help2; + double asini=ash; + double muini=mu1; + for(int i=0; i<4; i++){ + if(decpar[i].nf!=0){ + n+=1; + } + } + int zaehler=4; + while (zaehler!=0){ + for(int i=0; i<zaehler-1; i++){ + if(decpar[i].nf<decpar[i+1].nf){ + help=decpar[i].nf; + decpar[i].nf=decpar[i+1].nf; + decpar[i+1].nf=help; + help2=decpar[i].Mth; + decpar[i].Mth=decpar[i+1].Mth; + decpar[i+1].Mth=help2; + help2=decpar[i].muth; + decpar[i].muth=decpar[i+1].muth; + decpar[i+1].muth=help2; + } + } + zaehler-=1; + } + for(int i=1;i<=n-1;i++){ + if(decpar[i].nf-decpar[i-1].nf!=-1){ + cout<<"WARNING: THERE IS A GAP IN NUMBER OF FLAVOURS. EXIT."; + RETURN + } + } + double erg1,erg2; + int i; + for(i=0;i<=n-1;i++){ + erg1= AlphasExact(asini, muini, decpar[i].muth,decpar[i].nf,nl); + erg2= DecAsDownOS(erg1,decpar[i].Mth,decpar[i].muth,decpar[i].nf-1,nl); + asini=erg2; + muini=decpar[i].muth; + } + double alpha= AlphasExact(asini,muini,mu2,decpar[i-1].nf-1,nl); + for(int j=0;j<=3;j++){ + decpar[j].nf=0; + decpar[j].Mth=0.; + decpar[j].muth=0.; + } + return alpha; +} + +// Function double CRunDec::mL2mH(double mql, double asl, double mu1, +// TriplenfMmu decpar[], double mu2, int nl) +double CRunDec::mL2mH(double mql, double asl, double mu1, TriplenfMmu decpar[], + double mu2, int nl){ + int n=0; + int help; + double help2; + double asini=asl; + double muini=mu1; + double mqini=mql; + for(int i=0; i<4; i++){ + if(decpar[i].nf!=0){ + n+=1; + } + } + int zaehler=4; + while (zaehler!=0){ + for(int i=0; i<zaehler-1; i++){ + if(decpar[i].nf>decpar[i+1].nf){ + help=decpar[i].nf; + decpar[i].nf=decpar[i+1].nf; + decpar[i+1].nf=help; + help2=decpar[i].Mth; + decpar[i].Mth=decpar[i+1].Mth; + decpar[i+1].Mth=help2; + help2=decpar[i].muth; + decpar[i].muth=decpar[i+1].muth; + decpar[i+1].muth=help2; + } + } + zaehler-=1; + } + for(int i=3-n+2;i<=3;i++){ + if(decpar[i].nf-decpar[i-1].nf!=1){ + cout<<"WARNING: THERE IS A GAP IN NUMBER OF FLAVOURS. EXIT."; + RETURN + } + } + + double erg1,erg2,erg3, erg4, erg5, erg6; + int i; + for(i=3-n+1;i<=3;i++){ + erg1= AlphasExact(asini, muini, decpar[i].muth,decpar[i].nf-1,nl); + erg3= mMS2mMS(mqini,asini,erg1,decpar[i].nf-1,nl); + erg2= DecAsUpOS(erg1,decpar[i].Mth,decpar[i].muth,decpar[i].nf-1,nl); + erg4=DecMqUpOS(erg3,erg1,decpar[i].Mth,decpar[i].muth,decpar[i].nf-1,nl); + asini=erg2; + mqini=erg4; + muini=decpar[i].muth; + } + erg5= AlphasExact(asini,muini,mu2,decpar[i-1].nf,nl); + erg6= mMS2mMS(mqini,asini,erg5,decpar[i-1].nf,nl); + for(int j=0;j<=3;j++){ + decpar[j].nf=0; + decpar[j].Mth=0.; + decpar[j].muth=0.; + } + return erg6; +} + +// Function double CRunDec::mH2mL(double mqh, double ash, double mu1, +// TriplenfMmu decpar[], double mu2, int nl) +double CRunDec::mH2mL(double mqh, double ash, double mu1, TriplenfMmu decpar[], + double mu2, int nl){ + int n=0; + int help; + double help2; + double asini=ash; + double muini=mu1; + double mqini=mqh; + for(int i=0; i<4; i++){ + if(decpar[i].nf!=0){ + n+=1; + } + } + int zaehler=4; + while (zaehler!=0){ + for(int i=0; i<zaehler-1; i++){ + if(decpar[i].nf<decpar[i+1].nf){ + help=decpar[i].nf; + decpar[i].nf=decpar[i+1].nf; + decpar[i+1].nf=help; + help2=decpar[i].Mth; + decpar[i].Mth=decpar[i+1].Mth; + decpar[i+1].Mth=help2; + help2=decpar[i].muth; + decpar[i].muth=decpar[i+1].muth; + decpar[i+1].muth=help2; + } + } + zaehler-=1; + } + for(int i=1;i<=n-1;i++){ + if(decpar[i].nf-decpar[i-1].nf!=-1){ + cout<<"WARNING: THERE IS A GAP IN NUMBER OF FLAVOURS. EXIT."; + RETURN + } + } + double erg1,erg2,erg3,erg4,erg5,erg6; + int i; + for( i=0;i<=n-1;i++){ + erg1= AlphasExact(asini, muini, decpar[i].muth,decpar[i].nf,nl); + erg3= mMS2mMS(mqini,asini,erg1,decpar[i].nf,nl); + erg2= DecAsDownOS(erg1,decpar[i].Mth,decpar[i].muth,decpar[i].nf-1,nl); + erg4=DecMqDownOS(erg3,erg1,decpar[i].Mth,decpar[i].muth, + decpar[i].nf-1,nl); + asini=erg2; + mqini=erg4; + muini=decpar[i].muth; + } + erg5= AlphasExact(asini,muini,mu2,decpar[i-1].nf-1,nl); + erg6 =mMS2mMS(mqini,asini,erg5,decpar[i-1].nf-1,nl); + for(int j=0;j<=3;j++){ + decpar[j].nf=0; + decpar[j].Mth=0.; + decpar[j].muth=0.; + } + return erg6; +} + + +// In the following the functions above are overloaded w.r.t. to an +// additional argument, n_f (number of active flavours). +// Use SetConstants(nf) + +double CRunDec::LamExpl(double AlphaS, double Mu, int nf, int nl){ + SetConstants(nf); + return (this->LamExpl(AlphaS, Mu, nl)); +} + +double CRunDec::LamImpl(double AlphaS, double Mu,int nf,int nl){ + SetConstants(nf); + return (this->LamImpl(AlphaS, Mu, nl)); +} + +double CRunDec::AlphasLam(double Lambda, double Mu,int nf, int nl){ + SetConstants(nf); + return (this->AlphasLam(Lambda, Mu, nl)); +} + +double CRunDec::AlphasExact(double AlphaS0, double Mu0, double MuEnd, + int nf,int nl){ + SetConstants(nf); + return (this->AlphasExact(AlphaS0,Mu0,MuEnd,nl)); +} + +double CRunDec::mMS2mMS(double mmu0, double AlphaSEnd, double AlphaS0,int nf, + int nl){ + SetConstants(nf); + return (this->mMS2mMS(mmu0, AlphaSEnd, AlphaS0, nl)); +} + +AsmMS CRunDec::AsmMSrunexact(double mMu, double AlphaS0, double Mu0, + double MuEnd,int nf, int nl){ + SetConstants(nf); + return (this->AsmMSrunexact(mMu, AlphaS0, Mu0, MuEnd, nl)); +} + +double CRunDec::mMS2mOS(double mMS, std::pair<double,double>* mq, double asmu, double mu,int nf, + int nl, double fdelm){ + SetConstants(nf); + return (this->mMS2mOS(mMS, mq, asmu, mu, nl, fdelm)); +} + +double CRunDec::mOS2mMS(double mOS, std::pair<double,double>* mq, double asmu, double Mu,int nf, + int nl, double fdelm){ + SetConstants(nf); + return (this->mOS2mMS(mOS, mq, asmu, Mu, nl, fdelm)); +} + +double CRunDec::mMS2mSI(double mMS, double asmu, double mu,int nf, int nl){ + SetConstants(nf); + return (this->mMS2mSI(mMS, asmu, mu, nl)); +} + +double CRunDec::mRI2mMS(double mRI, double asmu,int nf, int nl){ + SetConstants(nf); + return (this->mRI2mMS(mRI, asmu, nl)); +} + +double CRunDec::mMS2mRGI(double mMS, double asmu,int nf, int nl){ + SetConstants(nf); + return (this->mMS2mRGI(mMS, asmu, nl)); +} + +double CRunDec::mRGI2mMS(double mRGI, double asmu,int nf, int nl){ + SetConstants(nf); + return (this->mRGI2mMS(mRGI, asmu, nl)); +} + +double CRunDec::mOS2mSI(double mOS, std::pair<double,double>* mq, double asM,int nf, int nl, double fdelm){ + SetConstants(nf); + return (this->mOS2mSI(mOS, mq, asM, nl, fdelm)); +} + + +double CRunDec::mOS2mMSrun(double mOS, std::pair<double,double>* mq, double asmu, double mu, + int nf, int nl){ + SetConstants(nf); + return (this->mOS2mMSrun(mOS, mq, asmu, mu, nl)); +} + +double CRunDec::mMS2mOSrun(double mMS, std::pair<double,double>* mq, double asmu, double mu, + int nf, int nl){ + SetConstants(nf); + return (this->mMS2mOSrun(mMS, mq, asmu, mu, nl)); +} + +double CRunDec::mMS2mRI(double mMS, double asmu,int nf, int nl){ + SetConstants(nf); + return (this->mMS2mRI(mMS, asmu, nl)); +} + +double CRunDec::mOS2mMSit(double mOS, std::pair<double,double>* mq, double asmu, double mu, + int nf,int nl){ + SetConstants(nf); + return (this->mOS2mMSit(mOS, mq, asmu, mu, nl)); +} + +double CRunDec::mMS2mRGImod(double mMS, double asmu,int nf, int nl){ + SetConstants(nf); + return (this->mMS2mRGImod(mMS, asmu, nl)); +} + + +double CRunDec::mOS2mRS(double mOS, std::pair<double,double>* mq, double asmu, double mu, double nuf, int nl, int nloops) { + return (this->mOS2mRS(mOS, mq, asmu, mu, nuf, nl, nloops, false)); +} + +double CRunDec::mOS2mRSp(double mOS, std::pair<double,double>* mq, double asmu, double mu, double nuf, int nl, int nloops) { + return (this->mOS2mRS(mOS, mq, asmu, mu, nuf, nl, nloops, true)); +} + +double CRunDec::mMS2mRS(double mMS, std::pair<double,double>* mq, double asmu, double mu, double nuf, int nl, int nloops, double fdelm) { + return (this->mMS2mRS(mMS, mq, asmu, mu, nuf, nl, nloops, fdelm, false)); +} + +double CRunDec::mMS2mRSp(double mMS, std::pair<double,double>* mq, double asmu, double mu, double nuf, int nl, int nloops, double fdelm) { + return (this->mMS2mRS(mMS, mq, asmu, mu, nuf, nl, nloops, fdelm, true)); +} + +double CRunDec::mRS2mMS(double mRS, std::pair<double,double>* mq, double asmu, double mu, double muf, int nl, int nloops, double fdelm) { + return (this->mRS2mMS(mRS, mq, asmu, mu, muf, nl, nloops, fdelm, false)); +} + +double CRunDec::mRSp2mMS(double mRS, std::pair<double,double>* mq, double asmu, double mu, double muf, int nl, int nloops, double fdelm) { + return (this->mRS2mMS(mRS, mq, asmu, mu, muf, nl, nloops, fdelm, true)); +} + +double CRunDec::mRS2mSI(double mRS, std::pair<double,double>* mq, double (*as)(double), double muf, int nl, int nloops, double fdelm) { + return (this->mRS2mSI(mRS, mq, as, muf, nl, nloops, fdelm, false)); +} + +double CRunDec::mRSp2mSI(double mRS, std::pair<double,double>* mq, double (*as)(double), double muf, int nl, int nloops, double fdelm) { + return (this->mRS2mSI(mRS, mq, as, muf, nl, nloops, fdelm, true)); +} + +double CRunDec::DecAsDownOS(double als, double massth, double muth,int nf, + int nl){ + SetConstants(nf); + return (this->DecAsDownOS(als, massth, muth, nl)); +} + +double CRunDec::DecAsUpOS(double als, double massth, double muth, int nf, + int nl){ + SetConstants(nf); + return (this->DecAsUpOS(als, massth, muth, nl)); +} + +double CRunDec::DecAsUpMS(double als, double massth, double muth, int nf, + int nl){ + SetConstants(nf); + return (this->DecAsUpMS(als, massth, muth, nl)); +} + +double CRunDec::DecAsDownMS(double als, double massth, double muth,int nf, + int nl){ + SetConstants(nf); + return (this->DecAsDownMS(als, massth, muth, nl)); +} + +double CRunDec::DecAsUpSI(double als, double massth, double muth, int nf, + int nl){ + SetConstants(nf); + return (this->DecAsUpSI(als, massth, muth, nl)); +} + +double CRunDec::DecAsDownSI(double als, double massth, double muth, int nf, + int nl){ + SetConstants(nf); + return (this->DecAsDownSI(als, massth, muth, nl)); +} + +double CRunDec::DecMqUpOS(double mq, double als, double massth, double muth, + int nf, int nl){ + SetConstants(nf); + return (this->DecMqUpOS(mq, als, massth, muth, nl)); +} + +double CRunDec::DecMqDownOS(double mq, double als, double massth, + double muth,int nf, int nl){ + SetConstants(nf); + return (this->DecMqDownOS(mq, als, massth, muth, nl)); +} + +double CRunDec::DecMqUpMS(double mq, double als, double massth, double muth, + int nf, int nl){ + SetConstants(nf); + return (this->DecMqUpMS(mq, als, massth, muth, nl)); +} + +double CRunDec::DecMqDownMS(double mq, double als, double massth, + double muth,int nf, int nl){ + SetConstants(nf); + return (this->DecMqDownMS(mq, als, massth, muth, nl)); +} + +double CRunDec::DecMqUpSI(double mq, double als, double massth, double muth, + int nf, int nl){ + SetConstants(nf); + return (this->DecMqUpSI(mq, als, massth, muth, nl)); +} + +double CRunDec::DecMqDownSI(double mq, double als, double massth, + double muth,int nf, int nl){ + SetConstants(nf); + return (this->DecMqDownSI(mq, als, massth, muth, nl)); +} diff --git a/v2.6/toolkit/fastnlotoolkit/HoppetInterface.cc b/v2.6/toolkit/fastnlotoolkit/HoppetInterface.cc new file mode 100644 index 0000000000000000000000000000000000000000..f59fe0a673fc2fe6163f723cbc9a8e73c7672f6a --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/HoppetInterface.cc @@ -0,0 +1,105 @@ +#include <cstdlib> +#include <LHAPDF/LHAPDF.h> +#include "fastnlotk/fastNLOReader.h" +#include "fastnlotk/speaker.h" +#include "fastnlotk/HoppetInterface.h" +#include "hoppet_v1.h" + +// Initial values +bool HoppetInterface::IsInitialized = false; +fastNLOReader *HoppetInterface::fnlo = NULL; +// PDG +double HoppetInterface::QMass[6] = {PDG_MD, PDG_MU, PDG_MS, PDG_MC, PDG_MB, PDG_MT}; +double HoppetInterface::fMz = PDG_MZ; +double HoppetInterface::fAlphasMz = PDG_ASMZ; +// VFNS & NLO +std::string HoppetInterface:: fnScheme = "variable"; +int HoppetInterface::fnFlavor = 0; +int HoppetInterface::fnLoop = 2; + + + +void HoppetInterface::InitHoppet(fastNLOReader& lfnlo) { + // Reinitialise also if fnLoop has been changed from initial value + if ( ! IsInitialized || HoppetInterface::fnLoop != 2 ) { + StartHoppet(); + fnlo = &lfnlo; + } + + // If fnFlavor < 3 use VFNS up to Nf_max = 5 as default) + if ( HoppetInterface::fnFlavor < 3 ) { + hoppetsetpolemassvfn_(QMass[3], QMass[4], 1.E10); + say::info["InitHoppet"] << "Using variable-flavour number scheme with Nfmax = 5. " + << "M_c, M_b are set to PDG values, and M_t to 10^10 GeV." << std::endl; + } else { + hoppetsetffn_(HoppetInterface::fnFlavor); + } + say::info["InitHoppet"] << "Using alpha_S(Q) = " << fAlphasMz << " at Q = " << fMz << " for " << + HoppetInterface::fnLoop << " loops in alpha_S evolution and Nf = " << + HoppetInterface::fnFlavor << " flavors." << std::endl; + // Carry out evolution defining alpha_S(Q), Q, nLoops, muR/muF, LHAsub, starting scale Q_PDF + hoppetEvolve(HoppetInterface::fAlphasMz, HoppetInterface::fMz, HoppetInterface::fnLoop, 1.0, &HoppetInterface::LHAsub, 2.00001); + // Fills the HOPPET PDF represenation using PDF provided by LHAPDF. + //hoppetAssign(&evolvepdf_); +} + +void HoppetInterface::StartHoppet() { + // std::cout << "StartHoppet: Start. IsInitialized = " << IsInitialized << std::endl; + // Reasonable defaults for initialisation of PDF evolution + double ymax = 12.0; + double dy = 0.1; + double Qmin = 1.0; + double Qmax = 28000.; + double dlnlnQ = dy/4.0; + int numorder = -6; // Note: Has nothing to do with perturbative order! + int fnLoop = 2; // NLO for a start; reinitialise with HoppetInterface::fnLoop if called again + if ( IsInitialized ) { + fnLoop = HoppetInterface::fnLoop; + } + // std::cout << "StartHoppet: fnLoop = " << fnLoop << std::endl; + // std::cout << "StartHoppet: HI::fnLoop = " << HoppetInterface::fnLoop << std::endl; + hoppetStartExtended( ymax, dy, Qmin, Qmax, dlnlnQ, fnLoop, numorder, factscheme_MSbar); + IsInitialized = true; + // std::cout << "StartHoppet: Ende. IsInitialized = " << IsInitialized << std::endl; +} + +void HoppetInterface::LHAsub(const double & x, const double & Q, double * pdf) { + // + //Provides PDF for Hoppet + for (int i=0; i<13; i++) + { + pdf[i] = HoppetInterface::fnlo->GetXFX(x,Q)[i]; + } +} + + +std::vector<double> HoppetInterface::GetSpl(double x, double Q){ + if (!IsInitialized) { + say::error["GetSpl"] << "Hoppet not correctly initialized!" << std::endl; + std::exit(1); + } + + //! Returns the splitting functions + static std::vector<double> xfx(13); + hoppetEvalSplit(x, Q, 1, 5, &xfx[0]); + return xfx; +} + +std::vector<double> HoppetInterface::GetXFX(double x, double Q){ + //! Returns PDF + if (!IsInitialized) { + say::error["GetSpl"] << "Hoppet not correctly initialized!" << std::endl; + std::exit(1); + } + static std::vector<double> xfx(13); + hoppetEval(x, Q, &xfx[0]); + return xfx; +} + +double HoppetInterface::EvolveAlphas(double Q) { + if (!IsInitialized) { + say::error["EvolveAlphas"] << "Hoppet not correctly initialized!" << std::endl; + std::exit(1); + } + return hoppetAlphaS(Q); +} diff --git a/v2.6/toolkit/fastnlotoolkit/Makefile.am b/v2.6/toolkit/fastnlotoolkit/Makefile.am new file mode 100644 index 0000000000000000000000000000000000000000..1e245197878a773dcabd9785b8dbaadc0c4c87b0 --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/Makefile.am @@ -0,0 +1,104 @@ +# -*- Automake -*- +# ----------------------------------------------------------------------------- +# +# K. Rabbertz, 06.10.2013 +# +# fastNLO_toolkit +# +# ----------------------------------------------------------------------------- +# Use GNU standards +AUTOMAKE_OPTIONS = gnu + +# Subdirectories +SUBDIRS = include + +# +# Targets +# +# The C++ fastnlo toolkit library +# +if HAVE_LHAPDFCONFIG + lib_LTLIBRARIES = libfastnlotoolkit.la +endif + +# +# Sources +# +# All source files which go into the targets (and have to be distributed) +# Common sources +AM_SOURCES = +# Individual sources +libfastnlotoolkit_la_SOURCES = speaker.cc fastNLOTools.cc fastNLOInterpolBase.cc fastNLOInterpolCatmullRom.cc fastNLOInterpolLagrange.cc fastNLOInterpolLinear.cc fastNLOInterpolOneNode.cc fastNLOTable.cc fastNLOCoefficients.cc fastNLOCreate.cc read_steer.cc fastNLOCoeffBase.cc fastNLOCoeffData.cc fastNLOCoeffMult.cc fastNLOCoeffAddBase.cc fastNLOCoeffAddFix.cc fastNLOCoeffAddFlex.cc fastNLOReader.cc fastNLOPDFLinearCombinations.cc fastNLODiffReader.cc fastNLODiffUser.cc Alphas.cc CRunDec.cc $(AM_SOURCES) + +# +# Preprocessor flags +# +# All targets +AM_CPPFLAGS = +# If you still use LHAPDF versions needing Boost, i.e. < 6.2.x, you might want to use the AM_CPPFLAGS +# All targets, -fext-numeric-literals needed for conflict with Boost which ships with LHAPDF +# AM_CPPFLAGS = -fext-numeric-literals + +# Individual targets +libfastnlotoolkit_la_CPPFLAGS = $(AM_CPPFLAGS) + +# +# C++ compiler flags +# +# top_srcdir for direct compilation before install; pkgincludedir for after install +# +# Recall: -std=c++11 is requested by default through configure.ac macro AX_CXX_COMPILE_STDCXX_11 +# and works with g++, clang etc.! +# -std=gnu++11 is restricted to g++ only and not the best option +# All targets +AM_CXXFLAGS = -g -O2 -Wall -Wdeprecated-declarations -I$(top_srcdir)/include -I$(srcdir)/include -I$(top_builddir)/include +# Debug flags +# AM_CXXFLAGS = -g -ftrapping-math -fsignaling-nans -O0 -Wall -I$(top_srcdir)/include -I$(srcdir)/include -I$(top_builddir)/include +# Individual targets +libfastnlotoolkit_la_CXXFLAGS = $(AM_CXXFLAGS) +# Require LHAPDF +if HAVE_LHAPDF + libfastnlotoolkit_la_SOURCES += fastNLOLHAPDF.cc fastNLOAlphas.cc fastNLOCRunDec.cc + libfastnlotoolkit_la_CXXFLAGS += -I${LHAPDFINCLUDEPATH} +endif +# With HOPPET +if HAVE_HOPPET + libfastnlotoolkit_la_SOURCES += fastNLOHoppet.cc fastNLOHoppetAs.cc HoppetInterface.cc + libfastnlotoolkit_la_CXXFLAGS += ${HOPPETCXXFLAGS} +endif +# With QCDNUM +if HAVE_QCDNUM + libfastnlotoolkit_la_SOURCES += fastNLOQCDNUMAS.cc +endif + +# +# Linker flags +# top_builddir for distcheck; top_srcdir for direct linking before install; pkglibdir for after install +# +# All targets +AM_LDFLAGS = +# Individual targets +libfastnlotoolkit_la_LDFLAGS = $(AM_LDFLAGS) +# Require LHAPDF +if HAVE_LHAPDF +if HAVE_LHAPDFCONFIG + libfastnlotoolkit_la_LDFLAGS += `${LHAPDFBINPATH}/lhapdf-config --ldflags` +else + libfastnlotoolkit_la_LDFLAGS += -L$(LHAPDFLIBPATH) -lLHAPDF +endif +endif +# With HOPPET +if HAVE_HOPPET + libfastnlotoolkit_la_LDFLAGS += -lgfortran ${HOPPETLDFLAGS} +endif +# With QCDNUM +if HAVE_QCDNUM + libfastnlotoolkit_la_LDFLAGS += -lgfortran ${QCDNUMLDFLAGS} +endif + +# Files that are required to build the project but that can be +# recreated IF the necessary autotools etc. are available by: +# "autoreconf -i; ./configure" +# Use "make maintainer-clean" (on a build machine) before svn commits, +# but not for distribution +MAINTAINERCLEANFILES = Makefile.in diff --git a/v2.6/toolkit/fastnlotoolkit/fastNLOAlphas.cc b/v2.6/toolkit/fastnlotoolkit/fastNLOAlphas.cc new file mode 100644 index 0000000000000000000000000000000000000000..fa6ad3f565c3a75706d99a8d8039eef9c5f683b8 --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/fastNLOAlphas.cc @@ -0,0 +1,115 @@ +// Author: Daniel Britzger +// DESY, 20/04/2012 + +////////////////////////////////////////////////////////////////////////// +// // +// fastNLO_reader_2.1.0 // +// D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch // +// // +// The projects web page can be found at: // +// http://projects.hepforge.org/fastnlo // +// // +// If you use this code, please cite: // +// T. Kluge, K. Rabbertz and M. Wobisch, hep-ph/0609285 // +// D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, // +// arXiv:1109.1310 // +// // +////////////////////////////////////////////////////////////////////////// + +////////////////////////////////////////////////////////////////////////// +// +// fastNLOAlphas +// This class inherits the PDF interface from +// fastNLOLHAPDF, while the alpha_s evolution +// is superseeded by the Alphas.h class. +// +////////////////////////////////////////////////////////////////////////// + + +#include <iostream> +#include <cstdio> +#include <cstdlib> +#include <LHAPDF/LHAPDF.h> +//#include "fastnlotk/speaker.h" +//#include "fastnlotk/fastNLOReader.h" +#include "fastnlotk/fastNLOLHAPDF.h" +#include "fastnlotk/fastNLOAlphas.h" +#include "fastnlotk/Alphas.h" + +using namespace std; + +fastNLOAlphas::fastNLOAlphas(string name) : fastNLOLHAPDF(name) { + ; + }; +fastNLOAlphas::fastNLOAlphas(string name, string LHAPDFFile, int PDFSet = 0) : fastNLOLHAPDF(name,LHAPDFFile,PDFSet), fAlphasMz(0.1184) { + ; + }; + +//______________________________________________________________________________ +double fastNLOAlphas::GetAlphasMz() const { + return fAlphasMz; + }; + +void fastNLOAlphas::SetMz(double Mz) { + Alphas::SetMz(Mz); +} + +void fastNLOAlphas::SetNFlavor(int nflavor) { + if (nflavor == 0) { + Alphas::SetFlavorMatchingOn(true); + Alphas::SetNf(6); + logger.warn["SetNFlavor"]<<"GRV evolution of alpha_s is implemented for Nf=5 only.\n"; + logger.warn["SetNFlavor"]<<"You chose a variable Nf with Nfmax=6, i.e. results for Nf other than 5 presumably are wrong!\n"; + } else if (nflavor == 5) { + Alphas::SetNf(nflavor); + } else { + logger.error["SetNFlavor"]<<"GRV evolution of alpha_s is implemented for Nf=5 only.\n"; + exit(1); + } +} + +void fastNLOAlphas::SetNLoop(int nloop) { + if ( nloop < 2 || nloop > 4 ) { + logger.error["fastNLOAlphas::SetNLoop"] << "Illegal no. of loops nloop = " << nloop << + ", aborted! Only 2, 3, or 4 are allowed with fastNLO GRV code." << endl; + exit(11); + } + Alphas::SetNLoop(nloop); +} + +void fastNLOAlphas::SetAlphasMz(double AlphasMz) { + fAlphasMz = AlphasMz; +} + + +//______________________________________________________________________________ + + +double fastNLOAlphas::EvolveAlphas(double Q) const { + // + // Implementation of Alpha_s evolution as function of Mu_r only. + // + // the alpha_s evolution is done within LHAPDF. + // + // WARNING: You cannot change alpha_s(Mz), but is is + // defined with the pdf. 'alphasMz' is not used here! + // + return Alphas::CalcAlphasMu(Q , fAlphasMz); +} + + +//______________________________________________________________________________ + + +void fastNLOAlphas::SetGRVtoPDG2012_2loop() { + logger.info["SetGrVtoPDF2012"]<<"Resetting to GRV Alphas::Alphas evolution."<<endl; + Alphas::SetMz(91.1876); // PDG 2012 + Alphas::SetNf(5); + Alphas::SetNLoop(2); + Alphas::SetFlavorMatchingOn(false); + if (logger.info.GetSpeak()) { + logger.info<<"Calling Alphas::PrintInfo()."<<endl; + logger.info<<"Alpha_s(Mz) value is taken from fastNLOAlphas, instead of Alphas::Alphas."<<endl; + Alphas::PrintInfo(); + } +} diff --git a/v2.6/toolkit/fastnlotoolkit/fastNLOCRunDec.cc b/v2.6/toolkit/fastnlotoolkit/fastNLOCRunDec.cc new file mode 100644 index 0000000000000000000000000000000000000000..4173b338be9493bce4df12d9832c8ebc84358dde --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/fastNLOCRunDec.cc @@ -0,0 +1,231 @@ +// Author: Daniel Britzger +// DESY, 20/04/2012 + +////////////////////////////////////////////////////////////////////////// +// // +// fastNLO_reader_2.1.0 // +// D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch // +// // +// The projects web page can be found at: // +// http://projects.hepforge.org/fastnlo // +// // +// If you use this code, please cite: // +// T. Kluge, K. Rabbertz and M. Wobisch, hep-ph/0609285 // +// D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, // +// arXiv:1109.1310 // +// // +////////////////////////////////////////////////////////////////////////// + +////////////////////////////////////////////////////////////////////////// +// +// fastNLOAlphas +// This class inherits the PDF interface from +// fastNLOLHAPDF, while the alpha_s evolution +// is superseeded by the Alphas.h class. +// +////////////////////////////////////////////////////////////////////////// + +#include <iostream> +#include <cstdio> +#include <cstdlib> +#include <LHAPDF/LHAPDF.h> +#include "fastnlotk/fastNLOLHAPDF.h" +#include "fastnlotk/fastNLOCRunDec.h" + +using namespace std; + + + +//______________________________________________________________________________ +// +fastNLOCRunDec::fastNLOCRunDec(string name) : fastNLOLHAPDF(name) { + // Without PDF info use PDG values as default + InitCRunDec(); + SetPDGValues(); + // Print out values for checking + // PrintParmValues(); +}; +fastNLOCRunDec::fastNLOCRunDec(string name, string LHAPDFFile, int PDFMem) : fastNLOLHAPDF(name, LHAPDFFile, PDFMem) { + // Set initial values via LHAPDF6 info system + InitCRunDec(); + SetLHAPDFValues(LHAPDFFile, PDFMem); + // Print out values for checking + // PrintParmValues(); +}; + + + +// Getters +double fastNLOCRunDec::GetQMass(int pdgid) const { + if (pdgid < 1 || pdgid > 6 ) { + logger.error["fastNLOCRunDec::GetQMass"]<<"PDG code out of quark index range 1-6! Aborted.\n"; + exit(1); + } + return QMass[pdgid]; +} +double fastNLOCRunDec::GetMz() const { + return fMz; +} +std::string fastNLOCRunDec::GetNScheme() const { + return fnScheme; +} +int fastNLOCRunDec::GetNFlavor() const { + return fnFlavor; +} +int fastNLOCRunDec::GetNLoop() const { + return fnLoop; +} +double fastNLOCRunDec::GetAlphasMz() const { + return fAlphasMz; +}; + + + +// Setters +void fastNLOCRunDec::SetQMass(int pdgid, double qmass) { + QMass[pdgid] = qmass; +} +void fastNLOCRunDec::SetMz(double Mz) { + fMz = Mz; +} +void fastNLOCRunDec::SetNFlavor(int nflavor) { + fnFlavor = nflavor; +} +void fastNLOCRunDec::SetNLoop(int nloop) { + if ( nloop < 1 || nloop > 4 ) { + logger.error["fastNLOCRunDec::SetNLoop"] << "Illegal no. of loops nloop = " << nloop << + ", aborted! Only 1, 2, 3, or 4 are allowed with RUNDEC." << endl; + exit(11); + } + fnLoop = nloop; +} +void fastNLOCRunDec::SetAlphasMz(double AlphasMz) { + fAlphasMz = AlphasMz; +} + + + +// Combined Setters +void fastNLOCRunDec::SetPDGValues() { + // Initialize with PDG values + QMass[0] = PDG_MD; + QMass[1] = PDG_MU; + QMass[2] = PDG_MS; + QMass[3] = PDG_MC; + QMass[4] = PDG_MB; + QMass[5] = PDG_MT; + fMz = PDG_MZ; + // Variable flavor number scheme + fnFlavor = 0; + // 2-loop alpha_s evolution + fnLoop = 2; + fAlphasMz = PDG_ASMZ; +} + +void fastNLOCRunDec::SetLHAPDFValues(std::string LHAPDFFile, int PDFMem) { + // AlphaS_MZ can vary among PDF members, so we really need the PDF member info from LHAPDF + const LHAPDF::PDFInfo PDFMemInfo(LHAPDFFile, PDFMem); + QMass[0] = PDFMemInfo.get_entry_as<double>("MDown"); + QMass[1] = PDFMemInfo.get_entry_as<double>("MUp"); + QMass[2] = PDFMemInfo.get_entry_as<double>("MStrange"); + QMass[3] = PDFMemInfo.get_entry_as<double>("MCharm"); + QMass[4] = PDFMemInfo.get_entry_as<double>("MBottom"); + QMass[5] = PDFMemInfo.get_entry_as<double>("MTop"); + fMz = PDFMemInfo.get_entry_as<double>("MZ"); + fnScheme = PDFMemInfo.get_entry_as<std::string>("FlavorScheme"); + if ( PDFMemInfo.has_key("AlphaS_NumFlavors") ) { + fnFlavor = PDFMemInfo.get_entry_as<int>("AlphaS_NumFlavors"); + } else { + fnFlavor = PDFMemInfo.get_entry_as<int>("NumFlavors"); + } + // Variable flavor numbers are usually set via Nf = 0 in evolution code. + // Ensure that fnFlavor is maximum Nf for variable flavor number scheme by + // setting quark masses to 10^10. + if ( fnFlavor != 0 && fnFlavor < 3 ) { + logger.error["fastNLOCRunDec::SetLHAPDFValues"] << "Less than 3 flavors is not supported! Aborted." << endl; + exit(11); + } + if ( fnScheme == "variable" && fnFlavor < 6 ) { + QMass[5] = 1.E10; + if ( fnFlavor < 5 ) QMass[4] = 1.E10; + if ( fnFlavor < 4 ) QMass[3] = 1.E10; + fnFlavor = 0; + } + if ( PDFMemInfo.has_key("AlphaS_OrderQCD") ) { + fnLoop = PDFMemInfo.get_entry_as<int>("AlphaS_OrderQCD") + 1; + } else { + fnLoop = PDFMemInfo.get_entry_as<int>("OrderQCD") + 1; + } + if ( fnLoop > 4 ) { + logger.error["fastNLOCRunDec::SetLHAPDFValues"] << "More than 4 loops is not supported! Aborted." << endl; + exit(11); + } + fAlphasMz = PDFMemInfo.get_entry_as<double>("AlphaS_MZ"); +} + + + +// Printers +void fastNLOCRunDec::PrintParmValues() { + for ( int i = 0; i<6; i++ ) { + cout << "fQMass[" << i << "] = " << QMass[i] << endl; + } + cout << "fMz = " << fMz << endl; + cout << "fnScheme = " << fnScheme << endl; + cout << "fnFlavor = " << fnFlavor << endl; + cout << "fnLoop = " << fnLoop << endl; + cout << "fAlphasMz = " << fAlphasMz << endl; +} + + +//______________________________________________________________________________ +void fastNLOCRunDec::InitCRunDec() { + + crundec = new CRunDec(); + +} + + + +//______________________________________________________________________________ +double fastNLOCRunDec::EvolveAlphas(double Q) const { + // + // Implementation of Alpha_s evolution as function of Mu_r only. + // + //FFNS + if (fnFlavor != 0) { + return crundec->AlphasExact(fAlphasMz, fMz, Q, fnFlavor, fnLoop); + } + + //TODO: Replace with better code + //VFNS + //Always evolving from Mz as starting scale + //Crossing the mt threshold + if (Q > QMass[5]) { + crundec->nfMmu[0].nf = 6; + crundec->nfMmu[0].Mth = QMass[5]; + crundec->nfMmu[0].muth = QMass[5]; + return crundec->AlL2AlH(fAlphasMz, fMz, crundec->nfMmu, Q, fnLoop); + } + //Not Crossing any threshold + else if ( Q > QMass[4]) { + return crundec->AlphasExact(fAlphasMz, fMz, Q, 5, fnLoop); + } + //Crossing mb threshold + else if (Q > QMass[3]) { + crundec->nfMmu[0].nf = 5; + crundec->nfMmu[0].Mth = QMass[4]; + crundec->nfMmu[0].muth = QMass[4]; + return crundec->AlH2AlL(fAlphasMz, fMz, crundec->nfMmu, Q, fnLoop); + } + //Crossing mc and mb threshold + else { + crundec->nfMmu[0].nf = 5; + crundec->nfMmu[0].Mth = QMass[4]; + crundec->nfMmu[0].muth = QMass[4]; + crundec->nfMmu[1].nf = 4; + crundec->nfMmu[1].Mth = QMass[3]; + crundec->nfMmu[1].muth = QMass[3]; + return crundec->AlH2AlL(fAlphasMz, fMz, crundec->nfMmu, Q, fnLoop); + } +} diff --git a/v2.6/toolkit/fastnlotoolkit/fastNLOCoeffAddBase.cc b/v2.6/toolkit/fastnlotoolkit/fastNLOCoeffAddBase.cc new file mode 100644 index 0000000000000000000000000000000000000000..dfa4f3f1fe1358441f0aad9e77d35e4fe28500c7 --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/fastNLOCoeffAddBase.cc @@ -0,0 +1,846 @@ +#include <cstdlib> +#include <iostream> +#include <cmath> + +#include "fastnlotk/fastNLOCoeffAddBase.h" +#include "fastnlotk/fastNLOTools.h" +#include "fastnlotk/fastNLOEvent.h" +#include "fastnlotk/fastNLOInterpolBase.h" +#include "fastnlotk/fastNLOTools.h" + +using namespace std; +using namespace fastNLO; + +//________________________________________________________________________________________________________________ // +fastNLOCoeffAddBase::fastNLOCoeffAddBase(int NObsBin) + : fastNLOCoeffBase(NObsBin), IRef(), IScaleDep(), Nevt(), Npow(), NPDFPDG(), + NPDFDim(), NFFPDG(), NFFDim(), NSubproc(), IPDFdef1(), IPDFdef2(), IPDFdef3(), + fPDFCoeff(), Hxlim1(), XNode1(), Hxlim2(), XNode2(), Nztot(), Hzlim(), ZNode(), + NScales(), NScaleDim(), Iscale(), ScaleDescript() { + +} + + +//________________________________________________________________________________________________________________ // +fastNLOCoeffAddBase::fastNLOCoeffAddBase(const fastNLOCoeffBase& base ) : fastNLOCoeffBase(base) { +} + + +//________________________________________________________________________________________________________________ // +bool fastNLOCoeffAddBase::CheckCoeffConstants(const fastNLOCoeffBase* c, bool quiet) { + if ( c->GetIAddMultFlag()==0 && c->GetIDataFlag()==0 ) { + // Additive contribution + return true; + } else if ( c->GetIAddMultFlag()==1 && c->GetIDataFlag()==0 ) { + // Multiplicative contribution + return false; + } else if ( c->GetIAddMultFlag()==0 && c->GetIDataFlag()==1 ) { + // Data contribution + return false; + } else { + // Unknown contribution + say::error["fastNLOCoeffAddBase::CheckCoeffConstants"] << "Unknown contribution type, aborting! " + << "IAddMultFlag = " << c->GetIAddMultFlag() + << ", IDataFlag =" << c->GetIDataFlag() <<endl; + exit(1); + } +} + +//________________________________________________________________________________________________________________ // +fastNLOCoeffAddBase* fastNLOCoeffAddBase::Clone() const { + //! Use has to take care to delete this object later + return new fastNLOCoeffAddBase(*this); +} + + +///________________________________________________________________________________________________________________ // +void fastNLOCoeffAddBase::Read(istream& table, int ITabVersionRead){ + debug["Read"]<<"Start reading table ..."<<endl; + fastNLOCoeffBase::ReadBase(table, ITabVersionRead); + CheckCoeffConstants(this); + ReadCoeffAddBase(table, ITabVersionRead); + fastNLOCoeffBase::ReadCoeffInfoBlocks(table, ITabVersionRead); + EndReadCoeff(table, ITabVersionRead); + debug["Read"]<<"Finished reading table ..."<<endl; +} + + +//________________________________________________________________________________________________________________ // +void fastNLOCoeffAddBase::ReadCoeffAddBase(istream& table, int ITabVersionRead){ + debug["ReadCoeffAddBase::ReadCoeffAddBase"]<<"Start reading coefficients for table version "<<ITabVersionRead<<endl; + CheckCoeffConstants(this); + char buffer[5257]; + table >> IRef; + table >> IScaleDep; + table >> Nevt; + double readNevt = Nevt; + if ( Nevt <= 0 ) { // v2300 + table >> Nevt; + table >> fWgt.WgtNevt; + if ( readNevt<=-2 ) table >> fWgt.NumTable; + table >> fWgt.WgtNumEv; + table >> fWgt.WgtSumW2; + table >> fWgt.SigSumW2; + table >> fWgt.SigSum; + fastNLOTools::ReadFlexibleVector ( fWgt.WgtObsSumW2, table ); + fastNLOTools::ReadFlexibleVector ( fWgt.SigObsSumW2, table ); + fastNLOTools::ReadFlexibleVector ( fWgt.SigObsSum, table ); + fastNLOTools::ReadFlexibleVector ( fWgt.WgtObsNumEv, table ); + } + table >> Npow; + int NPDF; + table >> NPDF; + if(NPDF>0){ + NPDFPDG.resize(NPDF); + for(int i=0;i<NPDF;i++){ + table >> NPDFPDG[i]; + } + } + table >> NPDFDim; + int NFragFunc; + table >> NFragFunc; + if(NFragFunc>0){ + NFFPDG.resize(NFragFunc); + for(int i=0;i<NFragFunc;i++){ + table >> NFFPDG[i]; + } + } + table >> NFFDim; + table >> NSubproc; + table >> IPDFdef1; + table >> IPDFdef2; + table >> IPDFdef3; + + sub_enabled.clear(); + sub_enabled.resize(NSubproc, true); // enable all subprocesses by default + + if(IPDFdef2==0){ // PDF linear combinations are stored herewith + if ( IPDFdef3 != NSubproc ){ + error["ReadCoeffAddBase"]<<"IPDFdef3 must be equal to NSubproc. (IPDFdef3="<<IPDFdef3<<", NSubproc="<<NSubproc<<"). Exiting."<<endl; + exit(1); + } + int IPDFCoeffFormat = -1; + table >> IPDFCoeffFormat; + if ( IPDFCoeffFormat == 0 ) { + fPDFCoeff.resize(NSubproc); + for(int k=0;k<NSubproc;k++){ + int NPartonPairs = -1; + table >> NPartonPairs; + for(int n=0;n<NPartonPairs;n++){ + int PDF1Flavor=-100, PDF2Flavor=-100; + if ( IPDFdef1>=3 ) { + table >> PDF1Flavor; + table >> PDF2Flavor; + } + else if ( IPDFdef1==2 ) { + table >> PDF1Flavor; + PDF2Flavor = PDF1Flavor; + } + fPDFCoeff[k].push_back(make_pair(PDF1Flavor,PDF2Flavor)); + } + } + } + else { + error["ReadCoeffAddBase"]<<"Only IPDFCoeffFormat==0 is implemented, but IPDFCoeffFormat="<<IPDFCoeffFormat<<". Exiting."<<endl; + exit(1); + } + } + if(IPDFdef1==0){ + for(int i=0;i<NSubproc;i++){ + // Missing: linear PDF combinations for IPDFdef1=0 + if(NPDF==1){ + }else{ + if(NPDF==2){ + } + } + } + } + //Nxtot1.resize(fNObsBins); + XNode1.resize(fNObsBins); + for(int i=0;i<fNObsBins;i++){ + int xtot; + table >> xtot; + //table >> Nxtot1[i]; + //XNode1[i].resize(Nxtot1[i]); + XNode1[i].resize(xtot); + for(int j=0;j<xtot;j++){ + table >> XNode1[i][j]; + } + } + if(NPDFDim==2){ + //Nxtot2.resize(fNObsBins); + XNode2.resize(fNObsBins); + for(int i=0;i<fNObsBins;i++){ + int xtot; + table >> xtot; + XNode2[i].resize(xtot); + //table >> Nxtot2[i]; + //XNode2[i].resize(Nxtot2[i]); + for(int j=0;j<xtot;j++){ + table >> XNode2[i][j]; + } + } + } + if(NFragFunc>0){ + Nztot.resize(fNObsBins); + ZNode.resize(fNObsBins); + for(int i=0;i<fNObsBins;i++){ + table >> Nztot[i]; + ZNode[i].resize(Nztot[i]); + for(int j=0;j<Nztot[i];j++){ + table >> ZNode[i][j]; + } + } + } + + table >> NScales; + table >> NScaleDim; + Iscale.resize(NScales); + for(int i=0;i<NScales;i++){ + table >> Iscale[i]; + } + int NscaleDescript; + ScaleDescript.resize(NScaleDim); + for(int i=0;i<NScaleDim;i++){ + table >> NscaleDescript; + ScaleDescript[i].resize(NscaleDescript); + table.getline(buffer,256); + for(int j=0;j<NscaleDescript;j++){ + table.getline(buffer,256); + ScaleDescript[i][j] = buffer; + // StripWhitespace(ScaleDescript[i][j]); + } + } +} + + +//________________________________________________________________________________________________________________ // +void fastNLOCoeffAddBase::Write(ostream& table, int itabversion) { + debug["Write"]<<"Calling fastNLOCoeffBase::Write()"<<endl; + fastNLOCoeffBase::Write(table,itabversion); + CheckCoeffConstants(this); + table << IRef << sep; + table << IScaleDep << sep; + if ( itabversion==23000 || itabversion==23500 || itabversion==23600 || itabversion==25000 || itabversion==26000) { // detailed storage of weights + if ( itabversion==23000 || itabversion==23500 ) table << -1 << sep; // -1: read the values below + else table << -2 << sep; // -1: read the values below + table << Nevt << sep; + table << fWgt.WgtNevt << sep; + if ( itabversion >= 23600 ) table << fWgt.NumTable << sep; + table << fWgt.WgtNumEv << sep; + table << fWgt.WgtSumW2 << sep; + table << fWgt.SigSumW2 << sep; + table << fWgt.SigSum << sep; + fastNLOTools::WriteFlexibleVector ( fWgt.WgtObsSumW2, table ); + fastNLOTools::WriteFlexibleVector ( fWgt.SigObsSumW2, table ); + fastNLOTools::WriteFlexibleVector ( fWgt.SigObsSum, table ); + fastNLOTools::WriteFlexibleVector ( fWgt.WgtObsNumEv, table ); + } else { + table << Nevt << sep; + } + table << Npow << sep; + table << NPDFPDG.size() << sep; + for(unsigned int i=0;i<NPDFPDG.size();i++){ + table << NPDFPDG[i] << sep; + } + table << NPDFDim << sep; + int NFragFunc = NFFPDG.size(); + table << NFragFunc << sep; + if(NFragFunc>0){ + for(int i=0;i<NFragFunc;i++){ + table << NFFPDG[i] << sep; + } + } + table << NFFDim << sep; + table << NSubproc << sep; + table << IPDFdef1 << sep; + table << IPDFdef2 << sep; + table << IPDFdef3 << sep; + + if(IPDFdef2==0){ // PDF linear combinations are stored herewith + info["Write"]<<"Writing PDF coefficients into table."<<endl; + if ( IPDFdef3 != NSubproc ){ + error["Write"]<<"IPDFdef3 must be equal to NSubproc. (IPDFdef3="<<IPDFdef3<<", NSubproc="<<NSubproc<<"). Exiting."<<endl; + exit(1); + } + int IPDFCoeffFormat = 0 ; // this is format style 0 + table << IPDFCoeffFormat << sep; + for(int k=0;k<NSubproc;k++){ + table << fPDFCoeff[k].size() <<sep; // NPartonParis + for( unsigned int n=0;n<fPDFCoeff[k].size();n++){ + if ( IPDFdef1>=3 ) { + table << fPDFCoeff[k][n].first << sep; + table << fPDFCoeff[k][n].second << sep; + } + else if ( IPDFdef1==2 ) { + table << fPDFCoeff[k][n].first << sep; + } + } + } + } + + if(IPDFdef1==0){ + for(int i=0;i<NSubproc;i++){ + // Missing: linear PDF combinations for IPDFdef1=0 + if(NPDFPDG.size()==1){ + }else{ + if(NPDFPDG.size()==2){ + } + } + } + } + for(int i=0;i<fNObsBins;i++){ + table << XNode1[i].size() << sep; + for(unsigned int j=0;j<XNode1[i].size();j++){ + table << XNode1[i][j] << sep; + } + } + if(NPDFDim==2){ + for(int i=0;i<fNObsBins;i++){ + table << XNode2[i].size() << sep; + for(unsigned int j=0;j<XNode2[i].size();j++){ + table << XNode2[i][j] << sep; + } + } + } + if(NFragFunc>0){ + for(int i=0;i<fNObsBins;i++){ + table << Nztot[i] << sep; + for(int j=0;j<Nztot[i];j++){ + table << ZNode[i][j] << sep; + } + } + } + int NScales = Iscale.size(); + table << NScales << sep; + table << NScaleDim << sep; + for(int i=0;i<NScales;i++){ + table << Iscale[i] << sep; + } + for(int i=0;i<NScaleDim;i++){ + table << ScaleDescript[i].size() << sep; + for(unsigned int j=0;j<ScaleDescript[i].size();j++){ + table << ScaleDescript[i][j] << sep; + } + } +} + + +//________________________________________________________________________________________________________________ // +void fastNLOCoeffAddBase::Add(const fastNLOCoeffAddBase& other, fastNLO::EMerge moption){ + // double w1 = (double)Nevt / (Nevt+other.Nevt); + // double w2 = (double)other.Nevt / (Nevt+other.Nevt); + if ( Nevt==1 || other.GetNevt()==1 ) { + if ( moption != fastNLO::kAdd && moption != fastNLO::kUnweighted && moption != fastNLO::kAttach ) { + error["Add"]<<"Table has weight 1, which is invalid for mergeing purposes."<<endl; + error["Add"]<<"Possibly, the table is a result from a previous 'append' or 'unweighted' mergeing."<<endl; + exit(4); + } + } + + for (int i = 0; i < fNObsBins; i++) { + fastNLOTools::ExtendHead(XNode1[i], other.XNode1[i]); + } + if (NPDFDim > 1) { + for (int i = 0; i < fNObsBins; i++) { + fastNLOTools::ExtendHead(XNode2[i], other.XNode2[i]); + } + } + + if ( moption==fastNLO::kAttach ) { + //Nevt = Nevt;// stays! + fWgt.WgtNevt = 1; + fWgt.NumTable += other.fWgt.NumTable; + fWgt.WgtNumEv += other.fWgt.WgtNumEv; + fWgt.WgtSumW2 += other.fWgt.WgtSumW2; + fWgt.SigSumW2 += other.fWgt.SigSumW2; + fWgt.SigSum += other.fWgt.SigSum; + for ( unsigned int iAddProc = 0 ; iAddProc<other.fWgt.WgtObsSumW2.size() ; iAddProc++ ) { + fWgt.WgtObsSumW2.push_back(other.fWgt.WgtObsSumW2[iAddProc]); + fWgt.SigObsSumW2.push_back(other.fWgt.SigObsSumW2[iAddProc]); + fWgt.SigObsSum. push_back(other.fWgt.SigObsSum[iAddProc]); + fWgt.WgtObsNumEv.push_back(other.fWgt.WgtObsNumEv[iAddProc]); + } + if ( other.GetPDFCoeff().size() ==0 || this->GetPDFCoeff().size()==0 ) { + error["Add"]<<"Mergeing option 'kAttach' requires that PDF coefficients are stored in table.!"<<endl; + } + for ( unsigned int iAddProc = 0 ; iAddProc<other.GetPDFCoeff().size() ;iAddProc++ ) { + fPDFCoeff.push_back(other.GetPDFCoeff()[iAddProc]); + } + NSubproc += other.GetNSubproc(); + IPDFdef3 += other.GetIPDFdef3(); + } + else { + Nevt += other.Nevt; + fWgt.WgtNevt += other.fWgt.WgtNevt; + fWgt.NumTable += other.fWgt.NumTable; + fWgt.WgtNumEv += other.fWgt.WgtNumEv; + fWgt.WgtSumW2 += other.fWgt.WgtSumW2; + fWgt.SigSumW2 += other.fWgt.SigSumW2; + fWgt.SigSum += other.fWgt.SigSum; + fastNLOTools::AddVectors( fWgt.WgtObsSumW2, other.fWgt.WgtObsSumW2 ); + fastNLOTools::AddVectors( fWgt.SigObsSumW2, other.fWgt.SigObsSumW2 ); + fastNLOTools::AddVectors( fWgt.SigObsSum, other.fWgt.SigObsSum ); + fastNLOTools::AddVectors( fWgt.WgtObsNumEv, other.fWgt.WgtObsNumEv ); + } + +} + + +//________________________________________________________________________________________________________________ // +double fastNLOCoeffAddBase::GetMergeWeight(fastNLO::EMerge moption, int proc, int bin) const { + + //!< Get a bin and subprocess dependent weight for merging puprposes. + if ( moption == kMerge ) return fWgt.WgtNevt; // Nevt + else if ( moption == kUnweighted ) return fWgt.NumTable; + else if ( moption == kAdd ) return 1; + else if ( moption == kNumEvent ) return double(fWgt.WgtNumEv); + else if ( moption == kSumW2 ) return fWgt.WgtSumW2; + else if ( moption == kSumSig2 ) return fWgt.SigSumW2; + else if ( moption == kSumUser ) return fWgt.SigSum; + else if ( moption == kNumEventBinProc ) return double(fWgt.WgtObsNumEv[proc][bin]); + else if ( moption == kSumW2BinProc ) return fWgt.WgtObsSumW2[proc][bin]; + else if ( moption == kSumSig2BinProc ) return fWgt.SigObsSumW2[proc][bin]; + else if ( moption == kSumUserBinProc ) return fWgt.SigObsSum[proc][bin]; + error["GetMergeWeight"]<<"Weighting option not recognized: "<<moption<<endl; + exit(4); + return 0; +} + + +//________________________________________________________________________________________________________________ // +bool fastNLOCoeffAddBase::IsCompatible(const fastNLOCoeffAddBase& other) const { + // chek CoeffBase variables + if ( ! ((fastNLOCoeffBase*)this)->IsCompatible(other)) { + debug["IsCompatible"]<<"fastNLOCoeffBase not compatible."<<endl; + return false; + } + if ( IRef != other.GetIRef() ) { + //warn["IsCompatible"]<<""<<endl; + warn["IsCompatible"]<<"Different number of IRef detected."<<endl; + return false; + } + if ( Nevt * other.Nevt < 0 ) { + // skip, if the two tables store the event weights in different formats + // If this is needed, simple solutions are thinkable + warn["IsCompatible"]<<"Tables use different format for normalisation."<<endl; + return false; + } + if ( IScaleDep != other.GetIScaleDep() ) { + warn["IsCompatible"]<<"Different number of IScaleDep detected."<<endl; + return false; + } + if ( Npow != other.GetNpow() ) { + warn["IsCompatible"]<<"Different number of NPow detected."<<endl; + return false; + } + if ( GetNPDF() != other.GetNPDF() ) { + warn["IsCompatible"]<<"Different number of NPDF detected."<<endl; + return false; + } + if ( NSubproc != other.GetNSubproc() ) { + warn["IsCompatible"]<<"Different numbers for NSubproc detected."<<endl; + //return false; + warn["IsCompatible"]<<"Continuing! (experimental: This is needed for kAttach, but may causes bugs otherwise. Please report!)"<<endl; + } + // check x-nodes + if (!fastNLOTools::SameTails(GetAllXNodes1(), other.GetAllXNodes1())) { + warn["IsCompatible"] << "XNodes1 not compatible, set verbosity to debug for more information." << endl; + return false; + } + if (!fastNLOTools::SameTails(GetAllXNodes2(), other.GetAllXNodes2())) { + warn["IsCompatible"] << "XNodes2 not compatible, set verbosity to debug for more information." << endl; + return false; + } + // succesful! + return true; +} + + +//________________________________________________________________________________________________________________ // +bool fastNLOCoeffAddBase::IsCatenable(const fastNLOCoeffAddBase& other) const { + // check CoeffBase variables + if ( ! ((fastNLOCoeffBase*)this)->IsCatenable(other)) { + debug["IsCatenable"]<<"fastNLOCoeffBase not compatible. Skipped."<<endl; + return false; + } + if ( Nevt * other.Nevt < 0 ) { + // skip, if the two tables store the event weights in different formats + // If this is needed, simple solutions are thinkable + debug["IsCatenable"]<<"Tables use different format for table normalisation. Skipped."<<endl; + return false; + } + if ( IRef != other.GetIRef() ) { + debug["IsCatenable"]<<"Different number of IRef detected. Skipped."<<endl; + return false; + } + if ( IScaleDep != other.GetIScaleDep() ) { + debug["IsCatenable"]<<"Different number of IScaleDep detected. Skipped."<<endl; + return false; + } + if ( Npow != other.GetNpow() ) { + debug["IsCatenable"]<<"Different number of NPow detected. Skipped."<<endl; + return false; + } + if ( GetNPDF() != other.GetNPDF() ) { + debug["IsCatenable"]<<"Different number of NPDF detected. Skipped."<<endl; + return false; + } + if ( NSubproc != other.GetNSubproc() ) { + debug["IsCatenable"]<<"Different numbers for NSubproc detected. Skipped."<<endl; + return false; + } + // check x-nodes briefly + // for ( int i = 0 ; i< fNObsBins ;i++ ){ + // if ( GetNxmax(i) != other.GetNxmax(i) ){ + // debug["IsCatenable"]<<"Different number of x-nodes detected."<<endl; + // return false; + // } + // if ( GetNxtot1(i) != other.GetNxtot1(i) ){ + // debug["IsCatenable"]<<"Different number of x-nodes detected."<<endl; + // return false; + // } + // if ( GetXNode1(i,0) != other.GetXNode1(i,0) ){ + // debug["IsCatenable"]<<"Different values for x-nodes detected."<<endl; + // return false; + // } + // if ( GetXNode1(i,1) != other.GetXNode1(i,1) ){ + // debug["IsCatenable"]<<"Different values for x-nodes detected."<<endl; + // return false; + // } + // } + info["IsCatenable"]<<"Base parameters of additive contribution allow catenation"<<endl; + return true; +} + +//________________________________________________________________________________________________________________ +bool fastNLOCoeffAddBase::SubSelect( vector< pair<int,int> > processes, bool on ) { + vector<int> s; + s.clear(); + for ( unsigned int k=0; k<processes.size(); k++ ) { + pair<int,int> p = processes[k]; + // search for selected process in fPDFCoeff + for ( unsigned int i = 0; i<fPDFCoeff.size(); i++ ) { + for ( unsigned int j = 0; j<fPDFCoeff[i].size(); j++ ) { + if ( p == fPDFCoeff[i][j] ) { + // found! now check if the other proesses in this subcontribution are also to be selected + vector< pair<int,int> > p_list = fPDFCoeff[i]; + bool f = true; + for ( unsigned int n = 0; n<p_list.size(); n++ ) { + bool ff = false; + for ( unsigned int m = 0; m<processes.size(); m++ ) + if ( p_list[n] == processes[m] ) + ff = true; + f &= ff; + } + if (!f) + return false; + s.push_back(i); + } + } + } + // uncomment to throw error on non-existing pairs + //if (!fff) + // return false; + } + // now activate the selected subcontributions and return succes (true) + for ( unsigned int k = 0; k<s.size(); k++ ) + SubEnable(s[k], on); + + return true; +} + + + +//________________________________________________________________________________________________________________ // +void fastNLOCoeffAddBase::Clear() { + //! Clear all coefficients and event counts + Nevt = 0; + fWgt.WgtNevt = 0; + fWgt.NumTable = 1; + fWgt.WgtNumEv = 0; + fWgt.WgtSumW2 = 0; + fWgt.SigSumW2 = 0; + fWgt.SigSum = 0; + fastNLOTools::ClearVector(fWgt.WgtObsSumW2); + fastNLOTools::ClearVector(fWgt.SigObsSumW2); + fastNLOTools::ClearVector(fWgt.SigObsSum); + fastNLOTools::ClearVector(fWgt.WgtObsNumEv); +} + + +//________________________________________________________________________________________________________________ // +void fastNLOCoeffAddBase::NormalizeCoefficients(double wgt) { + Nevt = wgt; + // Don't touch other weights. +} + + +//________________________________________________________________________________________________________________ // +int fastNLOCoeffAddBase::GetNxmax(int i) const { + int nxmax = 0; + switch (NPDFDim) { + case 0: nxmax = (int)XNode1[i].size(); + break; + // case 1: nxmax = ((int)pow((double)Nxtot1[i],2)+Nxtot1[i])/2; + case 1: nxmax = ((int)pow((double)XNode1[i].size(),2)+XNode1[i].size())/2; + break; + case 2: nxmax = XNode1[i].size()*XNode2[i].size(); + break; + default: ; + } + return nxmax; +}; + + +//________________________________________________________________________________________________________________ // +int fastNLOCoeffAddBase::GetXIndex(int Obsbin,int x1bin,int x2bin) const { + int xbin = 0; + switch (NPDFDim) { + case 0: xbin = x1bin; // linear + break; + case 1: xbin = x1bin + (x2bin*(x2bin+1)/2); // half matrix + break; + case 2: xbin = x1bin + x2bin * XNode1[Obsbin].size(); // full matrix + break; + default: ; + } + return xbin; +}; + + +//________________________________________________________________________________________________________________ // +double fastNLOCoeffAddBase::GetX1(int iObsBin, int iXnode) const { + // return x-value of PDF1 at node iXnode + switch (NPDFDim) { + case 0: + return GetXNode1(iObsBin,iXnode); + case 1: + // + // cout<<"GetX1 not implemented for half-matrix notation!"<<endl; + // + return 1; + case 2: + return GetXNode1(iObsBin, iXnode % GetNxtot1(iObsBin) ); + default: return 1; + } + return 1; +} + +//________________________________________________________________________________________________________________ // +double fastNLOCoeffAddBase::GetX2(int iObsBin, int iXnode) const { + // return x-value of PDF1 at node iXnode + switch (NPDFDim) { + case 0: + return 1; + case 1: + // + //cout<<"GetX2 not implemented for half-matrix notation!"<<endl; + // + return 1; + case 2: + return GetXNode2(iObsBin, iXnode / GetNxtot1(iObsBin) ); + default: return 1; + } + return 1; +} + + +//________________________________________________________________________________________________________________ // +void fastNLOCoeffAddBase::Print(int iprint) const { + if ( !(iprint < 0) ) { + fastNLOCoeffBase::Print(iprint); + cout << fastNLO::_DSEP20C << " fastNLO Table: CoeffAddBase " << fastNLO::_DSEP20 << endl; + } else { + cout << endl << fastNLO::_CSEP20C << " fastNLO Table: CoeffAddBase " << fastNLO::_CSEP20 << endl; + } + printf(" # No. of events (Nevt) %f\n",Nevt); + if ( fWgt.WgtNevt!= 0 || fWgt.WgtSumW2!= 0 ) { + printf(" # Weight of table [=Nevt] (fWgtNevt) %f\n",fWgt.WgtNevt); + printf(" # Number of tables merged together %d\n",fWgt.NumTable); + printf(" # No. of filled events (WgtNumEv) %llu\n",fWgt.WgtNumEv); + printf(" # Sum of weights squared (WgtSumW2) %f\n",fWgt.WgtSumW2); + printf(" # Sum of sigma squared (SigSumW2) %f\n",fWgt.SigSumW2); + printf(" # Sum of sigma (SigSum) %f\n",fWgt.SigSum); + printf(" # Sigma / Nevt (SigSum/WgtNevt) %f\n",fWgt.SigSum/fWgt.WgtNevt); + } + + printf(" # Abs. order in a_s (Npow) %d\n",Npow); + printf(" # No. of hadrons involved (NPDF) %lu\n",NPDFPDG.size()); + fastNLOTools::PrintVector(NPDFPDG,"Type(s) of hadrons (NPDFPDG)","#"); + + printf(" # PDF storage format (NPDFDim) %d\n",NPDFDim); + if ( NPDFDim == 0 ) { + printf(" # --> x-interpolation storage format: Linear\n"); + } else if ( NPDFDim == 1 ) { + printf(" # --> x-interpolation storage format: Half-Matrix\n"); + } else if ( NPDFDim == 2 ) { + printf(" # --> x-interpolation storage format: Full-Matrix\n"); + } else { + error["Print"] << "Unknown interpolation storage structure, aborting! " + << " NPDFDim = " << NPDFDim << endl; + } + + for (int i=0; i<fNObsBins; i++) { + // Print only for first and last observable bin + if (i==0 || i==fNObsBins-1) { + printf(" # Observable bin no. %d\n",i+1); + printf(" # No. of X1 nodes (XNode1[i].size()) %d\n",(int)GetXNodes1(i).size()); + } + } + printf(" # No. of scales involved (NScales) %lu\n",Iscale.size()); + for(int i=0;i<NScaleDim;i++){ + fastNLOTools::PrintVector(ScaleDescript[i],"Scale descriptions (ScaleDescript)","#"); + } + if ( std::abs(iprint) > 0 ) { + cout << fastNLO::_SSEP20C << " Extended information (iprint > 0) " << fastNLO::_SSEP20 << endl; + if ( NScales > 0 ) {fastNLOTools::PrintVector(Iscale,"Iscale (Unused, always 0) (Iscale)","# ");} + printf(" # IRef %d\n",IRef); + printf(" # IScaleDep (Unused, always 0) %d\n",IScaleDep); + printf(" # NFragFunc %lu\n",NFFPDG.size()); + if ( NFFPDG.size() > 0 ) {fastNLOTools::PrintVector(NFFPDG,"Type(s) of hadrons (NFFPDG)","#");} + printf(" # NFFDim %d\n",NFFDim); + printf(" # NScaleDim %d\n",NScaleDim); + printf(" # NSubproc %d\n",NSubproc); + printf(" # IPDFdef1 %d\n",IPDFdef1); + printf(" # IPDFdef2 %d\n",IPDFdef2); + printf(" # IPDFdef3 %d\n",IPDFdef3); + char buffer[1024]; + for (int i=0; i<fNObsBins; i++) { + // Print only for first and last observable bin + if (i==0 || i==fNObsBins-1) { + printf(" # Observable bin no. %d\n",i+1); + snprintf(buffer, sizeof(buffer), "X1 nodes (XNode1[%d][])",i); + fastNLOTools::PrintVector(GetXNodes1(i),buffer,"# "); + if ( NPDFDim == 2 ) { + snprintf(buffer, sizeof(buffer), "X2 nodes (XNode2[%d][])",i); + fastNLOTools::PrintVector(GetXNodes2(i),buffer,"# "); + } + } + } + } + cout << " # No. of subprocess contributions " << fPDFCoeff.size() << endl; + cout << " #ISub " << "Processes" << endl; + for ( unsigned int i = 0; i<fPDFCoeff.size(); i++ ) { + cout << " #"; + int w = cout.width(); + cout.width(4); + cout << i; + cout.width(w); + cout << ": "; + for ( unsigned int j = 0; j<fPDFCoeff[i].size(); j++ ) { + cout << "(" << fPDFCoeff[i][j].first << "," << fPDFCoeff[i][j].second << ")" << ", "; + } + cout << endl; + } + if ( iprint < 0 ) { + cout << fastNLO::_CSEPSC << endl; + } else { + // cout << fastNLO::_DSEPSC << endl; + } +} + + +//________________________________________________________________________________________________________________ // + +// Erase observable bin +void fastNLOCoeffAddBase::EraseBin(unsigned int iObsIdx, int ITabVersionRead) { + debug["EraseBin"]<<"Erasing observable bin in CoeffAddBase with bin index " << iObsIdx << endl; + if ( XNode1.size() == 0 ) { + error["EraseBin"]<<"All additive contribution bins deleted already. Aborted!" << endl; + exit(1); + } + if ( XNode1.size() != 0 ) XNode1.erase(XNode1.begin()+iObsIdx); + if ( NPDFDim==2 && XNode2.size() != 0 ) XNode2.erase(XNode2.begin()+iObsIdx); + for ( unsigned int i = 0 ; i<fWgt.WgtObsSumW2.size() ; i++ ) { + fWgt.WgtObsSumW2[i].erase(fWgt.WgtObsSumW2[i].begin()+iObsIdx); + fWgt.SigObsSumW2[i].erase(fWgt.SigObsSumW2[i].begin()+iObsIdx); + fWgt.SigObsSum[i]. erase(fWgt.SigObsSum [i].begin()+iObsIdx); + fWgt.WgtObsNumEv[i].erase(fWgt.WgtObsNumEv[i].begin()+iObsIdx); + } + if ( ! ( ITabVersionRead < 25000 ) ) { + if ( NCoeffInfoBlocks > 0 ) { + debug["EraseBin"]<<"Found " << NCoeffInfoBlocks << " InfoBlocks with bins to be erased, too." << endl; + for ( int i=0; i < NCoeffInfoBlocks; i++ ) { + if ( (ICoeffInfoBlockFlag1[i] == 0 || ICoeffInfoBlockFlag1[i] == 1) && + (ICoeffInfoBlockFlag2[i] == 0 || ICoeffInfoBlockFlag2[i] == 1) ) { // All possibilities for now. Potential extra info in description. + CoeffInfoBlockContent[i].erase(CoeffInfoBlockContent[i].begin()+iObsIdx); + NCoeffInfoBlockCont[i] = NCoeffInfoBlockCont[i] - 1; + } else { + error["EraseBin"]<<"Erase bin not yet implemented for InfoBlocks other than with flags 1,2 = [0,1],[0,1]:" << + ICoeffInfoBlockFlag1[i] << ", " << ICoeffInfoBlockFlag2[i] << ", aborted!" << endl; + exit(567); + } + } + } + } + fastNLOCoeffBase::EraseBin(iObsIdx); +} + +// Catenate observable bin +void fastNLOCoeffAddBase::CatBin(const fastNLOCoeffAddBase& other, unsigned int iObsIdx, int ITabVersionRead) { + debug["CatBin"]<<"Catenating observable bin to CoeffAddBase with bin index " << iObsIdx << endl; + if ( XNode1.size() == 0 ) { + error["CatBin"]<<"Initial additive table is empty. Aborted!" << endl; + exit(1); + } + if ( XNode1.size() != 0 ) XNode1.push_back(other.XNode1[iObsIdx]); + if ( NPDFDim==2 && XNode2.size() != 0 ) XNode2.push_back(other.XNode2[iObsIdx]); + for ( unsigned int i = 0 ; i<fWgt.WgtObsSumW2.size() ; i++ ) { + fWgt.WgtObsSumW2[i].push_back(other.fWgt.WgtObsSumW2[i][iObsIdx]); + fWgt.SigObsSumW2[i].push_back(other.fWgt.SigObsSumW2[i][iObsIdx]); + fWgt.SigObsSum[i]. push_back(other.fWgt.SigObsSum [i][iObsIdx]); + fWgt.WgtObsNumEv[i].push_back(other.fWgt.WgtObsNumEv[i][iObsIdx]); + } + if ( ! ( ITabVersionRead < 25000 ) ) { + if ( NCoeffInfoBlocks > 0 ) { + debug["CatBin"]<<"Found " << NCoeffInfoBlocks << " InfoBlocks with bins to be catenated, too." << endl; + for ( int i=0; i < NCoeffInfoBlocks; i++ ) { + if ( (ICoeffInfoBlockFlag1[i] == 0 || ICoeffInfoBlockFlag1[i] == 1) && + (ICoeffInfoBlockFlag2[i] == 0 || ICoeffInfoBlockFlag2[i] == 1) ) { // All possibilities for now. Potential extra info in description. + CoeffInfoBlockContent[i].push_back(other.CoeffInfoBlockContent[i][iObsIdx]); + NCoeffInfoBlockCont[i] = NCoeffInfoBlockCont[i] + 1; + } else { + error["CatBin"]<<"Catenate bins not yet implemented for InfoBlocks other than with flags 1,2 = [0,1],[0,1]:" << + ICoeffInfoBlockFlag1[i] << ", " << ICoeffInfoBlockFlag2[i] << ", aborted!" << endl; + exit(678); + } + } + } + } + fastNLOCoeffBase::CatBin(other, iObsIdx); +} + + +//________________________________________________________________________________________________________________ // +void fastNLOCoeffAddBase::ExtendX(int ObsBin, std::vector<fastNLOInterpolBase*>& KernX1, std::vector<fastNLOInterpolBase*>& KernX2) { + unsigned int oldXSize1 = GetNxtot1(ObsBin); + unsigned int oldXSize2 = GetNxtot2(ObsBin); + bool x1Extended = fastNLOTools::ExtendHead(XNode1[ObsBin], KernX1[ObsBin]->fgrid); + if (NPDFDim > 1) { + bool x2Extended = fastNLOTools::ExtendHead(XNode2[ObsBin], KernX2[ObsBin]->fgrid); + if (!x1Extended && !x2Extended) { + return; + } + } else { + if (!x1Extended) { + return; + } + } + ExtendSigmaTildeX(ObsBin, oldXSize1, oldXSize2); +} + + +//________________________________________________________________________________________________________________ // +void fastNLOCoeffAddBase::ExtendSigmaTildeX(int ObsBin, unsigned int OldXSize1, unsigned int OldXSize2) { + error["ExtendSigmaTildeX"] << "Method not implemented for fastNLOCoeffAddBase subclass. Exiting." << endl; + exit(1); +} + + +//________________________________________________________________________________________________________________ // +void fastNLOCoeffAddBase::Fill(fnloEvent& Event, int ObsBin, int X, int scalevar, + const std::vector<std::pair<int, double>>& nmu1, const std::vector<std::pair<int, double>>& nmu2, int SubProcess, double w) { + error["Fill"] << "Method not implemented for fastNLOCoeffAddBase subclass. Exiting." << endl; + exit(1); +} diff --git a/v2.6/toolkit/fastnlotoolkit/fastNLOCoeffAddFix.cc b/v2.6/toolkit/fastnlotoolkit/fastNLOCoeffAddFix.cc new file mode 100644 index 0000000000000000000000000000000000000000..7472f8bd2d8e48a6356e10e22c8bfd9a0d609468 --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/fastNLOCoeffAddFix.cc @@ -0,0 +1,638 @@ +#include <cstdlib> +#include <fastnlotk/fastNLOEvent.h> +#include <iostream> +#include <cmath> +#include <algorithm> + +#include "fastnlotk/fastNLOCoeffAddFix.h" +#include "fastnlotk/fastNLOTools.h" +#include "fastnlotk/speaker.h" + +using namespace std; +using namespace fastNLO; + +//________________________________________________________________________________________________________________ // +fastNLOCoeffAddFix::fastNLOCoeffAddFix(int NObsBin) + : fastNLOCoeffAddBase(NObsBin), Nscalevar(), ScaleFac(), ScaleNode(), SigmaTilde(), + AlphasTwoPi_v20(), PdfLc(), PdfSplLc1(), PdfSplLc2() { + SetClassName("fastNLOCoeffAddFix"); +} + + +//________________________________________________________________________________________________________________ // +fastNLOCoeffAddFix::fastNLOCoeffAddFix(const fastNLOCoeffBase& base) : fastNLOCoeffAddBase(base) { + SetClassName("fastNLOCoeffAddFix"); +} + + + +//________________________________________________________________________________________________________________ // +bool fastNLOCoeffAddFix::CheckCoeffConstants(const fastNLOCoeffBase* c, bool quiet) { + bool ret = fastNLOCoeffAddBase::CheckCoeffConstants(c,quiet); + if ( ret && c->GetNScaleDep() == 0 ) return true; + else if ( c->GetNScaleDep() >= 3 ) { + if ( !quiet) + say::error["fastNLOCoeffAddFix::CheckCoeffConstants"] + <<"This is not a fixed order v2.0 table. NScaleDep must be equal 0 but is NScaleDep=" + <<c->GetNScaleDep()<<endl; + return false; + } + else return false; +} + + +//________________________________________________________________________________________________________________ // +fastNLOCoeffAddFix* fastNLOCoeffAddFix::Clone() const { + //! Use has to take care to delete this object later + return new fastNLOCoeffAddFix(*this); +} + + +//________________________________________________________________________________________________________________ // +void fastNLOCoeffAddFix::Read(istream& table, int ITabVersionRead){ + fastNLOCoeffBase::ReadBase(table, ITabVersionRead); + ReadRest(table, ITabVersionRead); +} + + +//________________________________________________________________________________________________________________ // +void fastNLOCoeffAddFix::ReadRest(istream& table, int ITabVersionRead){ + CheckCoeffConstants(this); + fastNLOCoeffAddBase::ReadCoeffAddBase(table, ITabVersionRead); + ReadCoeffAddFix(table, ITabVersionRead); + fastNLOCoeffBase::ReadCoeffInfoBlocks(table, ITabVersionRead); + EndReadCoeff(table, ITabVersionRead); +} + + +//________________________________________________________________________________________________________________ // +void fastNLOCoeffAddFix::ReadCoeffAddFix(istream& table, int ITabVersionRead){ + debug["ReadCoeffAddFix::ReadCoeffAddFix"]<<"Start reading coefficients for table version "<<ITabVersionRead<<endl; + CheckCoeffConstants(this); + Nscalevar.resize(NScaleDim); + vector<int> Nscalenode(NScaleDim); + for(int i=0;i<NScaleDim;i++){ + table >> Nscalevar[i]; + table >> Nscalenode[i]; + } + // printf(" * fastNLOCoeffAddFix::Read().bins %d, NScalevar[0] %d, Nscalenode[0] %d, NScaleDim %d \n", + // fNObsBins, Nscalevar[0] , Nscalenode[0] , NScaleDim ); + // pre-binary + // ScaleFac.resize(NScaleDim); + // for(int i=0;i<NScaleDim;i++){ + // ScaleFac[i].resize(Nscalevar[i]); + // for(int j=0;j<Nscalevar[i];j++){ + // table >> ScaleFac[i][j]; + // } + // } + + ScaleFac.resize(NScaleDim); + for(int i=0;i<NScaleDim;i++){ + ScaleFac[i].resize(Nscalevar[i]); + } + fastNLOTools::ReadVector( ScaleFac , table , 1 ); + + fastNLOTools::ResizeVector( ScaleNode , fNObsBins, 1 , Nscalevar[0] , Nscalenode[0] ); + int nsn = fastNLOTools::ReadVector( ScaleNode , table ); + debug["fastNLOCoeffAddFix::Read()"]<<"Read "<<nsn<<" lines of ScaleNode."<<endl; + + ResizeSigmaTilde(); + ResizePdfLC(); + ResizePdfSplLC(); + int nst = fastNLOTools::ReadVector( SigmaTilde , table , Nevt); + debug["fastNLOCoeffAddFix::Read()"]<<"Read "<<nsn+nst<<" lines of fastNLO v2 tables."<<endl; + + // prepare members for evaluation + fastNLOTools::ResizeVector(AlphasTwoPi_v20 , fNObsBins, GetTotalScalenodes()); +} + + +//________________________________________________________________________________________________________________ // +void fastNLOCoeffAddFix::ResizeSigmaTilde(){ + //! resize SigmaTilde and ensure that all entries are empty + SigmaTilde.resize(fNObsBins); + for( int i=0 ; i<fNObsBins ; i++ ){ + int nxmax = GetNxmax(i); + SigmaTilde[i].resize(GetTotalScalevars()); + for( int k=0 ; k<GetTotalScalevars() ; k++ ){ + SigmaTilde[i][k].resize(GetTotalScalenodes()); + for( int l=0 ; l<GetTotalScalenodes() ; l++ ){ + //ResizeVector(SigmaTilde[i][k][l],nxmax,NSubproc); + SigmaTilde[i][k][l].resize(nxmax); + for( int m=0 ; m<nxmax ; m++ ){ + SigmaTilde[i][k][l][m].resize(NSubproc); + for( int n=0 ; n<NSubproc ; n++ ){ + SigmaTilde[i][k][l][m][n] = 0.; + } + } + } + } + } +} + + +//________________________________________________________________________________________________________________ // +void fastNLOCoeffAddFix::ResizePdfLC(){ + //! resize PdfLC + PdfLc.resize(fNObsBins); + for( int i=0 ; i<fNObsBins ; i++ ){ + int nxmax = GetNxmax(i); + int totalscalenodes = GetTotalScalenodes(); + PdfLc[i].resize(totalscalenodes); + for( int l=0 ; l<totalscalenodes ; l++ ){ + fastNLOTools::ResizeVector(PdfLc[i][l],nxmax,NSubproc); + } + } +} + +//________________________________________________________________________________________________________________ // +void fastNLOCoeffAddFix::ResizePdfSplLC(){ + //! resize PdfSplLC + PdfSplLc1.resize(fNObsBins); + PdfSplLc2.resize(fNObsBins); + for( int i=0 ; i<fNObsBins ; i++ ){ + int nxmax = GetNxmax(i); + int totalscalenodes = GetTotalScalenodes(); + PdfSplLc1[i].resize(totalscalenodes); + PdfSplLc2[i].resize(totalscalenodes); + for( int l=0 ; l<totalscalenodes ; l++ ){ + fastNLOTools::ResizeVector(PdfSplLc1[i][l],nxmax,NSubproc); + fastNLOTools::ResizeVector(PdfSplLc2[i][l],nxmax,NSubproc); + } + } +} + + + +//________________________________________________________________________________________________________________ // +void fastNLOCoeffAddFix::Write(ostream& table, int itabversion){ + //! Write coefficient table to disk (ostream) + CheckCoeffConstants(this); + fastNLOCoeffAddBase::Write(table,itabversion); + + for(int i=0;i<NScaleDim;i++){ + table << Nscalevar[i] << sep; + table << GetNScaleNode() << sep; + } + fastNLOTools::WriteVector( ScaleFac , table ); + int nsn = fastNLOTools::WriteVector( ScaleNode , table ); + int nst = fastNLOTools::WriteVector( SigmaTilde , table , Nevt); + info["Write"]<<"Wrote "<<nst+nsn<<" lines into fastNLO table."<<endl; + + if ( itabversion >= 25000 ) { + fastNLOCoeffBase::WriteCoeffInfoBlocks(table, itabversion); + } +} + + +//________________________________________________________________________________________________________________ // +void fastNLOCoeffAddFix::Add(const fastNLOCoeffAddBase& other, fastNLO::EMerge moption){ + //! Add another coefficient table to this table + bool ok = CheckCoeffConstants(this); + if ( !ok ) { + error["Add"]<<"Cannot add tables."<<endl; + return; + } + const fastNLOCoeffAddFix& othfix = (const fastNLOCoeffAddFix&)other; + + fastNLO::v5d otherSigmaTilde = othfix.SigmaTilde; + for(int obsBin=0 ; obsBin<fNObsBins ; obsBin++){ + for(int scalevar=0 ; scalevar<GetTotalScalevars() ; scalevar++){ + for(int scalenode=0 ; scalenode<GetTotalScalenodes() ; scalenode++){ + fastNLO::v2d& thisX = SigmaTilde[obsBin][scalevar][scalenode]; + fastNLO::v2d& otherX = otherSigmaTilde[obsBin][scalevar][scalenode]; + int thisNxtot1 = GetNxtot1(obsBin); + int thisNxtot2 = GetNxtot2(obsBin); + int otherNxtot1 = othfix.GetNxtot1(obsBin); + int otherNxtot2 = othfix.GetNxtot2(obsBin); + if (thisNxtot1 < otherNxtot1) { + fastNLOTools::ExtendSigmaTildeX(thisX, thisNxtot1, otherNxtot1, + thisNxtot2, thisNxtot2, NPDFDim, fastNLO::v1d(NSubproc)); + } else if (thisNxtot1 > otherNxtot1) { + fastNLOTools::ExtendSigmaTildeX(otherX, otherNxtot1, thisNxtot1, + otherNxtot2, otherNxtot2, NPDFDim, fastNLO::v1d(NSubproc)); + } + int maxNxtot1 = max(thisNxtot1, otherNxtot1); + if (thisNxtot2 < otherNxtot2) { + fastNLOTools::ExtendSigmaTildeX(thisX, maxNxtot1, maxNxtot1, + thisNxtot2, otherNxtot2, NPDFDim, fastNLO::v1d(NSubproc)); + } else if (thisNxtot2 > otherNxtot2) { + fastNLOTools::ExtendSigmaTildeX(otherX, maxNxtot1, maxNxtot1, + otherNxtot2, thisNxtot2, NPDFDim, fastNLO::v1d(NSubproc)); + } + } + } + } + + if ( moption==fastNLO::kMerge ) { + fastNLOTools::AddVectors(SigmaTilde, otherSigmaTilde); + } else if ( moption==fastNLO::kAttach ) { + for( int i=0 ; i<fNObsBins ; i++ ){ + int nxmax = GetNxmax(i); + for( int k=0 ; k<GetTotalScalevars() ; k++ ){ + for( int l=0 ; l<GetTotalScalenodes() ; l++ ){ + for( int m=0 ; m<nxmax ; m++ ){ + for( int n=0 ; n<other.GetNSubproc() ; n++ ){ // attach all other subprocesses + double s2 = otherSigmaTilde[i][k][l][m][n]; + s2 *= this->Nevt/other.GetNevt(); + this->SigmaTilde[i][k][l][m].push_back(s2); + } + } + } + } + } + } + else { + for( int i=0 ; i<fNObsBins ; i++ ){ + int nxmax = GetNxmax(i); + for( int k=0 ; k<GetTotalScalevars() ; k++ ){ + for( int l=0 ; l<GetTotalScalenodes() ; l++ ){ + for( int m=0 ; m<nxmax ; m++ ){ + for( int n=0 ; n<NSubproc ; n++ ){ + double w1 = this->GetMergeWeight(moption,n,i); + double w2 = other.GetMergeWeight(moption,n,i); + double& s1 = this->SigmaTilde[i][k][l][m][n]; + double s2 = otherSigmaTilde[i][k][l][m][n]; + if ( s1!=0 || s2!=0 ) { + if ( w1==0 || w2==0 ) { + error["fastNLOCoeffAddFix"]<<"Mergeing weight is 0, but sigma tilde is non-zero. Cannot proceed!"<<endl; + exit(3); + } + s1 = ( w1*s1/Nevt + w2*s2/other.GetNevt() ) / (w1 + w2 ) * ( Nevt + other.GetNevt() ) ; + } + } + } + } + } + } + } + //Nevt += othfix.Nevt; + fastNLOCoeffAddBase::Add(other,moption); + if ( moption==fastNLO::kAdd ) { + NormalizeCoefficients(2); + Nevt = 1; + fWgt.WgtNevt = 1; + } + else if ( moption==fastNLO::kUnweighted ) { + NormalizeCoefficients(1); + } + else if ( moption==fastNLO::kAttach ) { + NormalizeCoefficients(1); + } +} + + +//________________________________________________________________________________________________________________ // +int fastNLOCoeffAddFix::GetTotalScalevars() const { + //! Get nuber of scale-variations + int totalscalevars=1; + for(int scaledim=0;scaledim<NScaleDim;scaledim++){ + totalscalevars *= Nscalevar[scaledim]; + } + return totalscalevars; +} + + +//________________________________________________________________________________________________________________ // +int fastNLOCoeffAddFix::GetTotalScalenodes() const { + //! Get number of scale nodes + if ( !ScaleNode.empty() ) return ScaleNode[0][0][0].size(); + else return 0; + // int totalscalenodes=1; + // for(int scaledim=0;scaledim<NScaleDim;scaledim++){ + // if ( !ScaleNode.empty() ) + // totalscalenodes *= ScaleNode[0][0][0].size(); + // //Nscalenode[scaledim]; + // } + // return totalscalenodes; +} + + +//________________________________________________________________________________________________________________ // +bool fastNLOCoeffAddFix::IsCompatible(const fastNLOCoeffAddFix& other) const { + //! Check for compatibility for merging/adding of two contributions + if ( ! ((fastNLOCoeffAddBase*)this)->IsCompatible(other)) return false; + if ( GetNScaleNode() != other.GetNScaleNode() ) { + say::warn["IsCompatible"]<<"Incompatible number of scale nodes found."<<endl; + return false; + } + if ( GetNScalevar() != other.GetNScalevar() ) { + say::warn["IsCompatible"]<<"Incompatible number of scale variations found."<<endl; + return false; + } + if ( GetAvailableScaleFactors()[GetNScalevar()-1] != other.GetAvailableScaleFactors()[GetNScalevar()-1] ) { + say::warn["IsCompatible"]<<"Incompatible scale variations found."<<endl; + return false; + } + for ( int i=0 ; i<fNObsBins ; i++ ){ + for ( int is=0 ; is<GetNScaleNode() ; is++ ){ + if ( GetScaleNode(i,0,is) != other.GetScaleNode(i,0,is) ) { + say::warn["IsCompatible"]<<"Incompatible scale node found."<<endl; + return false; + } + } + } + return true; +} + + +//________________________________________________________________________________________________________________ // +bool fastNLOCoeffAddFix::IsCatenable(const fastNLOCoeffAddFix& other) const { + //! Check for compatibility of catenating observable bins + if ( ! ((fastNLOCoeffAddBase*)this)->IsCatenable(other)) return false; + if ( GetNScaleNode() != other.GetNScaleNode() ) { + debug["IsCatenable"]<<"Incompatible number of scale nodes found. Skipped."<<endl; + return false; + } + if ( GetNScalevar() != other.GetNScalevar() ) { + debug["IsCatenable"]<<"Incompatible number of scale variations found. Skipped."<<endl; + return false; + } + if ( GetAvailableScaleFactors()[GetNScalevar()-1] != other.GetAvailableScaleFactors()[GetNScalevar()-1] ) { + debug["IsCatenable"]<<"Incompatible scale variations found. Skipped."<<endl; + return false; + } + info["IsCatenable"]<<"Fix-scale contributions are catenable"<<endl; + return true; +} + + +//________________________________________________________________________________________________________________ // +bool fastNLOCoeffAddFix::IsEquivalent(const fastNLOCoeffBase& other, double rtol) const { + const fastNLOCoeffAddFix* op = dynamic_cast<const fastNLOCoeffAddFix*>(&other); + if (op == nullptr) { + debug["IsEquivalent"] << "other is not of type fastNLOCoeffAddFix." << endl; + return false; + } + + if (NPDFDim != op->GetNPDFDim()) { + debug["IsEquivalent"] << "NPDFDim is different: " << NPDFDim << " <-> " << op->GetNPDFDim() << endl; + return false; + } + if (!fastNLOTools::SameTails(GetAllXNodes1(), op->GetAllXNodes1(), rtol)) { + debug["IsEquivalent"] << "XNode1 not equivalent, see above." << endl; + return false; + } + if (!fastNLOTools::SameTails(GetAllXNodes2(), op->GetAllXNodes2(), rtol)) { + debug["IsEquivalent"] << "XNode2 not equivalent, see above." << endl; + return false; + } + fastNLO::v5d ost5 = op->SigmaTilde; + if (SigmaTilde.size() != ost5.size()) { + debug["IsEquivalent"] << "Number of observable bins is different." << endl; + return false; + } + for (unsigned int obsBin = 0; obsBin < SigmaTilde.size(); obsBin++) { + unsigned int tOffsetXN1, oOffsetXN1, tOffsetXN2, oOffsetXN2; + int tnb1 = GetNxtot1(obsBin); + int onb1 = op->GetNxtot1(obsBin); + int tnb2 = GetNxtot2(obsBin); + int onb2 = op->GetNxtot2(obsBin); + int x1Max = std::min(tnb1, onb1); + int x2Max = std::min(tnb2, onb2); + if (tnb1 > onb1) { + tOffsetXN1 = tnb1 - onb1; + oOffsetXN1 = 0; + } else { + tOffsetXN1 = 0; + oOffsetXN1 = onb1 - tnb1; + } + if (NPDFDim > 1) { + if (tnb2 > onb2) { + tOffsetXN2 = tnb2 - onb2; + oOffsetXN2 = 0; + } else { + tOffsetXN2 = 0; + oOffsetXN2 = onb2 - tnb2; + } + } else { + tOffsetXN2 = tOffsetXN1; + oOffsetXN2 = oOffsetXN1; + } + + fastNLO::v4d tst4 = SigmaTilde[obsBin]; + fastNLO::v4d ost4 = ost5[obsBin]; + if (tst4.size() != ost4.size()) { + return false; + } + for (unsigned int scaleVar = 0; scaleVar < tst4.size(); scaleVar++) { + fastNLO::v3d tst3 = tst4[scaleVar]; + fastNLO::v3d ost3 = ost4[scaleVar]; + if (tst3.size() != ost3.size()) { + return false; + } + for (unsigned int scaleNode = 0; scaleNode < tst3.size(); scaleNode++) { + fastNLO::v2d tst2 = tst3[scaleNode]; + fastNLO::v2d ost2 = ost3[scaleNode]; + int xIt2Max; + switch (NPDFDim) { + case 0: + xIt2Max = 1; + break; + case 1: + xIt2Max = x1Max; + break; + case 2: + xIt2Max = x2Max; + break; + default: + error["IsEquivalent"] << "Unsupported NPDFDim: " << NPDFDim << endl; + exit(1); + } + for (int xIt2 = 0; xIt2 < xIt2Max; xIt2++) { + int xIt1Max; + switch (NPDFDim) { + case 0: + case 2: + xIt1Max = x1Max; + break; + case 1: + xIt1Max = xIt2 + 1; + break; + default: + error["IsEquivalent"] << "Unsupported NPDFDim: " << NPDFDim << endl; + exit(1); + } + for (int xIt1 = 0; xIt1 < xIt1Max; xIt1++) { + fastNLO::v1d tst1 = tst2[GetXIndex(obsBin, xIt1 + tOffsetXN1, xIt2 + tOffsetXN2)]; + fastNLO::v1d ost1 = ost2[op->GetXIndex(obsBin, xIt1 + oOffsetXN1, xIt2 + oOffsetXN2)]; + if (tst1.size() != ost1.size()) { + return false; + } + for (unsigned int subProcess = 0; subProcess < tst1.size(); subProcess++) { + double rdiff = std::abs((tst1[subProcess] - ost1[subProcess]) / tst1[subProcess]); + if (rdiff > rtol) { + debug["IsEquivalent"] << "SigmaTilde rdiff too high: obsBin=" << obsBin << " scaleVar=" << scaleVar + << " scaleNode=" << scaleNode << " x1=" << (xIt1 - x1Max) << " x2=" << (xIt2 - x2Max) + << " subProcess=" << subProcess << " t=" << tst1[subProcess] << " o=" << ost1[subProcess] + << " rdiff=" << rdiff << endl; + return false; + } + } + } + } + } + } + } + return true; +} + + +//________________________________________________________________________________________________________________ // +void fastNLOCoeffAddFix::Clear() { + //! Set all elelments of SigmaTilde to zero. + fastNLOCoeffAddBase::Clear(); + fastNLOTools::ClearVector(SigmaTilde); +} + + +//________________________________________________________________________________________________________________ // +void fastNLOCoeffAddFix::NormalizeCoefficients(double wgt){ + //!< Set number of events to wgt (default=1) and normalize coefficients accordingly. + //! This means, that the information about the + //! number of events is essentially lost + if ( wgt == Nevt ) return; + MultiplyCoefficientsByConstant(wgt/Nevt); + fastNLOCoeffAddBase::NormalizeCoefficients(wgt); //Nevt = wgt; +} + +//________________________________________________________________________________________________________________ // +void fastNLOCoeffAddFix::NormalizeCoefficients(const std::vector<std::vector<double> >& wgtProcBin){ + //!< Set number of events to wgtProcBin for each subprocess and bin + //!< and normalize coefficients accordingly. + if ( int(wgtProcBin.size()) != GetNSubproc() ) {//NObs + error["NormalizeCoefficients"]<<"Dimension of weights (iObs) incompatible with table (wgtProcBin must have dimension [iProc][iBin])."<<endl; + exit(4); + } + + for ( int iProc = 0 ; iProc<GetNSubproc(); iProc++ ) { + if ( int(wgtProcBin[iProc].size()) != GetNObsBin() ) { + error["NormalizeCoefficients"]<<"Dimension of weights (iProc) incompatible with table (wgtProcBin must have dimension [iProc][iBin])."<<endl; + exit(4); + } + for ( int iObs = 0 ; iObs<GetNObsBin(); iObs++ ) { + MultiplyBinProc(iObs, iProc, wgtProcBin[iProc][iObs]/Nevt); + } + } + fastNLOCoeffAddBase::NormalizeCoefficients(wgtProcBin); + //Nevt = 1; +} + +//________________________________________________________________________________________________________________ // +void fastNLOCoeffAddFix::MultiplyCoefficientsByConstant(double fact) { + for (unsigned int i=0; i<SigmaTilde.size(); i++) { + MultiplyBin(i,fact); + } +} + +//________________________________________________________________________________________________________________ // +void fastNLOCoeffAddFix::MultiplyBin(unsigned int iObsIdx, double fact) { + //! Multiply observable bin + for (int m=0 ; m<GetNSubproc() ; m++) + MultiplyBinProc(iObsIdx,m,fact); +} + +//________________________________________________________________________________________________________________ // +void fastNLOCoeffAddFix::MultiplyBinProc(unsigned int iObsIdx, unsigned int iProc, double fact) { + //! Multiply observable bin for a single subprocess + debug["fastNLOCoeffAddFix::MultiplyBin"]<<"Multiplying table entries in CoeffAddFix for bin index " << iObsIdx << " by factor " << fact << endl; + for (unsigned int s=0 ; s<SigmaTilde[iObsIdx].size() ; s++) { + for (unsigned int x=0 ; x<SigmaTilde[iObsIdx][s].size() ; x++) { + for (unsigned int l=0 ; l<SigmaTilde[iObsIdx][s][x].size() ; l++) { + SigmaTilde[iObsIdx][s][x][l][iProc] *= fact; + } + } + } + fastNLOCoeffAddBase::MultiplyBinProc(iObsIdx, iProc, fact); +} + + +//________________________________________________________________________________________________________________ // +void fastNLOCoeffAddFix::Print(int iprint) const { + if ( !(iprint < 0) ) { + fastNLOCoeffAddBase::Print(iprint); + cout << fastNLO::_DSEP20C << " fastNLO Table: CoeffAddFix " << fastNLO::_DSEP20 << endl; + } else { + cout << endl << fastNLO::_CSEP20C << " fastNLO Table: CoeffAddFix " << fastNLO::_CSEP20 << endl; + } + for (int i=0; i<NScaleDim; i++) { + printf(" # No. of scale variations (Nscalevar) %d\n",GetNScalevar()); + fastNLOTools::PrintVector(GetAvailableScaleFactors(),"Scale factors (ScaleFac[0][])","#"); + printf(" # No. of scale nodes (Nscalenode) %d\n",GetNScaleNode()); + } + if ( std::abs(iprint) > 0 ) { + cout << fastNLO::_SSEP20C << " Extended information (iprint > 0) " << fastNLO::_SSEP20 << endl; + char buffer[1024]; + for (int i=0; i<fNObsBins; i++) { + // Print only for first and last observable bin + if (i==0 || i==fNObsBins-1) { + printf(" # Observable bin no. %d\n",i+1); + snprintf(buffer, sizeof(buffer), "Scale nodes (ScaleNode[%d][0][0][])",i); + fastNLOTools::PrintVector(GetScaleNodes(i,0),buffer,"# "); + } + } + } + if ( std::abs(iprint) > 1 ) { + cout << fastNLO::_SSEP20C << " Extended information (iprint > 1) " << fastNLO::_SSEP20 << endl; + printf(" # Printing of SigmaTilde not yet implemented.\n"); + } + cout << fastNLO::_CSEPSC << endl; +} + + +//________________________________________________________________________________________________________________ // +void fastNLOCoeffAddFix::EraseBin(unsigned int iObsIdx, int ITabVersionRead) { + //! Erase observable bin + debug["fastNLOCoeffAddFix::EraseBin"]<<"Erasing table entries in CoeffAddFix for bin index " << iObsIdx << endl; + if ( ScaleNode.size() == 0 ) { + say::error["EraseBin"]<<"All fix-scale bins deleted already. Aborted!" << endl; + exit(1); + } + if ( ScaleNode.size() != 0 ) ScaleNode.erase(ScaleNode.begin()+iObsIdx); + if ( SigmaTilde.size() != 0 ) SigmaTilde.erase(SigmaTilde.begin()+iObsIdx); + fastNLOCoeffAddBase::EraseBin(iObsIdx,ITabVersionRead); +} + +// Catenate observable bin +void fastNLOCoeffAddFix::CatBin(const fastNLOCoeffAddFix& other, unsigned int iObsIdx, int ITabVersionRead) { + debug["fastNLOCoeffAddFix::CatBin"]<<"Catenating observable bin in CoeffAddFix corresponding to bin index " << iObsIdx << endl; + if ( ScaleNode.size() == 0 ) { + say::error["CatBin"]<<"Initial fix-scale table is empty. Aborted!" << endl; + exit(1); + } + unsigned int nold = ScaleNode.size(); + if ( ScaleNode.size() != 0 ) { + ScaleNode.resize(nold+1); + ScaleNode[nold] = other.ScaleNode[iObsIdx]; + } + if ( SigmaTilde.size() != 0 ) { + SigmaTilde.resize(nold+1); + SigmaTilde[nold] = other.SigmaTilde[iObsIdx]; + } + fastNLOCoeffAddBase::CatBin(other, iObsIdx, ITabVersionRead); +} + + +//________________________________________________________________________________________________________________ // +void fastNLOCoeffAddFix::ExtendSigmaTildeX(int ObsBin, unsigned int OldXSize1, unsigned int OldXSize2) { + int nScalevar = GetNScalevar(); + int nScaleNode = GetNScaleNode(); + int newXSize1 = GetNxtot1(ObsBin); + int newXSize2 = GetNxtot2(ObsBin); + for (int scaleVar = 0; scaleVar < nScalevar; scaleVar++) { + for (int scaleNode = 0; scaleNode < nScaleNode; scaleNode++) { + fastNLOTools::ExtendSigmaTildeX( + SigmaTilde[ObsBin][scaleVar][scaleNode], OldXSize1, newXSize1, OldXSize2, newXSize2, + NPDFDim, fastNLO::v1d(NSubproc)); + } + } +} + + +//________________________________________________________________________________________________________________ // +void fastNLOCoeffAddFix::Fill(fnloEvent& Event, int ObsBin, int X, int scalevar, const vector<pair<int, double>>& nmu1, + const vector<pair<int, double>>& nmu2, int SubProcess, double w) { + for (unsigned int m1 = 0 ; m1<nmu1.size() ; m1++) { + SigmaTilde[ObsBin][scalevar][nmu1[m1].first][X][SubProcess] += Event._w * nmu1[m1].second * w; + } +} diff --git a/v2.6/toolkit/fastnlotoolkit/fastNLOCoeffAddFlex.cc b/v2.6/toolkit/fastnlotoolkit/fastNLOCoeffAddFlex.cc new file mode 100644 index 0000000000000000000000000000000000000000..aba00db22fb8f72f29a8debce677444427108076 --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/fastNLOCoeffAddFlex.cc @@ -0,0 +1,796 @@ +#include <cstdlib> +#include <iostream> +#include <cmath> + +#include "fastnlotk/fastNLOTable.h" +#include "fastnlotk/fastNLOTools.h" +#include "fastnlotk/fastNLOCoeffAddFlex.h" +#include "fastnlotk/fastNLOEvent.h" + +using namespace std; + + +//________________________________________________________________________________________________________________ // +fastNLOCoeffAddFlex::fastNLOCoeffAddFlex(int NObsBin, int iLOord) + : fastNLOCoeffAddBase(NObsBin), fILOord(iLOord), SigmaTildeMuIndep(), SigmaTildeMuFDep(), + SigmaTildeMuRDep(), SigmaTildeMuRRDep(), SigmaTildeMuFFDep(), SigmaTildeMuRFDep(), + SigmaRefMixed(), SigmaRef_s1(), SigmaRef_s2(), ScaleNode1(), ScaleNode2(), AlphasTwoPi(), PdfLcMuVar() { + SetClassName("fastNLOCoeffAddFlex"); +} + + +//________________________________________________________________________________________________________________ // +fastNLOCoeffAddFlex::fastNLOCoeffAddFlex(const fastNLOCoeffBase& base , int iLOord ) : fastNLOCoeffAddBase(base) { + SetClassName("fastNLOCoeffAddFlex"); + fILOord = iLOord; +} + + +//________________________________________________________________________________________________________________ // +bool fastNLOCoeffAddFlex::CheckCoeffConstants(const fastNLOCoeffBase* c, bool quiet ) { + bool ret = fastNLOCoeffAddBase::CheckCoeffConstants(c,quiet); + if ( ret && c->GetNScaleDep() >= 3) return true; + else if ( c->GetNScaleDep() < 3 ) { + if ( !quiet ) + say::error["CheckCoeffConstants"]<<"This is not a flexible scale table. NScaleDep must be >= 3 but is NScaleDep=" + <<c->GetNScaleDep()<<endl; + return false; + } + else return false; +} + + +//________________________________________________________________________________________________________________ // +fastNLOCoeffAddFlex* fastNLOCoeffAddFlex::Clone() const { + //! User has to take care to delete this object later + return new fastNLOCoeffAddFlex(*this); +} + + +///________________________________________________________________________________________________________________ // +void fastNLOCoeffAddFlex::Read(istream& table, int ITabVersionRead){ + debug["ReadCoeffAddFlex::Read"]<<"Start reading coefficient table version "<<ITabVersionRead<<endl; + fastNLOCoeffBase::ReadBase(table, ITabVersionRead); + ReadRest(table, ITabVersionRead); + debug["ReadCoeffAddFlex::Read"]<<"Finished reading coefficient table version "<<ITabVersionRead<<endl; +} + + +//________________________________________________________________________________________________________________ // +void fastNLOCoeffAddFlex::ReadRest(istream& table, int ITabVersionRead){ + debug["ReadCoeffAddFlex::ReadRest"]<<"Start reading rest of coefficient table version "<<ITabVersionRead<<endl; + CheckCoeffConstants(this); + fastNLOCoeffAddBase::ReadCoeffAddBase(table, ITabVersionRead); + ReadCoeffAddFlex(table, ITabVersionRead); + fastNLOCoeffBase::ReadCoeffInfoBlocks(table, ITabVersionRead); + EndReadCoeff(table, ITabVersionRead); + debug["ReadCoeffAddFlex::ReadRest"]<<"Finished reading rest of coefficient table version "<<ITabVersionRead<<endl; +} + + +//________________________________________________________________________________________________________________ // +void fastNLOCoeffAddFlex::ReadCoeffAddFlex(istream& table, int ITabVersionRead){ + debug["ReadCoeffAddFlex::ReadCoeffAddFlex"]<<"Start reading coefficients for table version "<<ITabVersionRead<<endl; + CheckCoeffConstants(this); + + // ---- order of reading... ---- // + // - nscalenode q2 + // - scalenode Q + // - nscalenode pt + // - scalenode pt + // - simgatilde mu indep + // - simgatilde mu_f dep + // - simgatilde mu_r dep + // - sigmarefmixed + // - sigmaref scale 1 + // - sigmaref scale 2 + // ------------------------------ // + int nn3 = 0; + + if ( fWgt.WgtSumW2==0 ) fSTildeDISFormat=0; + + nn3 += fastNLOTools::ReadFlexibleVector ( ScaleNode1 , table ); + nn3 += fastNLOTools::ReadFlexibleVector ( ScaleNode2 , table ); + //NscalenodeScale1 = ScaleNode1[0].size(); + //NscalenodeScale2 = ScaleNode2[0].size(); + + nn3 += fastNLOTools::ReadFlexibleVector ( SigmaTildeMuIndep , table , NSubproc , Nevt ); + //if ( NScaleDep==3 || fScen->ILOord!=Npow || NScaleDep==5 ){ + if ( NScaleDep==3 || NScaleDep>=5 ){ + nn3 += fastNLOTools::ReadFlexibleVector ( SigmaTildeMuFDep , table , NSubproc , Nevt ); + nn3 += fastNLOTools::ReadFlexibleVector ( SigmaTildeMuRDep , table , NSubproc , Nevt ); + if ( NScaleDep>=6 ){ + nn3 += fastNLOTools::ReadFlexibleVector ( SigmaTildeMuRRDep , table , NSubproc , Nevt ); + } + if ( NScaleDep>=7 ){ + nn3 += fastNLOTools::ReadFlexibleVector ( SigmaTildeMuFFDep , table , NSubproc , Nevt ); + nn3 += fastNLOTools::ReadFlexibleVector ( SigmaTildeMuRFDep , table , NSubproc , Nevt ); + } + } + // fixing old convention + if ( NScaleDep == 3 ) { + info["ReadCoeffAddFlex"]<<"This is a table with a deprecated convention (NScaleDep=3). Fixing it."<<endl; + if (Npow!=fILOord) NScaleDep = 5; + else NScaleDep = 3; + } + nn3 += fastNLOTools::ReadFlexibleVector ( SigmaRefMixed , table , NSubproc , Nevt ); + nn3 += fastNLOTools::ReadFlexibleVector ( SigmaRef_s1 , table , NSubproc , Nevt ); + nn3 += fastNLOTools::ReadFlexibleVector ( SigmaRef_s2 , table , NSubproc , Nevt ); + debug["ReadCoeffAddFlex"]<<"Read "<<nn3<<" lines of flexible-scale coefficients."<<endl; + + // init table for evaluation + fastNLOTools::ResizeFlexibleVector( PdfLcMuVar , SigmaTildeMuIndep ); + AlphasTwoPi.resize(ScaleNode1.size()); + for (unsigned int i=0; i<AlphasTwoPi.size() ; i++) { + AlphasTwoPi[i].resize(ScaleNode1[i].size()); + for (unsigned int j=0; j<AlphasTwoPi[i].size() ; j++) { + AlphasTwoPi[i][j].resize(ScaleNode2[i].size()); + } + } + debug["ReadCoeffAddFlex::ReadCoeffAddFlex"]<<"Finished reading coefficients for table version "<<ITabVersionRead<<endl; +} + + +//________________________________________________________________________________________________________________ // +void fastNLOCoeffAddFlex::Write(ostream& table, int itabversion) { + CheckCoeffConstants(this); + // update to latest version + if ( NScaleDep==3 ) { + if ( Npow==fILOord) { + debug["Write"]<<" * Increase NScaleDep from 3 to 4, because LO!"<<endl; + NScaleDep=4; + } + else if ( Npow==fILOord+1 ) { + NScaleDep=5; + if ( !fastNLOTools::IsEmptyVector(SigmaTildeMuRRDep) ) { + NScaleDep=6; + debug["Write"]<<" * Increase NScaleDep from 3 to 6 because NLO and log^2(mur) terms!"<<endl; + } + else + debug["Write"]<<" * Increase NScaleDep from 3 to 5 because NLO!"<<endl; + + } + else if ( Npow==fILOord+2 ) { + debug["Write"]<<" * Increase NScaleDep from 3 to 6 because NNLO!"<<endl; + NScaleDep=7; + } + } + fastNLOCoeffAddBase::Write(table,itabversion); + + int nn3 = 0; + nn3 += fastNLOTools::WriteFlexibleVector( ScaleNode1 , table ); + nn3 += fastNLOTools::WriteFlexibleVector( ScaleNode2 , table ); + + nn3 += fastNLOTools::WriteFlexibleVector( SigmaTildeMuIndep, table , NSubproc , Nevt); + if ( NScaleDep==3 || NScaleDep>=5) { + //cout<<"Write NLO FlexTable. NScaleDep="<<NScaleDep<<"\tNpow="<<Npow<<"\tfScen->ILOord="<<fScen->ILOord<<endl; + nn3 += fastNLOTools::WriteFlexibleVector( SigmaTildeMuFDep , table , NSubproc, Nevt); + nn3 += fastNLOTools::WriteFlexibleVector( SigmaTildeMuRDep , table , NSubproc, Nevt); + if ( NScaleDep>=6) { + nn3 += fastNLOTools::WriteFlexibleVector( SigmaTildeMuRRDep , table , NSubproc, Nevt); + } + if ( NScaleDep>=7) { + nn3 += fastNLOTools::WriteFlexibleVector( SigmaTildeMuFFDep , table , NSubproc, Nevt); + nn3 += fastNLOTools::WriteFlexibleVector( SigmaTildeMuRFDep , table , NSubproc, Nevt); + } + } + + if ( SigmaRefMixed.empty() ) fastNLOTools::ResizeVector(SigmaRefMixed,fNObsBins,NSubproc); + if ( SigmaRef_s1.empty() ) fastNLOTools::ResizeVector(SigmaRef_s1,fNObsBins,NSubproc); + if ( SigmaRef_s2.empty() ) fastNLOTools::ResizeVector(SigmaRef_s2,fNObsBins,NSubproc); + nn3 += fastNLOTools::WriteFlexibleVector( SigmaRefMixed , table , NSubproc, Nevt); + nn3 += fastNLOTools::WriteFlexibleVector( SigmaRef_s1 , table , NSubproc, Nevt); + nn3 += fastNLOTools::WriteFlexibleVector( SigmaRef_s2 , table , NSubproc, Nevt); + /* + nn3 += WriteFlexibleTable( &SigmaTildeMuIndep, table , (bool)(option & DividebyNevt) , Nevt , true ); + + //if ( NScaleDep==3 || Npow!=fScen->ILOord || NScaleDep==5) { + if ( NScaleDep==3 || NScaleDep>=5) { + //cout<<"Write NLO FlexTable. NScaleDep="<<NScaleDep<<"\tNpow="<<Npow<<"\tfScen->ILOord="<<fScen->ILOord<<endl; + nn3 += WriteFlexibleTable( &SigmaTildeMuFDep , table , (bool)(option & DividebyNevt) , Nevt , true ); + nn3 += WriteFlexibleTable( &SigmaTildeMuRDep , table , (bool)(option & DividebyNevt) , Nevt , true ); + if ( NScaleDep>=6) { + nn3 += WriteFlexibleTable( &SigmaTildeMuRRDep , table , (bool)(option & DividebyNevt) , Nevt , true ); + nn3 += WriteFlexibleTable( &SigmaTildeMuFFDep , table , (bool)(option & DividebyNevt) , Nevt , true ); + nn3 += WriteFlexibleTable( &SigmaTildeMuRFDep , table , (bool)(option & DividebyNevt) , Nevt , true ); + } + } + if ( SigmaRefMixed.empty() ) fastNLOCoeffBase::ResizeTable(&SigmaRefMixed,fNObsBins,NSubproc); + if ( SigmaRef_s1.empty() ) fastNLOCoeffBase::ResizeTable(&SigmaRef_s1,fNObsBins,NSubproc); + if ( SigmaRef_s2.empty() ) fastNLOCoeffBase::ResizeTable(&SigmaRef_s2,fNObsBins,NSubproc); + nn3 += WriteFlexibleTable( &SigmaRefMixed , table , (bool)(option & DividebyNevt) , Nevt , true ); + nn3 += WriteFlexibleTable( &SigmaRef_s1 , table , (bool)(option & DividebyNevt) , Nevt , true ); + nn3 += WriteFlexibleTable( &SigmaRef_s2 , table , (bool)(option & DividebyNevt) , Nevt , true ); + */ + //printf(" * fastNLOCoeffAddFlex::Write(). Wrote %d lines of v2.1 Tables.\n",nn3); + debug["Write"]<<"Wrote "<<nn3<<" lines of v2.1 Tables."<<endl; + + if ( itabversion >= 25000 ) { + fastNLOCoeffBase::WriteCoeffInfoBlocks(table, itabversion); + } +} + + +//________________________________________________________________________________________________________________ // +void fastNLOCoeffAddFlex::Add(const fastNLOCoeffAddBase& other, fastNLO::EMerge moption){ + bool ok = CheckCoeffConstants(this); + if ( !ok ) { + error["Add"]<<"Incompatible table."<<endl; + } + fastNLOCoeffAddFlex& othflex = (fastNLOCoeffAddFlex&) other; + if ( moption==fastNLO::kMerge ) { + ExtendSigmaTilde(othflex, SigmaTildeMuIndep, othflex.SigmaTildeMuIndep); + fastNLOTools::AddVectors(SigmaTildeMuIndep, othflex.SigmaTildeMuIndep); + if ( NScaleDep==3 || NScaleDep>=5 ) { + ExtendSigmaTilde(othflex, SigmaTildeMuFDep, othflex.SigmaTildeMuFDep); + fastNLOTools::AddVectors(SigmaTildeMuFDep, othflex.SigmaTildeMuFDep); + ExtendSigmaTilde(othflex, SigmaTildeMuRDep, othflex.SigmaTildeMuRDep); + fastNLOTools::AddVectors(SigmaTildeMuRDep, othflex.SigmaTildeMuRDep); + if (( NScaleDep>=6 || !SigmaTildeMuRRDep.empty()) // both tables contain log^2 contributions (default case) + && (othflex.NScaleDep>=6 || !othflex.SigmaTildeMuRRDep.empty()) ) { + ExtendSigmaTilde(othflex, SigmaTildeMuRRDep, othflex.SigmaTildeMuRRDep); + fastNLOTools::AddVectors(SigmaTildeMuRRDep, othflex.SigmaTildeMuRRDep); + } + else if ( NScaleDep==6 && othflex.NScaleDep==5 ) { // this tables contains log^2 contributions, but the other does not + // nothing todo. + } + else if ( NScaleDep==5 && othflex.NScaleDep==6 ) { // this tables does not contain log^2 contributions, but the other does ! + SigmaTildeMuRRDep = othflex.SigmaTildeMuRRDep; + NScaleDep = 6; + } + if ( NScaleDep>=7 || !SigmaTildeMuFFDep.empty()) { + ExtendSigmaTilde(othflex, SigmaTildeMuFFDep, othflex.SigmaTildeMuFFDep); + fastNLOTools::AddVectors(SigmaTildeMuFFDep, othflex.SigmaTildeMuFFDep); + ExtendSigmaTilde(othflex, SigmaTildeMuRFDep, othflex.SigmaTildeMuRFDep); + fastNLOTools::AddVectors(SigmaTildeMuRFDep, othflex.SigmaTildeMuRFDep); + } + } + fastNLOTools::AddVectors( SigmaRefMixed , othflex.SigmaRefMixed ); + fastNLOTools::AddVectors( SigmaRef_s1 , othflex.SigmaRef_s1 ); + fastNLOTools::AddVectors( SigmaRef_s2 , othflex.SigmaRef_s2 ); + } + else if ( moption==fastNLO::kAttach ) { + vector<fastNLO::v5d*> st1 = this->AccessSigmaTildes(); + vector<fastNLO::v5d*> st2 = othflex.AccessSigmaTildes(); + int cMax = st1.size(); + for ( int ii = cMax-1 ; ii>= 0 ; ii-- ) { + if ( st1[ii]->size()==0 ) cMax--; + if ( st1[ii]->size() != st2[ii]->size() ) { + error["Add"]<<"Scale dependent weights are not identically initialized"<<endl; + exit(1); + } + } + for ( int im = 0 ; im<cMax ; im++ ) { // mu-indep, mur, muf, ... + ExtendSigmaTilde(othflex, *st1[im], *st2[im]); + } + for ( int iObs = 0 ; iObs<GetNObsBin(); iObs++ ) { + for (unsigned int jS1=0; jS1<GetNScaleNode1(iObs); jS1++) { + for (unsigned int kS2=0; kS2<GetNScaleNode2(iObs); kS2++) { + int nxmax = GetNxmax(iObs); + for (int x=0; x<nxmax; x++) { + for (int n=0; n<other.GetNSubproc(); n++) { + for ( int im = 0 ; im<cMax ; im++ ) { // mu-indep, mur, muf, ... + double s2 = (*st2[im])[iObs][x][jS1][kS2][n]; + s2 *= this->Nevt/other.GetNevt(); + (*st1[im])[iObs][x][jS1][kS2].push_back(s2); + } + } + } + } + } + for (int n=0; n<other.GetNSubproc(); n++) { + SigmaRefMixed[iObs].push_back(othflex.SigmaRefMixed[iObs][n]); + SigmaRef_s1[iObs].push_back(othflex.SigmaRef_s1[iObs][n]); + SigmaRef_s2[iObs].push_back(othflex.SigmaRef_s2[iObs][n]); + } + } + } + else { + vector<fastNLO::v5d*> st1 = this->AccessSigmaTildes(); + vector<fastNLO::v5d*> st2 = othflex.AccessSigmaTildes(); + int cMax = st1.size(); + for ( int ii = cMax-1 ; ii>= 0 ; ii-- ) { + if ( st1[ii]->size()==0 && st2[ii]->size()==0) cMax--; + if ( st1[ii]->size() != st2[ii]->size() ) { + warn["Add"]<<"Scale dependent weights are not identically initialized... (NScaleDep="<<NScaleDep<<", other.NScaleDep="<<other.GetNScaleDep()<<")"<<endl; + //exit(1); + if ( st1[ii]->size() == 0 ) { + /* + // error["Add"]<<"...and calling table has less entries. Please try to call with opposite order of input arguments."<<endl; + // exit(1); + if ( ii==0 ) { error["Add"]<<"... no scale-independent contributions detected! exiting."<<endl; exit(3); } + else { + (*st1[ii]) = *st2[ii]; // hard copy of coefficients + cMax--; // no need for second copy + } + info["add"]<<"Copied coefficients from other table."<<endl; + */ + + // May need to extend other sigma tilde prior to copying dimensions. + // Cannot call ExtendSigmaTilde because st1[ii]->size() == 0 . + for(int obsBin=0 ; obsBin<fNObsBins ; obsBin++){ + fastNLO::v3d insertValue = fastNLO::v3d( + GetNScaleNode1(obsBin), fastNLO::v2d(GetNScaleNode2(obsBin), fastNLO::v1d(GetNSubproc()))); + int thisNxtot1 = GetNxtot1(obsBin); + int thisNxtot2 = GetNxtot2(obsBin); + int otherNxtot1 = othflex.GetNxtot1(obsBin); + int otherNxtot2 = othflex.GetNxtot2(obsBin); + if (thisNxtot1 > otherNxtot1) { + fastNLOTools::ExtendSigmaTildeX((*st2[ii])[obsBin], otherNxtot1, thisNxtot1, + otherNxtot2, otherNxtot2, NPDFDim, insertValue); + } + int maxNxtot1 = max(thisNxtot1, otherNxtot1); + if (thisNxtot2 > otherNxtot2) { + fastNLOTools::ExtendSigmaTildeX((*st2[ii])[obsBin], maxNxtot1, maxNxtot1, + otherNxtot2, thisNxtot2, NPDFDim, insertValue); + } + } + fastNLOTools::ResizeFlexibleVector(*st1[ii],*st2[ii]); + } + else if ( st2[ii]->size() == 0 ) { + warn["Add"]<<"... 'other' table has empty coefficients (ii="<<ii<<"). Ignoring it (NScaleDep="<<NScaleDep<<", other.NScaleDep="<<other.GetNScaleDep()<<")"<<endl; + cMax--; + } + else { + error["Add"]<<"... don't know how to merge these two tables (Different number of bins detected)."<<endl; + exit(2); + } + } + } + for ( int im = 0 ; im<cMax ; im++ ) { // mu-indep, mur, muf, ... + ExtendSigmaTilde(othflex, *st1[im], *st2[im]); + } + for ( int iObs = 0 ; iObs<GetNObsBin(); iObs++ ) { + for (unsigned int jS1=0; jS1<GetNScaleNode1(iObs); jS1++) { + for (unsigned int kS2=0; kS2<GetNScaleNode2(iObs); kS2++) { + int nxmax = GetNxmax(iObs); + for (int x=0; x<nxmax; x++) { + for (int n=0; n<GetNSubproc(); n++) { + for ( int im = 0 ; im<cMax ; im++ ) { // mu-indep, mur, muf, ... + double w1 = this->GetMergeWeight(moption,n,iObs); + double w2 = other.GetMergeWeight(moption,n,iObs); + double& s1 = (*st1[im])[iObs][x][jS1][kS2][n]; + double s2 = st2[im]->size() ? (*st2[im])[iObs][x][jS1][kS2][n] : 0; + if ( s1!=0 || s2!=0 ) { + if ( w1==0 || w2==0 ) { + error["fastNLOCoeffAddFix"]<<"Mergeing weight is 0, but sigma tilde is non-zero. Cannot proceed!"<<endl; + exit(3); + } + s1 = ( w1*s1/Nevt + w2*s2/other.GetNevt() ) / (w1 + w2 ) * ( Nevt + other.GetNevt() ) ; + } + } + } + } + } + } + } + fastNLOTools::AddVectors( SigmaRefMixed , othflex.SigmaRefMixed ); + fastNLOTools::AddVectors( SigmaRef_s1 , othflex.SigmaRef_s1 ); + fastNLOTools::AddVectors( SigmaRef_s2 , othflex.SigmaRef_s2 ); + } + + fastNLOCoeffAddBase::Add(other,moption); + + //Nevt += othflex.Nevt; + if ( moption==fastNLO::kAdd ) { + NormalizeCoefficients(2); + Nevt = 1; + fWgt.WgtNevt = 1; + } + else if ( moption==fastNLO::kUnweighted ) { + NormalizeCoefficients(1); + } + else if ( moption==fastNLO::kAttach ) { + NormalizeCoefficients(1); + } +} + + +//________________________________________________________________________________________________________________ // +void fastNLOCoeffAddFlex::ExtendSigmaTilde( + const fastNLOCoeffAddFlex& othflex, fastNLO::v5d& ThisSigmaTilde, fastNLO::v5d& OtherSigmaTilde) { + for(int obsBin=0 ; obsBin<fNObsBins ; obsBin++){ + fastNLO::v3d insertValue = fastNLO::v3d( + GetNScaleNode1(obsBin), fastNLO::v2d(GetNScaleNode2(obsBin), fastNLO::v1d(GetNSubproc()))); + fastNLO::v4d& thisX = ThisSigmaTilde[obsBin]; + fastNLO::v4d& otherX = OtherSigmaTilde[obsBin]; + int thisNxtot1 = GetNxtot1(obsBin); + int thisNxtot2 = GetNxtot2(obsBin); + int otherNxtot1 = othflex.GetNxtot1(obsBin); + int otherNxtot2 = othflex.GetNxtot2(obsBin); + if (thisNxtot1 < otherNxtot1) { + fastNLOTools::ExtendSigmaTildeX(thisX, thisNxtot1, otherNxtot1, + thisNxtot2, thisNxtot2, NPDFDim, insertValue); + } else if (thisNxtot1 > otherNxtot1) { + fastNLOTools::ExtendSigmaTildeX(otherX, otherNxtot1, thisNxtot1, + otherNxtot2, otherNxtot2, NPDFDim, insertValue); + } + int maxNxtot1 = max(thisNxtot1, otherNxtot1); + if (thisNxtot2 < otherNxtot2) { + fastNLOTools::ExtendSigmaTildeX(thisX, maxNxtot1, maxNxtot1, + thisNxtot2, otherNxtot2, NPDFDim, insertValue); + } else if (thisNxtot2 > otherNxtot2) { + fastNLOTools::ExtendSigmaTildeX(otherX, maxNxtot1, maxNxtot1, + otherNxtot2, thisNxtot2, NPDFDim, insertValue); + } + } +} + + +//________________________________________________________________________________________________________________ // +void fastNLOCoeffAddFlex::Clear() { + //! Set all elements of sigma tilde to zero + fastNLOCoeffAddBase::Clear(); + fastNLOTools::ClearVector(SigmaTildeMuIndep); + fastNLOTools::ClearVector(SigmaTildeMuFDep); + fastNLOTools::ClearVector(SigmaTildeMuRDep); + fastNLOTools::ClearVector(SigmaTildeMuRRDep); + fastNLOTools::ClearVector(SigmaTildeMuFFDep); + fastNLOTools::ClearVector(SigmaTildeMuRFDep); + fastNLOTools::ClearVector(SigmaRefMixed); + fastNLOTools::ClearVector(SigmaRef_s1); + fastNLOTools::ClearVector(SigmaRef_s2); +} + + +//________________________________________________________________________________________________________________ // +bool fastNLOCoeffAddFlex::IsCompatible(const fastNLOCoeffAddFlex& other) const { + //! Check for compatibility for merging/adding of two contributions + if ( ! ((fastNLOCoeffAddBase*)this)->IsCompatible(other)) return false; + for ( int i=0 ; i<fNObsBins ; i++ ){ + if ( GetNScaleNode1(i) != other.GetNScaleNode1(i) ) { + say::warn["fastNLOCoeffAddFlex::IsCompatible"]<<"Incompatible number of scale nodes found."<<endl; + return false; + } + if ( GetNScaleNode2(i) != other.GetNScaleNode2(i) ) { + say::warn["fastNLOCoeffAddFlex::IsCompatible"]<<"Incompatible number of scale nodes found."<<endl; + return false; + } + for ( unsigned int is1 = 0 ; is1<GetNScaleNode1(i) ; is1++ ) { + if ( GetScaleNode1(i,is1) != other.GetScaleNode1(i,is1) ) { + say::warn["fastNLOCoeffAddFlex::IsCompatible"]<<"Incompatible scale1 node found."<<endl; + return false; + } + } + for ( unsigned int is2 = 0 ; is2<GetNScaleNode2(i) ; is2++ ) { + if ( GetScaleNode2(i,is2) != other.GetScaleNode2(i,is2) ) { + say::warn["fastNLOCoeffAddFlex::IsCompatible"]<<"Incompatible scale2 node found."<<endl; + return false; + } + } + } + return true; +} + + +//________________________________________________________________________________________________________________ // +bool fastNLOCoeffAddFlex::IsCatenable(const fastNLOCoeffAddFlex& other) const { + //! Check for compatibility of catenating observable bins + if ( ! ((fastNLOCoeffAddBase*)this)->IsCatenable(other)) return false; + // TODO: More checks + info["IsCatenable"]<<"Flex-scale contributions are catenable"<<endl; + return true; +} + + +//________________________________________________________________________________________________________________ // +void fastNLOCoeffAddFlex::NormalizeCoefficients(double wgt){ + //!< Set number of events to wgt (default=1) and normalize coefficients accordingly. + if ( wgt==Nevt ) return; + MultiplyCoefficientsByConstant(wgt/Nevt); + fastNLOCoeffAddBase::NormalizeCoefficients(wgt); // Nevt=wgt +} + +//________________________________________________________________________________________________________________ // +void fastNLOCoeffAddFlex::NormalizeCoefficients(const std::vector<std::vector<double> >& wgtProcBin){ + //!< Change cross sections!!! + //!< Warning! This function is only sensible if called by 'MergeTable'! + if ( int(wgtProcBin.size()) != GetNSubproc() ) {//NObs + error["NormalizeCoefficients"]<<"Dimension of weights (iObs) incompatible with table (wgtProcBin must have dimension [iProc][iBin])."<<endl; exit(4); + } + + for ( int iProc = 0 ; iProc<GetNSubproc(); iProc++ ) { + if ( int(wgtProcBin[iProc].size()) != GetNObsBin() ) {// + error["NormalizeCoefficients"]<<"Dimension of weights (iProc) incompatible with table (wgtProcBin must have dimension [iProc][iBin])."<<endl; exit(4); + } + for ( int iObs = 0 ; iObs<GetNObsBin(); iObs++ ) { + MultiplyBinProc(iObs, iProc, wgtProcBin[iProc][iObs]/Nevt); + } + } + //fastNLOCoeffAddBase::NormalizeCoefficients(wgtProcBin); + //Nevt = 1; + // MultiplyCoefficientsByConstant(wgt/Nevt); + // Nevt = 0; +} + + +//________________________________________________________________________________________________________________ // +void fastNLOCoeffAddFlex::MultiplyCoefficientsByConstant(double fact) { + for (unsigned int i=0; i<SigmaTildeMuIndep.size(); i++) { // NObsBin + MultiplyBin(i,fact); + } +} + + +//________________________________________________________________________________________________________________ // +void fastNLOCoeffAddFlex::MultiplyBin(unsigned int iObsIdx, double fact) { + //! Multiply observable bin + for (int n=0; n<GetNSubproc(); n++) { + MultiplyBinProc(iObsIdx,n,fact); + } +} + +//________________________________________________________________________________________________________________ // +void fastNLOCoeffAddFlex::MultiplyBinProc(unsigned int iObsIdx, unsigned int iProc, double fact) { + //! Multiply observable bin + debug["fastNLOCoeffAddFlex::MultiplyBinProc"]<<"Multiplying table entries in CoeffAddFlex for bin index " + << iObsIdx << " and proc index "<<iProc<<" by factor " << fact << endl; + int nxmax = GetNxmax(iObsIdx); + for (unsigned int jS1=0; jS1<GetNScaleNode1(iObsIdx); jS1++) { + for (unsigned int kS2=0; kS2<GetNScaleNode2(iObsIdx); kS2++) { + for (int x=0; x<nxmax; x++) { + int n=iProc; + if ( fact==0 && SigmaTildeMuIndep[iObsIdx][x][jS1][kS2][n]!=0 ) { + // prevent to calculate unreasonable cross sections. + error["MultiplyBinProc"]<<"Multiplying non-zero coefficient with weight 0. "<<endl; + exit(4); + } + else { + if ( SigmaTildeMuIndep.size() != 0 ) SigmaTildeMuIndep[iObsIdx][x][jS1][kS2][n] *= fact; + if ( SigmaTildeMuRDep.size() != 0 ) SigmaTildeMuRDep[iObsIdx][x][jS1][kS2][n] *= fact; + if ( SigmaTildeMuFDep.size() != 0 ) SigmaTildeMuFDep[iObsIdx][x][jS1][kS2][n] *= fact; + if ( SigmaTildeMuRRDep.size() != 0 ) SigmaTildeMuRRDep[iObsIdx][x][jS1][kS2][n] *= fact; + if ( SigmaTildeMuFFDep.size() != 0 ) SigmaTildeMuFFDep[iObsIdx][x][jS1][kS2][n] *= fact; + if ( SigmaTildeMuRFDep.size() != 0 ) SigmaTildeMuRFDep[iObsIdx][x][jS1][kS2][n] *= fact; + } + } + } + } + fastNLOCoeffAddBase::MultiplyBinProc(iObsIdx, iProc, fact); +} + +//________________________________________________________________________________________________________________ // +void fastNLOCoeffAddFlex::Print(int iprint) const { + if ( !(iprint < 0) ) { + fastNLOCoeffAddBase::Print(iprint); + cout << fastNLO::_DSEP20C << " fastNLO Table: CoeffAddFlex " << fastNLO::_DSEP20 << endl; + } else { + cout << endl << fastNLO::_CSEP20C << " fastNLO Table: CoeffAddFlex " << fastNLO::_CSEP20 << endl; + } + printf(" # No. of scale1 nodes (Nscalenode1) %d\n",(int)ScaleNode1[0].size()); + printf(" # No. of scale2 nodes (Nscalenode2) %d\n",(int)ScaleNode2[0].size()); + if ( std::abs(iprint) > 0 ) { + cout << fastNLO::_SSEP20C << " Extended information (iprint > 0) " << fastNLO::_SSEP20 << endl; + char buffer[1024]; + for (int i=0; i<fNObsBins; i++) { + // Print only for first and last observable bin + if (i==0 || i==fNObsBins-1) { + printf(" # Observable bin no. %d\n",i+1); + snprintf(buffer, sizeof(buffer), "Scale nodes 1 (ScaleNode1[%d][])",i); + fastNLOTools::PrintVector(GetScaleNodes1(i),buffer,"# "); + if ( ScaleNode2.size() != 0 ) { + snprintf(buffer, sizeof(buffer), "Scale nodes 2 (ScaleNode2[%d][])",i); + fastNLOTools::PrintVector(GetScaleNodes2(i),buffer,"# "); + } + } + } + } + cout << fastNLO::_CSEPSC << endl; +} + + +//________________________________________________________________________________________________________________ // + +// Erase observable bin +void fastNLOCoeffAddFlex::EraseBin(unsigned int iObsIdx, int ITabVersionRead) { + debug["fastNLOCoeffAddFlex::EraseBin"]<<"Erasing table entries in CoeffAddFlex for bin index " << iObsIdx << endl; + if ( ScaleNode1.size() == 0 ) { + say::error["EraseBin"]<<"All bins deleted already. Aborted!" << endl; + exit(1); + } + if ( ScaleNode1.size() != 0 ) ScaleNode1.erase(ScaleNode1.begin()+iObsIdx); + if ( ScaleNode2.size() != 0 ) ScaleNode2.erase(ScaleNode2.begin()+iObsIdx); + if ( SigmaTildeMuIndep.size() != 0 ) SigmaTildeMuIndep.erase(SigmaTildeMuIndep.begin()+iObsIdx); + if ( SigmaTildeMuFDep.size() != 0 ) SigmaTildeMuFDep.erase(SigmaTildeMuFDep.begin()+iObsIdx); + if ( SigmaTildeMuRDep.size() != 0 ) SigmaTildeMuRDep.erase(SigmaTildeMuRDep.begin()+iObsIdx); + if ( SigmaTildeMuRRDep.size() != 0 ) SigmaTildeMuRRDep.erase(SigmaTildeMuRRDep.begin()+iObsIdx); + if ( SigmaTildeMuFFDep.size() != 0 ) SigmaTildeMuFFDep.erase(SigmaTildeMuFFDep.begin()+iObsIdx); + if ( SigmaTildeMuRFDep.size() != 0 ) SigmaTildeMuRFDep.erase(SigmaTildeMuRFDep.begin()+iObsIdx); + fastNLOCoeffAddBase::EraseBin(iObsIdx,ITabVersionRead); +} + +// Catenate observable bin +void fastNLOCoeffAddFlex::CatBin(const fastNLOCoeffAddFlex& other, unsigned int iObsIdx, int ITabVersionRead) { + debug["fastNLOCoeffAddFlex::CatBin"]<<"Catenating observable bin in CoeffAddFlex corresponding to bin index " << iObsIdx << endl; + if ( ScaleNode1.size() == 0 ) { + say::error["CatBin"]<<"Initial flex-scale table is empty. Aborted!" << endl; + exit(1); + } + unsigned int nold = ScaleNode1.size(); + if ( ScaleNode1.size() != 0 ) { + ScaleNode1.resize(nold+1); + ScaleNode1[nold] = other.ScaleNode1[iObsIdx]; + } + if ( ScaleNode2.size() != 0 ) { + ScaleNode2.resize(nold+1); + ScaleNode2[nold] = other.ScaleNode2[iObsIdx]; + } + if ( SigmaTildeMuIndep.size() != 0 ) { + SigmaTildeMuIndep.resize(nold+1); + SigmaTildeMuIndep[nold] = other.SigmaTildeMuIndep[iObsIdx]; + } + if ( SigmaTildeMuFDep.size() != 0 ) { + SigmaTildeMuFDep.resize(nold+1); + SigmaTildeMuFDep[nold] = other.SigmaTildeMuFDep[iObsIdx]; + } + if ( SigmaTildeMuRDep.size() != 0 ) { + SigmaTildeMuRDep.resize(nold+1); + SigmaTildeMuRDep[nold] = other.SigmaTildeMuRDep[iObsIdx]; + } + if ( SigmaTildeMuRRDep.size() != 0 ) { + SigmaTildeMuRRDep.resize(nold+1); + SigmaTildeMuRRDep[nold] = other.SigmaTildeMuRRDep[iObsIdx]; + } + if ( SigmaTildeMuFFDep.size() != 0 ) { + SigmaTildeMuFFDep.resize(nold+1); + SigmaTildeMuFFDep[nold] = other.SigmaTildeMuFFDep[iObsIdx]; + } + if ( SigmaTildeMuRFDep.size() != 0 ) { + SigmaTildeMuRFDep.resize(nold+1); + SigmaTildeMuRFDep[nold] = other.SigmaTildeMuRFDep[iObsIdx]; + } + fastNLOCoeffAddBase::CatBin(other, iObsIdx, ITabVersionRead); +} + + +//________________________________________________________________________________________________________________ // +bool fastNLOCoeffAddFlex::IsEquivalent(const fastNLOCoeffBase& other, double rtol) const { + const fastNLOCoeffAddFlex* op = dynamic_cast<const fastNLOCoeffAddFlex*>(&other); + if (op == nullptr) { + debug["IsEquivalent"] << "other is not of type fastNLOCoeffAddFlex." << endl; + return false; + } + + if (!fastNLOTools::SameTails(GetAllXNodes1(), op->GetAllXNodes1(), rtol)) { + debug["IsEquivalent"] << "XNode1 not equivalent, see above." << endl; + return false; + } + if (!fastNLOTools::SameTails(GetAllXNodes2(), op->GetAllXNodes2(), rtol)) { + debug["IsEquivalent"] << "XNode2 not equivalent, see above." << endl; + return false; + } + std::vector<const fastNLO::v5d*> tst6 = GetSigmaTildes(); + std::vector<const fastNLO::v5d*> ost6 = op->GetSigmaTildes(); + std::vector<std::string> names = {"MuIndep", "MuRDep", "MuFDep", "MuRRDep", "MuFFDep", "MuRFDep"}; + for (unsigned int i = 0; i < tst6.size(); i++) { + const fastNLO::v5d* tst5 = tst6[i]; + const fastNLO::v5d* ost5 = ost6[i]; + if (!IsSigmaTildeEquivalent(op, tst5, ost5, rtol, names[i])) { + return false; + } + } + return true; +} + + +//________________________________________________________________________________________________________________ // +bool fastNLOCoeffAddFlex::IsSigmaTildeEquivalent(const fastNLOCoeffAddFlex* op, const fastNLO::v5d *tst5, const fastNLO::v5d *ost5, double rtol, std::string name) const { + if (tst5->size() != ost5->size()) { + debug["IsSigmaTildeEquivalent"] << name << ": Number of observable bins is different." << endl; + return false; + } + if (NPDFDim != op->GetNPDFDim()) { + debug["IsSigmaTildeEquivalent"] << name << ": NPDFDim is different: " << NPDFDim << " <-> " << op->GetNPDFDim() << endl; + return false; + } + for (unsigned int obsBin = 0; obsBin < tst5->size(); obsBin++) { + unsigned int tOffsetXN1, oOffsetXN1, tOffsetXN2, oOffsetXN2; + int tnb1 = GetNxtot1(obsBin); + int onb1 = op->GetNxtot1(obsBin); + int tnb2 = GetNxtot2(obsBin); + int onb2 = op->GetNxtot2(obsBin); + int x1Max = std::min(tnb1, onb1); + int x2Max = std::min(tnb2, onb2); + if (tnb1 > onb1) { + tOffsetXN1 = tnb1 - onb1; + oOffsetXN1 = 0; + } else { + tOffsetXN1 = 0; + oOffsetXN1 = onb1 - tnb1; + } + if (NPDFDim > 1) { + if (tnb2 > onb2) { + tOffsetXN2 = tnb2 - onb2; + oOffsetXN2 = 0; + } else { + tOffsetXN2 = 0; + oOffsetXN2 = onb2 - tnb2; + } + } else { + tOffsetXN2 = tOffsetXN1; + oOffsetXN2 = oOffsetXN1; + } + + fastNLO::v4d tst4 = tst5->at(obsBin); + fastNLO::v4d ost4 = ost5->at(obsBin); + + int xIt2Max = NPDFDim > 1 ? x2Max : x1Max; + for (int xIt2 = 0; xIt2 < xIt2Max; xIt2++) { + int xIt1Max = NPDFDim > 1 ? x1Max : xIt2 + 1; + for (int xIt1 = 0; xIt1 < xIt1Max; xIt1++) { + fastNLO::v3d tst3 = tst4[GetXIndex(obsBin, xIt1 + tOffsetXN1, xIt2 + tOffsetXN2)]; + fastNLO::v3d ost3 = ost4[op->GetXIndex(obsBin, xIt1 + oOffsetXN1, xIt2 + oOffsetXN2)]; + if (tst3.size() != ost3.size()) { + return false; + } + for (unsigned int scaleNode1 = 0; scaleNode1 < tst3.size(); scaleNode1++) { + fastNLO::v2d tst2 = tst3[scaleNode1]; + fastNLO::v2d ost2 = ost3[scaleNode1]; + if (tst2.size() != ost2.size()) { + return false; + } + for (unsigned int scaleNode2 = 0; scaleNode2 < tst2.size(); scaleNode2++) { + fastNLO::v1d tst1 = tst2[scaleNode2]; + fastNLO::v1d ost1 = ost2[scaleNode2]; + if (tst1.size() != ost1.size()) { + return false; + } + for (unsigned int subProcess = 0; subProcess < tst1.size(); subProcess++) { + double rdiff = std::abs((tst1[subProcess] - ost1[subProcess]) / tst1[subProcess]); + if (rdiff > rtol) { + debug["IsSigmaTildeEquivalent"] << name << " rdiff too high: obsBin=" << obsBin << " scaleNode1=" + << scaleNode1 << " scaleNode2=" << scaleNode2 << " x1=" << (xIt1 - x1Max) << " x2=" << (xIt2 - x2Max) + << " subProcess=" << subProcess << " t=" << tst1[subProcess] << " o=" << ost1[subProcess] + << " rdiff=" << rdiff << endl; + return false; + } + } + } + } + } + } + } + return true; +} + + +//________________________________________________________________________________________________________________ // +void fastNLOCoeffAddFlex::ExtendSigmaTildeX(int ObsBin, unsigned int OldXSize1, unsigned int OldXSize2) { + fastNLO::v3d insertValue = fastNLO::v3d( + GetNScaleNode1(ObsBin), fastNLO::v2d(GetNScaleNode2(ObsBin), fastNLO::v1d(GetNSubproc()))); + unsigned int newXSize1 = GetNxtot1(ObsBin); + unsigned int newXSize2 = GetNxtot2(ObsBin); + fastNLOTools::ExtendSigmaTildeX( + SigmaTildeMuIndep[ObsBin], OldXSize1, newXSize1, OldXSize2, newXSize2, NPDFDim, insertValue); + fastNLOTools::ExtendSigmaTildeX( + SigmaTildeMuRDep[ObsBin], OldXSize1, newXSize1, OldXSize2, newXSize2, NPDFDim, insertValue); + fastNLOTools::ExtendSigmaTildeX( + SigmaTildeMuFDep[ObsBin], OldXSize1, newXSize1, OldXSize2, newXSize2, NPDFDim, insertValue); + fastNLOTools::ExtendSigmaTildeX( + SigmaTildeMuRRDep[ObsBin], OldXSize1, newXSize1, OldXSize2, newXSize2, NPDFDim, insertValue); + fastNLOTools::ExtendSigmaTildeX( + SigmaTildeMuFFDep[ObsBin], OldXSize1, newXSize1, OldXSize2, newXSize2, NPDFDim, insertValue); + fastNLOTools::ExtendSigmaTildeX( + SigmaTildeMuRFDep[ObsBin], OldXSize1, newXSize1, OldXSize2, newXSize2, NPDFDim, insertValue); +} + + +//________________________________________________________________________________________________________________ // +void fastNLOCoeffAddFlex::Fill(fnloEvent& Event, int ObsBin, int X, int scalevar, const vector<pair<int, double>>& nmu1, + const vector<pair<int, double>>& nmu2, int SubProcess, double w) { + for (unsigned int m1 = 0 ; m1<nmu1.size() ; m1++) { + for (unsigned int mu2 = 0 ; mu2<nmu2.size() ; mu2++) { + double wfnlo = nmu1[m1].second * nmu2[mu2].second * w; + SigmaTildeMuIndep[ObsBin][X][nmu1[m1].first][nmu2[mu2].first][SubProcess] += Event._w * wfnlo; + if (Event._wf != 0 || Event._wr != 0) { + SigmaTildeMuFDep[ObsBin][X][nmu1[m1].first][nmu2[mu2].first][SubProcess] += Event._wf * wfnlo; + SigmaTildeMuRDep[ObsBin][X][nmu1[m1].first][nmu2[mu2].first][SubProcess] += Event._wr * wfnlo; + } + if (Event._wrr != 0 || Event._wff != 0 || Event._wrf != 0) { + SigmaTildeMuRRDep[ObsBin][X][nmu1[m1].first][nmu2[mu2].first][SubProcess] += Event._wrr * wfnlo; + SigmaTildeMuFFDep[ObsBin][X][nmu1[m1].first][nmu2[mu2].first][SubProcess] += Event._wff * wfnlo; + SigmaTildeMuRFDep[ObsBin][X][nmu1[m1].first][nmu2[mu2].first][SubProcess] += Event._wrf * wfnlo; + } + } + } +} diff --git a/v2.6/toolkit/fastnlotoolkit/fastNLOCoeffBase.cc b/v2.6/toolkit/fastnlotoolkit/fastNLOCoeffBase.cc new file mode 100644 index 0000000000000000000000000000000000000000..1b3156088f785e149b67d5f013ba8e48f617f35d --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/fastNLOCoeffBase.cc @@ -0,0 +1,393 @@ +#include <cstdlib> +#include <iostream> +#include <cmath> + +#include "fastnlotk/fastNLOCoeffBase.h" +#include "fastnlotk/fastNLOConstants.h" +#include "fastnlotk/fastNLOTools.h" + +using namespace std; +using namespace fastNLO; + +//________________________________________________________________________________________________________________ // +fastNLOCoeffBase::fastNLOCoeffBase(int NObsBin) + : PrimalScream("fastNLOCoeffBase"), fNObsBins(NObsBin), IXsectUnits(), + IDataFlag(), IAddMultFlag(), IContrFlag1(), IContrFlag2(), NScaleDep(), + CtrbDescript(), CodeDescript() {} + +//________________________________________________________________________________________________________________ // +fastNLOCoeffBase* fastNLOCoeffBase::Clone() const { + //! User has to take care to delete this object later + return new fastNLOCoeffBase(*this); +} + + +//________________________________________________________________________________________________________________ // +void fastNLOCoeffBase::Read(istream& table, int ITabVersionRead){ + // basic read function. + // reads in only 'base'-variables. + debug["Read"]<<"Start reading table ..."<<endl; + ReadBase(table, ITabVersionRead); + ReadCoeffInfoBlocks(table, ITabVersionRead); + EndReadCoeff(table, ITabVersionRead); + debug["Read"]<<"Finished reading table."<<endl; +} + + +//________________________________________________________________________________________________________________ // +void fastNLOCoeffBase::ReadBase(istream& table, int ITabVersionRead){ + debug["ReadBase"]<<"Start reading base coefficient table ..."<<endl; + fastNLOTools::ReadMagicNo(table); + table >> IXsectUnits; + table >> IDataFlag; + table >> IAddMultFlag; + table >> IContrFlag1; + table >> IContrFlag2; + table >> NScaleDep; + fastNLOTools::ReadFlexibleVector(CtrbDescript,table); + fastNLOTools::ReadFlexibleVector(CodeDescript,table); + debug["ReadBase"]<<"Finished reading base coefficient table."<<endl; +} + + +//________________________________________________________________________________________________________________ // +void fastNLOCoeffBase::EndReadCoeff(istream& table, int ITabVersionRead){ + debug["EndReadCoeff"]<<"Should have reached end of coefficient table for table version "<<ITabVersionRead<<endl; + fastNLOTools::ReadMagicNo(table); + fastNLOTools::PutBackMagicNo(table); + debug["EndReadCoeff"]<<"Finished reading coefficient table for table version "<<ITabVersionRead<<endl; +} + + +//________________________________________________________________________________________________________________ // +void fastNLOCoeffBase::Write(ostream& table, int ITabVersionWrite) { + say::debug["Write"]<<"Writing fastNLOCoeffBase for table version " << ITabVersionWrite << "." << endl; + table << fastNLO::tablemagicno << sep; + // if ( itabversion >= 24000 ) table << fastNLO::tabversion << sep; + // if ( itabversion >= 24000 ) table << "fastNLO_CoeffAddBase" << sep; + // if ( itabversion >= 24000 ) table << 0 << sep; // v2.4, but yet unused + table << IXsectUnits << sep; + table << IDataFlag << sep; + table << IAddMultFlag << sep; + table << IContrFlag1 << sep; + table << IContrFlag2 << sep; + table << NScaleDep << sep; + fastNLOTools::WriteFlexibleVector(CtrbDescript,table); + fastNLOTools::WriteFlexibleVector(CodeDescript,table); + // if ( itabversion >= 24000 ) table << 0 << sep; // v2.4, but yet unuse +} + + +//________________________________________________________________________________________________________________ // +bool fastNLOCoeffBase::IsCompatible(const fastNLOCoeffBase& other) const { + if( fNObsBins != other.GetNObsBin() ){ + warn["IsCompatible"]<<"fNObsBins != other.GetNObsBin()"<<endl; + return false; + } + if( IXsectUnits != other.GetIXsectUnits() ){ + warn["IsCompatible"]<<"IXsectUnits != other.GetIXsectUnits()"<<endl; + return false; + } + if( IDataFlag != other.GetIDataFlag() ){ + debug["IsCompatible"]<<"IDataFlag != other.GetIDataFlag()"<<endl; + return false; + } + if( IAddMultFlag != other.GetIAddMultFlag() ){ + debug["IsCompatible"]<<"IAddMultFlag != other.GetIAddMultFlag()"<<endl; + return false; + } + if( IContrFlag1 != other.GetIContrFlag1() ){ + debug["IsCompatible"]<<"IContrFlag1 != other.GetIContrFlag1()"<<endl; + return false; + } + if( IContrFlag2 != other.GetIContrFlag2() ){ + debug["IsCompatible"]<<"IContrFlag2 != other.GetIContrFlag2()"<<endl; + return false; + } + if( NScaleDep != other.GetNScaleDep() ){ + debug["IsCompatible"]<<"NScaleDep != other.GetNScaleDep()"<<endl; + if ( (NScaleDep==5 && other.GetNScaleDep()==6) || (NScaleDep==6 && other.GetNScaleDep()==5) ) { + debug["IsCompatible"]<<"One table with NScale=5 and one with NScaleDep=6"<<endl; + // continue; + } + else { + warn["IsCompatible"]<<"Incompatible NScaleDep found!()"<<endl; + return false; + } + } + debug["IsCompatible"]<<"Both tables are compatible"<<endl; + // check descripts here ?! + //bool potentialcompatible = true; + //vector < string > CtrbDescript; + //vector < string > CodeDescript; + return true; +} + + +//________________________________________________________________________________________________________________ // +bool fastNLOCoeffBase::IsCatenable(const fastNLOCoeffBase& other) const { + if ( IXsectUnits != other.GetIXsectUnits() ){ + debug["IsCatenable"]<<"IXsectUnits != other.GetIXsectUnits(). Skipped."<<endl; + return false; + } + if ( IDataFlag != other.GetIDataFlag() ){ + debug["IsCatenable"]<<"IDataFlag != other.GetIDataFlag(). Skipped."<<endl; + return false; + } + if ( IAddMultFlag != other.GetIAddMultFlag() ){ + debug["IsCatenable"]<<"IAddMultFlag != other.GetIAddMultFlag(). Skipped."<<endl; + return false; + } + if ( IContrFlag1 != other.GetIContrFlag1() ){ + debug["IsCatenable"]<<"IContrFlag1 != other.GetIContrFlag1(). Skipped."<<endl; + return false; + } + if ( IContrFlag2 != other.GetIContrFlag2() ){ + debug["IsCatenable"]<<"IContrFlag2 != other.GetIContrFlag2(). Skipped."<<endl; + return false; + } + if ( NScaleDep != other.GetNScaleDep() ){ + return false; + } + if ( ! (fVersionRead < 25000) ) { + if ( + (HasCoeffInfoBlock(0,0) && ! other.HasCoeffInfoBlock(0,0)) || + (! HasCoeffInfoBlock(0,0) && other.HasCoeffInfoBlock(0,0)) || + (HasCoeffInfoBlock(0,1) && ! other.HasCoeffInfoBlock(0,1)) || + (! HasCoeffInfoBlock(0,1) && other.HasCoeffInfoBlock(0,1)) || + (HasCoeffInfoBlock(1,0) && ! other.HasCoeffInfoBlock(1,0)) || + (! HasCoeffInfoBlock(1,0) && other.HasCoeffInfoBlock(1,0)) || + (HasCoeffInfoBlock(1,1) && ! other.HasCoeffInfoBlock(1,1)) || + (! HasCoeffInfoBlock(1,1) && other.HasCoeffInfoBlock(1,1)) + ) { + debug["IsCatenable"]<<"Missing InfoBlock in either of the two tables. Skipped."<<endl; + return false; + } + } + info["IsCatenable"]<<"Base parameters of contribution allow catenation"<<endl; + // check descripts here ?! + //bool potentialcompatible = true; + //vector < string > CtrbDescript; + //vector < string > CodeDescript; + return true; +} + + +//________________________________________________________________________________________________________________ // +bool fastNLOCoeffBase::IsEquivalent(const fastNLOCoeffBase& other, double rtol) const { + error["IsEquivalent"] << "IsEquivalent not implemented by subclass!" << endl; + exit(1); +} + + +//________________________________________________________________________________________________________________ // +void fastNLOCoeffBase::SetCoeffAddDefaults(){ + SetIDataFlag(0); + SetIAddMultFlag(0); + SetIContrFlag1(1); + SetIContrFlag2(100); // specify if LO or NLO + SetNScaleDep(0); + SetIXsectUnits(12); +}; + +//________________________________________________________________________________________________________________ // +void fastNLOCoeffBase::Print(int iprint) const { + if ( !(iprint < 0) ) { + cout << fastNLO::_DSEP20C << " fastNLO Table: CoeffBase " << fastNLO::_DSEP20 << endl; + } else { + cout << endl << fastNLO::_CSEP20C << " fastNLO Table: CoeffBase " << fastNLO::_CSEP20 << endl; + } + fastNLOTools::PrintVector(CtrbDescript,"Contribution description (CtrbDescript)","#"); + fastNLOTools::PrintVector(CodeDescript,"Code description (CodeDescript)","#"); + if ( std::abs(iprint) > 0 ) { + cout << fastNLO::_SSEP20C << " Extended information (iprint > 0) " << fastNLO::_SSEP20 << endl; + printf(" # IXsectUnits %d\n",IXsectUnits); + printf(" # IDataFlag %d\n",IDataFlag); + printf(" # IAddMultFlag %d\n",IAddMultFlag); + printf(" # IContrFlag1 %d\n",IContrFlag1); + printf(" # IContrFlag2 %d\n",IContrFlag2); + printf(" # NScaleDep %d\n",NScaleDep); + } + if ( iprint < 0 ) { + cout << fastNLO::_CSEPSC << endl; + } else { + // cout << fastNLO::_DSEPSC << endl; + } +} + + +//________________________________________________________________________________________________________________ // + +// Erase observable bin +void fastNLOCoeffBase::EraseBin(unsigned int iObsIdx) { + debug["EraseBin"]<<"Erasing table entries in CoeffBase for bin index " << iObsIdx << endl; + SetNObsBin(GetNObsBin()-1); +} + +// Catenate observable bin +void fastNLOCoeffBase::CatBin(const fastNLOCoeffBase& other, unsigned int iObsIdx) { + debug["CatBin"]<<"Catenating observable bin in CoeffBase corresponding to bin index " << iObsIdx << endl; + SetNObsBin(GetNObsBin()+1); +} + +// Multiply observable bin +void fastNLOCoeffBase::MultiplyBin(unsigned int iObsIdx, double nfact) { + debug["MultiplyBin"]<<"Multiplying table entries. Nothing to be done in CoeffBase." << endl; +} + +// +//________________________________________________________________________________________________________________ +// Added to include CoeffInfoBlocks +// Check existence of InfoBlock of type, i.e. flags, (flag1,x); return error in case of multiple matches! +bool fastNLOCoeffBase::HasCoeffInfoBlock(int fICoeffInfoBlockFlag1) const { + bool result = false; + for (int i=0; i<NCoeffInfoBlocks; i++) { + if ( ICoeffInfoBlockFlag1[i] == fICoeffInfoBlockFlag1 ) { + if ( ! result ) { + result = true; + } else { + error["HasCoeffInfoBlocks"]<<"Aborted! Found multiple info blocks of type ICoeffInfoBlockFlag1 = "<<ICoeffInfoBlockFlag1[i]<<endl; + exit(201); + } + } + } + return result; +} + +// Check existence of InfoBlock of type, i.e. flags, (flag1,flag2); return error in case of multiple matches! +bool fastNLOCoeffBase::HasCoeffInfoBlock(int fICoeffInfoBlockFlag1, int fICoeffInfoBlockFlag2) const { + bool result = false; + for (int i=0; i<NCoeffInfoBlocks; i++) { + if ( ICoeffInfoBlockFlag1[i] == fICoeffInfoBlockFlag1 && ICoeffInfoBlockFlag2[i] == fICoeffInfoBlockFlag2 ) { + if ( ! result ) { + result = true; + } else { + error["HasCoeffInfoBlocks"]<<"Aborted! Found multiple info blocks of type ICoeffInfoBlockFlag1 = "<<ICoeffInfoBlockFlag1[i]<<endl; + exit(202); + } + } + } + return result; +} + +// Return first matching index; multiple blocks of same type, i.e. flags (flag1,x), are not allowed! +int fastNLOCoeffBase::GetCoeffInfoBlockIndex(int fICoeffInfoBlockFlag1) { + for (int i=0; i<NCoeffInfoBlocks; i++) { + if ( ICoeffInfoBlockFlag1[i] == fICoeffInfoBlockFlag1 ) return i; + } + return -1; +} + +// Return first matching index; multiple blocks of same type, i.e. flags (flag1,flag2), are not allowed! +int fastNLOCoeffBase::GetCoeffInfoBlockIndex(int fICoeffInfoBlockFlag1, int fICoeffInfoBlockFlag2) { + for (int i=0; i<NCoeffInfoBlocks; i++) { + if ( ICoeffInfoBlockFlag1[i] == fICoeffInfoBlockFlag1 && ICoeffInfoBlockFlag2[i] == fICoeffInfoBlockFlag2 ) return i; + } + return -1; +} + +void fastNLOCoeffBase::AddCoeffInfoBlock(int fICoeffInfoBlockFlag1, int fICoeffInfoBlockFlag2, std::vector<std::string> Description, + std::vector<double> Content) { + info["AddCoeffInfoBlocks"]<<"Adding additional InfoBlock with flags "<<fICoeffInfoBlockFlag1<<" and "<<fICoeffInfoBlockFlag2<<" to table contribution."<<endl; + NCoeffInfoBlocks += 1; + ICoeffInfoBlockFlag1.push_back(fICoeffInfoBlockFlag1); + ICoeffInfoBlockFlag2.push_back(fICoeffInfoBlockFlag2); + NCoeffInfoBlockDescr.push_back(Description.size()); + CoeffInfoBlockDescript.push_back(Description); + NCoeffInfoBlockCont.push_back(Content.size()); + CoeffInfoBlockContent.push_back(Content); +} + +void fastNLOCoeffBase::AddCoeffInfoBlock(int fICoeffInfoBlockFlag1, int fICoeffInfoBlockFlag2, std::vector<std::string> Description, + std::string filename, unsigned int icola, unsigned int icolb, double relfac) { + info["AddCoeffInfoBlocks"]<<"Adding additional InfoBlock reading data from file "<<filename<<endl; + std::vector<double> Content = fastNLOTools::ReadContentFromFile(filename, icola, icolb); + for ( unsigned int i=0; i<Content.size(); i++ ) { + Content[i] = relfac*Content[i]; + } + AddCoeffInfoBlock(fICoeffInfoBlockFlag1, fICoeffInfoBlockFlag2, Description, Content); +} + +void fastNLOCoeffBase::ReadCoeffInfoBlocks(istream& table, int ITabVersionRead) { + if (ITabVersionRead < 25000) { + debug["ReadCoeffInfoBlocks"]<<"No additional info blocks allowed for table versions < 25000"<<endl; + } else { + table >> NCoeffInfoBlocks; + debug["ReadCoeffInfoBlocks"]<<"Found "<<NCoeffInfoBlocks<<" additional info blocks for coefficient table."<<endl; + for (int i=0; i<NCoeffInfoBlocks; i++) { + int iflag; + table >> iflag; + ICoeffInfoBlockFlag1.push_back(iflag); + if (ICoeffInfoBlockFlag1[i] == 0 || ICoeffInfoBlockFlag1[i] == 1) { + debug["ReadCoeffInfoBlocks"]<<"Found info block of type ICoeffInfoBlockFlag1 = "<<ICoeffInfoBlockFlag1[i]<<endl; + } else { + error["ReadCoeffInfoBlocks"]<<"Found info block of unknown type ICoeffInfoBlockFlag1 = "<<ICoeffInfoBlockFlag1[i]<<endl; + exit(111); + } + table >> iflag; + ICoeffInfoBlockFlag2.push_back(iflag); + if (ICoeffInfoBlockFlag2[i] == 0 || ICoeffInfoBlockFlag2[i] == 1) { + debug["ReadCoeffInfoBlocks"]<<"Found info block of type ICoeffInfoBlockFlag2 = "<<ICoeffInfoBlockFlag2[i]<<endl; + } else { + error["ReadCoeffInfoBlocks"]<<"Found info block of unknown type ICoeffInfoBlockFlag2 = "<<ICoeffInfoBlockFlag2[i]<<endl; + exit(222); + } + std::vector < std::string > Description; + NCoeffInfoBlockDescr.push_back(fastNLOTools::ReadFlexibleVector(Description,table)-1); + CoeffInfoBlockDescript.push_back(Description); + for (unsigned int j=0; j<Description.size(); j++) { + debug["ReadCoeffInfoBlocks"]<<"Read info block description line "<<j<<" : "<< Description[j] <<endl; + } + if (ICoeffInfoBlockFlag1[i] == 0 || ICoeffInfoBlockFlag1[i] == 1) { // Entry per ObsBin + std::vector < double > Content; + NCoeffInfoBlockCont.push_back(fastNLOTools::ReadFlexibleVector(Content,table)); + if ( NCoeffInfoBlockCont[i]-1 != fNObsBins ) { + error["ReadCoeffInfoBlocks"]<<"Found info block of type ICoeffInfoBlockFlag1 = "<<ICoeffInfoBlockFlag1[i]<<" , but # of content lines = "<<NCoeffInfoBlockCont[i]-1<<" differs from fNObsBins = "<<fNObsBins<<"! Aborted."<<endl; + exit(223); + } else { + debug["ReadCoeffInfoBlocks"]<<"Read "<<NCoeffInfoBlockCont[i]-1<<" lines into InfoBlock content vector."<<endl; + } + CoeffInfoBlockContent.push_back(Content); + } + } + } +} + +void fastNLOCoeffBase::WriteCoeffInfoBlocks(ostream& table, int ITabVersionWrite) { + if (ITabVersionWrite < 25000) { + debug["WriteCoeffInfoBlocks"]<<"No additional InfoBlocks allowed for table versions < 25000"<<endl; + } else { + debug["WriteCoeffInfoBlocks"]<<"Writing additional InfoBlocks; NCoeffInfoBlocks = "<<NCoeffInfoBlocks<<endl; + table << NCoeffInfoBlocks << sep; + for (int i=0; i<NCoeffInfoBlocks; i++) { + debug["WriteCoeffInfoBlocks"]<<"ICoeffInfoBlockFlags1,2 = "<<ICoeffInfoBlockFlag1[i]<<", "<<ICoeffInfoBlockFlag2[i]<<endl; + table << ICoeffInfoBlockFlag1[i] << sep; + table << ICoeffInfoBlockFlag2[i] << sep; + table << NCoeffInfoBlockDescr[i] << sep; + for (int j=0; j<NCoeffInfoBlockDescr[i]; j++) { + debug["WriteCoeffInfoBlocks"]<<"CoeffInfoBlockDecsript[.][.] = "<<CoeffInfoBlockDescript[i][j]<<endl; + table << CoeffInfoBlockDescript[i][j] << sep; + } + int nlines = fastNLOTools::WriteFlexibleVector(CoeffInfoBlockContent[i],table); + debug["WriteCoeffInfoBlocks"]<<"Wrote "<<nlines-1<<" content lines to additional InfoBlock no. "<<i<<endl; + } + } +} + +void fastNLOCoeffBase::SetContributionDescription(std::vector <std::string> CtrbDescr) { + debug["SetContributionDescription"]<<"Setting contribution description."<<endl; + size_t NCtrbDescript = CtrbDescr.size(); + fastNLOCoeffBase::CtrbDescript.resize(NCtrbDescript); + for (size_t i=0; i < NCtrbDescript; ++i) { + fastNLOCoeffBase::CtrbDescript[i] = CtrbDescr[i]; + } +} + +void fastNLOCoeffBase::SetCodeDescription(std::vector <std::string> CodeDescr) { + debug["SetCodeDescription"]<<"Setting code description."<<endl; + size_t NCodeDescript = CodeDescr.size(); + fastNLOCoeffBase::CodeDescript.resize(NCodeDescript); + for (size_t i=0; i < NCodeDescript; ++i) { + fastNLOCoeffBase::CodeDescript[i] = CodeDescr[i]; + } +} diff --git a/v2.6/toolkit/fastnlotoolkit/fastNLOCoeffData.cc b/v2.6/toolkit/fastnlotoolkit/fastNLOCoeffData.cc new file mode 100644 index 0000000000000000000000000000000000000000..7e0cbc4806b58076d683569e57328087144be56c --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/fastNLOCoeffData.cc @@ -0,0 +1,263 @@ +#include <cstdlib> +#include <iostream> +#include <cmath> + +#include "fastnlotk/fastNLOCoeffData.h" +#include "fastnlotk/fastNLOTools.h" + +using namespace std; +using namespace fastNLO; + + +//________________________________________________________________________________________________________________ // +fastNLOCoeffData::fastNLOCoeffData(int NObsBin) + : fastNLOCoeffBase(NObsBin), Nuncorrel(), UncDescr(), Ncorrel(), CorDescr(), Xcenter(), Value(), + UncorLo(), UncorHi(), CorrLo(), CorrHi(), NErrMatrix(), matrixelement() { + SetClassName("fastNLOCoeffData"); +} + + +//________________________________________________________________________________________________________________ // +fastNLOCoeffData::fastNLOCoeffData(const fastNLOCoeffBase& base) : fastNLOCoeffBase(base) { + SetClassName("fastNLOCoeffData"); +} + + +//________________________________________________________________________________________________________________ // +bool fastNLOCoeffData::CheckCoeffConstants(const fastNLOCoeffBase* c, bool quiet) { + if ( c->GetIDataFlag() == 1 ) return true; + else { + if ( !quiet ) + say::info["fastNLOCoeffData::CheckCoeffConstants"]<<"This is not a data table! IDataFlag="<<c->GetIDataFlag()<<", but must be 1."<<endl; + return false; + } +} + + +//________________________________________________________________________________________________________________ // +fastNLOCoeffData* fastNLOCoeffData::Clone() const { + //! Use has to take care to delete this object later + return new fastNLOCoeffData(*this); +} + + +///________________________________________________________________________________________________________________ // +void fastNLOCoeffData::Read(istream& table, int ITabVersionRead){ + fastNLOCoeffBase::ReadBase(table, ITabVersionRead); + ReadRest(table, ITabVersionRead); +} + + +//________________________________________________________________________________________________________________ // +void fastNLOCoeffData::ReadRest(istream& table, int ITabVersionRead){ + CheckCoeffConstants(this); + ReadCoeffData(table); + EndReadCoeff(table, ITabVersionRead); +} + + +//________________________________________________________________________________________________________________ // +void fastNLOCoeffData::ReadCoeffData(istream& table){ + char buffer[5257]; + CheckCoeffConstants(this); + table >> Nuncorrel; + UncDescr.resize(Nuncorrel); + table.getline(buffer,5256); + for(int i=0;i<Nuncorrel;i++){ + table.getline(buffer,5256); + UncDescr[i] = buffer; + // StripWhitespace(UncDescr[i]); + } + table >> Ncorrel; + CorDescr.resize(Ncorrel); + table.getline(buffer,5256); + for(int i=0;i<Ncorrel;i++){ + table.getline(buffer,256); + CorDescr[i] = buffer; + // StripWhitespace(CorDescr[i]); + } + Xcenter.resize(fNObsBins); + Value.resize(fNObsBins); + UncorLo.resize(fNObsBins); + UncorHi.resize(fNObsBins); + CorrLo.resize(fNObsBins); + CorrHi.resize(fNObsBins); + for(int i=0;i<fNObsBins;i++){ + table >> Xcenter[i]; + table >> Value[i]; + UncorLo[i].resize(Nuncorrel); + UncorHi[i].resize(Nuncorrel); + for(int j=0;j<Nuncorrel;j++){ + table >> UncorLo[i][j]; + table >> UncorHi[i][j]; + } + CorrLo[i].resize(Ncorrel); + CorrHi[i].resize(Ncorrel); + for(int j=0;j<Ncorrel;j++){ + table >> CorrLo[i][j]; + table >> CorrHi[i][j]; + } + } + table >> NErrMatrix; + matrixelement.resize(NErrMatrix); + for(int i=0;i<NErrMatrix;i++){ + matrixelement[i].resize((int)pow((double)fNObsBins,2)); + for(int j=0;j<(int)pow((double)fNObsBins,2);j++){ + table >> matrixelement[i][j]; + } + } +} + + +//________________________________________________________________________________________________________________ // +void fastNLOCoeffData::Write(ostream& table, int itabversion) { + fastNLOCoeffBase::Write(table,itabversion); + CheckCoeffConstants(this); + + //if(IDataFlag==1){ + table << Nuncorrel << sep; + for(int i=0;i<Nuncorrel;i++){ + table << UncDescr[i] << sep; + } + table << Ncorrel << sep; + for(int i=0;i<Ncorrel;i++){ + table << CorDescr[i] << sep; + } + for(int i=0;i<fNObsBins;i++){ + table << Xcenter[i] << sep; + table << Value[i] << sep; + for(int j=0;j<Nuncorrel;j++){ + table << UncorLo[i][j] << sep; + table << UncorHi[i][j] << sep; + } + for(int j=0;j<Ncorrel;j++){ + table << CorrLo[i][j] << sep; + table << CorrHi[i][j] << sep; + } + } + table << NErrMatrix << sep; + for(int i=0;i<NErrMatrix;i++){ + for(int j=0;j<(int)pow((double)fNObsBins,2);j++){ + table << matrixelement[i][j] << sep; + } + } +} + + +//________________________________________________________________________________________________________________ // +void fastNLOCoeffData::Print(int iprint) const { + if ( !(iprint < 0) ) { + fastNLOCoeffBase::Print(iprint); + cout << fastNLO::_DSEP20C << " fastNLO Table: CoeffData " << fastNLO::_DSEP20 << endl; + } else { + cout << endl << fastNLO::_CSEP20C << " fastNLO Table: CoeffData " << fastNLO::_CSEP20 << endl; + } + printf(" # No. of uncorr. unc. (Nuncorrel) %d\n",Nuncorrel); + if (Nuncorrel > 0) {fastNLOTools::PrintVector(UncDescr,"Uncorr. uncertainties (UncDescr)","#");} + printf(" # No. of corr. unc. (Ncorrel) %d\n",Ncorrel); + if (Ncorrel > 0) {fastNLOTools::PrintVector(CorDescr,"Corr. uncertainties (CorDescr)","#");} + if ( std::abs(iprint) > 0 ) { + cout << fastNLO::_SSEP20C << " Extended information (iprint > 0) " << fastNLO::_SSEP20 << endl; + fastNLOTools::PrintVector(Xcenter,"Data bin centers (Xcenter)","# "); + fastNLOTools::PrintVector(Value,"Data values (Value)","# "); + } + if ( std::abs(iprint) > 1 ) { + cout << fastNLO::_SSEP20C << " Extended information (iprint > 1) " << fastNLO::_SSEP20 << endl; + for (int i=0; i<fNObsBins; i++) { + // Print only for first and last observable bin + if (i==0 || i==fNObsBins-1) { + printf(" # Observable bin no. %d\n",i+1); + if (Nuncorrel > 0) { + fastNLOTools::PrintVector(UncorLo[i],"Lower uncorr. uncertainties (UncorLo)","# "); + fastNLOTools::PrintVector(UncorHi[i],"Upper uncorr. uncertainties (UncorHi)","# "); + } + if (Ncorrel > 0) { + fastNLOTools::PrintVector(CorrLo[i],"Lower corr. uncertainties (CorrLo)","# "); + fastNLOTools::PrintVector(CorrHi[i],"Upper corr. uncertainties (CorrHi)","# "); + } + } + } + } + cout << fastNLO::_CSEPSC << endl; +} + + +//________________________________________________________________________________________________________________ // + +// Erase observable bin +void fastNLOCoeffData::EraseBin(unsigned int iObsIdx) { + debug["fastNLOCoeffData::EraseBin"]<<"Erasing table entries in CoeffData for bin index " << iObsIdx << endl; + if ( Value.size() == 0 ) { + say::error["EraseBin"]<<"All data bins deleted already. Aborted!" << endl; + exit(1); + } + if ( Xcenter.size() != 0 ) Xcenter.erase(Xcenter.begin()+iObsIdx); + if ( Value.size() != 0 ) Value.erase(Value.begin()+iObsIdx); + if ( UncorLo.size() != 0 ) UncorLo.erase(UncorLo.begin()+iObsIdx); + if ( UncorHi.size() != 0 ) UncorHi.erase(UncorHi.begin()+iObsIdx); + if ( CorrLo.size() != 0 ) CorrLo.erase(CorrLo.begin()+iObsIdx); + if ( CorrHi.size() != 0 ) CorrHi.erase(CorrHi.begin()+iObsIdx); + fastNLOCoeffBase::EraseBin(iObsIdx); +} + +// Catenate observable bin +void fastNLOCoeffData::CatBin(const fastNLOCoeffData& other, unsigned int iObsIdx) { + debug["fastNLOCoeffData::CatBin"]<<"Catenating observable bin in CoeffData corresponding to bin index " << iObsIdx << endl; + if ( Value.size() == 0 ) { + say::error["CatBin"]<<"Initial data table is empty. Aborted!" << endl; + exit(1); + } + unsigned int nold = Value.size(); + if ( Xcenter.size() != 0 ) { + Xcenter.resize(nold+1); + Xcenter[nold] = other.Xcenter[iObsIdx]; + } + if ( Value.size() != 0 ) { + Value.resize(nold+1); + Value[nold] = other.Value[iObsIdx]; + } + if ( UncorLo.size() != 0 ) { + UncorLo.resize(nold+1); + UncorLo[nold] = other.UncorLo[iObsIdx]; + } + if ( UncorHi.size() != 0 ) { + UncorHi.resize(nold+1); + UncorHi[nold] = other.UncorHi[iObsIdx]; + } + if ( CorrLo.size() != 0 ) { + CorrLo.resize(nold+1); + CorrLo[nold] = other.CorrLo[iObsIdx]; + } + if ( CorrHi.size() != 0 ) { + CorrHi.resize(nold+1); + CorrHi[nold] = other.CorrHi[iObsIdx]; + } + fastNLOCoeffBase::CatBin(other, iObsIdx); +} + +// Multiply observable bin +void fastNLOCoeffData::MultiplyBin(unsigned int iObsIdx, double fact) { + debug["fastNLOCoeffData::MultiplyBin"]<<"Multiplying table entries in CoeffData for bin index " << iObsIdx << " by factor " << fact << endl; + Value[iObsIdx] *= fact; + fastNLOCoeffBase::MultiplyBin(iObsIdx, fact); +} + +//________________________________________________________________________________________________________________ // +bool fastNLOCoeffData::IsCatenable(const fastNLOCoeffData& other) const { + //! Check for compatibility of catenating observable bins + if ( ! ((fastNLOCoeffBase*)this)->IsCatenable(other)) return false; + if( Nuncorrel != other.GetNuncorrel() ){ + debug["IsCatenable"]<<"Nuncorrel != other.GetNuncorrel(). Skipped."<<endl; + return false; + } + if( Ncorrel != other.GetNcorrel() ){ + debug["IsCatenable"]<<"Ncorrel != other.GetNcorrel(). Skipped."<<endl; + return false; + } + if( NErrMatrix != other.GetNErrMatrix() ){ + debug["IsCatenable"]<<"NErrMatrix != other.GetNErrMatrix(). Skipped."<<endl; + return false; + } + info["IsCatenable"]<<"Data contributions are catenable"<<endl; + return true; +} diff --git a/v2.6/toolkit/fastnlotoolkit/fastNLOCoeffMult.cc b/v2.6/toolkit/fastnlotoolkit/fastNLOCoeffMult.cc new file mode 100644 index 0000000000000000000000000000000000000000..badb9b4a5e953d1e5999fe497bfac55132e9c3e2 --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/fastNLOCoeffMult.cc @@ -0,0 +1,247 @@ +#include <algorithm> +#include <cstdlib> +#include <iostream> +#include <cmath> + +#include "fastnlotk/fastNLOCoeffMult.h" +#include "fastnlotk/fastNLOTools.h" + +using namespace std; +using namespace fastNLO; + + +//________________________________________________________________________________________________________________ // +fastNLOCoeffMult::fastNLOCoeffMult(int NObsBin) + : fastNLOCoeffBase(NObsBin), Nuncorrel(), UncDescr(), Ncorrel(), CorDescr(), + UncorLo(), UncorHi(), CorrLo(), CorrHi(), fact() { + SetClassName("fastNLOCoeffMult"); +} + + +//________________________________________________________________________________________________________________ // +fastNLOCoeffMult::fastNLOCoeffMult(const fastNLOCoeffBase& base) : fastNLOCoeffBase(base) { + SetClassName("fastNLOCoeffMult"); +} + + +//________________________________________________________________________________________________________________ // +bool fastNLOCoeffMult::CheckCoeffConstants(const fastNLOCoeffBase* c, bool quiet) { + if ( c->GetIAddMultFlag()==0 && c->GetIDataFlag()==0 ) { + // Additive contribution + return false; + } else if ( c->GetIAddMultFlag()==1 && c->GetIDataFlag()==0 ) { + // Multiplicative contribution + return true; + } else if ( c->GetIAddMultFlag()==0 && c->GetIDataFlag()==1 ) { + // Data contribution + return false; + } else { + // Unknown contribution + say::error["fastNLOCoeffMult::CheckCoeffConstants"] + << "Unknown contribution type, aborting! " + << "IAddMultFlag = " << c->GetIAddMultFlag() + << ", IDataFlag =" << c->GetIDataFlag() <<endl; + exit(1); + } +} + + +//________________________________________________________________________________________________________________ // +fastNLOCoeffMult* fastNLOCoeffMult::Clone() const { + //! Use has to take care to delete this object later + return new fastNLOCoeffMult(*this); +} + + +///________________________________________________________________________________________________________________ // +void fastNLOCoeffMult::Read(istream& table, int ITabVersionRead){ + fastNLOCoeffBase::ReadBase(table, ITabVersionRead); + ReadRest(table, ITabVersionRead); +} + + +//________________________________________________________________________________________________________________ // +void fastNLOCoeffMult::ReadRest(istream& table, int ITabVersionRead){ + CheckCoeffConstants(this); + ReadCoeffMult(table); + EndReadCoeff(table, ITabVersionRead); +} + + +//________________________________________________________________________________________________________________ // +void fastNLOCoeffMult::ReadCoeffMult(istream& table){ + char buffer[5257]; + table >> Nuncorrel; + UncDescr.resize(Nuncorrel); + table.getline(buffer,5256); + for(int i=0;i<Nuncorrel;i++){ + table.getline(buffer,5256); + UncDescr[i] = buffer; + // StripWhitespace(UncDescr[i]); + } + table >> Ncorrel; + CorDescr.resize(Ncorrel); + table.getline(buffer,5256); + for(int i=0;i<Ncorrel;i++){ + table.getline(buffer,5256); + CorDescr[i] = buffer; + // StripWhitespace(CorDescr[i]); + } + fact.resize(fNObsBins); + UncorLo.resize(fNObsBins); + UncorHi.resize(fNObsBins); + CorrLo.resize(fNObsBins); + CorrHi.resize(fNObsBins); + for(int i=0;i<fNObsBins;i++){ + table >> fact[i]; + UncorLo[i].resize(Nuncorrel); + UncorHi[i].resize(Nuncorrel); + for(int j=0;j<Nuncorrel;j++){ + table >> UncorLo[i][j]; + table >> UncorHi[i][j]; + } + CorrLo[i].resize(Ncorrel); + CorrHi[i].resize(Ncorrel); + for(int j=0;j<Ncorrel;j++){ + table >> CorrLo[i][j]; + table >> CorrHi[i][j]; + } + } + // end of IAddMultFlag==1 +} + + +//________________________________________________________________________________________________________________ // +void fastNLOCoeffMult::Write(ostream& table, int itabversion) { + fastNLOCoeffBase::Write(table,itabversion); + CheckCoeffConstants(this); + table << Nuncorrel << sep; + for(int i=0;i<Nuncorrel;i++){ + table << UncDescr[i] << sep; + } + table << Ncorrel << sep; + for(int i=0;i<Ncorrel;i++){ + table << CorDescr[i] << sep; + } + for(int i=0;i<fNObsBins;i++){ + table << fact[i] << sep; + for(int j=0;j<Nuncorrel;j++){ + table << UncorLo[i][j] << sep; + table << UncorHi[i][j] << sep; + } + for(int j=0;j<Ncorrel;j++){ + table << CorrLo[i][j] << sep; + table << CorrHi[i][j] << sep; + } + } +} + + +//________________________________________________________________________________________________________________ // +void fastNLOCoeffMult::Print(int iprint) const { + if ( !(iprint < 0) ) { + fastNLOCoeffBase::Print(iprint); + cout << fastNLO::_DSEP20C << " fastNLO Table: CoeffMult " << fastNLO::_DSEP20 << endl; + } else { + cout << endl << fastNLO::_CSEP20C << " fastNLO Table: CoeffMult " << fastNLO::_CSEP20 << endl; + } + double minfact = *min_element(fact.begin(),fact.end()); + double maxfact = *max_element(fact.begin(),fact.end()); + printf(" # Minimal correction factor (fact[]) %f\n",minfact); + printf(" # Maximal correction factor (fact[]) %f\n",maxfact); + printf(" # No. of uncorr. unc. (Nuncorrel) %d\n",Nuncorrel); + if (Nuncorrel > 0) {fastNLOTools::PrintVector(UncDescr,"Uncorr. uncertainties (UncDescr)","#");} + printf(" # No. of corr. unc. (Ncorrel) %d\n",Ncorrel); + if (Ncorrel > 0) {fastNLOTools::PrintVector(CorDescr,"Corr. uncertainties (CorDescr)","#");} + if ( std::abs(iprint) > 1 ) { + cout << fastNLO::_SSEP20C << " Extended information (iprint > 1) " << fastNLO::_SSEP20 << endl; + fastNLOTools::PrintVector(fact,"Correction factors (fact)","# "); + } + if ( std::abs(iprint) > 2 ) { + cout << fastNLO::_SSEP20C << " Extended information (iprint > 2) " << fastNLO::_SSEP20 << endl; + for (int i=0; i<fNObsBins; i++) { + // Print only for first and last observable bin + if (i==0 || i==fNObsBins-1) { + printf(" # Observable bin no. %d\n",i+1); + if (Nuncorrel > 0) { + fastNLOTools::PrintVector(UncorLo[i],"Lower uncorr. uncertainties (UncorLo)","# "); + fastNLOTools::PrintVector(UncorHi[i],"Upper uncorr. uncertainties (UncorHi)","# "); + } + if (Ncorrel > 0) { + fastNLOTools::PrintVector(CorrLo[i],"Lower corr. uncertainties (CorrLo)","# "); + fastNLOTools::PrintVector(CorrHi[i],"Upper corr. uncertainties (CorrHi)","# "); + } + } + } + } + cout << fastNLO::_CSEPSC << endl; +} + + +//________________________________________________________________________________________________________________ // +// Erase observable bin +void fastNLOCoeffMult::EraseBin(unsigned int iObsIdx) { + debug["fastNLOCoeffMult::EraseBin"]<<"Erasing table entries in CoeffMult for bin index " << iObsIdx << endl; + if ( fact.size() == 0 ) { + say::error["EraseBin"]<<"All multiplicative bins deleted already. Aborted!" << endl; + exit(1); + } + if ( fact.size() != 0 ) fact.erase(fact.begin()+iObsIdx); + if ( UncorLo.size() != 0 ) UncorLo.erase(UncorLo.begin()+iObsIdx); + if ( UncorHi.size() != 0 ) UncorHi.erase(UncorHi.begin()+iObsIdx); + if ( CorrLo.size() != 0 ) CorrLo.erase(CorrLo.begin()+iObsIdx); + if ( CorrHi.size() != 0 ) CorrHi.erase(CorrHi.begin()+iObsIdx); + fastNLOCoeffBase::EraseBin(iObsIdx); +} + +// Catenate observable bin +void fastNLOCoeffMult::CatBin(const fastNLOCoeffMult& other, unsigned int iObsIdx) { + debug["fastNLOCoeffMult::CatBin"]<<"Catenating observable bin in CoeffMult corresponding to bin index " << iObsIdx << endl; + if ( fact.size() == 0 ) { + say::error["CatBin"]<<"Initial multiplicative table is empty. Aborted!" << endl; + exit(1); + } + unsigned int nold = fact.size(); + if ( fact.size() != 0 ) { + fact.resize(nold+1); + fact[nold] = other.fact[iObsIdx]; + } + if ( UncorLo.size() != 0 ) { + UncorLo.resize(nold+1); + UncorLo[nold] = other.UncorLo[iObsIdx]; + } + if ( UncorHi.size() != 0 ) { + UncorHi.resize(nold+1); + UncorHi[nold] = other.UncorHi[iObsIdx]; + } + if ( CorrLo.size() != 0 ) { + CorrLo.resize(nold+1); + CorrLo[nold] = other.CorrLo[iObsIdx]; + } + if ( CorrHi.size() != 0 ) { + CorrHi.resize(nold+1); + CorrHi[nold] = other.CorrHi[iObsIdx]; + } + fastNLOCoeffBase::CatBin(other, iObsIdx); +} + +// Multiply observable bin +void fastNLOCoeffMult::MultiplyBin(unsigned int iObsIdx, double nfact) { + debug["fastNLOCoeffMult::MultiplyBin"]<<"Multiplying table entries. Nothing to be done in CoeffMult." << endl; +} + +//________________________________________________________________________________________________________________ // +bool fastNLOCoeffMult::IsCatenable(const fastNLOCoeffMult& other) const { + //! Check for compatibility of catenating observable bins + if ( ! ((fastNLOCoeffBase*)this)->IsCatenable(other)) return false; + if( Nuncorrel != other.GetNuncorrel() ){ + debug["IsCatenable"]<<"Nuncorrel != other.GetNuncorrel(). Skipped."<<endl; + return false; + } + if( Ncorrel != other.GetNcorrel() ){ + debug["IsCatenable"]<<"Ncorrel != other.GetNcorrel(). Skipped."<<endl; + return false; + } + info["IsCatenable"]<<"Multiplicable contributions are catenable"<<endl; + return true; +} diff --git a/v2.6/toolkit/fastnlotoolkit/fastNLOCoefficients.cc b/v2.6/toolkit/fastnlotoolkit/fastNLOCoefficients.cc new file mode 100644 index 0000000000000000000000000000000000000000..b9f74320d45997a495d43d349d17f46c11dbc4f3 --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/fastNLOCoefficients.cc @@ -0,0 +1,1323 @@ +#include <cstdlib> +#include <iostream> +#include <cmath> + +#include "fastnlotk/fastNLOCoefficients.h" + +using namespace std; +using namespace fastNLO; + +fastNLOCoefficients::fastNLOCoefficients(){ +} + +fastNLOCoefficients::fastNLOCoefficients(int NObsBin, int iLOord){ + fNObsBins = NObsBin; + fILOord = iLOord; // only necessary for fixing NScaleDep 3 -> 4,5 + NScaleDep = 0; +} + + +int fastNLOCoefficients::Read(istream *table){ + table->peek(); + if (table->eof()){ + printf("fastNLOCoefficients::Read: Cannot read from file.\n"); + return(2); + } + + int key = 0; + *table >> key; + if(key != tablemagicno){ + printf("fastNLOCoefficients::Read: At beginning of block found %d instead of %d.\n",key,tablemagicno); + return 1; + }; + + *table >> IXsectUnits; + *table >> IDataFlag; + *table >> IAddMultFlag; + *table >> IContrFlag1; + *table >> IContrFlag2; + // KR: Let's simply drop IContrFlag3, which in pp scenarios was always 0 anyway and + // KR: reuse this table line for NScaleDep! + // *table >> IContrFlag3; // IContrFlag3 is written here in v2.0 and v2.1 but not in v2.0+ + // in v2.1. IContrFlag3 will be reintroduces again, and NScaleDep will be stored later in the table + // IContrFlag3 = 0; + *table >> NScaleDep; + int NContrDescr; + *table >> NContrDescr; + // printf(" * fastNLOCoefficients::Read(). IDataFlag: %d, IAddMultFlag: %d, IContrFlag1: %d, IContrFlag2: %d,, NScaleDep: %d\n",IDataFlag,IAddMultFlag,IContrFlag1,IContrFlag2,NScaleDep ); + CtrbDescript.resize(NContrDescr); + char buffer[257]; + table->getline(buffer,256); + for(int i=0;i<NContrDescr;i++){ + table->getline(buffer,256); + CtrbDescript[i] = buffer; + // StripWhitespace(CtrbDescript[i]); + } + int NCodeDescr; + *table >> NCodeDescr; + CodeDescript.resize(NCodeDescr); + table->getline(buffer,256); + for(int i=0;i<NCodeDescr;i++){ + table->getline(buffer,256); + CodeDescript[i] = buffer; + // StripWhitespace(CodeDescript[i]); + } + if(IDataFlag==1){ + *table >> Nuncorrel; + UncDescr.resize(Nuncorrel); + table->getline(buffer,256); + for(int i=0;i<Nuncorrel;i++){ + table->getline(buffer,256); + UncDescr[i] = buffer; + // StripWhitespace(UncDescr[i]); + } + *table >> Ncorrel; + CorDescr.resize(Ncorrel); + table->getline(buffer,256); + for(int i=0;i<Ncorrel;i++){ + table->getline(buffer,256); + CorDescr[i] = buffer; + // StripWhitespace(CorDescr[i]); + } + Xcenter.resize(fNObsBins); + Value.resize(fNObsBins); + UncorLo.resize(fNObsBins); + UncorHi.resize(fNObsBins); + CorrLo.resize(fNObsBins); + CorrHi.resize(fNObsBins); + for(int i=0;i<fNObsBins;i++){ + *table >> Xcenter[i]; + *table >> Value[i]; + UncorLo[i].resize(Nuncorrel); + UncorHi[i].resize(Nuncorrel); + for(int j=0;j<Nuncorrel;j++){ + *table >> UncorLo[i][j]; + *table >> UncorHi[i][j]; + } + CorrLo[i].resize(Ncorrel); + CorrHi[i].resize(Ncorrel); + for(int j=0;j<Ncorrel;j++){ + *table >> CorrLo[i][j]; + *table >> CorrHi[i][j]; + } + } + *table >> NErrMatrix; + matrixelement.resize(NErrMatrix); + for(int i=0;i<NErrMatrix;i++){ + matrixelement[i].resize((int)pow((double)fNObsBins,2)); + for(int j=0;j<(int)pow((double)fNObsBins,2);j++){ + *table >> matrixelement[i][j]; + } + } + }// end of IDataFlag==1 + if(IAddMultFlag==1){ + *table >> Nuncorrel; + UncDescr.resize(Nuncorrel); + table->getline(buffer,256); + for(int i=0;i<Nuncorrel;i++){ + table->getline(buffer,256); + UncDescr[i] = buffer; + // StripWhitespace(UncDescr[i]); + } + *table >> Ncorrel; + CorDescr.resize(Ncorrel); + table->getline(buffer,256); + for(int i=0;i<Ncorrel;i++){ + table->getline(buffer,256); + CorDescr[i] = buffer; + // StripWhitespace(CorDescr[i]); + } + fact.resize(fNObsBins); + UncorLo.resize(fNObsBins); + UncorHi.resize(fNObsBins); + CorrLo.resize(fNObsBins); + CorrHi.resize(fNObsBins); + for(int i=0;i<fNObsBins;i++){ + *table >> fact[i]; + UncorLo[i].resize(Nuncorrel); + UncorHi[i].resize(Nuncorrel); + for(int j=0;j<Nuncorrel;j++){ + *table >> UncorLo[i][j]; + *table >> UncorHi[i][j]; + } + CorrLo[i].resize(Ncorrel); + CorrHi[i].resize(Ncorrel); + for(int j=0;j<Ncorrel;j++){ + *table >> CorrLo[i][j]; + *table >> CorrHi[i][j]; + } + } + }// end of IAddMultFlag==1 + + if(!(IDataFlag==1) && !(IAddMultFlag==1)){ + *table >> IRef; + *table >> IScaleDep; + *table >> Nevt; + *table >> Npow; + *table >> NPDF; + if(NPDF>0){ + NPDFPDG.resize(NPDF); + for(int i=0;i<NPDF;i++){ + *table >> NPDFPDG[i]; + } + } + *table >> NPDFDim; + *table >> NFragFunc; + if(NFragFunc>0){ + NFFPDG.resize(NFragFunc); + for(int i=0;i<NFragFunc;i++){ + *table >> NFFPDG[i]; + } + } + *table >> NFFDim; + *table >> NSubproc; + *table >> IPDFdef1; + *table >> IPDFdef2; + *table >> IPDFdef3; + //printf(" * fastNLOCoefficients::Read(). IRef : %d, IScaleDep: %d, Nevt: %d, Npow: %d, NPDF: %d, NPDFDim: %d\n", IRef ,IScaleDep ,Nevt , Npow ,NPDF , NPDFDim ); + + if(IPDFdef1==0){ + for(int i=0;i<NSubproc;i++){ + // Missing: linear PDF combinations for IPDFdef1=0 + if(NPDF==1){ + }else{ + if(NPDF==2){ + } + } + } + } + //Nxtot1.resize(fNObsBins); + XNode1.resize(fNObsBins); + for(int i=0;i<fNObsBins;i++){ + int xtot; + *table >> xtot; + //*table >> Nxtot1[i]; + //XNode1[i].resize(Nxtot1[i]); + XNode1[i].resize(xtot); + for(int j=0;j<xtot;j++){ + *table >> XNode1[i][j]; + } + } + if(NPDFDim==2){ + //Nxtot2.resize(fNObsBins); + XNode2.resize(fNObsBins); + for(int i=0;i<fNObsBins;i++){ + int xtot; + *table >> xtot; + XNode2[i].resize(xtot); + //*table >> Nxtot2[i]; + //XNode2[i].resize(Nxtot2[i]); + for(int j=0;j<xtot;j++){ + *table >> XNode2[i][j]; + } + } + } + if(NFragFunc>0){ + Nztot.resize(fNObsBins); + ZNode.resize(fNObsBins); + for(int i=0;i<fNObsBins;i++){ + *table >> Nztot[i]; + ZNode[i].resize(Nztot[i]); + for(int j=0;j<Nztot[i];j++){ + *table >> ZNode[i][j]; + } + } + } + + *table >> NScales; + *table >> NScaleDim; + Iscale.resize(NScales); + for(int i=0;i<NScales;i++){ + *table >> Iscale[i]; + } + int NscaleDescript; + ScaleDescript.resize(NScaleDim); + for(int i=0;i<NScaleDim;i++){ + *table >> NscaleDescript; + ScaleDescript[i].resize(NscaleDescript); + table->getline(buffer,256); + for(int j=0;j<NscaleDescript;j++){ + table->getline(buffer,256); + ScaleDescript[i][j] = buffer; + // StripWhitespace(ScaleDescript[i][j]); + } + } + + + //! v2.1 store NScaleDep here. + //! v2.1 *table >> NScaleDep; + + if ( NScaleDep < 3 ) { + Nscalevar.resize(NScaleDim); + Nscalenode.resize(NScaleDim); + for(int i=0;i<NScaleDim;i++){ + *table >> Nscalevar[i]; + *table >> Nscalenode[i]; + } + + // printf(" * fastNLOCoefficients::Read().bins %d, NScalevar[0] %d, Nscalenode[0] %d, NScaleDim %d \n", + // fNObsBins, Nscalevar[0] , Nscalenode[0] , NScaleDim ); + + + ScaleFac.resize(NScaleDim); + for(int i=0;i<NScaleDim;i++){ + ScaleFac[i].resize(Nscalevar[i]); + for(int j=0;j<Nscalevar[i];j++){ + *table >> ScaleFac[i][j]; + } + } + + //printf(" * fastNLOCoefficients::Read().bins %d, NScalevar[0] %d, Nscalenode[0] %d, ScaleFac[0][0] %d, NScaleDim %d \n", + //fNObsBins, Nscalevar[0] , Nscalenode[0] , ScaleFac[0][0], NScaleDim ); + ResizeTable( &ScaleNode , fNObsBins, 1 , Nscalevar[0] , Nscalenode[0] ); // should work, since NScaleDim==1, but is not yet tested for 100% + int nsn = ReadTable ( &ScaleNode , table ); + //printf(" * fastNLOCoefficients::Read(). Read %d lines of ScaleNode.\n",nsn); + + int XmaxFromI[1] = {0}; + //printf(" &SigmaTilde %i %i %i *%i %i\n", + //fNObsBins, GetTotalScalevars(), GetTotalScalenodes(), XmaxFromI[0], NSubproc); + ResizeTable( &SigmaTilde , fNObsBins, GetTotalScalevars(), GetTotalScalenodes(), XmaxFromI, NSubproc ); + int nst = ReadTable ( &SigmaTilde , table ); + //printf(" * fastNLOCoefficients::Read(). Read %d lines of SigmaTilde.\n",nst); + printf(" * fastNLOCoefficients::Read(). Read %d lines of FASTNLO v2.0 tables.\n",nst+nsn); + + } + + + if ( NScaleDep >= 3 ) { + + // ---- order of reading... ---- // + // - nscalenode q2 + // - scalenode Q + // - nscalenode pt + // - scalenode pt + // - simgatilde mu indep + // - simgatilde mu_f dep + // - simgatilde mu_r dep + // - sigmarefmixed + // - sigmaref scale 1 + // - sigmaref scale 2 + // ------------------------------ // + int nn3 = 0; + + nn3 += ReadFlexibleVector ( &ScaleNode1 , table ); + nn3 += ReadFlexibleVector ( &ScaleNode2 , table ); + NscalenodeScale1 = ScaleNode1[0].size(); + NscalenodeScale2 = ScaleNode2[0].size(); + + nn3 += ReadFlexibleVector ( &SigmaTildeMuIndep , table , true ); + //if ( NScaleDep==3 || fScen->ILOord!=Npow || NScaleDep==5 ){ + if ( NScaleDep==3 || NScaleDep==5 ){ + //cout<<"Read NLO FlexTable. NScaleDep="<<NScaleDep<<"\tNpow="<<Npow<<"\tfScen->ILOord="<<fScen->ILOord<<endl; + nn3 += ReadFlexibleVector ( &SigmaTildeMuFDep , table , true ); + nn3 += ReadFlexibleVector ( &SigmaTildeMuRDep , table , true ); + } + nn3 += ReadFlexibleVector ( &SigmaRefMixed , table , true ); + nn3 += ReadFlexibleVector ( &SigmaRef_s1 , table , true ); + nn3 += ReadFlexibleVector ( &SigmaRef_s2 , table , true ); + +// *table >> NscalenodeScale1 ; +// ResizeTable( &ScaleNode1 , fNObsBins , NscalenodeScale1 ); +// nn3 += ReadTable ( &ScaleNode1 , table ); + +// *table >> NscalenodeScale2 ; +// ResizeTable( &ScaleNode2 , fNObsBins , NscalenodeScale2 ); +// nn3 += ReadTable ( &ScaleNode2 , table ); + +// int XMaxFromFromDim[1] = { 0 }; +// //ResizeTable( &PdfLcMuVar , fNObsBins , XMaxFromFromDim , NscalenodeScale1 , NscalenodeScale2 , NSubproc ); +// //ResizeTable( &AlphasTwoPi , fNObsBins , NscalenodeScale1 , NscalenodeScale2 ); + +// ResizeTable( &SigmaTildeMuIndep , fNObsBins , XMaxFromFromDim , NscalenodeScale1 , NscalenodeScale2 , NSubproc ); +// nn3 += ReadTable ( &SigmaTildeMuIndep , table ); + +// ResizeTable( &SigmaTildeMuFDep , fNObsBins , XMaxFromFromDim , NscalenodeScale1 , NscalenodeScale2 , NSubproc ); +// nn3 += ReadTable ( &SigmaTildeMuFDep , table ); + +// ResizeTable( &SigmaTildeMuRDep , fNObsBins , XMaxFromFromDim , NscalenodeScale1 , NscalenodeScale2 , NSubproc ); +// nn3 += ReadTable ( &SigmaTildeMuRDep , table ); + +// ResizeTable( &SigmaRefMixed , fNObsBins , NSubproc ); +// nn3 += ReadTable ( &SigmaRefMixed , table ); + +// ResizeTable( &SigmaRef_s1 , fNObsBins , NSubproc ); +// nn3 += ReadTable ( &SigmaRef_s1 , table ); + +// ResizeTable( &SigmaRef_s2 , fNObsBins , NSubproc ); +// nn3 += ReadTable ( &SigmaRef_s2 , table ); + printf(" * fastNLOCoefficients::Read(). Read %d lines of NScaleDep>=3 Tables.\n",nn3); + + } + + + }// end of not data and not corrections + + key = 0; + *table >> key; + if(key != tablemagicno){ + printf("fastNLOCoefficients::Read: At end of block found %d instead of %d.\n",key,tablemagicno); + printf(" You might have 'nan' in your table.\n"); + return 1; + }; + // Put magic number back + for(int i=0;i<(int)(log10((double)key)+1);i++){ + table->unget(); + } + return 0; +} + +int fastNLOCoefficients::Write(ostream *table, int option){ + *table << tablemagicno << sep; + *table << IXsectUnits << sep; + *table << IDataFlag << sep; + *table << IAddMultFlag << sep; + *table << IContrFlag1 << sep; + *table << IContrFlag2 << sep; + //KR: IContrFlag3 replaced by NScaleDep + //*table << IContrFlag3 << sep; // v2.0+. for v2.1 write IContrFlag3 here, but NScaleDep only later + if ( NScaleDep==3 ) { + if ( Npow==fILOord) { + cout<<" * Increase NScaleDep from 3 to 4, because LO!"<<endl; + NScaleDep=4; + } + else { + cout<<" * Increase NScaleDep from 3 to 5 because NLO!"<<endl; + NScaleDep=5; + } + } + *table << NScaleDep << sep; + *table << CtrbDescript.size() << sep; + //printf(" * fastNLOCoefficients::Write(). IDataFlag: %d, IAddMultFlag: %d, IContrFlag1: %d, IContrFlag2: %d, NScaleDep: %d\n", + //IDataFlag,IAddMultFlag,IContrFlag1,IContrFlag2,NScaleDep); + for(unsigned int i=0;i<CtrbDescript.size();i++){ + *table << CtrbDescript[i] << sep; + } + *table << CodeDescript.size() << sep; + for(unsigned int i=0;i<CodeDescript.size();i++){ + *table << CodeDescript[i] << sep; + } + + if(IDataFlag==1){ + *table << Nuncorrel << sep; + for(int i=0;i<Nuncorrel;i++){ + *table << UncDescr[i] << sep; + } + *table << Ncorrel << sep; + for(int i=0;i<Ncorrel;i++){ + *table << CorDescr[i] << sep; + } + for(int i=0;i<fNObsBins;i++){ + *table << Xcenter[i] << sep; + *table << Value[i] << sep; + for(int j=0;j<Nuncorrel;j++){ + *table << UncorLo[i][j] << sep; + *table << UncorHi[i][j] << sep; + } + for(int j=0;j<Ncorrel;j++){ + *table << CorrLo[i][j] << sep; + *table << CorrHi[i][j] << sep; + } + } + *table << NErrMatrix << sep; + for(int i=0;i<NErrMatrix;i++){ + for(int j=0;j<(int)pow((double)fNObsBins,2);j++){ + *table << matrixelement[i][j] << sep; + } + } + }// end of IDataFlag==1 + + cout<<" 3"<<endl; + if(IAddMultFlag==1){ + *table << Nuncorrel << sep; + for(int i=0;i<Nuncorrel;i++){ + *table << UncDescr[i] << sep; + } + *table << Ncorrel << sep; + for(int i=0;i<Ncorrel;i++){ + *table << CorDescr[i] << sep; + } + for(int i=0;i<fNObsBins;i++){ + *table << fact[i] << sep; + for(int j=0;j<Nuncorrel;j++){ + *table << UncorLo[i][j] << sep; + *table << UncorHi[i][j] << sep; + } + for(int j=0;j<Ncorrel;j++){ + *table << CorrLo[i][j] << sep; + *table << CorrHi[i][j] << sep; + } + } + }// end of IAddMultFlag==1 + + if(!(IDataFlag==1) && !(IAddMultFlag==1)){ + *table << IRef << sep; + *table << IScaleDep << sep; + *table << Nevt << sep; + *table << Npow << sep; + *table << NPDF << sep; + if(NPDF>0){ + for(int i=0;i<NPDF;i++){ + *table << NPDFPDG[i] << sep; + } + } + *table << NPDFDim << sep; + *table << NFragFunc << sep; + if(NFragFunc>0){ + for(int i=0;i<NFragFunc;i++){ + *table << NFFPDG[i] << sep; + } + } + *table << NFFDim << sep; + *table << NSubproc << sep; + *table << IPDFdef1 << sep; + *table << IPDFdef2 << sep; + *table << IPDFdef3 << sep; + if(IPDFdef1==0){ + for(int i=0;i<NSubproc;i++){ + // Missing: linear PDF combinations for IPDFdef1=0 + if(NPDF==1){ + }else{ + if(NPDF==2){ + } + } + } + } + for(int i=0;i<fNObsBins;i++){ + *table << XNode1[i].size() << sep; + for(unsigned int j=0;j<XNode1[i].size();j++){ + *table << XNode1[i][j] << sep; + } + } + if(NPDFDim==2){ + for(int i=0;i<fNObsBins;i++){ + *table << XNode2[i].size() << sep; + for(unsigned int j=0;j<XNode2[i].size();j++){ + *table << XNode2[i][j] << sep; + } + } + } + cout<<" 10"<<endl; + if(NFragFunc>0){ + for(int i=0;i<fNObsBins;i++){ + *table << Nztot[i] << sep; + for(int j=0;j<Nztot[i];j++){ + *table << ZNode[i][j] << sep; + } + } + } + *table << NScales << sep; + *table << NScaleDim << sep; + for(int i=0;i<NScales;i++){ + *table << Iscale[i] << sep; + } + for(int i=0;i<NScaleDim;i++){ + *table << ScaleDescript[i].size() << sep; + for(unsigned int j=0;j<ScaleDescript[i].size();j++){ + *table << ScaleDescript[i][j] << sep; + } + } + + //! v2.1 store NScaleDep here + //! *table << NScaleDep << sep; + cout<<"fastNLOCoefficients. Writing coefficients."<<endl; + + if ( NScaleDep<3 ){ + for(int i=0;i<NScaleDim;i++){ + *table << Nscalevar[i] << sep; + *table << Nscalenode[i] << sep; + } + for(int i=0;i<NScaleDim;i++){ + for(int j=0;j<Nscalevar[i];j++){ + *table << ScaleFac[i][j] << sep; + } + } + + int nsn = WriteTable( &ScaleNode , table ); + //printf(" * fastNLOCoefficients::Write(). Wrote %d lines of ScaleNode.\n",nsn); + int nst = WriteTable( &SigmaTilde , table , (bool)(option & DividebyNevt) , Nevt ); + //printf(" * fastNLOCoefficients::Write(). Wrote %d lines of SigmaTilde.\n",nst); + printf(" * fastNLOCoefficients::Write(). Wrote %d lines of FASTNLO v2.0 tables.\n",nst+nsn); + + + } // end if NScaleDep !=3. + + if ( NScaleDep>=3 ) { + int nn3 = 0; + + nn3 += WriteFlexibleTable( &ScaleNode1 , table ); + nn3 += WriteFlexibleTable( &ScaleNode2 , table ); + nn3 += WriteFlexibleTable( &SigmaTildeMuIndep, table , (bool)(option & DividebyNevt) , Nevt , true ); + //if ( NScaleDep==3 || Npow!=fScen->ILOord || NScaleDep==5) { + if ( NScaleDep==3 || NScaleDep==5) { + //cout<<"Write NLO FlexTable. NScaleDep="<<NScaleDep<<"\tNpow="<<Npow<<"\tfScen->ILOord="<<fScen->ILOord<<endl; + nn3 += WriteFlexibleTable( &SigmaTildeMuFDep , table , (bool)(option & DividebyNevt) , Nevt , true ); + nn3 += WriteFlexibleTable( &SigmaTildeMuRDep , table , (bool)(option & DividebyNevt) , Nevt , true ); + } + nn3 += WriteFlexibleTable( &SigmaRefMixed , table , (bool)(option & DividebyNevt) , Nevt , true ); + nn3 += WriteFlexibleTable( &SigmaRef_s1 , table , (bool)(option & DividebyNevt) , Nevt , true ); + nn3 += WriteFlexibleTable( &SigmaRef_s2 , table , (bool)(option & DividebyNevt) , Nevt , true ); + +// *table << NscalenodeScale1 << sep; +// nn3 += WriteTable( &ScaleNode1 , table ); + +// *table << NscalenodeScale2 << sep; +// nn3 += WriteTable( &ScaleNode2 , table ); + +// nn3 += WriteTable( &SigmaTildeMuIndep, table , (bool)(option & DividebyNevt) , Nevt ); +// nn3 += WriteTable( &SigmaTildeMuFDep , table , (bool)(option & DividebyNevt) , Nevt ); +// nn3 += WriteTable( &SigmaTildeMuRDep , table , (bool)(option & DividebyNevt) , Nevt ); + +// nn3 += WriteTable( &SigmaRefMixed , table , (bool)(option & DividebyNevt) , Nevt ); +// nn3 += WriteTable( &SigmaRef_s1 , table , (bool)(option & DividebyNevt) , Nevt ); +// nn3 += WriteTable( &SigmaRef_s2 , table , (bool)(option & DividebyNevt) , Nevt ); + + printf(" * fastNLOCoefficients::Write(). Wrote %d lines of v2.1 Tables.\n",nn3); + + } // if(NScaleDep==3) + }// end of not data and not corrections + + return 0; +} + +int fastNLOCoefficients::Copy(fastNLOCoefficients* other){ + + streambuf* streambuf = new stringbuf(ios_base::in | ios_base::out); + iostream* buffer = new iostream(streambuf); + other->Write(buffer); + *buffer << tablemagicno << endl; + this->Read(buffer); + delete buffer; + delete streambuf; + + return(0); +} + +void fastNLOCoefficients::Add(fastNLOCoefficients* other){ + double w1 = (double)Nevt / (Nevt+other->Nevt); + double w2 = (double)other->Nevt / (Nevt+other->Nevt); + Nevt += other->Nevt; + + if ( NScaleDep<3 ){ + AddTableToAnotherTable( &SigmaTilde , &(other->SigmaTilde) ,w1 , w2 ); + } + + if ( NScaleDep >= 3 ){ + AddTableToAnotherTable( &SigmaTildeMuIndep , &(other->SigmaTildeMuIndep) ,w1 , w2 ); + //if ( NScaleDep==3 || NScaleDep==5 || fScen->ILOord!=Npow) { + if ( NScaleDep==3 || NScaleDep==5 ) { + //cout<<"Adding NLO table"<<endl; + AddTableToAnotherTable( &SigmaTildeMuFDep , &(other->SigmaTildeMuFDep) ,w1 , w2 ); + AddTableToAnotherTable( &SigmaTildeMuRDep , &(other->SigmaTildeMuRDep) ,w1 , w2 ); + } + AddTableToAnotherTable( &SigmaRefMixed , &(other->SigmaRefMixed) ,w1 , w2 ); + AddTableToAnotherTable( &SigmaRef_s1 , &(other->SigmaRef_s1) ,w1 , w2 ); + AddTableToAnotherTable( &SigmaRef_s2 , &(other->SigmaRef_s2) ,w1 , w2 ); + } + +} + +void fastNLOCoefficients::StripWhitespace(string &str) const { + for(string::iterator achar = str.end(); achar>str.begin();achar--) { + if (*achar==0x20 || *achar==0x00){ + str.erase(achar); + }else{ + break; + } + } +} + +int fastNLOCoefficients::GetNxmax(int i) const { + int nxmax = 0; + switch (NPDFDim) { + case 0: nxmax = (int)XNode1[i].size(); + break; + // case 1: nxmax = ((int)pow((double)Nxtot1[i],2)+Nxtot1[i])/2; + case 1: nxmax = ((int)pow((double)XNode1[i].size(),2)+XNode1[i].size())/2; + break; + case 2: nxmax = XNode1[i].size()*XNode2[i].size(); + break; + default: ; + } + return nxmax; +}; + +int fastNLOCoefficients::GetXIndex(int Obsbin,int x1bin,int x2bin) const { + int xbin = 0; + switch (NPDFDim) { + case 0: xbin = x1bin; // linear + break; + case 1: xbin = x1bin + (x2bin*(x2bin+1)/2); // half matrix + break; + case 2: xbin = x1bin + x2bin * XNode1[Obsbin].size(); // full matrix + break; + default: ; + } + return xbin; +}; + + + +int fastNLOCoefficients::GetTotalScalevars() const { + int totalscalevars=1; + for(int scaledim=0;scaledim<NScaleDim;scaledim++){ + totalscalevars *= Nscalevar[scaledim]; + } + return totalscalevars; +} + +int fastNLOCoefficients::GetTotalScalenodes() const { + int totalscalenodes=1; + for(int scaledim=0;scaledim<NScaleDim;scaledim++){ + totalscalenodes *= Nscalenode[scaledim]; + } + return totalscalenodes; +} + + +//________________________________________________________________________________________________________________ // +void fastNLOCoefficients::ResizeTable(vector<vector<vector<vector<vector<vector<vector<double > > > > > > >* v, int dim0 , int dim1, int dim2, int dim3, int dim4, int* dim5GetNxmaxFromDimI , int dim6 ){ + if ( dim0 > 0 ){ + if ( dim5GetNxmaxFromDimI[0] == 0 ) { + v->resize(dim0); + for ( int i= 0 ; i<dim0 ; i++){ + ResizeTable( &(v->at(i)) , dim1, dim2, dim3, dim4, GetNxmax(i), dim6 ); + } + } + else if ( dim5GetNxmaxFromDimI[0] != 0 ){ + cout << "Error in Resize Table. This is not yet implemented" << endl; + exit(1); + } + } else{ + cout << "Error in Resize Table." << endl; + exit(1); + } + +} + + +//________________________________________________________________________________________________________________ // +void fastNLOCoefficients::ResizeTable(vector<vector<vector<vector<vector<vector<vector<double > > > > > > >* v, int dim0 , int dim1, int dim2, int dim3, int dim4, int dim5, int dim6 ){ + if ( dim0 > 0 ){ + v->resize(dim0); + for ( int i= 0 ; i<dim0 ; i++){ + ResizeTable( &(v->at(i)) , dim1, dim2, dim3, dim4, dim5, dim6 ); + } + } else{ + cout << "Error in Resize Table." << endl; + exit(1); + } +} + + +//________________________________________________________________________________________________________________ // +void fastNLOCoefficients::ResizeTable( vector<vector<vector<vector<vector<vector<double > > > > > >* v, int dim0 , int dim1, int dim2, int dim3, int dim4, int dim5 ){ + if ( dim0 > 0 ){ + v->resize(dim0); + for ( int i= 0 ; i<dim0 ; i++){ + ResizeTable( &(v->at(i)) , dim1, dim2, dim3, dim4, dim5 ); + } + } else { + cout << "Error in Resize Table." << endl; + exit(1); + } +} + + +//________________________________________________________________________________________________________________ // +void fastNLOCoefficients::ResizeTable( vector<vector<vector<vector<vector<double > > > > >* v, int dim0 , int dim1, int dim2, int* dim3GetNxmaxFromDimI, int dim4 ){ + if ( dim0 > 0 ){ + if ( dim3GetNxmaxFromDimI[0] == 0 ) { + v->resize(dim0); + for ( int i= 0 ; i<dim0 ; i++){ + ResizeTable( &(v->at(i)) , dim1, dim2, GetNxmax(i), dim4 ); + } + } + else if ( dim3GetNxmaxFromDimI[0] != 0 ){ + cout << "Error in Resize Table. This is not yet implemented" << endl; + exit(1); + } + } else{ + cout << "Error in Resize Table." << endl; + exit(1); + } +} + + +//________________________________________________________________________________________________________________ // +void fastNLOCoefficients::ResizeTable( vector<vector<vector<vector<vector<double > > > > >* v, int dim0 , int* dim1GetNxmaxFromDimI, int dim2, int dim3, int dim4 ){ + if ( dim0 > 0 ){ + if ( dim1GetNxmaxFromDimI[0] == 0 ) { + v->resize(dim0); + for ( int i= 0 ; i<dim0 ; i++){ + ResizeTable( &(v->at(i)) , GetNxmax(i), dim2, dim3, dim4 ); + } + } + else if ( dim1GetNxmaxFromDimI[0] != 0 ){ + cout << "Error in Resize Table. This is not yet implemented" << endl; + exit(1); + } + } else{ + cout << "Error in Resize Table." << endl; + exit(1); + } + +} + + +//________________________________________________________________________________________________________________ // +void fastNLOCoefficients::ResizeTable( vector<vector<vector<vector<vector<double > > > > >* v, int dim0 , int dim1, int dim2, int dim3, int dim4 ){ + if ( dim0 > 0 ){ + v->resize(dim0); + for ( int i= 0 ; i<dim0 ; i++){ + ResizeTable( &(v->at(i)) , dim1, dim2, dim3, dim4 ); + } + } else { + cout << "Error in Resize Table." << endl; + exit(1); + } +} + + +//________________________________________________________________________________________________________________ // +void fastNLOCoefficients::ResizeTable( vector<vector<vector<vector<double > > > >* v, int dim0 , int dim1, int* dim2GetNxmaxFromDimI, int dim3 ){ + if ( dim0 > 0 ){ + if ( dim2GetNxmaxFromDimI[0] == 0 ) { + v->resize(dim0); + for ( int i= 0 ; i<dim0 ; i++){ + ResizeTable( &(v->at(i)) , dim1, GetNxmax(i), dim3 ); + } + } + else if ( dim2GetNxmaxFromDimI[0] != 0 ){ + cout << "Error in Resize Table. This is not yet implemented" << endl; + exit(1); + } + } else{ + cout << "Error in Resize Table." << endl; + exit(1); + } + +} + + +//________________________________________________________________________________________________________________ // +void fastNLOCoefficients::ResizeTable( vector<vector<vector<vector<double > > > >* v, int dim0 , int dim1, int dim2, int dim3 ){ + if ( dim0 > 0 ){ + v->resize(dim0); + for ( int i= 0 ; i<dim0 ; i++){ + ResizeTable( &(v->at(i)) , dim1, dim2, dim3 ); + } + } else { + cout << "Error in Resize Table." << endl; + exit(1); + } +} + + +//________________________________________________________________________________________________________________ // +void fastNLOCoefficients::ResizeTable( vector<vector<vector<double > > >* v, int dim0 , int* dim1GetNxmaxFromDimI, int dim2 ){ + if ( dim0 > 0 ){ + if ( dim1GetNxmaxFromDimI[0] == 0 ) { + v->resize(dim0); + for ( int i= 0 ; i<dim0 ; i++){ + ResizeTable( &(v->at(i)) , GetNxmax(i), dim2 ); + } + } + else if ( dim1GetNxmaxFromDimI[0] != 0 ){ + cout << "Error in Resize Table. This is not yet implemented" << endl; + exit(1); + } + } else{ + cout << "Error in Resize Table." << endl; + exit(1); + } + +} + + +//________________________________________________________________________________________________________________ // +void fastNLOCoefficients::ResizeTable( vector<vector<vector<double > > >* v, int dim0 , int dim1, int dim2 ){ + if ( dim0 > 0 ){ + v->resize(dim0); + for ( int i= 0 ; i<dim0 ; i++){ + ResizeTable( &(v->at(i)) , dim1, dim2 ); + } + } else { + cout << "Error in Resize Table." << endl; + exit(1); + } +} + + +//________________________________________________________________________________________________________________ // +void fastNLOCoefficients::ResizeTable( vector<vector<double > >* v, int dim0 , int* dim1GetNxmaxFromDimI ){ + if ( dim0 > 0 ){ + if ( dim1GetNxmaxFromDimI[0] == 0 ) { + v->resize(dim0); + for ( int i= 0 ; i<dim0 ; i++){ + ResizeTable( &(v->at(i)) , GetNxmax(i) ); + } + } + else if ( dim1GetNxmaxFromDimI[0] != 0 ){ + cout << "Error in Resize Table. This is not yet implemented" << endl; + exit(1); + } + } else{ + cout << "Error in Resize Table." << endl; + exit(1); + } +} + + +//________________________________________________________________________________________________________________ // +void fastNLOCoefficients::ResizeTable( vector<vector<double > >* v, int dim0 , int dim1 ){ + if ( dim0 > 0 ){ + v->resize(dim0); + for ( int i= 0 ; i<dim0 ; i++){ + ResizeTable( &(v->at(i)) , dim1 ); + } + } else { + cout << "Error in Resize Table." << endl; + exit(1); + } +} + + +//________________________________________________________________________________________________________________ // +void fastNLOCoefficients::ResizeTable( vector<double >* v, int dim0 ){ + if ( dim0 > 0 ){ + v->resize(dim0); + } + else{ + cout << "Error in Resize Table." << endl; + exit(1); + } +} + + + +//________________________________________________________________________________________________________________ // +int fastNLOCoefficients::ReadTable(vector<double >* v, istream *table ){ + int nn = 0; + for(unsigned int i0=0;i0<v->size();i0++){ + *table >> v->at(i0); + nn++; + } + return nn; +} + + +//________________________________________________________________________________________________________________ // +int fastNLOCoefficients::WriteTable(vector<vector<vector<vector<vector<vector<vector<double > > > > > > >* v, ostream *table , bool DivByNevt , int Nevt ){ + int nn = 0; + for(unsigned int i0=0;i0<v->size();i0++){ + for(unsigned int i1=0;i1<v->at(i0).size();i1++){ + for(unsigned int i2=0;i2<v->at(i0)[i1].size();i2++){ + for(unsigned int i3=0;i3<v->at(i0)[i1][i2].size();i3++){ + for(unsigned int i4=0;i4<v->at(i0)[i1][i2][i3].size();i4++){ + for(unsigned int i5=0;i5<v->at(i0)[i1][i2][i3][i4].size();i5++){ + for(unsigned int i6=0;i6<v->at(i0)[i1][i2][i3][i4][i5].size();i6++){ + if( DivByNevt && Nevt>0){ + *table << v->at(i0)[i1][i2][i3][i4][i5][i6] / Nevt << sep; + }else{ + *table << v->at(i0)[i1][i2][i3][i4][i5][i6] << sep; + } + nn++; + } + } + } + } + } + } + } + return nn; +} + +//________________________________________________________________________________________________________________ // +int fastNLOCoefficients::WriteTable(vector<vector<vector<vector<vector<vector<double > > > > > >* v, ostream *table , bool DivByNevt , int Nevt ){ + int nn = 0; + for(unsigned int i0=0;i0<v->size();i0++){ + for(unsigned int i1=0;i1<v->at(i0).size();i1++){ + for(unsigned int i2=0;i2<v->at(i0)[i1].size();i2++){ + for(unsigned int i3=0;i3<v->at(i0)[i1][i2].size();i3++){ + for(unsigned int i4=0;i4<v->at(i0)[i1][i2][i3].size();i4++){ + for(unsigned int i5=0;i5<v->at(i0)[i1][i2][i3][i4].size();i5++){ + if( DivByNevt && Nevt>0){ + *table << v->at(i0)[i1][i2][i3][i4][i5] / Nevt << sep; + }else{ + *table << v->at(i0)[i1][i2][i3][i4][i5] << sep; + } + nn++; + } + } + } + } + } + } + return nn; +} + +//________________________________________________________________________________________________________________ // +int fastNLOCoefficients::WriteTable(vector<vector<vector<vector<vector<double > > > > >* v, ostream *table , bool DivByNevt , int Nevt ){ + int nn = 0; + for(unsigned int i0=0;i0<v->size();i0++){ + for(unsigned int i1=0;i1<v->at(i0).size();i1++){ + for(unsigned int i2=0;i2<v->at(i0)[i1].size();i2++){ + for(unsigned int i3=0;i3<v->at(i0)[i1][i2].size();i3++){ + for(unsigned int i4=0;i4<v->at(i0)[i1][i2][i3].size();i4++){ + if( DivByNevt && Nevt>0){ + *table << v->at(i0)[i1][i2][i3][i4] / Nevt << sep; + }else{ + *table << v->at(i0)[i1][i2][i3][i4] << sep; + } + nn++; + } + } + } + } + } + return nn; +} + +//________________________________________________________________________________________________________________ // +int fastNLOCoefficients::WriteTable(vector<vector<vector<vector<double > > > >* v, ostream *table , bool DivByNevt , int Nevt ){ + int nn = 0; + for(unsigned int i0=0;i0<v->size();i0++){ + for(unsigned int i1=0;i1<v->at(i0).size();i1++){ + for(unsigned int i2=0;i2<v->at(i0)[i1].size();i2++){ + for(unsigned int i3=0;i3<v->at(i0)[i1][i2].size();i3++){ + if( DivByNevt && Nevt>0){ + *table << v->at(i0)[i1][i2][i3] / Nevt << sep; + }else{ + *table << v->at(i0)[i1][i2][i3] << sep; + } + nn++; + } + } + } + } + return nn; +} + +//________________________________________________________________________________________________________________ // +int fastNLOCoefficients::WriteTable(vector<vector<vector<double > > >* v, ostream *table , bool DivByNevt , int Nevt ){ + int nn = 0; + for(unsigned int i0=0;i0<v->size();i0++){ + for(unsigned int i1=0;i1<v->at(i0).size();i1++){ + for(unsigned int i2=0;i2<v->at(i0)[i1].size();i2++){ + if( DivByNevt && Nevt>0){ + *table << v->at(i0)[i1][i2] / Nevt << sep; + }else{ + *table << v->at(i0)[i1][i2] << sep; + } + nn++; + } + } + } + return nn; +} + +//________________________________________________________________________________________________________________ // +int fastNLOCoefficients::WriteTable(vector<vector<double > >* v, ostream *table , bool DivByNevt , int Nevt ){ + int nn = 0; + for(unsigned int i0=0;i0<v->size();i0++){ + for(unsigned int i1=0;i1<v->at(i0).size();i1++){ + if( DivByNevt && Nevt>0){ + *table << v->at(i0)[i1] / Nevt << sep; + }else{ + *table << v->at(i0)[i1] << sep; + } + nn++; + } + } + return nn; +} + + + +//________________________________________________________________________________________________________________ // +int fastNLOCoefficients::WriteTable(vector<double >* v, ostream *table , bool DivByNevt , int Nevt ){ + int nn = 0; + for(unsigned int i0=0;i0<v->size();i0++){ + if( DivByNevt && Nevt>0){ + *table << v->at(i0) / Nevt << sep; + }else{ + *table << v->at(i0) << sep; + } + nn++; + } + return nn; +} + + +//________________________________________________________________________________________________________________ // +int fastNLOCoefficients::WriteFlexibleTable(vector<vector<vector<vector<vector<vector<vector< double > > > > > > >* v, ostream *table , bool DivByNevt , int Nevt , bool nProcLast ){ + int nn = 1; + *table << v->size() << sep; + for(unsigned int i0=0;i0<v->size();i0++){ + nn += WriteFlexibleTable( &(v->at(i0)) , table , DivByNevt, Nevt , nProcLast ); + } + return nn; +} +//________________________________________________________________________________________________________________ // +int fastNLOCoefficients::WriteFlexibleTable(vector<vector<vector<vector<vector<vector<double > > > > > >* v, ostream *table , bool DivByNevt , int Nevt , bool nProcLast ){ + int nn = 1; + *table << v->size() << sep; + for(unsigned int i0=0;i0<v->size();i0++){ + nn += WriteFlexibleTable( &(v->at(i0)) , table , DivByNevt, Nevt , nProcLast ); + } + return nn; +} +//________________________________________________________________________________________________________________ // +int fastNLOCoefficients::WriteFlexibleTable(vector<vector<vector<vector<vector<double > > > > >* v, ostream *table , bool DivByNevt , int Nevt , bool nProcLast ){ + int nn = 1; + *table << v->size() << sep; + for(unsigned int i0=0;i0<v->size();i0++){ + nn += WriteFlexibleTable( &(v->at(i0)) , table , DivByNevt, Nevt , nProcLast ); + } + return nn; +} +//________________________________________________________________________________________________________________ // +int fastNLOCoefficients::WriteFlexibleTable(vector<vector<vector<vector<double > > > >* v, ostream *table , bool DivByNevt , int Nevt , bool nProcLast ){ + int nn = 1; + *table << v->size() << sep; + for(unsigned int i0=0;i0<v->size();i0++){ + nn += WriteFlexibleTable( &(v->at(i0)) , table , DivByNevt, Nevt , nProcLast ); + } + return nn; +} +//________________________________________________________________________________________________________________ // +int fastNLOCoefficients::WriteFlexibleTable(vector<vector<vector<double > > >* v, ostream *table , bool DivByNevt , int Nevt , bool nProcLast ){ + int nn = 1; + *table << v->size() << sep; + for(unsigned int i0=0;i0<v->size();i0++){ + nn += WriteFlexibleTable( &(v->at(i0)) , table , DivByNevt, Nevt , nProcLast ); + } + return nn; +} +//________________________________________________________________________________________________________________ // +int fastNLOCoefficients::WriteFlexibleTable(vector<vector<double > >* v, ostream *table , bool DivByNevt , int Nevt , bool nProcLast ){ + int nn = 1; + *table << v->size() << sep; + for(unsigned int i0=0;i0<v->size();i0++){ + nn += WriteFlexibleTable( &(v->at(i0)) , table , DivByNevt, Nevt , nProcLast ); + } + return nn; +} + +//________________________________________________________________________________________________________________ // +int fastNLOCoefficients::WriteFlexibleTable(vector<double >* v, ostream *table , bool DivByNevt , int Nevt , bool nProcLast ){ + int nn = 1; + if ( !nProcLast )*table << v->size() << sep; + for(unsigned int i0=0;i0<v->size();i0++){ + if( DivByNevt && Nevt>0) *table << v->at(i0) / Nevt << sep; + else *table << v->at(i0) << sep; + nn++; + } + return nn; +} + +//________________________________________________________________________________________________________________ // +int fastNLOCoefficients::ReadFlexibleVector(vector<double >* v, istream *table , bool nProcLast ){ + int nn = 0; + if ( !nProcLast ) { + int size = 0; + *table >> size; nn++; + v->resize(size); + } + else { + v->resize(NSubproc); + } + for(unsigned int i0=0;i0<v->size();i0++){ + *table >> v->at(i0); + nn++; + } + return nn; +} + + + +//________________________________________________________________________________________________________________ // +void fastNLOCoefficients::AddTableToAnotherTable( vector<vector<vector<vector<vector<vector<vector<double > > > > > > >* vSum, vector<vector<vector<vector<vector<vector<vector<double > > > > > > >* vAdd, double w1, double w2){ + if ( vSum->size() != vAdd->size() ) {cout<<"Error in fastNLOCoefficients::AddTableToAnotherTable. Cannot add tables with different size. [v7] s1="<<vSum->size()<<", s2="<<vAdd->size()<<endl; return;} + for ( unsigned int i = 0 ; i<vSum->size() ; i++ ){ + AddTableToAnotherTable( &(vSum->at(i)), &(vAdd->at(i)), w1 , w2 ); + } +} + + +//________________________________________________________________________________________________________________ // +void fastNLOCoefficients::AddTableToAnotherTable( vector<vector<vector<vector<vector<vector<double > > > > > >* vSum, vector<vector<vector<vector<vector<vector<double > > > > > >* vAdd, double w1, double w2){ + + if ( vSum->size() != vAdd->size() ) {cout<<"Error in fastNLOCoefficients::AddTableToAnotherTable. Cannot add tables with different size. [v6] s1="<<vSum->size()<<", s2="<<vAdd->size()<<endl; return;} + for ( unsigned int i = 0 ; i<vSum->size() ; i++ ){ + AddTableToAnotherTable( &(vSum->at(i)), &(vAdd->at(i)), w1 , w2 ); + } +} + +//________________________________________________________________________________________________________________ // + + +void fastNLOCoefficients::AddTableToAnotherTable( vector<vector<vector<vector<vector<double > > > > >* vSum, vector<vector<vector<vector<vector<double > > > > >* vAdd, double w1, double w2){ + if ( vSum->size() != vAdd->size() ) {cout<<"Error in fastNLOCoefficients::AddTableToAnotherTable. Cannot add tables with different size. [v5] s1="<<vSum->size()<<", s2="<<vAdd->size()<<endl; return;} + for ( unsigned int i = 0 ; i<vSum->size() ; i++ ){ + AddTableToAnotherTable( &(vSum->at(i)), &(vAdd->at(i)), w1 , w2 ); + } +} + + +//________________________________________________________________________________________________________________ // +void fastNLOCoefficients::AddTableToAnotherTable( vector<vector<vector<vector<double > > > >* vSum, vector<vector<vector<vector<double > > > >* vAdd, double w1, double w2){ + if ( vSum->size() != vAdd->size() ) {cout<<"Error in fastNLOCoefficients::AddTableToAnotherTable. Cannot add tables with different size. [v4] s1="<<vSum->size()<<", s2="<<vAdd->size()<<endl; return;} + for ( unsigned int i = 0 ; i<vSum->size() ; i++ ){ + AddTableToAnotherTable( &(vSum->at(i)), &(vAdd->at(i)), w1 , w2 ); + } +} + +//________________________________________________________________________________________________________________ // + +void fastNLOCoefficients::AddTableToAnotherTable( vector<vector<vector<double > > >* vSum, vector<vector<vector<double > > >* vAdd, double w1, double w2){ + + if ( vSum->size() != vAdd->size() ) {cout<<"Error in fastNLOCoefficients::AddTableToAnotherTable. Cannot add tables with different size. [v3] s1="<<vSum->size()<<", s2="<<vAdd->size()<<endl; return;} + for ( unsigned int i = 0 ; i<vSum->size() ; i++ ){ + AddTableToAnotherTable( &(vSum->at(i)), &(vAdd->at(i)), w1 , w2 ); + } +} + + +//________________________________________________________________________________________________________________ // +void fastNLOCoefficients::AddTableToAnotherTable( vector<vector<double > >* vSum, vector<vector<double > >* vAdd, double w1, double w2){ + if ( vSum->size() != vAdd->size() ) {cout<<"Error in fastNLOCoefficients::AddTableToAnotherTable. Cannot add tables with different size. [v2] s1="<<vSum->size()<<", s2="<<vAdd->size()<<endl; return;} + for ( unsigned int i = 0 ; i<vSum->size() ; i++ ){ + AddTableToAnotherTable( &(vSum->at(i)), &(vAdd->at(i)), w1 , w2 ); + } +} + + +//________________________________________________________________________________________________________________ // +void fastNLOCoefficients::AddTableToAnotherTable( vector<double >* vSum, vector<double >* vAdd, double w1, double w2){ + if ( vSum->size() != vAdd->size() ) {cout<<"Error in fastNLOCoefficients::AddTableToAnotherTable. Cannot add tables with different size. [v1] s1="<<vSum->size()<<", s2="<<vAdd->size()<<endl; return;} + for ( unsigned int i = 0 ; i<vSum->size() ; i++ ){ + (*vSum)[i] = w1*(*vSum)[i] + w2*(*vAdd)[i]; + } +} + + + +//________________________________________________________________________________________________________________ // + + +void fastNLOCoefficients::SetNlojetDefaults(){ + SetIDataFlag(0); + SetIAddMultFlag(0); + SetIContrFlag1(1); + SetIContrFlag2(100); // specify if LO or NLO + SetNScaleDep(0); + SetIXsectUnits(12); + SetNlojetDescr(); +}; + + +void fastNLOCoefficients::Print() const { + printf("\n **************** FastNLO Table: BlockB ****************\n\n"); + printf(" B Scenario::GetNObsBin() %d\n",fNObsBins); + printf(" B IXsectUnits %d\n",IXsectUnits); + printf(" B IDataFlag %d\n",IDataFlag); + printf(" B IAddMultFlag %d\n",IAddMultFlag); + printf(" B IContrFlag1 %d\n",IContrFlag1); + printf(" B IContrFlag2 %d\n",IContrFlag2); + // printf(" B IContrFlag3 (always 0) %d\n",IContrFlag3); + printf(" B NScaleDep %d\n",NScaleDep); + for(unsigned int i=0;i<CtrbDescript.size();i++){ + printf(" B CtrbDescript[%d] %s\n",i,CtrbDescript[i].data()); + } + //printf(" B NCodeDescr %d\n",NCodeDescr); + for(unsigned int i=0;i<CodeDescript.size();i++){ + printf(" B CodeDescript[%d] %s\n",i,CodeDescript[i].data()); + } + + if(IDataFlag==1){ + printf(" B Nuncorrel %d\n",Nuncorrel); + printf(" B Ncorrel %d\n",Ncorrel); + printf(" B NErrMatrix %d\n",NErrMatrix); + printf(" B some more output could be printed here (IDataFlag==1).\n"); + } + if(IAddMultFlag==1){ + printf(" B some more output could be printed here (IAddMultFlag==1).\n"); + } + + if(!(IDataFlag==1) && !(IAddMultFlag==1)){ // that's the usual case + printf(" B IRef %d\n",IRef); + printf(" B IScaleDep %d\n",IScaleDep); + printf(" B Nevt %llu\n",Nevt); + printf(" B Npow %d\n",Npow); + printf(" B NPDF %d\n",NPDF); + if(NPDF>0){ + for(int i=0;i<NPDF;i++){ + printf(" B - NPDFPDG[%d] %d\n",i,NPDFPDG[i]); + } + } + printf(" B NPDFDim %d\n",NPDFDim); + printf(" B NFragFunc %d\n",NFragFunc); + if(NFragFunc>0){ + for(int i=0;i<NFragFunc;i++){ + printf(" B - NFFPDG[%d] %d\n",i,NFFPDG[i]); + } + } + printf(" B NFFDim %d\n",NFFDim); + printf(" B NSubproc %d\n",NSubproc); + printf(" B IPDFdef1 %d\n",IPDFdef1); + printf(" B IPDFdef2 %d\n",IPDFdef2); + printf(" B IPDFdef3 %d\n",IPDFdef3); + printf(" B Nxtot1[0-%d] ",fNObsBins); + for(int i=0;i<fNObsBins;i++){ + printf("%lu ,",XNode1[i].size()); + } + printf(" B \n"); + +// for(int i=0;i<fNObsBins;i++){ +// printf(" B XNode1[%d] ",i); +// for(int j=0;j<Nxtot1[i];j++){ +// printf(" B %8.4f ,",XNode1[i][j]); +// } +// printf(" B \n"); +// } + printf(" B if (NPDFDim==2), you could print xnodes2 here. (NPDFDim = %d)\n",NPDFDim); + printf(" B if (NFragFunc>0), you could print xnodes2 here. (NFragFunc = %d)\n",NFragFunc); + printf(" B NScales %d\n",NScales); + for(int i=0;i<NScales;i++){ + printf(" B - Iscale[%d] %d\n",i,Iscale[i]); + } + printf(" B NScaleDim %d\n",NScaleDim); + for(int i=0;i<NScaleDim;i++){ + //printf(" B - NscaleDescript[%d] %d\n",i,NscaleDescript[i]); + for(unsigned int j=0;j<ScaleDescript[i].size();j++){ + printf(" B - - ScaleDescript[%d][%d] %s\n",i,j,ScaleDescript[i][j].data()); + } + if ( NScaleDep<3 ) { + printf(" B - Nscalenode[%d] %d\n",i,Nscalenode[i]); + printf(" B - Nscalevar[%d] %d\n",i,Nscalevar[i]); + for(int j=0;j<Nscalevar[i];j++){ + printf(" B - - ScaleFac[%d][%d] %6.4f\n",i,j,ScaleFac[i][j]); + } + } + } + printf(" B No printing of ScaleNode implemented yet.\n"); + printf(" B No printing of SigmaTilde implemented yet.\n"); + if ( NScaleDep == 2 ) + printf(" B NScaleDep == 2 : yes.\n"); + if ( NScaleDep == 2 ) { + printf(" B No printing of SigmaTilde2Scales, and Scale2Nodes, etc... implemented yet.\n"); + } + if ( NScaleDep>=3 ) { + printf(" B NscalenodeScale1 %d\n",NscalenodeScale1); + printf(" B NscalenodeScale2 %d\n",NscalenodeScale2); + } + + } + printf("\n *******************************************************\n\n"); + + +} + + +//________________________________________________________________________________________________________________ // diff --git a/v2.6/toolkit/fastnlotoolkit/fastNLOCreate.cc b/v2.6/toolkit/fastnlotoolkit/fastNLOCreate.cc new file mode 100644 index 0000000000000000000000000000000000000000..02c40813e77f40ca3e12c19f1bbf739cf0497cfc --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/fastNLOCreate.cc @@ -0,0 +1,4547 @@ +// Author: Daniel Britzger +// DESY, 29/07/2013 +// ___________________________________________________________________________________________________ +//! The fastNLOCreate class +/*! + This class can generate/fill one single contribution for a fastNLO table. + It supports fixed scale and flexible-scale tables. + fastNLOCreate inherits from fastNLOTable, but is only able to hold one + coefficient table as member. + fastNLOCreate no enables to fill this coefficient table, i.e. to add further + contributions, e.g. from a MC generator. + + fastNLOCreate works only with a steering file. Example steering files + are provided together with this class. + The steering specifies, which kind of process are stored and also + the binning is read in. + + fastNLOCreate also handles the warmup runs. If no warmup table is found + it automatically runs in warmup mode. If warmup values are available, it + runs in 'production' mode. + + In order ot obtain a full fastNLO table, i.e. a table with LO and NLO contributions, + several contributions have to be merged, using the fnlo-merge (or fnlo-tk-merge) + tools. + + For example applications, please contact the authors. + +*/ +// ___________________________________________________________________________________________________ + +// Precompiler variables for conditional compilation are generated and +// stored automatically in config.h via AC_DEFINE statements in configure.ac. +// To enable conditional compilation, e.g. using HAVE_LIBZ, this config file +// MUST be the very first one to be included with +#include <config.h> + +#include <algorithm> +#include <cfloat> +#include <cmath> +#include <string> +#include <unistd.h> +#include "fastnlotk/fastNLOCreate.h" +#include "fastnlotk/fastNLOTools.h" +#include "fastnlotk/fastNLOCoeffAddFlex.h" +#include "fastnlotk/fastNLOCoeffAddFix.h" +#include "fastnlotk/fastNLOInterpolCatmullRom.h" +#include "fastnlotk/fastNLOInterpolLagrange.h" +#include "fastnlotk/fastNLOInterpolLinear.h" +#include "fastnlotk/fastNLOInterpolOneNode.h" +#include "fastnlotk/read_steer.h" +#include <unistd.h> + + +using namespace std; + + +// ___________________________________________________________________________________________________ +fastNLOCreate::fastNLOCreate() { + //! + //! Constructor of fastNLOCreate + //! + logger.SetClassName("fastNLOCreate"); + //! Initialise constants from defaults + SetTableConstsDefaults(); +} + + +// ___________________________________________________________________________________________________ +fastNLOCreate::fastNLOCreate(const fastNLO::GeneratorConstants& GenConsts, const fastNLO::ProcessConstants& ProcConsts, + const fastNLO::ScenarioConstants& ScenConsts, const fastNLO::WarmupConstants& WarmupConsts) { + //! + //! Constructor of fastNLOCreate + //! + //! Pass all needed steering paramters through + //! GeneratorConstants, ProcessConstants, ScenarioConstants, and WarmupConstants + //! (see GeneratorConstants.h file for details) + //! + //! No steering or warmup file is read in + //! + + logger.SetClassName("fastNLOCreate"); + logger.debug["fastNLOCreate"]<<"Create table from GenConsts, ProcConsts, ScenConsts, and WarmupConsts"<<endl; + + //! Set constants from arguments + fGenConsts = GenConsts; + fScenConsts = ScenConsts; + fProcConsts = ProcConsts; + fWarmupConsts = WarmupConsts; + + //! Do some basic checks on the table constants + if (! CheckTableConsts()) { + logger.error["fastNLOCreate"]<<"Table constants not properly initialised! Please check the table constants:"<<endl; + PrintTableConsts(); + exit(1); + } + + //! No WarmupFile required, a pseudo-WarmupFilename is defined here + fSteerfile = "NoSteeringFileMode"; //warmupfile; + fWarmupFilename = fSteerfile; + logger.debug["fastNLOCreate"]<<"Warmup set from code; the pseudo(!)-warmup filename is: " << fWarmupFilename << endl; + + // Check and transform parton combinations + // KR TODO What for? Necessary? + TransformPartonCombinations(); + + logger.debug["fastNLOCreate"]<<"Instantiate table from GenConsts, ProcConsts, ScenConsts, and WarmupConsts"<<endl; + Instantiate(); +} + + +// ___________________________________________________________________________________________________ +fastNLOCreate::fastNLOCreate(const string& warmupfile, const fastNLO::GeneratorConstants& GenConsts, + const fastNLO::ProcessConstants& ProcConsts, const fastNLO::ScenarioConstants& ScenConsts) { + + // KR DEPRECATED! Use next constructor with more logical ordering of arguments + logger.warn["fastNLOCreate"]<<"This constructor is deprecated and will be replaced by one with more logical ordering of arguments. Please replace by calling fastNLOCreate(GenConsts, ProcConsts, ScenConsts, warmupfile)."<<endl; + + fastNLOCreate(GenConsts, ProcConsts, ScenConsts, warmupfile); +} + + +// ___________________________________________________________________________________________________ +fastNLOCreate::fastNLOCreate(const fastNLO::GeneratorConstants& GenConsts, const fastNLO::ProcessConstants& ProcConsts, + const fastNLO::ScenarioConstants& ScenConsts, const std::string& warmupfile) { + //! + //! Constructor of fastNLOCreate + //! + //! Set required parameters through GeneratorConstants, ProcessConstants, and ScenarioConstants plus + //! warmup file. If the warmup file doesn't exist, a warmup run is initiated. + //! Use the warmup filename for the steeringNameSpace. + //! + //! No steering file is read in + //! + logger.SetClassName("fastNLOCreate"); + logger.debug["fastNLOCreate"]<<"Create table from GenConsts, ProcConsts, ScenConsts, and warmup file"<<endl; + logger.debug["fastNLOCreate"]<<"The warmup filename set from function call is: " << warmupfile << endl; + + //! Initialise constants from defaults + SetTableConstsDefaults(); + + //! Set constants from arguments + logger.debug["fastNLOCreate"] << "SetGenConsts from argument" << endl; + fGenConsts = GenConsts; + logger.debug["fastNLOCreate"] << "SetProcConsts from argument" << endl; + fProcConsts = ProcConsts; + logger.debug["fastNLOCreate"] << "SetScenConsts from argument" << endl; + fScenConsts = ScenConsts; + if (read_steer::getVerbosity() < 0) { + PrintTableConsts(); + } + + //! Set warmup filename and steering namespace from arguments + fWarmupFilename = warmupfile; + fSteerfile = warmupfile; // No mistake! Needed to have the proper namespace for warmup and steering file! + string steeringNameSpace = fSteerfile; // Not functional in general, only for Reads below. Should be improved. + // Check existence of files + bool lwarm = !access(GetWarmupTableFilename().c_str(), R_OK); + if (! lwarm) { + logger.info["fastNLOCreate"] << "Warmup file does not exist, so presumably this is a warmup run: " << GetWarmupTableFilename() << endl; + } else { + // Read steering from warmup, if exists, into namespace + ReadSteeringFile(fWarmupFilename,steeringNameSpace); + } + if (read_steer::getVerbosity() < 0) { + PrintTableConsts(); + } + + //! Do some basic checks on the table constants + if (! CheckTableConsts()) { + logger.error["fastNLOCreate"]<<"Table constants not properly initialised! Please check the table constants:"<<endl; + PrintTableConsts(); + exit(1); + } + + // Check and transform parton combinations + // KR TODO What for? Necessary? + TransformPartonCombinations(); + + logger.debug["fastNLOCreate"]<<"Instantiate table from GenConsts, ProcConsts, ScenConsts, and warmup file"<<endl; + Instantiate(); +} + + +// ___________________________________________________________________________________________________ +fastNLOCreate::fastNLOCreate(const fastNLO::GeneratorConstants& GenConsts, const fastNLO::ProcessConstants& ProcConsts, + const fastNLO::ScenarioConstants& ScenConsts, const std::string& warmupfile, + const std::string& steerfile) { + //! + //! Constructor of fastNLOCreate + //! + //! Set required parameters through GeneratorConstants, ProcessConstants, and ScenarioConstants plus + //! warmup and steering file. The warmup file is read first here, if it exists. + //! Otherwise a warmup run is initiated. + //! This constructor is conceived for the use case: + //! ONE warmup file PER table instance + //! ONE steering file for ALL table instances + //! which means that the warmup filename is used for the steeringNameSpace. + //! Needs to be checked in case of other use cases. + //! + logger.SetClassName("fastNLOCreate"); + logger.debug["fastNLOCreate"]<<"Create table from GenConsts, ProcConsts, ScenConsts, and warmup and steering file"<<endl; + logger.debug["fastNLOCreate"]<<"The warmup filename set via the function call is: " << warmupfile << endl; + logger.debug["fastNLOCreate"]<<"The steering file superseding initialised defaults is: " << steerfile << endl; + + //! Initialise constants from defaults + SetTableConstsDefaults(); + + //! Set constants from arguments + logger.debug["fastNLOCreate"] << "SetGenConsts from argument" << endl; + fGenConsts = GenConsts; + logger.debug["fastNLOCreate"] << "SetProcConsts from argument" << endl; + fProcConsts = ProcConsts; + logger.debug["fastNLOCreate"] << "SetScenConsts from argument" << endl; + fScenConsts = ScenConsts; + if (read_steer::getVerbosity() < 0) { + PrintTableConsts(); + } + + //! Set filenames and steering namespace from arguments + fWarmupFilename = warmupfile; + fSteerfile = warmupfile; // No mistake! Needed to have the proper namespace for warmup and steering file! + //! In case of multiple tables created in one job, the warmup files must be different, + //! but not the steering file to complement/modify settings for all tables. + string steeringNameSpace = fSteerfile; // Not functional in general, only for Reads below. Should be improved. + // Check existence of files + bool lwarm = !access(GetWarmupTableFilename().c_str(), R_OK); + bool lsteer = !access(steerfile.c_str(), R_OK); + if (! lwarm) { + logger.info["fastNLOCreate"] << "Warmup file does not exist, so presumably this is a warmup run: " << GetWarmupTableFilename() << endl; + } else { + // Read steering from warmup, if exists, into namespace + ReadSteeringFile(fWarmupFilename,steeringNameSpace); + } + if (! lsteer) { + logger.info["fastNLOCreate"] << "Steering file " << steerfile << " does not exist, try to run with preset values!" << endl; + } else { + // At last, read steering for final completions and modifications + logger.info["fastNLOCreate"] << "Read steerfile: " << steerfile << "\t namespace: " << steeringNameSpace << endl; + ReadSteeringFile(steerfile,steeringNameSpace); + } + // DEBUG + // PRINTALL(); + //! Update constants from steering namespace, but only if either of warmup or steering file exist! + if ( lwarm || lsteer ) { + SetGenConstsFromSteering(); + logger.debug["fastNLOCreate"] << "SetGenConsts from warmup and steering" << endl; + SetProcConstsFromSteering(); + logger.debug["fastNLOCreate"] << "SetProcConsts from warmup and steering" << endl; + SetScenConstsFromSteering(); + logger.debug["fastNLOCreate"] << "SetScenConsts from warmup and steering" << endl; + if (read_steer::getVerbosity() < 0) { + PrintTableConsts(); + } + } + + //! Do some basic checks on the table constants + if (! CheckTableConsts()) { + logger.error["fastNLOCreate"]<<"Table constants not properly initialised! Please check the table constants:"<<endl; + PrintTableConsts(); + exit(1); + } + + // Check and transform parton combinations + // KR TODO What for? Necessary? + TransformPartonCombinations(); + + logger.debug["fastNLOCreate"]<<"Instantiate table from GenConsts, ProcConsts, ScenConsts, and warmup and steering file"<<endl; + Instantiate(); +} + + +// ___________________________________________________________________________________________________ +fastNLOCreate::fastNLOCreate(const string& steerfile, const fastNLO::GeneratorConstants& GenConsts, const fastNLO::ProcessConstants& ProcConsts) { + + // KR DEPRECATED! Use next constructor with more logical ordering of arguments + logger.warn["fastNLOCreate"]<<"This constructor is deprecated and will be replaced by one with more logical ordering of arguments. Please replace by calling fastNLOCreate(GenConsts, ProcConsts, steerfile)."<<endl; + + fastNLOCreate(GenConsts, ProcConsts, steerfile); +} + + +// ___________________________________________________________________________________________________ +fastNLOCreate::fastNLOCreate(const fastNLO::GeneratorConstants& GenConsts, const fastNLO::ProcessConstants& ProcConsts, + const string& steerfile) { + //! + //! Constructor of fastNLOCreate + //! + //! Set required parameters through GeneratorConstants and ProcessConstants plus steering file. + //! + //! Existence of steering file is mandatory. + //! The warmup filename is either read from steering or set via heuristic guessing. + //! If the warmup file doesn't exist, a warmup run is initiated. + //! + //! + logger.SetClassName("fastNLOCreate"); + logger.debug["fastNLOCreate"]<<"Create table from GenConsts and ProcConsts plus steering file"<<endl; + logger.debug["fastNLOCreate"]<<"The steering file from function call is: " << steerfile << endl; + + //! Initialise constants from defaults + SetTableConstsDefaults(); + + //! Set constants from arguments + logger.debug["fastNLOCreate"] << "SetGenConsts from argument" << endl; + fGenConsts = GenConsts; + logger.debug["fastNLOCreate"] << "SetProcConsts from argument" << endl; + fProcConsts = ProcConsts; + + // TODO: Unify ReadSteering() and ReadSteerFile(); only one is necessary + // Set steering filename and namespace from arguments + // fSteerfile = steerfile; + // string steeringNameSpace = fSteerfile; // Not functional in general, only for Reads below. Should be improved. + // Check existence of files + bool lsteer = !access(steerfile.c_str(), R_OK); + if (! lsteer) { + logger.error["fastNLOCreate"] << "Steering file does not exist, aborting: " << steerfile << endl; + exit(1); + } else { + //! Steering file settings take precedence over settings in code + //! The WarmupFilename is read either from steering or + //! set via heuristic guessing within ReadSteering() + //! The steeringNameSpace is set automatically to steerfile without extension + ReadSteering(steerfile); + } + //! Update generator constants from steering namespace + SetGenConstsFromSteering(); + logger.debug["fastNLOCreate"] << "Update GenConsts from steering" << endl; + //! Update process constants from steering namespace + SetProcConstsFromSteering(); + logger.debug["fastNLOCreate"] << "Update ProcConsts from steering" << endl; + //! Set scenario constants from steering namespace + SetScenConstsFromSteering(); + logger.debug["fastNLOCreate"] << "SetScenConsts from steering" << endl; + if (read_steer::getVerbosity() < 0) { + PrintTableConsts(); + } + + //! Do some basic checks on the table constants + if (! CheckTableConsts()) { + logger.error["fastNLOCreate"]<<"Table constants not properly initialised! Please check the table constants:"<<endl; + PrintTableConsts(); + exit(1); + } + + // Check and transform parton combinations + // KR TODO What for? Necessary? + TransformPartonCombinations(); + + logger.debug["fastNLOCreate"]<<"Instantiate table from GenConsts, ProcConsts, and steering file"<<endl; + Instantiate(); +} + + +// ___________________________________________________________________________________________________ +fastNLOCreate::fastNLOCreate(const string& steerfile, string steeringNameSpace) { + //! + //! Constructor for fastNLOCreate + //! + //! Set all required parameters through steering file. + //! + //! Existence of steering file is mandatory. + //! The warmup filename is either read from steering or set via heuristic guessing. + //! If the warmup file doesn't exist, a warmup run is initiated. + //! + logger.SetClassName("fastNLOCreate"); + logger.debug["fastNLOCreate"]<<"Create table from steering file"<<endl; + logger.debug["fastNLOCreate"]<<"The steering file from function call is: " << steerfile << endl; + + //! Initialise constants from defaults + SetTableConstsDefaults(); + + // Set steering filename and namespace from arguments + fSteerfile = steerfile; + if (steeringNameSpace.empty()) steeringNameSpace = fSteerfile; + // Check existence of files + bool lsteer = !access(steerfile.c_str(), R_OK); + if (! lsteer) { + logger.error["fastNLOCreate"] << "Steering file does not exist, aborting: " << steerfile << endl; + exit(1); + } else { + //! Steering file settings take precedence over settings in code + //! The WarmupFilename is read either from steering or + //! set via heuristic guessing within ReadSteering() + //! The steeringNameSpace normally is set to steerfile without extension + ReadSteering(steerfile, steeringNameSpace); + } + //! Update constants from steering namespace + SetGenConstsFromSteering(); + logger.debug["fastNLOCreate"] << "SetGenConsts from warmup and steering" << endl; + SetProcConstsFromSteering(); + logger.debug["fastNLOCreate"] << "SetProcConsts from warmup and steering" << endl; + SetScenConstsFromSteering(); + logger.debug["fastNLOCreate"] << "SetScenConsts from warmup and steering" << endl; + PrintTableConsts(); + + //! Do some basic checks on the table constants + if (! CheckTableConsts()) { + logger.error["fastNLOCreate"]<<"Table constants not properly initialised! Please check the table constants:"<<endl; + PrintTableConsts(); + exit(1); + } + + // Check and transform parton combinations + // KR TODO What for? Necessary? + TransformPartonCombinations(); + + logger.debug["fastNLOCreate"]<<"Instantiate table from steering file"<<endl; + Instantiate(); +} + + +// ___________________________________________________________________________________________________ +void fastNLOCreate::TransformPartonCombinations() { + // Check and transform parton combinations + // KR TODO What is this piece of code for exactly? Can this be replaced/improved? + if (fProcConsts.IPDFdef2 == 0) { + if (fProcConsts.IPDFdef3LO > 0 && fProcConsts.PDFCoeffLO.empty()) + fProcConsts.PDFCoeffLO = ReadPartonCombinations(0,fProcConsts.PDFLiCoInLO); + if (fProcConsts.IPDFdef3NLO > 0 && fProcConsts.PDFCoeffNLO.empty()) + fProcConsts.PDFCoeffNLO = ReadPartonCombinations(1,fProcConsts.PDFLiCoInNLO); + if (fProcConsts.IPDFdef3NNLO > 0 && fProcConsts.PDFCoeffNNLO.empty()) + fProcConsts.PDFCoeffNNLO = ReadPartonCombinations(2,fProcConsts.PDFLiCoInNNLO); + } +} + + +// ___________________________________________________________________________________________________ +void fastNLOCreate::SetTableConstsDefaults() { + //! Initialise table constants from defaults + logger.debug["SetTableConstsDefaults"] << "SetGenConstsDefaults" << endl; + SetGenConstsDefaults(); + logger.debug["SetTableConstsDefaults"] << "SetProcConstsDefaults" << endl; + SetProcConstsDefaults(); + logger.debug["SetTableConstsDefaults"] << "SetScenConstsDefaults" << endl; + SetScenConstsDefaults(); + if (read_steer::getVerbosity() < 0) { + PrintTableConsts(); + } +} + + +// ___________________________________________________________________________________________________ +void fastNLOCreate::SetGenConstsDefaults() { + //! Set default values for generator constants + logger.debug["SetGenConstsDefaults"] << endl; + // Generator constants + fGenConsts.Name = "Undefined"; + fGenConsts.UnitsOfCoefficients = 12; //!< Generator cross section prefactor (neg. power of 10: pb->12, fb->15) + fGenConsts.References.clear(); +} + + +// ___________________________________________________________________________________________________ +void fastNLOCreate::SetGenConstsFromSteering() { + //! Set generator constants from previously read in steering + logger.debug["SetGenConstsFromSteering"] << endl; + logger.debug["SetGenConstsFromSteering"] << "Steerfile is: " << fSteerfile << endl; + // Generator constants + if (EXIST_NS(CodeDescription,fSteerfile)) { + std::cout << "FFF" << std::endl; + vector<string > CodeDescr = STRING_ARR_NS(CodeDescription,fSteerfile); + fGenConsts.Name = CodeDescr[0]; + if (CodeDescr.size() > 1) { + fGenConsts.References.resize(CodeDescr.size()-1); + for (unsigned int i = 0 ; i< fGenConsts.References.size() ; i++) + fGenConsts.References [i] = CodeDescr[i+1]; + } + } + if (EXIST_NS(UnitsOfCoefficients,fSteerfile)) fGenConsts.UnitsOfCoefficients = INT_NS(UnitsOfCoefficients,fSteerfile); +} + + +// ___________________________________________________________________________________________________ +void fastNLOCreate::PrintTableConsts() { + //! Print table constants + logger.info["PrintTableConsts"] << "==================================================================" << endl; + logger.info["PrintTableConsts"] << "Printing all table constants" << endl; + logger.info["PrintTableConsts"] << "==================================================================" << endl; + PrintGenConsts(); + PrintProcConsts(); + PrintScenConsts(); + PrintWarmupConsts(); +} + + +// ___________________________________________________________________________________________________ +void fastNLOCreate::PrintGenConsts() { + //! Print generator constants + logger.info["PrintGenConsts"] << "==================================================================" << endl; + logger.info["PrintGenConsts"] << "Printing generator constants" << endl; + logger.info["PrintGenConsts"] << "------------------------------------------------------------------" << endl; + logger.info["PrintGenConsts"] << "Name and version of generator: " << fGenConsts.Name << endl; + for (unsigned int i=0; i<fGenConsts.References.size(); i++) { + logger.info["PrintGenConsts"] << "Generator description and references, [" << i << "]: " << fGenConsts.References[i] << endl; + } + logger.info["PrintGenConsts"] << "Generator cross section prefactor (neg. power of 10: pb->12, fb->15): " << fGenConsts.UnitsOfCoefficients << endl; + logger.info["PrintGenConsts"] << "==================================================================" << endl; +} + + +// ___________________________________________________________________________________________________ +void fastNLOCreate::SetProcConstsDefaults() { + //! Set default values for process constants + logger.debug["SetProcConstsDefaults"] << endl; + // Process constants + fProcConsts.LeadingOrder = -1; //!< Power in alpha_s of LO process + fProcConsts.NPDF = -1; //!< No. of PDFs involved + fProcConsts.NSubProcessesLO = -1; //!< No. of LO subprocesses + fProcConsts.NSubProcessesNLO = -1; //!< No. of NLO subprocesses + fProcConsts.NSubProcessesNNLO = -1; //!< No. of NNLO subprocesses + fProcConsts.IPDFdef1 = -1; //!< Flag 1 to define PDF linear combinations of partonic subprocesses + fProcConsts.IPDFdef2 = -1; //!< Flag 2 to define PDF linear combinations of partonic subprocesses + fProcConsts.IPDFdef3LO = -1; //!< Flag 3 to define PDF LCs at LO + fProcConsts.IPDFdef3NLO = -1; //!< Flag 3 to define PDF LCs at NLO + fProcConsts.IPDFdef3NNLO = -1; //!< Flag 3 to define PDF LCs at NNLO + fProcConsts.NPDFDim = -1; //!< Internal storage mode for PDF LCs + fProcConsts.PDFCoeffLO.clear(); //!< PDF Linear combinations for LO calculation (used only if IPDFdef2==0) + fProcConsts.PDFCoeffNLO.clear(); //!< PDF Linear combinations for NLO calculation (used only if IPDFdef2==0) + fProcConsts.PDFCoeffNNLO.clear(); //!< PDF Linear combinations for NNLO calculation (used only if IPDFdef2==0) + fProcConsts.PDFLiCoInLO.clear(); //!< PDF Linear combinations for LO calculation (used only if IPDFdef2==0) [definition as in steering] (used if PDFCoeffLO is empty) + fProcConsts.PDFLiCoInNLO.clear(); //!< PDF Linear combinations for NLO calculation (used only if IPDFdef2==0) [definition as in steering] + fProcConsts.PDFLiCoInNNLO.clear(); //!< PDF Linear combinations for NNLO calculation (used only if IPDFdef2==0) [definition as in steering] + fProcConsts.AsymmetricProcesses.clear();//!< Specify processes that need to be exchanged in half-matrix notation, when xmin>xmax (only if NPDFDim==1) + fProcConsts.Name = "Undefined"; //!<< More precise description for specific contribution (e.g. LO, pp -> 2 jets; also can add 'run-mode' and further details) + fProcConsts.References.clear(); //!<< References for process (also other plain text lines can be included here) +} + + +// ___________________________________________________________________________________________________ +void fastNLOCreate::SetProcConstsFromSteering() { + //! Set process constants from previously read in steering + logger.debug["SetProcConstsFromSteering"] << endl; + logger.debug["SetProcConstsFromSteering"] << "Steerfile is: " << fSteerfile << endl; + + // Process constants + if (EXIST_NS(LeadingOrder,fSteerfile)) fProcConsts.LeadingOrder = INT_NS(LeadingOrder,fSteerfile); + if (EXIST_NS(NPDF,fSteerfile)) fProcConsts.NPDF = INT_NS(NPDF,fSteerfile); + if (EXIST_NS(NSubProcessesLO,fSteerfile)) fProcConsts.NSubProcessesLO = INT_NS(NSubProcessesLO,fSteerfile); + if (EXIST_NS(NSubProcessesNLO,fSteerfile)) fProcConsts.NSubProcessesNLO = INT_NS(NSubProcessesNLO,fSteerfile); + if (EXIST_NS(NSubProcessesNNLO,fSteerfile)) fProcConsts.NSubProcessesNNLO = INT_NS(NSubProcessesNNLO,fSteerfile); + if (EXIST_NS(IPDFdef1,fSteerfile)) fProcConsts.IPDFdef1 = INT_NS(IPDFdef1,fSteerfile); + if (EXIST_NS(IPDFdef2,fSteerfile)) fProcConsts.IPDFdef2 = INT_NS(IPDFdef2,fSteerfile); + if (EXIST_NS(IPDFdef3LO,fSteerfile)) fProcConsts.IPDFdef3LO = INT_NS(IPDFdef3LO,fSteerfile); + if (EXIST_NS(IPDFdef3NLO,fSteerfile)) fProcConsts.IPDFdef3NLO = INT_NS(IPDFdef3NLO,fSteerfile); + if (EXIST_NS(IPDFdef3NNLO,fSteerfile)) fProcConsts.IPDFdef3NNLO = INT_NS(IPDFdef3NNLO,fSteerfile); + if (EXIST_NS(NPDFDim,fSteerfile)) fProcConsts.NPDFDim = INT_NS(NPDFDim,fSteerfile); + + // Crosscheck size of given parton combinations + // In case of mismatch try to read first from PartonCombinationsORDER + // and then from PDFLiCoInORDER + if (fProcConsts.IPDFdef2 == 0) { + if (fProcConsts.IPDFdef3LO > 0 && fProcConsts.IPDFdef3LO != (int)fProcConsts.PDFCoeffLO.size()) + fProcConsts.PDFCoeffLO = ReadPartonCombinations(0,INT_TAB_NS(PartonCombinationsLO,fSteerfile)); + if (fProcConsts.IPDFdef3NLO > 0 && fProcConsts.IPDFdef3NLO != (int)fProcConsts.PDFCoeffNLO.size()) + fProcConsts.PDFCoeffNLO = ReadPartonCombinations(1,INT_TAB_NS(PartonCombinationsNLO,fSteerfile)); + if (fProcConsts.IPDFdef3NNLO > 0 && fProcConsts.IPDFdef3NNLO != (int)fProcConsts.PDFCoeffNNLO.size()) + fProcConsts.PDFCoeffNNLO = ReadPartonCombinations(2,INT_TAB_NS(PartonCombinationsNNLO,fSteerfile)); + // --- check and transform parton combinations + if (fProcConsts.IPDFdef3LO > 0 && fProcConsts.PDFCoeffLO.empty()) + fProcConsts.PDFCoeffLO = ReadPartonCombinations(0,fProcConsts.PDFLiCoInLO); + if (fProcConsts.IPDFdef3NLO > 0 && fProcConsts.PDFCoeffNLO.empty()) + fProcConsts.PDFCoeffNLO = ReadPartonCombinations(1,fProcConsts.PDFLiCoInNLO); + if (fProcConsts.IPDFdef3NNLO > 0 && fProcConsts.PDFCoeffNNLO.empty()) + fProcConsts.PDFCoeffNNLO = ReadPartonCombinations(2,fProcConsts.PDFLiCoInNNLO); + } + + // read asymmetric processes if half-matrix notation is requested + if (fProcConsts.NPDFDim == 1) { + if (fProcConsts.NPDF == 2 && fProcConsts.IPDFdef1 == 3 && (fProcConsts.IPDFdef2 == 121 || fProcConsts.IPDFdef2 == 169)) { + const int np = fProcConsts.IPDFdef2==121 ? 11:13; + int p1 = 0; + int p2 = 0; + for (int p = 0 ; p<fProcConsts.IPDFdef2 ; p++) { + int pid = p1*(np)+p2; + int asympid = p2*(np)+p1; + if (pid != asympid) // actually not needed necessarily + fProcConsts.AsymmetricProcesses.push_back(make_pair(pid,asympid)); + p2++; + if (p2 == np) { + p2=0; + p1++; + } + } + } else if (fProcConsts.NPDF == 2) { + if (EXIST_NS(AsymmetricProcesses,fSteerfile)) { + fProcConsts.AsymmetricProcesses.clear(); + vector<vector<int> > asym = INT_TAB_NS(AsymmetricProcesses,fSteerfile); + for (unsigned int i = 0 ; i<asym.size() ; i++) { + if (asym[i].size() != 2) { + logger.error["SetProcConstsFromSteering"]<<"Asymmetric process "<<asym[i][0]<<", must have exactly one counter process."<<endl; + exit(1); + } + fProcConsts.AsymmetricProcesses.push_back(make_pair(asym[i][0],asym[i][1])); + } + } + } + } +} + + +// ___________________________________________________________________________________________________ +void fastNLOCreate::PrintProcConsts() { + //! Print process constants + logger.info["PrintProcConsts"] << "==================================================================" << endl; + logger.info["PrintProcConsts"] << "Printing process constants" << endl; + logger.info["PrintProcConsts"] << "------------------------------------------------------------------" << endl; + logger.info["PrintProcConsts"] << "Power in alpha_s of LO process: " << fProcConsts.LeadingOrder << endl; + logger.info["PrintProcConsts"] << "No. of PDFs involved: " << fProcConsts.NPDF << endl; + logger.info["PrintProcConsts"] << "No. of LO subprocesses: " << fProcConsts.NSubProcessesLO << endl; + logger.info["PrintProcConsts"] << "No. of NLO subprocesses: " << fProcConsts.NSubProcessesNLO << endl; + logger.info["PrintProcConsts"] << "No. of NNLO subprocesses: " << fProcConsts.NSubProcessesNNLO << endl; + logger.info["PrintProcConsts"] << "Flag 1 to define PDF linear combinations of partonic subprocesses: " << fProcConsts.IPDFdef1 << endl; + logger.info["PrintProcConsts"] << "Flag 2 to define PDF linear combinations of partonic subprocesses: " << fProcConsts.IPDFdef2 << endl; + logger.info["PrintProcConsts"] << "Flag 3 to define PDF LCs at LO: " << fProcConsts.IPDFdef3LO << endl; + logger.info["PrintProcConsts"] << "Flag 3 to define PDF LCs at NLO: " << fProcConsts.IPDFdef3NLO << endl; + logger.info["PrintProcConsts"] << "Flag 3 to define PDF LCs at NNLO: " << fProcConsts.IPDFdef3NNLO << endl; + logger.info["PrintProcConsts"] << "Internal storage mode for PDF LCs: " << fProcConsts.NPDFDim << endl; + for (unsigned int i=0; i<fProcConsts.PDFCoeffLO.size(); i++) { + // logger.info["PrintProcConsts"] << "PDF LC LO, [" << i << "]: " << fProcConsts.PDFCoeffLO[i] << endl; + } + for (unsigned int i=0; i<fProcConsts.PDFCoeffNLO.size(); i++) { + // logger.info["PrintProcConsts"] << "PDF LC NLO, [" << i << "]: " << fProcConsts.PDFCoeffNLO[i] << endl; + } + for (unsigned int i=0; i<fProcConsts.PDFCoeffNNLO.size(); i++) { + // logger.info["PrintProcConsts"] << "PDF LC NNLO, [" << i << "]: " << fProcConsts.PDFCoeffNNLO[i] << endl; + } + for (unsigned int i=0; i<fProcConsts.PDFLiCoInLO.size(); i++) { + // logger.info["PrintProcConsts"] << "PDF LiCo in LO, [" << i << "]: " << fProcConsts.PDFLiCoInLO[i] << endl; + } + for (unsigned int i=0; i<fProcConsts.PDFLiCoInNLO.size(); i++) { + // logger.info["PrintProcConsts"] << "PDF LiCo in NLO, [" << i << "]: " << fProcConsts.PDFLiCoInNLO[i] << endl; + } + for (unsigned int i=0; i<fProcConsts.PDFLiCoInNNLO.size(); i++) { + // logger.info["PrintProcConsts"] << "PDF LiCo in NNLO, [" << i << "]: " << fProcConsts.PDFLiCoInNNLO[i] << endl; + } + for (auto const& v: fProcConsts.AsymmetricProcesses) { + logger.info["PrintProcConsts"] << "Asymmetric processes in half-matrix notation, (" << v.first << ", " << v.second << ")" << endl; + } + logger.info["PrintProcConsts"] << "Process name: " << fProcConsts.Name << endl; + for (unsigned int i=0; i<fProcConsts.References.size(); i++) { + logger.info["PrintProcConsts"] << "Process description, [" << i << "]: " << fProcConsts.References[i] << endl; + } + logger.info["PrintProcConsts"] << "==================================================================" << endl; +} + + +// ___________________________________________________________________________________________________ +void fastNLOCreate::SetScenConstsDefaults() { + //! Set default values for scenario constants + logger.debug["SetScenConstsDefaults"] << endl; + // Scenario constants + fScenConsts.ScenarioName = "Undefined"; + fScenConsts.ScenarioDescription.clear(); + fScenConsts.PublicationUnits = 12; + fScenConsts.DifferentialDimension = 0; + fScenConsts.DimensionLabels.clear(); + fScenConsts.DimensionIsDifferential.clear(); + fScenConsts.CalculateBinSize = true; + fScenConsts.BinSizeFactor = 1.; + fScenConsts.BinSize.clear(); + fScenConsts.ScaleDescriptionScale1 = "Undefined"; + fScenConsts.ScaleDescriptionScale2 = "Undefined"; + fScenConsts.SingleDifferentialBinning.clear(); + fScenConsts.DoubleDifferentialBinning.clear(); + fScenConsts.TripleDifferentialBinning.clear(); + fScenConsts.CenterOfMassEnergy = 7000.; + fScenConsts.PDF1 = 2212; + fScenConsts.PDF2 = 2212; + fScenConsts.OutputFilename = "fastnlo"; + fScenConsts.OutputPrecision = 8; +#ifdef HAVE_LIBZ + fScenConsts.OutputCompression = true; +#else + fScenConsts.OutputCompression = false; +#endif /* HAVE_LIBZ */ + fScenConsts.CacheMax = 0; + fScenConsts.CacheCompare = 0; + fScenConsts.CacheType = 0; + fScenConsts.FlexibleScaleTable = false; + fScenConsts.NFlexScales = 2; + fScenConsts.FlexConstScale2 = PDG_MZ; + fScenConsts.ScaleVariationFactors.clear(); + fScenConsts.ReadBinningFromSteering = false; + fScenConsts.IgnoreWarmupBinningCheck = false; + fScenConsts.ApplyPDFReweighting = true; + fScenConsts.CheckScaleLimitsAgainstBins = true; + fScenConsts.InclusiveJets = false; + fScenConsts.ReduceXmin = 0.; + fScenConsts.X_Kernel = "Lagrange"; + fScenConsts.X_DistanceMeasure = "sqrtlog10"; + fScenConsts.X_NNodes = 15; + fScenConsts.X_NNodeCounting = "NodesPerBin"; + fScenConsts.Mu1_Kernel = "Lagrange"; + fScenConsts.Mu1_DistanceMeasure = "loglog025"; + fScenConsts.Mu1_NNodes = 6; + fScenConsts.Mu1_NNodeCounting = "NodesPerBin"; + fScenConsts.Mu2_Kernel = "Lagrange"; + fScenConsts.Mu2_DistanceMeasure = "loglog025"; + fScenConsts.Mu2_NNodes = 6; + fScenConsts.Mu2_NNodeCounting = "NodesPerBin"; +} + + +// ___________________________________________________________________________________________________ +void fastNLOCreate::SetScenConstsFromSteering() { + //! Set scenario constants from previously read in steering + logger.debug["SetScenConstsFromSteering"] << endl; + logger.debug["SetScenConstsFromSteering"] << "Steerfile is: " << fSteerfile << endl; + // Scenario constants + if (EXIST_NS(ScenarioName,fSteerfile)) fScenConsts.ScenarioName = STRING_NS(ScenarioName,fSteerfile); + if (EXIST_NS(ScenarioDescription,fSteerfile)) fScenConsts.ScenarioDescription = STRING_ARR_NS(ScenarioDescription,fSteerfile); + if (EXIST_NS(PublicationUnits,fSteerfile)) fScenConsts.PublicationUnits = INT_NS(PublicationUnits,fSteerfile); + if (EXIST_NS(DifferentialDimension,fSteerfile)) fScenConsts.DifferentialDimension = INT_NS(DifferentialDimension,fSteerfile); + NDim = fScenConsts.DifferentialDimension; + if (EXIST_NS(DimensionLabels,fSteerfile)) fScenConsts.DimensionLabels = STRING_ARR_NS(DimensionLabels,fSteerfile); + if (EXIST_NS(DimensionIsDifferential,fSteerfile)) fScenConsts.DimensionIsDifferential = INT_ARR_NS(DimensionIsDifferential,fSteerfile); + if (EXIST_NS(CalculateBinSize,fSteerfile)) fScenConsts.CalculateBinSize = BOOL_NS(CalculateBinSize,fSteerfile); + if (EXIST_NS(BinSizeFactor,fSteerfile)) fScenConsts.BinSizeFactor = DOUBLE_NS(BinSizeFactor,fSteerfile); + if (EXIST_NS(BinSize,fSteerfile)) fScenConsts.BinSize = DOUBLE_ARR_NS(BinSize,fSteerfile); + if (EXIST_NS(ScaleDescriptionScale1,fSteerfile)) fScenConsts.ScaleDescriptionScale1 = STRING_NS(ScaleDescriptionScale1,fSteerfile); + if (EXIST_NS(ScaleDescriptionScale2,fSteerfile)) fScenConsts.ScaleDescriptionScale2 = STRING_NS(ScaleDescriptionScale2,fSteerfile); + if (EXIST_NS(CenterOfMassEnergy,fSteerfile)) fScenConsts.CenterOfMassEnergy = DOUBLE_NS(CenterOfMassEnergy,fSteerfile); + if (EXIST_NS(PDF1,fSteerfile)) fScenConsts.PDF1 = INT_NS(PDF1,fSteerfile); + if (EXIST_NS(PDF2,fSteerfile)) fScenConsts.PDF2 = INT_NS(PDF2,fSteerfile); + if (EXIST_NS(OutputFilename,fSteerfile)) fScenConsts.OutputFilename = STRING_NS(OutputFilename,fSteerfile); + if (EXIST_NS(OutputPrecision,fSteerfile)) fScenConsts.OutputPrecision = INT_NS(OutputPrecision,fSteerfile); + if (EXIST_NS(OutputCompression,fSteerfile)) fScenConsts.OutputCompression = BOOL_NS(OutputCompression,fSteerfile); + if (EXIST_NS(CacheMax ,fSteerfile)) fScenConsts.CacheMax = INT_NS(CacheMax, fSteerfile); + if (EXIST_NS(CacheType,fSteerfile)) fScenConsts.CacheType = INT_NS(CacheType,fSteerfile); + if (EXIST_NS(CacheCompare,fSteerfile)) fScenConsts.CacheCompare = INT_NS(CacheCompare,fSteerfile); + if (EXIST_NS(FlexibleScaleTable,fSteerfile)) fScenConsts.FlexibleScaleTable = BOOL_NS(FlexibleScaleTable,fSteerfile); + fIsFlexibleScale = fScenConsts.FlexibleScaleTable; + if (EXIST_NS(NFlexScales,fSteerfile)) fScenConsts.NFlexScales = INT_NS(NFlexScales,fSteerfile); + fNFlexScales = fScenConsts.NFlexScales; + if (EXIST_NS(FlexConstScale2,fSteerfile)) fScenConsts.FlexConstScale2 = DOUBLE_NS(FlexConstScale2,fSteerfile); + fFlexConstScale2 = fScenConsts.FlexConstScale2; + if (EXIST_NS(InclusiveJets,fSteerfile)) fScenConsts.InclusiveJets = BOOL_NS(InclusiveJets,fSteerfile); + fIsInclusiveJets = fScenConsts.InclusiveJets; + if (EXIST_NS(ReduceXmin,fSteerfile)) fScenConsts.ReduceXmin = DOUBLE_NS(ReduceXmin,fSteerfile); + fReduceXmin = fScenConsts.ReduceXmin; + if (EXIST_NS(ScaleVariationFactors,fSteerfile)) fScenConsts.ScaleVariationFactors = DOUBLE_ARR_NS(ScaleVariationFactors,fSteerfile); + if (EXIST_NS(ReadBinningFromSteering,fSteerfile)) fScenConsts.ReadBinningFromSteering = BOOL_NS(ReadBinningFromSteering,fSteerfile); + if (fScenConsts.ReadBinningFromSteering) { + if (NDim==1 && EXIST_NS(SingleDifferentialBinning,fSteerfile)) fScenConsts.SingleDifferentialBinning = DOUBLE_ARR_NS(SingleDifferentialBinning,fSteerfile); + else if (NDim==2 && EXIST_NS(DoubleDifferentialBinning,fSteerfile)) fScenConsts.DoubleDifferentialBinning = DOUBLE_TAB_NS(DoubleDifferentialBinning,fSteerfile); + else if (NDim==3 && EXIST_NS(TripleDifferentialBinning,fSteerfile)) fScenConsts.TripleDifferentialBinning = DOUBLE_TAB_NS(TripleDifferentialBinning,fSteerfile); + } + if (EXIST_NS(IgnoreWarmupBinningCheck,fSteerfile)) fScenConsts.IgnoreWarmupBinningCheck = BOOL_NS(IgnoreWarmupBinningCheck,fSteerfile); + if (EXIST_NS(ApplyPDFReweighting,fSteerfile)) fScenConsts.ApplyPDFReweighting = BOOL_NS(ApplyPDFReweighting,fSteerfile); + if (EXIST_NS(CheckScaleLimitsAgainstBins,fSteerfile)) fScenConsts.CheckScaleLimitsAgainstBins = BOOL_NS(CheckScaleLimitsAgainstBins,fSteerfile); + if (EXIST_NS(X_Kernel,fSteerfile)) fScenConsts.X_Kernel = STRING_NS(X_Kernel,fSteerfile); + if (EXIST_NS(X_DistanceMeasure,fSteerfile)) fScenConsts.X_DistanceMeasure = STRING_NS(X_DistanceMeasure,fSteerfile); + if (EXIST_NS(X_NNodes,fSteerfile)) fScenConsts.X_NNodes = DOUBLE_NS(X_NNodes,fSteerfile); + if (EXIST_NS(X_NNodeCounting,fSteerfile)) fScenConsts.X_NNodeCounting = STRING_NS(X_NNodeCounting,fSteerfile); + if (EXIST_NS(Mu1_Kernel,fSteerfile)) fScenConsts.Mu1_Kernel = STRING_NS(Mu1_Kernel,fSteerfile); + if (EXIST_NS(Mu1_DistanceMeasure,fSteerfile)) fScenConsts.Mu1_DistanceMeasure = STRING_NS(Mu1_DistanceMeasure,fSteerfile); + if (EXIST_NS(Mu1_NNodes,fSteerfile)) fScenConsts.Mu1_NNodes = DOUBLE_NS(Mu1_NNodes,fSteerfile); + if (EXIST_NS(Mu1_NNodeCounting,fSteerfile)) fScenConsts.Mu1_NNodeCounting = STRING_NS(Mu1_NNodeCounting,fSteerfile); + if (EXIST_NS(Mu2_Kernel,fSteerfile)) fScenConsts.Mu2_Kernel = STRING_NS(Mu2_Kernel,fSteerfile); + if (EXIST_NS(Mu2_DistanceMeasure,fSteerfile)) fScenConsts.Mu2_DistanceMeasure = STRING_NS(Mu2_DistanceMeasure,fSteerfile); + if (EXIST_NS(Mu2_NNodes,fSteerfile)) fScenConsts.Mu2_NNodes = DOUBLE_NS(Mu2_NNodes,fSteerfile); + if (EXIST_NS(Mu2_NNodeCounting,fSteerfile)) fScenConsts.Mu2_NNodeCounting = STRING_NS(Mu2_NNodeCounting,fSteerfile); + + if (EXIST_NS(GeneratorName,fSteerfile)) fGenConsts.Name = STRING_NS(GeneratorName,fSteerfile); + if (EXIST_NS(GeneratorReferences,fSteerfile)) fGenConsts.References = STRING_ARR_NS(GeneratorReferences,fSteerfile); + if (EXIST_NS(ProcessReferences,fSteerfile)) fProcConsts.References = STRING_ARR_NS(ProcessReferences,fSteerfile); + if (EXIST_NS(ProcessName,fSteerfile)) fProcConsts.Name = STRING_NS(ProcessName,fSteerfile); + + +} + + +// ___________________________________________________________________________________________________ +void fastNLOCreate::PrintScenConsts() { + //! Print scenario constants + logger.info["PrintScenConsts"] << "==================================================================" << endl; + logger.info["PrintScenConsts"] << "Printing scenario constants" << endl; + logger.info["PrintScenConsts"] << "------------------------------------------------------------------" << endl; + logger.info["PrintScenConsts"] << "Scenario name: " << fScenConsts.ScenarioName << endl; + logger.info["PrintScenConsts"] << "Data cross section prefactor (neg. power of 10: pb->12, fb->15): " << fScenConsts.PublicationUnits << endl; + for (unsigned int i=0; i<fScenConsts.ScenarioDescription.size(); i++) { + logger.info["PrintScenConsts"] << "Scenario description, [" << i << "]: " << fScenConsts.ScenarioDescription[i] << endl; + } + logger.info["PrintScenConsts"] << "Dimensionality of binning: " << fScenConsts.DifferentialDimension << endl; + for (unsigned int i=0; i<fScenConsts.DimensionLabels.size(); i++) { + logger.info["PrintScenConsts"] << "Label (symbol and unit) for the measurement dimension [" << i << "]: " << fScenConsts.DimensionLabels[i] << endl; + } + for (unsigned int i=0; i<fScenConsts.DimensionIsDifferential.size(); i++) { + logger.info["PrintScenConsts"] << "Specify for each dimension whether cross section is non-, point-wise, or bin-wise differential: [" << i << "]: " << fScenConsts.DimensionIsDifferential[i] << endl; + } + logger.info["PrintScenConsts"] << "Calculate bin width from lower and upper bin boundaries: " << fScenConsts.CalculateBinSize << endl; + logger.info["PrintScenConsts"] << "Additional normalization factor for all bins: " << fScenConsts.BinSizeFactor << endl; + for (unsigned int i=0; i<fScenConsts.BinSize.size(); i++) { + logger.info["PrintScenConsts"] << "Additional normalization factor for bin [" << i << "]: " << fScenConsts.BinSize[i] << endl; + } + logger.info["PrintScenConsts"] << "Base scale to be used for mu_r, muf; must be in [GeV]: " << fScenConsts.ScaleDescriptionScale1 << endl; + logger.info["PrintScenConsts"] << "Second scale, only used in flexible-scale tables: " << fScenConsts.ScaleDescriptionScale2 << endl; + // Single-, double, triple-differential binnings + logger.info["PrintScenConsts"] << "Center-of-mass energy in [GeV]: " << fScenConsts.CenterOfMassEnergy << endl; + logger.info["PrintScenConsts"] << "PDF of 1st hadron: " << fScenConsts.PDF1 << endl; + logger.info["PrintScenConsts"] << "PDF of 2nd hadron: " << fScenConsts.PDF2 << endl; + logger.info["PrintScenConsts"] << "Filename of fastNLO output table: " << fScenConsts.OutputFilename << endl; + logger.info["PrintScenConsts"] << "If zlib available, gzip output table: " << fScenConsts.OutputCompression << endl; + logger.info["PrintScenConsts"] << "Number of decimal digits to store in output table: " << fScenConsts.OutputPrecision << endl; + logger.info["PrintScenConsts"] << "Cache type (0,1,2): " << fScenConsts.CacheType << endl; + logger.info["PrintScenConsts"] << "Maximum cache size: " << fScenConsts.CacheMax << endl; + logger.info["PrintScenConsts"] << "Number of comparisons (cache): " << fScenConsts.CacheCompare << endl; + logger.info["PrintScenConsts"] << "Create table fully flexible in mu_f: " << fScenConsts.FlexibleScaleTable << endl; + logger.info["PrintScenConsts"] << "No. of flex scales filled simultaneously: " << fScenConsts.NFlexScales << endl; + logger.info["PrintScenConsts"] << "Constant used for scale2, if only one flex-scale requested: " << fScenConsts.FlexConstScale2 << endl; + logger.info["PrintScenConsts"] << "InclusiveJets setting for NNLOJET: " << fScenConsts.InclusiveJets << endl; + logger.info["PrintScenConsts"] << "ReduceXmin by n nodes (no change in number of nodes): " << fScenConsts.ReduceXmin << endl; + for (unsigned int i=0; i<fScenConsts.ScaleVariationFactors.size(); i++) { + logger.info["PrintScenConsts"] << "Factorization scale variation factor [" << i << "]: " << fScenConsts.ScaleVariationFactors[i] << endl; + } + logger.info["PrintScenConsts"] << "Specify whether binning is set from scenario or from warmup: " << fScenConsts.ReadBinningFromSteering << endl; + logger.info["PrintScenConsts"] << "Do not crosscheck warmup binning to avoid too many floating precision issues: " << fScenConsts.IgnoreWarmupBinningCheck << endl; + logger.info["PrintScenConsts"] << "Apply reweighting of PDFs for an optimized interpolation: " << fScenConsts.ApplyPDFReweighting << endl; + logger.info["PrintScenConsts"] << "Set limits for scale nodes to bin borders, if possible: " << fScenConsts.CheckScaleLimitsAgainstBins << endl; + logger.info["PrintScenConsts"] << "Interpolation kernel in x space: " << fScenConsts.X_Kernel << endl; + logger.info["PrintScenConsts"] << "Distance measure in x space: " << fScenConsts.X_DistanceMeasure << endl; + logger.info["PrintScenConsts"] << "No. of interpolation nodes in x space: " << fScenConsts.X_NNodes << endl; + logger.info["PrintScenConsts"] << "Distribution of node numbers in x space: " << fScenConsts.X_NNodeCounting << endl; + logger.info["PrintScenConsts"] << "Interpolation kernel in mu1 space: " << fScenConsts.Mu1_Kernel << endl; + logger.info["PrintScenConsts"] << "Distance measure in mu1 space: " << fScenConsts.Mu1_DistanceMeasure << endl; + logger.info["PrintScenConsts"] << "No. of interpolation nodes in mu1 space: " << fScenConsts.Mu1_NNodes << endl; + logger.info["PrintScenConsts"] << "Distribution of node numbers in mu1 space: " << fScenConsts.Mu1_NNodeCounting << endl; + logger.info["PrintScenConsts"] << "Interpolation kernel in mu2 space: " << fScenConsts.Mu2_Kernel << endl; + logger.info["PrintScenConsts"] << "Distance measure in mu2 space: " << fScenConsts.Mu2_DistanceMeasure << endl; + logger.info["PrintScenConsts"] << "No. of interpolation nodes in mu2 space: " << fScenConsts.Mu2_NNodes << endl; + logger.info["PrintScenConsts"] << "Distribution of node numbers in mu2 space: " << fScenConsts.Mu2_NNodeCounting << endl; + logger.info["PrintScenConsts"] << "==================================================================" << endl; +} + + +// ___________________________________________________________________________________________________ +void fastNLOCreate::PrintWarmupConsts() { + //! Print warmup constants + logger.info["PrintWarmupConsts"] << "==================================================================" << endl; + logger.info["PrintWarmupConsts"] << "Printing warmup constants" << endl; + logger.info["PrintWarmupConsts"] << "------------------------------------------------------------------" << endl; + logger.info["PrintWarmupConsts"] << "Order in alpha_s of warmup run: " << fWarmupConsts.OrderInAlphasOfWarmupRunWas << endl; + logger.info["PrintWarmupConsts"] << "Set limits for scale nodes to bin borders, if possible: " << fWarmupConsts.CheckScaleLimitsAgainstBins << endl; + logger.info["PrintWarmupConsts"] << "Base scale to be used for mu_r, muf; must be in [GeV]: " << fWarmupConsts.ScaleDescriptionScale1 << endl; + logger.info["PrintWarmupConsts"] << "Second scale, only used in flexible-scale tables: " << fWarmupConsts.ScaleDescriptionScale2 << endl; + logger.info["PrintWarmupConsts"] << "Dimensionality of binning: " << fWarmupConsts.DifferentialDimension << endl; + for (unsigned int i=0; i<fWarmupConsts.DimensionLabels.size(); i++) { + logger.info["PrintWarmupConsts"] << "Label (symbol and unit) for the measurement dimension [" << i << "]: " << fWarmupConsts.DimensionLabels[i] << endl; + } + for (unsigned int i=0; i<fWarmupConsts.DimensionIsDifferential.size(); i++) { + logger.info["PrintWarmupConsts"] << "Specify for each dimension whether cross section is non-, point-wise, or bin-wise differential: [" << i << "]: " << fWarmupConsts.DimensionIsDifferential[i] << endl; + } + // TODO Incomplete + for (const auto & vals : fWarmupConsts.Values) { + for (const auto & val : vals) { + cout << val << endl; + } + } + // Single-, double, triple-differential binnings + logger.info["PrintWarmupConsts"] << "==================================================================" << endl; +} + + +// ___________________________________________________________________________________________________ +bool fastNLOCreate::CheckTableConsts() { + //! Check that a reasonable combination of values has been set for a table + //! TODO This is most incomplete! + logger.debug["CheckTableConsts"]<<"Checking all table constants"<<endl; + bool checkok = true; + if (! CheckGenConsts()) return false; + if (! CheckProcConsts()) return false; + if (! CheckScenConsts()) return false; + // TODO Only for production run? + if (! CheckWarmupConsts()) return false; + return checkok; +} + + +// ___________________________________________________________________________________________________ +bool fastNLOCreate::CheckGenConsts() { + //! Check that reasonable generator constants have been set + //! TODO This is most incomplete! + logger.debug["CheckGenConsts"]<<"Checking generator constants"<<endl; + bool checkok = true; + return checkok; +} + + +// ___________________________________________________________________________________________________ +bool fastNLOCreate::CheckProcConsts() { + //! Check that reasonable values different from the defaults have been set + logger.debug["CheckProcConsts"]<<"Checking ProcConsts: "<<endl; + + bool checkok = true; + if (fProcConsts.LeadingOrder < 0) { + logger.warn["CheckProcConsts"]<<"Order in alpha_s of leading order process not properly set: "<<fProcConsts.LeadingOrder<<endl; + checkok = false; + } + if (fGenConsts.UnitsOfCoefficients < 0) { + logger.warn["CheckProcConsts"]<<"Power of X section units of coefficients not properly set: "<<fGenConsts.UnitsOfCoefficients<<endl; + checkok = false; + } + if (fProcConsts.NPDF < 1) { + logger.warn["CheckProcConsts"]<<"No. of PDFs not properly set: "<<fProcConsts.NPDF<<endl; + checkok = false; + } + if (fProcConsts.NSubProcessesLO < 1) { + logger.warn["CheckProcConsts"]<<"No. of LO subprocesses not properly set: "<<fProcConsts.NSubProcessesLO<<endl; + checkok = false; + } + if (fProcConsts.NSubProcessesNLO < 1) { + logger.warn["CheckProcConsts"]<<"No. of NLO subprocesses not properly set: "<<fProcConsts.NSubProcessesNLO<<endl; + checkok = false; + } + if (fProcConsts.NSubProcessesNNLO < 1) { + logger.warn["CheckProcConsts"]<<"No. of NNLO subprocesses not properly set: "<<fProcConsts.NSubProcessesNNLO<<endl; + checkok = false; + } + if (fProcConsts.IPDFdef1 < 0) { + logger.warn["CheckProcConsts"]<<"Flag 1 to define PDF linear combination not properly set: "<<fProcConsts.IPDFdef1<<endl; + checkok = false; + } + if (fProcConsts.IPDFdef2 < 0) { + logger.warn["CheckProcConsts"]<<"Flag 2 to define PDF linear combination not properly set: "<<fProcConsts.IPDFdef2<<endl; + checkok = false; + } + if (fProcConsts.IPDFdef3LO < 0) { + logger.warn["CheckProcConsts"]<<"Flag 3 LO to define PDF linear combination not properly set: "<<fProcConsts.IPDFdef3LO<<endl; + checkok = false; + } + if (fProcConsts.IPDFdef3NLO < 0) { + logger.warn["CheckProcConsts"]<<"Flag 3 NLO to define PDF linear combination not properly set: "<<fProcConsts.IPDFdef3NLO<<endl; + checkok = false; + } + if (fProcConsts.IPDFdef3NNLO < 0) { + logger.warn["CheckProcConsts"]<<"Flag 3 NNLO to define PDF linear combination not properly set: "<<fProcConsts.IPDFdef3NNLO<<endl; + checkok = false; + } + if (fProcConsts.NPDFDim < 0) { + logger.warn["CheckProcConsts"]<<"Internal storage mode for PDF LCs not properly set: "<<fProcConsts.NPDFDim<<endl; + checkok = false; + } + // std::vector<std::vector<std::pair<int,int> > > PDFCoeffLO; //! PDF Linear combinations for LO calculation (used only if IPDFdef2==0) + // std::vector<std::vector<std::pair<int,int> > > PDFCoeffNLO; //! PDF Linear combinations for NLO calculation (used only if IPDFdef2==0) + // std::vector<std::vector<std::pair<int,int> > > PDFCoeffNNLO; //! PDF Linear combinations for NNLO calculation (used only if IPDFdef2==0) + // std::vector<std::pair<int,int> > AsymmetricProcesses; //!< (if NPDFDim=1) Specify processes that need to be exchanged in half-matrix notation, when xmin>xmax + // std::vector<std::string > ProcDescr(References.size()+iadd); + + return checkok; +} + + +// ___________________________________________________________________________________________________ +bool fastNLOCreate::CheckScenConsts() { + //! Check that reasonable scenario constants have been set + //! TODO This is most incomplete! + logger.debug["CheckScenConsts"]<<"Checking scenario constants"<<endl; + bool checkok = true; + return checkok; +} + + +// ___________________________________________________________________________________________________ +bool fastNLOCreate::CheckWarmupConsts() { + //! Check that reasonable warmup constants have been set + //! TODO This is most incomplete! + logger.debug["CheckWarmupConsts"]<<"Checking warmup constants"<<endl; + bool checkok = true; + return checkok; +} + + +// ___________________________________________________________________________________________________ +void fastNLOCreate::Instantiate() { + //! Instantiate all internal members + //! and prepare for filling + logger.debug["Instantiate"]<<"Instantiate all internal members and prepare for filling " << endl; + logger.debug["Instantiate"]<<"X_NNodeCounting is set to: "<<fScenConsts.X_NNodeCounting<<endl; + logger.debug["Instantiate"]<<"Mu1_NNodeCounting is set to: "<<fScenConsts.Mu1_NNodeCounting<<endl; + logger.debug["Instantiate"]<<"Mu2_NNodeCounting is set to: "<<fScenConsts.Mu2_NNodeCounting<<endl; + + // init member variables + fReader = NULL; + + fWarmupXMargin = 4; // was 4 + fWarmupNDigitMu1 = 1; //1 by purpose + fWarmupNDigitMu2 = 2; //2 by purpose + + fCacheMax = fScenConsts.CacheMax > 0 ? fScenConsts.CacheMax : 0; + fCacheCompare = fScenConsts.CacheCompare > 0 ? fScenConsts.CacheCompare : 0; + fCacheType = ( fScenConsts.CacheType>=0 && fScenConsts.CacheType<=2 ) ? fScenConsts.CacheType : 0; + SetCacheSize(fCacheMax,fCacheCompare,fCacheType); + + // Try to get warm-up values. + // Otherwise a warm-up run will be initialized. + logger.debug["Instantiate"]<<"Try to get warmup values; otherwise initiate a warmup run." << endl; + GetWarmupValues(); + + // --- ScenConsts sanity test + // ... + + ILOord = fProcConsts.LeadingOrder; + fIOrd = ILOord; // initialize with LO + + // ------------------------- + // header + SetScenName(fScenConsts.ScenarioName); + SetITabVersionWrite(fastNLO::tabversion); + + // ---- scenario specific flags + Ipublunits = fScenConsts.PublicationUnits; + ScDescript = fScenConsts.ScenarioDescription; + + Ecms = fScenConsts.CenterOfMassEnergy; // is often superseeded by generator-specific code. + INormFlag = 0; + + string filename = fScenConsts.OutputFilename; + + if (filename.find(".gz") != string::npos && fScenConsts.OutputCompression) { + logger.info["Instantiate"]<<"zlib compression requested."<<endl; + } else if (filename.find(".gz") == string::npos && fScenConsts.OutputCompression) { + logger.info["Instantiate"]<<"zlib compression requested. Adding .gz to filename."<<endl; + filename += ".gz"; + } else if (filename.find(".gz") == string::npos && !fScenConsts.OutputCompression) { + logger.info["Instantiate"]<<"No zlib compression requested. Writing uncompressed grids."<<endl; + } else { + logger.error["Instantiate"]<<"Inconsistent choice of uncompressed grid with filename ending in .gz, please fix. Exiting."<<endl; + exit(1); + } +#ifndef HAVE_LIBZ + if (fScenConsts.OutputCompression) { + logger.error["Instantiate"]<<"zlib compression requested, but zlib not found!"<<endl; + logger.error["Instantiate"]<<"Please recompile with zlib support or write uncompressed grids. Exiting."<<endl; + exit(1); + } +#endif /* HAVE_LIBZ */ + + SetFilename(filename); + + fIsFlexibleScale = fScenConsts.FlexibleScaleTable; + fNFlexScales = fScenConsts.NFlexScales; + fFlexConstScale2 = fScenConsts.FlexConstScale2; + fIsInclusiveJets = fScenConsts.InclusiveJets; + fReduceXmin = fScenConsts.ReduceXmin; + fApplyPDFReweight = fScenConsts.ApplyPDFReweighting; + SetOutputPrecision(fScenConsts.OutputPrecision); + + //if ( !fIsFlexibleScale ) ReadScaleFactors() ; // is called only when setting order of calculation + + + // ---- init bin grid + if (fIsWarmup) ReadBinningFromScenarioConsts(); + else if (fScenConsts.ReadBinningFromSteering) { + ReadBinningFromScenarioConsts(); + CheckWarmupConsistency(); + } else { + UseBinGridFromWarmup(); + } + + // now create one coefficient tasble. + InitCoeffTable(); + // no info output for the following calls + bool vol = logger.info.GetSpeak(); + logger.info.DoSpeak(false); + SetOrderOfAlphasOfCalculation(fIOrd); + logger.info.DoSpeak(vol);//reset verbosity level + + // Init interpolation kernels + if (!fIsWarmup) { + InitInterpolationKernels(); + InitGrids(); + } +} + + +// ___________________________________________________________________________________________________ +fastNLOCreate::~fastNLOCreate() { + // todo. cleanup arrays of kernels. +} + + +// ___________________________________________________________________________________________________ +void fastNLOCreate::ReadSteeringFile(std::string steerfile, std::string steeringNameSpace) { + //! Read in steering file + //! The filename of the steering file is used as the 'namespace' of keys in read_steer, + //! if there is no steering NameSpace given explicitly. + //! Do not set anything here in contrast to ReadSteering! + logger.debug["ReadSteeringFile"] << "Steerfile = " << steerfile << endl; + + //! Remove extension from steerfile to define default steering namespace + if (steeringNameSpace.empty()) { + steeringNameSpace = steerfile.substr(0, steerfile.find_last_of(".")); + } + logger.debug["ReadSteeringFile"] << "Steering NameSpace = " << steeringNameSpace << endl; + + //! Read file + READ_NS(steerfile,steeringNameSpace); + + //! Check steering + //! If defined, update verbosity from steering + if (EXIST_NS(GlobalVerbosity,steeringNameSpace)) SetGlobalVerbosity(STRING_NS(GlobalVerbosity,steeringNameSpace)); +} + + +// ___________________________________________________________________________________________________ +void fastNLOCreate::ReadSteering(string steerfile, string steeringNameSpace) { + //! read in steering file + //! The filename of the steering file + //! is used as the 'namespace' of keys in read_steer + //! if there is no steeringNameSpace given explicitly + + //! Remove extension from steerfile to define default steering namespace + string steerbase = steerfile.substr(0, steerfile.find_last_of(".")); + + logger.debug["ReadSteering"]<<"Steerfile = "<<steerfile<<endl; + if (steeringNameSpace.empty()) { + steeringNameSpace = steerbase; + } + fSteerfile = steeringNameSpace; + READ_NS(steerfile,fSteerfile); + + //! Set verbosity from steering or to default WARNING + if (EXIST_NS(GlobalVerbosity,fSteerfile)) + SetGlobalVerbosity(STRING_NS(GlobalVerbosity,fSteerfile)); + // else SetGlobalVerbosity("WARNING"); + else SetGlobalVerbosity("INFO"); + + //! Set WarmupFilename from steering + if (EXIST_NS(WarmUpFilename,fSteerfile)) { + SetWarmupTableFilename(STRING_NS(WarmUpFilename,fSteerfile)); + logger.debug["fastNLOCreate"]<<"The warmup filename set in steering file is: " << STRING_NS(WarmUpFilename,fSteerfile) << endl; + } else { + // string fWarmUpFile = STRING_NS(ScenarioName,fSteerfile) + "_" + steeringNameSpace + "_warmup.txt"; + // Default for NLOJet++ is like this; to be unified across generators and create methods + // TODO: KR: Consider keeping all warmup filenames to .wrm + // string fWarmUpFile = steeringNameSpace + "_" + STRING_NS(ScenarioName,fSteerfile) + "_warmup.txt"; + string fWarmUpFile = steeringNameSpace + "_" + STRING_NS(ScenarioName,fSteerfile) + ".wrm"; + SetWarmupTableFilename(fWarmUpFile); + logger.debug["fastNLOCreate"]<<"The warmup filename derived from steering is: " << fWarmUpFile << endl; + } + + // if (logger.info.GetSpeak()) + // PRINTALL(); +} + + +// ___________________________________________________________________________________________________ +vector<vector<pair<int,int> > > fastNLOCreate::ReadPartonCombinations(int ord, const vector<vector<int> >& PartonCombinations) { + //! Read PDF linear combinations from steering file + //! and convert to internal format + + + //vector<vector<int> > PartonCombinations; + if (ord==0) { + //PartonCombinations = INT_TAB_NS(PartonCombinationsLO,fSteerfile); + if ((int)PartonCombinations.size() != fProcConsts.NSubProcessesLO) { + logger.error["ReadPartonCombinations"]<<"Number of parton combinations for LO processes must be identical to number of subprocesses. NSubProcessesLO=" + <<fProcConsts.NSubProcessesLO<<", # parton combinations="<<PartonCombinations.size()<<". Exiting." <<endl; + exit(1); + } + } else if (ord==1) { + //PartonCombinations = INT_TAB_NS(PartonCombinationsNLO,fSteerfile); + if ((int)PartonCombinations.size() != fProcConsts.NSubProcessesNLO) { + logger.error["ReadPartonCombinations"]<<"Number of parton combinations for NLO processes must be identical to number of subprocesses. NSubProcessesNLO=" + <<fProcConsts.NSubProcessesNLO<<", # parton combinations="<<PartonCombinations.size()<<". Exiting." <<endl; + exit(1); + } + } else if (ord==2) { + //PartonCombinations = INT_TAB_NS(PartonCombinationsNNLO,fSteerfile); + if ((int)PartonCombinations.size() != fProcConsts.NSubProcessesNNLO) { + logger.error["ReadPartonCombinations"]<<"Number of parton combinations for NNLO processes must be identical to number of subprocesses. NSubProcessesNNLO=" + <<fProcConsts.NSubProcessesNNLO<<", # parton combinations="<<PartonCombinations.size()<<". Exiting." <<endl; + exit(1); + } + } + + string sord[3] = {"LO","NLO","NNLO"}; + vector<vector<pair<int,int> > > PDFCoeff(PartonCombinations.size()); + // check if all partons are used + vector<bool> b1(13); + vector<bool> b2(13); + for (int i = 0 ; i<13 ; i++) { + b1[i] = false; + b2[i] = false; + } + for (unsigned int k=0 ; k<PartonCombinations.size() ; k++) { + if (PartonCombinations[k].empty()) { + logger.error["ReadPartonCombinations"]<<"Row "<<k<<" PartonCombinations"<<sord[ord]<<" does not contain any information. Exiting."<<endl; + exit(1); + } + int iSubProc = PartonCombinations[k][0]; + if (iSubProc >= (int)PDFCoeff.size()) { + logger.error["ReadPartonCombinations"]<<"Subprocess "<<iSubProc<<" in row "<<k+1<<" of PartonCombinations"<<sord[ord]<<" is larger than the total number of subprocesses. Exiting."<<endl; + exit(1); + } + if (PartonCombinations[k].size()%2 != 1 || PartonCombinations[k].size()<=1) { + logger.error["ReadPartonCombinations"]<<"Row "<<k<<" of PartonCombinations"<<sord[ord]<<" does not fit format: 'iProc [pair0] [pair1] ... [pairN]. Exiting"<<endl; + exit(1); + } + if (!PDFCoeff[iSubProc].empty()) { + logger.error["ReadPartonCombinations"]<<"Subprocess "<<iSubProc<<" appears twice in the PartonCombinations"<<sord[ord]<<". Exiting."<<endl; + exit(1); + } + + for (unsigned int i=1 ; i<PartonCombinations[k].size() ; i+=2) { + logger.debug["ReadPartonCombinations"]<<"Adding to subprocess "<<iSubProc<<" parton pair (" << PartonCombinations[k][i]<<","<<PartonCombinations[k][i+1]<<")."<<endl; + int iPart1 = PartonCombinations[k][i]; + int iPart2 = PartonCombinations[k][i+1]; + if (std::abs(iPart1) > 6 || std::abs(iPart2) > 6) { + logger.error["ReadPartonCombinations"]<<"Parton flavor is larger than 6. There is nothing beyond the top-quark. Exiting."<<endl; + exit(1); + } + // KR: Switch off warning. Using the same flavour of a parton in multiple combinations is no problem. + // if ( b1[iPart1+6] ) logger.warn["ReadPartonCombinations"]<<"Parton "<<iPart1<<" of hadron 1 is used multiple times in PartonCombinations"<<sord[ord]<<"."<<endl; + // if ( b2[iPart2+6] ) logger.warn["ReadPartonCombinations"]<<"Parton "<<iPart2<<" of hadron 2 is used multiple times in PartonCombinations"<<sord[ord]<<"."<<endl; + + b1[iPart1+6] = true; + b2[iPart2+6] = true; + PDFCoeff[iSubProc].push_back(std::make_pair(iPart1,iPart2)); + } + } + + // check if all subprocesses are filled + for (unsigned int k=1 ; k<PDFCoeff.size() ; k++) { + if (PDFCoeff[k].empty()) { + logger.error["ReadPartonCombinations"]<<"PartonCombinations"<<sord[ord]<<" does not contain any information about PDF for subprocess "<<k<<". Exiting."<<endl; + exit(1); + } + } + // check if all partons are used + // gluons and quarks up to b, bbar must be present --> error + for (int p = 1 ; p<12 ; p++) { + if (!b1[p]) { + logger.error["ReadPartonCombinations"]<<"Parton "<<p-6<<" of hadron 1 is not used in PartonCombinations"<<sord[ord]<<". Exiting."<<endl; + exit(1); + } + if (!b2[p]) { + logger.error["ReadPartonCombinations"]<<"Parton "<<p-6<<" of hadron 2 is not used in PartonCombinations"<<sord[ord]<<". Exiting."<<endl; + exit(1); + } + } + // t, tbar might be absent --> info + int p = 0; + if (!b1[p]) logger.info["ReadPartonCombinations"]<<"Parton "<<p-6<<" of hadron 1 is not used in PartonCombinations"<<sord[ord]<<"."<<endl; + if (!b2[p]) logger.info["ReadPartonCombinations"]<<"Parton "<<p-6<<" of hadron 2 is not used in PartonCombinations"<<sord[ord]<<"."<<endl; + p = 12; + if (!b1[p]) logger.info["ReadPartonCombinations"]<<"Parton "<<p-6<<" of hadron 1 is not used in PartonCombinations"<<sord[ord]<<"."<<endl;; + if (!b2[p]) logger.info["ReadPartonCombinations"]<<"Parton "<<p-6<<" of hadron 2 is not used in PartonCombinations"<<sord[ord]<<"."<<endl;; + + return PDFCoeff; +} + + +// ___________________________________________________________________________________________________ +void fastNLOCreate::SetGlobalVerbosity(string sverb) { + if (sverb=="DEBUG" || sverb=="Debug" || sverb=="debug") + speaker::SetGlobalVerbosity(say::DEBUG); + else if (sverb=="MANUAL" || sverb=="Manual" || sverb=="manual") + speaker::SetGlobalVerbosity(say::MANUAL); + else if (sverb=="INFO" || sverb=="Info" || sverb=="info") + speaker::SetGlobalVerbosity(say::INFO); + else if (sverb=="WARNING" || sverb=="Warning" || sverb=="warning") + speaker::SetGlobalVerbosity(say::WARNING); + else if (sverb=="ERROR" || sverb=="Error" || sverb=="error") + speaker::SetGlobalVerbosity(say::ERROR); + else if (sverb=="SILENT" || sverb=="Silent" || sverb=="silent") + speaker::SetGlobalVerbosity(say::SILENT); + else + speaker::SetGlobalVerbosity(say::INFO); +} + + +// ___________________________________________________________________________________________________ +void fastNLOCreate::ReadScaleFactors() { + //! read scale factors from steering + //! and init member fScaleFac + + if (fIsFlexibleScale) {logger.warn["ReadScaleFactors"]<<"This function is only reasonable for fixed-scale tables!"<<endl;} + vector<double> svar = fScenConsts.ScaleVariationFactors;// DOUBLE_ARR_NS(ScaleVariationFactors,fSteerfile); + fScaleFac.resize(svar.size()); + if (svar.empty()) { + // 'ScaleVariationFactors' not found -> using default + logger.warn["ReadScaleFactors"]<<"No list of scale-factors found in steering file. Using only scale-factor of '1.0'."<<endl; + fScaleFac.push_back(1.0); + } else if (GetTheCoeffTable() && GetTheCoeffTable()->IsLO()) { + // scale-factors not needed -> using default of 1.0 + logger.info["ReadScaleFactors"]<<"This is a leading-order run. There is no MuF scale dependence in LO. Using only scale factor of 1.0."<<endl; + fScaleFac.resize(1); + fScaleFac[0] = 1.0; + } else if (fIsWarmup) { + // scale-factors not needed -> using default of 1.0 + logger.info["ReadScaleFactors"]<<"This is a warmup run. Using only scale factor of 1.0."<<endl; + fScaleFac.resize(1); + fScaleFac[0] = 1.0; + } else { + // sort list according to fastNLO conventions + // 0: 1.0 + // 1-n: nmin...nmax (without 1.0) + vector<double> vtemp; + bool foundunity = false; + for (unsigned int k = 0 ; k<svar.size(); k++) { + if (fabs(svar[k]-1.0)<1.e-8 && foundunity) { + logger.info["ReadScaleFactors"]<<"Found scale factor 1.0 two times in list ScaleVariationFactors. Ignoring second appearance."<<endl; + fScaleFac.resize(fScaleFac.size()-1); + } else if (fabs(svar[k]-1.0)<1.e-8) foundunity = true; + else vtemp.push_back(svar[k]); + } + if (!foundunity) { + logger.error["ReadScaleFactors"]<<"Could not find scale factor of 1.0 in list ScaleVariationFactors. Exiting."<<endl; + exit(1); + } + sort(vtemp.begin(),vtemp.end()); + + fScaleFac[0] = 1.0; + int s = 0; + for (unsigned int k = 0 ; k<vtemp.size(); k++) { + fScaleFac[s+1] = vtemp[k]; + if (fScaleFac[s+1] == fScaleFac[s]) { + logger.info["ReadScaleFactors"]<<"Found scale factor '"<<fScaleFac[k+1]<<"' two times in list ScaleVariationFactors. Ignoring second appearance."<<endl; + fScaleFac.resize(fScaleFac.size()-1); + s--; + } + s++; + } + } + logger.info["ReadScaleFactors"] << "Using the following scale factors:" << endl; + for (unsigned int k = 0 ; k<fScaleFac.size(); k++) + logger.info["ReadScaleFactors"] << "ScaleVar " << k << ": " << fScaleFac[k] << endl; +} + + +// ___________________________________________________________________________________________________ +void fastNLOCreate::InitCoeffTable() { + logger.debug["InitCoeffTable"]<<endl; + //! create a coeff table + //CreateCoeffTable(0); + CreateCoeffTable(); + + //! set 'usual' variables for perturbative calculations + InitVariablesInCoefficientTable(); + + //! read in process specific variables + ReadCoefficientSpecificVariables(); +} + + +// ___________________________________________________________________________________________________ +int fastNLOCreate::CreateCoeffTable() { + logger.debug["CreateCoeffTable"]<<endl; + if (!fCoeff.empty()) { + logger.error["CreateCoeffAddFix"]<<"Vector of coefficients must be empty, since only one coefficient table is allowed."<<endl; + exit(1); + } + if (fIsFlexibleScale) + return fastNLOTable::CreateCoeffTable(fCoeff.size(), new fastNLOCoeffAddFlex(NObsBin,ILOord)); + else + return fastNLOTable::CreateCoeffTable(fCoeff.size(), new fastNLOCoeffAddFix(NObsBin)); +} + + +// ___________________________________________________________________________________________________ +void fastNLOCreate::ReadBinningFromScenarioConsts() { + //! read in binning from ScenConsts + + // --- sanity checks + if (fScenConsts.DifferentialDimension<=0 || fScenConsts.DifferentialDimension>3) { + logger.error["ReadBinningFromScenarioConsts"]<<"fScenConsts seem not be be set!"<<endl; + exit(1); + } else { + NDim = fScenConsts.DifferentialDimension; + if (NDim==1 && fScenConsts.SingleDifferentialBinning.empty()) { + logger.error["ReadBinningFromScenarioConsts"]<<" NDim=1 requires also a 1D binning, but fScenConsts.SingleDifferentialBinning is empty."<<endl; + exit(1); + } + if (NDim==2 && fScenConsts.DoubleDifferentialBinning.empty()) { + logger.error["ReadBinningFromScenarioConsts"]<<" NDim=2 requires also a 1D binning, but fScenConsts.DoubleDifferentialBinning is empty."<<endl; + exit(1); + } + if (NDim==2 && fScenConsts.DoubleDifferentialBinning[0].empty()) { + logger.error["ReadBinningFromScenarioConsts"]<<" NDim=2 requires also a 1D binning, but fScenConsts.DoubleDifferentialBinning[0] is empty."<<endl; + exit(1); + } + if (NDim==3 && fScenConsts.TripleDifferentialBinning.empty()) { + logger.error["ReadBinningFromScenarioConsts"]<<" NDim=3 requires also a 1D binning, but fScenConsts.TripleDifferentialBinning is empty."<<endl; + exit(1); + } + } + + NDim = fScenConsts.DifferentialDimension; + DimLabel = fScenConsts.DimensionLabels; + IDiffBin = fScenConsts.DimensionIsDifferential; + DimLabel.resize(NDim); //safety + IDiffBin.resize(NDim); + + // ---- check IDiffBin + bool AllDiff = true; + bool AllBinInt = true; + for (unsigned int i = 0 ; i<IDiffBin.size() ; i++) { + AllDiff = AllDiff && (IDiffBin[i] == 1); + AllBinInt = AllBinInt && (IDiffBin[i] != 1); + } + if (!AllDiff && !AllBinInt) { + logger.error["ReadBinningFromScenarioConsts"]<<"All dimensions must be consistently either bin-integrated, or truly differential dimensions. Exiting."<<endl; + exit(1); + } + + // ---- read bin grid + if (NDim == 1) + SetBinningND(fScenConsts.SingleDifferentialBinning, NDim, IDiffBin); + else if (NDim==2) + SetBinningND(fScenConsts.DoubleDifferentialBinning, NDim, IDiffBin); + else if (NDim==3) { + logger.error["ReadBinningFromScenarioConsts"]<<"The code for reading of "<<NDim<<"-dimensional binnings from ScenarioConstants is not implemented."<<endl; + vector<vector<double> > in = DOUBLE_TAB_NS(TripleDifferentialBinning,fSteerfile); //backward compatibility! not compatible with constructor(genConst,procConst,ScenConst) + SetBinningND(in, NDim, IDiffBin); + //exit(3); + } + + // ---- Bin width + ReadBinSize(); + + logger.info["ReadBinningFromScenarioConsts"]<<"Read in successfully "<<NDim<<"-dimensional bin grid with "<<NObsBin<<" bins."<<endl; + +} + + +// ___________________________________________________________________________________________________ +void fastNLOCreate::ReadBinning() { + + logger.warn["ReadBinning"]<<"This function is deprecated and should not be called. Exiting."<<endl; + exit(23); + + // optimize read-in of bin grids + // ToDo. Check sanity of bin-grid + + NDim = INT_NS(DifferentialDimension,fSteerfile); + //Scenario.SetNDim(NDim); + if (STRING_ARR_NS(DimensionLabels,fSteerfile).size() < NDim) { + logger.error["ReadBinning"]<<"Each dimension needs a bin label. Exiting."<<endl; + exit(1); + } + DimLabel = STRING_ARR_NS(DimensionLabels,fSteerfile); + if (INT_ARR_NS(DimensionIsDifferential,fSteerfile).size() < NDim) { + logger.error["ReadBinning"]<<"Each dimension need to specify if differential or not. Exiting."<<endl; + exit(1); + } + IDiffBin = INT_ARR_NS(DimensionIsDifferential,fSteerfile); + DimLabel.resize(NDim); //safety + IDiffBin.resize(NDim); + + // ---- check IDiffBin + bool AllDiff = true; + bool AllBinInt = true; + for (unsigned int i = 0 ; i<IDiffBin.size() ; i++) { + AllDiff = AllDiff && (IDiffBin[i] == 1); + AllBinInt = AllBinInt && (IDiffBin[i] != 1); + } + if (!AllDiff && !AllBinInt) { + logger.error["ReadBinning"]<<"All dimensions must be consistently either bin-integrated, or truly differential dimensions. Exiting."<<endl; + exit(1); + } + if (AllDiff && NDim == 3) { + logger.error["ReadBinning"]<<"Fully differential and triple-differential binning not yet implemented. exiting"<<endl; + exit(1); + } + + // ---- read single-differential bin grid + if (NDim == 1) { + vector<double> bgrid = DOUBLE_ARR_NS(SingleDifferentialBinning,fSteerfile); + // SetBinning1D(bgrid, DimLabel[0], IDiffBin[0]); + SetBinningND(bgrid, NDim, IDiffBin); + } + + // ---- read double-differential bin grid + else if (NDim==2) { + vector<vector<double> > in = DOUBLE_TAB_NS(DoubleDifferentialBinning,fSteerfile); + // New binning code + SetBinningND(in, NDim, IDiffBin); + } + + // ---- read in triple-differential binning + else if (NDim==3) { + logger.warn["ReadBinning"]<<"The code for reading of "<<NDim<<"-dimensional binnings was not fully tested. Please verify the code and remove this statement."<<endl; + vector<vector<double> > in = DOUBLE_TAB_NS(TripleDifferentialBinning,fSteerfile); + // New binning code + SetBinningND(in, NDim, IDiffBin); + } else { + logger.error["ReadBinning"]<<"Reading of "<<NDim<<"-binnings from steering is not yet implemented. Exiting"<<endl; + exit(1); + } + + // ---- Bin width + ReadBinSize(); + + logger.info["ReadBinning"]<<"Read in successfully "<<NDim<<"-dimensional bin grid with "<<NObsBin<<" bins."<<endl; +} + + +// ___________________________________________________________________________________________________ +void fastNLOCreate::ReadBinSize() { + //! initialize BinSize + //! either from steering or from fScenConsts + + // --------------------------------- + // Bin size + // --------------------------------- + if (fScenConsts.CalculateBinSize) { + BinSize.resize(NObsBin); + bool idi = false; + for (unsigned int i = 0 ; i<NObsBin ; i++) { + BinSize[i] = 1; + for (unsigned int d=0 ; d<NDim ; d++) { + if (IDiffBin[d]==0) { + // nothing todo + } else if (IDiffBin[d]==1) { + // nothing todo + //logger.warn["ReadBinning"]<<"Don't know how to handle truly differential bins for bin widths."<<endl; + } else if (IDiffBin[d]==2) { + BinSize[i] *= Bin[i][d].second-Bin[i][d].first;//UpBin[i][d]-LoBin[i][d]; + idi = true; + } + } + // divide by binsizefactor, but only if at least one dimension is differential + if (idi) BinSize[i] *= fScenConsts.BinSizeFactor; + } + if (!idi) logger.debug["ReadBinning"]<<"BinSizeFactor is not being used, since no observable is calculated differential."<<endl; + } else { + // read in bin width + logger.warn["ReadBinning"]<<"Reading of 'BinSize' only poorly implemented! Improve it and remove this message."<<endl; + BinSize = fScenConsts.BinSize;//DOUBLE_ARR_NS(BinSize,fSteerfile); + if (BinSize.size()!=NObsBin) logger.warn["ReadBinning"]<<"Number of bins of 'BinSize' not consistent with bin grid."<<endl; + BinSize.resize(NObsBin); + for (unsigned int i = 0 ; i<NObsBin ; i++) { + if (BinSize[i]==0) BinSize[i] = 1.0; + } + } + +} + +/////////////////////////////////////////////// + +// ___________________________________________________________________________________________________ + +// +// Set continuous 1D binning via one vector containing all (n+1) bin edges +// +void fastNLOCreate::SetBinning1D(vector<double> bgrid, string label, unsigned int idiff) { + + // Create and set normalization vector to one + vector<double> vnorm; + unsigned int nbins = bgrid.size()-1; + if (idiff == 1) { nbins = bgrid.size(); } // Point-wise differential + vnorm.assign(nbins,1.); + + // Give task to more general method + SetBinning1D(bgrid, label, idiff, vnorm); + logger.info["SetBinning1D"] << "VSI: Set all normalization factors to one." << endl; +} + +// +// Set continuous 1D binning via one vector containing all (n+1) bin edges with normalization factor +// +void fastNLOCreate::SetBinning1D(vector<double> bgrid, string label, unsigned int idiff, double norm) { + + // Create and set normalization vector to norm + vector<double> vnorm; + unsigned int nbins = bgrid.size()-1; + if (idiff == 1) { nbins = bgrid.size(); } // Point-wise differential + vnorm.assign(nbins,norm); + + // Give task to more general method + SetBinning1D(bgrid, label, idiff, vnorm); + logger.info["SetBinning1D"] << "VSID: Set all normalization factors to norm." << endl; +} + +// +// Set continuous 1D binning via one vector containing all (n+1) bin edges with normalization factors in extra vector +// +void fastNLOCreate::SetBinning1D(vector<double> bgrid, string label, unsigned int idiff, vector<double> vnorm) { + + // Create and set two vectors with lower and upper bin edges + vector<double> blow; + vector<double> bupp; + for (unsigned int i = 0; i<bgrid.size()-1; i++) { + blow.push_back(bgrid[i]); + bupp.push_back(bgrid[i+1]); + } + + // Give task to more general method + SetBinning1D(blow, bupp, label, idiff, vnorm); + logger.info["SetBinning1D"] << "VSIV: Set vectors of lower and upper bin edges." << endl; +} + +// +// Set 1D binning allowing gaps via two vectors containing lower and upper bin edges +// +void fastNLOCreate::SetBinning1D(vector<double> blow, vector<double> bupp, string label, unsigned int idiff) { + + // Create and set normalization vector to one + vector<double> vnorm; + vnorm.assign(blow.size(),1.); + + // Give task to more general method + SetBinning1D(blow, bupp, label, idiff, vnorm); + logger.info["SetBinning1D"] << "VVSI: Set all normalization factors to one." << endl; +} + +// +// Set 1D binning allowing gaps via two vectors containing lower and upper bin edges with normalization factor +// +void fastNLOCreate::SetBinning1D(vector<double> blow, vector<double> bupp, string label, unsigned int idiff, double norm) { + + // Create and set normalization vector to norm + vector<double> vnorm; + vnorm.assign(blow.size(),norm); + + // Give task to more general method + SetBinning1D(blow, bupp, label, idiff, vnorm); + logger.info["SetBinning1D"] << "VVSID: Set all normalization factors to norm." << endl; +} + +// +// Set 1D binning allowing gaps via two vectors containing lower and upper bin edges with normalization factors in extra vector +// +void fastNLOCreate::SetBinning1D(vector<double> blow, vector<double> bupp, string label, unsigned int idiff, vector<double> vnorm) { + + // Define 1-dimensional observable binning + NDim = 1; + DimLabel.resize(NDim); + IDiffBin.resize(NDim); + + // Check input: Type of differential binning + DimLabel[0] = label; + IDiffBin[0] = idiff; + if (idiff > 2) { + logger.error["SetBinning1D"] << "Illegal choice of differentiality, idiff = " << idiff << ", aborted!" << endl; + logger.error["SetBinning1D"] << "Dimension must either be non-differential (idiff=0), " << endl; + logger.error["SetBinning1D"] << "point-wise differential (idiff=1), or bin-wise differential (idiff=2)." << endl; + exit(1); + } + + // Check input: Gaps are fine, overlaps are not. Overlaps might lead to double-counting in normalization. + if (blow.size() != bupp.size()) { + logger.error["SetBinning1D"] << "Unequal size of bin border vectors, blow.size() = " << blow.size() << + ", bupp.size() = " << bupp.size() << ", aborted!" << endl; + exit(1); + } + for (unsigned int i = 0; i<blow.size(); i++) { + if (idiff == 1) { // Point-wise differential + if (blow[i] != bupp[i]) { + logger.error["SetBinning1D"] << "Illegal binning, lower and upper bin edges must be equal for point-wise differential binnings, aborted!" << endl; + logger.error["SetBinning1D"] << "i = " << i << ", lower edge = " << blow[i] << + ", and upper edge = " << bupp[i] << endl; + exit(1); + } + } else { // Non- and bin-wise differential + if (blow[i] >= bupp[i]) { + logger.error["SetBinning1D"] << "Illegal binning, lower bin edge larger or equal to upper one, aborted!" << endl; + logger.error["SetBinning1D"] << "i = " << i << ", lower edge = " << blow[i] << + ", and upper edge = " << bupp[i] << endl; + exit(1); + } + if (i<blow.size()-1 && bupp[i] > blow[i+1]) { + logger.error["SetBinning1D"] << "Illegal binning, overlapping bins, aborted!" << endl; + logger.error["SetBinning1D"] << "i = " << i << ", upper edge = " << bupp[i] << + ", and lower edge of i+1 = " << blow[i+1] << endl; + exit(1); + } + } + } + + // Check input: Normalization factor must be larger than zero for all bins + if (blow.size() != vnorm.size()) { + logger.error["SetBinning1D"] << "Unequal size of bin border and normalization vectors, blow.size() = " << blow.size() << + ", vnorm.size() = " << vnorm.size() << ", aborted!" << endl; + exit(1); + } + for (unsigned int i = 0; i<vnorm.size(); i++) { + if (vnorm[i] < DBL_MIN) { + logger.error["SetBinning1D"] << "Normalization factor is too small, aborted!" << endl; + logger.error["SetBinning1D"] << "i = " << i << ", vnorm[i] = " << vnorm[i] << endl; + exit(1); + } + } + + // Set differential binning and normalization + NObsBin = blow.size(); + Bin.resize(NObsBin); + BinSize.resize(NObsBin); + for (unsigned int i = 0; i<blow.size(); i++) { + Bin[i].resize(1); + Bin[i][0] = make_pair(blow[i],bupp[i]); + BinSize[i] = 1; + if (idiff == 2) { // Divide by bin width times additional normalization factor + BinSize[i] *= (Bin[i][0].second-Bin[i][0].first) * vnorm[i]; + } + } + logger.info["SetBinning1D"] << "VVSIV: Set binning successfully for " << NObsBin << " bins in " << NDim << "dimensions." << endl; +} + +/////////////////// ND + +// +// Set continuous n-dimensional binning via a vector with bin edges +// +void fastNLOCreate::SetBinningND(vector<double> bgrid, unsigned int ndim, vector<int> idiff) { + + // Create and set vector of vectors with bin edges (pairs) + vector<vector<double> > bgrid2; + bgrid2.push_back(bgrid); + + // Give task to more general method + SetBinningND(bgrid2, ndim, idiff); + logger.info["SetBinningND"] << "VIV: Set binning via vector with bin edges." << endl; +} + + +// +// Set continuous n-dimensional binning via a vector of vectors with bin edges (pairs) +// +void fastNLOCreate::SetBinningND(vector<vector<double> > bgrid, unsigned int ndim, vector<int> idiff) { + + // Check input: Dimensions, labels and idiff settings + if (ndim < 1) { + logger.error["SetBinningND"] << "Illegal # of dimensions, aborted!" << endl; + logger.error["SetBinningND"] << "ndim = " << ndim << endl; + exit(1); + } else if (ndim > 3) { + logger.error["SetBinningND"] << "More than three dimensions not yet supported, aborted!" << endl; + logger.error["SetBinningND"] << "ndim = " << ndim << endl; + exit(1); + } + if (ndim != idiff.size()) { + logger.error["SetBinningND"] << "Inconsistency between # of dimensions and vector length for differentiality settings, aborted!" << endl; + logger.error["SetBinningND"] << "Number of dimensions ndim = " << ndim << ", # of idiff settings = " << idiff.size() << endl; + exit(1); + } + + // Check input: Type of differential binning + for (unsigned int i=0; i<ndim; i++) { + if (idiff[i] < 0 || idiff[i] > 2) { + logger.error["SetBinningND"] << "Illegal choice of differentiality, idim = " << i << ", idiff = " << idiff[i] << ", aborted!" << endl; + logger.error["SetBinningND"] << "Each dimension must either be non-differential (idiff=0), " << endl; + logger.error["SetBinningND"] << "point-wise differential (idiff=1), or bin-wise differential (idiff=2)." << endl; + exit(1); + } + } + + // Write ND binning to vector[NObsBin] with bin edges in pairs, one for each dimension. + // (For point-wise differential distributions the two bin edges are set to be identical!) + // Initialize storage structure Bin + NObsBin = 0; + Bin.clear(); + // Each 'line' of numbers start with pairs of bin edges (or one bin center) for each dimension 0 ... n-1 + // followed by strictly monotonously increasing bin borders as for a 1-dimensional histogram. + // (In principal, each observable bin can be defined completely independently, but the pattern used + // here covers the most frequent use cases in a more comfortable way.) + // Initialize shift that indicates where the innermost dimension with histogram-like borders starts + int ishift = 0; + // Allow differentiation between increment by two for non- or bin-wise differential booking and + // increment by one for point-wise differential booking + for (unsigned int i = 0; i<ndim-1; i++) { // No shift for 1D + // int istep = 2; // Increment by two for non- or bin-wise differential booking + // if ( idiff[i] == 1 ) {istep = 1;} // else increment by one for point-wise differential + // ishift += istep; + ishift += ((idiff[i] == 1) ? 1 : 2); // Try ternary operator for this + } + + // Loop over input vectors with two (one, for idiff=1) entries per dimension plus 'n+1' entries for 'n' bins of innermost dimension + for (unsigned int i = 0; i<bgrid.size(); i++) { + logger.debug["SetBinningND"] << "i = " << i << ", iObsBin = " << NObsBin << ", ishift = " << ishift << endl; + + // Loop over 'n' 'histogram' bins + for (unsigned int j = ishift ; j<bgrid[i].size()-1; j++) { + Bin.push_back(vector<pair<double,double> >(ndim)); + + // Keep track of additional increment in vector for non- or bin-wise differential of the 'n-1' outer dimensions + int kshift = 0; + for (unsigned int k = 0; k<ndim-1; k++) { + logger.debug["SetBinningND"] << "i = " << i << ", j = " << j << ",k+kshift = " << k+kshift << ", bgrid i,k+kshift = " << bgrid[i][k+kshift] << endl; + logger.debug["SetBinningND"] << "i = " << i << ", j = " << j << ",k+kshift+1 = " << k+kshift+1 << ", bgrid i,k+kshift+1 = " << bgrid[i][k+kshift+1] << endl; + if (idiff[k] == 1) { // Point-wise differential --> one bin center, set bin edges identical + logger.warn["SetBinningND"] << "Point-wise differential binning implemented, but not tested extensively. Please check carefully!" << endl; + Bin[NObsBin][k] = make_pair(bgrid[i][k+kshift],bgrid[i][k+kshift]); + } else { // Non- or bin-wise differential --> two bin edges + if (!(bgrid[i][k+kshift] < bgrid[i][k+kshift+1])) { + logger.error["SetBinningND"] << "Illegal binning, lower bin edge larger or equal to upper one, aborted!" << endl; + logger.error["SetBinningND"] << "i, k = " << i << ", " << k << ", lower edge = " << bgrid[i][k+kshift] << + ", and upper edge = " << bgrid[i][k+kshift+1] << endl; + exit(1); + } + Bin[NObsBin][k] = make_pair(bgrid[i][k+kshift],bgrid[i][k+kshift+1]); + kshift++; + } + } + + if (idiff[ndim-1] == 1) { // Point-wise differential --> one bin center + logger.warn["SetBinningND"] << "Point-wise differential binning implemented, but not tested extensively. Please check carefully!" << endl; + Bin[NObsBin][ndim-1] = make_pair(bgrid[i][j],bgrid[i][j]); + } else { // Non- or bin-wise differential --> two bin edges + logger.debug["SetBinningND"] << "i = " << i << ", j = " << j << ", bgrid i,j = " << bgrid[i][j] << endl; + logger.debug["SetBinningND"] << "i = " << i << ", j = " << j << ", bgrid i,j+1 = " << bgrid[i][j+1] << endl; + if (!(bgrid[i][j] < bgrid[i][j+1])) { + logger.error["SetBinningND"] << "Illegal binning, lower bin edge larger or equal to upper one, aborted!" << endl; + logger.error["SetBinningND"] << "i, j = " << i << ", " << j << ", lower edge = " << bgrid[i][j] << + ", and upper edge = " << bgrid[i][j+1] << endl; + exit(1); + } + Bin[NObsBin][ndim-1] = make_pair(bgrid[i][j],bgrid[i][j+1]); + } + NObsBin++; + } + } + + // Check on monotonously increasing bin edges of 'n-1' outer dimensions + // Jumps in more inner dimension allowed only at bin edge of more outer dimension + // This rule is not required in principal, but for the use of comfort functions for histogramming + if (NObsBin > 1) { + for (unsigned int i=0; i<NObsBin-1; i++) { + if ((Bin[i+1][0].first - Bin[i][0].first) < -DBL_MIN) { + logger.error["SetBinningND"] << "Illegal binning, lower bin edge larger than upper one for outermost dimension, aborted!" << endl; + logger.error["SetBinningND"] << "The problematic observable bins are " << i << " and " << i+1 << endl; + logger.error["SetBinningND"] << "The bin edges for observable bin " << i << " are: Bin[i][0].first = " << Bin[i][0].first << ", Bin[i][0].second = " << Bin[i][0].second << endl; + logger.error["SetBinningND"] << "The bin edges for observable bin " << i+1 << " are: Bin[i+1][0].first = " << Bin[i+1][0].first << ", Bin[i+1][0].second = " << Bin[i+1][0].second << endl; + exit(1); + } + bool lordered = false; + for (unsigned int j=0; j<ndim; j++) { + logger.debug["SetBinningND"] << "Before: iobs = " << i << ", jdim = " << j << ", lordered = " << lordered << ", Bin i,j = " << Bin[i][j].first << ", Bin i+1,j = " << Bin[i+1][j].first << endl; + // if ( !lordered && Bin[i][j].first < Bin[i+1][j].first ) {lordered = true;} + if (!lordered && (Bin[i+1][j].first - Bin[i][j].first) > DBL_MIN) {lordered = true;} + logger.debug["SetBinningND"] << "After : iobs = " << i << ", jdim = " << j << ", lordered = " << lordered << ", Bin i,j = " << Bin[i][j].first << ", Bin i+1,j = " << Bin[i+1][j].first << endl; + } + if (! lordered) { + logger.error["SetBinningND"] << "Illegal binning, lower bin edge larger or equal to upper one, aborted!" << endl; + logger.error["SetBinningND"] << "The problematic observable bins are " << i << " and " << i+1 << endl; + for (unsigned int j=0; j<ndim; j++) { + logger.error["SetBinningND"] << "The bin edges for observable bin " << i << " in dimension " << j << " are: Bin[i][j].first = " << Bin[i][j].first << ", Bin[i][j].second = " << Bin[i][j].second << endl; + logger.error["SetBinningND"] << "The bin edges for observable bin " << i+1 << " in dimension " << j << " are: Bin[i+1][j].first = " << Bin[i+1][j].first << ", Bin[i+1][j].second = " << Bin[i+1][j].second << endl; + + } + exit(1); + } + } + } + + // Test new binning code + // unsigned int ndim0 = 0; + // unsigned int ndim1 = 0; + // unsigned int ndim2 = 0; + // unsigned int ndim0b = 0; + // unsigned int ndim1b = 0; + // unsigned int ndim2b = 0; + // std::vector< std::pair<double, double > > DimBins; + // if (NDim > 0) { + // ndim0 = GetNDim0Bins(); + // DimBins = GetDim0Bins(); + // ndim0b = DimBins.size(); + // cout << "ndim0, ndim0b = " << ndim0 << ", " << ndim0b << endl; + // for (unsigned int k=0; k<ndim0; k++) { + // cout << "dim0 k, low, up " << k << ", " << DimBins[k].first << ", " << DimBins[k].second << endl; + // } + // } + // if (NDim > 1) { + // for ( unsigned int i=0; i<ndim0; i++ ) { + // ndim1 = GetNDim1Bins(i); + // DimBins = GetDim1Bins(i); + // ndim1b = DimBins.size(); + // cout << "ndim1, ndim1b = " << ndim1 << ", " << ndim1b << endl; + // for (unsigned int k=0; k<ndim1; k++) { + // cout << "dim1 k, low, up " << k << ", " << DimBins[k].first << ", " << DimBins[k].second << endl; + // } + // } + // } + // if (NDim > 2) { + // for ( unsigned int i=0; i<ndim0; i++ ) { + // for ( unsigned int j=0; j<ndim1; j++ ) { + // ndim2 = GetNDim2Bins(i,j); + // DimBins = GetDim2Bins(i,j); + // ndim2b = DimBins.size(); + // cout << "ndim2, ndim2b = " << ndim2 << ", " << ndim2b << endl; + // for (unsigned int k=0; k<ndim2; k++) { + // cout << "dim2 k, low, up " << k << ", " << DimBins[k].first << ", " << DimBins[k].second << endl; + // } + // } + // } + // } + + // unsigned int nbins = DimBins.size(); + // cout << "ZZZ iDim = " << i << ", nbins = " << nbins << endl; + // for ( unsigned int j=0; j<nbins; j++) { + // cout << "ZZZ uniqbins first = " << DimBins[j].first << ", uniqbins second = " << DimBins[j].second << endl; + // } + + // for ( unsigned int i = 0; i<NObsBin; i++ ) { + // cout << "dim0 lo/up = " << Bin[i][0].first << ", " << Bin[i][0].second + // << ", dim1 lo/up = " << Bin[i][1].first << ", " << Bin[i][1].second << endl; + // // << ", dim2 lo/up = " << Bin[i][2].first << ", " << Bin[i][2].second << endl; + // if (NDim == 1) { + // cout << "obs0 = " << Bin[i][0].second << ", Dim0Bin = " << GetODim0Bin(Bin[i][0].second) << endl; + // } + // if (NDim == 2) { + // cout << "obs0 = " << Bin[i][0].second << ", obs1 = " << Bin[i][1].second << ", Dim0Bin = " << GetODim0Bin(Bin[i][0].second) << ", Dim1Bin = " << GetODim1Bin(Bin[i][0].second,Bin[i][1].second) << endl; + // for ( unsigned int j=0; j<GetNDim0Bins(); j++ ) { + // } + // } + // if (NDim == 3) { + // cout << "obs0 = " << Bin[i][0].second << ", obs1 = " << Bin[i][1].second << ", obs2 = " << Bin[i][2].second << ", Dim0Bin = " << GetODim0Bin(Bin[i][0].second) << ", Dim1Bin = " << GetODim1Bin(Bin[i][0].second,Bin[i][1].second) << ", Dim2Bin = " << GetODim2Bin(Bin[i][0].second,Bin[i][1].second,Bin[i][2].second) << endl; + // for ( unsigned int j=0; j<GetNDim0Bins(); j++ ) { + // } + // for ( unsigned int j=0; j<GetNDim0Bins(); j++ ) { + // for ( unsigned int k=0; k<GetNDim1Bins(j); k++ ) { + // } + // } + // } + // double LowerBoundary = GetBinBoundaries(i)[0].first; + // double UpperBoundary = GetBinBoundaries(i)[0].second; + // cout << "iobs = " << i << ", low = " << LowerBoundary << ", upp = " << UpperBoundary << endl; + // int i1 = GetIDim0Bin(i); + // int i2 = GetIDimBin(i,0); + // int i3 = GetIDim1Bin(i); + // int i4 = GetIDimBin(i,1); + // int i5 = GetIDim2Bin(i); + // int i6 = GetIDimBin(i,2); + // cout << "i1, i2 = " << i1 << ", " << i2 << ", i3, i4 = " << i3 << ", " << i4 << ", i5, i6 = " << i5 << ", " << i6 << endl; + // } + + logger.info["SetBinningND"] << "Set binning successfully for " << NObsBin << " bins in " << NDim << " dimensions." << endl; +} + + +///////////////////////////////////////////// + + +// ___________________________________________________________________________________________________ +void fastNLOCreate::GetWarmupValues() { + //! + //! GetWarmupValues. + //! Checks if warmup-table exists and initialized + //! member variable fIsWarmup + //! + logger.debug["GetWarmupValues"]<<endl; + + if (!WarmupNeeded()) { + logger.info["GetWarmupValues"]<<"Warmup not needed to determine bin edges."<<endl; + fIsWarmup=false; + } else if (!fWarmupConsts.Values.empty()) { + //! Check if warmup values already set by user + logger.info["GetWarmupValues"]<<"Found warmup values in fWarmupConsts without reading warmup-steering file."<<endl; + fIsWarmup=false; + } else { + //! Try to get warmup values from steering + std::cout.setstate(std::ios::failbit) ; // no cout in the following + // std::cerr.setstate(std::ios::failbit) ; // no cout in the following + logger.info >>"\n"; + logger.info >> (fastNLO::_SSEP40+fastNLO::_SSEP40+fastNLO::_SSEP40) << endl; + logger.info["GetWarmupValues"]<<"Trying to get warmup values. Please ignore following messages from parser."<<endl; + // try to get warmup values + //vector<vector<double> > warmup = DOUBLE_TAB_NS(Warmup.Values,fSteerfile); + fWarmupConsts.Values = DOUBLE_TAB_NS(Warmup.Values,fSteerfile); + fIsWarmup = fWarmupConsts.Values.empty(); + + // try again, with hard-coded convention: + if (fIsWarmup) { + logger.debug["GetWarmupValues"]<<"Could not get warmup table from steerfile. Now trying to read steerfile: "<<GetWarmupTableFilename()<<endl; + bool t1 = access(GetWarmupTableFilename().c_str(), R_OK); + usleep(100); // short interruption + bool t2 = access(GetWarmupTableFilename().c_str(), R_OK); + if (t1 != 0 && t2 !=0) { + logger.debug["GetWarmupValues"]<<"Warmup file does not exist: "<<GetWarmupTableFilename()<<endl; + fIsWarmup=true; + } else { + READ_NS(GetWarmupTableFilename(),fSteerfile); // put the warmup-values into same read_steer 'namespace' + fWarmupConsts.Values = DOUBLE_TAB_NS(Warmup.Values,fSteerfile); + fIsWarmup = fWarmupConsts.Values.empty(); + if (!fIsWarmup) + logger.info["GetWarmupValues"]<<"Warmup values found in file "<<GetWarmupTableFilename()<<"."<<endl; + } + } + + // --- read other warmup paramters + if (!fIsWarmup) { + fWarmupConsts.Binning = DOUBLE_TAB_NS(Warmup.Binning,fSteerfile); + fWarmupConsts.OrderInAlphasOfWarmupRunWas = INT_NS(Warmup.OrderInAlphasOfWarmupRunWas,fSteerfile); + fWarmupConsts.CheckScaleLimitsAgainstBins = BOOL_NS(Warmup.CheckScaleLimitsAgainstBins,fSteerfile); + // fWarmupConsts.Values = DOUBLE_TAB_NS(Warmup.Values,fSteerfile); + fWarmupConsts.headerValues = TABLEHEADER_NS(Warmup.Values,fSteerfile); + // + fWarmupConsts.DifferentialDimension = INT_NS(Warmup.DifferentialDimension,fSteerfile); + fWarmupConsts.DimensionIsDifferential = INT_ARR_NS(Warmup.DimensionIsDifferential,fSteerfile); + fWarmupConsts.DimensionLabels = STRING_ARR_NS(Warmup.DimensionLabels,fSteerfile); + fWarmupConsts.ScaleDescriptionScale1 = STRING_NS(Warmup.ScaleDescriptionScale1,fSteerfile); + if (!fIsFlexibleScale) + fWarmupConsts.ScaleDescriptionScale2 = STRING_NS(Warmup.ScaleDescriptionScale2,fSteerfile); + + } + + // --- read in remaining scenario constants if requested + if (fIsWarmup && !fScenConsts.ReadBinningFromSteering) { + logger.error["Instantiate"]<<"This is a warmup run. Thus, the binning must be read from the steering or ScenarioConstants. Please use ReadBinningFromSteering=true"<<endl; + exit(1); + } else if (!fIsWarmup && !fScenConsts.ReadBinningFromSteering) { + fScenConsts.DifferentialDimension = fWarmupConsts.DifferentialDimension; + fScenConsts.DimensionIsDifferential = fWarmupConsts.DimensionIsDifferential; + fScenConsts.DimensionLabels = fWarmupConsts.DimensionLabels; + fScenConsts.ScaleDescriptionScale1 = fWarmupConsts.ScaleDescriptionScale1; + if (!fIsFlexibleScale) + fScenConsts.ScaleDescriptionScale2 = fWarmupConsts.ScaleDescriptionScale2; + } + + + // inform user about success + logger.info >> (fastNLO::_SSEP40+fastNLO::_SSEP40+fastNLO::_SSEP40) << endl; + std::cout.clear() ; // recover cout to screen + std::cerr.clear() ; // recover cout to screen + } + + if (fIsWarmup) logger.warn["GetWarmupValues"]<<"This will be a warmup run."<<endl; + else logger.info["GetWarmupValues"]<<"This will be a production run."<<endl; +} + + + +// ___________________________________________________________________________________________________ +void fastNLOCreate::UseBinGridFromWarmup() { + //! initialialize all binning related variables + //! with values stored in the warmup file. + //vector<vector<double> > warmup = DOUBLE_TAB_NS(Warmup.Binning,fSteerfile); + const vector<vector<double> >& warmup = fWarmupConsts.Binning; + + NObsBin = warmup.size(); + NDim = fScenConsts.DifferentialDimension; + if (warmup[0].size() != (7+2*NDim) && warmup[0].size() != (5+2*NDim)) { + logger.error["UseBinGridFromWarmup"]<<"This warmup table has an unknown size of columns. Expecting "<<(7+2*NDim)<<" for flexible-scale, or "<<(5+2*NDim)<<" for fixed-scale tables. Exiting."<<endl; + exit(1); + } + fIsFlexibleScale = (warmup[0].size() == (7+2*NDim)); + IDiffBin = fScenConsts.DimensionIsDifferential; + DimLabel = fScenConsts.DimensionLabels; + + // make binning + const int i0 = 1;//fIsFlexibleScale ? 6 : 4; + Bin.resize(NObsBin); + BinSize.resize(NObsBin); + for (unsigned int i = 0 ; i < NObsBin ; i ++) { + Bin[i].resize(NDim); + if (NDim==1) { + Bin[i][0] = make_pair(warmup[i][i0],warmup[i][i0+1]) ; + } else if (NDim==2) { + Bin[i][0] = make_pair(warmup[i][i0],warmup[i][i0+1]) ; + Bin[i][1] = make_pair(warmup[i][i0+2],warmup[i][i0+3]) ; + } else if (NDim==3) { + Bin[i][0] = make_pair(warmup[i][i0],warmup[i][i0+1]) ; + Bin[i][1] = make_pair(warmup[i][i0+2],warmup[i][i0+3]) ; + Bin[i][2] = make_pair(warmup[i][i0+4],warmup[i][i0+5]) ; + } + BinSize[i] = warmup[i][i0+NDim*2]; + } +} + + + +// ___________________________________________________________________________________________________ +bool fastNLOCreate::CheckWarmupConsistency() { + //! check if warmup values are consistent with steering card + //! check if number of bins is consistent + + vector<vector<double> > warmup = fWarmupConsts.Values;//DOUBLE_TAB_NS(Warmup.Values,fSteerfile); + bool ret = true; + if (!WarmupNeeded()) { + return ret; + } + + const string wrmuphelp = "Please check your warmup-file for compatibility with your steering.\nTo calculate a new warmup-file compatible to your steering, remove the old one.\nAlternatively use 'IgnoreWarmupBinningCheck=true' to ignore precision-related binning differences or\nuse 'ReadBinningFromSteering=false' to read all binning-related information from the warmup file.\n"; + + // --- check warmup values + if (warmup.size() != NObsBin) { + logger.error["CheckWarmupConsistency"] + <<"Table of warmup values is not compatible with steering file.\n" + <<"Different number of bins ("<<warmup.size()<<" instead of "<<NObsBin<<").\n" + <<wrmuphelp + <<"Exiting."<<endl; + ret = false; + exit(1); + } + if (fWarmupConsts.DifferentialDimension != (int)NDim) { + logger.error["CheckWarmupConsistency"] + <<"Table of warmup values is not compatible with steering file.\n" + <<"Found different number of dimensions. NDim="<<NDim<<", Warmup.DifferentialDimension="<<fWarmupConsts.DifferentialDimension<<".\n" + <<wrmuphelp + <<"Exiting."<<endl; + ret = false; + exit(1); + } + + // CoeffTable is not available during intialization + // if ( STRING_NS(Warmup.ScaleDescriptionScale1) != GetTheCoeffTable()->ScaleDescript[0][0] ) { + // logger.warn["CheckWarmupConsistency"] + // <<"Table of warmup values is potentially incompatible with steering file.\n" + // <<"Found different scale description (ScaleDescriptionScale1). ScaleDescriptionScale1="<<GetTheCoeffTable()->ScaleDescript[0][0] + // <<", but Warmup.ScaleDescriptionScale1='"<<STRING_NS(Warmup.ScaleDescriptionScale1)<<"'."<<endl<<endl; + // ret = false; + // } + // if ( fIsFlexibleScale && STRING_NS(Warmup.ScaleDescriptionScale2) != GetTheCoeffTable()->ScaleDescript[0][1] ){ + // logger.warn["CheckWarmupConsistency"] + // <<"Table of warmup values is potentially incompatible with steering file.\n" + // <<"Found different scale description (ScaleDescriptionScale2). ScaleDescriptionScale2='"<<GetTheCoeffTable()->ScaleDescript[0][0]<<"'" + // <<", but Warmup.ScaleDescriptionScale2='"<<STRING_NS(Warmup.ScaleDescriptionScale1)<<"'."<<endl<<endl; + // ret = false; + // } + + if (fWarmupConsts.DimensionIsDifferential[0] != IDiffBin[0]) { + logger.warn["CheckWarmupConsistency"] + <<"Table of warmup values seems to be incompatible with steering file.\n" + <<"Found different diff-label for dimension 0 (IDiffBin). DimensionIsDifferential='"<<IDiffBin[0]<<"'" + <<", but Warmup.DimensionIsDifferential[0]='"<<fWarmupConsts.DimensionIsDifferential[0]<<"'. Exiting."<<endl; + ret = false; + exit(1); + } + if (NDim > 1 && fWarmupConsts.DimensionIsDifferential[1] != IDiffBin[1]) { + logger.warn["CheckWarmupConsistency"] + <<"Table of warmup values seems to be incompatible with steering file.\n" + <<"Found different diff-label for dimension 1 (IDiffBin). DimensionIsDifferential='"<<IDiffBin[1]<<"'" + <<", but Warmup.DimensionIsDifferential[1]='"<<fWarmupConsts.DimensionIsDifferential[1]<<"'. Exiting."<<endl; + ret = false; + exit(1); + } + if (NDim > 2 && fWarmupConsts.DimensionIsDifferential[2] != IDiffBin[2]) { + logger.warn["CheckWarmupConsistency"] + <<"Table of warmup values seems to be incompatible with steering file.\n" + <<"Found different diff-label for dimension 2 (IDiffBin). DimensionIsDifferential='"<<IDiffBin[2]<<"'" + <<", but Warmup.DimensionIsDifferential[2]='"<<fWarmupConsts.DimensionIsDifferential[2]<<"'. Exiting."<<endl; + ret = false; + exit(1); + } + + // --- check warmup binning + const vector<vector<double> >& wrmbin = fWarmupConsts.Binning;//DOUBLE_TAB_NS(Warmup.Binning,fSteerfile); + // check binning in detail; ignore when IgnoreWarmupBinningCheck is true to avoid precision problems with bin borders of e.g. Pi + if (EXIST_NS(IgnoreWarmupBinningCheck,fSteerfile) && BOOL_NS(IgnoreWarmupBinningCheck,fSteerfile)) { + logger.warn["CheckWarmupConsistency"] + <<"Ignoring crosscheck of binning in steering versus warmup values. " + <<"Please make sure that your warmup file matches the steering of this run."<<endl; + } else if (!wrmbin.empty()) { + for (unsigned int i = 0 ; i < GetNObsBin() ; i ++) { + const int i0 = 1;//fIsFlexibleScale ? 6 : 4; + const double EPS = 1.e-8; + if (NDim == 1) { + if (fabs(Bin[i][0].first- wrmbin[i][i0])>EPS || fabs(Bin[i][0].second - wrmbin[i][i0+1]) > EPS) { + logger.error["CheckWrmbinConsistency"] + <<"Table of warmup values seems to be incompatible with steering file.\n" + <<"Found different binning for bin "<<i<<", steering: ["<<Bin[i][0].first<<","<<Bin[i][0].second + <<",], warmup: ["<<wrmbin[i][i0]<<","<<wrmbin[i][i0+1]<<"].\n" + <<wrmuphelp + <<"Exiting."<<endl; + ret = false; + //exit(1); + } + } else if (NDim == 2) { + if (fabs(Bin[i][0].first - wrmbin[i][i0]) > EPS || fabs(Bin[i][0].second - wrmbin[i][i0+1]) > EPS + || fabs(Bin[i][1].first - wrmbin[i][i0+2]) > EPS || fabs(Bin[i][1].second - wrmbin[i][i0+3]) > EPS) { + logger.error["CheckWarmupConsistency"] + <<"Table of warmup values seems to be incompatible with steering file.\n" + <<"Found different binning for bin "<<i<<", steering: ["<<Bin[i][0].first<<","<<Bin[i][0].second<<",] ["<<Bin[i][1].first<<","<<Bin[i][1].second + <<"], warmup: ["<<wrmbin[i][i0]<<","<<wrmbin[i][i0+1]<<"] ["<<wrmbin[i][i0+2]<<","<<wrmbin[i][i0+3]<<"].\n" + <<wrmuphelp + <<"Exiting."<<endl; + ret = false; + //exit(1); + } + } else if (NDim == 3) { + if (fabs(Bin[i][0].first - wrmbin[i][i0]) > EPS || fabs(Bin[i][0].second - wrmbin[i][i0+1]) > EPS + || fabs(Bin[i][1].first - wrmbin[i][i0+2]) > EPS || fabs(Bin[i][1].second - wrmbin[i][i0+3]) > EPS + || fabs(Bin[i][2].first - wrmbin[i][i0+4]) > EPS || fabs(Bin[i][2].second - wrmbin[i][i0+5]) > EPS) { + logger.error["CheckWarmupConsistency"] + <<"Table of warmup values seems to be incompatible with steering file.\n" + <<"Found different binning for bin "<<i<<", steering: ["<<Bin[i][0].first<<","<<Bin[i][0].second<<",] ["<<Bin[i][1].first<<","<<Bin[i][1].second + <<"], warmup: ["<<wrmbin[i][i0]<<","<<wrmbin[i][i0+1]<<"] ["<<wrmbin[i][i0+2]<<","<<wrmbin[i][i0+3]<<"] ["<<wrmbin[i][i0+4]<<","<<wrmbin[i][i0+5]<<"].\n" + <<wrmuphelp + <<"Exiting."<<endl; + ret = false; + //exit(1); + } + } + // KR: Check bin width only roughly + double bwwrm = 0; + if (NDim == 1) bwwrm = wrmbin[i][i0+2]; + else if (NDim == 2) bwwrm = wrmbin[i][i0+4]; + else if (NDim == 3) bwwrm = wrmbin[i][i0+6]; + if (fabs(BinSize[i]) > DBL_MIN && (1 - BinSize[i]/bwwrm) > 1.e-4) { + logger.warn["CheckWarmupConsistency"] + <<"Table of warmup values seems to be incompatible with steering file.\n" + <<"Found different bin size for bin "<<i<<". Steering: "<<BinSize[i] + <<", warmup: "<<bwwrm<<".\n" + <<wrmuphelp + <<"Please check consistency!"<<endl<<endl; + ret = false; + } + } + } else { + logger.warn["CheckWarmupConsistency"] + <<"Warmup values do not contain information about the binning. Cannot check the consistency."<<endl; + } + return ret; +} + + + +// ___________________________________________________________________________________________________ +void fastNLOCreate::SetOrderOfAlphasOfCalculation(unsigned int ord) { + logger.info["SetOrderOfAlphasOfCalculation"] << "Base order ord = " << ord << endl; + //! set order of alpha_s of this calculation + //! it must be: iLeadingOrder + iHigherOrder ; + //! for instance: 3-jet-production in NLO = 4! + // KR: Since the order of the run also determines the scale dependence, + // KR: IScaleDep has to be set here and not in ReadCoefficientSpecificVariables() + fastNLOCoeffAddBase* c = GetTheCoeffTable(); + const int IOrdInitial = fIOrd; + fIOrd = ord; + c->Npow = ord; + c->IContrFlag2 = ord-GetLoOrder()+1; + c->CtrbDescript.resize(1); + string ss[5] = {"LO","NLO","NNLO","NNNLO","unknown"}; + int iContrb = ord-GetLoOrder() <4 ? ord-GetLoOrder() : 4; + c->CtrbDescript[0] = ss[iContrb]; + if ((ord - GetLoOrder()) == 0) { + c->IScaleDep = 0; + logger.info["SetOrderOfAlphasOfCalculation"] << "LO scale dependence: MuR changeable; independent of MuF. IScaleDep = " << c->IScaleDep << endl; + c->NSubproc = fProcConsts.NSubProcessesLO; + // fix different convention of flexible scale tables: + if (fIsFlexibleScale && c->NSubproc==6 && fProcConsts.NSubProcessesNLO==7) c->NSubproc = fProcConsts.NSubProcessesNLO; // 6 -> 7 + c->IPDFdef3 = fProcConsts.IPDFdef3LO; + if (c->IPDFdef2==0) { + c->fPDFCoeff = fProcConsts.PDFCoeffLO; + c->IPDFdef3 = c->NSubproc ; + } + } else { + c->IScaleDep = 1; + logger.info["SetOrderOfAlphasOfCalculation"] << "NLO scale dependence: Dependent on MuR and MuF. IScaleDep = " << c->IScaleDep << endl; + if ((ord - GetLoOrder()) == 1) { + c->NSubproc = fProcConsts.NSubProcessesNLO; + c->IPDFdef3 = fProcConsts.IPDFdef3NLO; + if (c->IPDFdef2==0) { + c->fPDFCoeff = fProcConsts.PDFCoeffNLO; + c->IPDFdef3 = c->NSubproc ; + } + } else if ((ord - GetLoOrder()) == 2) { + c->NSubproc = fProcConsts.NSubProcessesNNLO; + c->IPDFdef3 = fProcConsts.IPDFdef3NNLO; + if (c->IPDFdef2==0) { + c->fPDFCoeff = fProcConsts.PDFCoeffNNLO; + c->IPDFdef3 = c->NSubproc ; + } + } else { + logger.error["SetOrderOfAlphasOfCalculation"]<<"Unknown order of perturbation theory: order="<<ord-GetLoOrder()<<" (ord="<<ord<<",ILOord="<<ILOord<<"). Exiting."<<endl; + exit(1); + } + } + logger.info["SetOrderOfAlphasOfCalculation"] << "Using " << c->NSubproc << + " subprocesses and PDF flags: " << c->IPDFdef1 << ", " << c->IPDFdef2 << ", " << c->IPDFdef3 << "." << endl; + + // init array with counter processes (symmetric and asymmetric ones) + if (c->NPDFPDG.size() == 2 && c->NPDFDim == 1) { + fSymProc.resize(c->NSubproc); + for (int p = 0 ; p<c->NSubproc ; p++) fSymProc[p]=p; + + for (unsigned int i = 0 ; i<fProcConsts.AsymmetricProcesses.size() ; i++) { + if (fProcConsts.AsymmetricProcesses[i].first<c->NSubproc) { // safety + if (fProcConsts.AsymmetricProcesses[i].second >= GetNSubprocesses() || fSymProc[fProcConsts.AsymmetricProcesses[i].first] >= GetNSubprocesses()) { + if (!(c->IPDFdef1==3&&c->IPDFdef2==1&&c->IPDFdef3==1)) // it is normal in pp->jets in LO + logger.warn["SetOrderOfAlphasOfCalculation"]<<"Subprocess "<<fSymProc[fProcConsts.AsymmetricProcesses[i].first]<<" is requested to be asymmetric with subprocess "<<fProcConsts.AsymmetricProcesses[i].second<<", but there are only "<<GetNSubprocesses()<<" subprocesses in this calculation. Ignoring call."<<endl; + } else + fSymProc[fProcConsts.AsymmetricProcesses[i].first] = fProcConsts.AsymmetricProcesses[i].second; + } + } + + // vector<vector<int> > asym = INT_TAB_NS(AsymmetricProcesses); + // for ( unsigned int i = 0 ; i<asym.size() ; i ++ ) { + // if ( asym[i][0]<(int)fSymProc.size() ) { // safety + // if ( asym[i][1] >= GetNSubprocesses() || fSymProc[asym[i][0]] >= GetNSubprocesses() ) { + // logger.warn["AsymmetricProcesses"]<<"Subprocess "<<fSymProc[asym[i][0]]<<" is requested to be asymmetric with subprocess "<<asym[i][1]<<", but there are only "<<GetNSubprocesses()-1<<" subprocesses in this calculation. Ignoring call."<<endl; + // } + // else fSymProc[asym[i][0]] = asym[i][1]; + // } + // } + + // for ( int p = 0 ; p<c->NSubproc ; p++ ) cout<<"p="<<p<<",\tfSymProc="<<fSymProc[p]<<endl; + + } + + // Scale factors have to be updated, since this may be either a lo or nlo run. + if (!fIsFlexibleScale) ReadScaleFactors(); + // NSubproc may have changed. We have to reinitialize the grids + //const int nSFInitial = fScaleFac.size(); + + // --- init statistics + fastNLOTools::ResizeVector(GetTheCoeffTable()->fWgt.WgtObsSumW2, GetNSubprocesses(), GetNObsBin()); + fastNLOTools::ResizeVector(GetTheCoeffTable()->fWgt.SigObsSumW2, GetNSubprocesses(), GetNObsBin()); + fastNLOTools::ResizeVector(GetTheCoeffTable()->fWgt.SigObsSum , GetNSubprocesses(), GetNObsBin()); + GetTheCoeffTable()->fWgt.WgtObsNumEv.resize(GetNSubprocesses()); + for (int i =0 ; i<GetNSubprocesses() ; i++) { + GetTheCoeffTable()->fWgt.WgtObsNumEv[i].resize(GetNObsBin()); + } + //fastNLOTools::ResizeVector(GetTheCoeffTable()->fWgtObsNumEv, GetNSubprocesses(), GetNObsBin()); + + + if (IOrdInitial!= fIOrd && !fIsWarmup) { + if (!fIsFlexibleScale) InitInterpolationKernels(); + InitGrids(); + } +} + + + +// ___________________________________________________________________________________________________ +void fastNLOCreate::SetLoOrder(int LOOrd) { + logger.debug["SetLoOrder"]<<endl; + fastNLOTable::SetLoOrder(LOOrd); + if (fIsFlexibleScale) + ((fastNLOCoeffAddFlex*)GetTheCoeffTable())->fILOord = LOOrd; +} + + + +// ___________________________________________________________________________________________________ +void fastNLOCreate::InitVariablesInCoefficientTable() { + logger.debug["InitVariablesInCoefficientTable"]<<endl; + fastNLOCoeffAddBase* c = GetTheCoeffTable(); + c->IDataFlag = 0; // No data, but theory + c->IAddMultFlag = 0; // additive contribution. + c->IContrFlag1 = 1; // fixed order: 1 + c->IContrFlag2 = 42; // init with arbitrary number. to be specified later. + c->IRef = 0; // it is not a reference calculation + c->IScaleDep = 100; + c->NScaleDep = 0; + //c->NFragFunc = 0; + c->NFFDim = 0; + c->Nevt = 0; + c->SetIXsectUnits(12); // it is often pb +} + + + +// ___________________________________________________________________________________________________ +void fastNLOCreate::ReadCoefficientSpecificVariables() { + logger.debug["ReadCoefficientSpecificVariables"]<<endl; + // todo: make it more user friendly + // todo: include some sanity checks + fastNLOCoeffAddBase* c = GetTheCoeffTable(); + + // generator constants + c->CodeDescript = fGenConsts.GetCodeDescription(); + for (unsigned int i = 0 ; i<fProcConsts.GetProcessDescription().size() ; i++) { + c->CodeDescript.push_back(fProcConsts.GetProcessDescription()[i]); + } + c->SetIXsectUnits(fGenConsts.UnitsOfCoefficients); + + // (some) process constants + c->NPDFPDG.resize(fProcConsts.NPDF); + if (c->NPDFPDG.size() >0) c->NPDFPDG[0] = fScenConsts.PDF1; // from steering + if (c->NPDFPDG.size() >1) c->NPDFPDG[1] = fScenConsts.PDF2; // from steering + c->NPDFDim = fProcConsts.NPDFDim; + c->IPDFdef1 = fProcConsts.IPDFdef1; + c->IPDFdef2 = fProcConsts.IPDFdef2; + c->IPDFdef3 = -1 ; // safe initialization, is initialized in SetOrderOfAlphasOfCalculation(int); INT_NS(IPDFdef3); + c->NSubproc = -1; // safe initialization, is initialized in SetOrderOfAlphasOfCalculation(int); + c->NScaleDim = 1; // NEVER SET NScaleDim TO ANY OTHER VALUE THAN 1 !!! + + //IPDFdef3 = NSubproc == 7 ? 2 : 1; + //printf(" Set IPDFdef3 = %d, consistent with %d subprocesses.\n",IPDFdef3,NSubproc); + const int NScales = 1; + c->Iscale.resize(NScales); + c->Iscale[0] = 0; + c->ScaleDescript.resize(NScales); + + if (fIsFlexibleScale) { + c->NScaleDep = 3; // temporarily. Until known if generator runs in LO, NLO or NNLO. + c->ScaleDescript[0].resize(2); + c->ScaleDescript[0][0] = fScenConsts.ScaleDescriptionScale1; + c->ScaleDescript[0][1] = fScenConsts.ScaleDescriptionScale2; + } else { + // ---- those numbers are partly ambigously defined in v2.1 ---- // + // proper code would be, but needs also adjustment in reading, writing and getter functions! + // There are some misunderstandings here ... + // KR: Reestablish v2.1 definitions + int NScales = 2; // NEVER SET NScales TO ANY OTHER VALUE THAN 2 !!! + int NScaleDim = 1; // NEVER SET NScaleDim TO ANY OTHER VALUE THAN 1 !!! + c->NScales = NScales; + c->NScaleDim = NScaleDim; + c->Iscale.resize(NScales); + c->Iscale[0] = 0; // Use first scale definition for MuR; something else was never used for now + c->Iscale[1] = 0; // Use the same scale definition for MuF; something else was never used for now + // KR: Since there is only one scale dimension, there is only one scale description! + // This description is for the different possibilities (dimensions) to choose for MuR, MuF etc. + // e.g. pT, sqrt(Q^2), M/2 and so on; this is NOT to describe the scales themselves which are + // always MuR, MuF! + c->ScaleDescript.resize(NScaleDim); + c->ScaleDescript[0].resize(NScaleDim); + c->ScaleDescript[0][0] = fScenConsts.ScaleDescriptionScale1; + c->SetNScaleDep(0); // This is a fixed-scale table + } +} + + + +// ___________________________________________________________________________________________________ +int fastNLOCreate::GetBin() { + //! Get ObsBin number from scenario, + //! either directly, when iOB is set, or from multidimensional observables + if ( fScenario._iOB > 0 ) { // if not -1 or 0(!), then we believe that value + fObsBin = fScenario._iOB; + //logger.debug["GetBin"] << "Taking ObsBin directly from scenario, fObsBin = " << fObsBin << endl; + return fObsBin; + } + //! Check cache and get ObsBin from there if available + else if ( fPreviousObs_o == fScenario._o ) { + fObsBin = fPreviousObsBin; + return fObsBin; + } + + //! Get dimensionality of binning + const int idiff = GetNumDiffBin(); + //! Calculate ObsBin number from multidimensional observables + if ( idiff == 1 ) { + fObsBin = GetObsBinNumber(fScenario._o[0]); + } else if ( idiff == 2 ) { + fObsBin = GetObsBinNumber(fScenario._o[0],fScenario._o[1]); + } else if ( idiff == 3 ) { + fObsBin = GetObsBinNumber(fScenario._o[0],fScenario._o[1],fScenario._o[2]); + } else { + logger.error["GetBin"] << "More than triple-differential binning not yet implemented, aborted!" << endl; + exit(1); + } + + //! Store scenario in cache + fPreviousObsBin = fObsBin; + fPreviousObs_o = fScenario._o; + + return fObsBin; +} + + + +// ___________________________________________________________________________________________________ +void fastNLOCreate::FillAllSubprocesses(const vector<vector<fnloEvent> >& events, const fnloScenario& scen, const double wgtfac ) { + //! fill all subprocessess for all scale variations (into a fixed-scale table) + //! events is expected to be of the form: + //! events[nscalevar][nsubproc] + + for (unsigned int is = 0 ; is<events.size() ; is++) { // all scalevars + FillAllSubprocesses(events[is], scen, is, wgtfac); + } +} + + + +// ___________________________________________________________________________________________________ +void fastNLOCreate::FillAllSubprocesses(const vector<fnloEvent>& events, const fnloScenario& scen, int scalevar, const double wgtfac) { + //! fill a list of subprocesses into the fastNLO table + + if ((int)events.size() != GetNSubprocesses()) { + logger.error["FillAllSubprocess"]<<"This table expects "<<GetNSubprocesses()<<" subprocesses, but only "<<events.size()<<" are provided. Exiting."<<endl; + exit(1); + } + for (unsigned int p = 0 ; p<events.size() ; p++) { + FillOneSubprocess(events[p],scen,scalevar,wgtfac); + } +} + + + +// ___________________________________________________________________________________________________ +void fastNLOCreate::FillOneSubprocess(const fnloEvent& event, const fnloScenario& scen, int scalevar, const double wgtfac) { + fEvent = event; + fScenario = scen; + Fill(scalevar,wgtfac); +} + +// ___________________________________________________________________________________________________ +bool approximatelyEqual(float a, float b, float epsilon){ + return fabs(a - b) <= ( (fabs(a) < fabs(b) ? fabs(b) : fabs(a)) * epsilon); +} +bool essentiallyEqual(float a, float b, float epsilon) +{ + return fabs(a - b) <= ( (fabs(a) > fabs(b) ? fabs(b) : fabs(a)) * epsilon); +} + +// ___________________________________________________________________________________________________ +void fastNLOCreate::FillWeightCache(int scalevar) { + //! fill event into cache + if (scalevar!= 0) { + cout<<"Error! caching not implemented for scalevar tables."<<endl; + exit(3); // also 'FlushCache has to be changed!' + } + + // fScenario._iOB = -1; // drop previous entry! + // fScenario._iOB = GetBin(); // we can calculate the bin number right now. + // if ( fScenario._iOB < 0 ) return; // nothing to do. + //for ( auto& cachelem : fWeightCache ) { + + + static const double epscomp = 1.e-10; + if ( fCacheType==1 ) { + for ( int ii = int(fWeightCache.size())-1 ; ii>=0 && ii>=(int(fWeightCache.size()) - fCacheCompare) ; ii-- ) { + auto& cachelem = fWeightCache[ii]; + if ( cachelem.second._p != fEvent._p) continue; + if ( fObsBin != cachelem.first._iOB) continue; + //else if ( cachelem.first._o[0] != fScenario._o[0]) continue; + // if ( fWeightCache[ii].second._x1 == fEvent._x1 ) continue; + // if ( fWeightCache[ii].second._x2 == fEvent._x2 ) continue; + if ( fabs(cachelem.second._x1 - fEvent._x1 ) > (cachelem.second._x1 ) * epscomp ) continue; + if ( fabs(cachelem.second._x2 - fEvent._x2 ) > (cachelem.second._x2 ) * epscomp ) continue; + if ( fabs(cachelem.first._m1 - fScenario._m1 ) > (cachelem.first._m1 ) * epscomp ) continue; + if ( fabs(cachelem.first._m2 - fScenario._m2 ) > fabs(cachelem.first._m2 ) * epscomp ) continue; + + cachelem.second._w += fEvent._w; + cachelem.second._wf += fEvent._wf; + cachelem.second._wr += fEvent._wr; + cachelem.second._wrr += fEvent._wrr; + cachelem.second._wff += fEvent._wff; + cachelem.second._wrf += fEvent._wrf; + return; // done ! + } + fWeightCache.push_back(make_pair(fScenario,fEvent)); + fWeightCache.back().first._iOB = fObsBin; + } + else if ( fCacheType==2 ) { + // resize if needed: + if ( fWeightCacheBinProc.empty() ) { + fWeightCacheBinProc.resize(GetNObsBin()); + for ( auto& cc : fWeightCacheBinProc ) { + cc.resize(GetNSubprocesses()); + for ( auto& bb : cc ) { + bb.reserve(int(fCacheMax*0.5)); // *0.7 because most of the bins will not receive the max limit + } + } + } + // fill + auto& cachelem = fWeightCacheBinProc[fObsBin][fEvent._p]; + for ( int ii = int(cachelem.size())-1 ; ii>=0 && ii>=(int(cachelem.size()) - fCacheCompare) ; ii-- ) { + if ( fabs(cachelem[ii].second._x1 - fEvent._x1 ) > (cachelem[ii].second._x1 ) * epscomp ) continue; + if ( fabs(cachelem[ii].second._x2 - fEvent._x2 ) > (cachelem[ii].second._x2 ) * epscomp ) continue; + if ( fabs(cachelem[ii].first._m1 - fScenario._m1 ) > (cachelem[ii].first._m1 ) * epscomp ) continue; + if ( fabs(cachelem[ii].first._m2 - fScenario._m2 ) > fabs(cachelem[ii].first._m2 ) * epscomp ) continue; + cachelem[ii].second._w += fEvent._w; + cachelem[ii].second._wf += fEvent._wf; + cachelem[ii].second._wr += fEvent._wr; + cachelem[ii].second._wrr += fEvent._wrr; + cachelem[ii].second._wff += fEvent._wff; + cachelem[ii].second._wrf += fEvent._wrf; + return; // done ! + } + cachelem.push_back(make_pair(fScenario,fEvent)); + cachelem.back().first._iOB = fObsBin; + } + else { + // nothing todo! + return; + } + // for ( unsigned int iev = 0 ; iev<fWeightCache.size() ; iev++) { + // if (fWeightCache[iev].second._p != fEvent._p) continue; + // if (fWeightCache[iev].first._o[0] != fScenario._o[0]) continue; + // if (fWeightCache[iev].first._m1 != fScenario._m1) continue; + // if (fWeightCache[iev].first._m2 != fScenario._m2) continue; + // if (fWeightCache[iev].second._x1 != fEvent._x1) continue; + // if (fWeightCache[iev].second._x2 != fEvent._x2) continue; + + + // if (fWeightCache[iev].first._o[0] == fScenario._o[0] + // && fWeightCache[iev].second._p == fEvent._p + // && fWeightCache[iev].first._m1 == fScenario._m1 + // && fWeightCache[iev].first._m2 == fScenario._m2 + // && fWeightCache[iev].second._x1 == fEvent._x1 + // && fWeightCache[iev].second._x2 == fEvent._x2) { + // // cout<<"Found cached PS point !!"<<endl; + // //cout<<"cache_w: "<<fWeightCache[iev].second._w<<"\tevent_w:" <<fEvent._w<<"\t bin: "<<fScenario._iOB<<endl; + // fWeightCache[iev].second._w += fEvent._w; + // fWeightCache[iev].second._wf += fEvent._wf; + // fWeightCache[iev].second._wr += fEvent._wr; + // fWeightCache[iev].second._wrr += fEvent._wrr; + // fWeightCache[iev].second._wff += fEvent._wff; + // fWeightCache[iev].second._wrf += fEvent._wrf; + // // cout<<" sum w: "<<fWeightCache[iev].second._w<<endl; + // return; + // } else { + // cout<<"This is a bug!"<<endl; + // } + //} + // cout<<"Adding new weight to cache"<<endl; + //fWeightCache.push_back(make_pair(fScenario,fEvent)); +} + + + +// ___________________________________________________________________________________________________ +void fastNLOCreate::FlushCache() { + // fill all events into from cache into table + //for ( const auto& iev : fWeightCache ) { + + const bool OrderedFill = false; + if ( OrderedFill ) { + if ( fCacheType!=1 ) { + cout<<"ERROR. OrderedFill() only implemented for cache-type 1."<<endl; + exit(3); + } + // fScenario: + // std::map<int,double> _o; + // double _m1, _m2; + // int _iOB; + // fEvent: + // double _x1, _x2; + // double _sig; + // double _w, _wf, _wr, _wrr, _wff, _wrf; + // int _p; + // long long int _n; + //const double epsfill = 1.e-14; + for ( int iwrf = 0 ; iwrf<6 ; iwrf++ ) { + fEvent.Reset(); + //for ( fScenario._iOB = 0 ; fScenario._iOB<(int)GetNObsBin() ; fScenario._iOB++ ) { // ordered fill by iobs (changes fScenario._iOB, which may not be provided by generator!) + // check carefully the filling routines (with and without cache) + for ( fObsBin = 0 ; fObsBin<(int)GetNObsBin() ; fObsBin++ ) { // ordered fill by iobs + for ( const auto& cachelem : fWeightCache ) { + if ( fObsBin != cachelem.first._iOB ) continue; + switch (iwrf) { + case 0: + //if ( fabs(cachelem.second._w) < epsfill ) continue; + if ( cachelem.second._w == 0 ) continue; + else fEvent._w = cachelem.second._w; + break; + case 1: + //if ( fabs(cachelem.second._wf) < epsfill ) continue; + if ( cachelem.second._wf == 0 ) continue; + else fEvent._wf = cachelem.second._wf; + break; + case 2: + //if ( fabs(cachelem.second._wr) < epsfill ) continue; + if ( cachelem.second._wr == 0 ) continue; + else fEvent._wr = cachelem.second._wr; + break; + case 3: + //if ( fabs(cachelem.second._wrr) < epsfill ) continue; + if ( cachelem.second._wrr == 0 ) continue; + else fEvent._wrr = cachelem.second._wrr; + break; + case 4: + //if ( fabs(cachelem.second._wff) < epsfill ) continue; + if ( cachelem.second._wff == 0 ) continue; + else fEvent._wff = cachelem.second._wff; + break; + case 5: + //if ( fabs(cachelem.second._wrf) < epsfill ) continue; + if ( cachelem.second._wrf == 0 ) continue; + else fEvent._wrf = cachelem.second._wrf; + break; + default: + cout<<"error"<<endl; + } + + fScenario._m1 = cachelem.first._m1; + fScenario._m2 = cachelem.first._m2; + //fScenario._iOB = cachelem.first._iOB; + //fEvent = cachelem.second; + fEvent._x1 = cachelem.second._x1; + fEvent._x2 = cachelem.second._x2; + fEvent._p = cachelem.second._p; + fEvent._sig = cachelem.second._sig; + fEvent._n = cachelem.second._n; + FillContribution(0); + } + } + } + //fScenario._iOB = -1; + } + else { + if ( fCacheType==1 ) { + for ( const auto& cachelem : fWeightCache ) { + fScenario = cachelem.first; + fEvent = cachelem.second; + //cout<<"Filling weight: w="<<fEvent._w<<"\tbin="<<fScenario._iOB<<endl; + FillContribution(0); // todo! not working if scalevar is != 0 + } + } + else if (fCacheType==2) { + for ( const auto& bin : fWeightCacheBinProc ) { + for ( const auto& proc : bin ) { + for ( const auto& elem : proc ) { + fScenario = elem.first; + fEvent = elem.second; + //cout<<"cache! Filling weight: w="<<fEvent._w<<"\tbin="<<fScenario._iOB<<"\tobs: "<<fScenario._o[0]<<endl; + FillContribution(0); // todo! not working if scalevar is != 0 + } + } + } + } + else { + logger.error["FlushCache()"]<<"fCacheType = "<<fCacheType<<endl; + } + fScenario = fnloScenario();//._iOB = -1; // important. + } + + fWeightCache.clear(); + if ( fCacheType==1 ) fWeightCache.reserve(fCacheMax); + fWeightCacheBinProc.clear(); +} + + + +// ___________________________________________________________________________________________________ +void fastNLOCreate::Fill(int scalevar, const double wgtfac) { + //! + //! Fill values, which are stored in 'Event' and 'Scenario' into fastNLO table. + //! + //logger.debug["Fill"]<<"Filling subprocess contributions into table."<<endl; + + // --- statistics and weights**2 + fStats._nProc++; //keep statistics + const int ObsBin = GetBin(); + if (ObsBin < 0 || ObsBin >= (int)GetNObsBin()) return; + + // sanity + if (fEvent._x1<0 || fEvent._x2<0) { + logger.error["Fill"]<<"x-value is smaller than zero: x1="<<fEvent._x1<<", x2="<<fEvent._x2<<". Skipping event."<<endl; + fEvent._x1=1; + fEvent._x2=1; + return ; + } + + if (scalevar==0) { + fastNLOCoeffAddBase* c = GetTheCoeffTable(); + int p = fEvent._p; + // --- event counts + fStats._nEvPS++; + c->fWgt.WgtObsNumEv[p][ObsBin]++; + c->fWgt.WgtNumEv++; + // --- w**2 counts + double w2 = fEvent._w; + if (fIsFlexibleScale) { // estimate a weight. + double mu2 = fScenario._m1*fScenario._m1; + if (c->GetNPDF() == 1) //DIS + mu2 = (fScenario._m1*fScenario._m1 + fScenario._m2*fScenario._m2) /2.; + double lmu = log(mu2); + w2 += lmu*fEvent._wr + lmu*fEvent._wf + lmu*lmu*fEvent._wrr + lmu*lmu*fEvent._wff + lmu*lmu*fEvent._wrf; + if (c->GetNPDF() == 1) //DIS + w2 -= lmu*fEvent._wr +lmu*fEvent._wf; + } + w2 *= w2; + // c->fWgtNevt ; //set externally by generator + c->fWgt.WgtSumW2 += w2; + c->fWgt.WgtObsSumW2[p][ObsBin] += w2; + c->fWgt.SigObsSum [p][ObsBin] += fEvent._sig; + c->fWgt.SigObsSumW2[p][ObsBin] += fEvent._sig*fEvent._sig; + c->fWgt.SigSum += fEvent._sig; + c->fWgt.SigSumW2 += fEvent._sig*fEvent._sig; + } + + if (fIsWarmup) { + if (scalevar==0 && ObsBin>=0) UpdateWarmupArrays(); + // else skip event + } + else if (GetTheCoeffTable()->GetIRef()) { + FillRefContribution(scalevar); + } + else { + // Add weight factor wgtfac for x section differences (TODO: Does this work with DB's cache?) + if (fIsFlexibleScale) { + if ( fCacheType>0 && fCacheMax > 1 ) { + FillWeightCache(scalevar); + if ( (fCacheType==1 && (int)fWeightCache.size() >= fCacheMax) || + (fCacheType==2 && !fWeightCacheBinProc.empty() && (int)fWeightCacheBinProc[fObsBin][fEvent._p].size() >= fCacheMax ) + ) + FlushCache(); + } else { + FillContribution(scalevar,wgtfac); + } + } else { + FillContribution(scalevar,wgtfac); + } + } + fEvent.ResetButX(); +} + + + +// ___________________________________________________________________________________________________ +void fastNLOCreate::FillContribution(int scalevar, const double wgtfac) { + //! read information from 'Event' and 'Scenario' + //! do the interpolation + //! and fill into the tables. + + + if (fEvent._n > 0) SetNumberOfEvents(fEvent._n); + + const int ObsBin = GetBin(); + if (ObsBin < 0 || ObsBin >= (int)GetNObsBin()) return; + fastNLOCoeffAddBase* c = GetTheCoeffTable(); + int p = fEvent._p; + + // --- sanity + if (p<0 || p > c->GetNSubproc()) { + logger.error["FillContribution"]<<"Unknown process Id p = "<<p<<endl; + exit(1); + } + + if ( wgtfac != 1.0 ) { + logger.error[__func__]<<"Additional weight factor wgtfac = " << wgtfac << "not yet implemented for flex-scale tables, aborted!"<<endl; + exit(1); + } + + if (fEvent._w == 0 && fEvent._wf==0 && fEvent._wr==0 && fEvent._wrr==0 && fEvent._wff==0 && fEvent._wrf==0) return; // nothing todo. + int NPDFDim = c->GetNPDFDim(); + + // do interpolation + //cout<<"try to interpol. ObsBin="<<ObsBin<<" ,x1="<<fEvent._x1<<", x2="<<fEvent._x2<<", mu1="<<Scenario._m1<<", mu2="<<Scenario._m2<<endl; + double xmin = NPDFDim == 1 ? std::min(fEvent._x1,fEvent._x2) : fEvent._x1; + double xmax = NPDFDim == 1 ? std::max(fEvent._x1,fEvent._x2) : fEvent._x2; + vector<pair<int,double> > nxlo; + vector<pair<int,double> > nxup; + if (NPDFDim == 1) { + nxlo = fKernX1[ObsBin]->GetNodeValues(xmin); + nxup = fKernX1[ObsBin]->GetNodeValues(xmax); + } else if (NPDFDim > 1) { + nxlo = fKernX1[ObsBin]->GetNodeValues(xmin); + nxup = fKernX2[ObsBin]->GetNodeValues(xmax); + } else { + if (xmin < xmax) { + nxlo = fKernX1[ObsBin]->GetNodeValues(xmin); + nxup = fKernX1[ObsBin]->GetNodeValues(xmax); + } else { + nxup = fKernX1[ObsBin]->GetNodeValues(xmax); + nxlo = fKernX1[ObsBin]->GetNodeValues(xmin); + } + } + c->ExtendX(ObsBin, fKernX1, fKernX2); + + vector<pair<int,double>> nmu1; + vector<pair<int,double>> nmu2; + if (fIsFlexibleScale) { + nmu1 = fKernMu1[ObsBin]->GetNodeValues(fScenario._m1); + nmu2 = fKernMu2[ObsBin]->GetNodeValues(fScenario._m2); + } else { + nmu1 = fKernMuS[ObsBin][scalevar]->GetNodeValues(fScenario._m1 * fScaleFac[scalevar]); + } + + if (fApplyPDFReweight) { + fKernX1[ObsBin]->CheckX(xmin); + fKernX2[ObsBin]->CheckX(xmax); + ApplyPDFWeight(nxlo,xmin,fKernX1[ObsBin]->GetGridPtr()); + if (NPDFDim > 1) { + ApplyPDFWeight(nxup,xmax,fKernX2[ObsBin]->GetGridPtr()); + } else { + ApplyPDFWeight(nxup,xmax,fKernX1[ObsBin]->GetGridPtr()); + } + } + + // fill grid + //if (!CheckWeightIsFinite()) return; + for (unsigned int x1 = 0 ; x1<nxlo.size() ; x1++) { + for (unsigned int x2 = 0 ; x2<nxup.size() ; x2++) { + int xminbin = nxlo[x1].first; + int xmaxbin = nxup[x2].first; + int p = fEvent._p; + HalfMatrixCheck(fEvent._x1,fEvent._x2,xminbin,xmaxbin,p); + //HalfMatrixCheck(xminbin,xmaxbin,p); + int ixHM = GetXIndex(ObsBin,xminbin,xmaxbin); + double wfnlo = wgtfac * nxlo[x1].second * nxup[x2].second / BinSize[ObsBin]; + c->Fill(fEvent, ObsBin, ixHM, scalevar, nmu1, nmu2, p, wfnlo); + } + } + //cout<<" * wSumW = "<<wsum<<endl; +} + +// ___________________________________________________________________________________________________ +void fastNLOCreate::FillRefContribution(int scalevar, const double wgtfac) { + //! This is a reference table. + //! Fill contribution as it would be a cross section + + if (GetTheCoeffTable()->GetIRef()== 0) return; // error. this is not a ref-table + + // ObsBin + const int ObsBin = GetBin(); + if (ObsBin < 0 || ObsBin >= (int)GetNObsBin()) return; + + double wgt = wgtfac * fEvent._w / BinSize[ObsBin]; + int p = fEvent._p; + // todo.... + if (! std::isfinite(wgt)) { + logger.error["FillRefContribution"]<<"Weight w is not finite, w = " << wgt << "!"<<endl; + logger.error["FillRefContribution"]<<"This should have been captured before, aborting ..."<<endl; + exit(1); + } + + // fill reference table + if (fReader==NULL) { + // weights are assumed to multiplied by PDF and alpha_s already + // nothing to do + } else { + // weights are assumed to be in the same format as for 'default' fastNLO tables + // and will be multiplied by PDF and alpha_s values + double mur = fScenario._m1; //??; + double muf = fScenario._m1; //??; + double as = fReader->EvolveAlphas(mur); + int x1 = fEvent._x1; + int x2 = fEvent._x2; + vector<double> xfx1 = fReader->GetXFX(x1, muf); + vector<double> xfx2 = fReader->GetXFX(x2, muf); + bool IsPPBar = false;// todo! + vector<double> pdflc = fReader->CalcPDFLinearCombination(GetTheCoeffTable(),xfx1,xfx2, IsPPBar); + wgt *= as * pdflc[p]; // is this right? + } + + if (fIsFlexibleScale) + ((fastNLOCoeffAddFlex*)GetTheCoeffTable())->SigmaTildeMuIndep[ObsBin][0][0][0][p] += wgt; + else + ((fastNLOCoeffAddFix*)GetTheCoeffTable())->SigmaTilde[ObsBin][scalevar][0][0][p] += wgt; + +} + + +// ___________________________________________________________________________________________________ +inline void fastNLOCreate::HalfMatrixCheck(double x1, double x2, int& xminbin, int& xmaxbin, int& subproc) const { + //! check if half-matrix notation + //! if half-matrix notation, and xmin-node is larger than xmax-node + //! exchange suprocesses according to fSymProc and adjust x-nodes. + //! + if (GetTheCoeffTable()->GetNPDFDim() == 1) { // half-matrix notation (otherwise nothing todo) + if (x2>x1) subproc = fSymProc[subproc]; // to into correct half-matrix + if (xminbin > xmaxbin) { + // if ( (int)fSymProc.size() != GetTheCoeffTable()->GetNSubproc() ) + // logger.error["HalfMatrixCheck"]<<"Necessary array with symmetric processes for half-matrix notation not initialized."<<endl; + + //cout<<"exchange supbrpc. xminbin="<<xminbin<<", xmaxbin="<<xmaxbin<<", p="<<subproc<<", pAsym="<<fSymProc[subproc]<<endl; + int di = xminbin - xmaxbin; + xmaxbin += di; // modify indicees + xminbin -= di; + subproc = fSymProc[subproc]; // exchange asymmetric process + } + } +} + + +// ___________________________________________________________________________________________________ +bool fastNLOCreate::CheckWeightIsFinite() { + //! check if weights are finite + if (! std::isfinite(fEvent._w)) { + if (std::isnan(fEvent._w)) { + logger.warn["CheckWeightIsFinite"]<<"(Scale-independent) weight is 'nan'!"<<endl; + } else if (std::isinf(fEvent._w)) { + logger.warn["CheckWeightIsFinite"]<<"(Scale-independent) weight is 'inf'!"<<endl; + } else { + logger.warn["CheckWeightIsFinite"]<<"(Scale-independent) weight is non-finite!"<<endl; + } + logger.warn["CheckWeightIsFinite"]<<"Contribution is skipped!"<<endl; + return false; + } + if (! std::isfinite(fEvent._wf)) { + if (std::isnan(fEvent._wf)) { + logger.warn["CheckWeightIsFinite"]<<"Factorization scale dependent weight is 'nan'!"<<endl; + } else if (std::isinf(fEvent._wf)) { + logger.warn["CheckWeightIsFinite"]<<"Factorization scale dependent weight is 'inf'!"<<endl; + } else { + logger.warn["CheckWeightIsFinite"]<<"Factorization scale dependent weight is non-finite!"<<endl; + } + logger.warn["CheckWeightIsFinite"]<<"Contribution is skipped!"<<endl; + return false; + } + if (! std::isfinite(fEvent._wr)) { + if (std::isnan(fEvent._wr)) { + logger.warn["CheckWeightIsFinite"]<<"Renormalization scale dependent weight is 'nan'!"<<endl; + } else if (std::isinf(fEvent._wr)) { + logger.warn["CheckWeightIsFinite"]<<"Renormalization scale dependent weight is 'inf'!"<<endl; + } else { + logger.warn["CheckWeightIsFinite"]<<"Renormalization scale dependent weight is non-finite!"<<endl; + } + logger.warn["CheckWeightIsFinite"]<<"Contribution is skipped!"<<endl; + return false; + } + return true; +} + + +// ___________________________________________________________________________________________________ +inline int fastNLOCreate::GetXIndex(const int& ObsBin,const int& x1bin,const int& x2bin) const { + //! get index if 1 or two hadrons are involved + // switch (GetTheCoeffTable()->GetNPDFDim() ) { + switch (((fastNLOCoeffAddBase*)fCoeff[0])->GetNPDFDim()) { + case 1: + // Daniel´s original + return x1bin + (x2bin*(x2bin+1)/2); // half matrix + // Exchange x1 with x2 + // return x2bin + (x1bin*(x1bin+1)/2); // half matrix + case 0: + return x1bin; // linear + case 2: + return x1bin + x2bin * GetTheCoeffTable()->GetNxtot1(ObsBin); // full matrix + default: + return -1; // this will cause a crash :) + } +}; + + + +// ___________________________________________________________________________________________________ +int fastNLOCreate::GetNxmax(const vector<double>* xGrid1, const vector<double>* xGrid2) { + switch (GetTheCoeffTable()->GetNPDFDim()) { + case 0: + return xGrid1->size(); + case 1: + if (!xGrid2) logger.error["GetNxmax"]<<"Error. Second x-grid must be specified."<<endl; + if (xGrid1->size() != xGrid2->size())logger.error["GetNxmax"]<<"Grid sizes in half-matrix notation must have equal size."<<endl; + return ((int)pow((double)xGrid1->size(),2)+xGrid1->size())/2; + case 2: + if (!xGrid2) logger.error["GetNxmax"]<<"Error. Second x-grid must be specified."<<endl; + return xGrid1->size()*xGrid2->size(); + default: + return 0; + } +}; + + +// ___________________________________________________________________________________________________ +inline void fastNLOCreate::ApplyPDFWeight(vector<pair<int,double> >& nodes, const double x, const vector<double>* grid) const { + // double pdfwgtmax = PDFwgt(xmax); + // for( int i1 = 0; i1 < 4; i1++) { + // if ((nxmaxf-1+i1) >= 0 && (nxmaxf-1+i1) < Nxtot1[ObsBin] ) { + // cefmax[i1] *= pdfwgtmax/PDFwgt(XNode1[ObsBin][nxmaxf-1+i1]); + // } + // } + double wgtx = CalcPDFReweight(x); + for (unsigned int in = 0; in < nodes.size(); in++) { + double wgtn = CalcPDFReweight(grid->at(nodes[in].first)); + if (wgtn==0) {logger.error["ApplyPDFWeight"]<<"Cannot divide by 0."<<endl; exit(1);} + //cout<<"in="<<in<<" wgtx="<<wgtx<<", x="<<x<<", wgtn="<<wgtn<<", nod="<<grid->at(nodes[in].first)<<endl; + nodes[in].second *= wgtx/wgtn; + } +} + + +// ___________________________________________________________________________________________________ +inline double fastNLOCreate::CalcPDFReweight(double x) const { + if (x<=0) { logger.error["CalcPDFReweight"]<<"Cannot calculate sqrt of negative numbers or divide by zero. x="<<x<<endl; exit(1);} + double w=(1.-0.99*x)/sqrt(x); + return w*w*w; +} + + +// ___________________________________________________________________________________________________ +void fastNLOCreate::NormalizeCoefficients(double wgt) { + //! Set number of events to wgt (default=1) and weight coefficients in sigmatilde + //! accordingly + //! This means, that the information about the + //! number of events is essentially lost (now remained stored in fWgt) + if (fWeightCache.size() || fWeightCacheBinProc.size()) FlushCache(); + GetTheCoeffTable()->NormalizeCoefficients(wgt); + fStats._nEv=wgt; + // double nev = GetTheCoeffTable()->GetNevt(0,0); + // MultiplyCoefficientsByConstant(1./nev); + // SetNumberOfEvents(1.); +} +// ___________________________________________________________________________________________________ +void fastNLOCreate::NormalizeCoefficients(const std::vector<std::vector<double> >& wgtProcBin) { + //! Set number of events to wgtProcBin[iProc][iBin] + //! sigmatilde is weighted accordingly. + if (fWeightCache.size() || fWeightCacheBinProc.size()) FlushCache(); + GetTheCoeffTable()->NormalizeCoefficients(wgtProcBin); + fStats._nEv=-1; +} + + +// ___________________________________________________________________________________________________ +void fastNLOCreate::MultiplyCoefficientsByBinSize() { + //! Multiply all coefficients by binsize + if (fWeightCache.size() || fWeightCacheBinProc.size()) FlushCache(); + if (fIsFlexibleScale) { + fastNLOCoeffAddFlex* c = (fastNLOCoeffAddFlex*)GetTheCoeffTable(); + for (unsigned int i=0; i<GetNObsBin(); i++) { + int nxmax = c->GetNxmax(i); + for (unsigned int jS1=0; jS1<c->GetNScaleNode1(i); jS1++) { + for (unsigned int kS2=0; kS2<c->GetNScaleNode2(i); kS2++) { + for (int x=0; x<nxmax; x++) { + for (int n=0; n<c->GetNSubproc(); n++) { + c->SigmaTildeMuIndep[i][x][jS1][kS2][n] *= BinSize[i]; + if (c->GetNScaleDep() >= 5) { + c->SigmaTildeMuFDep [i][x][jS1][kS2][n] *= BinSize[i]; + c->SigmaTildeMuRDep [i][x][jS1][kS2][n] *= BinSize[i]; + if (c->GetNScaleDep() >= 6) { + c->SigmaTildeMuRRDep [i][x][jS1][kS2][n] *= BinSize[i]; + } + if (c->GetNScaleDep() >= 7) { + c->SigmaTildeMuFFDep [i][x][jS1][kS2][n] *= BinSize[i]; + c->SigmaTildeMuRFDep [i][x][jS1][kS2][n] *= BinSize[i]; + } + } + } + } + } + } + } + } else { + fastNLOCoeffAddFix* c = (fastNLOCoeffAddFix*)GetTheCoeffTable(); + for (unsigned int i=0; i<GetNObsBin(); i++) { + for (unsigned int s=0 ; s<c->SigmaTilde[i].size() ; s++) { + for (unsigned int x=0 ; x<c->SigmaTilde[i][s].size() ; x++) { + for (unsigned int l=0 ; l<c->SigmaTilde[i][s][x].size() ; l++) { + for (unsigned int m=0 ; m<c->SigmaTilde[i][s][x][m].size() ; m++) { + c->SigmaTilde[i][s][x][l][m] *= BinSize[i]; + } + } + } + } + } + } +} + + +// ___________________________________________________________________________________________________ +void fastNLOCreate::DivideCoefficientsByBinSize() { + //! Divide all coefficients by binsize + if (fWeightCache.size() || fWeightCacheBinProc.size()) FlushCache(); + if (fIsFlexibleScale) { + fastNLOCoeffAddFlex* c = (fastNLOCoeffAddFlex*)GetTheCoeffTable(); + for (unsigned int i=0; i<c->SigmaTildeMuIndep.size(); i++) { + int nxmax = c->GetNxmax(i); + for (unsigned int jS1=0; jS1<c->GetNScaleNode1(i); jS1++) { + for (unsigned int kS2=0; kS2<c->GetNScaleNode2(i); kS2++) { + for (int x=0; x<nxmax; x++) { + for (int n=0; n<c->GetNSubproc(); n++) { + c->SigmaTildeMuIndep[i][x][jS1][kS2][n] /= BinSize[i]; + //if ( c->GetNScaleDep() >= 5 ) { + if (!c->SigmaTildeMuFDep.empty()) { + c->SigmaTildeMuFDep [i][x][jS1][kS2][n] /= BinSize[i]; + c->SigmaTildeMuRDep [i][x][jS1][kS2][n] /= BinSize[i]; + //if ( c->GetNScaleDep() >= 6 ) { + if (!c->SigmaTildeMuRRDep.empty()) { + c->SigmaTildeMuRRDep [i][x][jS1][kS2][n] /= BinSize[i]; + } + if (!c->SigmaTildeMuFFDep.empty()) { + c->SigmaTildeMuFFDep [i][x][jS1][kS2][n] /= BinSize[i]; + c->SigmaTildeMuRFDep [i][x][jS1][kS2][n] /= BinSize[i]; + } + } + } + } + } + } + } + } else { + fastNLOCoeffAddFix* c = (fastNLOCoeffAddFix*)GetTheCoeffTable(); + for (unsigned int i=0; i<c->SigmaTilde.size(); i++) { + for (unsigned int s=0 ; s<c->SigmaTilde[i].size() ; s++) { + for (unsigned int x=0 ; x<c->SigmaTilde[i][s].size() ; x++) { + for (unsigned int l=0 ; l<c->SigmaTilde[i][s][x].size() ; l++) { + for (unsigned int m=0 ; m<c->SigmaTilde[i][s][x][m].size() ; m++) { + c->SigmaTilde[i][s][x][l][m] /= BinSize[i]; + } + } + } + } + } + } +} + + +// ___________________________________________________________________________________________________ +void fastNLOCreate::MultiplyCoefficientsByConstant(double coef) { + //! Divide all coefficients by binsize + if (fWeightCache.size() || fWeightCacheBinProc.size()) FlushCache(); + if (fIsFlexibleScale) { + fastNLOCoeffAddFlex* c = (fastNLOCoeffAddFlex*)GetTheCoeffTable(); + c->MultiplyCoefficientsByConstant(coef); + } else { + fastNLOCoeffAddFix* c = (fastNLOCoeffAddFix*)GetTheCoeffTable(); + c->MultiplyCoefficientsByConstant(coef); + } +} + + +// ___________________________________________________________________________________________________ +void fastNLOCreate::UpdateWarmupArrays() { + //! Update the warmup-arrays fWMu1, fWx und fWMu2 + if (fWx.empty()) InitWarmupArrays(); + + const int ObsBin = GetBin(); + logger.debug["UpdateWarmupArrays"] << "ObsBin = " << ObsBin << endl; + if (ObsBin < 0 || ObsBin >= (int)GetNObsBin()) return; + + logger.debug["UpdateWarmupArrays"]<<"ObsBin="<<ObsBin<<"\tmu1="<<fScenario._m1<<"\tmu2="<<fScenario._m2<<"\tx1="<<fEvent._x1<<"\tx2="<<fEvent._x2<<endl; + + fWMu1[ObsBin].first = std::min(fScenario._m1,fWMu1[ObsBin].first) ; + fWMu1[ObsBin].second = std::max(fScenario._m1,fWMu1[ObsBin].second) ; + if (GetTheCoeffTable()->IPDFdef1 == 3) { // pp/ppbar + fWx[ObsBin].first = std::min(std::min(fEvent._x1,fEvent._x2),fWx[ObsBin].first) ; + fWx[ObsBin].second = std::max(std::max(fEvent._x1,fEvent._x2),fWx[ObsBin].second) ; + } else if (GetTheCoeffTable()->IPDFdef1 == 2) { // DIS + fWx[ObsBin].first = std::min(fEvent._x1,fWx[ObsBin].first) ; + fWx[ObsBin].second = std::max(fEvent._x1,fWx[ObsBin].second) ; + } else + logger.error["UpdateWarmupArrays"]<<"nothing reasonable implemented yet: IPDFdef1="<<GetTheCoeffTable()->IPDFdef1<<endl; + if (fIsFlexibleScale) { + fWMu2[ObsBin].first = std::min(fScenario._m2,fWMu2[ObsBin].first) ; + fWMu2[ObsBin].second = std::max(fScenario._m2,fWMu2[ObsBin].second) ; + } + if (fWx[ObsBin].first < 0) { + logger.error["UpdateWarmupArrays"]<<"x-value is smaller than 0. Exiting."<<endl; + exit(4); + } + +} + + +// ___________________________________________________________________________________________________ +void fastNLOCreate::InitWarmupArrays() { + logger.debug["InitWarmupArrays"]<<endl; + //! initialize arrays to store and determine warm-up values + //! including copy for later rounding and write out + //! initialize with reasonable values + fWMu1.resize(GetNObsBin()); + fWMu2.resize(GetNObsBin()); + fWx.resize(GetNObsBin()); + fWMu1Rnd.resize(GetNObsBin()); + fWMu2Rnd.resize(GetNObsBin()); + fWxRnd.resize(GetNObsBin()); + for (unsigned int i = 0 ; i < GetNObsBin() ; i ++) { + fWMu1[i].first = DBL_MAX; + fWMu1[i].second = -DBL_MAX; + fWMu2[i].first = DBL_MAX; + fWMu2[i].second = -DBL_MAX; + fWx[i].first = DBL_MAX; + fWx[i].second = -DBL_MAX; + fWMu1Rnd[i].first = DBL_MAX; + fWMu1Rnd[i].second = -DBL_MAX; + fWMu2Rnd[i].first = DBL_MAX; + fWMu2Rnd[i].second = -DBL_MAX; + fWxRnd[i].first = DBL_MAX; + fWxRnd[i].second = -DBL_MAX; + } +} + + +// ___________________________________________________________________________________________________ +void fastNLOCreate::WriteTable() { + //! Write fastNLO file to disk + //if ( GetTheCoeffTable()->GetNevt(0,0) <= 0 ) { + // flush cache with remaining events + if (fWeightCache.size() || fWeightCacheBinProc.size()) FlushCache(); + if (GetTheCoeffTable()->Nevt <= 0) { + logger.warn["WriteTable"]<<"Number of events seems to be not filled. Please use SetNumberOfEvents(int) before writing table."<<endl; + exit(1); + } + fStats.PrintStats(); + if (fIsWarmup) { + logger.info["WriteTable"]<<"Writing warmup table instead of coefficient table."<<endl; + if (fWx.empty()) { + logger.error["WriteTable"]<<"Warmup values seem not to be initialized correctly. Maybe forgot to call 'Fill()'?"<<endl; + logger.error["WriteTable"]<<"Not writing warmup file and continuing..."<<endl; + return ; + //exit(1); + } + // round warmup values and try to guess bin boundaries + AdjustWarmupValues(); + // write table to disk + WriteWarmupTable(); + } else { + if (ffilename == "") { + logger.error["WriteTable"]<<"No filename given."<<endl; + exit(1); + } + if (!CheckProcConsts()) { + logger.error["fastNLOCreate"]<<"Process constants not properly set! Please check warning messages and complement your steering."<<endl; + exit(1); + } + // Number of events must be counted correctly. + // I.e. the counting should be performed by the generator. + // ->Divide by BinSize + fastNLOTable::WriteTable(); + // ->Multiply by BinSize + } +} + + +// ___________________________________________________________________________________________________ +void fastNLOCreate::WriteTable(string filename) { + SetFilename(filename); + fastNLOTable::WriteTable(); +} + + +// ___________________________________________________________________________________________________ +void fastNLOCreate::WriteWarmupTable() { + string tempfn = ffilename; + string warmupfile = GetWarmupTableFilename(); + logger.info["WriteWarmupTable"]<<"Writing warmup table to: "<<warmupfile<<endl; + SetFilename(warmupfile); + + // open stream; + std::ostream* table = OpenFileWrite(); + // write to disk + OutWarmup(*table); + // close file + // table->close(); + delete table; + // reset filename + SetFilename(tempfn); +} + + + +// ___________________________________________________________________________________________________ +void fastNLOCreate::PrintWarmupValues() { + OutWarmup(std::cout); +} + + +// ___________________________________________________________________________________________________ +void fastNLOCreate::OutWarmup(ostream& strm) { + if (fWeightCache.size() || fWeightCacheBinProc.size()) FlushCache(); + if (fWxRnd.empty()) { + logger.warn["OutWarmup"]<<"Warmup arrays not initialized. Did you forgot to fill values?"<<endl; + // logger.warn["OutWarmup"]<<" Continuting, but writing unreasonalby large/small values as warmup values..."<<endl; + // InitWarmupArrays(); + logger.error["OutWarmup"]<<" Do not write out unreasonable warmup table. Continuing."<<endl; + return; + } + + strm<<"# --- Use emacs in sh mode -*-sh-*- #"<<endl; + strm<<"# This is a automatically generated file by fastNLO and holds the values of the warmup run. "<<endl; + strm<<"# The values are valid for the scenario "<<GetScenName() << endl; + strm<<"# and if calculated with the steerfile: "<< fSteerfile <<endl; + strm<<"# but only if no serious changes have been performed since its creation."<<endl; + strm<<"# "<<endl; + strm<<"# Delete this file, if you want fastNLO to calculate a new one."<<endl; + strm<<"# "<<endl; + strm<<"# This file has been calculated using: "<<endl; + strm<<"# "<<GetTheCoeffTable()->Nevt<<" contributions."<<endl; + strm<<"# "<<GetTheCoeffTable()->fWgt.WgtNumEv<<" entries."<<endl; + strm<<"# ( Mind: contributions != events. And contributions are not necessarily in phase space region."<<endl; + strm<<"# Please check by eye for reasonability of the values."<<endl; + strm<<"# Number of events per bin are listed below."<<endl; + strm<<" " <<endl; + + // write variables of warmup run + strm<<"Warmup.OrderInAlphasOfWarmupRunWas\t"<< fIOrd <<endl; + //strm<<"Warmup.CheckScaleLimitsAgainstBins\t"<<(BOOL_NS(CheckScaleLimitsAgainstBins,fSteerfile)?"true":"false")<<endl; + strm<<"Warmup.CheckScaleLimitsAgainstBins\t"<< (fScenConsts.CheckScaleLimitsAgainstBins ?"true":"false")<<endl; + strm<<"Warmup.ScaleDescriptionScale1 \t\""<< GetTheCoeffTable()->ScaleDescript[0][0]<<"\""<<endl; + if (fIsFlexibleScale) + strm<<"Warmup.ScaleDescriptionScale2 \t\""<< GetTheCoeffTable()->ScaleDescript[0][1]<<"\"" <<endl; + strm<<"Warmup.DifferentialDimension \t"<< NDim <<endl; + strm<<"Warmup.DimensionLabels {\n "; + for (unsigned int i = 0 ; i < NDim; i ++) strm<<"\""<<DimLabel[i]<<"\" "; + strm<<"\n} "<<endl; + + strm<<"Warmup.DimensionIsDifferential {\n "; + for (unsigned int i = 0 ; i < NDim; i ++) strm<<"\""<<IDiffBin[i]<<"\" "; + strm<<"\n} "<<endl; + strm<<endl; + + + // --- sanity test, warnings and dummy values (if needed) + for (unsigned int i = 0 ; i < GetNObsBin() ; i ++) { + int nEvBin = 0; + for (int ip=0 ; ip<GetNSubprocesses() ; ip++) { + if (fWxRnd[i].first < 1.e-6) { + logger.warn["OutWarmup"]<<"The xmin value in bin "<<i + <<" seems to be unreasonably low (xmin="<<fWxRnd[i].first + <<"). Taking xmin=1.e-6 instead."<<endl; + fWxRnd[i].first=1.e-6; + } + nEvBin += GetTheCoeffTable()->fWgt.WgtObsNumEv[ip][i]; + } + if (nEvBin == 0) { + logger.error["OutWarmup"]<<"No events were counted in bin "<<i<<". Thus no sensible warmup table can be written."<<endl; + fWxRnd[i].first=1.e-6; + fWxRnd[i].second=1; + fWMu1[i].first=1; + fWMu1[i].second=5000; + fWMu2[i].first=1; + fWMu2[i].second=5000; + logger.error["OutWarmup"]<<"Continuing and taking sensible dummy values. Do not use these for production runs !!"<<endl; + } else if (nEvBin < 10) { + logger.warn["OutWarmup"]<<"Too little events (n="<<nEvBin<<") were counted in bin "<<i<<". Thus no sensible warmup table can be written."<<endl; + } else if (nEvBin < 100) { + logger.warn["OutWarmup"]<<"Quite few events (n="<<nEvBin<<") were counted in bin "<<i<<". Thus no sensible warmup table can be written."<<endl; + } + } + + // ---- write readable table + char buf[4000]; + char buf2[4000]; + char buf3[4000]; + strm<<"Warmup.Values {{"<<endl; + if (fIsFlexibleScale) { + // table header + sprintf(buf," ObsBin %9s %9s %14s %14s %14s %14s", + "x_min","x_max", + GetWarmupHeader(0,"min").c_str(), GetWarmupHeader(0,"max").c_str(), + GetWarmupHeader(1,"min").c_str(), GetWarmupHeader(1,"max").c_str()); + strm<<buf<<endl; + // table values + + // 1. Are warmup-values identical to bin-boundaries ? + int ident1 = CheckWarmupValuesIdenticalWithBinGrid(fWMu1); + int ident2 = CheckWarmupValuesIdenticalWithBinGrid(fWMu2); + fWMu1Rnd = fWMu1; + fWMu2Rnd = fWMu2; + + // write all bins + for (unsigned int i = 0 ; i < GetNObsBin() ; i ++) { + // --- write x-values + sprintf(buf," %4d %9.1e %9.2e", i, fWxRnd[i].first, fWxRnd[i].second); + + // --- write mu1 + if (ident1 > 0) { + // mu-value is identical with binning + // -> write out many digits + sprintf(buf2," %14.6f %14.6f",fWMu1[i].first,fWMu1[i].second); + } else if (fWMu1[i].second==0 || fabs(fWMu1[i].first/fWMu1[i].second-1) < 1.e-5) { + // mu-value is a fixed number + sprintf(buf2," %14.8f %14.8f",fWMu1[i].first,fWMu1[i].first); + } else { + // scale values are floating points. + // -> round them up/down a bit + // extent range by 2% + if (ident1 < 0 ) + fWMu1Rnd[i].first = fWMu1[i].first; + else if ( fabs(remainder(fWMu1[i].first, 0.1 )) < 1e-3 ) // if value is pretty close to mod(0.1) + fWMu1Rnd[i].first = fWMu1[i].first; + else + fWMu1Rnd[i].first = fWMu1[i].first - 0.02*fabs(fWMu1[i].first); + + + fWMu1Rnd[i].second = fWMu1[i].second; + if ( fabs(remainder(fWMu1[i].second, 0.1 )) > 1e-3 ) // if value is not close to mod(0.1) + fWMu1Rnd[i].second += 0.02*fabs(fWMu1[i].second); + + + RoundValues(fWMu1Rnd,i,fWarmupNDigitMu1 ); // digit here should be identical to output in outwarmup + // if values are very close to an integer, it is likely that this is by purpose + if ( ident1==0 && fWMu1[i].first >= 1 && fabs(fWMu1[i].first - round(fWMu1[i].first)) < 1e-3) + fWMu1Rnd[i].first = round(fWMu1[i].first); + if ( fWMu1[i].second >= 1 && fabs(fWMu1[i].second - round(fWMu1[i].second)) < 1e-3) + fWMu1Rnd[i].second = round(fWMu1[i].second); + + string format = " %14."+to_string(fWarmupNDigitMu1)+"f %14."+to_string(fWarmupNDigitMu1)+"f"; + sprintf(buf2,format.c_str(),fWMu1Rnd[i].first,fWMu1Rnd[i].second); + } + + // --- write mu2 + if (ident2 > 0 ) { + // mu-value is identical with binning + // -> write out many digits + sprintf(buf3," %14.6f %14.6f",fWMu2[i].first,fWMu2[i].second); + } else if (fWMu2[i].second==0 || fabs(fWMu2[i].first/fWMu2[i].second-1) < 1.e-5) { + // mu-value is a fixed number + sprintf(buf3," %14.8f %14.8f",fWMu2[i].first,fWMu2[i].first); + } else { + // scale values are floating points. + // -> round them up/down a bit + + if (ident2 < 0 ) + fWMu2Rnd[i].first = fWMu2[i].first; // use bin boundary + else if ( fabs(remainder(fWMu2[i].first, 0.1 )) < 1e-3 ) // if value is pretty close to mod(0.1) + fWMu2Rnd[i].first = fWMu2[i].first; + else + fWMu2Rnd[i].first = fWMu2[i].first - 0.02*fabs(fWMu2[i].first); + + fWMu2Rnd[i].second = fWMu2[i].second; + if ( fabs(remainder(fWMu2[i].second, 0.1 )) > 1e-3 ) // if value is not close to mod(0.1) + fWMu2Rnd[i].second += 0.02*fabs(fWMu2[i].second); + + + RoundValues(fWMu2Rnd,i,fWarmupNDigitMu2 ); // digit here should be identical to output in outwarmup + + + // if values are very close to an integer, it is likely that this is by purpose + if (ident2==0 && fWMu2[i].first >= 1 && fabs(fWMu2[i].first - round(fWMu2[i].first)) < 1e-3) + fWMu2Rnd[i].first = round(fWMu2[i].first); + if (fWMu2[i].second >= 1 && fabs(fWMu2[i].second - round(fWMu2[i].second)) < 1e-3) + fWMu2Rnd[i].second = round(fWMu2[i].second); + + string format = " %14."+to_string(fWarmupNDigitMu2)+"f %14."+to_string(fWarmupNDigitMu2)+"f"; + sprintf(buf3,format.c_str(),fWMu2Rnd[i].first,fWMu2Rnd[i].second); + } + + // if ( fWMu2[i].second!=0 && fabs(fWMu2[i].first/fWMu2[i].second-1) > 1.e-3) + // sprintf(buf3," %14.2g %14.2g",fWMu2Rnd[i].first,fWMu2Rnd[i].second); + // else + // sprintf(buf3," %14.8f %14.8f",fWMu2[i].first,fWMu2[i].second); + + // printf(" org %e %e %e %e\n",fWMu1[i].first,fWMu1[i].second,fWMu2[i].first,fWMu2[i].second); + // printf(" rnd %e %e %e %e\n",fWMu1Rnd[i].first,fWMu1Rnd[i].second,fWMu2Rnd[i].first,fWMu2Rnd[i].second); + // cout<<buf<<buf2<<buf3<<endl; + // printf("\n"); + + strm<<buf<<buf2<<buf3<<endl; + + } + } else { + // is ScaleDescript available? + if (GetTheCoeffTable()->ScaleDescript[0].empty()) { logger.error["OutWarmup"]<<"Scale description is empty. but needed. Probably this has to be implemented."<<endl; exit(1);}; + // table header + sprintf(buf," ObsBin %9s %9s %16s %16s", + "x_min","x_max", GetWarmupHeader(0,"min").c_str(), GetWarmupHeader(0,"max").c_str()); + strm<<buf<<endl; + + + // 1. Are warmup-values identical to bin-boundaries ? + int ident1 = CheckWarmupValuesIdenticalWithBinGrid(fWMu1); + fWMu1Rnd = fWMu1; + + + // table values + for (unsigned int i = 0 ; i < GetNObsBin() ; i ++) { + if (fWxRnd[i].first < 1.e-6) { + logger.warn["OutWarmup"]<<"The xmin value in bin "<<i<<" seems to be unreasonably low (xmin="<<fWxRnd[i].first<<"). Taking xmin=1.e-6 instead."<<endl; + fWxRnd[i].first=1.e-6; + } + // sprintf(buf," %4d %9.1e %9.2e %16.1g %16.1g", + // i,fWxRnd[i].first, fWxRnd[i].second, fWMu1Rnd[i].first, fWMu1Rnd[i].second); + sprintf(buf," %4d %9.1e %9.2e", i,fWxRnd[i].first, fWxRnd[i].second); + + // --- old code --- // + // if ( fWMu1[i].second!=0 && fabs(fWMu1[i].first/fWMu1[i].second-1) > 1.e-3) + // sprintf(buf2," %16.2g %16.2g", fWMu1Rnd[i].first, fWMu1Rnd[i].second); + // else + // sprintf(buf2," %16.8f %16.8f", fWMu1[i].first, fWMu1[i].second); + // --- --- ---- --- // + // --- write mu1 + if (ident1 > 0) { + // mu-value is identical with binning + // -> write out many digits + sprintf(buf2," %14.6f %14.6f",fWMu1[i].first,fWMu1[i].second); + } else if (fWMu1[i].second==0 || fabs(fWMu1[i].first/fWMu1[i].second-1) < 1.e-5) { + // mu-value is a fixed number + sprintf(buf2," %14.8f %14.8f",fWMu1[i].first,fWMu1[i].first); + } else { + // scale values are floating points. + // -> round them up/down a bit + // extent range by 2% + if (ident1 < 0 ) + fWMu1Rnd[i].first = fWMu1[i].first; + else + fWMu1Rnd[i].first = fWMu1[i].first - 0.02*fabs(fWMu1[i].first); + fWMu1Rnd[i].second = fWMu1[i].second + 0.02*fabs(fWMu1[i].second); + RoundValues(fWMu1Rnd,i,fWarmupNDigitMu1); // digit here should be identical to output in outwarmup + + // if values are very close to an integer, it is likely that this is by purpose + if (fWMu1[i].first >= 1 && fabs(fWMu1[i].first - round(fWMu1[i].first)) < 1e-3) + fWMu1Rnd[i].first = round(fWMu1[i].first); + if (fWMu1[i].second >= 1 && fabs(fWMu1[i].second - round(fWMu1[i].second)) < 1e-3) + fWMu1Rnd[i].second = round(fWMu1[i].second); + + string format = " %14."+to_string(fWarmupNDigitMu1)+"f %14."+to_string(fWarmupNDigitMu1)+"f"; + sprintf(buf2,format.c_str(),fWMu1Rnd[i].first,fWMu1Rnd[i].second); + } + // --- write + strm<<buf<<buf2<<endl; + } + } + strm<<"}}"<<endl; + + strm<<endl<<endl; + + // BinGrid + strm<<"Warmup.Binning {{"<<endl; + // table header + strm<<" ObsBin"; + for (unsigned int idim = 0 ; idim<NDim ; idim++) { + sprintf(buf," %9s_Lo %9s_Up",DimLabel[idim].c_str() ,DimLabel[idim].c_str()); + strm<<buf; + } + sprintf(buf," %12s %12s","BinSize","EventCount"); + strm<<buf<<endl; + + // table values + // KR: increase precision, otherwise binsize factors with e.g. Pi or bin borders in multiples of Pi lead to warnings! + for (unsigned int i = 0 ; i < GetNObsBin() ; i ++) { + + int nEvBin = 0; + for (int ip=0 ; ip<GetNSubprocesses() ; ip++) + nEvBin += GetTheCoeffTable()->fWgt.WgtObsNumEv[ip][i]; + + sprintf(buf," %4d ",i); // obsbin + strm<<buf; + for (unsigned int idim = 0 ; idim<NDim ; idim++) { + sprintf(buf," % -#12.6g % -#12.6g",Bin[i][idim].first , Bin[i][idim].second); + strm<<buf; + } + sprintf(buf," % -#12.6g %12d",BinSize[i],nEvBin); + strm<<buf<<endl; + } + strm<<"}}"<<endl; + +} + + +// ___________________________________________________________________________________________________ +string fastNLOCreate::GetWarmupHeader(int iScale, string minmax) { + string Descript = GetTheCoeffTable()->ScaleDescript[0][iScale]; + // replace all 'spaces' with _ + replace(Descript.begin(), Descript.end(), ' ', '_'); + // add 'minmax' + string ret = ""; + ret += Descript; + ret += "_"; + ret += minmax; + return ret; +} + + + +// ___________________________________________________________________________________________________ +string fastNLOCreate::GetWarmupTableFilename() { + if (!fWarmupFilename.empty()) { + logger.debug["GetWarmupTableFilename"]<< "Preset name is: " << fWarmupFilename << endl; + return fWarmupFilename; + } else { + // If we do not have a warmup filename yet, we generate a generic one + string ret = fSteerfile; + size_t pos = ret.find(".str"); + if (pos != std::string::npos) ret.erase(pos,4); + pos = ret.find(".steer"); + if (pos != std::string::npos) ret.erase(pos,6); + ret += "_"; + ret += GetScenName(); + logger.debug["GetWarmupTableFilename"]<< "Scenario name = " << GetScenName() << " bins" << endl; + // TODO: KR: Consider keeping all warmup filenames to .wrm + // ret += "_warmup.txt"; + ret += ".wrm"; + SetWarmupTableFilename(ret); + logger.debug["GetWarmupTableFilename"]<<"The warmup filename is: " << ret << endl; + return ret; + } +} + + +// ___________________________________________________________________________________________________ +void fastNLOCreate::SetWarmupTableFilename(string filename) { + fWarmupFilename = filename; +} + + +// ___________________________________________________________________________________________________ +void fastNLOCreate::AdjustWarmupValues() { + //! Adjust warmup-values found to supposedly + //! more reasonable values. + //! + //! Do this ONLY ONCE on COPY of actual values + //! just before writing out to the warm-up table. + //! + //! 1. Round warm-up values up/down, if they are + //! 4% close to the bin boundary + //! -> if more than 70% of all bins are + //! close to the bin boundary, then round all + //! 2. Round values up/down, by mostly 3% + //! to next reasonable value + //! 3. Round lower x-values down by 20% + + + // --------------------------------------- + // 3. 'round' lower x-values down + for (unsigned int i = 0 ; i < GetNObsBin() ; i ++) { + fWxRnd[i].first = fWx[i].first; + fWxRnd[i].second = fWx[i].second; + } + for (unsigned int i = 0 ; i < GetNObsBin() ; i ++) { + //fWxRnd[i].first *= (1.-xdown); + if (fWxRnd[i].first >= 0.8) fWxRnd[i].first = 1.e-4; // not filled! + else if (fWxRnd[i].first >= 0.09) fWxRnd[i].first = 0.09; // minimum high-x + double lx = log10(fWxRnd[i].first); + int ex = lx-1; + double mant = fWxRnd[i].first/pow(10,ex); + int imant = mant*10; // floor() + // more safety margins + int nEvBin = 0; + for (int ip=0 ; ip<GetNSubprocesses() ; ip++) + nEvBin += GetTheCoeffTable()->fWgt.WgtObsNumEv[ip][i]; + imant -= fWarmupXMargin;// safety margin + if (nEvBin < 100) imant-=4; // more safety + else if (nEvBin < 1000) imant-=2; // more safety + else if (nEvBin > 1000000) imant+=2; // less safety + if (imant%2==1) imant-=1; // only 0.0, 0.2, 0.4... + fWxRnd[i].first = imant*pow(10,ex-1);//imant-1 + printf(" \t%8.3e %8.3e %8.1e n=%d\n",fWx[i].first,fWxRnd[i].first,fWxRnd[i].first,nEvBin); + } + +} + + + +// ___________________________________________________________________________________________________ +void fastNLOCreate::RoundValues(vector<pair<double,double> >& wrmmu, int bini, int nthdigit ) { + //! Round warmup values up (down) if third relevant + //! digit is a 9 (0) + //! lower values are only rounded down, + //! upper values are only rounded up + + for (unsigned int i = 0 ; i < GetNObsBin() ; i ++) { + if ( bini!=-1 && int(i)!=bini ) continue; + if (wrmmu[i].second!=0 // upper bound is non-zero + && fabs(wrmmu[i].first/wrmmu[i].second-1) > 1.e-4) // upper and lower bound are different + { + if ( fabs(remainder(wrmmu[i].first, 0.1 )) > 1e-6 ) wrmmu[i].first -= pow(10,-1*nthdigit-1)*5; + if ( fabs(remainder(wrmmu[i].second, 0.1 )) > 1e-6 ) wrmmu[i].second += pow(10,-1*nthdigit-1)*5; + } + } + /* + for (unsigned int i = 0 ; i < GetNObsBin() ; i ++) { + int nthlo = nthdigit; + int nthup = nthdigit; + if ( wrmmu[i].first<1 ) nthlo+=1; + if ( wrmmu[i].second<1 ) nthup+=1; + int lon = GetNthRelevantDigit(wrmmu[i].first,nthlo); + int upn = GetNthRelevantDigit(wrmmu[i].second*(1+1.e-7),nthup); + // lo value + if ( lon==0 && wrmmu[i].first>1.e-6 ) { + int ord = log10(wrmmu[i].first); + int wrmrnd = wrmmu[i].first*pow(10.,-ord+nthlo-1); + wrmmu[i].first = (double)wrmrnd / pow(10.,-ord+nthlo-1); + } + // up value + if ( upn==9 && wrmmu[i].second>1.e-6 ) { + int ord = log10(wrmmu[i].second); + int wrmrnd = wrmmu[i].second*pow(10.,-ord+nthup-1) + 1; + wrmmu[i].second = (double)wrmrnd / pow(10.,-ord+nthup-1); + } + } + */ +} + + +// ___________________________________________________________________________________________________ +int fastNLOCreate::GetNthRelevantDigit(double val, int n) { + int ord = log10(val); + double res = fmod(val,pow(10.,ord-n+2)); + double resres=res-fmod(res,pow(10.,ord-n+1)); + double valn=resres/pow(10.,ord-n+1); + return (int)(valn+0.999); +} + + +// ___________________________________________________________________________________________________ +int fastNLOCreate::CheckWarmupValuesIdenticalWithBinGrid(vector<pair<double,double> >& wrmmu) { + //! Check, where scale variable is identical + //! with measured variable and hence + //! warmu-values should be identical with + //! bin grid. + //! + //! returns idim, if identity was found + //! returns -1 else. + //! + //! If more than 70% of all bins are + //! closer than 4% to the bin boundary, then + //! identity is assumed + const double bclose = 0.04; + const double minallbins = 0.7; + + vector<int > nbinlo(NDim); + vector<int > nbinup(NDim); + for (int idim = int(NDim)-1 ; idim>=0 ; idim--) { + for (unsigned int i = 0 ; i < GetNObsBin() ; i ++) { + if (Bin[i][idim].first != 0) { + if (wrmmu.size() <= i) { + logger.error["CheckWarmupValuesIdenticalWithBinGrid"] + << "Warmup values contains only " << wrmmu.size() << " bins" << endl; + } + double diff = wrmmu[i].first/Bin[i][idim].first - 1.; + // lo-bin + if (diff < bclose && diff >= 0.) + nbinlo[idim]++; + } else { + if (wrmmu[i].first < 1.e-4) + nbinlo[idim]++; + } + if (Bin[i][idim].second != 0) { + // up-bin + double diff = 1. - wrmmu[i].second/Bin[i][idim].second; + if (diff < bclose && diff >= 0) + nbinup[idim]++; + } else { + if (wrmmu[i].second < 1.e-4) + nbinup[idim]++; + } + } + } + // // sanity check (round only in one dimension + // for ( int idim = 0 ; idim<NDim ; idim++ ) { + // for ( int jdim = idim+1 ; jdim<NDim ; jdim++ ) { + // int nbri = nbinlo[idim]+nbinup[idim]; + // int nbrj = nbinlo[jdim]+nbinup[jdim]; + // if ( nbri>0 && nbrj>0 ){ + // cout<<endl; + // logger.warn["CheckWarmupValuesIdenticalWithBinGrid"] + // <<"Adjusted warmup values to bin boundaries in different observables.\n" + // <<"\t\tThis may yield unreasonable results. Please check warmup-table carefully!\n"<<endl; + // } + // } + // } + // round all bins if applicable + for (unsigned int idim = 0 ; idim<NDim ; idim++) { + logger.debug["CheckWarmupValuesIdenticalWithBinGrid"]<<"found nbinlo="<<nbinlo[idim]<<" and nbinup="<<nbinup[idim]<<endl; + double frac= (nbinlo[idim]+nbinup[idim])/(2.*(int)GetNObsBin()); + if (frac>minallbins) { // round all bins + logger.info["CheckWarmupValuesIdenticalWithBinGrid"] + <<"Found that "<<frac*100<<"% of the warmup values are close (<"<<bclose*100.<<"%) to a bin boundary in '" + << DimLabel[idim]<<"' (Dim "<<idim<<").\n" + <<"Using these bin boundaries as warm-up values."<<endl; + for (unsigned int i = 0 ; i < GetNObsBin() ; i ++) { + wrmmu[i].first = Bin[i][idim].first; + wrmmu[i].second = Bin[i][idim].second; + } + return (nbinlo[idim]+nbinup[idim]); + } + } + + // check only lower bin boundary + for (unsigned int idim = 0 ; idim<NDim ; idim++) { + logger.debug["CheckWarmupValuesIdenticalWithBinGrid"]<<"found nbinlo="<<nbinlo[idim]<<" and nbinup="<<nbinup[idim]<<endl; + double frac= (nbinlo[idim])/((int)GetNObsBin()); + if (frac>minallbins) { // round all bins + logger.info["CheckWarmupValuesIdenticalWithBinGrid"] + <<"Found that "<<frac*100<<"% of the lower boundary warmup values are close (<"<<bclose*100.<<"%) to the lower bin boundary in '" + << DimLabel[idim]<<"' (Dim "<<idim<<").\n" + <<"Using these bin boundaries as lower value warm-up values."<<endl; + for (unsigned int i = 0 ; i < GetNObsBin() ; i ++) { + wrmmu[i].first = Bin[i][idim].first; + //wrmmu[i].second = Bin[i][idim].second; // do not change upper bin boundary + } + return (nbinlo[idim]) * -1; + } + } + + // ---- check if warmup values are close to 1 + int nbinlo1=0,nbinhi1=0; + int nbinlo0=0,nbinhi0=0; + int neqlo=0, neqhi=0; + for (unsigned int i = 0 ; i < GetNObsBin() ; i ++) { + if ( fabs(wrmmu[i].first - 1.) < bclose ) nbinlo1++; + if ( fabs(1. - wrmmu[i].second) < bclose ) nbinhi1++; + if ( fabs(wrmmu[i].first) < bclose ) nbinlo0++; + if ( fabs(wrmmu[i].second) < bclose ) nbinhi0++; + if ( fabs(wrmmu[i].first / wrmmu[0].first - 1.) < bclose ) neqlo++; + if ( fabs(wrmmu[i].second / wrmmu[0].second - 1.) < bclose ) neqhi++; + } + // only lower bound! + // 1 + if ( (nbinlo1)/(int)GetNObsBin() > minallbins ) { // yes! the warmup values should become 1 + logger.info["CheckWarmupValuesIdenticalWithBinGrid"] + <<"Found that "<<(nbinlo1/(int)GetNObsBin()*100)<<"% of the lower boundary warmup values are close (<"<<bclose*100.<<"%) to 1." + <<" Using 1 as lower value warm-up values."<<endl; + for (unsigned int i = 0 ; i < GetNObsBin() ; i ++) { + wrmmu[i].first = 1; + } + return (nbinlo1) * -1; + } + // 0 + if ( (nbinlo0)/(int)GetNObsBin() > minallbins ) { // yes! the warmup values should become 1 + logger.info["CheckWarmupValuesIdenticalWithBinGrid"] + <<"Found that "<<(nbinlo0/(int)GetNObsBin()*100)<<"% of the lower boundary warmup values are close (<"<<bclose*100.<<"%) to 0." + <<"Using 0 as lower value warm-up values."<<endl; + for (unsigned int i = 0 ; i < GetNObsBin() ; i ++) { + wrmmu[i].first = 0; + } + return (nbinlo0) * -1; + } + // all the same: + if ( (neqlo)/(int)GetNObsBin() > minallbins ) { // yes! the warmup values should become 1 + logger.info["CheckWarmupValuesIdenticalWithBinGrid"] + <<"Found that "<<(neqlo/(int)GetNObsBin()*100)<<"% of the lower boundary warmup values are (almost) equivalent." + <<"Using value of first bin as lower value warm-up values."<<endl; + double minlo = wrmmu[0].first; + for (unsigned int i = 1 ; i < GetNObsBin() ; i ++) + if ( wrmmu[i].first < minlo ) + minlo = wrmmu[i].first; + for (unsigned int i = 0 ; i < GetNObsBin() ; i ++) { + wrmmu[i].first = minlo;//wrmmu[0].first; + } + return (neqlo) * -1; + } + + return 0; +} + + + +// ___________________________________________________________________________________________________ +void fastNLOCreate::InitGrids() { + logger.debug["InitGrids"]<<endl; + if (fKernX1.empty()) logger.error["InitGrids"]<<"Interpolation kernels must be initialized before calling this function."<<endl; + + if (fIsFlexibleScale) { + fastNLOCoeffAddFlex* c = (fastNLOCoeffAddFlex*)GetTheCoeffTable(); + // if ( (c->GetNPDF()==2 && c->GetNPDFDim() == 1) || (c->GetNPDF()==1) ) {;} // ok! + // else { + // logger.error["InitGrids"]<<"Only half-matrix or DIS implemented."<<endl; exit(1); + // } + c->ScaleNode1.resize(GetNObsBin()); + c->ScaleNode2.resize(GetNObsBin()); + c->XNode1.resize(GetNObsBin()); + if (c->GetNPDFDim() == 2) + c->XNode2.resize(GetNObsBin()); + + vector<vector<vector<vector<vector<double> > > > > stype(GetNObsBin()); + for (unsigned int i = 0 ; i < GetNObsBin() ; i ++) { + c->ScaleNode1[i] = fKernMu1[i]->GetGrid(); + c->ScaleNode2[i] = fKernMu2[i]->GetGrid(); + c->XNode1[i] = fKernX1[i]->GetGrid(); + if (c->GetNPDFDim() == 2) + c->XNode2[i] = fKernX2[i]->GetGrid(); + + // SigmaTilde [NObsBins] ['n' x-nodes] [n s1-Nodes] [n s2-Nodes] [nsubproc] + int nxmax = GetNxmax(fKernX1[i]->GetGridPtr() , fKernX2[i]->GetGridPtr()); + stype[i].resize(nxmax); + for (unsigned int x = 0 ; x<stype[i].size() ; x++) { + stype[i][x].resize(c->ScaleNode1[i].size()); + for (unsigned int m1 = 0 ; m1<stype[i][x].size() ; m1++) { + stype[i][x][m1].resize(c->ScaleNode2[i].size()); + for (unsigned int mu2 = 0 ; mu2<stype[i][x][m1].size() ; mu2++) { + stype[i][x][m1][mu2].resize(GetNSubprocesses()); + } + } + } + } + c->SigmaTildeMuIndep = stype; + c->SigmaTildeMuRDep = stype; + c->SigmaTildeMuFDep = stype; + + c->SigmaTildeMuRRDep = stype; + c->SigmaTildeMuFFDep = stype; + c->SigmaTildeMuRFDep = stype; + //c->SigmaTildeMuIndep(GetNObsBin());/// + } + + else { + fastNLOCoeffAddFix* c = (fastNLOCoeffAddFix*)GetTheCoeffTable(); + // if ( (c->GetNPDF()==2 && c->GetNPDFDim() == 1) ) {;} // ok! + // else { + // //logger.error["InitGrids"]<<"Only half-matrix is implemented for grids for fixed-scale tables."<<endl; exit(1); + // } + + int nscalevar = fScaleFac.size(); + if (nscalevar==0) { + logger.error["InitGrids"]<<"No scale factors found."<<endl; + } + c->Nscalevar.resize(1); // 1 = NScaleDim + c->Nscalevar[0] = nscalevar; // testing + + c->ScaleFac.resize(1); // 1 = NScaleDim + c->ScaleFac[0] = fScaleFac; + c->XNode1.resize(GetNObsBin()); + for (unsigned int i = 0 ; i < GetNObsBin() ; i ++) { + c->XNode1[i] = fKernX1[i]->GetGrid(); + } + if (c->GetNPDFDim() == 2) { // both hadrons have same x-grid in this implementation + c->XNode2 = c->XNode1; + } + + int nscalenode = fKernMuS[0][0]->GetGrid().size(); + // scale nodes + fastNLOTools::ResizeVector(c->ScaleNode, GetNObsBin(), 1, nscalevar, nscalenode); + for (unsigned int i = 0 ; i < GetNObsBin() ; i ++) { + for (int k=0; k<nscalevar; k++) { + c->ScaleNode[i][0][k] = fKernMuS[i][k]->GetGrid(); + } + } + + c->ResizeSigmaTilde(); + } + +} + + +// ___________________________________________________________________________________________________ +void fastNLOCreate::InitInterpolationKernels() { + //! + //! initialize members for interpolation + //! + + logger.debug["InitInterpolationKernels"]<<endl; + if (fIsWarmup) { + logger.error["InitInterpolationKernels"]<<"Interpolation kernels can only be initialized in production runs. Warmup values must be known."<<endl; + } + + fKernX1.resize(GetNObsBin()); + fKernX2.resize(GetNObsBin()); + if (fIsFlexibleScale) { + fKernMu1.resize(GetNObsBin()); + fKernMu2.resize(GetNObsBin()); + } else { + fKernMuS.resize(GetNObsBin()); + for (unsigned int i = 0 ; i < GetNObsBin() ; i ++) { + fKernMuS[i].resize(fScaleFac.size()); + } + } + /* + vector<double> wrmX = DOUBLE_COL_NS(Warmup.Values,x_min,fSteerfile); + vector<double> wrmMu1Up, wrmMu1Dn; + wrmMu1Dn = read_steer::getdoublecolumn("Warmup.Values",GetWarmupHeader(0,"min"),fSteerfile); + wrmMu1Up = read_steer::getdoublecolumn("Warmup.Values",GetWarmupHeader(0,"max"),fSteerfile); + if (wrmMu1Dn.size()!=GetNObsBin() || wrmMu1Up.size()!= GetNObsBin()) { + logger.error["InitInterpolationKernels"]<<"Could not read warmup values for Mu1. Exiting."<<endl; + exit(1); + } + vector<double> wrmMu2Up, wrmMu2Dn; + if (fIsFlexibleScale) { + wrmMu2Dn = read_steer::getdoublecolumn("Warmup.Values",GetWarmupHeader(1,"min"),fSteerfile); + wrmMu2Up = read_steer::getdoublecolumn("Warmup.Values",GetWarmupHeader(1,"max"),fSteerfile); + if (wrmMu2Dn.size()!=GetNObsBin() || wrmMu2Up.size()!= GetNObsBin()) { + logger.error["InitInterpolationKernels"]<<"Could not read warmup values for Mu2. Exiting."<<endl; + exit(1); + } + } + */ + + vector<double> wrmX; + vector<double> wrmMu1Up, wrmMu1Dn; + vector<double> wrmMu2Up, wrmMu2Dn; + if (GetTheCoeffTable()->GetIRef() == 0) { + if (fScenConsts.Mu1_NNodeCounting == "NodesPerDim1") { + wrmMu1Dn = GetObsBinsLoBounds(0); + wrmMu1Up = GetObsBinsUpBounds(0); + } else if (fScenConsts.Mu1_NNodeCounting == "NodesPerDim2") { + wrmMu1Dn = GetObsBinsLoBounds(1); + wrmMu1Up = GetObsBinsUpBounds(1); + } else if (fScenConsts.Mu1_NNodeCounting == "NodesPerDim3") { + wrmMu1Dn = GetObsBinsLoBounds(2); + wrmMu1Up = GetObsBinsUpBounds(2); + } else if (fScenConsts.Mu1_NNodeCounting == "NodesPerBin") { + wrmX = GetColumnFromTable(fWarmupConsts.Values, 1) ;// DOUBLE_COL_NS(Warmup.Values,x_min,fSteerfile); + wrmMu1Dn = GetColumnFromTable(fWarmupConsts.Values, 3) ;//read_steer::getdoublecolumn("Warmup.Values",GetWarmupHeader(0,"min"),fSteerfile); + wrmMu1Up = GetColumnFromTable(fWarmupConsts.Values, 4) ;//read_steer::getdoublecolumn("Warmup.Values",GetWarmupHeader(0,"max"),fSteerfile); + if (wrmMu1Dn.size()!=GetNObsBin() || wrmMu1Up.size()!= GetNObsBin()) { + logger.error["InitInterpolationKernels"]<<"Insufficient no. of rows for warmup values of Mu1. Exiting."<<endl; + exit(1); + } + } else { + logger.error["InitInterpolationKernels"] << "Unknown value for Mu1_NNodeCounting: " << fScenConsts.Mu1_NNodeCounting << endl; + logger.error["InitInterpolationKernels"] << "Supported values: NodesPerBin, NodesPerDim1, NodesPerDim2, NodesPerDim3" << endl; + logger.error["InitInterpolationKernels"] << "Exiting." << endl; + exit(1); + } + if (fIsFlexibleScale) { + if (fScenConsts.Mu2_NNodeCounting == "NodesPerDim1") { + wrmMu2Dn = GetObsBinsLoBounds(0); + wrmMu2Up = GetObsBinsUpBounds(0); + } else if (fScenConsts.Mu2_NNodeCounting == "NodesPerDim2") { + wrmMu2Dn = GetObsBinsLoBounds(1); + wrmMu2Up = GetObsBinsUpBounds(1); + } else if (fScenConsts.Mu2_NNodeCounting == "NodesPerDim3") { + wrmMu2Dn = GetObsBinsLoBounds(2); + wrmMu2Up = GetObsBinsUpBounds(2); + } else if (fScenConsts.Mu2_NNodeCounting == "NodesPerBin") { + wrmMu2Dn = GetColumnFromTable(fWarmupConsts.Values, 5) ;//read_steer::getdoublecolumn("Warmup.Values",GetWarmupHeader(1,"min"),fSteerfile); + wrmMu2Up = GetColumnFromTable(fWarmupConsts.Values, 6) ;//read_steer::getdoublecolumn("Warmup.Values",GetWarmupHeader(1,"max"),fSteerfile); + if (wrmMu2Dn.size()!=GetNObsBin() || wrmMu2Up.size()!= GetNObsBin()) { + logger.error["InitInterpolationKernels"]<<"Insufficient no. of rows for warmup values for Mu2. Exiting."<<endl; + exit(1); + } + } else { + logger.error["InitInterpolationKernels"] << "Unknown value for Mu2_NNodeCounting: " << fScenConsts.Mu2_NNodeCounting << endl; + logger.error["InitInterpolationKernels"] << "Supported values: NodesPerBin, NodesPerDim1, NodesPerDim2, NodesPerDim3" << endl; + logger.error["InitInterpolationKernels"] << "Exiting." << endl; + exit(1); + } + } + } else { + wrmX.resize(GetNObsBin(),0); + wrmMu1Dn.resize(GetNObsBin(),0); + wrmMu1Up.resize(GetNObsBin(),1); + if (fIsFlexibleScale) { + wrmMu2Dn.resize(GetNObsBin(),0); + wrmMu2Up.resize(GetNObsBin(),1); + } + } + + int npdf = GetTheCoeffTable()->GetNPDF(); + + if (fScenConsts.X_Kernel.empty()) { + logger.error["InitInterpolationKernels"]<<"X_Kernel not found in fScenarioConstants."<<endl; + exit(1); + } + for (unsigned int i = 0 ; i < GetNObsBin() ; i ++) { + // ------------------------------------------------ + // init x-interpolation kernels + // ------------------------------------------------ + logger.debug["InitInterpolationKernels"]<<"Make x grid for obsbin = "<<i<<endl; + + // Create x grids with X_NNodes+1 nodes up to x_max = 1. + // The additional last node will be removed again below. + double nxtot = fScenConsts.X_NNodes; + if (fScenConsts.X_NNodeCounting != "NodeDensity") { + nxtot += 1; + } + if (fScenConsts.X_NNodeCounting == "NodesPerMagnitude") { // "NodesMax","NodesPerBin","NodesPerMagnitude" + logger.debug["InitInterpolationKernels"]<<"Setting x nodes per magnitude: "<<fScenConsts.X_NNodeCounting<<endl; + fKernX1[i] = MakeInterpolationKernels(fScenConsts.X_Kernel,wrmX[i],1,fScenConsts.X_DistanceMeasure); // use 1 as upper x-value + fKernX1[i]->MakeGridsWithNNodesPerMagnitude(nxtot,fReduceXmin); + if (npdf == 2) { + fKernX2[i] = MakeInterpolationKernels(fScenConsts.X_Kernel,wrmX[i],1,fScenConsts.X_DistanceMeasure); + fKernX2[i]->MakeGridsWithNNodesPerMagnitude(nxtot,fReduceXmin); + } + } else if (fScenConsts.X_NNodeCounting == "NodesPerBin") { // + logger.debug["InitInterpolationKernels"]<<"Setting x nodes per range in bin: "<<fScenConsts.X_NNodeCounting<<endl; + fKernX1[i] = MakeInterpolationKernels(fScenConsts.X_Kernel,wrmX[i],1,fScenConsts.X_DistanceMeasure); // use 1 as upper x-value + fKernX1[i]->MakeGrids(nxtot,fReduceXmin); + if (npdf == 2) { + fKernX2[i] = MakeInterpolationKernels(fScenConsts.X_Kernel,wrmX[i],1,fScenConsts.X_DistanceMeasure); + fKernX2[i]->MakeGrids(nxtot,fReduceXmin); + } + } else if (fScenConsts.X_NNodeCounting == "NodesMax") { // + logger.debug["InitInterpolationKernels"]<<"Setting x nodes per range in total: "<<fScenConsts.X_NNodeCounting<<endl; + // generate grid for maximum x-range + double xmin = 1; + for (unsigned int xi=0 ; xi<wrmX.size() ; xi++) xmin = min(xmin,wrmX[xi]); + fastNLOInterpolBase* kernmin = MakeInterpolationKernels(fScenConsts.X_Kernel,xmin,1,fScenConsts.X_DistanceMeasure); // use 1 as upper x-value + kernmin->MakeGrids(nxtot,fReduceXmin); + // find xmin + const vector<double>& xg = kernmin->GetGrid(); + int nxbin = nxtot; + for (unsigned xi = 0 ; xi<xg.size() ; xi++) { + //cout<<"iBin="<<i<<"\txi="<<xi<<"\txg[xi]="<<xg[xi]<<"\twrmX[i]="<<wrmX[i]<<"\tnxbin="<<nxbin<<"\tnxtot="<<nxtot<<endl; + if (xg[xi] > wrmX[i]) break; + nxbin--; + xmin = xg[xi]; + } + logger.info["InitInterpolationKernels"]<<"Using x-grid in bin "<<i<<": x-min="<<xmin<<"\tx-warmup="<<wrmX[i]<<"\tnxbin="<<nxbin<<endl; + fKernX1[i] = MakeInterpolationKernels(fScenConsts.X_Kernel,xmin,1,fScenConsts.X_DistanceMeasure); // use 1 as upper x-value + fKernX1[i]->MakeGrids(nxbin); // fReduceXmin accounted for above + if (npdf == 2) { + fKernX2[i] = MakeInterpolationKernels(fScenConsts.X_Kernel,xmin,1,fScenConsts.X_DistanceMeasure); + fKernX2[i]->MakeGrids(nxbin); // fReduceXmin accounted for above + } + delete kernmin; + } else if(fScenConsts.X_NNodeCounting == "NodeDensity") { + logger.debug["InitInterpolationKernels"]<<"Setting x nodes as a density: "<<fScenConsts.X_NNodeCounting<<endl; + fKernX1[i] = MakeInterpolationKernels(fScenConsts.X_Kernel,nxtot,fScenConsts.X_DistanceMeasure); // use 1 as upper x-value + fKernX1[i]->MakeGrids(4,fReduceXmin); + if (npdf == 2) { + fKernX2[i] = MakeInterpolationKernels(fScenConsts.X_Kernel,nxtot,fScenConsts.X_DistanceMeasure); // use 1 as upper x-value + fKernX2[i]->MakeGrids(4,fReduceXmin); + } + } else { + // error + logger.error["InitInterpolationKernels"]<<"Cannot understand node counting: "<<fScenConsts.X_NNodeCounting<<"."<<endl; + logger.error["InitInterpolationKernels"]<<"Supported options are: 'NodesPerMagnitude', 'NodesPerBin', 'NodesMax' and 'NodeDensity'."<<endl; + } + + // Remove last node at x = 1; is multiplied by PDFs equalling zero anyway. + fKernX1[i]->RemoveLastNode(); + if (npdf == 2) + fKernX2[i]->RemoveLastNode(); + + // ------------------------------------------------ + // init scale1-interpolation kernels + // ------------------------------------------------ + int nqtot1 = fScenConsts.Mu1_NNodes; + if (fIsFlexibleScale) { + logger.debug["InitInterpolationKernels"]<<"Make Mu1 grid for obsbin="<<i<<endl; + fKernMu1[i] = MakeInterpolationKernels(fScenConsts.Mu1_Kernel,wrmMu1Dn[i],wrmMu1Up[i],fScenConsts.Mu1_DistanceMeasure); + fKernMu1[i]->MakeGrids(nqtot1); + // ------------------------------------------------ + // init scale2-interpolation kernels + // ------------------------------------------------ + int nqtot2 = fScenConsts.Mu2_NNodes; + logger.debug["InitInterpolationKernels"]<<"Make Mu2 grid for obsbin="<<i<<endl; + fKernMu2[i] = MakeInterpolationKernels(fScenConsts.Mu2_Kernel,wrmMu2Dn[i],wrmMu2Up[i],fScenConsts.Mu2_DistanceMeasure); + fKernMu2[i]->MakeGrids(nqtot2); + } else { + for (unsigned int k = 0 ; k<fScaleFac.size() ; k++) { + double muDn = fScaleFac[k]*wrmMu1Dn[i]; + double muUp = fScaleFac[k]*wrmMu1Up[i]; + fKernMuS[i][k] = MakeInterpolationKernels(fScenConsts.Mu1_Kernel,muDn,muUp,fScenConsts.Mu1_DistanceMeasure); + fKernMuS[i][k]->MakeGrids(nqtot1); + } + } + } +} + + + +// ___________________________________________________________________________________________________ +std::vector<double> fastNLOCreate::GetColumnFromTable(const std::vector<std::vector<double> >& table, int iCol) { + //! Get a column from a table + vector<double> ret; + for (unsigned int i = 0 ; i<table.size(); i++) { + if ((int)table[i].size() <= iCol) { + logger.error["GetColumnFromTable"]<< "Table does not have enough columns in row "<<i<<". Exiting."<<endl; + logger.error["GetColumnFromTable"]<< "E.g., flexible-scale tables need more columns in warmup table than fixed-scale tables."<<endl; + logger.error["GetColumnFromTable"]<< "Please check your warmup file."<<endl; + exit(1); + } + ret.push_back(table[i][iCol]); + } + return ret; +} + + +// ___________________________________________________________________________________________________ +fastNLOInterpolBase* fastNLOCreate::MakeInterpolationKernels(string KernelName, double xdn, double xup, const std::string& distancemeasure) { + //! This function identifies the string-identifier + //! and creates the corresponding fastNLO Interpolation kernel + + fastNLOGrid::GridType type = fastNLOInterpolBase::TranslateGridType(distancemeasure); + + if (KernelName == "CatmullRom" || KernelName == "Catmull") + return new fastNLOInterpolCatmullRom(xdn,xup,type); + else if (KernelName == "Lagrange") + return new fastNLOInterpolLagrange(xdn,xup,type); + else if (KernelName == "Linear") + return new fastNLOInterpolLinear(xdn,xup,type); + else if (KernelName == "OneNode") + return new fastNLOInterpolOneNode(xdn,xup,type); + else { + logger.error["MakeInterpolationKernels"]<<"Cannot find kernel routine:" <<KernelName<<" or kernel not (yet) implemented. Exiting."<<endl; + exit(1); + } +} + + +// ___________________________________________________________________________________________________ +fastNLOInterpolBase* fastNLOCreate::MakeInterpolationKernels(string KernelName, double density, const std::string& distancemeasure) { + //! This function identifies the string-identifier + //! and creates the corresponding fastNLO Interpolation kernel + + fastNLOGrid::GridType type = fastNLOInterpolBase::TranslateGridType(distancemeasure); + + if (KernelName == "CatmullRom" || KernelName == "Catmull") + return new fastNLOInterpolCatmullRom(density,type); + else if (KernelName == "Lagrange") + return new fastNLOInterpolLagrange(density,type); + else if (KernelName == "Linear") + return new fastNLOInterpolLinear(density,type); + else if (KernelName == "OneNode") { + logger.error["MakeInterpolationKernels"]<<"Cannot create a OneNode kernel with a density. Exiting."<<endl; + exit(1); + } else { + logger.error["MakeInterpolationKernels"]<<"Cannot find kernel routine:" <<KernelName<<" or kernel not (yet) implemented. Exiting."<<endl; + exit(1); + } +} + + +// ___________________________________________________________________________________________________ +void fastNLOCreate::SetCacheSize(int MaxCache, int CacheCompare, int CacheType) { + //! Set Cache for filling the weights + //! fCacheType: Type. Allowed values: + //! 0: disable cache + //! 1: a single cache for all weights + //! 2: a cache for each obsbin and proc + //! + //! MaxCache: Maximum number of entries in cache. + //! in case of CacheType==2: maximum number of entries for a single cache element + //! CacheCompare: Number of entries to be compared to the new weight. + //! In case all are (almost) equivalent: the weights are merged prior to filling. + fCacheMax = MaxCache; + fCacheCompare = CacheCompare; + fCacheType = CacheType; + + // Checks + if ( fCacheType == 0 ) { + fCacheMax = 0; + fCacheCompare = 0; + } + if ( fCacheMax <= 0 ) { + if ( fCacheType != 0 ) { + logger.warn["SetCacheSize"]<<"Warning. fCacheMax <= 0: " << fCacheMax << ". Cache deactivated!"<<endl; + } + fCacheMax = 0; + fCacheCompare = 0; + fCacheType = 0; + } + if ( fCacheCompare > fCacheMax ) { + logger.warn["SetCacheSize"]<<"Warning. fCacheCompare = " << fCacheCompare << " is larger than fCacheMax = " << fCacheMax << ". Reduced to fCacheMax!" << endl; + fCacheCompare = fCacheMax; + } + + // some messages + if ( fCacheType == 0 ) { + logger.info["SetCacheSize"]<<"Deactivate filling cache."<<endl; + } else { + logger.info["SetCacheSize"]<<"Using cache for fill weights (for flex tables). CacheType = "<<fCacheType<<"\tCacheMax = "<<fCacheMax<<"\tCacheCompare = "<<fCacheCompare<<endl; + } + if ( fCacheMax > 10000 && fCacheType == 2 ) + logger.warn["SetCacheSize"]<<"Cache size can become large (CacheType = "<<fCacheType<<", fCacheMax = "<<fCacheMax<<")"<<endl; + if ( fCacheCompare > 200 ) + logger.warn["SetCacheSize"]<<"Cache comparison value is pretty large: fCacheCompare = "<<fCacheCompare<<". This may slow down the execution."<<endl; +} + + +// ___________________________________________________________________________________________________ +fastNLOReader* fastNLOCreate::SetIsReferenceTable(fastNLOReader* fnloread) { + //! set this table/contribution to become a reference contribution + //! If fnloread is set to NULL, the weights are assumed to be already + //! multiplied by PDF and alpha_s values. + //! If fnloread is provided, then it is assumed that the weights have + //! the same units and format as for the filling of default tables and + //! those need to be multiplied by PDF and alpha_s values. + //! + //! Function returns the input pointer without changes. + //! + GetTheCoeffTable()->SetIRef(); + fReader = fnloread; + + // --- set 'fReader' if needed + // if ( fReader ) { // todo, do we need to call something here? + // fReader->InitPDF();// + // } + + // --- adjust the Coeff-table + fScenConsts.X_NNodes = 1 -1; // because we are using +1 later + //fScenConsts.X_NoOfNodesPerMagnitude = false; + fScenConsts.X_NNodeCounting = "NodesPerBin"; + fScenConsts.Mu1_NNodes = 1; + fScenConsts.Mu1_NNodeCounting = "NodesPerBin"; + fScenConsts.Mu2_NNodes = 1; + fScenConsts.Mu2_NNodeCounting = "NodesPerBin"; + fScenConsts.X_Kernel = "OneNode"; + fScenConsts.Mu1_Kernel = "OneNode"; + fScenConsts.Mu2_Kernel = "OneNode"; + InitInterpolationKernels(); // resize all members + + // return the reader + return fReader; +} + + + +// ___________________________________________________________________________________________________ +bool fastNLOCreate::TestParameterInSteering(const string& key) const { + //! Get flag if parameter exists in steering card + return read_steer::getexist(key, fSteerfile); +} + + +// ___________________________________________________________________________________________________ +bool fastNLOCreate::GetParameterFromSteering(const string& key, bool& val) const { + //! Get boolean value from steering with key 'key'. + //! Alternatively, also BOOL_NS(`key`) could be used if read_steer.h is included + //! + //! Since a string (or a hash-map-access) has to be performed + //! during access of the steering keys, one should not + //! call this function too frequently. + //! + //! Use for istance: + //! static bool IsCMS; + //! static bool gotval = GetParameterFromSteering("MjjCut",IsCMS); + //! if (!gotval) cout<<"Error! Could not find boolean parameter MjjCut in steering file."<<endl; + //! + //! Function returns 'false' if key was not found in steering file + + bool exist = read_steer::getexist(key,fSteerfile); + if (exist) + val = read_steer::getbool(key,fSteerfile); + return exist; +} + + +// ___________________________________________________________________________________________________ +bool fastNLOCreate::GetParameterFromSteering(const string& key, int& val) const { + //! Get integer value from steering with key 'key'. + //! Alternatively, also INT_NS(`key`) could be used if read_steer.h is included + //! + //! Since a string (or a hash-map-access) has to be performed + //! during access of the steering keys, you should not + //! call this function too frequently. + //! + //! Use for istance: + //! static int nJetMin; + //! static bool gotval = GetParameterFromSteering("nJetMin",nJetMin); + //! if (!gotval) cout<<"Error! Could not find integer parameter nJetMin in steering file."<<endl; + //! + //! Function returns 'false' if key was not found in steering file + + bool exist = read_steer::getexist(key,fSteerfile); + if (exist) + val = read_steer::getint(key,fSteerfile); + return exist; +} + + +// ___________________________________________________________________________________________________ +bool fastNLOCreate::GetParameterFromSteering(const string& key, double& val) const { + //! Get boolean value from steering with key 'key'. + //! Alternatively, also DOUBLE_NS(`key`) could be used if read_steer.h is included + //! + //! Since a string (or a hash-map-access) has to be performed + //! during access of the steering keys, you should not + //! call this function too frequently. + //! + //! Use for istance: + //! static double MjjCut; + //! static bool gotval = GetParameterFromSteering("MjjCut",MjjCut); + //! if (!gotval) cout<<"Error! Could not find parameter MjjCut in steering file."<<endl; + //! + //! Function returns 'false' if key was not found in steering file + + bool exist = read_steer::getexist(key,fSteerfile); + if (exist) + val = read_steer::getdouble(key,fSteerfile); + return exist; +} + + +// ___________________________________________________________________________________________________ +bool fastNLOCreate::GetParameterFromSteering(const string& key, string& val) const { + //! Get string value from steering with key 'key'. + //! Alternatively, also STRING_NS(`key`) could be used if read_steer.h is included + //! + //! Since a string (or a hash-map-access) has to be performed + //! during access of the steering keys, you should not + //! call this function too frequently. + //! + //! Use for istance: + //! static string text; + //! static bool gotval = GetParameterFromSteering("MyText",text); + //! if (!gotval) cout<<"Error! Could not find parameter MyText in steering file."<<endl; + //! + //! Function returns 'false' if key was not found in steering file + + bool exist = read_steer::getexist(key,fSteerfile); + if (exist) + val = read_steer::getstring(key,fSteerfile); + return exist; +} + + +// ___________________________________________________________________________________________________ +bool fastNLOCreate::GetParameterFromSteering(const string& key, vector<int>& val) const { + //! Get integer vector from steering with key 'key'. + //! Alternatively, also INT_ARR(`key`) could be used if read_steer.h is included + //! + //! Since a string (or a hash-map-access) has to be performed + //! during access of the steering keys, you should not + //! call this function too frequently. + //! + //! Function returns 'false' if key was not found in steering file + + bool exist = read_steer::getexist(key,fSteerfile); + if (exist) + val = read_steer::getintarray(key,fSteerfile); + return exist; +} + + +// ___________________________________________________________________________________________________ +bool fastNLOCreate::GetParameterFromSteering(const string& key, vector<double>& val) const { + //! Get vector of doubles from steering with key 'key'. + //! Alternatively, also DOUBLE_ARR_NS(`key`) could be used if read_steer.h is included + //! + //! Since a string (or a hash-map-access) has to be performed + //! during access of the steering keys, you should not + //! call this function too frequently. + //! + //! Use for istance: + //! static vector<double> FlexiCuts; + //! static bool gotval = GetParameterFromSteering("FlexiCuts",FlexiCuts); + //! if (!gotval) cout<<"Error! Could not find vector FlexiCuts in steering file."<<endl; + //! + //! Function returns 'false' if key was not found in steering file + + bool exist = read_steer::getexist(key,fSteerfile); + if (exist) + val = read_steer::getdoublearray(key,fSteerfile); + return exist; + +} + + +// ___________________________________________________________________________________________________ +bool fastNLOCreate::GetParameterFromSteering(const string& key, vector<string>& val) const { + //! Get vector of strings from steering with key 'key'. + //! Alternatively, also STRING_ARR_NS(`key`) could be used if read_steer.h is included + //! + //! Since a string (or a hash-map-access) has to be performed + //! during access of the steering keys, you should not + //! call this function too frequently. + //! + //! Use for istance: + //! static string text; + //! static bool gotval = GetParameterFromSteering("MyText",text); + //! if (!gotval) cout<<"Error! Could not find parameter MyText in steering file."<<endl; + //! + //! Function returns 'false' if key was not found in steering file + + bool exist = read_steer::getexist(key,fSteerfile); + if (exist) + val = read_steer::getstringarray(key,fSteerfile); + return exist; +} + + +// ___________________________________________________________________________________________________ +bool fastNLOCreate::GetParameterFromSteering(const string& key, vector<vector<int > >& val) const { + //! Get vector of vectors of ints from steering with key 'key'. + //! Alternatively, also INT_TAB_NS(`key`) could be used if read_steer.h is included + //! + //! Since a string (or a hash-map-access) has to be performed + //! during access of the steering keys, you should not + //! call this function too frequently. + //! + //! Use for istance: + //! static string text; + //! static bool gotval = GetParameterFromSteering("MyText",text); + //! if (!gotval) cout<<"Error! Could not find parameter MyText in steering file."<<endl; + //! + //! Function returns 'false' if key was not found in steering file + + bool exist = read_steer::getexist(key,fSteerfile); + if (exist) + val = read_steer::getinttable(key,fSteerfile); + return exist; +} + + +// ___________________________________________________________________________________________________ +bool fastNLOCreate::GetParameterFromSteering(const string& key, vector<vector<double > >& val) const { + //! Get vector of vector of doubles from steering with key 'key'. + //! Alternatively, also DOUBLE_TAB_NS(`key`) could be used if read_steer.h is included + //! + //! Since a string (or a hash-map-access) has to be performed + //! during access of the steering keys, you should not + //! call this function too frequently. + //! + //! Use for istance: + //! static string text; + //! static bool gotval = GetParameterFromSteering("MyText",text); + //! if (!gotval) cout<<"Error! Could not find parameter MyText in steering file."<<endl; + //! + //! Function returns 'false' if key was not found in steering file + + bool exist = read_steer::getexist(key,fSteerfile); + if (exist) + val = read_steer::getdoubletable(key,fSteerfile); + return exist; +} + +// ___________________________________________________________________________________________________ +bool fastNLOCreate::WarmupNeeded() const { + if (fScenConsts.X_NNodeCounting != "NodeDensity") { + return true; + } + if (fScenConsts.Mu1_NNodeCounting == "NodesPerBin") { + return true; + } + if (fIsFlexibleScale && fScenConsts.Mu2_NNodeCounting == "NodesPerBin") { + return true; + } + return false; +} diff --git a/v2.6/toolkit/fastnlotoolkit/fastNLODiffReader.cc b/v2.6/toolkit/fastnlotoolkit/fastNLODiffReader.cc new file mode 100644 index 0000000000000000000000000000000000000000..209853851e634955c4f813acf9fd68878a786136 --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/fastNLODiffReader.cc @@ -0,0 +1,335 @@ +// Author: Daniel Britzger +// DESY, 02/04/2012 +// Update for toolkit: DB: 12/05/14 + +////////////////////////////////////////////////////////////////////////// +// // +// fastNLODiffReader // +// // +// fastNLODiffReader for the evaluation of fastNLO tables in // +// diffractive DIS. // +// // +////////////////////////////////////////////////////////////////////////// + +#include <cfloat> +#include <cstdio> +#include <cstdlib> +#include <fstream> +#include <iostream> +#include <vector> +#include <cmath> +#include "fastnlotk/fastNLODiffReader.h" + +using namespace std; + +//______________________________________________________________________________ + + +fastNLODiffReader::fastNLODiffReader(string filename) : fastNLOReader(filename) { + fzmin = 0; + fzmax = 1.; + fxpom = 0.01; + fProtonE = 920.; +} + + +//______________________________________________________________________________ + + + +void fastNLODiffReader::SetXPomSlicing(int nSlice, double* xpom, double* dxpom) { + fxPoms.resize(nSlice); + fdxPoms.resize(nSlice); + for (int i = 0 ; i<nSlice ; i++) { + fxPoms[i] = xpom[i]; + fdxPoms[i] = dxpom[i]; + logger.debug["SetXPomlicing"]<<"[i]="<<i<<"\tfxPomx[i]="<<fxPoms[i]<<"\tfdxPoms[i]="<<fdxPoms[i]<<endl; + } + fPDFCached = 0; // reset cache. +} + + +//______________________________________________________________________________ + + +void fastNLODiffReader::SetXPomLogSlicing(int nStep, double xpommin, double xpommax) { + + if (xpommin < 1.e-4) { + logger.warn["SetXPomLogSlicing"]<<"xpommin should not be too small in order to have sufficent nodes."<<endl; + if (xpommin == 0) { + logger.warn["SetXPomLogSlicing"]<<"xpommin should espc. not be '0'!"<<endl; + exit(1); + } + } + + // new array + double *binning = new double[nStep+1]; + double *dxpom = new double[nStep+1]; + double *xpom = new double[nStep+1]; + + double delta_x_log = (log10(xpommax)-log10(xpommin))/nStep; + + binning[0]=xpommin; + // put equidistant binwith on a logarithmic scale + for (int i=1; i<=nStep; ++i) { + binning[i] = pow(10.,(log10(binning[i-1])+ delta_x_log)); + dxpom[i-1] = binning[i] - binning[i-1]; + xpom[i-1] = pow(10.,((log10(binning[i-1])+log10(binning[i]))/2.)); + } + SetXPomSlicing(nStep, xpom, dxpom); +} + +//______________________________________________________________________________ + + +void fastNLODiffReader::SetXPomExpSlicing(int nStep, double xpommin, double xpommax) { + + // new array + double *binning = new double[nStep+1]; + double *dxpom = new double[nStep+1]; + double *xpom = new double[nStep+1]; + + double delta_x_log = (exp(xpommax)-exp(xpommin))/nStep; + + binning[0]=xpommin; + // put equidistant binwith on a logarithmic scale + for (int i=1; i<=nStep; ++i) { + binning[i] = log(exp(binning[i-1])+ delta_x_log); + dxpom[i-1] = binning[i] - binning[i-1]; + xpom[i-1] = log((exp(binning[i-1])+exp(binning[i]))/2.); + logger.debug["SetXPomExpSlicing"]<< "binning[i] = "<<binning[i]<<"\tdxpom = "<<dxpom[i-1] << "\txpom = " << xpom[i-1] << endl; + } + + SetXPomSlicing(nStep, xpom, dxpom); +} + +//______________________________________________________________________________ + + +void fastNLODiffReader::SetXPomLinSlicing(int nStep, double xpommin, double xpommax) { + // new array + double *binning = new double[nStep+1]; + double *dxpom = new double[nStep+1]; + double *xpom = new double[nStep+1]; + double delta_x_log = (xpommax-xpommin)/nStep; + binning[0]=xpommin; + // put equidistant binwith on a linear scale + for (int i=1; i<=nStep; ++i) { + binning[i] = binning[i-1]+ delta_x_log; + dxpom[i-1] = binning[i] - binning[i-1]; + xpom[i-1] = (binning[i-1]+binning[i])/2.; + } + SetXPomSlicing(nStep, xpom, dxpom); +} + +//______________________________________________________________________________ +void fastNLODiffReader::FillPDFCache(bool ReCalcCrossSection) { + logger.error["FillPDFCache"]<<"PDF Cache cannot be filled in diffractive version, since xpom integration has still to be performed"<<endl; + logger.error>>" Please access directly fastNLODiffReader::GetDiffCrossSection()"<<endl; + exit(1); +} + +//______________________________________________________________________________ +void fastNLODiffReader::CalcCrossSection() { + logger.error["CalcCrossSection"]<<"This method is not valid for diffractive tables."<<endl; + logger.error>>" Please access directly fastNLODiffReader::GetDiffCrossSection()\n"; + exit(1); +} + +//______________________________________________________________________________ + +vector<double> fastNLODiffReader::GetReferenceCrossSection() { + logger.error["GetReferenceCrossSection"]<<"No reference cross sections in diffractive version"<<endl; + return vector<double>(); +} + +//______________________________________________________________________________ + +void fastNLODiffReader::PrintCrossSectionsWithReference() { + logger.error["PrintCrossSectionsWithReference"]<<"No reference cross sections in diffractive version"<<endl; + return; +} + +//______________________________________________________________________________ + +vector < double > fastNLODiffReader::GetCrossSection() { + return GetDiffCrossSection(); +} + +vector < double > fastNLODiffReader::GetDiffCrossSection() { + // Get fast calculated NLO cross section + + // check cached values: + const double asNew = CalcReferenceAlphas(); + bool IsAsCached = fAlphasCached == CalcReferenceAlphas(); + bool IsPDFCached = fPDFCached == CalcNewPDFChecksum(); + if ( IsAsCached && IsPDFCached ) { + logger.debug["GetDiffCrossSection"]<<"No need for re-calculation of cross section. All values cached. asNew = "<<asNew<<endl; + return XSection; + } + + vector < double > xs(NObsBin); + vector < double > xsLO(NObsBin); + XSection_LO.resize(NObsBin); + if (fxPoms.empty()) { + logger.error["GetDiffCrossSection"]<<"No xpom slicing given."<<endl; + return xs; + } + + double interv = 0; + // do the xpom integration + logger.info["GetDiffCrossSection"]<<"Integrating xpom in "<<fxPoms.size()<<" slices. ["; + fflush(stdout); + + fXSection_vs_xIPzIP.clear(); + fXSection_vs_xIPzIP.resize(NObsBin); + if ( fPrintxIPzIP ) { + logger.info>>"]"<<endl; + printf("%8s%14s%14s%14s\n","ObsBin","xIP","zIP","cs"); + } + for (unsigned int ixp = 0 ; ixp<fxPoms.size() ; ixp++) { + fxpom = fxPoms[ixp]; + // always recalculate cross section + fastNLOReader::CalcCrossSection(); // this calls GetXFX() very very often! + + for (unsigned int i = 0 ; i<NObsBin ; i++) { + if (i==0) logger.debug["GetDiffCrossSection"]<<"i="<<i<<"\tixp="<<ixp<<"\tfxpom="<<fxpom<<"\tXSection[i]="<<XSection[i]<<"\tfdxPoms[ixp]="<<fdxPoms[ixp]<<endl; + xs[i] += XSection[i] * fdxPoms[ixp] ; + xsLO[i] += XSection_LO[i] * fdxPoms[ixp] ; + + //vector<map<double,double> > fXSection_vsX1; + //std::vector < std::map< std::pair<double, double>, double > > fXSection_vs_xIPzIP; + if ( fPrintxIPzIP ) { + for ( auto xc : fXSection_vsX1[i] ) { + printf("%8d%14.6f%14.6f%14.6f\n",i,fxpom,xc.first,xc.second*fdxPoms[ixp]); + fXSection_vs_xIPzIP[i][make_pair(fxpom,xc.first)] = xc.second*fdxPoms[ixp]; + //cout<<i<<"\t"<<fxpom<<"\t"<<xc.first<<"\t"<<xc.second*fdxPoms[ixp]<<endl;; + } + } + // for ( auto xc : fXSection_vsX1[i] ) { + // fXSection_vs_xIPzIP[i][make_pair(xc.first,fxpom)] = xc.second*fdxPoms[ixp]; + // } + // for ( auto d : fXSection_vsX1[0] ) cout<<" | "<<d.first<<", "<<d.second; + // cout<<endl; + } + + // radek + for(unsigned i = 0; i < NObsBin; ++i) { + //cout << "The basic cross section in bin "<<i <<" : " << XSection[i] << endl; + double sumMy=0; + for(auto &x : fXSection_vsQ2[i]) { + sumMy += x.second; + x.second *= fdxPoms[ixp]; + } + } + xsQ2[fxpom] = fXSection_vsQ2; + + if ( !fPrintxIPzIP ) logger.info>>"."; + fflush(stdout); + interv+=fdxPoms[ixp]; + } + logger.info>>"]"<<endl; + logger.info["GetDiffCrossSection"]<< "Integrated interval in xpom: " << interv << endl; + + // set this cross section also to FastNLO mother class + XSection = xs; + XSection_LO = xsLO; + + // DEPRECATED + // // k-factors + // fastNLOReader::kFactor.resize(NObsBin); + // for (unsigned int i = 0 ; i<NObsBin ; i++) { + // fastNLOReader::kFactor[i] = fastNLOReader::XSection[i] / fastNLOReader::XSection_LO[i]; + // } + + return xs; +} + + +//______________________________________________________________________________ + +vector<double> fastNLODiffReader::GetXFX(double xp, double muf) const { + // + // GetXFX is used to get the parton array from the + // pdf-interface. It should return a vector of 13 + // parton flavors from tbar to t at a certain + // x-proton and factorisation scale. + // + + // get pdf + double zpom = xp/(fxpom * fProtonE/920. ); + //double zpom = xp/fxpom; + vector < double > a(13); + if (zpom > fzmin && zpom < fzmax) { + // find x-node index + int nx = -1; + int nb = -1; + for (int ib = 0 ; nb == -1 && ib<B_LO()->GetNObsBin() ; ib++) { + if (B_NLO() && (B_LO()->GetNxmax(ib) != B_NLO()->GetNxmax(ib))) + logger.error["fastNLODiffReader::GetXFX"]<<"LO and NLO tables must have same number of x-bins."<<endl; + for (int ix = 0 ; nx == -1 && ix<B_LO()->GetNxtot1(ib); ix++) { + if (B_NLO() && (B_LO()->GetXNode1(ib,ix) != B_NLO()->GetXNode1(ib,ix))) + logger.error["fastNLODiffReader::GetXFX"]<<"LO and NLO tables must have idnetical x-bins."<<endl; + if ( xp == B_LO()->GetXNode1(ib,ix) ) { + nx = ix; + nb = ib; + } + } + } + + // check if this is the 'last' or 'first' xnode + bool IsLastX = nx == (int)B_LO()->GetNxtot1(nx)-1 ; + bool IsFirstX = nx == 0 ; + + if (nx == -1 || nb == -1) { + //printf("Warning. Could not find x-node index for xp = %12.8e.\n",xp); + for (int ib = 0 ; nb == -1 && ib<(int)B_LO()->GetNObsBin() ; ib++) { + for (int ix = 0 ; nx == -1 && ix<(int)B_LO()->GetNxtot1(ib); ix++) { + if (xp == B_LO()->GetXNode1(ib,ix)) { + nx = ix; + nb = ib; + } + if (fabs(1. - xp / B_LO()->GetXNode1(ib,ix)) < 1.e-6) { + logger.warn["fastNLODiffReader::GetXFX"]<<"Could not find x-node index for xp = "<<xp<<endl; + logger.warn>>" but a quite close one: xp = "<<xp<<", xnode = "<<B_LO()->GetXNode1(ib,ix)<<endl; + } + } + } + //exit(1); + IsLastX = true; + IsFirstX = true; + } + + a = GetDiffXFX(fxpom, zpom, muf); + + // calc reweight at integration edges + if (!IsLastX && !IsFirstX) { + const double x2 = B_LO()->GetXNode1(nb,nx+1) ;// next node + const double x1 = B_LO()->GetXNode1(nb,nx-1) ;// prev. node + const double zpom2 = x2/fxpom; + const double zpom1 = x1/fxpom; + double xSpan = 1.; + // wenn jetzt der naechste bin nicht mehr in fzmax ist, dann wird gewichtet + if (zpom2 > fzmax && zpom < fzmax) { + double xmax = fzmax*fxpom; + double ldelx = log10(xmax) - log10(xp); + double ldelx0 = log10(x2) - log10(xp); + xSpan *= ldelx/ldelx0 + 0.5 ; + } + if (zpom1 < fzmin && zpom > fzmin) { + double xmin = fzmin*fxpom; + double ldelx = log10(xp) - log10(xmin); + double ldelx0 = log10(xp) - log10(x1); + xSpan *= ldelx/ldelx0 + 0.5 ; + } + if (xSpan != 1.) { + for (unsigned int i = 0 ; i<a.size() ; i++) a[i]*=xSpan; + } + } + } + + return a; +} + + +//______________________________________________________________________________ diff --git a/v2.6/toolkit/fastnlotoolkit/fastNLODiffUser.cc b/v2.6/toolkit/fastnlotoolkit/fastNLODiffUser.cc new file mode 100644 index 0000000000000000000000000000000000000000..9083037e9259359fa00ffe7a722fad5bed28ab1f --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/fastNLODiffUser.cc @@ -0,0 +1,79 @@ +// Author: Daniel Britzger +// DESY, 08/08/2012 + + +////////////////////////////////////////////////////////////////////////// +// // +// fastNLODiffUSER // +// // +// fastNLODiffReader is a standalone code for reading // +// diffractive fastNLO tables of version 2.0 for DIS processes // +// // +// This is a dummy class and not working!!! // +// // +// Please insert your desired code into the functions // +// - EvolveAlphas() // +// - InitPDF() // +// - GetDiffXFX() // +// // +// Within most applications it is necessary to define the functions // +// within a .cc-file explicitly. // +// // +////////////////////////////////////////////////////////////////////////// + + +#include <string> +#include <cstdio> +#include <vector> +#include "fastnlotk/fastNLODiffUser.h" + + +fastNLODiffUser::fastNLODiffUser(std::string filename) : fastNLODiffReader(filename) { +} + + +//______________________________________________________________________________ + + +double fastNLODiffUser::EvolveAlphas(double Q) const { + // --- fastNLO user: + // Implementation of Alpha_s evolution as function of the + // factorization scale [and alphas(Mz)]. + // + return 0; +} + + +//______________________________________________________________________________ + + +bool fastNLODiffUser::InitPDF() { + // --- fastNLO user: + // Initalize PDF parameters if necessary + // + return true; +} + + +//______________________________________________________________________________ + + + +std::vector<double> fastNLODiffUser::GetDiffXFX(double xpom, double zpom, double muf) const { + // + // GetDiffXFX is used to get the parton array from the + // pdf-interface. It should return a vector of 13 + // parton flavors from tbar to t at a certain + // xpom, zpom and factorisation scale. + // + std::vector < double > xfx(13); + // fastNLO user: + // include some function here to fill the parton density array + // xfx[0]=tbar, xfx[6]=gluon, xfx[12]=t + //debug<<"xpom="<<xpom<<"\tzpom="<<zpom<<"\tmuf="<<muf<<"\tgluon = "<<xfx[6]<<endl; + return xfx; +} + + +//______________________________________________________________________________ + diff --git a/v2.6/toolkit/fastnlotoolkit/fastNLOHoppet.cc b/v2.6/toolkit/fastnlotoolkit/fastNLOHoppet.cc new file mode 100644 index 0000000000000000000000000000000000000000..a76f88c4299471930d58b62c48d70ecc01e97fff --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/fastNLOHoppet.cc @@ -0,0 +1,205 @@ +// Author: Daniel Britzger +// DESY, 20/04/2012 + +////////////////////////////////////////////////////////////////////////// +// // +// fastNLO_reader_2.1.0 // +// D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch // +// // +// The projects web page can be found at: // +// http://projects.hepforge.org/fastnlo // +// // +// If you use this code, please cite: // +// T. Kluge, K. Rabbertz and M. Wobisch, hep-ph/0609285 // +// D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, // +// arXiv:1109.1310 // +// // +////////////////////////////////////////////////////////////////////////// + +////////////////////////////////////////////////////////////////////////// +// +// fastNLOAlphas +// This class inherits the PDF interface from +// fastNLOLHAPDF, while the alpha_s evolution +// is superseeded by the Alphas.h class. +// +////////////////////////////////////////////////////////////////////////// + +#include <iostream> +#include <cstdio> +#include <cstdlib> +#include <LHAPDF/LHAPDF.h> +#include "fastnlotk/fastNLOLHAPDF.h" +#include "fastnlotk/fastNLOHoppet.h" +#include "fastnlotk/HoppetInterface.h" +//#include "fastnlotk/speaker.h" + +using namespace std; + + + +//______________________________________________________________________________ +// +fastNLOHoppet::fastNLOHoppet(std::string name, std::string LHAPDFFile, int PDFMem) : fastNLOLHAPDF(name, LHAPDFFile, PDFMem) { + // Without PDF info use PDG values as default + // SetPDGValues(); + // PrintParmValues(); + // Set initial values via LHAPDF6 info system + SetLHAPDFValues(LHAPDFFile, PDFMem); + // Print out values for checking + // PrintParmValues(); + fastNLOHoppet::InitPDF(); +}; + + + +// Getters +double fastNLOHoppet::GetQMass(int pdgid) const { + if (pdgid < 1 || pdgid > 6 ) { + logger.error["fastNLOHoppet::GetQMass"]<<"PDG code out of quark index range 1-6! Aborted.\n"; + exit(1); + } + return HoppetInterface::QMass[pdgid]; +} +double fastNLOHoppet::GetMz() const { + return HoppetInterface::fMz; +} +std::string fastNLOHoppet::GetNScheme() const { + return HoppetInterface::fnScheme; +} +int fastNLOHoppet::GetNFlavor() const { + return HoppetInterface::fnFlavor; +} +int fastNLOHoppet::GetNLoop() const { + return HoppetInterface::fnLoop; +} +double fastNLOHoppet::GetAlphasMz() const { + return HoppetInterface::fAlphasMz; +}; + + + +// Setters +void fastNLOHoppet::SetQMass(int pdgid, double qmass) { + HoppetInterface::QMass[pdgid] = qmass; + HoppetInterface::InitHoppet(*this); +} +void fastNLOHoppet::SetMz(double Mz) { + HoppetInterface::fMz = Mz; + HoppetInterface::InitHoppet(*this); +} +void fastNLOHoppet::SetNFlavor(int nflavor) { + HoppetInterface::fnFlavor = nflavor; + HoppetInterface::InitHoppet(*this); +} +void fastNLOHoppet::SetNLoop(int nloop) { + if ( nloop < 1 || nloop > 3 ) { + logger.error["fastNLOHoppet::SetNLoop"] << "Illegal no. of loops nloop = " << nloop << + ", aborted! Only 1, 2, or 3 are allowed with HOPPET." << endl; + exit(11); + } + HoppetInterface::fnLoop = nloop; + HoppetInterface::InitHoppet(*this); +} +void fastNLOHoppet::SetAlphasMz(double AlphasMz) { + HoppetInterface::fAlphasMz = AlphasMz; + HoppetInterface::InitHoppet(*this); +} + + + +// Combined Setters +void fastNLOHoppet::SetPDGValues() { + // Initialize with PDG values + HoppetInterface::QMass[0] = PDG_MD; + HoppetInterface::QMass[1] = PDG_MU; + HoppetInterface::QMass[2] = PDG_MS; + HoppetInterface::QMass[3] = PDG_MC; + HoppetInterface::QMass[4] = PDG_MB; + HoppetInterface::QMass[5] = PDG_MT; + HoppetInterface::fMz = PDG_MZ; + // Variable flavor number scheme + HoppetInterface::fnFlavor = 0; + // 2-loop alpha_s evolution + HoppetInterface::fnLoop = 2; + HoppetInterface::fAlphasMz = PDG_ASMZ; + HoppetInterface::InitHoppet(*this); +} + +void fastNLOHoppet::SetLHAPDFValues(std::string LHAPDFFile, int PDFMem) { + // AlphaS_MZ can vary among PDF members, so we really need the PDF member info from LHAPDF + const LHAPDF::PDFInfo PDFMemInfo(LHAPDFFile, PDFMem); + HoppetInterface::QMass[0] = PDFMemInfo.get_entry_as<double>("MDown"); + HoppetInterface::QMass[1] = PDFMemInfo.get_entry_as<double>("MUp"); + HoppetInterface::QMass[2] = PDFMemInfo.get_entry_as<double>("MStrange"); + HoppetInterface::QMass[3] = PDFMemInfo.get_entry_as<double>("MCharm"); + HoppetInterface::QMass[4] = PDFMemInfo.get_entry_as<double>("MBottom"); + HoppetInterface::QMass[5] = PDFMemInfo.get_entry_as<double>("MTop"); + HoppetInterface::fMz = PDFMemInfo.get_entry_as<double>("MZ"); + HoppetInterface::fnScheme = PDFMemInfo.get_entry_as<std::string>("FlavorScheme"); + if ( PDFMemInfo.has_key("AlphaS_NumFlavors") ) { + HoppetInterface::fnFlavor = PDFMemInfo.get_entry_as<int>("AlphaS_NumFlavors"); + } else { + HoppetInterface::fnFlavor = PDFMemInfo.get_entry_as<int>("NumFlavors"); + } + // Variable flavor numbers are usually set via Nf = 0 in evolution code. + // Ensure that fnFlavor is maximum Nf for variable flavor number scheme by + // setting quark masses to 10^10. + if ( HoppetInterface::fnFlavor != 0 && HoppetInterface::fnFlavor < 3 ) { + logger.error["fastNLOHoppet::SetLHAPDFValues"] << "Less than 3 flavors is not supported! Aborted." << endl; + exit(11); + } + if ( HoppetInterface::fnScheme == "variable" && HoppetInterface::fnFlavor < 6 ) { + HoppetInterface::QMass[5] = 1.E10; + if ( HoppetInterface::fnFlavor < 5 ) HoppetInterface::QMass[4] = 1.E10; + if ( HoppetInterface::fnFlavor < 4 ) HoppetInterface::QMass[3] = 1.E10; + HoppetInterface::fnFlavor = 0; + } + if ( PDFMemInfo.has_key("AlphaS_OrderQCD") ) { + HoppetInterface::fnLoop = PDFMemInfo.get_entry_as<int>("AlphaS_OrderQCD") + 1; + } else { + HoppetInterface::fnLoop = PDFMemInfo.get_entry_as<int>("OrderQCD") + 1; + } + if ( HoppetInterface::fnLoop > 3 ) { + logger.error["fastNLOHoppet::SetLHAPDFValues"] << "More than 3 loops is not supported! Aborted." << endl; + exit(11); + } + HoppetInterface::fAlphasMz = PDFMemInfo.get_entry_as<double>("AlphaS_MZ"); + HoppetInterface::InitHoppet(*this); +} + + + +// Printers +void fastNLOHoppet::PrintParmValues() { + for ( int i = 0; i<6; i++ ) { + cout << "fQMass[" << i << "] = " << HoppetInterface::QMass[i] << endl; + } + cout << "fMz = " << HoppetInterface::fMz << endl; + cout << "fnScheme = " << HoppetInterface::fnScheme << endl; + cout << "fnFlavor = " << HoppetInterface::fnFlavor << endl; + cout << "fnLoop = " << HoppetInterface::fnLoop << endl; + cout << "fAlphasMz = " << HoppetInterface::fAlphasMz << endl; +} + + + +// Initialisation +bool fastNLOHoppet::InitPDF() { + bool init = fastNLOLHAPDF::InitPDF(); + HoppetInterface::InitHoppet(*this); + return init; +} + +// Evolution +double fastNLOHoppet::EvolveAlphas(double Q ) const { + return HoppetInterface::EvolveAlphas(Q); +} + +std::vector<double> fastNLOHoppet::GetXFX(double xp, double muf) const { + // + // GetXFX is used to get the parton array from the + // pre-defined pdf-interface. + // + return HoppetInterface::GetXFX(xp, muf); +} diff --git a/v2.6/toolkit/fastnlotoolkit/fastNLOHoppetAs.cc b/v2.6/toolkit/fastnlotoolkit/fastNLOHoppetAs.cc new file mode 100644 index 0000000000000000000000000000000000000000..84e67a09363891a8326d4b15d214f37af94ded0c --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/fastNLOHoppetAs.cc @@ -0,0 +1,61 @@ +// Author: Daniel Britzger +// DESY, 20/04/2012 + +////////////////////////////////////////////////////////////////////////// +// // +// fastNLO_toolkit // +// D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch // +// // +// The projects web page can be found at: // +// http://projects.hepforge.org/fastnlo // +// // +// If you use this code, please cite: // +// T. Kluge, K. Rabbertz and M. Wobisch, hep-ph/0609285 // +// D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, // +// arXiv:1109.1310 // +// // +////////////////////////////////////////////////////////////////////////// + +////////////////////////////////////////////////////////////////////////// +// +// fastNLOAlphas +// This class inherits the PDF interface from +// fastNLOLHAPDF, while the alpha_s evolution +// is superseeded by the Alphas.h class. +// +////////////////////////////////////////////////////////////////////////// + +#include <iostream> +#include <cstdio> +#include <cstdlib> +#include <LHAPDF/LHAPDF.h> +#include "fastnlotk/fastNLOLHAPDF.h" +#include "fastnlotk/fastNLOHoppetAs.h" +#include "hoppet_v1.h" + +using namespace std; + + + +//______________________________________________________________________________ +// +fastNLOHoppetAs::fastNLOHoppetAs(std::string name, std::string LHAPDFFile, int PDFMem) : fastNLOHoppet(name,LHAPDFFile,PDFMem) { + // Without PDF info use PDG values as default + // SetPDGValues(); + // PrintParmValues(); + // Set initial values via LHAPDF6 info system + SetLHAPDFValues(LHAPDFFile, PDFMem); + // Print out values for checking + // PrintParmValues(); + fastNLOHoppet::InitPDF(); +}; + + + +// Evolution +std::vector<double> fastNLOHoppetAs::GetXFX(double xp, double muf) const { + // + // GetXFX is used to get the parton array from the pre-defined pdf-interface. + // + return fastNLOLHAPDF::GetXFX(xp, muf); +} diff --git a/v2.6/toolkit/fastnlotoolkit/fastNLOInterpolBase.cc b/v2.6/toolkit/fastnlotoolkit/fastNLOInterpolBase.cc new file mode 100644 index 0000000000000000000000000000000000000000..618d9d8e7715c94754f9e1a628977e5dafc3ff7c --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/fastNLOInterpolBase.cc @@ -0,0 +1,524 @@ +// Author: Daniel Britzger +// DESY, 27/06/2013 + +#include <cfloat> +#include <cmath> +#include <cstdlib> +#include <fstream> +#include <iostream> +#include <vector> +#include "fastnlotk/fastNLOInterpolBase.h" + +using namespace std; + +//______________________________________________________________________________ + + +fastNLOInterpolBase::fastNLOInterpolBase(double min, double max, fastNLOGrid::GridType type, int nMinNodes = -1) : + PrimalScream("fastNLOInterpol"),fNMinNodes(nMinNodes), fvalmin(min), fvalmax(max) { + debug["fastNLOInterpolBase"]<<"New fastNLOInterpolBase instance."<<endl; + fLastGridPointWasRemoved=false; + debug["fastNLOInterpolBase"]<<"Distance measure = "<<type<<endl; + fdm = type; +} + + +//______________________________________________________________________________ +fastNLOInterpolBase::fastNLOInterpolBase(double density, fastNLOGrid::GridType type, int nMinNodes) : + PrimalScream("fastNLOInterpol"),fNMinNodes(nMinNodes) { + debug["fastNLOInterpolBase"]<<"New fastNLOInterpolBase instance (density contructor)."<<endl; + fLastGridPointWasRemoved=false; + debug["fastNLOInterpolBase"]<<"Distance measure = "<<type<<endl; + debug["fastNLOInterpolBase"]<<"nMinNodes = "<<nMinNodes<<endl; + fdm = type; + fExtendLow = true; + + fvalmax = 1.0; + double valMaxH; + const double valMinOffsetH = -(nMinNodes - 1) / density; + switch (fdm) { + case fastNLOGrid::kLinear: + fvalmin = fvalmax - valMinOffsetH; + break; + case fastNLOGrid::kLogLog025: + valMaxH = Function_loglog025(fvalmax); + fvalmin = Function_loglog025_inv(valMaxH + valMinOffsetH); + break; + case fastNLOGrid::kLog10: + valMaxH = Function_log10(fvalmax); + fvalmin = Function_log10_inv(valMaxH + valMinOffsetH); + break; + case fastNLOGrid::kSqrtLog10: + valMaxH = Function_sqrtlog10(fvalmax); + fvalmin = Function_sqrtlog10_inv(valMaxH + valMinOffsetH); + break; + case fastNLOGrid::kLogLog: + valMaxH = Function_loglog(fvalmax); + fvalmin = Function_loglog_inv(valMaxH + valMinOffsetH); + break; + case fastNLOGrid::k3rdrtLog10: + valMaxH = Function_3rdrtlog10(fvalmax); + fvalmin = Function_3rdrtlog10_inv(valMaxH + valMinOffsetH); + break; + case fastNLOGrid::k4thrtLog10: + valMaxH = Function_4thrtlog10(fvalmax); + fvalmin = Function_4thrtlog10_inv(valMaxH + valMinOffsetH); + break; + default: + error["MakeGridFromHGrid"]<<"Unknown grid type."<<endl; + } +} + + +//______________________________________________________________________________ + + +fastNLOInterpolBase::~fastNLOInterpolBase(void) { +} + + +//______________________________________________________________________________ +fastNLOGrid::GridType fastNLOInterpolBase::TranslateGridType(string in){ + if ( in == "linear" ) return fastNLOGrid::kLinear; + else if ( in == "loglog025" ) return fastNLOGrid::kLogLog025; + else if ( in == "log10" ) return fastNLOGrid::kLog10; + else if ( in == "sqrtlog10" ) return fastNLOGrid::kSqrtLog10; + else if ( in == "loglog" ) return fastNLOGrid::kLogLog; + else if ( in == "3rdrtlog10" ) return fastNLOGrid::k3rdrtLog10; + else if ( in == "4thrtlog10" ) return fastNLOGrid::k4thrtLog10; + else { + cout<<"fastNLOInterpolBase::TranslateGridType: Error! Cannot identify distance measure. in="<<in<<endl; + exit(1); + } +} + + +//______________________________________________________________________________ + + +const vector<pair<int,double> >& fastNLOInterpolBase::GetNodeValues(double x){ + //if ( fHgrid.empty() ) warn["GetNodeValues"]<<"There is no grid."<<endl; + if ( x==fLastVal[0] ) return fNodes; // nothing todo. I know the nodes already. + CheckX(x); + //bool InRange = CheckX(x); + //if ( !InRange ) { // standard return, if there is no + //fRetNodes = vector<pair<int,double> > () + //return fRetNodes; + //} + CalcNodeValues(fNodes,x); + fLastVal[0] = x; + return fNodes; +} + +//______________________________________________________________________________ + + +void fastNLOInterpolBase::RemoveLastNode(){ + debug["RemoveLastNode"]<<"Removing last node with highest value, but keep maximum value at fvalmax="<<fvalmax<<endl; + fgrid.resize(fgrid.size()-1); + fHgrid.resize(fHgrid.size()-1); + fLastGridPointWasRemoved = true; + debug["RemoveLastNode"]<<"last bin removed successful."<<endl; +} + +//______________________________________________________________________________ + + +void fastNLOInterpolBase::MakeGridsWithNNodesPerMagnitude(int nNodesPerMag,double ReduceXmin){ + if ( fvalmin >= fvalmax ){ + warn["MakeGridsWithNNodesPerMagnitude"]<<"Minimum grid value is smaller/equal maximum value. min="<<fvalmin<<", max="<<fvalmax<<endl; + } + int nxtot = (int)(fabs(log10(fvalmax)-log10(fvalmin))*nNodesPerMag); + if ( nxtot < nNodesPerMag ) nxtot = nNodesPerMag; // at least nxPerMagnitude points + debug["MakeGridWithNNodesPerMagnitude"]<<"Create "<<nxtot<<" nodes (valmin="<<fvalmin<<",valmax="<<fvalmax<<")."<<endl; + MakeGrids(nxtot+1,ReduceXmin); // plus 1. We have now a node at 1 +} + +void fastNLOInterpolBase::MakeGrids(int nNodes, double ReduceXmin){ + // Generate the Hgrid first, and then the grid; + // type: Type of distance measure + // nNodes. Number of nodes. nNodes must be >= 1. + // using fvalmin and fvalmin for the grid range + + // check number of nodes + if ( nNodes == -1 ) { + error["MakeGrid"]<<"Minimum number of nodes not initialized. It seems that the (inherited) interpolation routine is missing."<<endl; + exit(1); + } + if ( nNodes < fNMinNodes ) { + error["MakeGrid"]<<"Number of nodes must be larger than "<<fNMinNodes<<" for this interpolation method."<<endl; + exit(1); + } + // else if ( nNodes == fNMinNodes ) { + // info["MakeGrid"]<<"This grid has only the minimum number of required nodes. nNodes="<<nNodes<<endl; + // } + + // check min and max values + if ( fvalmin > fvalmax ){ + error["MakeGrid"]<<"Minimum grid value is smaller/equal maximum value. min="<<fvalmin<<", max="<<fvalmax<<endl; + } + + // make the grids + MakeGrids(fvalmin,fvalmax,nNodes); + + // Reduce X min + // then all is set up, and we can conveniently re-initalise the grids + // if ( ReduceXmin != 0 ) { // ReduceXmin is double quantity + if ( ReduceXmin > DBL_MIN ) { + warn["MakeGrids"]<<"Default x binning is modified by ReduceXmin steering parameter. Identical settings must be used for all grids to be merged!"<<endl; + double Hdelta = (fHgrid[1] - fHgrid[0]) * (nNodes-1.)/(nNodes -1. -ReduceXmin);//(second factor to account for potentially increased number of nodes) + double Hxmin = fHgrid[0] - Hdelta*ReduceXmin; + fvalmin = MakeGridFromHGrid({Hxmin})[0];// new minimum + MakeGrids(fvalmin,fvalmax,nNodes); // make grids again + } + + +} + +int fastNLOInterpolBase::FindLargestPossibleNode(double x, bool canExtend = false){ + // --- find x position in range: 0 <= node1 < nnode1-1 + int node1 = fgrid.size()-2; // --- initialize with largest possible value + if ( fLastGridPointWasRemoved ) node1=fgrid.size()-1; + if (canExtend && fExtendLow) { + bool gridExtended = false; + while ( x < fgrid[1] ) { + const double newxH = fHgrid[0] - (fHgrid[1] - fHgrid[0]); + fHgrid.insert(fHgrid.begin(), newxH); + + switch (fdm) { + case fastNLOGrid::kLinear: + fgrid.insert(fgrid.begin(), newxH); + break; + case fastNLOGrid::kLogLog025: + fgrid.insert(fgrid.begin(), Function_loglog025_inv(newxH)); + break; + case fastNLOGrid::kLog10: + fgrid.insert(fgrid.begin(), Function_log10_inv(newxH)); + break; + case fastNLOGrid::kSqrtLog10: + fgrid.insert(fgrid.begin(), Function_sqrtlog10_inv(newxH)); + break; + case fastNLOGrid::kLogLog: + fgrid.insert(fgrid.begin(), Function_loglog_inv(newxH)); + break; + case fastNLOGrid::k3rdrtLog10: + fgrid.insert(fgrid.begin(), Function_3rdrtlog10_inv(newxH)); + break; + case fastNLOGrid::k4thrtLog10: + fgrid.insert(fgrid.begin(), Function_4thrtlog10_inv(newxH)); + break; + default: + error["FindLargestPossibleNode"]<<"Unknown grid type."<<endl; + } + + debug["FindLargestPossibleNode"]<<"Value is smaller than smallest node. Extending grid. x="<<x<<endl; + gridExtended = true; + } + if (gridExtended) { + return 1; + } + } + if ( x==fgrid[0] ) { + return 0; + } else if ( x < fgrid[0] ) { + warn["FindLargestPossibleNode"]<<"Value is smaller than smallest node. Using first node. This may bias the result! x="<<x<<endl; + return 0; + } + if ( x > fgrid.back() ) { + if ( !fLastGridPointWasRemoved ) + warn["FindLargestPossibleNode"]<<"Value is larger than largest node. Using last node. This may bias the result! x="<<x<<endl; + else if ( x > fvalmax) + warn["FindLargestPossibleNode"]<<"Value is larger than largest node and than largest grid value. Using last node. Interpolation kernel may lead unreasonable values! x="<<x<<endl; + return node1; + } + // if ( x > fvalmax ) { + // warn["FindLargestPossibleNode"]<<"Value is larger than maximum grid value. Using maximum grid value. Interpolation kernel may lead unreasonable values! x="<<x<<", valmax="<<fvalmax<<endl; + // return fvalmax; + // } + + //for( unsigned int iNode=1 ; iNode<fgrid.size()-2 ; iNode++ ){ + for( unsigned int iNode=1 ; iNode<fgrid.size() ; iNode++ ){ + if ( x <= fgrid[iNode]) { + return iNode-1; + // node1=iNode-1; + // return node1; //done + } + } + //error["FindLargestPossibleNode"]<<"Could not find largest node. x="<<x<<endl; + return node1; +} + + +vector<double> fastNLOInterpolBase::MakeLinearGrid(double min, double max, int nNodes){ + vector<double> grid(nNodes); + double dist = max-min; + dist /= (nNodes - 1); + for (int i=0 ; i<nNodes; i++ ){ + grid[i] = min+i*dist; + } + return grid; +} + +void fastNLOInterpolBase::MakeGrids(double min, double max, int nNodes){ + // first make fhgrid and then make fgrid + if ( std::isnan(min) || std::isnan(max) || nNodes <= 0 ) { + error["MakeGrids"]<<"Cannot make unreasoanble grid! Requested: nNodes="<<nNodes<<", min="<<min<<", max="<<max<<". Exiting."<<endl; + exit(1); + } + if ( fNMinNodes==1 && nNodes != 1) { + warn["MakeGrids"]<<"Minimum number of nodes is 1. Number of nodes requested is "<<nNodes<<". Expecting, that this is a one-point grid. Therefore using only one node."<<endl; + nNodes=1; + } + vector<double> hgrid(nNodes); + double lo=min, hi=max; + switch (fdm) { + case fastNLOGrid::kLinear: + lo = min; + hi = max; + break; + case fastNLOGrid::kLogLog025: + lo = Function_loglog025(min); + hi = Function_loglog025(max); + break; + case fastNLOGrid::kLog10: + lo = Function_log10(min); + hi = Function_log10(max); + break; + case fastNLOGrid::kSqrtLog10: + lo = Function_sqrtlog10(min); + hi = Function_sqrtlog10(max); + break; + case fastNLOGrid::kLogLog: + lo = Function_loglog(min); + hi = Function_loglog(max); + break; + case fastNLOGrid::k3rdrtLog10: + lo = Function_3rdrtlog10(min); + hi = Function_3rdrtlog10(max); + break; + case fastNLOGrid::k4thrtLog10: + lo = Function_4thrtlog10(min); + hi = Function_4thrtlog10(max); + break; + default: + error["MakeGrid"]<<"Unknown grid type."<<endl; + } + if ( std::isnan(lo) || std::isnan(hi) ) { + error["MakeGrids"]<<"Cannot convert min and max value to 'H'-space. min="<<min<<", H(min)="<<lo<<", max="<<max<<", H(max)="<<hi<<". Exiting."<<endl; + exit(1); + } + double del = hi-lo; + if ( nNodes==1 ) { + hgrid[0] = lo+del/2.; + } + else if ( nNodes > 1 ) { + for(int l=0;l<nNodes;l++){ + hgrid[l] = lo + double(l)/double(nNodes-1)*del; + if ( std::isnan(hgrid[l]) ) { + error["MakeGrids"]<<"Grid point could not be calculated. Hnode="<<hgrid[l]<<endl; + } + } + } + + SetHGrid(hgrid); + + vector<double> g = MakeGridFromHGrid(fHgrid); + SetGrid(g); + //PrintGrid(); +} + +vector<double> fastNLOInterpolBase::MakeGridFromHGrid(vector<double> hg){ + if ( fHgrid.empty() ) { error["MakeGridFromHGrid"]<<"There is no HGrid."<<endl; exit(1);} + vector<double> grid; + switch (fdm) { + case fastNLOGrid::kLinear: + grid = hg; + break; + case fastNLOGrid::kLogLog025: + grid = HGrid_loglog025_inv(hg); + break; + case fastNLOGrid::kLog10: + grid = HGrid_log10_inv(hg); + break; + case fastNLOGrid::kSqrtLog10: + grid = HGrid_sqrtlog10_inv(hg); + break; + case fastNLOGrid::kLogLog: + grid = HGrid_loglog_inv(hg); + break; + case fastNLOGrid::k3rdrtLog10: + grid = HGrid_3rdrtlog10_inv(hg); + break; + case fastNLOGrid::k4thrtLog10: + grid = HGrid_4thrtlog10_inv(hg); + break; + default: + error["MakeGridFromHGrid"]<<"Unknown grid type."<<endl; + } + return grid; +} + + +vector<double> fastNLOInterpolBase::HGrid_loglog025_inv(vector<double> grid){ + vector<double> ret = grid; + for (unsigned int i=0 ; i<grid.size(); i++ ) { + ret[i] = Function_loglog025_inv(grid[i]); + } + return ret; +} +vector<double> fastNLOInterpolBase::HGrid_loglog_inv(vector<double> grid){ + vector<double> ret = grid; + for (unsigned int i=0 ; i<grid.size(); i++ ) { + ret[i] = Function_loglog_inv(grid[i]); + } + return ret; +} +vector<double> fastNLOInterpolBase::HGrid_log10_inv(vector<double> grid){ + vector<double> ret = grid; + for (unsigned int i=0 ; i<grid.size(); i++ ) + ret[i] = Function_log10_inv(grid[i]); + return ret; +} +vector<double> fastNLOInterpolBase::HGrid_sqrtlog10_inv(vector<double> grid){ + vector<double> ret = grid; + for (unsigned int i=0 ; i<grid.size(); i++ ) + ret[i] = Function_sqrtlog10_inv(grid[i]); + return ret; +} +vector<double> fastNLOInterpolBase::HGrid_3rdrtlog10_inv(vector<double> grid){ + vector<double> ret = grid; + for (unsigned int i=0 ; i<grid.size(); i++ ) { + ret[i] = Function_3rdrtlog10_inv(grid[i]); + } + return ret; +} +vector<double> fastNLOInterpolBase::HGrid_4thrtlog10_inv(vector<double> grid){ + vector<double> ret = grid; + for (unsigned int i=0 ; i<grid.size(); i++ ) { + ret[i] = Function_4thrtlog10_inv(grid[i]); + } + return ret; +} + + +void fastNLOInterpolBase::SetGrid(vector<double> grid){ + // todo. Add some checks here. + fgrid = grid; +} +void fastNLOInterpolBase::SetHGrid(vector<double> hgrid){ + // todo. Add some checks here. + fHgrid = hgrid; +} + +bool fastNLOInterpolBase::CheckX(double& x) { + bool sanity = false; + if ( fgrid.size() == 1 ) { + //x = fgrid[0]; + return true; + } + //printf("x=%e, %e; fgrid=%e, %e; ratio: %e\n",x,x-1.,fgrid[0],fgrid[0]-1,x/fgrid[0]-1); + if ( x < fgrid[0] && !fExtendLow) { + if ( x!=fLastVal[1] && fgrid[0]/x-1>1.e-6) + warn["CheckX"]<<"Value "<<x<<" is smaller than smallest node (min="<<fgrid[0]<<"). Using this first node."<<endl; + fLastVal[1] = x; // use this to monitor whenever there was an incident + x = fgrid[0]; + } + else if ( x > fgrid.back() ) { + if ( fLastGridPointWasRemoved ) { + if ( x > fvalmax ) { + if ( x!=fLastVal[2] && x/fgrid.back()-1. > 1.e-6) + warn["CheckX"]<<"Value "<<x<<" is larger than largest grid value (max="<<fvalmax<<"). Using this value instead."<<endl; + fLastVal[2] = x; // use this to monitor whenever there was an incident + x = fvalmax; + } + } + else { + if ( fabs(x/fLastVal[3]-1)>1.e-10 && fabs(x/fLastVal[4]-1)>1.e-10 && fabs(x-fgrid.back())>1.e-6 ) + warn["CheckX"]<<"Value "<<x<<" is larger than largest node (max="<<fgrid.back()<<"). Using this first node."<<endl; + fLastVal[4] = fLastVal[3]; // use this to monitor whenever there was an incident + fLastVal[3] = x; // use this to monitor whenever there was an incident + x = fgrid.back(); + } + } + else + sanity = true; + + return sanity; +} + +double fastNLOInterpolBase::GetHx(double x ){ + switch(fdm) { + case fastNLOGrid::kLinear: + return x; + break; + case fastNLOGrid::kLogLog025: + return Function_loglog025(x); + break; + case fastNLOGrid::kLog10: + return Function_log10(x); + break; + case fastNLOGrid::kSqrtLog10: + return Function_sqrtlog10(x); + break; + case fastNLOGrid::kLogLog: + return Function_loglog(x); + break; + case fastNLOGrid::k3rdrtLog10: + return Function_3rdrtlog10(x); + break; + case fastNLOGrid::k4thrtLog10: + return Function_4thrtlog10(x); + break; + default: + error["GetHx"]<<"Unknown H-function measure."<<endl; + return 0; + } +} + +double fastNLOInterpolBase::GetDelta(double x ){ + int node1 = FindLargestPossibleNode(x); + double Hx = GetHx(x); + if ( node1>= (int)fHgrid.size() ) { + error["GetDelta"]<<"largest possible node is outside of grid."<<endl; + exit(1); + } + // check if node next to largest node is also in grid + if ( node1+1>= (int)fHgrid.size() ) { + if ( fLastGridPointWasRemoved ) { + //warn["GetDelta"]<<"Last grid point was removed. I assume this point was at x="<<fvalmax<<endl; + double Hxone = GetHx(fvalmax); + //cout<<"fHgrid[node1+1="<<fHgrid[node1+1]<<endl; + double del = Hxone - fHgrid[node1]; + if ( del == 0 ){ + //warn["GetDelta"]<<"Distance between nodes is zero."<<endl; + return 0; + } + return (Hx - fHgrid[node1]) / del; + } + else { + error["GetDelta"]<<" node next to 'largest possible node' is outside of grid."<<endl; + exit(1); + } + } + double del = fHgrid[node1+1] - fHgrid[node1]; + if ( del == 0 ){ + //warn["GetDelta"]<<"Distance between nodes is zero."<<endl; + return 0; + } + return (Hx - fHgrid[node1]) / del; +} + + +void fastNLOInterpolBase::PrintGrid() { + warn["PrintGrid"]<<"\n ---------- printing grid -------------- " <<endl; + warn>>"n grid nodes: " <<fgrid.size()<<endl; + for ( unsigned int i = 0 ; i<fgrid.size() ; i++ ) { + warn>>"i="<<i<<"\tnode="<<fgrid[i]<<endl; + } + warn["PrintGrid"]<<"\n ---------- printing Hgrid -------------- " <<endl; + warn>>"n Hgrid nodes: " <<fHgrid.size()<<endl; + for ( unsigned int i = 0 ; i<fHgrid.size() ; i++ ) { + warn>>"i="<<i<<"\tnode="<<fHgrid[i]<<endl; + } + warn>>"----------------------------------------------------"<<endl; +} diff --git a/v2.6/toolkit/fastnlotoolkit/fastNLOInterpolCatmullRom.cc b/v2.6/toolkit/fastnlotoolkit/fastNLOInterpolCatmullRom.cc new file mode 100644 index 0000000000000000000000000000000000000000..c31c4481131f72d302615683e847dd021281ac91 --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/fastNLOInterpolCatmullRom.cc @@ -0,0 +1,124 @@ +// Author: Daniel Britzger +// DESY, 27/06/2013 + +#include <cfloat> +#include <cmath> +#include <cstdlib> +#include <fstream> +#include <iostream> +#include <vector> +#include "fastnlotk/fastNLOInterpolCatmullRom.h" + +using namespace std; + +//______________________________________________________________________________ + + +fastNLOInterpolCatmullRom::fastNLOInterpolCatmullRom(double min, double max, fastNLOGrid::GridType type) : fastNLOInterpolBase(min,max,type,4) { + debug["fastNLOInterpolCatmullRom"]<<"New fastNLOInterpolCatmullRom instance."<<endl; +} + + +//______________________________________________________________________________ +fastNLOInterpolCatmullRom::fastNLOInterpolCatmullRom(double density, fastNLOGrid::GridType type) : fastNLOInterpolBase(density,type,4) { + debug["fastNLOInterpolLagrange"]<<"New fastNLOInterpolCatmullRom instance."<<endl; +} + + +//______________________________________________________________________________ + + +fastNLOInterpolCatmullRom::~fastNLOInterpolCatmullRom(void) { +} + + +//______________________________________________________________________________ + +// vector<pair<int,double> > fastNLOInterpolCatmullRom::GetCopyOfNodeValues(double x) { +// vector<pair<int,double> > ret = GetNodeValues(x); +// return ret; +// } + +//vector<pair<int,double> > fastNLOInterpolCatmullRom::CalcNodeValues(double x) { +void fastNLOInterpolCatmullRom::CalcNodeValues(vector<pair<int,double> >& nodes, double x) { + // Performs interpolation of value value on grid 'fgrid'. + // uses distance measure 'fdm' + // returns for for all relevant grid points + // the integer number of that node + // the vale, that this node obtains. + // + + static const unsigned int nS = 4; // number of nodes that receive contributions from this interpolation + + int nnode = FindLargestPossibleNode(x, true); + + // --- relative distance delta - in function fdm H(x) + // deltascale (Interpol(.,.,.delta,.): relative distance of value to node 'nnode' + double delta = GetDelta(x); + // --- distances to all nodes + double dist[nS] = {1.+delta,0.+delta,1.-delta,2.-delta} ; + + // --- get scale interpolation kernel and updated scalenode position: 1 <= nmu < ntot-2 + int nmod = 0; // --- variable for final node + int nmax = fgrid.size()-2; + if (fLastGridPointWasRemoved) nmax=fgrid.size()-1; + + + // nnode: number of the next node to the left of the current value + // nmax: number of the last node which could lie to the left of a potential value + // delta: relative distance of value to node 'nnode' + // ikern: select interpolation kernel 1:Catmul Rom 2: Lagrange + // nmod: modified number of next node to the left (to be used for storage - relevant only at boundaries) + // kernel: array(4) containing the interpolation kernel + + static vector <double> kern(nS); + // --- Catmul Rom interpolation kernel + if (nnode == 0 ) { // --- left boundary + kern[0] = 1.0 - 7.0/6.0*delta - 1.0/6.0*delta*delta + 1.0/3.0*delta*delta*delta; + kern[1] = 4.0/3.0*delta + 1.0/3.0*delta*delta - 2.0/3.0*delta*delta*delta; + kern[2] = -1.0/6.0*delta - 1.0/6.0*delta*delta + 1.0/3.0*delta*delta*delta; + kern[3] = 0.0; + nmod = nnode + 1; + } else if (nnode == nmax) { // --- right boundary + kern[0] = 0.0; + kern[1] = -1.0/6.0*dist[2] - 1.0/6.0*dist[2]*dist[2] + 1.0/3.0*dist[2]*dist[2]*dist[2]; + kern[2] = 4.0/3.0*dist[2] + 1.0/3.0*dist[2]*dist[2] - 2.0/3.0*dist[2]*dist[2]*dist[2]; + kern[3] = 1.0 -7.0/6.0*dist[2] -1.0/6.0*dist[2]*dist[2] +1.0/3.0*dist[2]*dist[2]*dist[2]; + nmod = nnode - 1; + } else { // --- central region + kern[0] = 2.0 - 4.0*dist[0] + 2.5*dist[0]*dist[0] - 0.5*dist[0]*dist[0]*dist[0]; + kern[1] = 1.0 - 2.5*dist[1]*dist[1] + 1.5*dist[1]*dist[1]*dist[1]; + kern[2] = 1.0 - 2.5*dist[2]*dist[2] + 1.5*dist[2]*dist[2]*dist[2]; + kern[3] = 2.0 - 4.0*dist[3] + 2.5*dist[3]*dist[3] - 0.5*dist[3]*dist[3]*dist[3]; + nmod = nnode; + } + + // keep value for next time. + fnmod = nmod; + + // cout<<" x="<<x<<"\tdelta="<<delta<<"\tnnode="<<nnode<<"\tk[3]="<<kern[3]<<"\tg-max="<<fgrid.back()<<"\tnx="<<fgrid.size()<<"\tnf="<<fnmod<<"\tx0b="<<nmod-1<<endl; + + // generate return values + //vector<pair<int,double> > ret(nS); + + + nodes.resize(nS); + for ( unsigned int i = 0 ; i<nS ; i++ ){ + nodes[i] = make_pair(nmod-1+i,kern[i]); + } + + if (fLastGridPointWasRemoved ) { + if ( nodes.back().first==(int)fgrid.size() ) { + nodes.resize(3); + if ( nodes.back().first==(int)fgrid.size() ) { + nodes.resize(2); + if ( nodes.back().first==(int)fgrid.size() ) { + nodes.resize(1); + if ( nodes.back().first==(int)fgrid.size() ) { + nodes.resize(0); + } + } + } + } + } +} diff --git a/v2.6/toolkit/fastnlotoolkit/fastNLOInterpolLagrange.cc b/v2.6/toolkit/fastnlotoolkit/fastNLOInterpolLagrange.cc new file mode 100644 index 0000000000000000000000000000000000000000..5458be9bbab3ce55463fa947746dfc292f6baff5 --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/fastNLOInterpolLagrange.cc @@ -0,0 +1,121 @@ +// Author: Daniel Britzger +// DESY, 29/01/2014 + +#include <cfloat> +#include <cmath> +#include <cstdlib> +#include <fstream> +#include <iostream> +#include <vector> +#include "fastnlotk/fastNLOInterpolLagrange.h" + +using namespace std; + +//______________________________________________________________________________ +fastNLOInterpolLagrange::fastNLOInterpolLagrange(double min, double max, fastNLOGrid::GridType type) : fastNLOInterpolBase(min,max,type,4) { + debug["fastNLOInterpolLagrange"]<<"New fastNLOInterpolLagrange instance."<<endl; +} + + +//______________________________________________________________________________ +fastNLOInterpolLagrange::fastNLOInterpolLagrange(double density, fastNLOGrid::GridType type) : fastNLOInterpolBase(density,type,4) { + debug["fastNLOInterpolLagrange"]<<"New fastNLOInterpolLagrange instance."<<endl; +} + + +//______________________________________________________________________________ +fastNLOInterpolLagrange::~fastNLOInterpolLagrange(void) { +} + + +//______________________________________________________________________________ +void fastNLOInterpolLagrange::CalcNodeValues(vector<pair<int,double> >& nodes, double x) { + //! Performs interpolation of value value on grid 'fgrid'. + //! uses distance measure 'fdm' + //! returns for for all relevant grid points + //! - the integer number of that node + //! - the vale, that this node obtains. + //! + + static const unsigned int nS = 4; // number of nodes that receive contributions from this interpolation + + int nnode = FindLargestPossibleNode(x, true); + + // --- relative distance delta - in function fdm H(x) + // deltascale (Interpol(.,.,.delta,.): relative distance of value to node 'nnode' + double delta = GetDelta(x); + // --- distances to all nodes + double dist[nS] = {1.+delta,0.+delta,1.-delta,2.-delta} ; + + // --- get scale interpolation kernel and updated scalenode position: 1 <= nmu < ntot-2 + int nmod = 0; // --- variable for final node + int nmax = fgrid.size()-2; + if (fLastGridPointWasRemoved) nmax=fgrid.size()-1; + + + // nnode: number of the next node to the left of the current value + // nmax: number of the last node which could lie to the left of a potential value + // delta: relative distance of value to node 'nnode' + // ikern: select interpolation kernel 1:Catmul Rom 2: Lagrange + // nmod: modified number of next node to the left (to be used for storage - relevant only at boundaries) + // kernel: array(4) containing the interpolation kernel + + + static vector <double> kern(nS); + // --- Lagrange interpolation kernel + if (nnode == 0 ) { // --- left boundary + kern[0] = 1.0 - 11./6.*delta + delta*delta - 1./6.*delta*delta*delta; + kern[1] = 3.0*delta - 2.5*delta*delta + 0.5*delta*delta*delta; + kern[2] = -1.5*delta + 2.0*delta*delta - 0.5*delta*delta*delta; + kern[3] = 1./3.*delta - 0.5*delta*delta + 1./6.*delta*delta*delta; + nmod = nnode + 1; + } else if (nnode == nmax) { // --- right boundary + kern[0] = 1./3.*dist[2] - 0.5*dist[2]*dist[2] + 1./6.*dist[2]*dist[2]*dist[2]; + kern[1] = -1.5*dist[2] + 2.0*dist[2]*dist[2] - 0.5*dist[2]*dist[2]*dist[2]; + kern[2] = 3.0*dist[2] - 2.5*dist[2]*dist[2] + 0.5*dist[2]*dist[2]*dist[2]; + kern[3] = 1.0 - 11./6.*dist[2] + dist[2]*dist[2] - 1./6.*dist[2]*dist[2]*dist[2]; + nmod = nnode - 1; + } else { // --- central region - + kern[0] = 1.0 - 11./6.*dist[0] + 1.*dist[0]*dist[0] - 1./6.*dist[0]*dist[0]*dist[0]; + kern[1] = 1.0 - 0.5*dist[1] - 1.0*dist[1]*dist[1] + 0.5*dist[1]*dist[1]*dist[1]; + kern[2] = 1.0 - 0.5*dist[2] - 1.0*dist[2]*dist[2] + 0.5*dist[2]*dist[2]*dist[2]; + kern[3] = 1.0 - 11./6.*dist[3] + 1.*dist[3]*dist[3] - 1./6.*dist[3]*dist[3]*dist[3]; + nmod = nnode; + } + + // keep value for next time. + fnmod = nmod; + + // cout<<" x="<<x<<"\tdelta="<<delta<<"\tnnode="<<nnode<<"\tk[3]="<<kern[3]<<"\tg-max="<<fgrid.back()<<"\tnx="<<fgrid.size()<<"\tnf="<<fnmod<<"\tx0b="<<nmod-1<<endl; + + // generate return values + //vector<pair<int,double> > ret(nS); + + + nodes.resize(nS); + for ( unsigned int i = 0 ; i<nS ; i++ ){ + nodes[i] = make_pair(nmod-1+i,kern[i]); + } + + // nodes.clear(); + // for ( unsigned int i = 0 ; i<nS ; i++ ){ + // if ( kern[i] != 0 ) + // nodes.push_back(make_pair(nmod-1+i,kern[i])); + // } + + if (fLastGridPointWasRemoved ) { + if ( nodes.back().first==(int)fgrid.size() ) { + nodes.resize(3); + if ( nodes.back().first==(int)fgrid.size() ) { + nodes.resize(2); + if ( nodes.back().first==(int)fgrid.size() ) { + nodes.resize(1); + if ( nodes.back().first==(int)fgrid.size() ) { + nodes.resize(0); + } + } + } + } + } +} + diff --git a/v2.6/toolkit/fastnlotoolkit/fastNLOInterpolLinear.cc b/v2.6/toolkit/fastnlotoolkit/fastNLOInterpolLinear.cc new file mode 100644 index 0000000000000000000000000000000000000000..2872ff6bcc88de3bc5544e4d6d2405c305e507f8 --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/fastNLOInterpolLinear.cc @@ -0,0 +1,65 @@ +// Author: Daniel Britzger +// DESY, 29/01/2014 + +#include <cfloat> +#include <cmath> +#include <cstdlib> +#include <fstream> +#include <iostream> +#include <vector> +#include "fastnlotk/fastNLOInterpolLinear.h" + +using namespace std; + +//______________________________________________________________________________ +fastNLOInterpolLinear::fastNLOInterpolLinear(double min, double max, fastNLOGrid::GridType type) : fastNLOInterpolBase(min,max,type,2) { + debug["fastNLOInterpolLinear"]<<"New fastNLOInterpolLinear instance."<<endl; +} + + +//______________________________________________________________________________ +fastNLOInterpolLinear::fastNLOInterpolLinear(double density, fastNLOGrid::GridType type) : fastNLOInterpolBase(density,type,4) { + debug["fastNLOInterpolLagrange"]<<"New fastNLOInterpolLinear instance."<<endl; +} + + +//______________________________________________________________________________ +fastNLOInterpolLinear::~fastNLOInterpolLinear(void) { +} + + +//______________________________________________________________________________ +void fastNLOInterpolLinear::CalcNodeValues(vector<pair<int,double> >& nodes, double x) { + //! Performs interpolation of value value on grid 'fgrid'. + //! uses distance measure 'fdm' + //! returns for for all relevant grid points + //! - the integer number of that node + //! - the value, which this node obtains. + //! + + // get scale interpolation kernel and updated scalenode position: 1 <= nmu < ntot-2 + int nnode = FindLargestPossibleNode(x, true); + + // --- relative distance delta - in function fdm H(x) + // deltascale (Interpol(.,.,.delta,.): relative distance of value to node 'nnode' + double delta = GetDelta(x); + // --- set nodes + nodes.resize(2); + nodes[0] = make_pair(nnode, 1.-delta); + nodes[1] = make_pair(nnode+1,delta); + + // std::cout<<" *** node: x="<<x<<"\tdelta="<<delta<<"\tnnode="<<nnode + // <<"\tn0="<<nodes[0].first<<"\tv0="<<nodes[0].second + // <<"\tn1="<<nodes[1].first<<"\tv0="<<nodes[1].second + // <<endl; + + if (fLastGridPointWasRemoved ) { + if ( nodes.back().first==(int)fgrid.size() ) { + nodes.resize(1); + if ( nodes.back().first==(int)fgrid.size() ) { + nodes.resize(0); + } + } + } +} + diff --git a/v2.6/toolkit/fastnlotoolkit/fastNLOInterpolOneNode.cc b/v2.6/toolkit/fastnlotoolkit/fastNLOInterpolOneNode.cc new file mode 100644 index 0000000000000000000000000000000000000000..f0d0da460f8384482cfb43d57c0b127d61e6efe6 --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/fastNLOInterpolOneNode.cc @@ -0,0 +1,33 @@ +// Author: Daniel Britzger +// DESY, 29/01/2014 + +#include <cfloat> +#include <cmath> +#include <cstdlib> +#include <fstream> +#include <iostream> +#include <vector> +#include "fastnlotk/fastNLOInterpolOneNode.h" + +using namespace std; + +//______________________________________________________________________________ +fastNLOInterpolOneNode::fastNLOInterpolOneNode(double min, double max, fastNLOGrid::GridType type) : fastNLOInterpolBase(min,max,type,1) { + debug["fastNLOInterpolOneNode"]<<"New fastNLOInterpolOneNode instance."<<endl; + fDummyNode.resize(1); + fDummyNode[0] = make_pair(0,1); + if (fLastGridPointWasRemoved ) + warn["fastNLOInterpolOneNode"]<<"Last grid point cannot be removed, since there is only one point."<<endl; +} + + +//______________________________________________________________________________ +fastNLOInterpolOneNode::~fastNLOInterpolOneNode(void) { +} + + +//______________________________________________________________________________ +void fastNLOInterpolOneNode::CalcNodeValues(vector<pair<int,double> >& nodes, double x) { + nodes=fDummyNode; +} + diff --git a/v2.6/toolkit/fastnlotoolkit/fastNLOLHAPDF.cc b/v2.6/toolkit/fastnlotoolkit/fastNLOLHAPDF.cc new file mode 100644 index 0000000000000000000000000000000000000000..1cd2db8e40dd1db7104c8ffe48babe411fed9cc8 --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/fastNLOLHAPDF.cc @@ -0,0 +1,688 @@ +// Author: Daniel Britzger +// DESY, 20/04/2012 + +////////////////////////////////////////////////////////////////////////// +// // +// fastNLO_reader_2.1.0 // +// D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch // +// // +// The projects web page can be found at: // +// http://projects.hepforge.org/fastnlo // +// // +// If you use this code, please cite: // +// T. Kluge, K. Rabbertz and M. Wobisch, hep-ph/0609285 // +// D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, // +// arXiv:1109.1310 // +// // +////////////////////////////////////////////////////////////////////////// + +#include <cfloat> +#include <cstdio> +#include <cstdlib> +#include <iostream> +#include "fastnlotk/fastNLOReader.h" +#include "fastnlotk/fastNLOLHAPDF.h" +#include "fastnlotk/fastNLOTools.h" + +using namespace std; + + + +//______________________________________________________________________________ + + +fastNLOLHAPDF::fastNLOLHAPDF(string name) : fastNLOReader(name), fnPDFs(0) , fiPDFMember(0) , fchksum(0.) { + logger.info["fastNLOLHAPDF"]<<"Please initialize a PDF file using SetLHAPDFFilename( PDFFile ) and a PDF set using SetLHAPDFMember(int PDFMember)"<<std::endl; + + PDFSet = NULL; + PDF = NULL; +} + +//______________________________________________________________________________ + + +fastNLOLHAPDF::fastNLOLHAPDF(const fastNLOTable& table) : fastNLOReader(table), fnPDFs(0) , fiPDFMember(0) , fchksum(0.) { + logger.info["fastNLOLHAPDF"]<<"Please initialize a PDF file using SetLHAPDFFilename( PDFFile ) and a PDF set using SetLHAPDFMember(int PDFMember)"<<std::endl; + + PDFSet = NULL; + PDF = NULL; +} +//______________________________________________________________________________ + + +fastNLOLHAPDF::~fastNLOLHAPDF() { + + delete PDFSet; + delete PDF; +} + +//______________________________________________________________________________ + + +fastNLOLHAPDF::fastNLOLHAPDF(string name, string LHAPDFFile, int PDFMember) : fastNLOReader(name), fnPDFs(0) , fiPDFMember(0) , fchksum(0.) { + PDFSet = NULL; + PDF = NULL; + SetLHAPDFFilename(LHAPDFFile); + SetLHAPDFMember(PDFMember); + // Call additional initialization. Not necessary for LHAPDF. + InitEvolveAlphas(); +} + +//______________________________________________________________________________ + + +fastNLOLHAPDF::fastNLOLHAPDF(const fastNLOTable& table, string LHAPDFFile, int PDFMember) : fastNLOReader(table), fnPDFs(0) , fiPDFMember(0) , fchksum(0.) { + PDFSet = NULL; + PDF = NULL; + SetLHAPDFFilename(LHAPDFFile); + SetLHAPDFMember(PDFMember); + // Call additional initialization. Not necessary for LHAPDF. + InitEvolveAlphas(); + // Everything set. Do cross sections calculation. + CalcCrossSection(); +} + + + +// Getters +double fastNLOLHAPDF::GetQMass(int pdgid) const { + if (pdgid < 1 || pdgid > 6 ) { + logger.error["fastNLOLHAPDF::GetQMass"]<<"PDG code out of quark index range 1-6! Aborted.\n"; + exit(1); + } + return LHAPDF::getQMass(pdgid); +} + +int fastNLOLHAPDF::GetNLoop() const { + return (LHAPDF::getOrderAlphaS() + 1); +} + +int fastNLOLHAPDF::GetNFlavor() const { + return (LHAPDF::getNf()); +} + +double fastNLOLHAPDF::GetAlphasMz() const { + return PDF->alphasQ(91.1876); +} + +int fastNLOLHAPDF::GetIPDFMember() const { + return fiPDFMember; +}; +int fastNLOLHAPDF::GetNPDFMembers() const { + return fnPDFs; +}; +int fastNLOLHAPDF::GetNPDFMaxMember() const { + return fnPDFs-1; +}; + + +//______________________________________________________________________________ + + +double fastNLOLHAPDF::EvolveAlphas(double Q) const { + //debug<<"EvolveAlphas with Q="<<Q<<endl; + // + // Implementation of Alpha_s evolution as function of Mu_r only. + // + // the alpha_s evolution is done within LHAPDF. + // + // WARNING: You cannot change alpha_s(Mz), but is is + // defined with the pdf. 'alphasMz' is not used here! + // + return PDF->alphasQ(Q); + +} + + +//______________________________________________________________________________ + + +bool fastNLOLHAPDF::InitPDF() { + // + // Initalize some necessary LHAPDF parameters + // return true, if successful initialization + // return false, if PDF initialization failed + // + // LHAPDF interface: + // security, if multiple instance with different pdfs are instantiated. + // we always reinitialized the set PDF-set. + + if (fLHAPDFFilename == "") { + logger.warn["InitPDF"]<<"Empty LHAPDF filename! Please define a PDF set here!\n"; + return false; + } + + // Suppress LHAPDF6 output at each member change + LHAPDF::setVerbosity(0); + return true; +} + + +//______________________________________________________________________________ + + + +vector<double> fastNLOLHAPDF::GetXFX(double xp, double muf) const { + // + // GetXFX is used to get the parton array from the + // pre-defined pdf-interface. + // + // vector<double> xfx(13); + // PDF->xfxQ(xp, muf, xfx); + vector <double> xfx(13); + PDF->xfxQ(xp,muf,xfx); + return xfx; +} + + +//______________________________________________________________________________ + + +void fastNLOLHAPDF::SetLHAPDFFilename(string filename) { + if (filename != fLHAPDFFilename) fchksum = 0; + fLHAPDFFilename = filename; + if ( PDFSet ) delete PDFSet; + PDFSet = new LHAPDF::PDFSet(filename); + fnPDFs = PDFSet->size(); + SetLHAPDFMember(0); +} + + +//______________________________________________________________________________ + + +void fastNLOLHAPDF::SetLHAPDFMember(int set) { + if ( PDF ) delete PDF; + PDF = PDFSet->mkPDF(set); + fiPDFMember=set; +} + + +//______________________________________________________________________________ + + +void fastNLOLHAPDF::PrintPDFInformation() const { + // + // print out the information about the currently used LHAPDF file. + // unfortunately there is no getter for lhapdf-filename or + // used pdf-member-id available. + // One must take care, that one is always using the desired pdf. + // + // e.g. If one has two fastNLOReader instances and one initalizes the + // second instance with another pdf. Then also the first one is using this + // pdf when evaluating CalcCrossSection (after a PDFCacheRefilling). + // + cout << PDFSet->description(); +} + +void fastNLOLHAPDF::SetMz(double Mz) { + logger.warn["SetMz"]<<"WARNING! The Z mass cannot be changed in alpha_s evolution of LHAPDF!"<<endl; +} + +void fastNLOLHAPDF::SetQMass(int pdgid, double mq) { + logger.warn["SetQMass"]<<"WARNING! The quark masses cannot be changed in alpha_s evolution of LHAPDF!"<<endl; +} + +void fastNLOLHAPDF::SetNFlavor(int nflavor) { + logger.warn["SetNFlavor"]<<"WARNING! The no. of active flavors cannot be changed in alpha_s evolution of LHAPDF!"<<endl; +} + +void fastNLOLHAPDF::SetNLoop(int nloop) { + logger.warn["SetNLoop"]<<"WARNING! The no. of loops cannot be changed in alpha_s evolution of LHAPDF!"<<endl; +} + +void fastNLOLHAPDF::SetAlphasMz(double AlphasMz) { + logger.warn["SetAlphasMz"]<<"WARNING! alpha_s(M_Z) cannot be changed in alpha_s evolution of LHAPDF!"<<endl; +} + +void fastNLOLHAPDF::InitEvolveAlphas() { + // For LHAPDF do nothing +} + + + +//______________________________________________________________________________ +vector<LHAPDF::PDFUncertainty> fastNLOLHAPDF::GetPDFUncertaintyLHAPDF(double cl, bool alternative) { + //! Calculate PDF uncertainty on cross sections. + //! Formulae for PDF uncertainties are taken from LHAPDF6. + //! Function returns struct with all values. + //! PDFUncertainty.central [new central value] + //! PDFUncertainty.errplus + //! PDFUncertainty.errminus + //! PDFUncertainty.errsymm + //! PDFUncertainty.scale [scalefactor] + //! More documentation. See docu of LHAPDF::PDFSet::uncertainty() + //! + //! 'cl' is used to rescale uncertainties to a particular confidence level + //! + //! If the PDF set is given in the form of replicas, then optional argument + //! 'alternative' equal to true (default: false) will construct a confidence + //! interval from the probability distribution of replicas, with the central + //! value given by the median. + + vector<LHAPDF::PDFUncertainty> PDFUnc; + const unsigned int nMem = GetNPDFMembers(); + const unsigned int nObsBins = GetNObsBin(); + + int iMem0 = fiPDFMember; + vector<vector<double> > CSs(nObsBins); // [bin][iMem] + for ( unsigned int iObs = 0 ; iObs<nObsBins ; iObs++ ) CSs[iObs].resize(nMem); + for ( unsigned int iMem = 0 ; iMem<nMem ; iMem++ ) { + SetLHAPDFMember(iMem); + CalcCrossSection(); + vector<double> xs = GetCrossSection(); + for ( unsigned int iObs = 0 ; iObs<nObsBins ; iObs++ ) CSs[iObs][iMem] = xs[iObs]; + } + for ( unsigned int iObs = 0 ; iObs<nObsBins ; iObs++ ) { + PDFUnc.push_back(PDFSet->uncertainty(CSs[iObs],cl,alternative)); + } + SetLHAPDFMember(iMem0); + CalcCrossSection(); + return PDFUnc; +} + + +//______________________________________________________________________________ +vector<double> fastNLOLHAPDF::CalcPDFUncertaintyMinus(const vector<LHAPDF::PDFUncertainty>& PDFUnc) const{ + //!get vector<double> for PDF-minus uncertainty + //! uncertainties are 'positive'! + vector<double> ret(GetNObsBin()); + for ( unsigned int iObs = 0 ; iObs<GetNObsBin() ; iObs++ ) + ret[iObs] = PDFUnc[iObs].errminus; + return ret; +} + + +//______________________________________________________________________________ +vector<double> fastNLOLHAPDF::CalcPDFUncertaintyPlus(const vector<LHAPDF::PDFUncertainty>& PDFUnc) const { + //!get vector<double> for PDF-plus uncertainty + vector<double> ret(GetNObsBin()); + for ( unsigned int iObs = 0 ; iObs<GetNObsBin() ; iObs++ ) + ret[iObs] = PDFUnc[iObs].errplus; + return ret; +} + + +//______________________________________________________________________________ +vector<double> fastNLOLHAPDF::CalcPDFUncertaintyRelMinus(const vector<LHAPDF::PDFUncertainty>& PDFUnc) const{ + //!get vector<double> for PDF-minus uncertainty + //! uncertainties are 'negative'! + //! Relative uncertainties are calcuated with 'median' cross section in case of MC uncertainties + vector<double> ret(GetNObsBin()); + for ( unsigned int iObs = 0 ; iObs<GetNObsBin() ; iObs++ ) + ret[iObs] = PDFUnc[iObs].errminus*-1 / PDFUnc[iObs].central; + return ret; +} + + +//______________________________________________________________________________ +vector<double> fastNLOLHAPDF::CalcPDFUncertaintyRelPlus(const vector<LHAPDF::PDFUncertainty>& PDFUnc) const { + //!get vector<double> for PDF-plus uncertainty + //! Relative uncertainties are calcuated with 'median' cross section in case of MC uncertainties + vector<double> ret(GetNObsBin()); + for ( unsigned int iObs = 0 ; iObs<GetNObsBin() ; iObs++ ) + ret[iObs] = PDFUnc[iObs].errplus / PDFUnc[iObs].central; + return ret; +} + + +//______________________________________________________________________________ +vector<double> fastNLOLHAPDF::CalcPDFUncertaintyCentral(const vector<LHAPDF::PDFUncertainty>& PDFUnc) const { + //!get vector<double> for new central value + vector<double> ret(GetNObsBin()); + for ( unsigned int iObs = 0 ; iObs<GetNObsBin() ; iObs++ ) + ret[iObs] = PDFUnc[iObs].central; + return ret; +} + + +//______________________________________________________________________________ +vector<double> fastNLOLHAPDF::CalcPDFUncertaintySymm(const vector<LHAPDF::PDFUncertainty>& PDFUnc) const { + //!get vector<double> for symmetrized PDF uncertainty + vector<double> ret(GetNObsBin()); + for ( unsigned int iObs = 0 ; iObs<GetNObsBin() ; iObs++ ) + ret[iObs] = PDFUnc[iObs].errsymm; + return ret; +} + + +// +// Evaluation of uncertainties +// +// alpha_s uncertainty +//______________________________________________________________________________ +XsUncertainty fastNLOLHAPDF::GetXsUncertainty(const fastNLO::EAsUncertaintyStyle eAsUnc, bool lNorm) { + // Get a_s(M_Z) uncertainty, da_s(M_Z) as of PDG2016 + const double dasmz[2] = {-0.0011, 0.0011}; + double asmz = GetAlphasMz(); + XsUncertainty XsUnc; + + unsigned int NObsBin = GetNObsBin(); + + logger.info["GetAsUncertainty"]<<"Current a_s(M_Z) = a_s("<<PDG_MZ<<") = "<<asmz<<endl; + logger.info["GetAsUncertainty"]<<"da_s(M_Z) = + "<<dasmz[1]<<" - "<<-dasmz[0]<<endl; + if ( eAsUnc == fastNLO::kAsNone ) { + logger.info["GetAsUncertainty"]<<"Only default value selected, uncertainties will be zero."<<endl; + } else if ( eAsUnc == fastNLO::kAsGRV ) { + logger.info["GetAsUncertainty"]<<"GRV evolution used for a_s(M_Z) uncertainty."<<endl; + } else { + logger.error["GetAsUncertainty"]<<"ERROR! Unknown a_s(M_Z) uncertainty type selected, exiting."<<endl; + logger.error["GetAsUncertainty"]<<"type = "<<eAsUnc<<endl; + exit(1); + } + + vector < double > MyAsMz; + MyAsMz.push_back(asmz); + MyAsMz.push_back(asmz+dasmz[0]); + MyAsMz.push_back(asmz+dasmz[1]); + vector < double > MyXSection; + //! Cross section and absolute uncertainties + for ( unsigned int ias = 0; ias < MyAsMz.size(); ias++ ) { + SetAlphasMz(MyAsMz[ias]); + CalcCrossSection(); + MyXSection = GetCrossSection(lNorm); + for ( unsigned int iobs = 0; iobs < NObsBin; iobs++ ) { + if ( ias == 0 ) { + XsUnc.xs.push_back(MyXSection[iobs]); + XsUnc.dxsu.push_back(0); + XsUnc.dxsl.push_back(0); + } else { + XsUnc.dxsu[iobs] = max(XsUnc.dxsu[iobs],MyXSection[iobs]-XsUnc.xs[iobs]); + XsUnc.dxsl[iobs] = min(XsUnc.dxsl[iobs],MyXSection[iobs]-XsUnc.xs[iobs]); + } + } + } + + //! Divide by cross section != 0 to give relative uncertainties + for ( unsigned int iobs = 0; iobs < NObsBin; iobs++ ) { + if ( fabs(XsUnc.xs[iobs]) > DBL_MIN ) { + XsUnc.dxsu[iobs] = +fabs(XsUnc.dxsu[iobs] / XsUnc.xs[iobs]); + XsUnc.dxsl[iobs] = -fabs(XsUnc.dxsl[iobs] / XsUnc.xs[iobs]); + } else { + XsUnc.dxsu[iobs] = 0.; + XsUnc.dxsl[iobs] = 0.; + } + logger.debug["GetAsUncertainty"]<<"iobs = " << iobs << ", dxsl = " << XsUnc.dxsl[iobs] << ", dxsu = " << XsUnc.dxsu[iobs] <<endl; + } + logger.info["GetAsUncertainty"]<<"Setting a_s(M_Z) back to initial value of "<<asmz<<endl; + SetAlphasMz(asmz); + + return XsUnc; +} + + +//______________________________________________________________________________ + +// std::vector< std::vector<double> > fastNLOLHAPDF::GetXsUncertaintyVec(const fastNLO::EAsUncertaintyStyle eAsUnc, bool lNorm, int iprint) { +std::vector< std::vector<double> > fastNLOLHAPDF::GetAsUncertaintyVec(const fastNLO::EAsUncertaintyStyle eAsUnc, bool lNorm, int iprint) { + XsUncertainty xsUnc = fastNLOLHAPDF::GetXsUncertainty(eAsUnc, lNorm); + if (iprint > 0) { + string style{AsUncertaintyStyle_to_string(eAsUnc)}; + string UncName = " # Relative a_s(M_Z) uncertainties (" + style + ")"; + fastNLOTools::PrintXSUncertainty(xsUnc, UncName); + } + std::vector<std::vector<double> > xsUncVec; + xsUncVec.resize(3); + xsUncVec[0] = xsUnc.xs; + xsUncVec[1] = xsUnc.dxsu; + xsUncVec[2] = xsUnc.dxsl; + return xsUncVec; +} + + +//______________________________________________________________________________ + +// void fastNLOLHAPDF::PrintXsUncertaintyVec(fastNLO::EAsUncertaintyStyle eAsUnc, std::string UncName, bool lNorm) { +void fastNLOLHAPDF::PrintAsUncertaintyVec(fastNLO::EAsUncertaintyStyle eAsUnc, std::string UncName, bool lNorm) { + XsUncertainty xsUnc = GetXsUncertainty(eAsUnc, lNorm); + fastNLOTools::PrintXSUncertainty(xsUnc, UncName); +} + + +// PDF uncertainty +//______________________________________________________________________________ +XsUncertainty fastNLOLHAPDF::GetXsUncertainty(const fastNLO::EPDFUncertaintyStyle ePDFUnc, bool lNorm) { + XsUncertainty XsUnc; + unsigned int NObsBin = GetNObsBin(); + unsigned int nMem = GetNPDFMaxMember(); + vector < double > xs0; + vector < double > dxseigu; + vector < double > dxseigl; + + // Check input + logger.debug["GetPDFUncertainty"]<<"ePDFUnc = "<<ePDFUnc<<endl; + if ( ePDFUnc == fastNLO::kPDFNone ) { + logger.info["GetPDFUncertainty"]<<"No PDF uncertainty, only averaged cross section result evaluated (correct for NNPDF or PDF sets with only one member, wrong otherwise!)."<<endl; + } else if ( ePDFUnc == fastNLO::kHessianSymmetric ) { + logger.info["GetPDFUncertainty"]<<"Calculating symmetric Hessian PDF uncertainties."<<endl; + } else if ( ePDFUnc == fastNLO::kHessianAsymmetric ) { + logger.info["GetPDFUncertainty"]<<"Calculating asymmetric Hessian PDF uncertainties."<<endl; + } else if ( ePDFUnc == fastNLO::kHessianAsymmetricMax ) { + logger.info["GetPDFUncertainty"]<<"Calculating asymmetric Hessian PDF uncertainties considering maximal pairwise deviations per eigenvector."<<endl; + } else if ( ePDFUnc == fastNLO::kHessianCTEQCL68 ) { + logger.info["GetPDFUncertainty"]<<"Calculating pairwise asymmetric Hessian PDF uncertainties rescaled to CL68 (for CTEQ PDFs)."<<endl; + } else if ( ePDFUnc == fastNLO::kMCSampling ) { + logger.info["GetPDFUncertainty"]<<"Calculating statistical sampling PDF uncertainties."<<endl; + } else if ( ePDFUnc == fastNLO::kHeraPDF10 ) { + logger.error["GetPDFUncertainty"]<<"ERROR! HERAPDF1.0 uncertainty style not yet implemented, exiting."<<endl; + logger.error["GetPDFUncertainty"]<<"ePDFUnc = "<<ePDFUnc<<endl; + exit(1); + } else if ( ePDFUnc == fastNLO::kLHAPDF6 ) { + if ( lNorm ) { + logger.error["GetPDFUncertainty"]<<"Normalization option does not work with LHAPDF6 PDF uncertainties, aborted!"<<endl; + } else { + logger.info["GetPDFUncertainty"]<<"Calculating LHAPDF6 PDF uncertainties."<<endl; + } + } else { + logger.error["GetPDFUncertainty"]<<"ERROR! Selected PDF uncertainty style not yet implemented, exiting."<<endl; + logger.error["GetPDFUncertainty"]<<"ePDFUnc = "<<ePDFUnc<<endl; + exit(1); + } + unsigned int nEig = nMem/2; + logger.info["GetPDFUncertainty"]<<"Info: Number of highest PDF set member nMem = " << nMem << endl; + logger.info["GetPDFUncertainty"]<<"Info: Guessed number of eigen vectors nMem/2 = " << nEig << endl; + if ( nMem == 1 || (nMem == 0 && ePDFUnc != fastNLO::kPDFNone) ) { + logger.error["GetPDFUncertainty"]<<"ERROR! This PDF set has only one or two members: nMem = " << nMem << endl; + logger.error["GetPDFUncertainty"]<<"PDF uncertainty calculation impossible, aborted!" << endl; + exit(1); + } else if ( nMem%2 == 1 && (ePDFUnc == fastNLO::kHessianAsymmetric || ePDFUnc == fastNLO::kHessianAsymmetricMax || ePDFUnc == fastNLO::kHessianCTEQCL68) ) { + logger.error["GetPDFUncertainty"]<<"ERROR! Odd number of PDF members found: nMem = " << nMem << endl; + logger.error["GetPDFUncertainty"]<<"This cannot work with selected asymmetric Hessian uncertainties, aborted!" << endl; + exit(1); + } + + if ( ePDFUnc != fastNLO::kLHAPDF6 ) { + + vector < double > MyXSection; + // Evaluate central/zeroth PDF set member + SetLHAPDFMember(0); + CalcCrossSection(); + xs0 = GetCrossSection(lNorm); + // Use xs0 as assumed mean and add up shifted means ,(xsi - xs0), and + // shifted means squared, (xsi - xs0)^2. Shifting permits numerically + // more precise variance calculations. + // + // Initialize cross section xs, uncertainties dxs, and temporary vector dxseig to zero + for ( unsigned int iobs = 0; iobs < NObsBin; iobs++ ) { + XsUnc.xs.push_back(0); + XsUnc.dxsu.push_back(0); + XsUnc.dxsl.push_back(0); + dxseigu.push_back(0); + dxseigl.push_back(0); + } + + // Pairwise loop over other PDF set members 1 to nMem + for ( unsigned int ieig = 1; ieig <= nEig; ieig++ ) { + SetLHAPDFMember(2*ieig-1); + CalcCrossSection(); + MyXSection = GetCrossSection(lNorm); + for ( unsigned int iobs = 0; iobs < NObsBin; iobs++ ) { + double diff = MyXSection[iobs]-xs0[iobs]; + XsUnc.xs[iobs] += diff; + dxseigu[iobs] = max(0.,diff); + dxseigl[iobs] = min(0.,diff); + } + SetLHAPDFMember(2*ieig); + CalcCrossSection(); + MyXSection = GetCrossSection(lNorm); + for ( unsigned int iobs = 0; iobs < NObsBin; iobs++ ) { + double diff = MyXSection[iobs]-xs0[iobs]; + XsUnc.xs[iobs] += diff; + // Take only maximal one in case of one-sided deviations for one eigenvector + if ( ePDFUnc == fastNLO::kHessianAsymmetricMax || ePDFUnc == fastNLO::kHessianCTEQCL68 ) { + dxseigu[iobs] = pow(max(dxseigu[iobs],diff),2); + dxseigl[iobs] = pow(min(dxseigl[iobs],diff),2); + } + // Add up both even in case of one-sided deviations for one eigenvector + else { + dxseigu[iobs] = pow(dxseigu[iobs],2) + pow(max(0.,diff),2); + dxseigl[iobs] = pow(dxseigl[iobs],2) + pow(min(0.,diff),2); + } + // Fill into dxs + XsUnc.dxsu[iobs] += dxseigu[iobs]; + XsUnc.dxsl[iobs] += dxseigl[iobs]; + } + } + + // Evaluate potential last, odd PDF set member (not possible with asymmetric Hessian!) + if ( nMem%2 == 1 ) { + SetLHAPDFMember(nMem); + CalcCrossSection(); + MyXSection = GetCrossSection(lNorm); + for ( unsigned int iobs = 0; iobs < NObsBin; iobs++ ) { + double diff = MyXSection[iobs]-xs0[iobs]; + XsUnc.xs[iobs] += diff; + XsUnc.dxsu[iobs] += pow(max(0.,diff),2); + XsUnc.dxsl[iobs] += pow(min(0.,diff),2); + } + } + + // Derive chosen relative uncertainties + for ( unsigned int iobs = 0; iobs < NObsBin; iobs++ ) { + // No PDF uncertainty, only averaged cross section result evaluated (Correct for NNPDF or PDF sets with only one member, wrong otherwise!). + if ( ePDFUnc == fastNLO::kPDFNone ) { + // Undo shift of mean + XsUnc.xs[iobs] = XsUnc.xs[iobs]/nMem + xs0[iobs]; + XsUnc.dxsu[iobs] = 0.; + XsUnc.dxsl[iobs] = 0.; + } + // Uncertainty is +- sqrt (sum of all summed squared deviations) + else if ( ePDFUnc == fastNLO::kHessianSymmetric ) { + XsUnc.xs[iobs] = xs0[iobs]; + XsUnc.dxsu[iobs] = +sqrt(XsUnc.dxsu[iobs] + XsUnc.dxsl[iobs]); + XsUnc.dxsl[iobs] = -XsUnc.dxsu[iobs]; + } + // Uncertainty is sqrt (separately summed upper and lower squared deviations) + else if ( ePDFUnc == fastNLO::kHessianAsymmetric || ePDFUnc == fastNLO::kHessianAsymmetricMax || ePDFUnc == fastNLO::kHessianCTEQCL68 ) { + XsUnc.xs[iobs] = xs0[iobs]; + XsUnc.dxsu[iobs] = +sqrt(XsUnc.dxsu[iobs]); + XsUnc.dxsl[iobs] = -sqrt(XsUnc.dxsl[iobs]); + if ( ePDFUnc == fastNLO::kHessianCTEQCL68 ) { + XsUnc.dxsu[iobs] = XsUnc.dxsu[iobs]/TOCL90; + XsUnc.dxsl[iobs] = XsUnc.dxsl[iobs]/TOCL90; + } + } + // Central value xs0 is replaced by sampling average; uncertainty is sqrt of sampling variance + else if ( ePDFUnc == fastNLO::kMCSampling ) { + double sumw = XsUnc.xs[iobs]; + double sumw2 = XsUnc.dxsl[iobs]+XsUnc.dxsu[iobs]; + // Undo shift of mean + XsUnc.xs[iobs] = XsUnc.xs[iobs]/nMem + xs0[iobs]; + XsUnc.dxsu[iobs] = +sqrt( (sumw2 - pow(sumw,2)/nMem) / (nMem-1) ); + XsUnc.dxsl[iobs] = -XsUnc.dxsu[iobs]; + } + // HERAPDF not yet implemented + else { + logger.error["GetPDFUncertainty"]<<"ERROR! Selected PDF uncertainty style not yet implemented, exiting."<<endl; + logger.error["GetPDFUncertainty"]<<"ePDFUnc = "<<ePDFUnc<<endl; + exit(1); + } + // Give back +- relative uncertainties + if ( fabs(XsUnc.xs[iobs]) > DBL_MIN ) { + XsUnc.dxsu[iobs] = +fabs(XsUnc.dxsu[iobs] / XsUnc.xs[iobs]); + XsUnc.dxsl[iobs] = -fabs(XsUnc.dxsl[iobs] / XsUnc.xs[iobs]); + } else { + XsUnc.dxsu[iobs] = 0.; + XsUnc.dxsl[iobs] = 0.; + } + logger.debug["GetPDFUncertainty"]<<"iobs = " << iobs << ", dxsl = " << XsUnc.dxsl[iobs] << ", dxsu = " << XsUnc.dxsu[iobs] <<endl; + } + } else { + // Default is no alternative for NNPDF replica uncertainties + vector<LHAPDF::PDFUncertainty> L6PDFUnc = GetPDFUncertaintyLHAPDF(100*erf(1/sqrt(2)),false); + // vector<LHAPDF::PDFUncertainty> L6PDFUnc = GetPDFUncertaintyLHAPDF(); + XsUnc.xs = CalcPDFUncertaintyCentral(L6PDFUnc); + XsUnc.dxsu = CalcPDFUncertaintyRelPlus(L6PDFUnc); + XsUnc.dxsl = CalcPDFUncertaintyRelMinus(L6PDFUnc); + } + + logger.info["GetPDFUncertainty"]<<"Setting PDF member back to default of zero."<<endl; + SetLHAPDFMember(0); + + return XsUnc; +} + + +//______________________________________________________________________________ +// std::vector< std::vector<double> > fastNLOLHAPDF::GetXsUncertaintyVec(const fastNLO::EPDFUncertaintyStyle ePDFUnc, bool lNorm, int iprint) { +std::vector< std::vector<double> > fastNLOLHAPDF::GetPDFUncertaintyVec(const fastNLO::EPDFUncertaintyStyle ePDFUnc, bool lNorm, int iprint) { + XsUncertainty xsUnc = GetXsUncertainty(ePDFUnc, lNorm); + if (iprint > 0) { + string style{PDFUncertaintyStyle_to_string(ePDFUnc)}; + string PDFFile = GetLHAPDFFilename(); + string UncName = " # Relative PDF Uncertainties (" + style + " " + PDFFile + " " + "TODO" + ")"; + fastNLOTools::PrintXSUncertainty(xsUnc, UncName); + } + std::vector<std::vector<double> > xsUncVec; + xsUncVec.resize(3); + xsUncVec[0] = xsUnc.xs; + xsUncVec[1] = xsUnc.dxsu; + xsUncVec[2] = xsUnc.dxsl; + return xsUncVec; +} + + +//______________________________________________________________________________ +// void fastNLOLHAPDF::PrintXsUncertaintyVec(fastNLO::EPDFUncertaintyStyle ePDFUnc, std::string UncName, bool lNorm) { +void fastNLOLHAPDF::PrintPDFUncertaintyVec(fastNLO::EPDFUncertaintyStyle ePDFUnc, std::string UncName, bool lNorm) { + XsUncertainty xsUnc = GetXsUncertainty(ePDFUnc, lNorm); + fastNLOTools::PrintXSUncertainty(xsUnc, UncName); +} + + +// Scale uncertainty (from fastNLOReader) +//______________________________________________________________________________ +XsUncertainty fastNLOLHAPDF::GetXsUncertainty(const fastNLO::EScaleUncertaintyStyle eScaleUnc, bool lNorm, double sclfac) { + return fastNLOReader::GetXsUncertainty(eScaleUnc, lNorm, sclfac); +} +//______________________________________________________________________________ +// std::vector< std::vector<double> > fastNLOLHAPDF::GetXsUncertaintyVec(const fastNLO::EScaleUncertaintyStyle eScaleUnc, bool lNorm, int iprint, double sclfac) { +// return fastNLOReader::GetXsUncertaintyVec(eScaleUnc, lNorm, iprint, sclfac); +std::vector< std::vector<double> > fastNLOLHAPDF::GetScaleUncertaintyVec(const fastNLO::EScaleUncertaintyStyle eScaleUnc, bool lNorm, int iprint, double sclfac) { + return fastNLOReader::GetScaleUncertaintyVec(eScaleUnc, lNorm, iprint, sclfac); +} +//______________________________________________________________________________ +// void fastNLOLHAPDF::PrintXsUncertaintyVec(fastNLO::EScaleUncertaintyStyle eScaleUnc, std::string UncName, bool lNorm, double sclfac) { +// fastNLOReader::PrintXsUncertaintyVec(eScaleUnc, UncName, lNorm, sclfac); +void fastNLOLHAPDF::PrintScaleUncertaintyVec(fastNLO::EScaleUncertaintyStyle eScaleUnc, std::string UncName, bool lNorm, double sclfac) { + fastNLOReader::PrintScaleUncertaintyVec(eScaleUnc, UncName, lNorm, sclfac); +} + + +// Numerical uncertainty (from fastNLOReader) +//______________________________________________________________________________ +XsUncertainty fastNLOLHAPDF::GetXsUncertainty(const fastNLO::ENumUncertaintyStyle eNumUnc, bool lNorm) { + return fastNLOReader::GetXsUncertainty(eNumUnc, lNorm); +} +//______________________________________________________________________________ +// std::vector< std::vector<double> > fastNLOLHAPDF::GetXsUncertaintyVec(const fastNLO::ENumUncertaintyStyle eNumUnc, bool lNorm, int iprint) { +// return fastNLOReader::GetXsUncertaintyVec(eNumUnc, lNorm, iprint); +std::vector< std::vector<double> > fastNLOLHAPDF::GetNumUncertaintyVec(const fastNLO::ENumUncertaintyStyle eNumUnc, bool lNorm, int iprint) { + return fastNLOReader::GetNumUncertaintyVec(eNumUnc, lNorm, iprint); +} +//______________________________________________________________________________ +// void fastNLOLHAPDF::PrintXsUncertaintyVec(fastNLO::ENumUncertaintyStyle eNumUnc, std::string UncName, bool lNorm) { +// fastNLOReader::PrintXsUncertaintyVec(eNumUnc, UncName, lNorm); +void fastNLOLHAPDF::PrintNumUncertaintyVec(fastNLO::ENumUncertaintyStyle eNumUnc, std::string UncName, bool lNorm) { + fastNLOReader::PrintNumUncertaintyVec(eNumUnc, UncName, lNorm); +} diff --git a/v2.6/toolkit/fastnlotoolkit/fastNLOPDFLinearCombinations.cc b/v2.6/toolkit/fastnlotoolkit/fastNLOPDFLinearCombinations.cc new file mode 100644 index 0000000000000000000000000000000000000000..4fd1945d140d4576e899f256872705cd284c7c6b --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/fastNLOPDFLinearCombinations.cc @@ -0,0 +1,551 @@ +#include <cmath> +#include <cstdlib> +#include "fastnlotk/fastNLOConstants.h" +#include "fastnlotk/fastNLOPDFLinearCombinations.h" + +using namespace std; +using namespace fastNLO; + + +fastNLOPDFLinearCombinations::fastNLOPDFLinearCombinations() { + //: PrimalScream("fastNLOPDFLinearCombinations") { +} + + +fastNLOPDFLinearCombinations::~fastNLOPDFLinearCombinations(){ +} + + +//______________________________________________________________________________ + + +vector<double > fastNLOPDFLinearCombinations::CalcPDFLinearCombination(const fastNLOCoeffAddBase* c, const vector<double>& pdfx1, const vector<double>& pdfx2 , bool pdf2IsAntiParticle ) const { + // + // return vector of PDF linear combinations which can be used + // to calculate the cross section. + // + // bool pdf2IsAntiParticle specifies, if pdfx2 still has to be 'inverted' or not + // + + switch ( c->GetNPDF() ) { + case 0: // no PDF involved in process; e.g. e+e- + return vector<double >(); + break; + case 1: // one PDF invovled in process: e.g. DIS + return CalcPDFLCOneHadron(c,pdfx1); + break; + case 2: // two PDFs involved in process: e.g. pp, ppbar + if ( pdf2IsAntiParticle ) { + vector<double> Antipdf2 = MakeAntiHadron(pdfx2); + return CalcPDFLCTwoHadrons(c,pdfx1,Antipdf2); + } + else return CalcPDFLCTwoHadrons(c,pdfx1,pdfx2); + break; + default: + //error["CalcPDFLinearCombination"]<<"Unknown number of PDFs involved in process. NPDF="<<c->GetNPDF()<<endl; + say::error<<"[CalcPDFLinearCombination] Unknown number of PDFs involved in process. NPDF="<<c->GetNPDF()<<endl; + exit(1); + return vector<double >(); + } +} + + +//______________________________________________________________________________ + + +vector<double > fastNLOPDFLinearCombinations::CalcPDFLCOneHadron(const fastNLOCoeffAddBase* c, const vector<double>& pdfx1 ) const { + // + // Calculate PDF linear combinations for DIS processes + // + + // ---- check for ep-DIS ---- // + bool IsONEPDF = ( c->GetNPDF() == 1 ); + bool IsDIS = ( c->GetIPDFdef1() == 2 ); + bool IsNCDIS = ( c->GetIPDFdef2() == 1 ); + bool IsProton = ( c->GetPDFPDG(0) == 2212 ); + if ( IsDIS && c->GetIPDFdef2()==0 ) return CalcPDFDISFromTable(c,pdfx1); + else if ( IsDIS && IsONEPDF && IsNCDIS && IsProton ) return CalcPDFDIS(c,pdfx1); + // ---- unknown process ---- // + else { + //error["CalcPDFLCDIS"]<<"Could not identify process. Printing and exiting"<<endl; + say::error<<"Error. Could not identify process. Printing and exiting"<<endl; + c->Print(-1); + exit(1); + return vector<double >(); + } +} + + + +//______________________________________________________________________________ + + + +vector<double > fastNLOPDFLinearCombinations::CalcPDFLCTwoHadrons(const fastNLOCoeffAddBase* c, const vector<double>& pdfx1, const vector<double>& pdfx2 ) const { + // + // Calculate PDF linear combinations for processes with two hadrons + // + // ----------------------------------------------- + // implement other processes e.g. like this: + // bool IsDrellYan = (...) // check for the identifier(s) (most likely IPDFDef2) + // if ( IsDrellYan ) CalcPDFLinearCombDrellYan(c,pdfx1,pdfx2); + // and implement a new function called CalcPDFLinearCombDrellYan(...) + // ----------------------------------------------- + + // ---- check for jet-productions ---- // + //bool IsTwoPDF = ( c->GetNPDF() == 2 ); + //bool IsTwoIdenticHadrons = (c->GetIPDFdef1() == 3 && c->GetPDFPDG(0) == fabs(c->GetPDFPDG(1)) ); + //bool IsHHJets = ( c->GetIPDFdef2() == 1 ); + //bool IsTTBar = ( c->GetIPDFdef2() == 2 ); + + if ( c->GetIPDFdef2()==0 ) // LiCos are stored in table + return CalcPDFHHCFromTable(c,pdfx1,pdfx2); + else if ( c->GetIPDFdef2()==1 && (c->GetIPDFdef3()==1 || c->GetIPDFdef3()==2)) + return CalcPDFHHC(c,pdfx1,pdfx2); + else if ( c->GetIPDFdef2()==169 ) // default 169 PDF LiCos + return CalcDefaultPDFLiCos(c,pdfx1,pdfx2); + else if ( c->GetIPDFdef2()==121 ) // default 121 PDF LiCos + return CalcDefaultPDFLiCos(c,pdfx1,pdfx2); + else if ( c->GetIPDFdef2()==1 && c->GetIPDFdef3()==3 ) + return CalcPDFThreshold(c,pdfx1,pdfx2); + else if ( c->GetIPDFdef2()==2 ) { // IPDFdef3==0 ! + return CalcPDFttbar(c,pdfx1,pdfx2); + // else if (...) //space for other processes + // ---- (yet) unknown process ---- // + } + else { + say::error<<"[CalcPDFLinearCombination] Could not identify process. Printing and exiting..."<<endl; + say::error<<"PDFFlag1="<<c->GetIPDFdef1()<<endl; + say::error<<"PDFFlag2="<<c->GetIPDFdef2()<<endl; + say::error<<"PDFFlag3="<<c->GetIPDFdef3()<<endl; + c->Print(-1); + exit(1); + return vector<double >(); + } +} + + +//______________________________________________________________________________ + + +vector<double > fastNLOPDFLinearCombinations::MakeAntiHadron(const vector<double>& xfx ) const { + vector < double > xfxbar(13); + for (unsigned int p = 0 ; p<13 ; p++) { + xfxbar[p] = xfx[12-p]; + } + return xfxbar; +} + + +//______________________________________________________________________________ + + +vector<double> fastNLOPDFLinearCombinations::CalcDefaultPDFLiCos(const fastNLOCoeffAddBase* c, const vector<double>& pdfx1 , const vector<double>& pdfx2) const { + //! calculate default 121 or 169 PDF linear combinations + //! + //! Format is following for 121 subprocesses: + //! iSubProc parton1 parton2 + //! 0 -5 -5 #bbarbbar + //! 1 -5 -4 + //! 2 -5 -3 + //! 3 -5 -2 + //! 4 -5 -1 + //! 5 -5 0 + //! 6 -5 1 + //! 7 -5 2 + //! 8 -5 3 + //! 9 -5 4 + //! 10 -5 5 + //! 11 -4 -5 + //! 12 -4 -4 + //! ... + //! 60 0 0 #gg + //! ... + //! 120 5 5 + + //! Format is following for 169 subprocesses: + //! iSubProc parton1 parton2 + //! 0 -6 -6 + //! 1 -6 -5 + //! 2 -6 -4 + //! 3 -6 -3 + //! 4 -6 -2 + //! 5 -6 -1 + //! 6 -6 0 + //! 7 -6 1 + //! 8 -6 2 + //! 9 -6 3 + //! 10 -6 4 + //! 11 -6 5 + //! 12 -6 6 + //! 13 -5 -6 + //! 14 -5 -5 + //! 15 -5 -4 + //! 16 -5 -3 + //! 17 -5 -2 + //! 18 -5 -1 + //! 19 -5 0 + //! 20 -5 1 + //! ... + //! 84 0 0 #gg + //! ... + //! 168 6 6 + int nSubproc = c->GetIPDFdef2(); + vector < double > pdflc(nSubproc); + int istart = nSubproc==121 ? 1 : 0; + int iend = nSubproc==121 ? 12 : 13; + int n=0; + for ( int p1 = istart ; p1<iend ; p1++ ) { + for ( int p2 = istart ; p2<iend ; p2++ ) { + pdflc[n] = pdfx1[p1] * pdfx2[p2]; + n++; + } + } + return pdflc; +} + + +//______________________________________________________________________________ +vector<double> fastNLOPDFLinearCombinations::CalcPDFHHCFromTable(const fastNLOCoeffAddBase* c, const vector<double>& pdfx1 , const vector<double>& pdfx2) const { + // calculate PDF linear combinations as stored in table + if ( c->GetNSubproc() != c->GetIPDFdef3() || c->GetIPDFdef3() != (int)c->GetPDFCoeff().size()) { + say::error["fastNLOPDFLinearCombinations::CalcPDFHHCFromTable"] + <<"IPDFdef3 must be equal to NSubproc. (IPDFdef3="<<c->GetIPDFdef3()<<", NSubproc="<<c->GetNSubproc()<<"). Exiting."<<endl; + exit(1); + } + const vector<vector<pair<int,int> > >& PDFCoeff = c->GetPDFCoeff(); + vector < double > pdflc(PDFCoeff.size()); + for ( unsigned int k = 0 ; k<PDFCoeff.size() ; k++ ){ + for ( unsigned int i = 0 ; i<PDFCoeff[k].size() ; i++ ){ + pdflc[k] += pdfx1[PDFCoeff[k][i].first+6] * pdfx2[PDFCoeff[k][i].second+6]; + } + } + return pdflc; +} + + +//______________________________________________________________________________ +vector<double> fastNLOPDFLinearCombinations::CalcPDFDISFromTable(const fastNLOCoeffAddBase* c, const vector<double>& pdfx1 ) const { + // calculate PDF linear combinations as stored in table + if ( c->GetNSubproc() != c->GetIPDFdef3() || c->GetIPDFdef3() != (int)c->GetPDFCoeff().size()) { + say::error["fastNLOPDFLinearCombinations::CalcPDFDISFromTable"] + <<"IPDFdef3 must be equal to NSubproc. (IPDFdef3="<<c->GetIPDFdef3()<<", NSubproc="<<c->GetNSubproc()<<"). Exiting."<<endl; + exit(1); + } + const vector<vector<pair<int,int> > >& PDFCoeff = c->GetPDFCoeff(); + vector < double > pdflc(PDFCoeff.size()); + for ( unsigned int k = 0 ; k<PDFCoeff.size() ; k++ ){ + for ( unsigned int i = 0 ; i<PDFCoeff[k].size() ; i++ ){ + pdflc[k] += pdfx1[PDFCoeff[k][i].first+6]; + } + } + return pdflc; +} + + +//______________________________________________________________________________ + + +vector<double> fastNLOPDFLinearCombinations::CalcPDFDIS(const fastNLOCoeffAddBase* c, const vector<double>& pdfx1) const { + // + // Internal method. + // CalcPDFLinearComb is used to calculate the + // linear combinations of different parton flavors + // according to the used subprocesses of your + // calculation/table. + // + + int NSubproc = c->GetNSubproc(); + + vector < double > pdflc(3); + pdflc[1] = pdfx1[6]; //gluon + for (int l=0; l<13; l++) { + double temp = (l==6 ? 0.0 : pdfx1[l]); + if (!(l&1)) temp *= 4.; + pdflc[0] += temp; // delta + } + pdflc[0] /= 9.; + if (NSubproc>2) { // only from NLO + for (int l=0; l<6; l++) { + pdflc[2] += pdfx1[5-l] + pdfx1[l+7]; // sigma + } + } + return pdflc; +} + +//______________________________________________________________________________ + + +vector<double> fastNLOPDFLinearCombinations::CalcPDFHHC(const fastNLOCoeffAddBase* c, const vector<double>& pdfx1 , const vector<double>& pdfx2) const { + // + // Internal method. + // CalcPDFLinearComb is used to calculate the + // linear combinations of different parton flavors + // according to the used subprocesses of your + // calculation/table. + // + + int NSubproc = c->GetNSubproc(); + + double SumQ1 = 0; + double SumQB1 = 0; + double SumQ2 = 0; + double SumQB2 = 0; + vector <double> Q1(6); + vector <double> QB1(6); + vector <double> Q2(6); + vector <double> QB2(6); + for (int k = 0 ; k<6 ; k++) { + Q1[k] = pdfx1[k+7]; //! read 1st PDF at x1 + QB1[k] = pdfx1[5-k]; + SumQ1 += Q1[k]; + SumQB1 += QB1[k]; + Q2[k] = pdfx2[k+7];// ! read 2nd PDF at x2 + QB2[k] = pdfx2[5-k]; + SumQ2 += Q2[k]; + SumQB2 += QB2[k]; + } + double G1 = pdfx1[6]; + double G2 = pdfx2[6]; + + // - compute S,A + double S = 0; + double A = 0; + for (int k = 0 ; k<6 ; k++) { + S += (Q1[k]*Q2[k]) + (QB1[k]*QB2[k]); + A += (Q1[k]*QB2[k]) + (QB1[k]*Q2[k]); + } + + //c - compute seven combinations + vector <double> H(7); + H[0] = G1*G2; + H[1] = SumQ1*SumQ2 + SumQB1*SumQB2 - S; + H[2] = S; + H[3] = A; + H[4] = SumQ1*SumQB2 + SumQB1*SumQ2 - A; + H[5] = (SumQ1+SumQB1)*G2; + H[6] = G1*(SumQ2+SumQB2); + + if (NSubproc == 6) { + H[5] += H[6]; + H.resize(6); + } + + // KR: For debugging purposes switch off subprocesses by uncommenting the following line(s) + // H[0] = 0.; + // H[1] = 0.; + // H[2] = 0.; + // H[3] = 0.; + // H[4] = 0.; + // H[5] = 0.; + // H[6] = 0.; + // KR DEBUG + + return H; + +} + + +//______________________________________________________________________________ + + +vector<double> fastNLOPDFLinearCombinations::CalcPDFThreshold(const fastNLOCoeffAddBase* c, const vector<double>& pdfx1 , const vector<double>& pdfx2) const { + // + // Internal method. + // CalcPDFLinearComb is used to calculate the + // linear combinations of different parton flavors + // according to the used subprocesses of your + // calculation/table. + // + /*c--------------------------------------------------------------- + c subprocess id : is = 1 ! q q' --> q q' + c subprocess id : is = 2 ! q qb --> q' qb' + c subprocess id : is = 3 ! q qb --> q qb + c subprocess id : is = 4 ! q q --> q q + c subprocess id : is = 5 ! q qb --> g g + c subprocess id : is = 6 ! q g --> q g + c subprocess id : is = 7 ! g q --> q g + c subprocess id : is = 8 ! g g --> q qb + c subprocess id : is = 9 ! g g --> g g + c subprocess id : is = 10 ! q qb'--> q qb' + c---------------------------------------------------------------*/ + + int NSubproc = c->GetNSubproc(); // MUST BE 10 here ! + + double D1 = pdfx1[+1+6]; + double U1 = pdfx1[+2+6]; + double S1 = pdfx1[+3+6]; + double C1 = pdfx1[+4+6]; + double B1 = pdfx1[+5+6]; + // double T1 = pdfx1[+6+6]; + double G1 = pdfx1[ 0+6]; + double D1b = pdfx1[-1+6]; + double U1b = pdfx1[-2+6]; + double S1b = pdfx1[-3+6]; + double C1b = pdfx1[-4+6]; + double B1b = pdfx1[-5+6]; + // double T1b = pdfx1[-6+6]; + + double D2 = pdfx2[+1+6]; + double U2 = pdfx2[+2+6]; + double S2 = pdfx2[+3+6]; + double C2 = pdfx2[+4+6]; + double B2 = pdfx2[+5+6]; + // double T2 = pdfx2[+6+6]; + double G2 = pdfx2[ 0+6]; + double D2b = pdfx2[-1+6]; + double U2b = pdfx2[-2+6]; + double S2b = pdfx2[-3+6]; + double C2b = pdfx2[-4+6]; + double B2b = pdfx2[-5+6]; + // double T2b = pdfx2[-6+6]; + + vector <double> H(NSubproc); + + + // 'q1q2 --> q1q2' + // q q' + qb qb' + // fqqp + H[0] = D1*(U2+S2+C2+B2) + +U1*(D2+S2+C2+B2) + +S1*(D2+U2+C2+B2) + +C1*(D2+U2+S2+B2) + +B1*(D2+U2+S2+C2) + +D1b*(U2b+S2b+C2b+B2b) + +U1b*(D2b+S2b+C2b+B2b) + +S1b*(D2b+U2b+C2b+B2b) + +C1b*(D2b+U2b+S2b+B2b) + +B1b*(D2b+U2b+S2b+C2b); + + // 'q1q1b --> q2q2b' + // (xlqqb + xlqbq) + // q q + qb qb + double fqq = D1*D2+D1b*D2b + +U1*U2+U1b*U2b + +S1*S2+S1b*S2b + +C1*C2+C1b*C2b + +B1*B2+B1b*B2b; + + // q qb + qb q + double fqqb= D1*D2b + +U1*U2b + +S1*S2b + +C1*C2b + +B1*B2b; + // c qb q + double fqbq= D1b*D2 + +U1b*U2 + +S1b*S2 + +C1b*C2 + +B1b*B2; + + /// g*q pdfs are not working ?!?! no idea why! + // G1*G2 is working + // D1*D2 is working + // ... + ////c q g + qb g + // double fqg = (D1+U1+S1+C1+B1)*G2 + // +(D1b+U1b+S1b+C1b+B1b)*G2; + ////c g q + g qb + // double fgq= G1*(D2+U2+S2+C2+B2) + // +G1*(D2b+U2b+S2b+C2b+B2b); + double fqg = 0; + double fgq= 0; + + + //c q qb' + qb q' + double fqqbp=D1*(U2b+S2b+C2b+B2b) + +U1*(D2b+S2b+C2b+B2b) + +S1*(D2b+U2b+C2b+B2b) + +C1*(D2b+U2b+S2b+B2b) + +B1*(D2b+U2b+S2b+C2b); + + double fqbpq=D1b*(U2+S2+C2+B2) + +U1b*(D2+S2+C2+B2) + +S1b*(D2+U2+C2+B2) + +C1b*(D2+U2+S2+B2) + +B1b*(D2+U2+S2+C2); + + + H[1] = fqqb+fqbq; + H[2] = fqqb+fqbq; + H[3] = fqq; + H[4] = fqqb+fqbq; + + H[5] = fqg; //geht nicht (s.o) + H[6] = fgq; //geht nicht (s.o) + + H[7] = G1*G2; + H[8] = G1*G2; + H[9] = fqbpq+fqqbp; + + // if (is .eq. 1) then + // sub_process = 'q1q2 --> q1q2' + // elseif (is .eq. 2) then + // sub_process = 'q1q1b --> q2q2b' + // elseif (is .eq. 3) then + // sub_process = 'q1q1b --> q1q1b' + // elseif (is .eq. 4) then + // sub_process = 'q1q1 --> q1q1' + // elseif (is .eq. 5) then + // sub_process = 'q1q1b --> gg' + // elseif (is .eq. 6) then + // sub_process = 'qg --> qg' + // elseif (is .eq. 7) then + // sub_process = 'gq --> qg' + // elseif (is .eq. 8) then + // sub_process = 'gg --> qqb' + // elseif (is .eq. 9) then + // sub_process = 'gg --> gg' + // elseif (is .eq. 10) then + // sub_process = 'q1q2b --> q1q2b' + + return H; + +} + + +//______________________________________________________________________________ + + +vector<double> fastNLOPDFLinearCombinations::CalcPDFttbar(const fastNLOCoeffAddBase* c, const vector<double>& pdfx1 , const vector<double>& pdfx2) const { + // + // Calculate pdf-lcs for ttbar cross sections in pp/ppbar + // Used by NNLO generator of Marco Guzzi + // + // pdf[0] = gg + // pdf[1] = qq + // + // DB 24.08.13 + // + + //int NSubproc = c->GetNSubproc(); + int IPDF3 = c->GetIPDFdef3(); + if ( IPDF3==0 ) { //NSubproc==2 + vector <double> pdflc(2); + pdflc[0] += pdfx1[6]*pdfx2[6]; // gg + // qq + for (int k = 0 ; k<6 ; k++) { + pdflc[1] += pdfx1[k]*pdfx2[12-k]; + pdflc[1] += pdfx1[12-k]*pdfx2[k]; + } + return pdflc; + } + else if ( IPDF3==1 ) { //NSubproc==4 + // 0,1: gg, qq (inelastic) + // 2,3: gg, qq (elastic) + vector <double> pdflc(4); + pdflc[0] += pdfx1[6]*pdfx2[6]; // gg + pdflc[2]=pdflc[0]; + // qq + for (int k = 0 ; k<6 ; k++) { + pdflc[1] += pdfx1[k]*pdfx2[12-k]; + pdflc[1] += pdfx1[12-k]*pdfx2[k]; + } + pdflc[3]=pdflc[1]; + return pdflc; + } + + return vector<double>(); + +} diff --git a/v2.6/toolkit/fastnlotoolkit/fastNLOQCDNUMAS.cc b/v2.6/toolkit/fastnlotoolkit/fastNLOQCDNUMAS.cc new file mode 100644 index 0000000000000000000000000000000000000000..e6780610043dda6ed9762b6d48c29bfccf622d74 --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/fastNLOQCDNUMAS.cc @@ -0,0 +1,239 @@ +// Author: Daniel Britzger +// DESY, 20/04/2012 + +////////////////////////////////////////////////////////////////////////// +// // +// fastNLO_reader_2.1.0 // +// D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch // +// // +// The projects web page can be found at: // +// http://projects.hepforge.org/fastnlo // +// // +// If you use this code, please cite: // +// T. Kluge, K. Rabbertz and M. Wobisch, hep-ph/0609285 // +// D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, // +// arXiv:1109.1310 // +// // +////////////////////////////////////////////////////////////////////////// + +////////////////////////////////////////////////////////////////////////// +// +// fastNLOAlphas +// This class inherits the PDF interface from +// fastNLOLHAPDF, while the alpha_s evolution +// is superseeded by the Alphas.h class. +// +////////////////////////////////////////////////////////////////////////// + +#include <cstring> +#include <iostream> +#include <LHAPDF/LHAPDF.h> +#include "fastnlotk/fastNLOLHAPDF.h" +#include "fastnlotk/fastNLOQCDNUMAS.h" + +using namespace std; + + + +//______________________________________________________________________________ +// +fastNLOQCDNUMAS::fastNLOQCDNUMAS(std::string name) : fastNLOLHAPDF(name) { + // Without PDF info use PDG values as default + SetPDGValues(); + // Print out values for checking + // PrintParmValues(); +}; +fastNLOQCDNUMAS::fastNLOQCDNUMAS(std::string name, std::string LHAPDFFile, int PDFMem) : fastNLOLHAPDF(name,LHAPDFFile,PDFMem) { + // Set initial values via LHAPDF6 info system + SetLHAPDFValues(LHAPDFFile, PDFMem); + // Print out values for checking + // PrintParmValues(); +}; + + + +// Getters +double fastNLOQCDNUMAS::GetQMass(int pdgid) const { + if (pdgid < 1 || pdgid > 6 ) { + logger.error["fastNLOQCDNUMAS::GetQMass"]<<"PDG code out of quark index range 1-6! Aborted.\n"; + exit(1); + } + return QMass[pdgid]; +} +double fastNLOQCDNUMAS::GetMz() const { + return fMz; +} +std::string fastNLOQCDNUMAS::GetNScheme() const { + return fnScheme; +} +int fastNLOQCDNUMAS::GetNFlavor(int nflavor) const { + return nflavor; +} +int fastNLOQCDNUMAS::GetNLoop() const { + return fnLoop; +} +double fastNLOQCDNUMAS::GetAlphasMz() const { + return fAlphasMz; +}; + + + +// Setters +void fastNLOQCDNUMAS::SetQMass(int pdgid, double qmass) { + QMass[pdgid] = qmass; +} +void fastNLOQCDNUMAS::SetMz(double Mz) { + fMz = Mz; +} +void fastNLOQCDNUMAS::SetNFlavor(int nflavor) { + fnFlavor = nflavor; +} +void fastNLOQCDNUMAS::SetNLoop(int nloop) { + if ( nloop < 1 || nloop > 3 ) { + logger.error["fastNLOQCDNUMAS::SetNLoop"] << "Illegal no. of loops nloop = " << nloop << + ", aborted! Only 1, 2, or 3 are allowed with QCDNUM." << endl; + exit(11); + } + fnLoop = nloop; +} +void fastNLOQCDNUMAS::SetAlphasMz(double AlphasMz) { + fAlphasMz = AlphasMz; +} + + + +// Combined Setters +void fastNLOQCDNUMAS::SetPDGValues() { + // Initialize with PDG values + QMass[0] = PDG_MD; + QMass[1] = PDG_MU; + QMass[2] = PDG_MS; + QMass[3] = PDG_MC; + QMass[4] = PDG_MB; + QMass[5] = PDG_MT; + fMz = PDG_MZ; + // Variable flavor number scheme + fnFlavor = 0; + // 2-loop alpha_s evolution + fnLoop = 2; + fAlphasMz = PDG_ASMZ; +} + +void fastNLOQCDNUMAS::SetLHAPDFValues(std::string LHAPDFFile, int PDFMem) { + // AlphaS_MZ can vary among PDF members, so we really need the PDF member info from LHAPDF + const LHAPDF::PDFInfo PDFMemInfo(LHAPDFFile, PDFMem); + QMass[0] = PDFMemInfo.get_entry_as<double>("MDown"); + QMass[1] = PDFMemInfo.get_entry_as<double>("MUp"); + QMass[2] = PDFMemInfo.get_entry_as<double>("MStrange"); + QMass[3] = PDFMemInfo.get_entry_as<double>("MCharm"); + QMass[4] = PDFMemInfo.get_entry_as<double>("MBottom"); + QMass[5] = PDFMemInfo.get_entry_as<double>("MTop"); + fMz = PDFMemInfo.get_entry_as<double>("MZ"); + fnScheme = PDFMemInfo.get_entry_as<std::string>("FlavorScheme"); + if ( PDFMemInfo.has_key("AlphaS_NumFlavors") ) { + fnFlavor = PDFMemInfo.get_entry_as<int>("AlphaS_NumFlavors"); + } else { + fnFlavor = PDFMemInfo.get_entry_as<int>("NumFlavors"); + } + // Variable flavor numbers are usually set via Nf = 0 in evolution code. + // Ensure that fnFlavor is maximum Nf for variable flavor number scheme by + // setting quark masses to 10^10. + if ( fnFlavor != 0 && fnFlavor < 3 ) { + logger.error["fastNLOQCDNUMAS::SetLHAPDFValues"] << "Less than 3 flavors is not supported! Aborted." << endl; + exit(11); + } + if ( fnScheme == "variable" && fnFlavor < 6 ) { + QMass[5] = 1.E10; + if ( fnFlavor < 5 ) QMass[4] = 1.E10; + if ( fnFlavor < 4 ) QMass[3] = 1.E10; + fnFlavor = 0; + } + if ( PDFMemInfo.has_key("AlphaS_OrderQCD") ) { + fnLoop = PDFMemInfo.get_entry_as<int>("AlphaS_OrderQCD") + 1; + } else { + fnLoop = PDFMemInfo.get_entry_as<int>("OrderQCD") + 1; + } + if ( fnLoop > 3 ) { + logger.error["fastNLOQCDNUMAS::SetLHAPDFValues"] << "More than 3 loops is not supported! Aborted." << endl; + exit(11); + } + fAlphasMz = PDFMemInfo.get_entry_as<double>("AlphaS_MZ"); +} + + + +// Printers +void fastNLOQCDNUMAS::PrintParmValues() { + for ( int i = 0; i<6; i++ ) { + cout << "fQMass[" << i << "] = " << QMass[i] << endl; + } + cout << "fMz = " << fMz << endl; + cout << "fnScheme = " << fnScheme << endl; + cout << "fnFlavor = " << fnFlavor << endl; + cout << "fnLoop = " << fnLoop << endl; + cout << "fAlphasMz = " << fAlphasMz << endl; +} + + + +// Initialisation +void fastNLOQCDNUMAS::InitEvolveAlphas() { + // Ensure reasonable values are set + // TODO Really neccessary? + char filename[] = " "; + int len_filename = strlen(filename); + int lun = 6; + qcinit_(&lun, filename, len_filename); + + // LHAPDF LO=0 while QCDNUM LO=1 + int iord = fnLoop; + + // TODO Set correct Array in q2. maybe fnloreader. getQScale... + double qarr[2] = {1.0, 1000000}; + double wgt[2] = {1.0, 1.0}; + // Length of array + int n= 2; + // Number of grid points + int nqin = 140; + // Real number generated grid points + int nqout = 0; + // Create Q2 Grid + gqmake_(qarr, wgt, &n, &nqin, &nqout); + setord_(&iord); + double r2 = fMz * fMz; + setalf_(&fAlphasMz, &r2); + // Get Indices of Flavor Thresholds (currently just the Q mass) + double Q2Mass[6]; + for (int i = 0; i < 6; i++) + Q2Mass[i] = QMass[i]*QMass[i]; + + int iqc = iqfrmq_(&Q2Mass[3]) ; + int iqb = iqfrmq_(&Q2Mass[4]); + int iqt = iqfrmq_(&Q2Mass[5]); + + //cout << iqc << " " << iqb << " " << iqt << endl; + //When fNFlavor = 0 VFNS if >0 then FFNS + //iqc,b,t are neglected if fnflavor =0 + setcbt_(&fnFlavor, &iqc, &iqb, &iqt); +} + +// Evolution +double fastNLOQCDNUMAS::EvolveAlphas(double Q) const { + // + // Implementation of Alpha_s evolution as function of Mu_r only. + // + double mu2 = Q*Q; + int ierr = 9876; + // Number of really used flavors + int nf = 9; // KR: Why 9 ???!!! + double as = asfunc_(&mu2, &nf , &ierr); + if (ierr > 0) + logger.error["EvolveAlphas"]<<"Alphas evolution failed. ierr = "<<ierr<<", Q = "<<Q<<endl; + return as; +} + +// Calculation +void fastNLOQCDNUMAS::CalcCrossSection() { + InitEvolveAlphas(); + fastNLOLHAPDF::CalcCrossSection(); +} diff --git a/v2.6/toolkit/fastnlotoolkit/fastNLOReader.cc b/v2.6/toolkit/fastnlotoolkit/fastNLOReader.cc new file mode 100644 index 0000000000000000000000000000000000000000..d80cbc9d418ae056da86d891eec4ed729b2065af --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/fastNLOReader.cc @@ -0,0 +1,3755 @@ +// Author: Daniel Britzger +// DESY, 08/2013 +// Updated: Klaus Rabbertz +// KIT, 01/2014 + +//______________________________________________________________________________ +/** + --- fastNLO user: Hello! + When using fastNLO for the first time, please read through the + documentation and comments carefully in order to calculate + a reasonable cross section. + All comments that start with '--- fastNLO user:' are intended as a + short documentation for various options, that can be changed by you. + + In fastNLO version 2, there are two different types of tables. + Although internally they are implemented slightly differently, both are called + v2 for their larger flexiblity compared to version 1.4. + The simpler ones, v2.0, are extended versions of this previous format + v1.4 from which a conversion into v2.0 is possible, but without profiting + of the improvements, of course. + The second type of tables, v2.1, are called 'flexible-scale' tables + which store the matrix elements in a scale independent way and + also the scale variables are stored more generally. + These tables give you the possibility to change in addition to the renormalization + also the factorization scale by arbitrary factors and have the possiblity to + change the formula according to which the scale is derived. + + Please chek (see point 2 below), which type of table you are using and + then refer to the comments and functions suitable for this fastNLO table. + + + 0. This Introduction + 1. Instantiation of fastNLO classes + a. basic FastNLOUser class + b. FastNLOLHAPDF + c. fastNLOAlphas + d. FastNLOCRunDec + 2. Print table information + 3. Calculate cross sections + 4. Modify PDF settings for LHAPDF-interfaces + 5. Change alphas values + 6. Units of the calculation + 7. Contributions and order of calculation + 8. Scale settings + 9. Flexible-scale concept + 10. Access cross section and k-factor + 11. Print-out cross section + 12. Verbosity level + 13. FastNLO for jet-production diffractive DIS + a. Introduction + b. The FastNLOUser.h class + c. Calculate diffractive cross sections. + d. Diffractive DIS example code + 14. Example code + 15. Example analysis + + + 1a. + ------- Initialize table for fastNLOReader ------- // + --- fastNLO user: + In addition to a fastNLO table two additional ingredients are required: + - the PDF set and + - the alpha_s evolution to be used + These can be freely defined by the user by making an instance of your class + that derives from the FastNLOReader class and passing the name of the + fastNLO table as an argument, e.g.: + FastNLOUser* fnlo = new FastNLOUser( tablename ); + + To facilitate using fastNLOReader a number of predefined user classes + of FastNLOUser exist, interfacing to + LHAPDF (PDF and alpha_s, see M. Whalley, D. Bourilkov, R. Group, hep-ph/0508110), + GRV Alphas (default alpha_s evolution used in fastNLO for crosschecks, + based on M. Glueck, E. Reya, A. Vogt, Eur.Phys.J.C5:461-470,1998, hep-ph/9806404; + PDF from LHAPDF), + CRunDec (alpha_s evolution up to 4 loops, see B. Schmidt, M. Steinhauser, + Comput.Phys.Commun. 183 (2012) 1845-1848, arXiv:1201.6149; + PDF from LHAPDF). + + Their use is explained in the following. + + + 1b. + Initialize with PDF from LHAPDF and corresponding alphas value and + evolution for this PDF set. A change of the alpha_s value is only + possible through the choice of the PDF file/set and member, e.g. CT10as.LHgrid + FastNLOLHAPDF fnlolhapdf( tablename , PDFFile , PDFMember ); + + Print information from LHAPDF + fnlolhapdf.PrintPDFInformation(); + int npdf = fnlolhapdf.GetNPDFMembers(); + int imaxpdf = fnlolhapdf.GetNPDFMaxMember(); // imaxpdf = npdf - 1 + + ( Please note that because of a feature in gfortran the output via your LHAPDF + installation may be asynchronous to the C++ output. Usually, the gfortran + output comes at the end after all C++ output, but this depends on your actual system. + You can try to set the environment variable GFORTRAN_UNBUFFERED_ALL to yes + in your shell to get it synchronized. Keep your fingers crossed. ) + + + 1c. + Initialize with PDF from LHAPDF and GRV alphas evolution (default) + fastNLOAlphas fnlo( tablename , PDFFile , PDFMember ); + + Change the alpha_s value through + fnlo.SetAlphasMz(0.1179); + Change values of the alpha_s evolution code through: + Alphas::SetNf(5); + Alphas::SetMz(91.70); + For all options see Alphas.h + + + 1d. + Initialize with PDF from LHAPDF and RunDec alpha_s evolution. + FastNLOCRunDec fnlo( tablename , PDFFile , PDFMember ); + Change the alpha_s value for all instances, by: + fnlo.SetAlphasMz(0.1179); + Change values of the alpha_s evolution code through: + fnlo.SetNf(5); + fnlo.SetNloop(4); + fnlo.SetMz(91.70); + + (Note: CTEQ6M: M_Z = 91.70, alpha_s(M_Z) = 0.1179; + PDG 2012: M_Z = 91.1876, alpha_s(M_Z) = 0.1184) + + + + 2. + ---- Table information ---- // + --- fastNLO user: For a comprehensive insight into the fastNLO variables + you can use: + fnlo.Print(0); + + + + 3. + ---- (Re-)calculate cross sections ---- // + --- fastNLO user: Before you can access the fastNLO computed + cross sections, you always have to call CalcCrossSection()! + So, before accessing the cross sections, please call: + fnlo.CalcCrossSection(); + + + 4. + ------- Select another PDF set and member ------- // + --- fastNLO user: You can select another PDF set and member here. + With LHAPDF, you can set the PDF set and member using e.g.: + fnlo.SetLHAPDFFilename( string PDFFile ); + fnlo.SetLHAPDFMember( int PDFMember ); + + + + 5. + ------- Changing the alpha_s(M_Z) value and/or evolution ------- // + --- fastNLO user: + The alpha_s evolution is provided by the code of the chosen + interface, e.g. GRV alpha_s for the fnlo instance here. + The value of alpha_s(M_Z) can be changed from its default PDG 2012 values + like this: + + fnlo.SetAlphasMz(0.1179); + + (Note: CTEQ6M: M_Z = 91.70, alpha_s(M_Z) = 0.1179; + PDG 2012: M_Z = 91.1876, alpha_s(M_Z) = 0.1184) + + To use a different alpha_s evolution code one has to interface it. + Here, for example, we use the above-mentioned CRunDec code: + + FastNLOCRunDec fnlocrundec( tablename , PDFFile , 0 ); + fnlocrundec.SetMz(91.1876); + fnlocrundec.SetAlphasMz(0.1184); + fnlocrundec.CalcCrossSection(); + + + 6. + ------- Set the units of your calculation (kPublicationUnits or kAbsoluteUnits) ------- // + --- fastNLO user: You can choose the units in which you want + to access (or print) your cross-section results. + There are two possibilites: + - The default option is 'publication units', i.e. divided by + bin widths if done so in the relevant publication + fnlo.SetUnits(fastNLO::kPublicationUnits); + - The other option is 'absolute' units in barn, but still in + the same magnitude as in the publication (e.g. pb, fb, nb, etc.) + + fnlo.SetUnits(kAbsoluteUnits); // in namespace fastNLO + or + fnlo.SetUnits(kPublicationUnits); // in namespace fastNLO + + + 7. + ------- Set the calculation order (if available) ------- // + --- fastNLO user: Each fastNLO table comes typically with + various contributions. + Currently, five different types of contributions have been tested. + Three can be combined to give a scale, PDF and alpha_s dependent + cross-section, one is a fixed multiplicative correction and, at last, + also data points with uncertainties might be included in a table. + For calculating a cross section, by default only the LO & NLO contributions + are used. However, each contribution can be swiched on or off separately. + Please make sure to avoid combinations that do not make sense, + e.g. 2-loop threshold corrections with LO pQCD. + + For switching a contribution on/off, its type must be known: + - kFixedOrder -> Fixed order calculation (in alpha_s) + - kThresholdCorrection -> Threshold corrections + - kElectroWeakCorrection -> Electroweak corrections (not derived yet) + - kNonPerturbativeCorrections -> Non-perturbative corrections|Hadronisation corrections + plus one must know the 'Id' of this contribution, which can be printed e.g. + by calling + fnlo.PrintContributionSummary(); + + To switch a contribution on/off please use: + bool SetOn = fnlo.SetContributionON( contrib, Id, on/off ) + and in particular for switching on check on the return value SetOn that it actually worked. + Here, 'contrib' is not the contribution number, but the type + as given above: kFixedOrder, ... + Within each type the contributions are counted separately starting with Id=0. + The total number of contributions then counts all contributions of all types. + + + 8. + ------- Selecting the scale treatment ------- // + --- fastNLO user: The simplest way to modify the predefined renormalization and + factorization scales is to provide a scale factor by which the default scale + is multiplied. These factors must be positive and not too small (> 1.e-6). + Otherwise they can in principal (within reason) be set arbitrarily for + flexible-scale tables. For the normal v2 tables the choice of factors for the + factorization scale is limited to some fixed values, usually 0.5, 1.0, and 2.0 + plus sometimes also 0.25, see the respective table information. + Note: If threshold corrections are available and switched on for evaluation, + the scale factors for the renormalization and factorization scale must be identical. + + The function call to set the scale factors is: + bool SetScales = fnlo.SetScaleFactorsMuRMuF(xmur, xmuf); + where xmur, xmuf are the scale factors. Check the return value in order to verify + that the selected scale factors could actually be activated. + + The return value of this function call is boolean and returns false, if the + the requested scale factors can not be chosen. In this case, the last legal + values remain unchanged. + + + 9. + ----- Additional possibilities for scales in 'flexible-scale' tables (v2.1) ----- // + First check, if your table is a flexible-scale table or not + bool IsFlex = fnlo.GetIsFlexibleScaleTable() + You can choose a function to define how + to compute the renormalization and factorization scale. + Each 'flexible-scale' table comes with two variables that can be used + for calculating the scales. They are called scale1 and scale2 and + at least one needs to have a dimension in "GeV". + DIS tables have typically stored scale1 = Q and scale2 = pt, while + hadron-hadron tables might have for example scale1 = pt and scale2 = y. + Other settings are imaginable. Please check, which obervables exactly + are stored as scale variables! + + There are two possibilities, how you can define your scale now: + + - use predefined functions using e.g. + fnlo.SetMuRFunctionalForm(fastNLO::EScaleFunctionalForm); + for changing the calculation of the renormalizatoin scale. + Please refer to FastNLOReader.h for all options of EScaleFunctionalForm. + + - or you can pass a function pointer to FastNLOReader using + fnlo.SetExternalFuncForMuR( double (*Func)(double,double) ); + to pass any function using scale1 and scale2 to fastNLO. + + WARNING: Some choice had to be made for the default settings. Please think + carefully about the choice of the scales ... + Default setting for DIS tables: + - mu_r: kQuadraticMean -> mu_r = sqrt( (Q^2 + scale2^2)/2. ) // because scale1=Q! + - mu_f: kScale1 -> mu_f = Q + Default setting for pp and ppbar tables: + - mu_r: kScale1 -> mu_r = scale1 + - mu_f: kScale1 -> mu_f = scale1 + + Valid calls are e.g.: + fnlo.SetMuRFunctionalForm(fastNLO::kScale1); // set function how to calculate mu_r from scale1 and scale2 + fnlo.SetMuFFunctionalForm(fastNLO::kScale1); // set function how to calculate mu_f from scale1 and scale2 + fnlo.SetMuRFunctionalForm(fastNLO::kQuadraticMean); // set function how to calculate mu_r from scale1 and scale2 + fnlo.SetMuFFunctionalForm(fastNLO::kScale1); // set function how to calculate mu_f from scale1 and scale2 + fnlo.SetExternalFuncForMuR( &Function_Mu ); // set external function to calculate mu_r from scale1 and scale2 + fnlo.SetMuRFunctionalForm(fastNLO::kExpProd2); // set function how to calculate mu_f from scale1 and scale2 + fnlo.SetMuFFunctionalForm(fastNLO::kExpProd2); // set function how to calculate mu_f from scale1 and scale2 + + INFO: All above-mentioned scale changing functions automatically perform a refilling of the + fastNLO internal PDF cache. To switch it off you can use a boolean, like: + fnlo.SetMuFFunctionalForm(fastNLO::kScale1 , false ); + + + 10. + ---- Access cross sections ---- // + --- fastNLO user: To access the cross section from fastNLO + you should use: + vector < double > xs = fnlo.GetCrossSection(); + If you want to have a pointer to an array of numbers you might use + vector < double > xs = fnlo.GetCrossSection(); + double* cs = &xs[0]; + + + 11. + ---- Printing ---- // + --- fastNLO user: For an easy overview of your cross section calculation + you might use the following print methods: + fnlo.PrintCrossSections(); + + + 12. + ------- Set fastNLOReader verbosity ------- // + --- fastNLO user: + The following line sets the verbosity level of fastNLOReader + Six different levels are implemented, the default is INFO: + DEBUG, MANUAL, INFO, WARNING, ERROR, SILENT + SetGlobalVerbosity(WARNING); + Alternatively, a specific verbosity level can be set + to any instance: + fnlo.SetVerbosity(level); + + + 13. + ------- FastNLO for jets in diffractive DIS ------- // + 13a. + FastNLO is also applicable to jets in diffractive DIS. + The calculation of jet cross sections in diffractive + DIS is performed by adapting the slicing method, + where the xpom integration is performed during the evaluation + of the fastNLO table. The differential cross section + in xpom is calcualted by a rescaling of the center-of-mass + energy of the incident hadron. + The boundaries of the integration interval are automatically + smoothed out. + More details on the applied method can be found on the + website, i.e. + http://fastnlo.hepforge.org/docs/talks/20120912_fastNLOv2_DBritzger_DiffractiveFastNLO.pdf + + 13b. + --- fastNLO user: + In order to calculate diffractive DIS processes, the user + has to provide a diffractive PDF, as well as an alpha_s + evolution code. Both pieces have to be implemented in the + FastNLODiffUser.h file, where the functions + double FastNLODiffUser::EvolveAlphas(double Q) + bool FastNLODiffUser::InitPDF() + vector<double> FastNLODiffUser::GetDiffXFX(double xpom, double zpom, double muf) + have to be implemented in a reasonable way. + Some examples and more help on this, can provide the authors. + The implementation of the alpha_s evolution code can also be + adapted e.g. from fastNLOAlphas.h or FastNLOCRunDec.h. + + 13c. + The calculation of diffractive cross sections performs + an integration of xpom. This is done by a simple Riemann integration. + Four possibilities to define the slicing are implemented. + 1. Use a logarithmic xpom slicing + Set the number of slices, the xpom_min and xpom_max range, e.g.: + fnlodiff->SetXPomLogSlicing( 12, pow(10.,-2.3), pow(10.,-1) ); + 2. Use a linear xpom slicing + fnlodiff->SetXPomLinSlicing( 12, 0.0, 0.1 ); + 3. Use an exponential xpom slicing + 4. Set your individual xpom slicing. This basically also allows + to implement a MC integration. + nStep: number of slices + xpom[]: central value of each slice + dxpom[]: width of each slice + fnlodiff->SetXPomSlicing(int nStep, double* xpom, double* dxpom); + + To calculate and access the cross sections use: + vector<double> xs = fnlodiff->GetDiffCrossSection(); + + If you want to calculate cross sections as fucntion of xpom, + you have to calculate each xpom bin by setting the 'xpomslicing', and + summing all bins by yourself. + WARNING: + In this case, one always have to call SetUnits(fastNLO::kAbsoluteUnits) ! + + Tipp 1: Some brief studies showed, that already with ca. 10 slices, the + cross section converges sufficiently fast. The linear slicing is + preferred over the logarithmic slicing. + Tipp 2: + Choosing Q2 (or pT) as factorization scale increases the speed significantly. + + 13d. + In the following example code the class description FastNLODiffUser may be + replaced by a specific interface class to a diffractive PDF (see 13b). This class + has to be added to the include statements above, e.g.: + #include "fastnlo/FastNLODiffUser.h" + Some example code could look like (uncomment the following lines, + comment out the other examples under 14. and 15., and recompile): + + // ---- Example code for jet-cross sections in diffractive DIS ---- // + // we setup an instance of the FastNLODiffUser class + FastNLODiffUser fnlodiff( tablename ); + + // If you want to receive your cross section in + // pb/GeV or in pb. Here we choose pb/GeV + fnlodiff.SetUnits(fastNLO::kPublicationUnits); + + // Set the xpom integration interval and method + fnlodiff.SetXPomLinSlicing( 12, 0.0, 0.1 ); + + // Optional: + // make your scale definition (see above) + fnlodiff.SetMuFFunctionalForm(kQuadraticSum); + fnlodiff.SetMuRFunctionalForm(kQuadraticSum); + fnlodiff.SetScaleFactorsMuRMuF(1.0,1.0); + + // calculate and access the cross section + vector<double> xs = fnlodiff.GetDiffCrossSection(); + // Print it + fnlodiff.PrintCrossSections(); + // ------------------------------------------------------------------ // + + + 14. + ---- Example of a cross section calculation with some nice standardized output + fastNLOLHAPDF fnlo(tablename,"cteq6m.LHpdf",0); + fnlo.CalcCrossSection(); + +*/ +//______________________________________________________________________________ + +// Precompiler variables for conditional compilation are generated and +// stored automatically in config.h via AC_DEFINE statements in configure.ac. +// To enable conditional compilation, e.g. using HAVE_LIBZ, this config file +// MUST be the very first one to be included with +#include <config.h> + +#include <algorithm> +#include <cfloat> +#include <cmath> +#include <string> +#include "fastnlotk/fastNLOConstants.h" +#include "fastnlotk/fastNLOReader.h" +#include "fastnlotk/fastNLOTools.h" +#include "fastnlotk/fastNLOCoeffAddFix.h" +#include "fastnlotk/fastNLOCoeffAddFlex.h" +#include "fastnlotk/fastNLOLHAPDF.h" +#ifdef WITH_HOPPET +#include "fastnlotk/HoppetInterface.h" +#endif + +using namespace std; +using namespace fastNLO; +using namespace say; + +//______________________________________________________________________________ +fastNLOReader::fastNLOReader() : fastNLOTable() { + logger.SetClassName("fastNLOReader"); + fUnits = fastNLO::kPublicationUnits; + fMuRFunc = fastNLO::kScale1; + fMuFFunc = fastNLO::kScale1; + fPDFSuccess = false; + fAlphasCached = 0.; + fPDFCached = 0.; + fUseHoppet = false; +} + +//______________________________________________________________________________ + +fastNLOReader::fastNLOReader(string filename) : fastNLOTable(filename) { + // say::SetGlobalVerbosity(say::toVerbosity()[verbosity]); + logger.SetClassName("fastNLOReader"); + logger.debug["fastNLOReader"]<<"New fastNLOReader reading filename="<<filename<<endl; + fUnits = fastNLO::kPublicationUnits; + fMuRFunc = fastNLO::kScale1; + fMuFFunc = fastNLO::kScale1; + fPDFSuccess = false; + fAlphasCached = 0.; + fPDFCached = 0.; + fUseHoppet = false; + SetFilename(filename); +} + +//______________________________________________________________________________ + +fastNLOReader::fastNLOReader(const fastNLOTable& table) : fastNLOTable(table) { + // say::SetGlobalVerbosity(say::toVerbosity()[verbosity]); + logger.SetClassName("fastNLOReader"); + fUnits = fastNLO::kPublicationUnits; + fMuRFunc = fastNLO::kScale1; + fMuFFunc = fastNLO::kScale1; + fPDFSuccess = false; + fAlphasCached = 0.; + fPDFCached = 0.; + fUseHoppet = false; + SetFilename("null"); +} + +//______________________________________________________________________________ +fastNLOReader::~fastNLOReader(void) { +} + +//______________________________________________________________________________ +fastNLOReader::fastNLOReader(const fastNLOReader& other) : + fastNLOTable(other), + ffilename(other.ffilename), fScalevar(other.fScalevar), fScaleFacMuR(other.fScaleFacMuR), + fUnits(other.fUnits), fPDFSuccess(other.fPDFSuccess), fPDFCached(other.fPDFCached), + fAlphasCached(other.fAlphasCached), Fct_MuR(other.Fct_MuR), Fct_MuF(other.Fct_MuF), + XSection(other.XSection), dXSection(other.dXSection), QScale(other.QScale), + XSectionRef(other.XSectionRef), XSectionRefMixed(other.XSectionRefMixed), + XSectionRef_s1(other.XSectionRef_s1), XSectionRef_s2(other.XSectionRef_s2) +{ + //! Copy constructor + // say::SetGlobalVerbosity(say::toVerbosity()[verbosity]); + OrderCoefficients(); // initialize pointers to fCoeff's +} + + + +//______________________________________________________________________________ +void fastNLOReader::SetFilename(string filename) { + logger.debug["SetFilename"]<<"New filename="<<filename<<endl; + ffilename = filename; + OrderCoefficients(); + SetCoefficientUsageDefault(); + InitScalevariation(); +} + + +//______________________________________________________________________________ +void fastNLOReader::OrderCoefficients() { + logger.debug["OrderCoefficients"]<<endl; + + // Initialize Coeff's + fastNLOCoeffBase* Coeff_LO = NULL; + fastNLOCoeffBase* Coeff_NLO = NULL; + fastNLOCoeffBase* Coeff_NNLO = NULL; + fastNLOCoeffBase* Coeff_THC1 = NULL; + fastNLOCoeffBase* Coeff_THC2 = NULL; + fastNLOCoeffBase* Coeff_NPC1 = NULL; + + // run over all coefficient tables, identify and sort contributions. + for (unsigned int i= 0; i<fCoeff.size() ; i++) { + fastNLOCoeffBase* c = GetCoeffTable(i); + // give contribution a reasonable name + //char nbuf[400]; + // sprintf(nbuf,"Coeff. %s %s %s", + // _ContrName[c->GetIContrFlag1()-1].c_str(),_OrdName[c->GetIContrFlag1()-1][c->GetIContrFlag2()-1].c_str(),_fNSDep[c->GetNScaleDep()].c_str()); + // c->SetName(nbuf); + + // data + if (fastNLOCoeffData::CheckCoeffConstants(c,true)) { + logger.debug["OrderCoefficients"]<<"Found data table."<<endl; + } + // additive contributions + else if (fastNLOCoeffAddBase::CheckCoeffConstants(c,true)) { + // Reference table + if (((fastNLOCoeffAddBase*)c)->IsReference()) { + logger.debug["OrderCoefficients"]<<"Found reference table."<<endl; + } + // Additive fixed order (perturbative) contribution + else if (c->GetIContrFlag1() == 1) { + if (c->IsLO()) { + logger.debug["OrderCoefficients"]<<"Found LO contribution."<<endl; + Coeff_LO = c; + } else if (c->IsNLO()) { + logger.debug["OrderCoefficients"]<<"Found NLO contribution."<<endl; + Coeff_NLO = c; + } else if (c->IsNNLO()) { + logger.debug["OrderCoefficients"]<<"Found NNLO contribution."<<endl; + Coeff_NNLO = c; + } else { + logger.error["OrderCoefficients"]<<"Found unknown fixed-order contribution, aborting!"<<endl; + exit(1); + } + } + // Threshold corrections + else if (c->GetIContrFlag1() == 2) { + if (c->GetIContrFlag2() == 1) { + logger.debug["OrderCoefficients"]<<"Found THC1 contribution."<<endl; + Coeff_THC1 = c; + } else if (c->GetIContrFlag2() == 2) { + logger.debug["OrderCoefficients"]<<"Found THC2 contribution."<<endl; + Coeff_THC2 = c; + } else { + logger.error["OrderCoefficients"]<<"Threshold correction implemented only up to 2-loops, aborting!\n"; + exit(1); + } + } + } + // multiplicative corrections + else if (fastNLOCoeffMult::CheckCoeffConstants(c,true)) { + // Non-perturbative corrections + if (c->GetIContrFlag1()==4) Coeff_NPC1 = c; + else { + logger.error["ReadTable"]<<"Further multiplicative corrections not yet implemented, stopped!\n"; + exit(1); + } + } + } + + // Delete and re-initialize lists for BlockB's + const int defsize = 10; + BBlocksSMCalc.clear(); + BBlocksSMCalc.resize(defsize); + + // Assign non-perturbative corrections, switch off by default + if (Coeff_NPC1) { + BBlocksSMCalc[kNonPerturbativeCorrection].push_back(Coeff_NPC1); + } + + // Assign threshold corrections, switch off by default + if (Coeff_THC1) { + BBlocksSMCalc[kThresholdCorrection].push_back(Coeff_THC1); + } + if (Coeff_THC2) { + BBlocksSMCalc[kThresholdCorrection].push_back(Coeff_THC2); + } + + // Assign fixed order calculations (LO must be [0], because second index corresponds to ESMOrder enum) + // Push null pointer if no LO ...! + BBlocksSMCalc[kFixedOrder].push_back(Coeff_LO); + if (Coeff_LO) { + // BBlocksSMCalc[kFixedOrder].push_back(Coeff_LO); + } else { + warn["OrderCoefficients"]<<"Could not find any LO Calculation!"<<endl; + warn["OrderCoefficients"]<<"Separate evaluation of higher-order contributions currently in testing phase, beware of problems."<<endl; + warn["OrderCoefficients"]<<"Not all features will be available in this case, but a straight calculation should be possible. Use with care!"<<endl; + } + // Push null pointer if no NLO ...! + BBlocksSMCalc[kFixedOrder].push_back(Coeff_NLO); + if (Coeff_NLO) { + // BBlocksSMCalc[kFixedOrder].push_back(Coeff_NLO); + } else { + info["OrderCoefficients"]<<"Could not find any NLO calculation."<<endl; + } + // Push null pointer if no NNLO ...! + BBlocksSMCalc[kFixedOrder].push_back(Coeff_NNLO); + if (Coeff_NNLO) { + // BBlocksSMCalc[kFixedOrder].push_back(Coeff_NNLO); + } else { + info["OrderCoefficients"]<<"Could not find any NNLO calculation."<<endl; + } + + //int iprint = 2; + //Print(iprint); +} + + +//______________________________________________________________________________ +void fastNLOReader::SetCoefficientUsageDefault() { + //! Switch on LO, NLO, and NNLO contribution. + //! Deactivate all other contributions + + // Switch all off + for (unsigned int j = 0 ; j<BBlocksSMCalc.size() ; j++) { + for (unsigned int i = 0 ; i<BBlocksSMCalc[j].size() ; i++) { + if (BBlocksSMCalc[j][i]) BBlocksSMCalc[j][i]->Enable(false); + } + } + // If filled, activate LO, NLO, and NNLO + if (BBlocksSMCalc[kFixedOrder][kLeading]) BBlocksSMCalc[kFixedOrder][kLeading]->Enable(); //LO + if (BBlocksSMCalc[kFixedOrder][kNextToLeading]) BBlocksSMCalc[kFixedOrder][kNextToLeading]->Enable(); //NLO + if (BBlocksSMCalc[kFixedOrder][kNextToNextToLeading]) BBlocksSMCalc[kFixedOrder][kNextToNextToLeading]->Enable(); //NNLO +} + + +//______________________________________________________________________________ +void fastNLOReader::InitScalevariation() { + //! Initialize to scale factors of (MuR,MuF) = (1,1) + logger.debug["InitScalevariation"]<<"Try to initialize scale factors MuR and MuF to (1,1)."<<endl; + if (!GetIsFlexibleScaleTable()) { + bool SetScales = SetScaleFactorsMuRMuF(1.,1.); + if (!SetScales) { + logger.error["InitScalevariation"]<<"Could not find scale variation with scale factor 1.0, stopped!"<<endl; + exit(1); + } + } else { + // this is a MuVar table. You can vary mu_f and mu_r independently by any factor + // and you can choose the functional form of mu_f and mu_r as functions of + // scale1 and scale1 (called partly scaleQ2 and scalePt). + fScaleFacMuR = 1.; + fScaleFacMuF = 1.; + fastNLOCoeffAddFlex* cNLO = (fastNLOCoeffAddFlex*)B_NLO(); + if (!cNLO) cNLO = (fastNLOCoeffAddFlex*)B_Any(); + + // ---- DIS ---- // + if (cNLO->GetNPDF() == 1) { + SetFunctionalForm(kQuadraticMean , kMuR); + SetFunctionalForm(kScale1 , kMuF); + } + // ---- HHC --- // + else if (cNLO->GetNPDF() == 2) { + SetFunctionalForm(kScale1 , kMuR); + SetFunctionalForm(kScale1 , kMuF); + } else { + logger.error<<"Unknown process.\n"; + exit(1); + } + } +} + + +//______________________________________________________________________________ +bool fastNLOReader::SetScaleVariation(int scalevar) { + //! ------------------------------------------------ + //! NEVER call this setter directly, only via + //! the method SetScaleFactorsMuRMuF! + //! + //! Set the scale variation table to correspond + //! to the selected MuF factor if possible. + //! Usually, v2.0 tables are stored for multiple + //! MuF settings like factors of 0.5, 1.0 and 2.0 + //! times the nominal scale, e.g. + //! scalevar -> scalefactor + //! '0' -> 1.0 + //! '1' -> 0.5 + //! '2' -> 2.0 + //! If tables for multiple MuF factors are present, + //! then they MUST correspond to exactly the same + //! factors in the SAME order for all such contrbutions, + //! e.g. NLO plus 2-loop threshold corrections! + //! + //! This method returns true if the chosen + //! 'scalevar' table exists for all selected + //! contributions with extra scale tables. + //! ------------------------------------------------ + logger.debug["SetScaleVariation"]<<"Setting to scalevar table "<<scalevar<<endl; + + if (GetIsFlexibleScaleTable()) { + logger.warn["SetScaleVariation"]<<"WARNING! This is a flexible-scale table. MuF scale variation tables are not necessary!"<<endl; + logger.warn["SetScaleVariation"]<<"You should not have called this method for the active table. Nothing changed!"<<endl; + return false; + } + + // Check for maximal scale variation of all active SM calcs + // scalevarmax == 0 for contributions not requiring additional tables (LO, multiplicative) + int scalevarmax = GetNScaleVariations(); + if ((scalevarmax != 0) && (scalevar >= scalevarmax)) { + logger.error["SetScaleVariation"]<<"This table has only "<<scalevarmax<<" scale variation(s) stored for all active contributions!"<<endl; + logger.error["SetScaleVariation"]<<"You wanted to access the non-existing number "<<scalevar<<", stopped!"<<endl; + exit(1); + } + + fScalevar = scalevar; + + // TBD + // The following is only reasonable if called from SetScaleFactorsMuRMuF + // Is it necessary here ? + fastNLOCoeffAddFix* cNLO = (fastNLOCoeffAddFix*)B_NLO(); + if (!cNLO) { + logger.info["SetScaleVariation"]<<"No NLO calculation available."<<endl; + return true; + } + + double fScaleFacMuF = cNLO->GetScaleFactor(fScalevar); + logger.info["SetScaleVariation"] + <<"Selecting MuF table according to a multiplicative scale factor of the factorization scale of " + <<fScaleFacMuF<<" times the nominal scale."<<endl; + + // check for threshold corrections. + if (!BBlocksSMCalc[kThresholdCorrection].empty()) { + bool lkthc = false; + for (unsigned int i = 0 ; i <BBlocksSMCalc[kThresholdCorrection].size() ; i++) { + if ( BBlocksSMCalc[kThresholdCorrection][i] && BBlocksSMCalc[kThresholdCorrection][i]->IsEnabled() ) { + lkthc = true; + } + } + + if (lkthc) { + if (fabs(fScaleFacMuR-fScaleFacMuF) > DBL_MIN) { + logger.error["SetScaleVariation."]<<"Threshold corrections only allow for symmetric variations of the renormalization and factorization scales,"<<endl; + logger.error["SetScaleVariation."]<<"but fScaleFacMuR = "<<fScaleFacMuR<<" is different from fScaleFacMuF = "<<fScaleFacMuF<<", stopped!"<<endl; + exit(1); + } + fastNLOCoeffAddFix* cThC = (fastNLOCoeffAddFix*)B_ThC(); + double fScaleFacMuF2 = cThC->GetScaleFactor(fScalevar); + if (fabs(fScaleFacMuF2-fScaleFacMuF) > DBL_MIN) { + logger.error["SetScaleVariation."]<<"Scale variations different for NLO and ThC contributions. This should never happen!"<<endl; + logger.error["SetScaleVariation."]<<"Please do not use this method directly but only via SetScaleFactorsMuRMuF and check the return code!"<<endl; + exit(1); + } + } + } + return true; +} + + +void fastNLOReader::UseHoppetScaleVariations(bool useHoppet) { + +#ifndef WITH_HOPPET + logger.error["UseHoppetScaleVariation."] << "Hoppet support was not compiled with fastNLO. " + << "Therefore you can't use Hoppet to calculate the scale variations." <<endl; + exit(1); +#else + if (useHoppet) { + if (GetIsFlexibleScaleTable()) { + logger.info["UseHoppetScaleVariations"]<<"This is a 'flexible-scale' table, therefore you can already choose all desired scale variations without Hoppet."<<endl; + fUseHoppet = false; + return; + } + fastNLOCoeffAddBase * c = (fastNLOCoeffAddBase*)B_Any(); + if (c->GetIPDFdef1() == 2) { + logger.error["UseHoppetScaleVariations"] << "Hoppet scale variations not yet implemented for DIS." << std::endl; + exit(1); + } + + logger.info["UseHoppetScaleVariations"] << "Hoppet will be used to calculate scale variations." << std::endl; + fUseHoppet = true; + HoppetInterface::InitHoppet(*this); + FillPDFCache(1.); + } else { + logger.info["UseHoppetScaleVariations"] << "Hoppet will NOT be used to calculate scale variations." << std::endl; + fUseHoppet = false; + } +#endif +} + + +//______________________________________________________________________________ +bool fastNLOReader::ActivateContribution(ESMCalculation eCalc, ESMOrder eOrd, bool SetOn) { + + int iContr = ContrId(eCalc, eOrd); + bool lSetOK = false; + if (iContr < 0) { + logger.warn["ActivateContribution"] << "The requested contribution eCalc = "<<eCalc<<" and eOrd = "<<eOrd<<"does not exist, nothing to be done!" << endl; + } else { + lSetOK = SetContributionON(eCalc, iContr, SetOn); + } + return lSetOK; +} + + +//______________________________________________________________________________ +bool fastNLOReader::SetContributionON(ESMCalculation eCalc , unsigned int Id , bool SetOn) { + //! Enable or disable a contribution to be considered in the cross section calculation + //! - Use SetOn=true, to switch contribution ON, + //! - Use SetOn=false, to switch a contribution off + //! + //! Each contribution is identified by an ESMCalculation and by a universal Id. + //! For all available contributions in your table, call PrintContributionSummary(). + //! + //! The LO contribution can be e.g. addressed by (eCalc=fastNLO::kFixedOrder, Id=0); + //! The NLO contribution can be e.g. addressed by (eCalc=fastNLO::kFixedOrder, Id=1); + //! + //! If an additional additive contribution is switched on, then the PDFCache and AlphasCache + //! are refilled. + logger.debug["SetContributionON"]<<"Starting SetContributionON ..."<<endl; + logger.info["SetContributionON"]<<(SetOn?"Activating":"Deactivating")<<" contribution "<<_ContrName[eCalc]<<" with Id = "<<Id<<endl; + + // sanity check 1 + // existence of contribution pointer + if ( BBlocksSMCalc[eCalc].size() <=Id) { + logger.warn["SetContributionON"] + <<"Contribution "<<_ContrName[eCalc]<<" does not exist in this table, cannot switch it On/Off! Ignoring call."<<endl; + return false; + } + + // sanity check 2 + // contribution pointer != NULL pointer, i.e. contribution has been filled + if (!BBlocksSMCalc[eCalc][Id]) { + logger.warn["SetContributionON"] + <<"Contribution "<<_ContrName[eCalc]<<" has not been filled, cannot switch it On/Off! Ignoring call."<<endl; + return false; + } + + // backup original value + bool SetOld = BBlocksSMCalc[eCalc][Id] && BBlocksSMCalc[eCalc][Id]->IsEnabled(); + // set the new value immediately, otherwise GetNScaleVariations(), which is used in FillAlphasCache, will give wrong result. + BBlocksSMCalc[eCalc][Id]->Enable(SetOn); + + // check if selected subprocesses are compatible with the new contribution + if(!UpdateProcesses()) { + BBlocksSMCalc[eCalc][Id]->Enable(SetOld); + if(!UpdateProcesses()) { + logger.error["SetContirbutionON"]<<"Could not restore previous state. This usually means, that something really messed up"<<endl; + exit(1); + } + logger.warn["SetContributionON"]<<"Contribution"<<_ContrName[eCalc]<<" , ID = "<<Id<<", is not compatible with the current selected subprocesses, ignoring call."<<endl; + return false; + } + + // existence of scale variation for additive contributions (otherwise cache filling will fail!) + fastNLOCoeffAddBase* c = (fastNLOCoeffAddBase*)BBlocksSMCalc[eCalc][Id]; + if (!GetIsFlexibleScaleTable(c) && !c->GetIAddMultFlag()) { + unsigned int scalevar = c->GetNpow() == ILOord ? 0 : fScalevar; + // check that scalevar is in allowed range, can otherwise lead to segfaults! + // scalevarmax == 0 for contributions not requiring additional tables (LO, multiplicative) + unsigned int scalevarmax = GetNScaleVariations(); + if ((scalevarmax != 0) && (scalevar >= scalevarmax)) { + logger.warn["SetContributionON"] + <<"Scale variation "<<scalevar<<" of contribution "<<_ContrName[eCalc]<<" , Id = "<<Id<<", is > number of available scale variations "<<scalevarmax<<"! Ignoring call."<<endl; + // set to backed up original value + BBlocksSMCalc[eCalc][Id]->Enable(SetOld); + return false; + } + } + + if (!SetOld && SetOn) { + if (!c->GetIAddMultFlag()) { // if 'new' additive contribution, then refill PDF and alpha_s cache. + // Fill alpha_s cache + logger.debug["SetContributionON"]<<"Call FillAlphasCache for contribution eCalc="<<eCalc<<"\tId="<<Id<<endl; + fAlphasCached = 0; + FillAlphasCache(); + // Fill PDF cache + logger.debug["SetContributionON"]<<"Call FillPDFCache for contribution eCalc="<<eCalc<<"\tId="<<Id<<endl; + fPDFCached = 0; + FillPDFCache(0.); + } + } + logger.debug["SetContributionON"]<<"... leaving SetContributionON."<<endl; + return true; +} + + +//______________________________________________________________________________ +int fastNLOReader::GetNScaleVariations() const { + if (GetIsFlexibleScaleTable()) { + logger.info["GetNScaleVariations"]<<"This is a 'flexible-scale' table, therefore you can choose all desired scale variations."<<endl; + return 0; + } + + // Check whether only contributions without extra scale tables (LO, multiplicative) are present + bool NoExtra = true; + // Check for maximal scale variation of all active SM calcs with extra scale tables + // Assume a maximum of 10! + unsigned int scalevarmax = 10; + for (unsigned int j = 0 ; j<BBlocksSMCalc.size() ; j++) { + for (unsigned int i = 0 ; i<BBlocksSMCalc[j].size() ; i++) { + fastNLOCoeffAddFix* c = (fastNLOCoeffAddFix*)BBlocksSMCalc[j][i]; + // Check on contributions with extra scale tables (NLO, NNLO, threshold corrections) + if (c) { // No NULL pointer! + int kType = c->GetIContrFlag1()-1; + int kOrder = c->GetIContrFlag2()-1; + logger.debug["GetNScaleVariations"]<<"Contribution type is = "<<kType<<", contribution order is = "<<kOrder<<", contribution switch is = " << c->IsEnabled() <<endl; + // Do not check pQCD LO or multiplicative corrections + if (c->IsEnabled() && !c->GetIAddMultFlag() && + !(kType == kFixedOrder && kOrder == kLeading)) { + NoExtra = false; + if (c->GetNScalevar() < (int)scalevarmax) { + scalevarmax = c->GetNScalevar(); + } + } + } + } + } + if (NoExtra) {scalevarmax = 0;} + logger.debug["GetNScaleVariations"]<<"Found "<<scalevarmax<<" scale variations."<<endl; + return scalevarmax; +} + + +//______________________________________________________________________________ +vector < double > fastNLOReader::GetScaleFactors() const { + if (GetIsFlexibleScaleTable()) { + logger.info["GetScaleFactors"]<<"This is a 'flexible scale table', therefore you can choose all desired scale variations."<<endl; + return vector<double>(); + } else + return ((fastNLOCoeffAddFix*)BBlocksSMCalc[kFixedOrder][kNextToLeading])->GetAvailableScaleFactors(); +} + +//______________________________________________________________________________ +string fastNLOReader::GetScaleDescription(const ESMOrder eOrder, int iScale) const { + //! Get label of scale iScale for order eOrder of the fixed order calculation. + fastNLOCoeffAddBase* coeff = NULL; + if (eOrder < (int)BBlocksSMCalc[kFixedOrder].size()) + coeff = (fastNLOCoeffAddBase*) BBlocksSMCalc[kFixedOrder][eOrder]; + else { + logger.error["GetScaleDescription"]<<"Requested contribution not found." << endl; + exit(1); + } + return coeff->GetScaleDescription(iScale); +} + +//______________________________________________________________________________ +double fastNLOReader::GetNevt(const ESMOrder eOrder) const { + //! Get label of scale iScale for order eOrder of the fixed order calculation. + fastNLOCoeffAddBase* coeff = NULL; + if (eOrder < (int)BBlocksSMCalc[kFixedOrder].size()) + coeff = (fastNLOCoeffAddBase*) BBlocksSMCalc[kFixedOrder][eOrder]; + else { + logger.error["GetNevt"]<<"Requested contribution not found." << endl; + exit(1); + } + return coeff->GetNevt(); +} + +//______________________________________________________________________________ +int fastNLOReader::GetNSubproc(const ESMOrder eOrder) const { + //! Returns the number of subprocess contributions in one fixed order contribution. Note + //! that these subprocess contributions can consist of several subprocesses merged at + //! creation time of the table. Information about what subprocesses are included in each + //! contribution can be retrieved with the GetSubprocIndices function. + + if ( eOrder < (int)BBlocksSMCalc[kFixedOrder].size()) + return ((fastNLOCoeffAddBase*)BBlocksSMCalc[kFixedOrder][eOrder])->GetNSubproc(); + else { + logger.error["GetNSubproc"] << "Requested contribution not found." << endl; + exit(1); + } +} + +//______________________________________________________________________________ +vector < vector < pair < int,int > > > fastNLOReader::GetSubprocIndices( const ESMOrder eOrder ) const { + //! This function returns a list with length GetNSubproc containing a list of pairs for each + //! subprocess contribution. Each pair specifies a subprocess throug two PDGIDs involed in that process. + + if ( eOrder < (int)BBlocksSMCalc[kFixedOrder].size()) + return ((fastNLOCoeffAddBase*)BBlocksSMCalc[kFixedOrder][eOrder])->GetPDFCoeff(); + else { + logger.error["GetSubprocIndices"] << "Requested contribution not found." << endl; + exit(1); + } +} + +//______________________________________________________________________________ +vector < double > fastNLOReader::GetCrossSection(bool lNorm) { + // Get fast calculated cross section + if (XSection.empty()) CalcCrossSection(); + if (lNorm) { + vector < double > XNorm = GetNormCrossSection(); + return XNorm; + } else { + return XSection; + } +} + +//______________________________________________________________________________ +vector < double > fastNLOReader::GetUncertainty(bool lNorm) { + // Get uncertainty of fast calculated cross section stored in additional CoeffInfoBlocks + if (dXSection.empty()) CalcCrossSection(); + if (lNorm) { + logger.error["GetUncertainty"]<<"Additional uncertainty for normalised x sections not yet implemented; aborted!"<<endl; + exit(1); + } else { + return dXSection; + } +} + +//______________________________________________________________________________ +vector < double > fastNLOReader::GetNormCrossSection(bool lNormScale, double xmurd, double xmufd) { + // Check whether normalization is defined + if (INormFlag == 0) { + logger.error["GetNormCrossSection"]<<"Normalization not defined for this scenario, aborting!"<<endl; + logger.error["GetNormCrossSection"]<<"INormFlag = "<<INormFlag<<endl; + exit(1); + } + if (XSection.empty()) CalcCrossSection(); + vector < double > XSectionNorm = XSection; + + // Recalculate with modified scale factors for normalisation, if requested + if (lNormScale) { + SetScaleFactorsMuRMuF(xmurd,xmufd); + CalcCrossSection(); + } + vector < double > XSectionDen = XSection; + + // // Second table to be loaded? + // if ( INormFlag < 0 ) { + // string denomtable = GetDenomTable(); + // fastNLOTable table = fastNLOTable(denomtable); + // table.PrintContributionSummary(); + // fastNLOLHAPDF denom(table,GetLHAPDFFilename(),0); + // } + + unsigned int nDim = GetNumDiffBin(); + // iDim ranges from 0 to nDim-1 + unsigned int iDim = std::abs(INormFlag)-1; + if (iDim > nDim-1) { + logger.error["GetNormCrossSection"]<<"Normalization to slice in dimension " << iDim << " not possible, aborting!"<<endl; + logger.error["GetNormCrossSection"]<<"INormFlag = "<<INormFlag<<", nDim = "<<nDim<<endl; + exit(1); + } + // Normalize each observable bin + int idivlo = -1; + int idivup = -1; + double xsnorm = 0.; + double twidth = 0.; + for (unsigned int iobs = 0; iobs < NObsBin; iobs++) { + // Cached result? + if (!(idivlo == IDivLoPointer[iobs]-1 && idivup == IDivUpPointer[iobs]-1)) { + idivlo = IDivLoPointer[iobs]-1; + idivup = IDivUpPointer[iobs]-1; + xsnorm = 0.; + twidth = 0.; + if (iDim > 0) { + if (GetIDim0Bin(idivlo) != GetIDim0Bin(idivup)) { + logger.warn["GetNormCrossSection"]<<"Normalization range goes beyond one slice in dimension " << iDim << "!"<<endl; + logger.warn["GetNormCrossSection"]<<"idivlo = "<<idivlo<<", IDim0Bin = "<<GetIDim0Bin(idivlo)<<endl; + logger.warn["GetNormCrossSection"]<<"idivup = "<<idivup<<", IDim0Bin = "<<GetIDim0Bin(idivup)<<endl; + } + if (iDim > 1) { + if (GetIDim1Bin(idivlo) != GetIDim1Bin(idivup)) { + logger.warn["GetNormCrossSection"]<<"Normalization range goes beyond one slice in dimension " << iDim << "!"<<endl; + logger.warn["GetNormCrossSection"]<<"idivlo = "<<idivlo<<", IDim1Bin = "<<GetIDim1Bin(idivlo)<<endl; + logger.warn["GetNormCrossSection"]<<"idivup = "<<idivup<<", IDim1Bin = "<<GetIDim1Bin(idivup)<<endl; + } + } + } + for (int in = idivlo; in <= idivup; in++) { + double bwidth = GetObsBinUpBound(in,iDim) - GetObsBinLoBound(in,iDim); + xsnorm += XSectionDen[in]*bwidth; + twidth += bwidth; + } + } + if (fabs(xsnorm) > DBL_MIN) { + XSectionNorm[iobs] = XSectionNorm[iobs] / xsnorm; + } else { + logger.warn["GetNormCrossSection"]<<"Normalization divisor too small, normalized cross section set to -1!"<<endl; + logger.warn["GetNormCrossSection"]<<"xsnorm = "<<xsnorm<<endl; + XSectionNorm[iobs] = -1.; + } + } + return XSectionNorm; +} + +//______________________________________________________________________________ +std::vector < std::map< double, double > > fastNLOReader::GetCrossSection_vs_x1() { + // Get fast calculated cross section + logger.warn<<"Function 'GetCrossSection_vs_x1' does _NOT_ return dSigma/dx but only the cross section contribution at the different x-nodes."<<endl; + logger.warn<<"In order to obtain dSigma/dx, the retured values must be divided by the step-size of the interpolation."<<endl; + if (XSection.empty()) CalcCrossSection(); + return fXSection_vsX1; +} + +//______________________________________________________________________________ +std::vector < std::map< double, double > > fastNLOReader::GetCrossSection_vs_x2() { + // Get fast calculated cross section + logger.warn<<"Function 'GetCrossSection_vs_x1' does _NOT_ return dSigma/dx but only the cross section contribution at the different x-nodes."<<endl; + logger.warn<<"In order to obtain dSigma/dx, the retured values must be divided by the step-size of the interpolation."<<endl; + if (XSection.empty()) CalcCrossSection(); + return fXSection_vsX2; +} + +//______________________________________________________________________________ +vector< vector < double > > fastNLOReader::GetCrossSection2Dim() { + //! Get cross section as 2-dimensional vector according to defined binning + if (GetNumDiffBin() != 2) + logger.error["GetCrossSection2Dim"]<<"This function is only valid for NDiffBin=2"<<endl; + // Get fast calculated NLO cross section + if (XSection.empty()) CalcCrossSection(); + vector< vector < double > > XSection2Dim; + int k = 0; + for (unsigned int i = 0; i < GetNDim0Bins(); i++) { + XSection2Dim.push_back(vector < double >()); + int NBinDim = GetNDim1Bins(i); + for (int j = 0; j < NBinDim; j++) { + XSection2Dim[i].push_back(XSection[k]); + k++; + } + } + return XSection2Dim; +} + + +//______________________________________________________________________________ +vector < double > fastNLOReader::GetQScales() { + // Get XSection weighted Q scale in bin + if (XSection.empty()) CalcCrossSection(); + return QScale; +} + + +//______________________________________________________________________________ +vector < double > fastNLOReader::GetReferenceCrossSection() { + // Get reference cross section from direct nlojet++ calculation + if (XSectionRef.empty() && XSectionRef_s1.empty()) { + CalcReferenceCrossSection(); + } + if (GetIsFlexibleScaleTable()) { + if (fMuFFunc == kScale1 && fMuRFunc == kScale1) return XSectionRef_s1; + else if (fMuFFunc == kScale2 && fMuRFunc == kScale2) return XSectionRef_s2; + else if (fMuFFunc == kQuadraticMean && fMuRFunc == kQuadraticMean)return XSectionRefMixed; + else return XSectionRefMixed; + } else return XSectionRef; // XSectionRef from BlockB-Ref + return XSectionRef; +} + + +//______________________________________________________________________________ +void fastNLOReader::CalcReferenceCrossSection() { + //! + //! Initialize the internal arrays for the reference cross + //! sections with the information from the FastNLO file + //! + logger.debug["CalcReferenceCrossSection"]<<"Starting CalcReferenceCrossSection ..."<<endl; + + XSectionRef.clear(); + XSectionRef.resize(NObsBin); + XSectionRefMixed.clear(); + XSectionRef_s1.clear(); + XSectionRef_s2.clear(); + XSectionRefMixed.resize(NObsBin); + XSectionRef_s1.resize(NObsBin); + XSectionRef_s2.resize(NObsBin); + + if (!GetIsFlexibleScaleTable()) { + fastNLOCoeffAddBase* Coeff_LO_Ref = GetReferenceTable(kLeading); + fastNLOCoeffAddBase* Coeff_NLO_Ref = GetReferenceTable(kNextToLeading); + fastNLOCoeffAddBase* Coeff_NNLO_Ref = GetReferenceTable(kNextToNextToLeading); + if (Coeff_LO_Ref && Coeff_NLO_Ref && Coeff_NNLO_Ref) + logger.warn["CalcReferenceCrossSection"]<<"Found NNLO reference cross section. Returning reference of LO+NLO+NNLO.\n"; + if (Coeff_LO_Ref && Coeff_NLO_Ref) { + for (unsigned int i=0; i<NObsBin; i++) { + for (int l=0; l<Coeff_LO_Ref->GetNSubproc(); l++) { + //TODO ask Klaus about this: if (!fSubprocActive[l]) continue; + fastNLOCoeffAddFix* c = (fastNLOCoeffAddFix*)Coeff_LO_Ref; + int xUnits = c->GetIXsectUnits(); + double unit = RescaleCrossSectionUnits(BinSize[i], xUnits); + XSectionRef[i] += c->GetSigmaTilde(i,0,0,0,l) * unit / c->GetNevt(i,l) ; // no scalevariations in LO tables + } + for (int l=0; l<Coeff_NLO_Ref->GetNSubproc(); l++) { + //TODO ask Klaus about this: if (!fSubprocActive[l]) continue; + fastNLOCoeffAddFix* c = (fastNLOCoeffAddFix*)Coeff_NLO_Ref; + int xUnits = c->GetIXsectUnits(); + double unit = RescaleCrossSectionUnits(BinSize[i], xUnits); + XSectionRef[i] += c->GetSigmaTilde(i,fScalevar,0,0,l) * unit / c->GetNevt(i,l); + } + if (Coeff_NNLO_Ref) { + for (int l=0; l<Coeff_NNLO_Ref->GetNSubproc(); l++) { + //TODO ask Klaus about this: if (!fSubprocActive[l]) continue; + fastNLOCoeffAddFix* c = (fastNLOCoeffAddFix*)Coeff_NNLO_Ref; + int xUnits = c->GetIXsectUnits(); + double unit = RescaleCrossSectionUnits(BinSize[i], xUnits); + XSectionRef[i] += c->GetSigmaTilde(i,fScalevar,0,0,l) * unit / c->GetNevt(i,l); + } + } + } + } else + logger.warn["CalcReferenceCrossSection"]<<"No reference cross sections for LO and NLO available.\n"; + } else { + for (unsigned int i=0; i<NObsBin; i++) { + fastNLOCoeffAddFlex* cLO = (fastNLOCoeffAddFlex*)BBlocksSMCalc[kFixedOrder][kLeading]; + int xUnits = cLO->GetIXsectUnits(); + double unit = RescaleCrossSectionUnits(BinSize[i], xUnits); + for (int n=0; n<cLO->GetNSubproc(); n++) { + //TODO if (!fSubprocActive[n]) continue; + XSectionRefMixed[i] += cLO->SigmaRefMixed[i][n] * unit / cLO->GetNevt(i,n); + XSectionRef_s1[i] += cLO->SigmaRef_s1[i][n] * unit / cLO->GetNevt(i,n); + XSectionRef_s2[i] += cLO->SigmaRef_s2[i][n] * unit / cLO->GetNevt(i,n); + } + fastNLOCoeffAddFlex* cNLO = (fastNLOCoeffAddFlex*)BBlocksSMCalc[kFixedOrder][kNextToLeading]; + xUnits = cNLO->GetIXsectUnits(); + unit = RescaleCrossSectionUnits(BinSize[i], xUnits); + for (int n=0; n<cNLO->GetNSubproc(); n++) { + //TODO if (!fSubprocActive[n]) continue; + XSectionRefMixed[i] += cNLO->SigmaRefMixed[i][n] * unit / cNLO->GetNevt(i,n); + XSectionRef_s1[i] += cNLO->SigmaRef_s1[i][n] * unit / cNLO->GetNevt(i,n); + XSectionRef_s2[i] += cNLO->SigmaRef_s2[i][n] * unit / cNLO->GetNevt(i,n); + } + // todo: nnlo reference cross section + } + } +} + + +//______________________________________________________________________________ +void fastNLOReader::CalcRefCrossSection() { + //! + //! Initialize the internal arrays for the reference cross + //! sections from the InfoBlocks of the fastNLO file (v2.6 upwards) + //! + logger.debug["CalcRefCrossSection"]<<"Starting CalcRefCrossSection ..."<<endl; + + XSectionRef.clear(); + XSectionRef.resize(NObsBin); + + if (!GetIsFlexibleScaleTable()) { + fastNLOCoeffAddBase* Coeff_LO_Ref = GetReferenceTable(kLeading); + fastNLOCoeffAddBase* Coeff_NLO_Ref = GetReferenceTable(kNextToLeading); + fastNLOCoeffAddBase* Coeff_NNLO_Ref = GetReferenceTable(kNextToNextToLeading); + if (Coeff_LO_Ref && Coeff_NLO_Ref && Coeff_NNLO_Ref) + logger.warn["CalcRefCrossSection"]<<"Found NNLO reference cross section. Returning reference of LO+NLO+NNLO.\n"; + if (Coeff_LO_Ref && Coeff_NLO_Ref) { + for (unsigned int i=0; i<NObsBin; i++) { + for (int l=0; l<Coeff_LO_Ref->GetNSubproc(); l++) { + //TODO ask Klaus about this: if (!fSubprocActive[l]) continue; + fastNLOCoeffAddFix* c = (fastNLOCoeffAddFix*)Coeff_LO_Ref; + int xUnits = c->GetIXsectUnits(); + double unit = RescaleCrossSectionUnits(BinSize[i], xUnits); + XSectionRef[i] += c->GetSigmaTilde(i,0,0,0,l) * unit / c->GetNevt(i,l) ; // no scalevariations in LO tables + } + for (int l=0; l<Coeff_NLO_Ref->GetNSubproc(); l++) { + //TODO ask Klaus about this: if (!fSubprocActive[l]) continue; + fastNLOCoeffAddFix* c = (fastNLOCoeffAddFix*)Coeff_NLO_Ref; + int xUnits = c->GetIXsectUnits(); + double unit = RescaleCrossSectionUnits(BinSize[i], xUnits); + XSectionRef[i] += c->GetSigmaTilde(i,fScalevar,0,0,l) * unit / c->GetNevt(i,l); + } + if (Coeff_NNLO_Ref) { + for (int l=0; l<Coeff_NNLO_Ref->GetNSubproc(); l++) { + //TODO ask Klaus about this: if (!fSubprocActive[l]) continue; + fastNLOCoeffAddFix* c = (fastNLOCoeffAddFix*)Coeff_NNLO_Ref; + int xUnits = c->GetIXsectUnits(); + double unit = RescaleCrossSectionUnits(BinSize[i], xUnits); + XSectionRef[i] += c->GetSigmaTilde(i,fScalevar,0,0,l) * unit / c->GetNevt(i,l); + } + } + } + } else + logger.warn["CalcRefCrossSection"]<<"No reference cross sections for LO and NLO available.\n"; + } else { + for (unsigned int i=0; i<NObsBin; i++) { + fastNLOCoeffAddFlex* cLO = (fastNLOCoeffAddFlex*)BBlocksSMCalc[kFixedOrder][kLeading]; + int xUnits = cLO->GetIXsectUnits(); + double unit = RescaleCrossSectionUnits(BinSize[i], xUnits); + for (int n=0; n<cLO->GetNSubproc(); n++) { + //TODO if (!fSubprocActive[n]) continue; + XSectionRefMixed[i] += cLO->SigmaRefMixed[i][n] * unit / cLO->GetNevt(i,n); + XSectionRef_s1[i] += cLO->SigmaRef_s1[i][n] * unit / cLO->GetNevt(i,n); + XSectionRef_s2[i] += cLO->SigmaRef_s2[i][n] * unit / cLO->GetNevt(i,n); + } + fastNLOCoeffAddFlex* cNLO = (fastNLOCoeffAddFlex*)BBlocksSMCalc[kFixedOrder][kNextToLeading]; + xUnits = cNLO->GetIXsectUnits(); + unit = RescaleCrossSectionUnits(BinSize[i], xUnits); + for (int n=0; n<cNLO->GetNSubproc(); n++) { + //TODO if (!fSubprocActive[n]) continue; + XSectionRefMixed[i] += cNLO->SigmaRefMixed[i][n] * unit / cNLO->GetNevt(i,n); + XSectionRef_s1[i] += cNLO->SigmaRef_s1[i][n] * unit / cNLO->GetNevt(i,n); + XSectionRef_s2[i] += cNLO->SigmaRef_s2[i][n] * unit / cNLO->GetNevt(i,n); + } + // todo: nnlo reference cross section + } + } +} + + +//______________________________________________________________________________ +bool fastNLOReader::PrepareCache() { + // check pdf cache + const double PDFcks = CalcNewPDFChecksum(); + if (fPDFCached==0. || (fPDFCached!=0. && fabs(PDFcks/fPDFCached -1.) > 1.e-7)) { + logger.debug["PrepareCache"]<<"Need to refill PDFCache, since PDFCecksum="<<PDFcks<<" and fPDFCached="<<fPDFCached<<endl; + FillPDFCache(PDFcks); + } else logger.debug["PrepareCache"]<<"No need to refill PDFCache."<<endl; + + // check pdf cache + if (!fPDFSuccess) { + logger.error["PrepareCache"]<<"Cannot calculate cross sections. PDF has not been initalized successfully."<<endl; + return false; + } + + // check alpha_s cache + const double asref = CalcReferenceAlphas(); + if (fAlphasCached == 0. || fAlphasCached != asref) { + logger.debug["PrepareCache"]<<"Need to refill AlphasCache, since fAlphasCached="<<fAlphasCached<<endl; + FillAlphasCache(); + } + // do we now have an alphas? + if (fAlphasCached==0. || fAlphasCached != asref) { + logger.error["PrepareCache"]<<"Filling of alpha_s cache failed. fAlphasCached="<<fAlphasCached<<"\tasref="<<asref<<endl; + return false; + } + return true; +} + + +//______________________________________________________________________________ +void fastNLOReader::CalcCrossSection() { + //! + //! Calculate cross section for all active additive and multiplicative + //! contributions + //! + //! xs = { sum(all active pert. add. contr.) + sum(all other active add. contr.) } * prod(all active multipl. contr.) + //! + logger.debug["CalcCrossSection"]<<"Starting CalcCrossSection ..."<<endl; + + XSection.clear(); + XSection.resize(NObsBin); + dXSection.clear(); + dXSection.resize(NObsBin); + fXSection_vsX1.clear(); + fXSection_vsX2.clear(); + fXSection_vsX1.resize(NObsBin); + fXSection_vsX2.resize(NObsBin); + fXSection_vsQ2.clear(); //diffractive DIS + fXSection_vsQ2.resize(NObsBin); //diffractive DIS + QScale.clear(); + QScale.resize(NObsBin); + + // handle alpha_s and PDF Cache + bool CacheOK = PrepareCache(); + if (!CacheOK) { + logger.error["CalcCrossSection"]<<"Caching failed. Cannot calculate cross sections."<<endl; + return; + } else { + logger.debug["CalcCrossSection"]<<"Caching ok, continue ..."<<endl; + } + + // Perturbative (additive) contributions + for (unsigned int j = 0 ; j<BBlocksSMCalc.size() ; j++) { + for (unsigned int i = 0 ; i<BBlocksSMCalc[j].size() ; i++) { + if (BBlocksSMCalc[j][i] && BBlocksSMCalc[j][i]->IsEnabled()) { + if (fastNLOCoeffAddFlex::CheckCoeffConstants(BBlocksSMCalc[j][i],true)) + CalcCrossSectionv21((fastNLOCoeffAddFlex*)BBlocksSMCalc[j][i]); + else if (fastNLOCoeffAddFix::CheckCoeffConstants(BBlocksSMCalc[j][i],true)) + CalcCrossSectionv20((fastNLOCoeffAddFix*)BBlocksSMCalc[j][i]); + } + } + } + + // Check whether pQCD LO contributions or beyond exist and are activated + bool lklo = false; + bool lkho = false; + if (!BBlocksSMCalc[kFixedOrder].empty()) { + for (unsigned int i = 0 ; i <BBlocksSMCalc[kFixedOrder].size() ; i++) { + int kOrder = -1; + if (BBlocksSMCalc[kFixedOrder][i]) { + kOrder = BBlocksSMCalc[kFixedOrder][i]->GetIContrFlag2()-1; + } + if (BBlocksSMCalc[kFixedOrder][i] && BBlocksSMCalc[kFixedOrder][i]->IsEnabled()) { + if (kOrder == 0) { + lklo = true; + } else if (kOrder > 0) { + lkho = true; + } + } + } + } + + // Contributions from the a-posteriori scale variation + if (!GetIsFlexibleScaleTable() && lklo && lkho) { + fastNLOCoeffAddFix* cNLO = (fastNLOCoeffAddFix*)B_NLO(); + if (fabs(fScaleFacMuF - cNLO->GetScaleFactor(fScalevar)) > DBL_MIN) { + if (!fUseHoppet) { + logger.error["CalcCrossSection"] << "Inconsistent choice of chosen factorization scale table and fScaleFacMuF." << endl; + exit(1); + } + CalcAposterioriScaleVariationMuF(); + } + if (fabs(fScaleFacMuR - cNLO->GetScaleFactor(fScalevar)) > DBL_MIN) { + CalcAposterioriScaleVariationMuR(); + } + } + + // non-perturbative corrections (multiplicative corrections) + for (unsigned int j = 0 ; j<BBlocksSMCalc.size() ; j++) { + for (unsigned int i = 0 ; i<BBlocksSMCalc[j].size() ; i++) { + if ( BBlocksSMCalc[j][i] && BBlocksSMCalc[j][i]->IsEnabled()) { + if (fastNLOCoeffMult::CheckCoeffConstants(BBlocksSMCalc[j][i] , true)) { + fastNLOCoeffMult* cMult = (fastNLOCoeffMult*) BBlocksSMCalc[j][i]; + if (cMult->GetIContrFlag1() == 4 && cMult->GetIContrFlag2() == 1) { + logger.debug["CalcCrossSection"]<<"Multiplying with non-perturbative correction."<<endl; + for (unsigned int iB=0; iB<NObsBin; iB++) { + XSection[iB] *= cMult->GetMultFactor(iB); + } + } else { + logger.error["CalcCrossSection"]<<"Found unknown multiplicative correction. Printing coeff table and exiting..."<<endl; + cMult->Print(-1); + exit(1); + } + } + } + } + } + + // ---- Q-scale calculation ---- // + logger.debug["CalcCrossSection"]<<"Calculate Q-scales: xsQ/xs"<<endl; + for (unsigned int i=0; i<NObsBin; i++) { + QScale[i] = QScale[i]/XSection[i]; + } + + // ---- Square root for summed statistical/numerical uncertainty ---- // + logger.debug["CalcCrossSection"]<<"Calculate statistical/numerical uncertainty from sqrt of summed contributions: sqrt(dXSection)"<<endl; + for (unsigned int i=0; i<NObsBin; i++) { + dXSection[i] = sqrt(dXSection[i]); + } + + logger.debug["CalcCrossSection"]<<"... leaving CalcCrossSection."<<endl; +} + + +//______________________________________________________________________________ +void fastNLOReader::CalcAposterioriScaleVariationMuR() { + + fastNLOCoeffAddFix* cNLO = (fastNLOCoeffAddFix*)B_NLO(); + int scaleVar = cNLO->GetNpow() == ILOord ? 0 : fScalevar; + double scalefac = fScaleFacMuR / cNLO->GetScaleFactor(scaleVar); + + logger.debug["CalcAposterioriScaleVariationMuR"]<<"scalefac="<<scalefac<<endl; + if (GetIsFlexibleScaleTable()) { logger.error["CalcAposterioriScaleVariationMuR"]<<"This function is applicable only to non-flexible scale tables."<<endl; exit(1);} + fastNLOCoeffAddFix* cLO = (fastNLOCoeffAddFix*) B_LO(); + if (cLO == NULL) { + logger.error["CalcAposterioriScaleVariationMuR"]<<"No leading order calculations available. Cannot calculate scale variations."<<endl; + exit(3); + } + vector<double>* XS = &XSection; + vector<double>* QS = &QScale; + int xUnits = cLO->GetIXsectUnits(); + const double n = cLO->GetNpow(); + const double L = log(scalefac); + //TBD: 5 must be replaced by Nf here! + const double beta0 = (11.*3.-2.*5)/3.; + for (unsigned int i=0; i<NObsBin; i++) { + double unit = RescaleCrossSectionUnits(BinSize[i], xUnits); + int nxmax = cLO->GetNxmax(i); + for (int j=0; j<cLO->GetTotalScalenodes(); j++) { + double asnp1 = pow(cLO->AlphasTwoPi_v20[i][j],(n+1)/n);//as^n+1 + for (int k=0; k<nxmax; k++) { + for (int l=0; l<cLO->GetNSubproc(); l++) { + if ( !cLO->SubIsEnabled(l) ) continue; + double clo = cLO->GetSigmaTilde(i,0,j,k,l) * cLO->PdfLc[i][j][k][l] * unit / cLO->GetNevt(i,l); + double xsci = asnp1 * clo * n * L * beta0; + double mur = fScaleFacMuR * cLO->GetScaleNode(i,0,j); + XS->at(i) += xsci; + QS->at(i) += xsci*mur; + fXSection_vsX1[i][cLO->GetX1(i,k)] += xsci; + //fXSection_vsX2[i][cLO->GetXNode2(i,k)] += xsci; + } + } + } + } +} + +//______________________________________________________________________________ +void fastNLOReader::CalcAposterioriScaleVariationMuF() { + + fastNLOCoeffAddFix* cNLO = (fastNLOCoeffAddFix*)B_NLO(); + int scaleVar = cNLO->GetNpow() == ILOord ? 0 : fScalevar; + double scalefac = fScaleFacMuF / cNLO->GetScaleFactor(scaleVar); + + logger.debug["CalcAposterioriScaleVariationMuF"]<<"scalefac="<<scalefac<<endl; + if (GetIsFlexibleScaleTable()) { logger.error["CalcAposterioriScaleVariationMuF"]<<"This function is only reasonable for non-flexible scale tables."<<endl; exit(1);} + fastNLOCoeffAddFix* cLO = (fastNLOCoeffAddFix*) B_LO(); + if (cLO == NULL) { + logger.error["CalcAposterioriScaleVariationMuR"]<<"No leading order calculations available. Cannot calculate scale variations."<<endl; + exit(3); + } + vector<double>* XS = &XSection; + int xUnits = cLO->GetIXsectUnits(); + const double n = cLO->GetNpow(); + logger.debug["CalcAposterioriScaleVariationMuF"] << "Npow=" << n <<endl; + for (unsigned int i=0; i<NObsBin; i++) { + double unit = RescaleCrossSectionUnits(BinSize[i], xUnits); + int nxmax = cLO->GetNxmax(i); + for (int j=0; j<cLO->GetTotalScalenodes(); j++) { + double asnp1 = pow(cLO->AlphasTwoPi_v20[i][j],(n+1)/n);//as^n+1 + for (int k=0; k<nxmax; k++) { + for (int l=0; l<cLO->GetNSubproc(); l++) { + if (!cLO->SubIsEnabled(l)) continue; + // TODO: Not implemented correctly. Need to fix DIS case. + double clo = cLO->GetSigmaTilde(i,0,j,k,l) *(cLO->PdfSplLc1[i][j][k][l] + cLO->PdfSplLc2[i][j][k][l]) * unit / cLO->GetNevt(i,l); + double xsci = asnp1 * n * log(scalefac) * clo; + //double xsci = asnp1 * n * log(scalefac) * clo; + XS->at(i) -= xsci; + fXSection_vsX1[i][cLO->GetX1(i,k)] -= xsci; + //fXSection_vsX2[i][cLO->GetXNode2(i,k)] -= xsci; + } + } + } + } +} + + +//______________________________________________________________________________ +void fastNLOReader::CalcCrossSectionv21(fastNLOCoeffAddFlex* c) { + //! + //! Cross section calculation for DIS and HHC tables in v2.1 format + //! + logger.debug["CalcCrossSectionv21"]<<"Starting CalcCrossSectionv21 ..."<<endl; + + // Test that c ist not a NULL pointer, i.e. an unfilled contribution, else return + if (!c) return; + + // Set up pointers to stored vectors + vector<double>* XS = &XSection; + vector<double>* dXS = &dXSection; + vector<double>* QS = &QScale; + + // KR: Having different IXsectUnits in different contributions only works when + // everything always scaled to Ipublunits (unique per table) + // Get x section units of each contribution + int xUnits = c->GetIXsectUnits(); + logger.debug["CalcCrossSectionv21"]<<"Ipublunits = " << Ipublunits << ", xUnits = " << xUnits << endl; + + // Check whether CoeffInfoBlock for statistical/numerical uncertainties (0,x) exists + logger.debug["CalcCrossSectionv21"]<<"Checking on presence of statistical/numerical uncertainties ..."<<endl; + int iCIBIndex = -1; + int iCIBFlag2 = -1; + std::vector < double > dCIBCont; + if ( c->HasCoeffInfoBlock(0) ) { + iCIBIndex = c->GetCoeffInfoBlockIndex(0); + logger.debug["CalcCrossSectionv21"]<<"Found CoeffInfoBlock "<<iCIBIndex<<" with statistical/numerical uncertainties."<<endl; + iCIBFlag2 = c->GetCoeffInfoBlockFlag2(iCIBIndex); + dCIBCont = c->GetCoeffInfoBlockContent(iCIBIndex); + } else { + logger.debug["CalcCrossSectionv21"]<<"No CoeffInfoBlock found; uncertainties are initialised to zero."<<endl; + } + + for (unsigned int i=0; i<NObsBin; i++) { + double unit = RescaleCrossSectionUnits(BinSize[i], xUnits); + int nxmax = c->GetNxmax(i); + double XStmp = 0.; + for (unsigned int jS1=0; jS1<c->GetNScaleNode1(i); jS1++) { + double Q2 = c->GetScaleNode1(i,jS1)*c->GetScaleNode1(i,jS1); + double lq2 = log(Q2); + for (unsigned int kS2=0; kS2<c->GetNScaleNode2(i); kS2++) { + double mur = CalcMu(kMuR , c->GetScaleNode1(i,jS1) , c->GetScaleNode2(i,kS2) , fScaleFacMuR); + double muf = CalcMu(kMuF , c->GetScaleNode1(i,jS1) , c->GetScaleNode2(i,kS2) , fScaleFacMuF); + double lf2 = 2*log(muf); + double lr2 = 2*log(mur); + for (int x=0; x<nxmax; x++) { + for (int n=0; n<c->GetNSubproc(); n++) { + if (!c->SubIsEnabled(n)) continue; + double as = c->AlphasTwoPi[i][jS1][kS2]; + double pdflc = c->PdfLcMuVar[i][x][jS1][kS2][n]; + if (pdflc == 0.) continue; + double fac = as * pdflc * unit; + double xsci = c->SigmaTildeMuIndep[i][x][jS1][kS2][n] * fac / c->GetNevt(i,n); + if (c->GetNScaleDep() >= 5) { + xsci += c->SigmaTildeMuFDep [i][x][jS1][kS2][n] * lf2 * fac / c->GetNevt(i,n); + xsci += c->SigmaTildeMuRDep [i][x][jS1][kS2][n] * lr2 * fac / c->GetNevt(i,n); + if (c->GetIPDFdef1() == 2 && c->fSTildeDISFormat==0) { // DIS tables use log(mu/Q2) instead of log(mu) (but only for ln(mur), ln(muf)) + xsci -= c->SigmaTildeMuFDep [i][x][jS1][kS2][n] * lq2 * fac / c->GetNevt(i,n); + xsci -= c->SigmaTildeMuRDep [i][x][jS1][kS2][n] * lq2 * fac / c->GetNevt(i,n); + } + if (c->GetNScaleDep() >= 6) { + xsci += c->SigmaTildeMuRRDep [i][x][jS1][kS2][n] * lr2*lr2 * fac / c->GetNevt(i,n); + } + if (c->GetNScaleDep() >= 7) { + xsci += c->SigmaTildeMuFFDep [i][x][jS1][kS2][n] * lf2*lf2 * fac / c->GetNevt(i,n); + xsci += c->SigmaTildeMuRFDep [i][x][jS1][kS2][n] * lr2*lf2 * fac / c->GetNevt(i,n); + } + } + XS->at(i) += xsci; + XStmp += xsci; + QS->at(i) += xsci*mur; + // cross section as 'functions' of x + //double x1 = c->GetXNode1(i,x); + //double x2 = c->GetXNode2(i,x); + fXSection_vsX1[i][c->GetX1(i,x)] += xsci; + fXSection_vsQ2[i][Q2] += xsci; + //fXSection_vsX2[i][x2] += xsci; + } + } + } + } + if ( dCIBCont.empty() ) { + dXS->at(i) += 0.; + } else { + if ( iCIBFlag2 == 0 ) { + // Linear addition of absolute uncertainties; square is stored + dXS->at(i) = pow( (sqrt(dXS->at(i)) + fabs(XStmp)*dCIBCont[i]), 2 ); + } else if ( iCIBFlag2 == 1 ) { + // Quadratical addition of absolute uncertainties; square is stored + dXS->at(i) += XStmp*XStmp*dCIBCont[i]*dCIBCont[i]; + } else { + logger.error["CalcCrossSectionv21"]<<"Found illegal ICoeffInfoBlockFlag2 "<<iCIBFlag2<<", aborted!"<<endl; + exit(135); + } + } + } + logger.debug["CalcCrossSectionv21"]<<"... leaving CalcCrossSectionv21."<<endl; +} + + +//______________________________________________________________________________ +void fastNLOReader::CalcCrossSectionv20(fastNLOCoeffAddFix* c) { + //! + //! Cross section calculation in v2.0 format + //! + logger.debug["CalcCrossSectionv20"]<<"Starting CalcCrossSectionv20 ..."<<endl; + + // Test that c ist not a NULL pointer, i.e. an unfilled contribution, else return + if (!c) return; + + /// Test that alpha_s cache is filled with non-zero values for this contribution + if (c->AlphasTwoPi_v20[0][0] < DBL_MIN) { + logger.error["CalcCrossSectionv20"]<<"Need to refill alpha_s cache for this contribution. Normally, should not be necessary here, aborted!"<<endl; + exit(1); + // FillAlphasCacheInBlockBv20(c); + } + + /// Test that PDF cache is filled with non-zero values for this contribution + if (fabs(c->PdfLc[0][0][0][0]) < DBL_MIN) { + logger.debug["CalcCrossSectionv20"]<<"Need to refill PDF cache for this contribution. Normally, should not be necessary here, aborted!"<<endl; + exit(1); + // FillPDFCache(0.,true); + } + + // Set up pointers to stored vectors + vector<double>* XS = &XSection; + vector<double>* dXS = &dXSection; + vector<double>* QS = &QScale; + + // KR: Having different IXsectUnits in different contributions only works when + // everything always scaled to Ipublunits (unique per table) + // Get x section units of each contribution + int xUnits = c->GetIXsectUnits(); + logger.debug["CalcCrossSectionv20"]<<"Ipublunits = " << Ipublunits << ", xUnits = " << xUnits << endl; + + // Check whether CoeffInfoBlock for statistical/numerical uncertainties (0,x) exists + logger.debug["CalcCrossSectionv20"]<<"Checking on presence of statistical/numerical uncertainties ..."<<endl; + int iCIBIndex = -1; + int iCIBFlag2 = -1; + std::vector < double > dCIBCont; + if ( c->HasCoeffInfoBlock(0) ) { + iCIBIndex = c->GetCoeffInfoBlockIndex(0); + logger.debug["CalcCrossSectionv20"]<<"Found CoeffInfoBlock "<<iCIBIndex<<" with statistical/numerical uncertainties."<<endl; + iCIBFlag2 = c->GetCoeffInfoBlockFlag2(iCIBIndex); + dCIBCont = c->GetCoeffInfoBlockContent(iCIBIndex); + } else { + logger.debug["CalcCrossSectionv20"]<<"No CoeffInfoBlock found; uncertainties are initialised to zero."<<endl; + } + + int scaleVar = c->GetNpow() == ILOord ? 0 : fScalevar; + for (unsigned int i=0; i<NObsBin; i++) { + double unit = RescaleCrossSectionUnits(BinSize[i], xUnits); + int nxmax = c->GetNxmax(i); + double XStmp = 0.; + for (int j=0; j<c->GetTotalScalenodes(); j++) { + double scalefac = fScaleFacMuR/c->GetScaleFactor(scaleVar); + double mur = scalefac * c->GetScaleNode(i,scaleVar,j); + for (int k=0; k<nxmax; k++) { + for (int l=0; l<c->GetNSubproc(); l++) { + if (!c->SubIsEnabled(l)) continue; + double xsci = c->GetSigmaTilde(i,scaleVar,j,k,l) * c->AlphasTwoPi_v20[i][j] * c->PdfLc[i][j][k][l] * unit / c->GetNevt(i,l); + XS->at(i) += xsci; + XStmp += xsci; + QS->at(i) += xsci*mur; + //double x1 = c->GetXNode1(i,k); + //double x2 = c->GetXNode2(i,k); + fXSection_vsX1[i][c->GetX1(i,k)] += xsci; + //fXSection_vsX2[i][x2] += xsci; + } + } + } + if ( dCIBCont.empty() ) { + dXS->at(i) += 0.; + } else { + if ( iCIBFlag2 == 0 ) { + // Linear addition of absolute uncertainties + dXS->at(i) = pow( (sqrt(dXS->at(i)) + fabs(XStmp)*dCIBCont[i]), 2 ); + } else if ( iCIBFlag2 == 1 ) { + // Quadratical addition of absolute uncertainties + dXS->at(i) += XStmp*XStmp*dCIBCont[i]*dCIBCont[i]; + } else { + logger.error["CalcCrossSectionv20"]<<"Found illegal ICoeffInfoBlockFlag2 "<<iCIBFlag2<<", aborted!"<<endl; + exit(135); + } + } + } + logger.debug["CalcCrossSectionv20"]<<"... leaving CalcCrossSectionv20."<<endl; +} + + +//______________________________________________________________________________ +void fastNLOReader::SetUnits(EUnits Unit) { + if (fUnits != Unit) { + fUnits = Unit; + //CalcCrossSection(); + } else { + // nothing todo + } +} + + + +//______________________________________________________________________________ +std::vector<double> fastNLOReader::GetXFXSqrtS(double x, double muf) { + //!< Wrapper of GetXFX, but for alternative sqrt(s) + if (fSqrtSovSP==1) return GetXFX(x,muf); + if (x*fSqrtSovSP >= 1) return std::vector<double>(13,0); //no unphysical x-values + vector<double> xfx = GetXFX(x*fSqrtSovSP,muf); + //for ( double& f : xfx ) f*=fSqrtSovSP; + return xfx; +} + + + +//______________________________________________________________________________ +void fastNLOReader::SetNewSqrtS(double newSqrtS, double SqrtStable) { + //! Calculate cross section for a different sqrt(s) + //! Mind: When requesting a higher sqrt(s) than this table + //! was calculatedd for, then a (small) part of the phase space + //! is missing + //! + //! if SqrtStable set to 0, then sqrt is is taken from file + //! if newSqrtS set to 0, then center-of-mass reweighting is turned off + //! + //! Only implemented for hadron-hadron collissions, but not for DIS + + if ( B_LO() && (B_LO()->GetIPDFdef1() == 2) ) { + logger.error["SetNewSqrtS"]<<"Center-of-mass reweighting not implemented for DIS."<<endl; + exit(3); + } + if (SqrtStable == 0) SqrtStable = GetEcms(); + if (newSqrtS == 0) newSqrtS = GetEcms(); + fSqrtSovSP = SqrtStable/newSqrtS; + + logger.info["SetNewSqrtS"]<<"Calculating cross sections at center-of-mass energy of "<<newSqrtS<<endl; + if (fSqrtSovSP<1) + logger.warn["SetNewSqrtS"]<<"Be careful! New center-of-mass energy is higher than that of the file. Some phase space is missing!"<<endl; + + +} + + +//______________________________________________________________________________ +void fastNLOReader::SelectProcesses( const std::vector< std::pair<int,int> >& proclist ) { + //! Selects subprocesses given in proclist. proclist is a vector of pairs each identifying + //! a single process by two PDGIDs. If the table is not compatible with the selected list, + //! nothing is changed and a warning is printed. + + vector< pair<int,int> >* old_list = fselected_processes; + fselected_processes = new vector< pair<int,int> >(proclist); + + if ( UpdateProcesses() ) { + delete old_list; + return; + } + delete fselected_processes; + fselected_processes = old_list; + if ( !UpdateProcesses() ) { + logger.error["SelectProcesses"]<<"could not restore previous state after fail, this means something really messed up"; + exit(1); + } + + logger.warn["SelectProcesses"]<<"could not select requested subprocesses due to incompatible table, ignoring call"<<endl; + return; +} + + +//_____________________________________________________________________________ +void fastNLOReader::SelectProcesses( const std::string& processes, bool symmetric ) { + //! Selects subprocesses given in processes. processes is a string describing the wanted subprocesses. + //! It should be formated like + //! processes = ( [a](u|d|c|s|b) | g | q | none | all)( [a](u|d|c|s|b) | g | [(-|+)][(!|=)]q ) + //! So it consists of two parts: + //! part 1 is either + //! - the optional modifier a and one of udcsbt selecting the specified (anti)quark + //! - g selecting a gluon + //! - q wildcard expansion for all quarks and antiquarks + //! - none nothing is selected (part 2 is ignored in this case) + // - all all combinatinos are selected (part 2 is ignored in this case) + // note: this only selects all subprocesses contained in the table. If some subprocesses are not + // contained in the table no warning is printed out. + //! part 2 is either + //! - the optional modifier a and one of udcsbt selecting the specified (anti)quark + //! - g selecting a gluon + //! - q selecting all quarks and antiquarks. There are several prefix modifiers to this wildcard: + //! . - (anti) restricts selection to all antiquarks if a quark was selected in part 1 + //! and all quarks if a antiquark was selected in part 1 + //! . + (equal) restricts selection to all quarks if a quark was selected in part 1 + //! and all antiquarks if a antiquark was selected in part 1 + //! . ! (other) restricts selection to all quarks and antiquarks with different + //! flavour as the one selected in part 1 + //! . = (same) restricts selection to all quarks and antiquarks with same flavour + //! as the one selected in part 1 + //! note that (+|-) and (!|=) are mutually-exclusive. + //! there should be no space between part 1 and part 2 as spaces separate several part 1 - part 2 pairs. + //! If more than one such pairs are given. Each pair is parsed and the union of all selected processes is + //! selected. + //! + //! If the table is not compatible (or does not contain) with the selected subprocesses nothing is + //! changed and a warning is printed out. + + bool select_all = false; + std::vector< std::pair<int,int> > selection; + selection.clear(); + + std::vector< std::string > substrings; + substrings.clear(); + // split processes by delimiter ' ' + int pos = 0, old_pos = 0; + do { + pos = processes.find(' ',old_pos); + substrings.push_back( processes.substr(old_pos,pos-old_pos)); + old_pos=pos+1; + } while ( pos != -1 ); + + for ( unsigned int i = 0; i<substrings.size(); i++ ) { + if ( substrings[i].empty() ) + continue; + + // parse part 1 + // treat select all special, as fselected_processes will be set to NULL + try { + if ( substrings[i].substr(0,3) == "all" ) { + select_all = true; + continue; + } + + if ( substrings[i].substr(0,4) == "none" ) { + continue; + } + + std::vector< int > part1_selection; + int anti = 1; + int n = 0; + if ( substrings[i].at(n) == 'a' ) { + anti = -1; + n++; + } + switch ( (char)substrings[i].at(n) ) { + case 'd': part1_selection.push_back( anti*1 ); break; + case 'u': part1_selection.push_back( anti*2 ); break; + case 's': part1_selection.push_back( anti*3 ); break; + case 'c': part1_selection.push_back( anti*4 ); break; + case 'b': part1_selection.push_back( anti*5 ); break; + case 'g': part1_selection.push_back( 0 ); break; + case 'q': for ( int p = 1; p <= 5; p++ ) { + part1_selection.push_back( anti*p ); + } + break; + default : throw std::logic_error("unkown char"); + } + n++; + + //parse part 2 + int s_flav = 0; + anti = 1; + if ( substrings[i].at(n) == 'a' ) { + anti = -1; + n++; + } + if ( substrings[i].at(n) == '!' ) { + s_flav = -1; + n++; + } else if ( substrings[i].at(n) == '=' ) { + s_flav = 1; + n++; + } + if ( substrings[i].at(n) == 'a' && anti == 1 ) { + anti = -1; + n++; + } + + // loop over first selected partons + for ( unsigned int j = 0; j<part1_selection.size(); j++ ) { + int parton1 = part1_selection[j]; + + switch ( (char)substrings[i].at(n) ) { + case 'd': selection.push_back( {parton1, anti*1} ); + if (symmetric) selection.push_back( {anti*1, parton1} ); + break; + case 'u': selection.push_back( {parton1, anti*2} ); + if (symmetric) selection.push_back( {anti*2, parton1} ); + break; + case 's': selection.push_back( {parton1, anti*3} ); + if (symmetric) selection.push_back( {anti*3, parton1} ); + break; + case 'c': selection.push_back( {parton1, anti*4} ); + if (symmetric) selection.push_back( {anti*4, parton1} ); + break; + case 'b': selection.push_back( {parton1, anti*5} ); + if (symmetric) selection.push_back( {anti*5, parton1} ); + break; + case 'g': selection.push_back( {parton1, anti*0} ); + if (symmetric) selection.push_back( {anti*0, parton1} ); + break; + case 'q': for ( int p = 1; p <= 5; p++ ) { + if ( (s_flav == 1 && parton1*parton1 != p*p) || (s_flav == -1 && parton1*parton1 == p*p) ) + continue; + selection.push_back( {parton1, anti*p} ); + if (symmetric) selection.push_back( {anti*p, parton1} ); + } + break; + default : throw std::logic_error("unkown char"); + } + } + } catch ( const std::logic_error& ex ) { + logger.warn["SelectProcess"] << "Failed to parse selection string \""<<substrings[i]<<"\", ignoring"<<endl; + continue; + } + } + + // delete not unique processes from list + for ( unsigned int i = 0; i<selection.size(); i++ ) { + std::pair< int, int > p = selection[i]; + for( unsigned int j = i+1; j<selection.size(); j++ ) { + if ( p == selection[j] ) { + selection.erase(selection.begin()+j); + j--; + } + } + } + + logger.debug["SelectProcess"] << "Selected processes "; + for ( unsigned int i = 0; i<selection.size(); i++ ) + logger.debug["SelectProcess"] << selection[i].first << " " << selection[i].second << " , "; + logger.debug["SelectProcess"] << endl; + + if (select_all) { + delete fselected_processes; + fselected_processes = NULL; + UpdateProcesses(); + } else { + SelectProcesses(selection); + } +} + +//_____________________________________________________________________________ +bool fastNLOReader::UpdateProcesses() { + if ( fselected_processes ) { + // enable the selected processes + bool success = true; + for ( unsigned int j = 0; j<BBlocksSMCalc.size(); j++ ) { + for ( unsigned int i = 0; i < BBlocksSMCalc[j].size(); i++ ) { + fastNLOCoeffBase* c = BBlocksSMCalc[j][i]; + // Check if the contribution is additive (and thus eventually has subprocess support) + if ( c && c->IsEnabled() && fastNLOCoeffAddBase::CheckCoeffConstants(c,true) ) { + ((fastNLOCoeffAddBase*)c)->SubEnableAll( false ); + success &= ((fastNLOCoeffAddBase*)c)->SubSelect( *fselected_processes, true ); + } + } + } + return success; + } else { + // enable all processes + for ( unsigned int j = 0; j<BBlocksSMCalc.size(); j++ ) + for ( unsigned int i = 0; i < BBlocksSMCalc[j].size(); i++ ) + if ( BBlocksSMCalc[j][i] && BBlocksSMCalc[j][i]->IsEnabled() && fastNLOCoeffAddBase::CheckCoeffConstants(BBlocksSMCalc[j][i], true) ) + ((fastNLOCoeffAddBase*)BBlocksSMCalc[j][i])->SubEnableAll(); + return true; + } +} + +//______________________________________________________________________________ +void fastNLOReader::FillAlphasCache(bool lForce) { + logger.debug["FillAlphasCache"]<<endl; + //! + //! Fill the internal alpha_s cache. + //! This is usally called automatically. Only if you + //! make use of ReFillCache==false options, you have + //! to take care of this filling by yourself. + //! + + // check if the alpha_s value is somehow reasonable + logger.debug["FillAlphasCache"]<<"Sanity check!"<<endl; + TestAlphas(); + + // is there a need for a recalculation? + const double asNew = CalcReferenceAlphas(); + if (asNew == fAlphasCached && !lForce) { + logger.debug["FillAlphasCache"]<<"No need for a refilling of AlphasCache. asNew==fAlphasCached="<<asNew<<endl; + } else { + fAlphasCached = asNew; + for (unsigned int j = 0 ; j<BBlocksSMCalc.size() ; j++) { + for (unsigned int i = 0 ; i<BBlocksSMCalc[j].size() ; i++) { + // Check that this contribution type j and no. i should actually be used + // Otherwise deactivation of e.g. threshold corr. is not respected here + if ( BBlocksSMCalc[j][i] && BBlocksSMCalc[j][i]->IsEnabled() ) { + fastNLOCoeffBase* c = BBlocksSMCalc[j][i]; + if (fastNLOCoeffAddFlex::CheckCoeffConstants(c,true)) + FillAlphasCacheInBlockBv21((fastNLOCoeffAddFlex*)c); + else if (fastNLOCoeffAddFix::CheckCoeffConstants(c,true)) + FillAlphasCacheInBlockBv20((fastNLOCoeffAddFix*)c); + else if (fastNLOCoeffMult::CheckCoeffConstants(c,true)) + logger.info["FillAlphasCache"]<<"Nothing to be done for multiplicative contribution."<<endl; + else { + logger.error["FillAlphasCache"]<<"Could not identify contribution. Printing."<<endl; + c->Print(-1); + } + } + } + } + } +} + + +//______________________________________________________________________________ +void fastNLOReader::FillAlphasCacheInBlockBv20(fastNLOCoeffAddFix* c) { + //! + //! Internal method for filling alpha_s cache + //! + + // todo: the flag IScaleDep should also indicate whether this contribution may contain scale variations + int scalevar = c->GetNpow() == ILOord ? 0 : fScalevar; + + // Sanity check that scalevar is in allowed range + // For thresh. corr. can otherwise lead to inf and then segfault! + // scalevarmax == 0 for contributions not requiring additional tables (LO, multiplicative) + int scalevarmax = GetNScaleVariations(); + if ((scalevarmax != 0) && (scalevar >= scalevarmax)) { + logger.error<<"Trying to refresh cache for non-existing scale variation no. "<<scalevar<<" while only "<<GetNScaleVariations()<<" exist in total. Exiting."<<endl; + exit(1); + } + double scalefac = fScaleFacMuR/c->GetScaleFactor(scalevar); + logger.debug["FillAlphasCacheInBlockBv20"]<<"scalefac="<<scalefac<<"\tscalevar="<<scalevar<<endl; + + for (unsigned int i=0; i<NObsBin; i++) { + for (int j=0; j<c->GetTotalScalenodes(); j++) { + double mur = scalefac * c->GetScaleNode(i,scalevar,j); + double as = CalcAlphas(mur); + c->AlphasTwoPi_v20[i][j] = pow(as/TWOPI , c->GetNpow()); + } + } +} + + +//______________________________________________________________________________ +void fastNLOReader::FillAlphasCacheInBlockBv21(fastNLOCoeffAddFlex* c) { + //! + //! Internal method for filling alpha_s cache + //! + + for (unsigned int i=0; i<NObsBin; i++) { + for (unsigned int jS1=0; jS1<c->GetNScaleNode1(i); jS1++) { + for (unsigned int kS2=0; kS2<c->GetNScaleNode2(i); kS2++) { + double mur = CalcMu(kMuR , c->GetScaleNode1(i,jS1) , c->GetScaleNode2(i,kS2) , fScaleFacMuR); + double as = CalcAlphas(mur); + double alphastwopi = pow(as/TWOPI, c->GetNpow()); + c->AlphasTwoPi[i][jS1][kS2] = alphastwopi; + } + } + } +} + + +//______________________________________________________________________________ +double fastNLOReader::CalcAlphas(double Q) { + //! + //! Internal method for calculating the alpha_s(mu) + //! + return EvolveAlphas(Q); +} + + +//______________________________________________________________________________ +double fastNLOReader::CalcReferenceAlphas() { + double mu = 0; + if (GetIsFlexibleScaleTable()) { + if (fMuRFunc==kExtern) mu = (*Fct_MuR)(91.,1.)*(fScaleFacMuR+0.1); + else mu = 91.1876111111+(fMuRFunc*0.1)+(fScaleFacMuR); + } else mu = 91.187611111115*(fScaleFacMuR+0.1)+fScalevar*0.1; + double as = CalcAlphas(mu); + if (std::isnan(as)) { + logger.error["CalcReferenceAlphas"]<<"Reference alphas is a 'nan' for scale mu="<<mu<<endl; + //exit(1); + } + return as; +} + + +//______________________________________________________________________________ +double fastNLOReader::CalcNewPDFChecksum() { + //! calculate a PDF checksum to + //! decide, whether PDF cache has to be refilled + + // init PDF and check success + logger.debug["CalcNewPDFChecksum"]<<"Call InitPDF() in user module."<<endl; + fPDFSuccess = InitPDF(); + logger.debug["CalcNewPDFChecksum"]<<"Return value InitPDF() = "<<fPDFSuccess<<endl; + if (!fPDFSuccess) { + logger.warn["CalcPDFChecksum"]<<"PDF initialization failed. Please check PDF interface in your FastNLO user module."<<endl; + return 0.; + } + + // calculate checksum for some scales and flavors + double muf = 0; + if (GetIsFlexibleScaleTable()) { + if (fMuFFunc==kExtern) muf = (*Fct_MuF)(91.,10.)/91.*(fScaleFacMuF+0.5) ; + else muf = (91.1+0.1*fMuFFunc)/91.+fScaleFacMuF; + } else { + muf=(fScaleFacMuF+0.1)+fScalevar*0.1; + } + double cks = CalcChecksum(muf); + return cks; +} + + +//______________________________________________________________________________ +double fastNLOReader::CalcChecksum(double mufac) { + //! caculate a checksum from the PDF in order to check + //! if the PDF has changed. This is mandatory + //! since the old LHAPDF code is written in fortran + //! and PDFs may change without any notice. + logger.debug["CalcChecksum"]<<"Calculate checksum of 13 flavors, 3 mu_f values, and 3 x-values, for scalefac="<<mufac<<endl; + double cks = 0; + vector<double> xfx(13); + const double mf[3] = { 3,10,91.18}; + const double x[3] = {1.e-1,1.e-2,1.e-3}; + for (int jf = 0 ; jf<3 ; jf++) { + double mu = mf[jf]* mufac;//(fScaleFacMuF+0.1)+fScalevar*0.1; + for (int ix = 0 ; ix<3 ; ix++) { + xfx = GetXFXSqrtS(x[ix],mu); + for (unsigned int fl = 0 ; fl<xfx.size() ; fl++) { + cks+=xfx[fl]; + } + } + } + logger.debug["CalcChecksum"]<<"Calculated checksum = "<<cks<<endl; + return cks; +} + + +//______________________________________________________________________________ +bool fastNLOReader::TestAlphas() { + //! Test if the alpha_s evolution provided by the user + //! yields realistic results. + const double as = CalcAlphas(91.18); + if (as < 0.01 || as > 0.5) { + logger.warn["TestAlphas"]<<"The alphas value, returned by the user class seems to be unreasonably small/large."<<endl; + logger.warn["TestAlphas"]<<"The evolution code calculated alphas(Mz~91.18GeV) = "<<as<<endl; + return false; + } + logger.debug["TestAlphas"]<<"Sanity check of alpha_s(MZ=91.18) = "<<as<<endl; + return true; +} + + +//______________________________________________________________________________ +bool fastNLOReader::TestXFX() { + const double xtest = 1.e-2; + const double mutest = 10; + vector<double> pdftest = GetXFX(xtest,mutest); + if (pdftest.size() != 13 && pdftest.size() != 14) { + logger.error["TestXFX"]<<"The pdf array must have either 13 flavours or 13+1 for an additional photon entry that is not yet used in fastNLO!" << endl << " Here, the pdf array's size is: " << pdftest.size() << endl; + return false; + } + // if ( pdftest[6] == 0. )printf("fastNLOReader. Warning. There seems to be no gluon in the pdf.\n"); + // double sum = 0; + // for ( int i = 0 ; i<13 ; i++ ) sum+=fabs(pdftest[i]); + // if ( sum== 0. ) printf("fastNLOReader. Error. All 13 pdf probabilities are 0. There might be sth. wrong in the pdf interface. Please check FastNLOUser::GetXFX().\n"); + for (int i = 0 ; i<13 ; i++) { + if (pdftest[i] > 1.e10 || (pdftest[i] < 1.e-10 && pdftest[i] > 1.e-15)) { + logger.warn["TestXFX"]<<"The pdf probability of the "<<i<<"'s flavor seems to be unreasonably large/small (pdf="<<pdftest[i]<<") at x="<<xtest<<", mu="<<mutest<<".\n"; + } + } + return true; +} + + + +//______________________________________________________________________________ +void fastNLOReader::FillPDFCache(double chksum, bool lForce) { + logger.debug["FillPDFCache"]<<"Starting FillPDFCache ..."<<endl; + logger.debug["FillPDFCache"]<<"Passed chksum="<<chksum<<". Do not recalculate checksum (which calls InitPDF()) if chksum!=0."<<endl; + //! + //! Fill the internal pdf cache. + //! This function has to be called by the user, since the + //! pdf parameters and evolutions are calculated externally. + //! + + // reset checknum + double PDFnew = chksum; + if (chksum == 0.) { + logger.debug["FillPDFCache"]<<"Calculate Checksum!"<<endl; + PDFnew = CalcNewPDFChecksum(); + if (PDFnew==0.) { + logger.warn["FillPDFCache"]<<"PDF Checksum is zero."<<endl; + } + logger.debug["FillPDFCache"]<<"PDF Checksum = "<<PDFnew<<endl; + } + + // is there a need for a recalculation? + if (fPDFCached != 0. && fabs(PDFnew/fPDFCached - 1.) < 1.e-7 && !lForce) { + logger.debug["FillPDFCache"]<<"No need for a refilling of PDFCache. fPDFCached=RefreshPDFChecksum()"<<PDFnew<<endl; + } else { + logger.debug["FillPDFCache"]<<"Refilling PDF cache"<<endl; + fPDFCached = PDFnew; + + // check (or not) if the pdf is somehow reasonable + TestXFX(); +#ifdef WITH_HOPPET + if (fUseHoppet) { + //Also refill Hoppet cache and assign new PDF + HoppetInterface::InitHoppet(*this); + } +#endif + + for (unsigned int j = 0 ; j<BBlocksSMCalc.size() ; j++) { + for (unsigned int i = 0 ; i<BBlocksSMCalc[j].size() ; i++) { + // Check that this contribution type j and no. i should actually be used + // Otherwise deactivation of e.g. threshold corr. is not respected here + if ( BBlocksSMCalc[j][i] && BBlocksSMCalc[j][i]->IsEnabled() ) { + fastNLOCoeffBase* c = BBlocksSMCalc[j][i]; + if (fastNLOCoeffAddBase::CheckCoeffConstants(c,true)) { + fastNLOCoeffAddBase* c = (fastNLOCoeffAddBase*)BBlocksSMCalc[j][i]; + // linear: DIS-case + // ---- DIS ---- // + if (c->GetIPDFdef1() == 2) { + if (c->GetNPDFDim() == 0) { + if (!GetIsFlexibleScaleTable(c)) + FillBlockBPDFLCsDISv20((fastNLOCoeffAddFix*)c); + else { + // DIS specific hack, as we do not intend to include data or mult. contributions + if (BBlocksSMCalc[0][0] != NULL) + FillBlockBPDFLCsDISv21((fastNLOCoeffAddFlex*)c,(fastNLOCoeffAddFlex*)BBlocksSMCalc[0][0]); + else //otherwise, please simply use: + FillBlockBPDFLCsDISv21((fastNLOCoeffAddFlex*)c); + } + } + } + // ---- pp ---- // + else if (c->GetIPDFdef1() == 3) { + if (!GetIsFlexibleScaleTable(c)) FillBlockBPDFLCsHHCv20((fastNLOCoeffAddFix*)c); + else FillBlockBPDFLCsHHCv21((fastNLOCoeffAddFlex*)c); + } else { + logger.error["FillPDFCache"]<<"IPDFdef of tables must be 1 or 2.\n"; + } + } else if (fastNLOCoeffMult::CheckCoeffConstants(c,true)) { + logger.info["FillPDFCache"]<<"Nothing to be done for multiplicative contribution."<<endl; + } else { + logger.error["FillPDFCache"]<<"Could not identify contribution. Printing."<<endl; + c->Print(-1); + } + } + } + } + } + logger.debug["FillPDFCache"]<<"... leaving FillPDFCache."<<endl; +} + + +//______________________________________________________________________________ +void fastNLOReader::FillBlockBPDFLCsDISv20(fastNLOCoeffAddFix* c) { + //! Fill member variables in fastNLOCoeffAddFix with PDFCache + logger.debug["FillBlockBPDFLCsDISv20"]<<endl; + // todo: flag IScaleDep should indicate whether scale variations may exist or not. + int scalevar = c->GetNpow() == ILOord ? 0 : fScalevar; + double scalefac = (c->GetScaleFactor(scalevar) == fScaleFacMuF) ? 1. : fScaleFacMuF; + vector<double> xfx(13); // PDFs of all partons + vector<double> xfxspl(13); // PDFs splitting functions of all partons + if (!GetIsFlexibleScaleTable(c)) { + for (unsigned int i=0; i<NObsBin; i++) { + int nxmax = c->GetNxmax(i); + for (int j=0; j<c->GetNScaleNode(); j++) { + for (int k=0; k<nxmax; k++) { + double xp = c->GetXNode1(i,k); + double muf = scalefac * c->GetScaleNode(i,scalevar,j); + xfx = GetXFXSqrtS(xp,muf); + +#ifdef WITH_HOPPET + if (fUseHoppet) + xfxspl = HoppetInterface::GetSpl(xp,muf); +#endif + c->PdfLc[i][j][k] = CalcPDFLinearCombination(c,xfx); + if (fUseHoppet) { + c->PdfSplLc1[i][j][k] = CalcPDFLinearCombination(c, xfxspl); + } + // vector < double > buffer = CalcPDFLinearCombDIS(xfx , c->GetNSubproc()); + // for (int l=0; l<c->GetNSubproc(); l++) { + // c->PdfLc[i][j][k][l] = buffer[l]; + // } + } + } + } + } +} + + +//______________________________________________________________________________ +void fastNLOReader::FillBlockBPDFLCsDISv21(fastNLOCoeffAddFlex* c, fastNLOCoeffAddFlex* c0) { + //! Fill member variables in fastNLOCoeffAddFlex with PDFCache + logger.debug["FillBlockBPDFLCsDISv21"]<<endl;//<<"CoeffTable = "<<endl; + + if (c->PdfLcMuVar.empty()) { + logger.error<< "PdfLcMuVar is empty in CoeffTable. Printing and exiting."<<endl; + c->Print(-1); + exit(1); + } + + // we take the PDF coefficients from the first contributions if compatible + // this avoids repetive access to LHAPDF + // static const bool SpeedUp = false; + static const bool SpeedUp = BBlocksSMCalc[0][0] != NULL; + bool IsCompatible = false; + if (SpeedUp) { + if (c0 != NULL && c0 != c && fCoeff.size()>1) { + IsCompatible = true; + for (unsigned int i=0; i<NObsBin; i++) { + IsCompatible &= (c->GetNScaleNode1(i) == c0->GetNScaleNode1(i)) ; + IsCompatible &= (c->GetNScaleNode2(i) == c0->GetNScaleNode2(i)) ; + IsCompatible &= (c->GetNxmax(i) == c0->GetNxmax(i)) ; + } + int i=0; // just the first obsbin + for (int x=0; x<c->GetNxmax(i); x++) + IsCompatible &= (c->GetXNode1(i,x) == c0->GetXNode1(i,x)); + for (unsigned int jS1=0; jS1<c->GetNScaleNode1(i); jS1++) + IsCompatible &= c->GetScaleNode1(i,jS1) == c0->GetScaleNode1(i,jS1); + for (unsigned int kS2=0; kS2<c->GetNScaleNode2(i); kS2++) { + IsCompatible &= c->GetScaleNode2(i,kS2) == c0->GetScaleNode2(i,kS2); + } + } + if (c==c0 && c->PdfXfx.empty()) + fastNLOTools::ResizeFlexibleVector(c->PdfXfx,c->PdfLcMuVar); + //c->PdfXfx = c->PdfLcMuVar; // resize + } + + for (unsigned int i=0; i<NObsBin; i++) { + // speed up! if mu_f is only dependent on one variable, we can safe the loop over the other one + if (fMuFFunc != kScale1 && fMuFFunc != kScale2) { // that't the standard case! + for (unsigned int jS1=0; jS1<c->GetNScaleNode1(i); jS1++) { + for (unsigned int kS2=0; kS2<c->GetNScaleNode2(i); kS2++) { + double muf = CalcMu(kMuF , c->GetScaleNode1(i,jS1) , c->GetScaleNode2(i,kS2) , fScaleFacMuF); + for (int x=0; x<c->GetNxmax(i); x++) { + //double xp = c->GetXNode1(i,x); + double xp = c->GetXNode1(i,x); + + if (SpeedUp) { + if (c == c0) + c->PdfXfx[i][x][jS1][kS2] = GetXFXSqrtS(xp,muf); + c->PdfLcMuVar[i][x][jS1][kS2] = CalcPDFLinearCombination(c,c0->PdfXfx[i][x][jS1][kS2]); + } else { + // this is the default code ! + c->PdfLcMuVar[i][x][jS1][kS2] = CalcPDFLinearCombination(c,GetXFXSqrtS(xp,muf)); + } + + // if ( i==1 && x==1 && jS1==1 && kS2==1 ) { + // cout<<"muf="<<muf<<"\tpdf="<<c->PdfLcMuVar[i][x][jS1][kS2][0]<<"\tc="<<c<<endl; + // } + //c->PdfLcMuVar[i][x][jS1][kS2] = CalcPDFLinearCombDIS(GetXFXSqrtS(xp,muf) , c->GetNSubproc() ); + } + } + } + } else if (fMuFFunc == kScale2) { // speed up + for (unsigned int kS2=0; kS2<c->GetNScaleNode2(i); kS2++) { + double muf = CalcMu(kMuF , 0 , c->GetScaleNode2(i,kS2) , fScaleFacMuF); + for (int x=0; x<c->GetNxmax(i); x++) { + double xp = c->GetXNode1(i,x); + //vector < double > buffer = CalcPDFLinearCombDIS(GetXFXSqrtS(xp,muf) , c->GetNSubproc() ); + vector<double > buffer = CalcPDFLinearCombination(c,GetXFXSqrtS(xp,muf)); + for (unsigned int jS1=0; jS1<c->GetNScaleNode1(i); jS1++) { + c->PdfLcMuVar[i][x][jS1][kS2] = buffer; + } + } + } + } else if (fMuFFunc == kScale1) { // speed up + for (unsigned int jS1=0; jS1<c->GetNScaleNode1(i); jS1++) { + double muf = CalcMu(kMuF , c->GetScaleNode1(i,jS1) , 0 , fScaleFacMuF); + for (int x=0; x<c->GetNxmax(i); x++) { + double xp = c->GetXNode1(i,x); + //vector < double > buffer = CalcPDFLinearCombDIS(GetXFXSqrtS(xp,muf) , c->GetNSubproc() ); + vector<double > buffer = CalcPDFLinearCombination(c,GetXFXSqrtS(xp,muf)); + for (unsigned int kS2=0; kS2<c->GetNScaleNode2(i); kS2++) { + c->PdfLcMuVar[i][x][jS1][kS2] = buffer; + } + } + } + } + } + logger.debug["FillBlockBPDFLCsDISv21"]<<"done." <<endl; + +} + + +//______________________________________________________________________________ +void fastNLOReader::FillBlockBPDFLCsHHCv20(fastNLOCoeffAddFix* c) { + //! Fill member variables in fastNLOCoeffAddFix with PDFCache + int scalevar = c->GetNpow() == ILOord ? 0 : fScalevar; // Use IScaleDep + double scalefac = fScaleFacMuF/c->GetScaleFactor(scalevar); + logger.debug["FillBlockBPDFLCsHHCv20"]<<"scalefac="<<scalefac<<endl; + + bool IsPPBar; + // ----- if ppbar ---- // + if (c->NPDFPDG[0] == -c->NPDFPDG[1] && std::abs(c->NPDFPDG[0]) == 2212) { + IsPPBar = true; + } + // ----- if pp ---- // + else if (c->NPDFPDG[0] == c->NPDFPDG[1] && (c->NPDFPDG[0] == 2212 || c->NPDFPDG[1] == 2212)) { + IsPPBar = false; + } + // ----- anything else ---- // + else { + logger.error<<"Found beam particles to have PDG codes " << c->NPDFPDG[0] << " and " << c->NPDFPDG[1] << ",\n"; + logger.error<<"but cannot deal with tables other than pp or ppbar, aborting! \n"; + exit(1); + } + + + // half matrix notation + if (c->GetNPDFDim() == 1) { + vector < vector < double > > xfx; // PDFs of all partons + vector < vector < double > > xfxspl; // PDFs splitting functions of all partons + for (unsigned int i=0; i<NObsBin; i++) { + int nxmax = c->GetNxmax(i); + int nxbins1 = c->GetNxtot1(i); // number of columns in half matrix + xfx.resize(nxbins1); + + if (fUseHoppet) { + xfxspl.resize(nxbins1); + } + for (int j=0; j<c->GetNScaleNode(); j++) { + // determine all pdfs of hadron1 + for (int k=0; k<nxbins1; k++) { + double xp = c->GetXNode1(i,k); + double muf = scalefac * c->GetScaleNode(i,scalevar,j); + xfx[k] = GetXFXSqrtS(xp,muf); +#ifdef WITH_HOPPET + if (fUseHoppet) + xfxspl[k] = HoppetInterface::GetSpl(xp,muf); +#endif + } + int x1bin = 0; + int x2bin = 0; + // half-matrix notation + for (int k=0; k<nxmax; k++) { + // Original code calling (x2, x1) cancelling the inverted naming below --> OK in original version + // c->PdfLc[i][j][k] = CalcPDFLinearCombination(c,xfx[x2bin],xfx[x1bin], IsPPBar); + // Fixed code: With correct naming of x1bin, x2bin below (x1, x2) has to be called + c->PdfLc[i][j][k] = CalcPDFLinearCombination(c,xfx[x1bin],xfx[x2bin], IsPPBar); + // TODO: Georg was using (x1, x2) that was wrong with original x1bin, x2bin naming + // TODO: Check with Georg what is correct now after the fix + if (fUseHoppet) { + c->PdfSplLc1[i][j][k] = CalcPDFLinearCombination(c, xfx[x1bin], xfxspl[x2bin], IsPPBar); + c->PdfSplLc2[i][j][k] = CalcPDFLinearCombination(c, xfxspl[x1bin], xfx[x2bin], IsPPBar); + } + // Original code: But x1bin, x2bin are exchanged with respect to GetXIndex for filling. + // This is wrong! + // The 2-dim. x1, x2 bins are mapped onto ix like this: + // [0,0] --> [0] + // [1,0] --> [1] + // [1,1] --> [2] + // [2,0] --> [3] + // etc. + // x1bin++; + // if (x1bin>x2bin) { + // x1bin = 0; + // x2bin++; + // Invert naming of x1bin and x2bin + x2bin++; + if (x2bin>x1bin) { + x2bin = 0; + x1bin++; + } + } + } + } + } + + // full matrix notation + else if (c->GetNPDFDim() == 2) { + vector < vector < double > > xfx1; // PDFs of all partons + vector < vector < double > > xfx2; // PDFs of all partons + vector < vector < double > > xfxspl1; // PDFs splitting functions of all partons + vector < vector < double > > xfxspl2; // PDFs splitting functions of all partons + for (unsigned int i=0; i<NObsBin; i++) { + int nxmax = c->GetNxmax(i); + int nxbins1 = c->GetNxtot1(i); // number of xnodes ( == nxmax / Nxtot2[i] ) + int nxbins2 = c->GetNxtot2(i); // number of xnodes ( == nxmax / Nxtot1[i] ) + xfx1.resize(nxbins1); + xfx2.resize(nxbins2); + if (fUseHoppet) { + xfxspl1.resize(nxbins1); + xfxspl2.resize(nxbins1); + } + for (int j=0; j<c->GetNScaleNode(); j++) { + // determine all pdfs of hadron1 + double muf = scalefac * c->GetScaleNode(i,scalevar,j); + for (int k=0; k<nxbins1; k++) { + double xp = c->GetXNode1(i,k); + xfx1[k] = GetXFXSqrtS(xp,muf); +#ifdef WITH_HOPPET + if (fUseHoppet) + xfxspl1[k] = HoppetInterface::GetSpl(xp,muf); +#endif + } + // determine all pdfs of hadron2 + for (int k=0; k<nxbins2; k++) { + double xp = c->GetXNode2(i,k); + xfx2[k] = GetXFXSqrtS(xp,muf); +#ifdef WITH_HOPPET + if (fUseHoppet) + xfxspl2[k] = HoppetInterface::GetSpl(xp,muf); +#endif + } + // full matrix notation + for (int k=0; k<nxmax; k++) { + int x1bin = k % c->GetNxtot1(i); + int x2bin = k / c->GetNxtot1(i); + c->PdfLc[i][j][k] = CalcPDFLinearCombination(c,xfx1[x1bin],xfx2[x2bin], IsPPBar); + if (fUseHoppet) { + c->PdfSplLc1[i][j][k] = CalcPDFLinearCombination(c, xfx1[x1bin], xfxspl2[x2bin], IsPPBar); + c->PdfSplLc2[i][j][k] = CalcPDFLinearCombination(c, xfxspl1[x1bin], xfx2[x2bin], IsPPBar); + } + + } + } + } + } +} + + +//______________________________________________________________________________ +void fastNLOReader::FillBlockBPDFLCsHHCv21(fastNLOCoeffAddFlex* c) { + //! Fill member variables in fastNLOCoeffAddFlex with PDFCache + //! The calculation is improved, if the factorization scale is + //! calculated from only one scale variable (i.e. kScale1 or kScale2) + logger.debug["FillBlockBPDFLCsHHCv21"]<<endl; + if (c->PdfLcMuVar.empty()) { + cout<< "PdfLcMuVar in CoeffTable is not accessible (resized)."<<endl; + exit(1); + } + + bool IsPPBar; + // ----- if ppbar ---- // + if (c->NPDFPDG[0] == -c->NPDFPDG[1] && std::abs(c->NPDFPDG[0]) == 2212) { + IsPPBar = true; + } + // ----- if pp ---- // + else if (c->NPDFPDG[0] == c->NPDFPDG[1] && (c->NPDFPDG[0] == 2212 || c->NPDFPDG[1] == 2212)) { + IsPPBar = false; + } + // ----- anything else ---- // + else { + logger.error<<"Found beam particles to have PDG codes " << c->NPDFPDG[0] << " and " << c->NPDFPDG[1] << ",\n"; + logger.error<<"but cannot deal with tables other than pp or ppbar, aborting! \n"; + exit(1); + } + + + // half-matrix notation + if (c->GetNPDFDim() == 1) { + vector < vector < double > > xfx; // PDFs of all partons + for (unsigned int i=0; i<NObsBin; i++) { + int nxmax = c->GetNxmax(i); + int nxbins1 = c->GetNxtot1(i); // number of columns in half matrix + xfx.resize(nxbins1); + if (fMuFFunc != kScale1 && fMuFFunc != kScale2) { // that't the standard case! + for (unsigned int jS1=0; jS1<c->GetNScaleNode1(i); jS1++) { + for (unsigned int kS2=0; kS2<c->GetNScaleNode2(i); kS2++) { + // determine all pdfs of hadron1 + for (int k=0; k<nxbins1; k++) { + double muf = CalcMu(kMuF , c->GetScaleNode1(i,jS1) , c->GetScaleNode2(i,kS2) , fScaleFacMuF); + double xp = c->GetXNode1(i,k); + xfx[k] = GetXFXSqrtS(xp,muf); + } + int x1bin = 0; + int x2bin = 0; + for (int x=0; x<nxmax; x++) { + // CalcPDFLinearCombination calculats Anti-proton from proton + c->PdfLcMuVar[i][x][jS1][kS2] = CalcPDFLinearCombination(c,xfx[x1bin],xfx[x2bin], IsPPBar); + x2bin++; + if (x2bin>x1bin) { + x2bin = 0; + x1bin++; + } + } + } + } + } else if (fMuFFunc == kScale2) { // speed up + for (unsigned int kS2=0; kS2<c->GetNScaleNode2(i); kS2++) { + // determine all pdfs of hadron1 + for (int k=0; k<nxbins1; k++) { + double muf = CalcMu(kMuF , 0 , c->GetScaleNode2(i,kS2) , fScaleFacMuF); + double xp = c->GetXNode1(i,k); + xfx[k] = GetXFXSqrtS(xp,muf); + } + for (unsigned int jS1=0; jS1<c->GetNScaleNode1(i); jS1++) { + int x1bin = 0; + int x2bin = 0; + for (int x=0; x<nxmax; x++) { + c->PdfLcMuVar[i][x][jS1][kS2] = CalcPDFLinearCombination(c,xfx[x1bin],xfx[x2bin], IsPPBar); + x2bin++; + if (x2bin>x1bin) { + x2bin = 0; + x1bin++; + } + } + } + } + } else if (fMuFFunc == kScale1) { // speed up + for (unsigned int jS1=0; jS1<c->GetNScaleNode1(i); jS1++) { + // determine all pdfs of hadron1 + for (int k=0; k<nxbins1; k++) { + double muf = CalcMu(kMuF , c->GetScaleNode1(i,jS1) , 0 , fScaleFacMuF); + double xp = c->GetXNode1(i,k); + xfx[k] = GetXFXSqrtS(xp,muf); + } + for (unsigned int kS2=0; kS2<c->GetNScaleNode2(i); kS2++) { + int x1bin = 0; + int x2bin = 0; + for (int x=0; x<nxmax; x++) { + c->PdfLcMuVar[i][x][jS1][kS2] = CalcPDFLinearCombination(c,xfx[x1bin],xfx[x2bin], IsPPBar); + x2bin++; + if (x2bin>x1bin) { + x2bin = 0; + x1bin++; + } + } + } + } + } + } + } + + // full-matrix notation + else if (c->GetNPDFDim() == 2) { + vector < vector < double > > xfx1; // hadron1 + vector < vector < double > > xfx2; // hadron2 + for (unsigned int i=0; i<NObsBin; i++) { + int nxmax = c->GetNxmax(i); + int nxbins1 = c->GetNxtot1(i); // number of xnodes ( == nxmax / Nxtot2[i] ) + int nxbins2 = c->GetNxtot2(i); // number of xnodes ( == nxmax / Nxtot1[i] ) + xfx1.resize(nxbins1); + xfx2.resize(nxbins2); + if (fMuFFunc != kScale1 && fMuFFunc != kScale2) { // that't the standard case! + for (unsigned int jS1=0; jS1<c->GetNScaleNode1(i); jS1++) { + for (unsigned int kS2=0; kS2<c->GetNScaleNode2(i); kS2++) { + // determine all pdfs of hadron1 + double muf = CalcMu(kMuF , c->GetScaleNode1(i,jS1) , c->GetScaleNode2(i,kS2) , fScaleFacMuF); + for (int k=0; k<nxbins1; k++) { + double xp = c->GetXNode1(i,k); + xfx1[k] = GetXFXSqrtS(xp,muf); + } + // determine all pdfs of hadron2 + for (int k=0; k<nxbins2; k++) { + double xp = c->GetXNode2(i,k); + xfx2[k] = GetXFXSqrtS(xp,muf); + } + for (int x=0; x<nxmax; x++) { + // CalcPDFLinearCombination calculats Anti-proton from proton + int x1bin = x % c->GetNxtot1(i); + int x2bin = x / c->GetNxtot1(i); + c->PdfLcMuVar[i][x][jS1][kS2] = CalcPDFLinearCombination(c,xfx1[x1bin],xfx2[x2bin], IsPPBar); + } + } + } + } else if (fMuFFunc == kScale2) { // speed up + for (unsigned int kS2=0; kS2<c->GetNScaleNode2(i); kS2++) { + double muf = CalcMu(kMuF , 0 , c->GetScaleNode2(i,kS2) , fScaleFacMuF); + // determine all pdfs of hadron1 + for (int k=0; k<nxbins1; k++) { + double xp = c->GetXNode1(i,k); + xfx1[k] = GetXFXSqrtS(xp,muf); + } + // determine all pdfs of hadron2 + for (int k=0; k<nxbins2; k++) { + double xp = c->GetXNode2(i,k); + xfx2[k] = GetXFXSqrtS(xp,muf); + } + for (unsigned int jS1=0; jS1<c->GetNScaleNode1(i); jS1++) { + for (int x=0; x<nxmax; x++) { + int x1bin = x % c->GetNxtot1(i); + int x2bin = x / c->GetNxtot1(i); + c->PdfLcMuVar[i][x][jS1][kS2] = CalcPDFLinearCombination(c,xfx1[x1bin],xfx2[x2bin]); + } + } + } + } else if (fMuFFunc == kScale1) { // speed up + for (unsigned int jS1=0; jS1<c->GetNScaleNode1(i); jS1++) { + // determine all pdfs of hadron1 + double muf = CalcMu(kMuF , c->GetScaleNode1(i,jS1) , 0 , fScaleFacMuF); + for (int k=0; k<nxbins1; k++) { + double xp = c->GetXNode1(i,k); + xfx1[k] = GetXFXSqrtS(xp,muf); + } + // determine all pdfs of hadron2 + for (int k=0; k<nxbins2; k++) { + double xp = c->GetXNode2(i,k); + xfx2[k] = GetXFXSqrtS(xp,muf); + } + for (unsigned int kS2=0; kS2<c->GetNScaleNode2(i); kS2++) { + for (int x=0; x<nxmax; x++) { + int x1bin = x % c->GetNxtot1(i); + int x2bin = x / c->GetNxtot1(i); + c->PdfLcMuVar[i][x][jS1][kS2] = CalcPDFLinearCombination(c,xfx1[x1bin],xfx2[x2bin]); + } + } + } + } + } + } + +} + + +//______________________________________________________________________________ +void fastNLOReader::SetExternalFuncForMuR(double(*Func)(double,double)) { + if (!GetIsFlexibleScaleTable()) { + logger.warn["SetExternalFuncForMuR"]<<"This is not a flexible-scale table and SetExternalFuncForMuR has no impact.\n"; + logger.man<<"Please use a flexible-scale table, if you want to change your scale definition.\n"; + return; + } + + Fct_MuR = Func; + SetFunctionalForm(kExtern , kMuR); + logger.info["SetExternalFuncForMuR"]<<"Testing external function:"<<endl; + logger.info<<"Scale1 = 1 , Scale2 = 1 -> mu = func(1,1) = "<<(*Fct_MuR)(1,1)<<endl; + logger.info<<"Scale1 = 91.1876, Scale2 = 91.1876 -> mu = func(91.1876,91.1876) = "<<(*Fct_MuR)(91.1876,91.1876)<<endl; + logger.info<<"Scale1 = 1, Scale2 = 91.1876 -> mu = func(1,91.1876) = "<<(*Fct_MuR)(1,91.1876)<<endl; + logger.info<<"Scale1 = 91.1876, Scale2 = 1 -> mu = func(91.1876,1) = "<<(*Fct_MuR)(91.1876,1)<<endl; +} + + +//______________________________________________________________________________ +void fastNLOReader::SetExternalFuncForMuF(double(*Func)(double,double)) { + if (!GetIsFlexibleScaleTable()) { + logger.warn["SetExternalFuncForMuF"]<<"This is not a flexible-scale table and SetExternalFuncForMuF has no impact.\n"; + logger.man<<"Please use a flexible-scale table, if you want to change your scale definition.\n"; + return; + } + + Fct_MuF = Func; + SetFunctionalForm(kExtern , kMuF); + logger.info["SetExternalFuncForMuF"]<<"Testing external function:"<<endl; + logger.info<<"Scale1 = 1 , Scale2 = 1 -> mu = func(1,1) = "<<(*Fct_MuF)(1,1)<<endl; + logger.info<<"Scale1 = 91.1876, Scale2 = 91.1876 -> mu = func(91.1876,91.1876) = "<<(*Fct_MuF)(91.1876,91.1876)<<endl; + logger.info<<"Scale1 = 1, Scale2 = 91.1876 -> mu = func(1,91.1876) = "<<(*Fct_MuF)(1,91.1876)<<endl; + logger.info<<"Scale1 = 91.1876, Scale2 = 1 -> mu = func(91.1876,1) = "<<(*Fct_MuF)(91.1876,1)<<endl; +} + +//______________________________________________________________________________ +void fastNLOReader::SetExternalConstantForMuR(double MuR) { + //! Set value for mu_r if mu_r is chosen to be constant + //! EScaleFunctionalForm == kConst + fConst_MuR = MuR; + logger.info << "Using constant value " << fConst_MuR << " for MuR" << endl; + if ( MuR<=2 ) logger.warn <<"Specified value for MuR is pretty small: MuR="<<MuR<<endl; + SetFunctionalForm(kConst, kMuR); +} + + +//______________________________________________________________________________ +void fastNLOReader::SetExternalConstantForMuF(double MuF) { + //! Set value for mu_r if mu_r is chosen to be constant + //! EScaleFunctionalForm == kConst + fConst_MuF = MuF; + logger.info << "Using constant value " << fConst_MuF << " for MuF" << endl; + if ( MuF<=2 ) logger.warn <<"Specified value for MuF is pretty small: MuF="<<MuF<<endl; + SetFunctionalForm(kConst, kMuF); +} + + +//______________________________________________________________________________ +void fastNLOReader::SetFunctionalForm(EScaleFunctionalForm func , fastNLO::EMuX MuX) { + //! + //! For MuVar tables this method sets the functional form of + //! the renormalization or the factorization scale. + //! func: Choose a pre-defined function + //! kMuX: is it for mu_r or for mu_f ? + //! + + if (!GetIsFlexibleScaleTable()) { + logger.warn<<"This is not a flexible-scale table. SetFunctionalForm cannot be used.\n"; + return; + } + + // ---- setting scale ---- // + if (MuX == kMuR) { + fMuRFunc = func; + // Alphas Cache needs to be recalculated. + fAlphasCached = 0.; + } else { + fMuFFunc = func; + // PDF Cache needs to be recalculated. + fPDFCached = 0.; + } + + // ---- cross check ---- // + if (func == kScale2 || func == kQuadraticSum || func == kQuadraticMean || func == kQuadraticSumOver4 || + func == kLinearMean || func == kLinearSum || func == kScaleMax || func == kScaleMin || + func == kProd || func == kExpProd2 || func == kS2plusS1half || func == kS2plusS1fourth || func == kPow4Sum || func == kWgtAvg) { + + fastNLOCoeffAddFlex* cNLO = (fastNLOCoeffAddFlex*)B_NLO(); + if (!cNLO) cNLO = (fastNLOCoeffAddFlex*)B_Any(); //crash safe + int nnode = cNLO->GetNScaleNode2(0); + if (nnode < 1) { + logger.error<<"There is no second scale variable available in this table. Using fastNLO::kScale1 only.\n"; + SetFunctionalForm(kScale1,MuX); + } + // for (unsigned int i=0; i<NObsBin; i++) { + // nnode = cNLO->GetNScaleNode2(i); + // if (nnode < 4) { + // logger.warn<<"Scale2 has only very little nodes (n="<<nnode<<") in bin "<<i<<".\n"; + // } + // } + } + PrintScaleSettings(MuX);//not yet ported to v2.2 +} + + +//______________________________________________________________________________ +void fastNLOReader::SetMuRFunctionalForm(EScaleFunctionalForm func) { + SetFunctionalForm(func,kMuR); +} + + +//______________________________________________________________________________ +void fastNLOReader::SetMuFFunctionalForm(EScaleFunctionalForm func) { + SetFunctionalForm(func,kMuF); +} + + +//______________________________________________________________________________ +bool fastNLOReader::SetScaleFactorsMuRMuF(double xmur, double xmuf) { + logger.debug["SetScaleFactorsMuRMuF"]<<"Starting SetScaleFactorsMuRMuF ..."<<endl; + logger.debug["SetScaleFactorsMuRMuF"]<<"Setting to scale factors xmur = "<<xmur<<" and xmuf = "<<xmuf<<endl; + /** + // Set renormalization and factorization scale factors simultaneously for scale variations in all v2 tables. + // You have to ReFill your cache! + // This is done automatically, but if you want to do it by yourself set ReFillCache = false. + // + // The function aborts the whole program if non-sensical scale factors < 1.E-6 are requested. + // The function returns true if the requested scale factors can be used with the available table: + // + // If it is NOT a flexibleScaleTable and there is no NLO scalevar table for xmuf and + // there is no HOPPET, then xmur and xmuf are unchanged, a warning is printed and + // the function returns false! + // If threshold corrections are selected, then + // - only symmetric scale variations, i.e. xmur / xmuf = 1., are allowed, + // - the scale variations for xmuf must be stored in IDENTICAL order + // for the NLO and the threshold corrections (there is only one fScalevar!) + // If either is not the case, xmur and xmuf are unchanged, + // a warning is printed and the function returns false! + */ + + // Check whether xmur and xmuf are positive and at least larger than 1.E-6 + if (xmur < 1.E-6 || xmuf < 1.E-6) { + logger.error["SetScaleFactorsMuRMuF"]<<"Selected scale factors too small ( < 1.E-6 )! Ignoring call."<<endl; + return false; + } + + // Check which pQCD contributions exist and are activated + bool lOrder[] = { false, false, false }; // The maximum ESMorder is kNextToNextToLeading = 2 + const int lOrdMax = 2; + if (!BBlocksSMCalc[kFixedOrder].empty()) { + for (unsigned int i = 0 ; i <BBlocksSMCalc[kFixedOrder].size() ; i++) { + int kOrder = -1; + if (BBlocksSMCalc[kFixedOrder][i]) { + kOrder = BBlocksSMCalc[kFixedOrder][i]->GetIContrFlag2()-1; + if ( kOrder > lOrdMax ) { + logger.error["SetScaleFactorsMuRMuF"]<<"Order beyond NNLO found! Not yet implemented. Aborted."<<endl; + exit(1); + } + } + if ( BBlocksSMCalc[kFixedOrder][i] && BBlocksSMCalc[kFixedOrder][i]->IsEnabled() ) { + lOrder[kOrder] = true; + // if (kOrder == 0) { + // lklo = true; + // } else if (kOrder > 0) { + // lkho = true; + // } + } + } + } + bool lklo = lOrder[0]; + bool lkho = lOrder[1] || lOrder[2]; + bool lllo = (lklo && !lkho) || (lklo && lkho && !lOrder[2]) || (lklo && lOrder[1] && lOrder[2]); + bool lflex = GetIsFlexibleScaleTable(); + + // Check whether threshold corrections exist and are activated + bool lkthc = false; + if (!BBlocksSMCalc[kThresholdCorrection].empty()) { + for (unsigned int i = 0 ; i <BBlocksSMCalc[kThresholdCorrection].size() ; i++) { + //cout<<"i="<<i<<"\tkThresholdCorrection="<<kThresholdCorrection<<endl; + if ( BBlocksSMCalc[kThresholdCorrection][i] && BBlocksSMCalc[kThresholdCorrection][i]->IsEnabled() ) { + lkthc = true; + break; + } + } + } + + // For fixed-scale tables mur scale factor variations are possible only with all lower orders included + // If not, only the prestored muf scale factors are possible with whatever mur scale factors were used at filling time + if (!lllo && !lflex && (fabs(xmur-xmuf) > DBL_MIN)) { + logger.warn["SetScaleFactorsMuRMuF"] + <<"Changing the MuR scale factor different from MuF is not possible when lower orders are missing, nothing changed!\n"; + logger.warn["SetScaleFactorsMuRMuF"] + <<"The method returns 'false', please check the return code and act appropriately.\n"; + logger.man<<"Please do MuR scale factors variations only, if all fixed-order contributions are present and switched on.\n"; + return false; + } + if (!lllo && !lflex && (fabs(xmuf-1.) > DBL_MIN)) { + logger.info["SetScaleFactorsMuRMuF"] + <<"Changing the MuF scale factor from unity is possible only for the prestored values. To be checked!\n"; + logger.man<<"Please do MuF scale variations only, if either prestored values or HOPPET are available.\n"; + } + + // For threshold corrections xmur != xmuf is not allowed + if (lkthc && fabs(xmur-xmuf) > DBL_MIN) { + logger.warn["SetScaleFactorsMuRMuF"] + <<"Threshold corrections do not allow different scale factors for MuR and MuF, nothing changed!\n"; + logger.warn["SetScaleFactorsMuRMuF"] + <<"The method returns 'false', please check the return code and act appropriately.\n"; + logger.man<<"Please do only symmetric scale variations, i.e. xmur = xmuf, with threshold corrections switched on\n"; + logger.man<<"or deactivate threshold corrections first using\n"; + logger.man<<"FastNLOReader::SetContributionON(kTresholdCorrections,Id,false).\n"; + return false; + } + + // Deal with factorization scale first + // Check whether corresponding xmuf variation exists in case of v2.0 table + if (!lflex) { + + // Neither LO only, nor UseHoppet + if ((lkho || lkthc) && !fUseHoppet) { + const int ns = GetNScaleVariations(); + logger.debug["SetScaleFactorsMuRMuF"]<<"Found "<<ns<<" scale variations for contributions switched ON."<<endl; + + // fastNLOCoeffAddFix* cLO = (fastNLOCoeffAddFix*)B_LO(); + fastNLOCoeffAddFix* cNLO = (fastNLOCoeffAddFix*)B_NLO(); + fastNLOCoeffAddFix* cNNLO = (fastNLOCoeffAddFix*)B_NNLO(); + + int sfho = -1; + if (lkho) { + for (int is = 0 ; is<ns ; is++) { + if (cNLO) { + if (fabs(cNLO->GetScaleFactor(is)-xmuf) < DBL_MIN) { + if (sfho != -1 && sfho != is) { + logger.error["SetScaleFactorsMuRMuF"]<<"Inconsistent scale variations in higher-order contributions. Aborted!"<<endl; + exit(1); + } + sfho = is; + } + } + if (cNNLO) { + if (fabs(cNNLO->GetScaleFactor(is)-xmuf) < DBL_MIN) { + if (sfho != -1 && sfho != is) { + logger.error["SetScaleFactorsMuRMuF"]<<"Inconsistent scale variations in higher-order contributions. Aborted!"<<endl; + exit(1); + } else { + sfho = is; + } + } + } + } + } + int sfthc = -1; + if (lkthc) { + for (int is = 0 ; is<ns ; is++) { + if (fabs(((fastNLOCoeffAddFix*)B_ThC())->GetScaleFactor(is)-xmuf) < DBL_MIN) { + sfthc = is; + break; + } + } + } + if (lkho && sfho == -1) { + logger.warn["SetScaleFactorsMuRMuF"]<<"Could not find HO table with given mu_f scale factor of "<<xmuf<<", nothing changed!"<<endl; + logger.warn["SetScaleFactorsMuRMuF"] + <<"The method returns 'false', please check the return code and act appropriately.\n"; + return false; + } + if (lkthc && sfthc == -1) { + logger.warn["SetScaleFactorsMuRMuF"]<<"Could not find ThC table with given mu_f scale factor of "<<xmuf<<", nothing changed!"<<endl; + logger.warn["SetScaleFactorsMuRMuF"] + <<"The method returns 'false', please check the return code and act appropriately.\n"; + return false; + } + if (lkthc && lkho && sfho != sfthc) { + logger.warn["SetScaleFactorsMuRMuF"]<<"Order of scale variation tables different in HO and ThC tables, "<<sfho<<" != "<<sfthc<<" !"<<endl; + logger.warn["SetScaleFactorsMuRMuF"]<<"This is currently not supported, nothing changed!"<<endl; + logger.warn["SetScaleFactorsMuRMuF"] + <<"The method returns 'false', please check the return code and act appropriately.\n"; + return false; + } + + // Finally change renormalization scale first. Otherwise safety check in SetScaleVariationfails! + fScaleFacMuR = xmur; + // Now set factorization scale + fScaleFacMuF = xmuf; + bool bSetScales = false; + if (lkho) { + bSetScales = SetScaleVariation(sfho); + if (!bSetScales) { + logger.error["SetScaleFactorsMuRMuF"]<<"HO scale variation table "<<sfho<<" could not be selected, stopped!"<<endl; + exit(1); + } + } + } else { // LO only or UseHoppet + logger.debug["SetScaleFactorsMuRMuF"]<<"Either LO only or UseHoppet==true. Enable default factorization scale variation (MuF=1.0)."<<endl; + logger.debug["SetScaleFactorsMuRMuF"]<<"If required, Hoppet will be used to calculate scale variation contributions on the fly." << endl; + const int ns = GetNScaleVariations(); + logger.debug["SetScaleFactorsMuRMuF"]<<"Found "<<ns<<" scale variations for contributions switched ON."<<endl; + int sfho = -1; + if (lkho) { + for (int is = 0 ; is<ns ; is++) { + if (fabs(((fastNLOCoeffAddFix*)B_NLO())->GetScaleFactor(is) - 1.0) < DBL_MIN) { + sfho = is; + break; + } + } + } + + bool bSetScales = false; + if (lkho) { + bSetScales = SetScaleVariation(sfho); + if (!bSetScales) { + logger.error["SetScaleFactorsMuRMuF"]<<"NLO scale variation table "<<sfho<<" could not be selected, stopped!"<<endl; + exit(1); + } + } else { + bSetScales = SetScaleVariation(0); + if (!bSetScales) { + logger.error["SetScaleFactorsMuRMuF"]<<"LO scale variation table "<< 0 <<" could not be selected, stopped!"<<endl; + exit(1); + } + } + fScaleFacMuR = xmur; + fScaleFacMuF = xmuf; + PrintScaleSettings(); + } + } else { // Flexible-scale table + fScaleFacMuR = xmur; + fScaleFacMuF = xmuf; + PrintScaleSettings(kMuR); + PrintScaleSettings(kMuF); + } + logger.debug["SetScaleFactorsMuRMuF"]<<"... leaving SetScaleFactorsMuRMuF."<<endl; + return true; +} + + +//______________________________________________________________________________ +void fastNLOReader::PrintScaleSettings(fastNLO::EMuX MuX) { + if (!GetIsFlexibleScaleTable()) { + logger.info["PrintScaleSettings"]<<"Renormalization scale chosen to be mu_r = "<<fScaleFacMuR<<" * "<<B_Any()->GetScaleDescription()<<endl; + logger.info["PrintScaleSettings"]<<"Factorization scale chosen to be mu_f = "<<fScaleFacMuF<<" * "<<B_Any()->GetScaleDescription()<<endl; + } else { + // ---- prepare printout ---- // + static const string sname[2] = {"Renormalization","Factorization"}; + static const string smu[2] = {"mu_r"," mu_f"}; + const int isc = MuX==kMuR?0:1; + const double sfac = MuX==kMuR?fScaleFacMuR:fScaleFacMuF; + EScaleFunctionalForm func = MuX==kMuR?fMuRFunc:fMuFFunc; + char fname[100]; + switch (func) { + case kScale1: + sprintf(fname,"%s^2",B_Any()->GetScaleDescription(0).c_str()); + break; + case kScale2: + sprintf(fname,"%s^2",B_Any()->GetScaleDescription(1).c_str()); + break; + case kQuadraticSum: + sprintf(fname,"(%s^2 + %s^2)",B_Any()->GetScaleDescription(0).c_str(),B_Any()->GetScaleDescription(1).c_str()); + break; + case kQuadraticMean: + sprintf(fname,"(%s^2 + %s^2)/2",B_Any()->GetScaleDescription(0).c_str(),B_Any()->GetScaleDescription(1).c_str()); + break; + case kQuadraticSumOver4: + sprintf(fname,"(%s^2 + %s^2)/4",B_Any()->GetScaleDescription(0).c_str(),B_Any()->GetScaleDescription(1).c_str()); + break; + case kS2plusS1half: + sprintf(fname,"(%s^2 + 2*%s^2)/2",B_Any()->GetScaleDescription(0).c_str(),B_Any()->GetScaleDescription(1).c_str()); + break; + case kS2plusS1fourth: + sprintf(fname,"%s^2/4 + %s^2",B_Any()->GetScaleDescription(0).c_str(),B_Any()->GetScaleDescription(1).c_str()); + break; + case kPow4Sum: + sprintf(fname,"sqrt(%s^4 + %s^4)",B_Any()->GetScaleDescription(0).c_str(),B_Any()->GetScaleDescription(1).c_str()); + break; + case kWgtAvg: + sprintf(fname,"(%s^4 + %s^4)/ (%s^2 + %s^2) ", + B_Any()->GetScaleDescription(0).c_str(),B_Any()->GetScaleDescription(1).c_str(), + B_Any()->GetScaleDescription(0).c_str(),B_Any()->GetScaleDescription(1).c_str()); + break; + case kLinearMean: + sprintf(fname,"((%s+%s)/2)^2",B_Any()->GetScaleDescription(0).c_str(),B_Any()->GetScaleDescription(1).c_str()); + break; + case kLinearSum: + sprintf(fname,"(%s+%s)^2",B_Any()->GetScaleDescription(0).c_str(),B_Any()->GetScaleDescription(1).c_str()); + break; + case kScaleMax: + sprintf(fname,"max(%s^2,%s^2)",B_Any()->GetScaleDescription(0).c_str(),B_Any()->GetScaleDescription(1).c_str()); + break; + case kScaleMin: + sprintf(fname,"min(%s^2,%s^2)",B_Any()->GetScaleDescription(0).c_str(),B_Any()->GetScaleDescription(1).c_str()); + break; + case kProd: + sprintf(fname,"(%s*%s)^2)",B_Any()->GetScaleDescription(0).c_str(),B_Any()->GetScaleDescription(1).c_str()); + break; + case kExpProd2: + sprintf(fname,"(%s*exp(0.3*%s)^2)",B_Any()->GetScaleDescription(0).c_str(),B_Any()->GetScaleDescription(1).c_str()); + break; + case kExtern: + sprintf(fname,"f_ext(%s,%s)",B_Any()->GetScaleDescription(0).c_str(),B_Any()->GetScaleDescription(1).c_str()); + break; + case kConst: + sprintf(fname,"%f", ((MuX==kMuR) ? fConst_MuR : fConst_MuF)); + break; + default: + logger.error<<"unknown scale choice: "<<MuX<<"\tkConst would be: "<<kConst <<endl; + } + logger.info["PrintScaleSettings"]<<sname[isc]<<" scale chosen to be "<<smu[isc]<<"^2 = " + <<sfac<<"^2 * "<<fname<<endl; + } +} + + +//_____________________________________________________________________________ +double fastNLOReader::CalcMu(fastNLO::EMuX kMuX , double scale1, double scale2, double scalefac) { + //! + //! Calculate the scales with the defined function and the + //! corresponding prefactor. + //! + if (kMuX == kMuR && fScaleFacMuR != scalefac) logger.error<<"Sth. went wrong with the scales.\n"; + if (kMuX == kMuF && fScaleFacMuF != scalefac) logger.error<<"Sth. went wrong with the scales.\n"; + + EScaleFunctionalForm Func = (kMuX == kMuR) ? fMuRFunc : fMuFFunc; + double mu = 0; + if (Func == fastNLO::kScale1) mu = scale1; + else if (Func == fastNLO::kScale2) mu = scale2; + else if (Func == fastNLO::kQuadraticSum) mu = FuncMixedOver1(scale1,scale2); + else if (Func == fastNLO::kQuadraticMean) mu = FuncMixedOver2(scale1,scale2); + else if (Func == fastNLO::kQuadraticSumOver4) mu = FuncMixedOver4(scale1,scale2); + else if (Func == fastNLO::kS2plusS1half) mu = FuncMixed2s2Ov2(scale1,scale2); + else if (Func == fastNLO::kS2plusS1fourth) mu = FuncMixed2s2Ov4(scale1,scale2); + else if (Func == fastNLO::kPow4Sum) mu = FuncPow4Sum(scale1,scale2); + else if (Func == fastNLO::kWgtAvg) mu = FuncWgtAvg(scale1,scale2); + else if (Func == fastNLO::kLinearMean) mu = FuncLinearMean(scale1,scale2); + else if (Func == fastNLO::kLinearSum) mu = FuncLinearSum(scale1,scale2); + else if (Func == fastNLO::kScaleMax) mu = FuncMax(scale1,scale2); + else if (Func == fastNLO::kScaleMin) mu = FuncMin(scale1,scale2); + else if (Func == fastNLO::kProd) mu = FuncProd(scale1,scale2); + else if (Func == fastNLO::kExpProd2) mu = FuncExpProd2(scale1,scale2); + else if (Func == fastNLO::kExtern) mu = (kMuX==kMuR) ? (*Fct_MuR)(scale1,scale2) : (*Fct_MuF)(scale1,scale2); + else if (Func == fastNLO::kConst) mu = (kMuX==kMuR) ? fConst_MuR : fConst_MuF; + else { + logger.error["CalcMu"]<<"Could not identify functional form for scales calculation.\n"; + exit(4); + } + + return scalefac * mu; +} + + +//______________________________________________________________________________ +double fastNLOReader::FuncMixedOver1(double scale1 , double scale2) { + return (sqrt((scale1*scale1 + scale2*scale2) / 1.)); +} + + +//______________________________________________________________________________ +double fastNLOReader::FuncMixedOver2(double scale1 , double scale2) { + return (sqrt((scale1*scale1 + scale2*scale2) / 2.)); +} + + +//______________________________________________________________________________ +double fastNLOReader::FuncMixedOver4(double scale1 , double scale2) { + return (sqrt((scale1*scale1 + scale2*scale2) / 4.)); +} + + +//______________________________________________________________________________ +double fastNLOReader::FuncMixed2s2Ov2(double scale1 , double scale2) { + return (sqrt((scale1*scale1 + 2*scale2*scale2) / 2.)); +} + + +//______________________________________________________________________________ +double fastNLOReader::FuncMixed2s2Ov4(double scale1 , double scale2) { + return sqrt((scale1*scale1/4. + scale2*scale2)); +} + + +//______________________________________________________________________________ +double fastNLOReader::FuncPow4Sum(double scale1 , double scale2) { + return sqrt(sqrt(pow(scale1,4) + pow(scale2,4))); +} + + +//______________________________________________________________________________ +double fastNLOReader::FuncWgtAvg(double scale1 , double scale2) { + return sqrt((pow(scale1,4) + pow(scale2,4)) / (scale1*scale1 + scale2*scale2)); +} + + +//______________________________________________________________________________ +double fastNLOReader::FuncLinearMean(double scale1 , double scale2) { + return (scale1 + scale2) / 2.; +} + + +//______________________________________________________________________________ +double fastNLOReader::FuncLinearSum(double scale1 , double scale2) { + return scale1 + scale2; +} + + +//______________________________________________________________________________ +double fastNLOReader::FuncMax(double scale1 , double scale2) { + if (scale1 > scale2) return scale1; + else return scale2; +} + + +//______________________________________________________________________________ +double fastNLOReader::FuncMin(double scale1 , double scale2) { + if (scale1 < scale2) return scale1; + else return scale2; +} + + +//______________________________________________________________________________ +double fastNLOReader::FuncProd(double scale1 , double scale2) { + return (scale1 * scale2); +} + + +//______________________________________________________________________________ +double fastNLOReader::FuncExpProd2(double scale1 , double scale2) { + return (scale1 * exp(0.3*scale2)); +} + + +//______________________________________________________________________________ +int fastNLOReader::ContrId(const ESMCalculation eCalc, const ESMOrder eOrder) const { + int Id = -1; + if ( BBlocksSMCalc.empty() ) { + return Id; + } + + // Requested order + string requested = _OrdName[eCalc][eOrder]; + // Loop over all available orders of contribution type eCalc + for (unsigned int i=0; i<BBlocksSMCalc[eCalc].size(); i++) { + if (BBlocksSMCalc[eCalc][i]) { + int iFlag1 = BBlocksSMCalc[eCalc][i]->GetIContrFlag1(); + int iFlag2 = BBlocksSMCalc[eCalc][i]->GetIContrFlag2(); + string available = _OrdName[iFlag1-1][iFlag2-1]; + if (available == requested) { + Id = i; + } + } + } + return Id; +} + + + +//______________________________________________________________________________ +// +// Print outs +//______________________________________________________________________________ + + +//______________________________________________________________________________ +void fastNLOReader::PrintContributionSummary(int iprint) const { + //! this function is inherited from fastNLOTable. + fastNLOTable::PrintContributionSummary(iprint); +} + + +//______________________________________________________________________________ +void fastNLOReader::Print(int iprint) const { + //! this function is inherited from fastNLOTable. + fastNLOTable::Print(iprint); +} + + +//______________________________________________________________________________ +void fastNLOReader::PrintCrossSections() const { + //! + //! Print Cross sections in NLO, k-factors and Reference table cross sections + //! + + // if ( XSection.empty() ) CalcCrossSection(); + // if ( XSectionRef.empty() && XSectionRef_s1.empty() ) CalcReferenceCrossSection();} + + vector < double > xs = XSection; + + printf(" # \n"); + printf(" # FastNLO Cross sections for\n"); + for (unsigned int i = 0 ; i < ScDescript.size() ; i++) { + printf(" # %s\n",ScDescript[i].c_str()); + } + printf(" # at sqrt(s) = %8.2f GeV\n", Ecms); + printf(" # \n"); + printf(" # This is a %s-differential table in %s", ((NDim==1)?"single":"double"),GetDimLabel(0).c_str()); + if (NDim==2) printf(" and in %s",GetDimLabel(1).c_str()); + printf(".\n"); + printf(" #\n"); + + string Aunits[16] = { "[b] -- ","","","[mb] -- ","","","[mu b] --","","","[nb] -- ","","","[pb] -- ","","","[fb] -- "}; + string Nounits[16] = { " -- ","",""," -- ","",""," -- ","",""," -- ","",""," -- ","",""," -- "}; + string* unit = fUnits==kAbsoluteUnits ? Aunits : Nounits; + + + if (NDim == 2) { + double lobindim2 = -42; + printf(" # - Bin - | --- %5s --- -- XS-FNLO %s -- k-factor -- |\n",GetDimLabel(1).c_str(),unit[Ipublunits].c_str()); + printf(" # --------------------------------------------------------------------\n"); + for (unsigned int i=0; i<xs.size(); i++) { + if (GetObsBinLoBound(i,0) != lobindim2) { + printf(" # ----> from %9.3f to %9.3f in %s <----\n",GetObsBinLoBound(i,0),GetObsBinUpBound(i,0),GetDimLabel(0).c_str()); + lobindim2 = GetObsBinLoBound(i,0); + } + printf(" # %4.0f | %9.3f - %9.3f % 9.4e |\n",i*1.,GetObsBinLoBound(i,1),GetObsBinUpBound(i,1),xs[i]); + } + } + + else { + printf(" --- %5s --- - Bin - -- XS-FNLO -- \n",GetDimLabel(NDim-1).c_str()); + for (unsigned int i=0; i<xs.size(); i++) { + printf(" %9.3f - %9.3f %3.0f % 9.4e\n",GetObsBinLoBound(i,NDim-1),GetObsBinUpBound(i,NDim-1),i*1.,xs[i]); + } + } + printf(" # --------------------------------------------------------------------\n"); +} + + +//______________________________________________________________________________ +void fastNLOReader::PrintCrossSectionsWithReference() { + //! + //! Print Cross sections in NLO, k-factors and Reference table cross sections + //! + //! Please mention, that the reference cross section can be easily deviating + //! more than 20% (scales, pdfs, alpha_s, etc...). This does not mean that + //! the table is wrong! + //! + + vector < double > xs = XSection; + vector < double > xsref; + if (XSection.empty()) CalcCrossSection(); + if (XSectionRef.empty() && XSectionRef_s1.empty()) CalcReferenceCrossSection(); + + if (GetIsFlexibleScaleTable()) { + if (fMuFFunc == kScale1 && fMuRFunc == kScale1) { + printf(" # FastNLOReader::PrintCrossSectionsWithReference. Info. Taking reference cross sections 's1'\n"); + xsref = XSectionRef_s1; + } else if (fMuFFunc == kScale2 && fMuRFunc == kScale2) { + printf(" # FastNLOReader::PrintCrossSectionsWithReference. Info. Taking reference cross sections 's2'\n"); + xsref = XSectionRef_s2; + } else if (fMuFFunc == kQuadraticMean && fMuRFunc == kQuadraticMean) { + printf(" # FastNLOReader::PrintCrossSectionsWithReference. Info. Taking reference cross sections 'mixed'\n"); + xsref = XSectionRefMixed; + } else { + xsref = XSectionRefMixed; + printf(" # FastNLOReader::PrintCrossSectionsWithReference. Info. Taking reference cross sections 'mixed'\n"); + } + } else xsref = XSectionRef; + + + printf(" # \n"); + printf(" # FastNLO Cross sections for\n"); + for (unsigned int i = 0 ; i < ScDescript.size() ; i++) { + printf(" # %s\n",ScDescript[i].c_str()); + } + printf(" # at sqrt(s) = %8.2f GeV\n", Ecms); + printf(" # \n"); + printf(" # This is a %s-differential table in %s", ((NDim==1)?"single":"double"),GetDimLabel(0).c_str()); + if (NDim==2) printf(" and %s",GetDimLabel(1).c_str()); + printf(" # \n"); + printf(" # Please mention, that the reference cross section can easily deviating up to more\n * than 20%% due to different scale choices, alhpa_s value/evolution, PDFs, etc."); + printf(" # This does not mean, that this FastNLO table is wrong!\n\n"); + printf(" # There are three reference cross sections stored for different scale choices.\n"); + printf(" # If you have choosen mu_r=mu_f=%s, or mu_r=mu_f=%s or mu_r=mu_f=sqrt((%s^2+%s^2)/2), then you access automatically the corresponding reference cross section.\n", + B_NLO()->GetScaleDescription(0).c_str(),B_NLO()->GetScaleDescription(1).c_str(), + B_NLO()->GetScaleDescription(0).c_str(),B_NLO()->GetScaleDescription(1).c_str()); + printf(" # In any other case your reference cross section is calculated using mu_r=mu_f=sqrt((%s^2+%s^2)/2).\n", + B_NLO()->GetScaleDescription(0).c_str(),B_NLO()->GetScaleDescription(1).c_str()); + printf(" # To be fully consistent with the nlojet++ reference cross section, you also have to adjust alpha_s and the alpha_s evolution accordingly.\n\n"); + + printf("\n"); + printf(" #\n"); + + string Aunits[16] = { "[b] -- ","","","[mb] -- ","","","[mu b] --","","","[nb] -- ","","","[pb] -- ","","","[fb] -- "}; + string Nounits[16] = { " -- ","",""," -- ","",""," -- ","",""," -- ","",""," -- ","",""," -- "}; + string* unit = fUnits==kAbsoluteUnits ? Aunits : Nounits; + + if (NDim == 2) { + double lobindim2 = -321312; + printf(" # - Bin - | --- %5s --- -- XS-FNLO %s -- k-factor -- | -- XS-ref (NLOJET++) -- Diff [%%]\n",GetDimLabel(NDim-1).c_str(),unit[Ipublunits].c_str()); + printf(" # -----------------------------------------------------------------------------------------------------------\n"); + for (unsigned int i=0; i<xs.size(); i++) { + if (GetObsBinLoBound(i,0) != lobindim2) { + printf(" # ----> from %9.3f to %9.3f in %s <----\n",GetObsBinLoBound(i,0),GetObsBinUpBound(i,0),GetDimLabel(0).c_str()); + lobindim2 = GetObsBinLoBound(i,0); + } + printf(" # %4.0f | %9.3f - %9.3f % 9.4e | % 9.4e % 5.4f\n", + i*1.,GetObsBinLoBound(i,1),GetObsBinUpBound(i,1),xs[i],xsref[i],(xs[i]-xsref[i])/xsref[i]*100.); + } + } + + else { + printf("FastNLOReader::PrintCrossSections( ). Info. Single differential printing of cross sections not yet nicely implemented.\n"); + printf(" --- %s --- - Bin - -- XS-FNLO -- -- XS-ref (NLOJET++) -- Diff [%%]\n",GetDimLabel(NDim-1).c_str()); + for (unsigned int i=0; i<xs.size(); i++) { + printf(" %9.3f - %9.3f %3.0f % 9.4e % 9.4e % 5.4f\n",GetObsBinLoBound(i,NDim-1),GetObsBinUpBound(i,NDim-1),i*1.,xs[i],xsref[i],(xs[i]-xsref[i])/xsref[i]*100.); + } + } + printf(" # ------------------------------------------------------------------------------------------------------------\n"); +} + + +//______________________________________________________________________________ +double fastNLOReader::RescaleCrossSectionUnits(double binsize, int xunits) { + //! + //! This method rescales the stored cross section units according to + //! the chosen Ipublunits and settings for [kAbsoluteUnits | kPublicationUNits]. + //! + double unit = 1.; + // For kAbsoluteUnits remove division by BinSize + if (fUnits == kAbsoluteUnits) { + unit *= binsize; + } + // Rescale SigmaTilde to Ipublunits (accounts for potentially different settings in XSectUnits) + if (xunits != Ipublunits) { + unit /= pow(10.,xunits-Ipublunits); + } + return unit; +} + + +// +// Evaluation of uncertainties +// +// Scale uncertainty +//______________________________________________________________________________ +XsUncertainty fastNLOReader::GetXsUncertainty(const EScaleUncertaintyStyle eScaleUnc, bool lNorm, double sclfac) { + // Get 2-, 6- or, 30-point scale uncertainty around sclfac * central scale (30 only for normalised x sections/ratios) + // const double xmur0[7] = {1.0, 0.5, 2.0, 0.5, 1.0, 1.0, 2.0}; + // const double xmuf0[7] = {1.0, 0.5, 2.0, 1.0, 0.5, 2.0, 1.0}; + const double xmurn0[31] = {1.0, 0.5, 2.0, 0.5, 1.0, 1.0, 2.0, + 0.5, 0.5, 1.0, 1.0, 0.5, 0.5, 0.5, 1.0, 1.0, 1.0, 1.0, 0.5, + 2.0, 2.0, 1.0, 1.0, 2.0, 2.0, 2.0, 1.0, 1.0, 1.0, 1.0, 2.0}; + const double xmufn0[31] = {1.0, 0.5, 2.0, 1.0, 0.5, 2.0, 1.0, + 0.5, 1.0, 1.0, 0.5, 0.5, 0.5, 1.0, 0.5, 1.0, 1.0, 0.5, 1.0, + 2.0, 1.0, 1.0, 2.0, 2.0, 2.0, 1.0, 2.0, 1.0, 1.0, 2.0, 1.0}; + const double xmurd0[31] = {1.0, 0.5, 2.0, 0.5, 1.0, 1.0, 2.0, + 1.0, 1.0, 0.5, 0.5, 0.5, 1.0, 0.5, 0.5, 1.0, 0.5, 1.0, 1.0, + 1.0, 1.0, 2.0, 2.0, 2.0, 1.0, 2.0, 2.0, 1.0, 2.0, 1.0, 1.0}; + const double xmufd0[31] = {1.0, 0.5, 2.0, 1.0, 0.5, 2.0, 1.0, + 1.0, 0.5, 0.5, 1.0, 1.0, 0.5, 0.5, 0.5, 0.5, 1.0, 1.0, 1.0, + 1.0, 2.0, 2.0, 1.0, 1.0, 2.0, 2.0, 2.0, 2.0, 1.0, 1.0, 1.0}; + + if ( sclfac < 0.1 || sclfac > 10. ) { + logger.error["GetScaleUncertainty"]<<"ERROR! Illegal value for sclfac, exiting. sclfac = "<< sclfac <<endl; + exit(1); + } + double xmurn[31]; + double xmufn[31]; + double xmurd[31]; + double xmufd[31]; + for (int i=0; i<31; i++) { + xmurn[i] = sclfac*xmurn0[i]; + xmufn[i] = sclfac*xmufn0[i]; + xmurd[i] = sclfac*xmurd0[i]; + xmufd[i] = sclfac*xmufd0[i]; + } + XsUncertainty XsUnc; + + unsigned int NObsBin = GetNObsBin(); + unsigned int npoint = 0; + if (eScaleUnc == kSymmetricTwoPoint) { + npoint = 2; + } else if (eScaleUnc == kAsymmetricSixPoint) { + npoint = 6; + } else if (eScaleUnc == kAsymmetricRatio) { + npoint = 30; + } + + logger.debug["GetScaleUncertainty"]<<"npoint = "<<npoint<<endl; + if (npoint == 0) { + logger.info["GetScaleUncertainty"]<<"Only default scale selected, uncertainties will be zero."<<endl; + } else if (npoint == 2) { + logger.info["GetScaleUncertainty"]<<"Symmetric 2-point scale variations selected,"<<endl; + } else if (npoint == 6) { + logger.info["GetScaleUncertainty"]<<"Asymmetric 6-point scale variations selected,"<<endl; + } else if (npoint == 30 && lNorm) { + logger.info["GetScaleUncertainty"]<<"Asymmetric 30-point scale variations for ratios selected,"<<endl; + } else { + logger.error["GetScaleUncertainty"]<<"ERROR! No usual scale variation scheme selected, exiting."<<endl; + logger.error["GetScaleUncertainty"]<<"npoint = "<<npoint<<endl; + logger.error["GetScaleUncertainty"]<<"lNorm = "<<lNorm<<endl; + exit(1); + } + + vector < double > MyXSection; + //! Cross section and absolute uncertainties + for (unsigned int iscl = 0; iscl <= npoint; iscl++) { + SetScaleFactorsMuRMuF(xmurn[iscl],xmufn[iscl]); + CalcCrossSection(); + bool lNormScale = false; + if (lNorm) { + if (eScaleUnc == kAsymmetricRatio) { + lNormScale = true; + } + MyXSection = GetNormCrossSection(lNormScale,xmurd[iscl],xmufd[iscl]); + } else { + MyXSection = GetCrossSection(lNorm); + } + for (unsigned int iobs = 0; iobs < NObsBin; iobs++) { + if (iscl == 0) { + XsUnc.xs.push_back(MyXSection[iobs]); + XsUnc.dxsu.push_back(0); + XsUnc.dxsl.push_back(0); + } else { + XsUnc.dxsu[iobs] = max(XsUnc.dxsu[iobs],MyXSection[iobs]-XsUnc.xs[iobs]); + XsUnc.dxsl[iobs] = min(XsUnc.dxsl[iobs],MyXSection[iobs]-XsUnc.xs[iobs]); + } + } + } + + //! Divide by cross section != 0 to give relative uncertainties + for (unsigned int iobs = 0; iobs < NObsBin; iobs++) { + if (fabs(XsUnc.xs[iobs]) > DBL_MIN) { + XsUnc.dxsu[iobs] = +fabs(XsUnc.dxsu[iobs] / XsUnc.xs[iobs]); + XsUnc.dxsl[iobs] = -fabs(XsUnc.dxsl[iobs] / XsUnc.xs[iobs]); + } else { + XsUnc.dxsu[iobs] = 0.; + XsUnc.dxsl[iobs] = 0.; + } + logger.debug["GetScaleUncertainty"]<<"iobs = " << iobs << ", dxsl = " << XsUnc.dxsl[iobs] << ", dxsu = " << XsUnc.dxsu[iobs] <<endl; + } + + logger.info["GetScaleUncertainty"]<<"Setting scale factors back to default of unity."<<endl; + SetScaleFactorsMuRMuF(xmurn[0],xmufn[0]); + + return XsUnc; +} + + +//______________________________________________________________________________ + +// std::vector< std::vector<double> > fastNLOReader::GetXsUncertaintyVec(const EScaleUncertaintyStyle eScaleUnc, bool lNorm, int iprint, double sclfac) { +std::vector< std::vector<double> > fastNLOReader::GetScaleUncertaintyVec(const EScaleUncertaintyStyle eScaleUnc, bool lNorm, int iprint, double sclfac) { + XsUncertainty xsUnc = fastNLOReader::GetXsUncertainty(eScaleUnc, lNorm, sclfac); + if (iprint > 0) { + string style{ScaleUncertaintyStyle_to_string(eScaleUnc)}; + string UncName = " # Relative scale uncertainties (" + style + ")"; + fastNLOTools::PrintXSUncertainty(xsUnc, UncName); + } + std::vector<std::vector<double> > xsUncVec; + xsUncVec.resize(3); + xsUncVec[0] = xsUnc.xs; + xsUncVec[1] = xsUnc.dxsu; + xsUncVec[2] = xsUnc.dxsl; + return xsUncVec; +} + + +//______________________________________________________________________________ + +// void fastNLOReader::PrintXsUncertaintyVec(fastNLO::EScaleUncertaintyStyle eScaleUnc, std::string UncName, bool lNorm, double sclfac) { +void fastNLOReader::PrintScaleUncertaintyVec(fastNLO::EScaleUncertaintyStyle eScaleUnc, std::string UncName, bool lNorm, double sclfac) { + XsUncertainty xsUnc = GetXsUncertainty(eScaleUnc, lNorm, sclfac); + fastNLOTools::PrintXSUncertainty(xsUnc, UncName); +} + + +// Numerical uncertainty (from CoeffInfoBlocks) +//______________________________________________________________________________ +XsUncertainty fastNLOReader::GetXsUncertainty(const ENumUncertaintyStyle eNumUnc, bool lNorm) { + // + XsUncertainty XsUnc; + vector < double > MyXSection; + vector < double > MyRefXSection; + vector < double > MydXSection; + unsigned int NObsBin = GetNObsBin(); + + //! For interpolation bias get reference PDF & member and values + if (eNumUnc == kApproxBias) { + std::vector < std::string > dCIBDescr; + std::string PDFset; + std::string PDFmem; + std::vector < double > dCIBCont; + //! Loop over contributions and evaluate InfoBlocks with reference values + for (unsigned int i=0; i<fCoeff.size() ; i++) { + fastNLOCoeffBase* c = GetCoeffTable(i); + logger.debug["GetNumUncertainty"]<<"Check whether contribution " << i << " is enabled, " << c->IsEnabled() << ", and additive (0), " << c->GetIAddMultFlag() << endl; + if ( c->IsEnabled() && c->GetIAddMultFlag() == 0 ) { + logger.info["GetNumUncertainty"]<<"Checking contribution " << i << " for reference values in InfoBlock." << endl; + if ( ! c->HasCoeffInfoBlock(1) ) { + logger.error["GetNumUncertainty"]<<"ERROR! No InfoBlock found for reference values, exiting."<<endl; + exit(35); + } + int iCIBIndex = c->GetCoeffInfoBlockIndex(1); + logger.debug["GetNumUncertainty"]<<"Found CoeffInfoBlock "<<iCIBIndex<<" with reference cross sections."<<endl; + dCIBDescr = c->GetCoeffInfoBlockDescription(iCIBIndex); + dCIBCont = c->GetCoeffInfoBlockContent(iCIBIndex); + if ( dCIBDescr.size() < 3 ) { + logger.error["GetNumUncertainty"]<<"ERROR! InfoBlock description too short for reference cross sections, exiting."<<endl; + logger.error["GetNumUncertainty"]<<" Line two and three should contain the used PDF set and member."<<endl; + exit(36); + } else { + PDFset = dCIBDescr[1]; + PDFmem = dCIBDescr[2]; + } + if ( MyRefXSection.size() == 0 ) { + MyRefXSection = dCIBCont; + } else { + if ( MyRefXSection.size() != dCIBCont.size() ) { + logger.error["GetNumUncertainty"]<<"ERROR! Unequal number of reference values in contributions, exiting."<<endl; + exit(39); + } + for (unsigned int j=0; j<MyRefXSection.size(); j++ ) { + MyRefXSection[j] += dCIBCont[j]; + } + } + } + } + if ( PDFset.empty() || PDFmem.empty() ) { // Corresponds to values from last active contribution + logger.error["GetNumUncertainty"]<<"ERROR! PDF set and/or PDF member used for reference values not found, aborted!" << endl; + exit(37); + } + logger.warn["GetNumUncertainty"]<<"The reference calculation used member " << PDFmem << " from PDF set " << PDFset << "." << endl; + logger.warn["GetNumUncertainty"]<<"To test the interpolation quality exactly the same PDF set and member must be used!" << endl; + } + + //! Cross section and absolute uncertainties + CalcCrossSection(); + MyXSection = GetCrossSection(lNorm); + MydXSection = GetUncertainty(lNorm); + + //! Fill return struct + if (eNumUnc == kNumNone) { + logger.info["GetNumUncertainty"]<<"No numerical uncertainty selected, uncertainties will be zero."<<endl; + for (unsigned int iobs = 0; iobs < NObsBin; iobs++) { + XsUnc.xs.push_back(MyXSection[iobs]); + XsUnc.dxsu.push_back(0); + XsUnc.dxsl.push_back(0); + } + } else if (eNumUnc == kStatInt) { + logger.info["GetNumUncertainty"]<<"Statistical integration uncertainty selected."<<endl; + for (unsigned int iobs = 0; iobs < NObsBin; iobs++) { + XsUnc.xs.push_back(MyXSection[iobs]); + XsUnc.dxsu.push_back(MydXSection[iobs]); + XsUnc.dxsl.push_back(-MydXSection[iobs]); + } + } else if (eNumUnc == kApproxBias) { + logger.info["GetNumUncertainty"]<<"Interpolation bias selected."<<endl; + for (unsigned int iobs = 0; iobs < NObsBin; iobs++) { + XsUnc.xs.push_back(MyXSection[iobs]); + XsUnc.dxsu.push_back(MyXSection[iobs]-MyRefXSection[iobs]); + XsUnc.dxsl.push_back(MyRefXSection[iobs]); + } + } else { + logger.error["GetNumUncertainty"]<<"ERROR! No valid numerical uncertainty style selected, exiting."<<endl; + logger.error["GetNumUncertainty"]<<"Style enum = "<<eNumUnc<<endl; + exit(1); + } + + //! Divide by cross section != 0 to give relative uncertainties + for (unsigned int iobs = 0; iobs < NObsBin; iobs++) { + if (eNumUnc == kApproxBias) { + if (fabs(MyRefXSection[iobs]) > DBL_MIN) { + XsUnc.dxsu[iobs] = XsUnc.dxsu[iobs] / fabs(MyRefXSection[iobs]); + } else { + XsUnc.dxsu[iobs] = 0.; + } + } else { + if (fabs(XsUnc.xs[iobs]) > DBL_MIN) { + XsUnc.dxsu[iobs] = +fabs(XsUnc.dxsu[iobs] / XsUnc.xs[iobs]); + XsUnc.dxsl[iobs] = -fabs(XsUnc.dxsl[iobs] / XsUnc.xs[iobs]); + } else { + XsUnc.dxsu[iobs] = 0.; + XsUnc.dxsl[iobs] = 0.; + } + } + logger.debug["GetNumUncertainty"]<<"iobs = " << iobs << ", dxsl = " << XsUnc.dxsl[iobs] << ", dxsu = " << XsUnc.dxsu[iobs] <<endl; + } + + return XsUnc; +} + + +//______________________________________________________________________________ +// std::vector< std::vector<double> > fastNLOReader::GetXsUncertaintyVec(const ENumUncertaintyStyle eNumUnc, bool lNorm, int iprint) { +std::vector< std::vector<double> > fastNLOReader::GetNumUncertaintyVec(const ENumUncertaintyStyle eNumUnc, bool lNorm, int iprint) { + XsUncertainty xsUnc = fastNLOReader::GetXsUncertainty(eNumUnc, lNorm); + if (iprint > 0) { + string style{NumUncertaintyStyle_to_string(eNumUnc)}; + string UncName = " # Relative numerical uncertainties (" + style + ")"; + fastNLOTools::PrintXSUncertainty(xsUnc, UncName); + } + std::vector<std::vector<double> > xsUncVec; + xsUncVec.resize(3); + xsUncVec[0] = xsUnc.xs; + xsUncVec[1] = xsUnc.dxsu; + xsUncVec[2] = xsUnc.dxsl; + return xsUncVec; +} + + +//______________________________________________________________________________ + +// void fastNLOReader::PrintXsUncertaintyVec(fastNLO::ENumUncertaintyStyle eNumUnc, std::string UncName, bool lNorm) { +void fastNLOReader::PrintNumUncertaintyVec(fastNLO::ENumUncertaintyStyle eNumUnc, std::string UncName, bool lNorm) { + XsUncertainty xsUnc = GetXsUncertainty(eNumUnc, lNorm); + fastNLOTools::PrintXSUncertainty(xsUnc, UncName); +} diff --git a/v2.6/toolkit/fastnlotoolkit/fastNLOTable.cc b/v2.6/toolkit/fastnlotoolkit/fastNLOTable.cc new file mode 100644 index 0000000000000000000000000000000000000000..c8850c94008fdeb21553aae821e54e5abaa2f786 --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/fastNLOTable.cc @@ -0,0 +1,2634 @@ +// Precompiler variables for conditional compilation are generated and +// stored automatically in config.h via AC_DEFINE statements in configure.ac. +// To enable conditional compilation, e.g. using HAVE_LIBZ, this config file +// MUST be the very first one to be included with +#include <config.h> + +#include <algorithm> +#include <cfloat> +#include <cmath> +#include <cstdlib> +#include <unistd.h> +#include <set> +#include "fastnlotk/fastNLOTable.h" +#include "fastnlotk/fastNLOTools.h" +#include "fastnlotk/read_steer.h" +// zlib wrapper library +#ifdef HAVE_LIBZ +#include "fastnlotk/zstr.hpp" +#endif /* HAVE_LIBZ */ + +using namespace std; +using namespace fastNLO; + +// ___________________________________________________________________________________________________ +bool fastNLOTable::fWelcomeOnce = false; + + +// ___________________________________________________________________________________________________ +fastNLOTable::fastNLOTable() + : ffilename(""), fPrecision(8), ITabVersionRead(), ITabVersionWrite(), ScenName(), + logger("fastNLOTable"), fCoeff(), Ecms(), ILOord(), Ipublunits(), + ScDescript(), NObsBin(), NDim(), DimLabel(), IDiffBin(), Bin(), + BinSize(), INormFlag(), DenomTable(), IDivLoPointer(), IDivUpPointer() { + if (!fWelcomeOnce) PrintWelcomeMessage(); +} + + +// ___________________________________________________________________________________________________ +fastNLOTable::fastNLOTable(string name) : ffilename(name), fPrecision(8), logger("fastNLOTable") { + //logger.SetClassName("fastNLOTable"); + if (!fWelcomeOnce) PrintWelcomeMessage(); + ReadTable(); +} + + +// ___________________________________________________________________________________________________ +fastNLOTable::~fastNLOTable(){ + // delete fCoeff tables... + DeleteAllCoeffTable(); +} + +// ___________________________________________________________________________________________________ +fastNLOTable::fastNLOTable(const fastNLOTable& other) + : ffilename(other.ffilename), fPrecision(other.fPrecision), + ITabVersionRead(other.ITabVersionRead), + ITabVersionWrite(other.ITabVersionRead), + ScenName(other.ScenName), + logger("fastNLOTable"), + fCoeff(other.fCoeff.size()), + Ecms(other.Ecms), ILOord(other.ILOord), Ipublunits(other.Ipublunits), + ScDescript(other.ScDescript), NObsBin(other.NObsBin), NDim(other.NDim), + DimLabel(other.DimLabel), IDiffBin(other.IDiffBin), Bin(other.Bin), + BinSize(other.BinSize), INormFlag(other.INormFlag), + DenomTable(other.DenomTable), IDivLoPointer(other.IDivLoPointer), + IDivUpPointer(other.IDivUpPointer) +{ + //! Copy constructor + // say::SetGlobalVerbosity(say::toVerbosity()[verbosity]); + logger.SetClassName("fastNLOTable"); + for (size_t i = 0; i < other.fCoeff.size(); ++i) { + fCoeff[i] = other.fCoeff[i]->Clone(); + } +} + + +// ___________________________________________________________________________________________________ +void fastNLOTable::DeleteAllCoeffTable(){ + for (size_t i = 0; i < fCoeff.size(); ++i) { + delete fCoeff[i]; + } + fCoeff.clear(); +} + + +// ___________________________________________________________________________________________________ +void fastNLOTable::ReadTable(){ + //! Read file + std::istream* strm = OpenFileRead(); + // read header + logger.debug["ReadTable"]<<"Reading header ..."<<endl; + int nCoeff = ReadHeader(*strm); + // read scenario + logger.debug["ReadTable"]<<"Reading scenario ..."<<endl; + ReadScenario(*strm); + // read b-blocks + logger.debug["ReadTable"]<<"Reading coefficient tables ..."<<endl; + ReadCoeffTables(*strm, nCoeff); + // close stream + logger.debug["ReadTable"]<<"Reading done, closing files ..."<<endl; + CloseFileRead(*strm); +} + + +//______________________________________________________________________________ +int fastNLOTable::ReadHeader(istream& table) { + //!< + //!< Read table header (formely named BlockA1 and BlockA2) + //!< return number of contributions to follow + //!< + logger.debug["ReadHeader"]<<"Start reading table header ..."<<endl; + table.peek(); + if (table.eof()) { + logger.error["ReadHeader"]<<"Premature end of file; cannot read from stream."<<endl; + } + + fastNLOTools::ReadMagicNo(table); + table >> ITabVersionRead; + fastNLOTools::CheckVersion(ITabVersionRead); + SetITabVersionRead(ITabVersionRead); + // By default set write-out version same as the one read in + SetITabVersionWrite(ITabVersionRead); + table >> ScenName; + int Ncontrib,Ndata,Nmult; + table >> Ncontrib; + table >> Nmult ; // not used any longer + table >> Ndata; + fastNLOTools::ReadUnused(table); // NuserString + fastNLOTools::ReadUnused(table); // NuserInt + //fastNLOTools::ReadUnused(table); // IUserLines + fastNLOTools::ReadUnused(table); // NuserFloat + fastNLOTools::ReadUnused(table); // Imachine + fastNLOTools::ReadMagicNo(table); + fastNLOTools::PutBackMagicNo(table); + logger.debug["ReadHeader"]<<"Finished reading table header."<<endl; + return Ncontrib+Ndata; +} + + +// ___________________________________________________________________________________________________ +void fastNLOTable::ReadCoeffTables(istream& table, int nCoeff){ + //!< read nCoeff Coefficient tables (additive, multiplicative and data) + logger.debug["ReadCoeffTables"]<<"Start reading coefficient tables for version "<<ITabVersionRead<<endl; + for (int i=0; i<nCoeff; i++) { + logger.debug["ReadCoeffTables"]<<"Start reading coefficient table no. "<<i+1<<endl; + fastNLOCoeffBase cTemp(NObsBin); + cTemp.ReadBase(table, ITabVersionRead); + fastNLOCoeffBase* cN = ReadRestOfCoeffTable(cTemp, table, ITabVersionRead); + CreateCoeffTable(i, cN); + } + logger.debug["ReadCoeffTables"]<<"Finished reading coefficient tables."<<endl; +} + + +// ___________________________________________________________________________________________________ +fastNLOCoeffBase* fastNLOTable::ReadRestOfCoeffTable(const fastNLOCoeffBase& cB, istream& table, int ITabVersionRead){ + // take coeffbase and identify type of contribution. + // - create instance of correct full coefficient table + // - read in 'rest' of coeff table + + // identify coeff-table: + bool quiet = true; + if ( fastNLOCoeffData::CheckCoeffConstants(&cB,quiet) ) { + logger.debug["ReadRestOfCoeffTable"]<<"Found data table. Now reading in."<<endl; + fastNLOCoeffData* cN = new fastNLOCoeffData(cB); + cN->ReadRest(table, ITabVersionRead); + return cN; + } else if ( fastNLOCoeffMult::CheckCoeffConstants(&cB,quiet) ) { + logger.debug["ReadRestOfCoeffTable"]<<"Found multiplicative contribution. Now reading in."<<endl; + fastNLOCoeffMult* cN = new fastNLOCoeffMult(cB); + cN->ReadRest(table, ITabVersionRead); + return cN; + } else if ( fastNLOCoeffAddFix::CheckCoeffConstants(&cB,quiet) ) { + logger.debug["ReadRestOfCoeffTable"]<<"Found additive fixed order contribution (v2.0). Now reading in."<<endl; + fastNLOCoeffAddFix* cN = new fastNLOCoeffAddFix(cB); + cN->ReadRest(table, ITabVersionRead); + return cN; + } else if ( fastNLOCoeffAddFlex::CheckCoeffConstants(&cB,quiet) ) { + logger.debug["ReadRestOfCoeffTable"]<<"Found additive flexible scale contribution. Now reading in."<<endl; + fastNLOCoeffAddFlex* cN = new fastNLOCoeffAddFlex(cB,ILOord); + cN->ReadRest(table, ITabVersionRead); + return cN; + } else { + logger.error["ReadRestOfCoeffTable"]<<"Could not identify coefficient table. Print and exiting ... "<<endl; + cB.Print(5); + exit(1); + } + return NULL; +} + + +// ___________________________________________________________________________________________________ +void fastNLOTable::WriteTable() { + //!< + //!< WriteTable() writes the full fastNLO table to the previously defined filename 'ffilename' on disk. + //!< 'ffilename' is a protected member of the fastNLOTable class. + logger.debug["WriteTable"]<<"Start writing fastNLO table to preset filename "<<ffilename<<endl; + std::string extension = ".gz"; + bool compress = false; + if ((ffilename.length() >= extension.length()) and + (ffilename.compare(ffilename.length() - extension.length(), extension.length(), extension) == 0)) + { + logger.info["WriteTable"]<<"Filename ends with .gz, therefore enable compression." << endl; + compress = true; + } + // if ( ffilename.find(".taB")!=string::npos || ffilename.find(".TAB")!=string::npos ) + // { + // logger.info["WriteTable"]<<"Filename contains '.taB' or 'TAB', therefore enable binary output." << endl; + // fastNLOTools::binary = true; + // } + + logger.info["WriteTable"]<<"Writing fastNLO table version "<<GetITabVersionWrite()<<" with "<<GetNcontrib()<<" theory contributions to file: "<<ffilename<<endl; + std::ostream* table = OpenFileWrite(compress); + logger.debug["WriteTable"]<<"Writing table header to file ..."<<endl; + WriteHeader(*table); + logger.debug["WriteTable"]<<"Writing scenario to file ..."<<endl; + WriteScenario(*table); + for(int i=0;i<GetNcontrib()+GetNdata();i++){ + logger.debug["WriteTable"]<<"Writing coefficient table #"<<i<<endl; + GetCoeffTable(i)->Write(*table,GetITabVersionWrite()); + } + CloseFileWrite(*table); + logger.debug["WriteTable"]<<"Finished writing fastNLO table to preset filename "<<ffilename<<endl; +} + + +// ___________________________________________________________________________________________________ +void fastNLOTable::WriteTable(string filename) { + //! Write fastNLO table to file 'filename' + logger.debug["WriteTable"]<<"Start writing fastNLO table to file "<<filename<<endl; + // Temporarily store active table filename ffilename + string tmpfilename = ffilename; + SetFilename(filename); + WriteTable(); + SetFilename(tmpfilename); + logger.debug["WriteTable"]<<"Finished writing fastNLO table to file "<<filename<<endl; +} + + +//______________________________________________________________________________ +void fastNLOTable::WriteHeader(std::ostream& table) { + table << fastNLO::tablemagicno << sep; + table << GetITabVersionWrite() << sep; + // if ( GetItabversion() >= 24000 ) table << "fastNLO_Header" << sep; + if ( ScenName.find(" ")!=string::npos ) { + logger.warn["WriteHeader"]<<"Scenario name is not allowed to contain white spaces!!"<<endl; + ScenName = ScenName.substr(0,ScenName.find(" ")); + logger.warn["WriteHeader"]<<"Write ScenarioName: "<<ScenName<<endl; + } + table << ScenName << sep; + table << GetNcontrib() << sep; + table << GetNmult() << sep; + table << GetNdata() << sep; + table << 0 << sep; // NUserString + table << 0 << sep; // NuserInt + table << 0 << sep; // NuserFloat + table << 0 << sep; // Imachine +} + + +// ___________________________________________________________________________________________________ +void fastNLOTable::ReadScenario(istream& table){ + logger.debug["ReadScenario"]<<"Start reading table scenario ..."<<endl; + fastNLOTools::ReadMagicNo(table); + table >> Ipublunits; + fastNLOTools::ReadFlexibleVector(ScDescript,table); + char buffer[257]; + table >> Ecms; + table >> ILOord; + table >> NObsBin; + table >> NDim; + DimLabel.resize(NDim); + table.getline(buffer,256); + for(int i=NDim-1;i>=0;i--){ + table.getline(buffer,256); + DimLabel[i] = buffer; + } + IDiffBin.resize(NDim); + for(int i=NDim-1;i>=0;i--){ + table >> IDiffBin[i]; + } + Bin.resize(NObsBin); + for(unsigned int i=0;i<NObsBin;i++){ + Bin[i].resize(NDim); + for(int j=NDim-1;j>=0;j--){ + table >> Bin[i][j].first; + if (IDiffBin[j]==0 || IDiffBin[j]==2) { + table >> Bin[i][j].second; + } else { + // For point-wise differential, IDiffBin = 1, set UpBin equal to LoBin + Bin[i][j].second = Bin[i][j].first; + } + } + } + fastNLOTools::ReadFlexibleVector(BinSize,table,NObsBin); + table >> INormFlag; + if( INormFlag < 0 ) table >> DenomTable; + if( INormFlag != 0 ){ + IDivLoPointer.resize(NObsBin); + IDivUpPointer.resize(NObsBin); + for(unsigned int i=0;i<NObsBin;i++){ + table >> IDivLoPointer[i]; + table >> IDivUpPointer[i]; + } + } + fastNLOTools::ReadMagicNo(table); + fastNLOTools::PutBackMagicNo(table); + logger.debug["ReadScenario"]<<"Finished reading table scenario."<<endl; +} + + +// ___________________________________________________________________________________________________ +void fastNLOTable::WriteScenario(std::ostream& table){ + table << fastNLO::tablemagicno << sep; + table << Ipublunits << sep; + size_t NScDescript = ScDescript.size(); + table << NScDescript << sep; + for(size_t i=0;i<NScDescript;i++){ + table << ScDescript[i] << sep; + } + table << Ecms << sep; + table << ILOord << sep; + logger.debug["WriteScenario"]<<"Writing NObsBin to be "<<NObsBin<<endl; + table << NObsBin << sep; + table << NDim << sep; + for(int i=NDim-1;i>=0;i--){ + table << DimLabel[i] << sep; + } + for(int i=NDim-1;i>=0;i--){ + table << IDiffBin[i] << sep; + } + logger.debug["WriteScenario"]<<"Bin border size is "<<Bin.size()<<endl; + for(unsigned int i=0;i<NObsBin;i++){ + for(int j=NDim-1;j>=0;j--){ + table << Bin[i][j].first << sep; + if(IDiffBin[j]==0 || IDiffBin[j]==2) table << Bin[i][j].second << sep; + } + } + for(unsigned int i=0;i<NObsBin;i++){ + table << BinSize[i] << sep; + } + + table << INormFlag << sep; + if( INormFlag < 0 ){ + table << DenomTable << sep; + } + if( INormFlag != 0 ){ + for(unsigned int i=0;i<NObsBin;i++){ + table << IDivLoPointer[i] << sep; + table << IDivUpPointer[i] << sep; + } + } + // if ( GetItabversion() >= 24000 ) table << 0 << sep; // v2.4 (yet unused) + // if ( GetItabversion() >= 24000 ) table << 0 << sep; // v2.4 (yet unused) +} + + +// ___________________________________________________________________________________________________ +bool fastNLOTable::IsCompatible(const fastNLOTable& other) const { + if ( !IsCompatibleHeader(other) ) return false; + if ( !IsCompatibleScenario(other) ) return false; + logger.info["IsCompatible"]<<"Tables seem to be compatible for merging/appending. Continuing."<<endl; + return true; +} + + +// ___________________________________________________________________________________________________ +bool fastNLOTable::IsCompatibleScenario(const fastNLOTable& other) const { + bool potentialcompatible = true; + if(Ipublunits != other.Ipublunits){ + logger.warn["IsCompatibleScenario"]<<"Differing cross section units found: "<<Ipublunits<<" and "<<other.Ipublunits<<endl; + return false; + } + if(ScDescript != other.ScDescript){ + logger.warn["IsCompatibleScenario"]<<"Differing scenario description found."<<endl; + potentialcompatible = false; + } + if(!cmp(Ecms,other.Ecms)){ + logger.warn["IsCompatibleScenario"]<<"Differing center-of-mass energy found: "<<Ecms<<" and "<<other.Ecms<<endl; + return false; + } + if(ILOord != other.ILOord){ + logger.warn["IsCompatibleScenario"]<<"Differing ILOord found: "<<ILOord<<" and "<<other.GetLoOrder()<<endl; + return false; + } + if(NObsBin != other.NObsBin){ + logger.warn["IsCompatibleScenario"]<<"Differing NObsBin found: "<<NObsBin<<" and "<<other.NObsBin<<endl; + return false; + } + if(NDim != other.NDim){ + logger.warn["IsCompatibleScenario"]<<"Differing NDim found: "<<NDim<<" and "<<other.NDim<<endl; + return false; + } + if(DimLabel != other.DimLabel){ + logger.warn["IsCompatibleScenario"]<<"Differing label of observables found."<<endl; + potentialcompatible = false; + } + if(IDiffBin != other.IDiffBin){ + logger.warn["IsCompatibleScenario"]<<"Differing IDiffBin found."<<endl; + return false; + } + if(!cmp(Bin,other.Bin)){ + logger.warn["IsCompatibleScenario"]<<"Differing Bin boundaries found."<<endl; + return false; + } + if(!cmp(BinSize,other.BinSize)){ + logger.warn["IsCompatibleScenario"]<<"Differing bin sizes found."<<endl; + return false; + } + if(INormFlag != other.INormFlag){ + logger.warn["IsCompatibleScenario"]<<"Differing INormFlag found: "<<INormFlag<<" and "<<other.INormFlag<<endl; + return false; + } + if(INormFlag<0){ + if(DenomTable != other.DenomTable){ + logger.warn["IsCompatibleScenario"]<<"Differing DenomTable found."<<endl; + return false; + } + } + if(INormFlag!=0){ + for(unsigned int i=0;i<NObsBin;i++){ + if(IDivLoPointer[i] != other.IDivLoPointer[i]){ + logger.warn["IsCompatibleScenario"]<<"Differing IDivLoPointer["<<i<<"] found"<<endl; + return false; + } + if(IDivUpPointer[i] != other.IDivUpPointer[i]){ + logger.warn["IsCompatibleScenario"]<<"Differing IDivUpPointer["<<i<<"] found."<<endl; + return false; + } + } + } + if ( !potentialcompatible ) logger.warn["IsCompatibleScenario"]<<"Some labels have differing values, but relevant variables seem to be compatible. Continuing."<<endl; + return true; +} + + +// ___________________________________________________________________________________________________ +bool fastNLOTable::IsCatenable(const fastNLOTable& other) const { + if ( !IsCatenableHeader(other) ) return false; + if ( !IsCatenableScenario(other) ) return false; + + const bool quiet = true; + const int nc = other.GetNcontrib() + other.GetNdata(); + // loop over all contributions from 'other'-table to check catenability + int matches[nc]; + for ( int ic=0 ; ic<nc; ic++ ) { + matches[ic] = 0; + // check against all contributions from 'this'-table to check catenability + for (unsigned int j = 0; j<fCoeff.size() ; j++) { + fastNLOCoeffBase* cother = (fastNLOCoeffBase*)other.GetCoeffTable(ic); + // data? + if ( fastNLOCoeffData::CheckCoeffConstants(cother,quiet) ) { + fastNLOCoeffData* cdatthis = (fastNLOCoeffData*)fCoeff[j]; + fastNLOCoeffData* cdatother = (fastNLOCoeffData*)other.GetCoeffTable(ic); + if ( cdatthis->IsCatenable(*cdatother) ) { + matches[ic]++; + continue; + } + } + // multiplicative? + else if ( fastNLOCoeffMult::CheckCoeffConstants(cother,quiet) ) { + fastNLOCoeffMult* cmultthis = (fastNLOCoeffMult*)fCoeff[j]; + fastNLOCoeffMult* cmultother = (fastNLOCoeffMult*)other.GetCoeffTable(ic); + if ( cmultthis->IsCatenable(*cmultother) ) { + matches[ic]++; + continue; + } + } + // additive? + else if ( fastNLOCoeffAddBase::CheckCoeffConstants(cother,quiet) ) { + if ( fastNLOCoeffAddFix::CheckCoeffConstants(cother,quiet) ) { + fastNLOCoeffAddFix* cfixthis = (fastNLOCoeffAddFix*)fCoeff[j]; + fastNLOCoeffAddFix* cfixother = (fastNLOCoeffAddFix*)other.GetCoeffTable(ic); + if ( cfixthis->IsCatenable(*cfixother) ) { + matches[ic]++; + continue; + } + } else if ( fastNLOCoeffAddFlex::CheckCoeffConstants(cother,quiet) ) { + fastNLOCoeffAddFlex* cflexthis = (fastNLOCoeffAddFlex*)fCoeff[j]; + fastNLOCoeffAddFlex* cflexother = (fastNLOCoeffAddFlex*)other.GetCoeffTable(ic); + if ( cflexthis->IsCatenable(*cflexother) ) { + matches[ic]++; + continue; + } + } + } else { + logger.error["IsCatenable"] << "Unknown contribution found. Aborted!" <<endl; + exit(1); + } + } + } + + // check match count; all numbers must be unity + bool catenable = true; + for ( int ic=0 ; ic<nc; ic++ ) { + if ( matches[ic] != 1 ) { + catenable = false; + logger.warn["IsCatenable"] << "Table contributions do not match. Catenation of observable bins not possible!" <<endl; + break; + } + } + if ( catenable ) { + logger.info["IsCatenable"]<<"Table contributions seem to be compatible for catenating observable bins. Continuing."<<endl; + } + return catenable; +} + + +// ___________________________________________________________________________________________________ +bool fastNLOTable::IsCatenableScenario(const fastNLOTable& other) const { + bool potentialcatenable = true; + if(Ipublunits != other.Ipublunits){ + logger.warn["IsCatenableScenario"]<<"Differing cross section units found: "<<Ipublunits<<" and "<<other.Ipublunits<<endl; + return false; + } + if(ScDescript != other.ScDescript){ + logger.warn["IsCatenableScenario"]<<"Differing scenario description found. Only the first one is kept."<<endl; + potentialcatenable = false; + } + if(!cmp(Ecms,other.Ecms)){ + logger.warn["IsCatenableScenario"]<<"Differing center-of-mass energy found: "<<Ecms<<" and "<<other.Ecms<<endl; + return false; + } + if(ILOord != other.ILOord){ + logger.warn["IsCatenableScenario"]<<"Differing ILOord found: "<<ILOord<<" and "<<other.GetLoOrder()<<endl; + return false; + } + if(NDim != other.NDim){ + logger.warn["IsCatenableScenario"]<<"Differing NDim found: "<<NDim<<" and "<<other.NDim<<endl; + return false; + } + if(DimLabel != other.DimLabel){ + logger.warn["IsCatenableScenario"]<<"Differing label of observables found."<<endl; + potentialcatenable = false; + } + if(IDiffBin != other.IDiffBin){ + logger.warn["IsCatenableScenario"]<<"Differing IDiffBin found."<<endl; + return false; + } + if(INormFlag != other.INormFlag){ + logger.warn["IsCatenableScenario"]<<"Differing INormFlag found: "<<INormFlag<<" and "<<other.INormFlag<<endl; + return false; + } + if(INormFlag<0){ + if(DenomTable != other.DenomTable){ + logger.warn["IsCatenableScenario"]<<"Differing DenomTable found."<<endl; + return false; + } + } + if ( !potentialcatenable ) logger.warn["IsCatenableScenario"]<<"Some labels have differing values, but relevant variables seem to be catenable. Continuing."<<endl; + return true; +} + + +// ___________________________________________________________________________________________________ +bool fastNLOTable::IsEquivalent(const fastNLOTable& other, double rtol=1e-6) const { + for (int i = 0; i < 1; i++) { + if (!GetCoeffTable(i)->IsEquivalent(*other.GetCoeffTable(i), rtol)) { + return false; + } + } + return true; +} + + +// ___________________________________________________________________________________________________ +void fastNLOTable::SetUserWeights(double wgt) { + //!< Set 'user' weights, which can be used for subsequent mergeing + for ( auto c : fCoeff) ((fastNLOCoeffAddBase*)c)->AccessWgtStat().SetWgtUser(wgt); // dangerous typecasting +} +// ___________________________________________________________________________________________________ +void fastNLOTable::SetUserWeights(std::vector<double > wgtsBin) { + //!< Set 'user' weights, which can be used for subsequent mergeing + for ( auto c : fCoeff) ((fastNLOCoeffAddBase*)c)->AccessWgtStat().SetWgtUser(wgtsBin); // dangerous typecasting +} +// ___________________________________________________________________________________________________ +void fastNLOTable::SetUserWeights(std::vector<std::vector<double> > wgtsBinProc) { + //!< Set 'user' weights, which can be used for subsequent mergeing + for ( auto c : fCoeff) ((fastNLOCoeffAddBase*)c)->AccessWgtStat().SetWgtUser(wgtsBinProc); // dangerous typecasting +} + +// ___________________________________________________________________________________________________ +void fastNLOTable::MergeTables(const std::vector<fastNLOTable*>& other, fastNLO::EMerge moption, double cutRMS) { + //!< Merge all other tables with the current one. + //!< Warning: data or multiplicative contributions might get lost + //!< Warning: Function may require lots of memory, because all contributions are kept in memory. + + // --- all (other) options + if ( moption != kMean && moption != kMedian && cutRMS==0) { + for ( auto iTab : other ) this->MergeTable(*iTab,moption); + } + // --- mean or median + else { + if ( other.size() < 30 ) + logger.warn["MergeTables"]<<"Result may has a large spread, since only "<<other.size()+1<<" tables are merged."<<endl; + + set<fastNLOCoeffBase*> ConsideredContrib; + // loop over contributions. + for ( unsigned int jc=0; jc<fCoeff.size(); jc++) { + if ( fastNLOCoeffAddBase::CheckCoeffConstants(fCoeff[jc],true) ) { + fastNLOCoeffAddBase* cadd = (fastNLOCoeffAddBase*)fCoeff[jc]; + //set<fastNLOCoeffAddBase*> others; + vector<fastNLOCoeffAddBase*> others; + // ---- find corresponding 'other' contributions + for ( unsigned int ioth = 0 ; ioth<other.size() ; ioth++ ) { + const int ntot = other[ioth]->GetNcontrib() + other[ioth]->GetNdata(); + for ( int ic=0; ic<ntot; ic++ ) { + fastNLOCoeffAddBase* cother = (fastNLOCoeffAddBase*)other[ioth]->GetCoeffTable(ic); // too optimistic typecast + if ( fastNLOCoeffAddBase::CheckCoeffConstants((fastNLOCoeffBase*)cother,true) ) { + if ( cadd->IsCompatible(*cother) ) { + //logger.info["MergeTables"]<<"Found compatible contributions"<<endl; + others.push_back(cother); //insert() + ConsideredContrib.insert(cother); + } + } + } + } + logger.info["MergeTables"]<<"Found "<<others.size()<<" compatible contributions."<<endl; + + // loop over all compatible contributions and + vector<double > nAll{cadd->GetNevt()}; + for ( auto othctr : others ) nAll.push_back( othctr->GetNevt()); + + if ( fastNLOCoeffAddFlex::CheckCoeffConstants(cadd,true) ) {//flexible + fastNLOCoeffAddFlex* ctrb = (fastNLOCoeffAddFlex*)cadd; + vector<fastNLO::v5d*> s0 = ctrb->AccessSigmaTildes(); + vector<vector<fastNLO::v5d*> > sAll{s0}; + vector<fastNLOCoeffAddFlex* > cAll{ctrb}; + for ( auto othctr : others ) { + sAll.push_back( ((fastNLOCoeffAddFlex*)othctr)->AccessSigmaTildes()); + //nAll.push_back( ((fastNLOCoeffAddFlex*)othctr)->GetNevt()); + cAll.push_back((fastNLOCoeffAddFlex*)othctr); + } + int cMax = s0.size(); + for ( int ii = cMax-1 ; ii>= 0 ; ii-- ) { + if ( s0[ii]->size()==0 ) cMax--; + } + vector<double > vals(sAll.size()); // allocate only once + +//<<<<<<< .mine + // for ( int im = 0 ; im<cMax ; im++ ) { // mu-indep, mur, muf, ... + // vals.clear(); + // double mean0 = 0; + // double rms = 0; + // unsigned int n0 = 0; + // if ( cutRMS != 0 ) { + // for ( unsigned int is = 0 ; is < sAll.size() ; is++ ) { + // //vals[is] = (*sAll[is][im])[iobs][x][jS1][kS2][n] / nAll[is]; + // double vv = (*sAll[is][im])[iobs][x][jS1][kS2][n] / nAll[is]; + // if ( vv != 0 ) { + // mean0 += vv; + // rms += vv*vv; + // n0++; + // } + // } + // if ( n0 != 0 ) { + // mean0 /= n0; + // rms = sqrt(rms/n0); + // } + // } + + // // fill 'vals' + // //vals.reserve(sAll.size()); + // for ( unsigned int is = 0 ; is < sAll.size() ; is++ ) { + // double vv = (*sAll[is][im])[iobs][x][jS1][kS2][n] / nAll[is]; + // if ( ( cutRMS == 0 && vv != 0 ) || + // ( cutRMS!=0 && vv!=0 && n0 !=0 && fabs(vv-mean0) < rms*cutRMS ) ){ + // // fill vals array again, now with cuts + // vals.push_back(vv); + // } + // // else if ( (*sAll[0][im])[iobs][x][jS1][kS2][n]!=0 && vv!=0 ) { + // // cout<<"discard tab-ID="<<is<<"\trms="<<rms<<"\tvv-mean="<<fabs(vv-mean0)<<endl; + // // } + // } + // if ( cutRMS!=0 && n0 != vals.size() ) + // logger.info["MergeTables"]<<"Discarded "<<sAll.size()-vals.size()<<" value(s) out of "<< sAll.size()<<" [CutRMS or zero] (bin="<<iobs<<", proc="<<n<<")."<<endl; + // if ( cutRMS!=0 && n0!=0 && vals.size()==0 ) { + // logger.error["MergeTables"]<<"Too tight RMS cut. No values remain. Exiting."<<endl; + // exit(1); + // } + + // // assign merged values + // if ( moption == kMean ) { + // double mean = 0; + // for ( auto ii : vals ) mean+=ii; + // //(*s0[im])[iobs][x][jS1][kS2][n] = mean*nAll[0]/sAll.size(); + // if ( mean != 0 ) + // (*s0[im])[iobs][x][jS1][kS2][n] = mean*nAll[0]/vals.size(); + // else + // (*s0[im])[iobs][x][jS1][kS2][n] = 0; + // } + // else if ( moption == kMedian ) { + // double median = 0; + // if ( vals.size() ) { + // std::nth_element( vals.begin(), vals.begin()+vals.size()/2,vals.end() ); + // median = vals[vals.size()/2]; + // if ( vals.size()%2 == 0 ) { + // median = (median + *(std::max_element(vals.begin(),vals.begin()+vals.size()/2))) /2.; + // } + // // printf("mu[%d] mean=% 8.2e\trms=% 8.2e\tv0=% 8.2e\tmedian=% 8.2e\n", + // // im, mean*nAll[0], rms*nAll[0], + // // (*s0[im])[iobs][x][jS1][kS2][n], median * nAll[0] ); + // } + // (*s0[im])[iobs][x][jS1][kS2][n] = median*nAll[0]; // nAll[0] is 'new' normalisation + // } + // else {// cutRMS !=0 + // double wsum=0, ssum=0; //nsum=0 + // unsigned int nn = 0; +// ======= + for (unsigned int iobs=0 ; iobs<ctrb->SigmaTildeMuIndep.size() ; iobs++) { + for (unsigned int jS1=0; jS1<ctrb->GetNScaleNode1(iobs); jS1++) { + for (unsigned int kS2=0; kS2<ctrb->GetNScaleNode2(iobs); kS2++) { + for (int x=0; x<ctrb-> GetNxmax(iobs); x++) { + for (int n=0; n<ctrb->GetNSubproc(); n++) { +// >>>>>>> .r2418 + + for ( int im = 0 ; im<cMax ; im++ ) { // mu-indep, mur, muf, ... + vals.clear(); + double mean0 = 0; + double rms = 0; + unsigned int n0 = 0; + if ( cutRMS != 0 ) { + for ( unsigned int is = 0 ; is < sAll.size() ; is++ ) { + //vals[is] = (*sAll[is][im])[iobs][x][jS1][kS2][n] / nAll[is]; + double vv = (*sAll[is][im])[iobs][x][jS1][kS2][n] / nAll[is]; + if ( vv != 0 ) { + mean0 += vv; + rms += vv*vv; + n0++; + } + } + if ( n0 != 0 ) { + mean0 /= n0; + rms = sqrt(rms/n0); + } + } + + // fill 'vals' + //vals.reserve(sAll.size()); + for ( unsigned int is = 0 ; is < sAll.size() ; is++ ) { + double vv = (*sAll[is][im])[iobs][x][jS1][kS2][n] / nAll[is]; + if ( ( cutRMS == 0 && vv != 0 ) || + ( cutRMS!=0 && vv!=0 && n0 !=0 && fabs(vv-mean0) < rms*cutRMS ) ){ + // fill vals array again, now with cuts + vals.push_back(vv); + } + // else if ( (*sAll[0][im])[iobs][x][jS1][kS2][n]!=0 && vv!=0 ) { + // cout<<"discard tab-ID="<<is<<"\trms="<<rms<<"\tvv-mean="<<fabs(vv-mean0)<<endl; + // } + } + if ( cutRMS!=0 && n0 != vals.size() ) + logger.info["MergeTables"]<<"Discarded "<<sAll.size()-vals.size()<<" value(s) out of "<< sAll.size()<<" [CutRMS or zero] (bin="<<iobs<<", proc="<<n<<")."<<endl; + if ( cutRMS!=0 && n0!=0 && vals.size()==0 ) { + logger.error["MergeTables"]<<"Too tight RMS cut. No values remain. Exiting."<<endl; + exit(1); + } + + // assign merged values + if ( moption == kMean ) { + double mean = 0; + if ( vals.size() ) { + for ( auto ii : vals ) mean+=ii; + mean /= vals.size(); + } + (*s0[im])[iobs][x][jS1][kS2][n] = mean*nAll[0]; + } + else if ( moption == kMedian ) { + double median = 0; + if ( vals.size() ) { + std::nth_element( vals.begin(), vals.begin()+vals.size()/2,vals.end() ); + median = vals[vals.size()/2]; + if ( vals.size()%2 == 0 ) { + median = (median + *(std::max_element(vals.begin(),vals.begin()+vals.size()/2))) /2.; + } + // printf("mu[%d] mean=% 8.2e\trms=% 8.2e\tv0=% 8.2e\tmedian=% 8.2e\n", + // im, mean*nAll[0], rms*nAll[0], + // (*s0[im])[iobs][x][jS1][kS2][n], median * nAll[0] ); + } + (*s0[im])[iobs][x][jS1][kS2][n] = median*nAll[0]; // nAll[0] is 'new' normalisation + } + else {// cutRMS !=0 + double wsum=0, ssum=0; //nsum=0 + unsigned int nn = 0; +// ?????? + for ( fastNLOCoeffAddFlex* cit : cAll ) { + double w2 = cit->GetMergeWeight(moption,n,iobs); + double s2 = (*cit->AccessSigmaTildes()[im])[iobs][x][jS1][kS2][n]; + double n2 = cit->GetNevt(); + double vv = s2 / n2; + // + if ( (cutRMS == 0 && vv != 0 ) || + ( cutRMS!=0 && vv!=0 && n0 !=0 && fabs(vv-mean0) < rms*cutRMS ) ) { + ssum += w2*s2/n2; + wsum += w2; + //nsum += n2; + nn++; + } + } + + if ( nn != vals.size() ) { + logger.error["MergeTables"]<<"'Cutflow' for median/mean not identical to other weights. Please contact developers."<<endl; + cout<<"nn="<<nn<<"\tvals.size()="<<vals.size()<<"\tsAll.size()="<<sAll.size()<<endl; + exit(3); + } + if ( wsum != 0 ) + (*s0[im])[iobs][x][jS1][kS2][n] = ssum / wsum * nAll[0]; + else + (*s0[im])[iobs][x][jS1][kS2][n] = 0; + //s1 = ( w1*s1/n1 + w2*s2/n2 ) / (w1 + w2 ) * ( n1 + n2 ) ; + } + } + } + } + } + } + } + } + else { // fixed scale + fastNLOCoeffAddFix* ctrb = (fastNLOCoeffAddFix*)cadd; + vector<double> vals(nAll.size()); + for (unsigned int iobs=0 ; iobs<ctrb->SigmaTilde.size() ; iobs++) { + for (unsigned int s=0 ; s<ctrb->SigmaTilde[iobs].size() ; s++) { + for (unsigned int x=0 ; x<ctrb->SigmaTilde[iobs][s].size() ; x++) { + for (unsigned int l=0 ; l<ctrb->SigmaTilde[iobs][s][x].size() ; l++) { + for (unsigned int p=0 ; p<ctrb->SigmaTilde[iobs][s][x][l].size() ; p++) { + + double mean0 = 0; + double rms = 0; + if ( cutRMS != 0 ) { + mean0 += ctrb->SigmaTilde[iobs][s][x][l][p] / ctrb->GetNevt() ; + rms += ctrb->SigmaTilde[iobs][s][x][l][p] / ctrb->GetNevt() * ctrb->SigmaTilde[iobs][s][x][l][p] / ctrb->GetNevt(); + for ( auto othctr : others ) { + mean0 += ((fastNLOCoeffAddFix*)othctr)->SigmaTilde[iobs][s][x][l][p] / othctr->GetNevt(); + rms += ((fastNLOCoeffAddFix*)othctr)->SigmaTilde[iobs][s][x][l][p] / othctr->GetNevt()*((fastNLOCoeffAddFix*)othctr)->SigmaTilde[iobs][s][x][l][p] / othctr->GetNevt(); + } + mean0 /= nAll.size(); + rms = sqrt(rms/nAll.size()); + } + + if ( moption == kMean ) { // mergeing option 'mean' + if ( cutRMS==0 ) { // no cut on RMS + double mean = ctrb->SigmaTilde[iobs][s][x][l][p] / ctrb->GetNevt() ; + for ( auto othctr : others ) + mean += ((fastNLOCoeffAddFix*)othctr)->SigmaTilde[iobs][s][x][l][p] / othctr->GetNevt(); + ctrb->SigmaTilde[iobs][s][x][l][p] = mean*nAll[0]/nAll.size(); + } + else { // with RMS cut + unsigned int nn=0; + double mean=0; + double v = ctrb->SigmaTilde[iobs][s][x][l][p] / ctrb->GetNevt() ; + if ( fabs(v-mean0) < rms*cutRMS ) {mean+=v; nn++;} + for ( auto othctr : others ) { + v = ((fastNLOCoeffAddFix*)othctr)->SigmaTilde[iobs][s][x][l][p] / othctr->GetNevt(); + if ( fabs(v-mean0) < rms*cutRMS ) {mean+=v; nn++;} + } + ctrb->SigmaTilde[iobs][s][x][l][p] = mean*nAll[0]/nn; + if ( nn!=nAll.size() ) cout<<"[CutRMS] Discarded "<<nAll.size()-nn<<" table values out of "<< nAll.size()<<" (bin="<<iobs<<", proc="<<p<<")."<<endl; + } + } + else if ( moption == kMedian ) { // mergeing option 'median' + if ( cutRMS==0 ) { // cut on RMS + cout<<"todo fadfoo"<<endl; + exit(3); + } + else { // no RMS cut + vals[0] = ctrb->SigmaTilde[iobs][s][x][l][p] / ctrb->GetNevt(); + for ( unsigned int is = 0 ; is < others.size() ; is++ ) { + vals[is+1] = ((fastNLOCoeffAddFix*)others[is])->SigmaTilde[iobs][s][x][l][p] / others[is]->GetNevt(); + } + std::nth_element( vals.begin(), vals.begin()+vals.size()/2,vals.end() ); + double median = vals[vals.size()/2]; + if ( vals.size()%2 == 0 ) { + median = (median + *(std::max_element(vals.begin(),vals.begin()+vals.size()/2))) /2.; + } + ctrb->SigmaTilde[iobs][s][x][l][p] = median*nAll[0]; + } + } + else {// cutRMS !=0 + cout<<"Not Implemented. todo."<<endl; + exit(2); + } + + } + } + } + } + } + } + // add number of events together + for ( auto othctr : others ) { + cadd->AccessWgtStat().Add(othctr->GetWgtStat()); + } + cadd->Nevt = nAll[0]; + double nTot = 0; + for ( auto ii : nAll ) nTot+=ii; + cadd->NormalizeCoefficients(nTot); + } + } + // check for further contributions, which have not been considered! + for ( unsigned int ioth = 0 ; ioth<other.size() ; ioth++ ) { + const int ntot = other[ioth]->GetNcontrib() + other[ioth]->GetNdata(); + for ( int ic=0; ic<ntot; ic++ ) { + if ( ConsideredContrib.count(other[ioth]->GetCoeffTable(ic)) == 0 ){ + logger.error["MergeTables"]<<"Some contribution is not considered and thus gets lost!"<<endl; + logger.error["MergeTables"]<<"All input tables to the function fastNLOTable::MergeTables() must be already present in the current fastNLOTable instance."<<endl; + exit(3); + } + } + } + logger.info["MergeTables"]<<(moption == kMean ? "Mean" : "Median")<<" out of "<< other.size()+1<<" tables calculated successfully."<<endl; + } +} + + +// ___________________________________________________________________________________________________ +void fastNLOTable::MergeTable(const fastNLOTable& other, fastNLO::EMerge moption) { + //!< Merge another table with the current one. + //!< Use the option moption in order to specify the weighting procedure. + //!< + Default option uses 'normalisation' constant Nevt (usually called 'merge') + //!< + Other weighting options are available. + //!< + Weighting which consider weights for individual bins and subprocesses can be chosen. + //!< + Tables can be 'appended', i.e. the sum of the cross sections is calculated. + + // --- sanity and info messages + if ( moption==fastNLO::kMedian || moption==fastNLO::kMean) { + logger.error["MergeTable"]<<"Options 'median' and 'mean' are not available when mergeing (only) two tables. Please use program fnlo-tk-merge2."<<endl; exit(1); + } + if ( moption == fastNLO::kUnweighted || moption == fastNLO::kAdd ) + logger.info["AppendTable"]<<"Adding (appending) another table. Resulting table will have weight 1 if option 'append' or 'unweighted' is used."<<endl; + if ( moption == fastNLO::kUnweighted ) + logger.warn["AppendTable"]<<"Option 'unweighted' requested. Do you probably want to use the number of entries instead (option = kNumEvent)? Continuing."<<endl; + + // --- just call AddTable + AddTable(other,moption); + return ; +} + + +// ___________________________________________________________________________________________________ +void fastNLOTable::AddTable(const fastNLOTable& other, fastNLO::EMerge moption) { + // Add another table to this table. + // Either increase statistics of existing fixed-order contribution or + // add further contributions (or both, if many tables are merged) + // + if ( !IsCompatible(other) ) { + logger.error["AddTable"]<<"Tried to add/merge incompatible tables. Aborted!"<<endl; + exit(1); + } + + // These are counters for the newly read other table ..., + const int ntot = other.GetNcontrib() + other.GetNdata(); + // but we need also to bookkeep this for the current table! + int newnc = fCoeff.size(); + int newnd = 0; + bool quiet = true; + for ( unsigned int jc=0; jc<fCoeff.size(); jc++) { + fastNLOCoeffBase* cthis = (fastNLOCoeffBase*)fCoeff[jc]; + if ( fastNLOCoeffData::CheckCoeffConstants(cthis,quiet) ) { + newnc--; + newnd++; + } + } + // Loop over all contributions from 'other'-table + for ( int ic=0; ic<ntot; ic++ ) { + logger.info["AddTable"]<<"Adding contribution no. " << ic << endl; + bool wasAdded = false; + // Find matching contribution from 'this'-table + for ( unsigned int jc=0; jc<fCoeff.size(); jc++) { + fastNLOCoeffBase* cother = (fastNLOCoeffBase*)other.GetCoeffTable(ic); + // Identify type of other coeff table + // Additive fixed-order? + if ( fastNLOCoeffAddBase::CheckCoeffConstants(cother,quiet) ) { + if ( fastNLOCoeffAddFix::CheckCoeffConstants(cother,quiet) ) { + fastNLOCoeffAddFix* clhs = (fastNLOCoeffAddFix*)fCoeff[jc]; + fastNLOCoeffAddFix* crhs = (fastNLOCoeffAddFix*)other.GetCoeffTable(ic); + if ( clhs->IsCompatible(*crhs) ) { + logger.info["AddTable"]<<"Found matching fix-scale additive contribution." << endl; + logger.debug["AddTable"]<<"Summing contribution "<<ic<<" to fCoeff #"<<jc<<endl; + clhs->Add(*crhs,moption); + wasAdded = true; + } + } + else if ( fastNLOCoeffAddFlex::CheckCoeffConstants(cother,quiet) ) { + fastNLOCoeffAddFlex* clhs = (fastNLOCoeffAddFlex*)fCoeff[jc]; + fastNLOCoeffAddFlex* crhs = (fastNLOCoeffAddFlex*)other.GetCoeffTable(ic); + if ( clhs->IsCompatible(*crhs) ) { + logger.info["AddTable"]<<"Found matching flex-scale additive contribution." << endl; + logger.debug["AddTable"]<<"Summing contribution "<<ic<<" to fCoeff #"<<jc<<endl; + clhs->Add(*crhs,moption); + wasAdded = true; + } + } + // all weights are additive, and already been aded by fastNLOCoeffBase::Add(); + // ((fastNLOCoeffAddBase*)fCoeff[jc])->AccessWgtStat().Add( ((fastNLOCoeffAddBase*)other.GetCoeffTable(ic))->GetWgtStat() ); + } + // Multiplicative? + else if ( fastNLOCoeffMult::CheckCoeffConstants(cother,quiet) ) { + fastNLOCoeffMult* clhs = (fastNLOCoeffMult*)fCoeff[jc]; + fastNLOCoeffMult* crhs = (fastNLOCoeffMult*)other.GetCoeffTable(ic); + if ( clhs->IsCompatible(*crhs) ) { + logger.error["AddTable"]<<"Found matching multiplicative contribution. This is not allowed. Aborted!" << endl; + wasAdded = true; + exit(1); + } + } + // Data? + else if ( fastNLOCoeffData::CheckCoeffConstants(cother,quiet) ) { + fastNLOCoeffData* clhs = (fastNLOCoeffData*)fCoeff[jc]; + fastNLOCoeffData* crhs = (fastNLOCoeffData*)other.GetCoeffTable(ic); + if ( clhs->IsCompatible(*crhs) ) { + logger.error["AddTable"]<<"Found matching data contribution. This is not allowed. Aborted!" << endl; + wasAdded = true; + exit(1); + } + } + // Unknown + else { + logger.error["AddTable"]<<"Could not identify contribution. Print and abort!" << endl; + cother->Print(-1); + exit(1); + } + } + // Couldn't find a corresponding contribution, + // so add this contribution as new. + if ( !wasAdded ) { + logger.info["AddTable"]<<"Adding new contribution to table."<<endl; + fastNLOCoeffBase* add = other.GetCoeffTable(ic); + if ( fastNLOCoeffAddFix::CheckCoeffConstants(add,quiet) ) { + add = new fastNLOCoeffAddFix((fastNLOCoeffAddFix&)*add); + // Adjust new theory contribution counter + newnc++; + } else if ( fastNLOCoeffAddFlex::CheckCoeffConstants(add,quiet) ) { + add = new fastNLOCoeffAddFlex((fastNLOCoeffAddFlex&)*add); + newnc++; + } else if ( fastNLOCoeffMult::CheckCoeffConstants(add,quiet) ) { + add = new fastNLOCoeffMult((fastNLOCoeffMult&)*add); + newnc++; + } else if ( fastNLOCoeffData::CheckCoeffConstants(add,quiet) ) { + add = new fastNLOCoeffData((fastNLOCoeffData&)*add); + // Adjust new data counter + newnd++; + } + CreateCoeffTable(fCoeff.size(),add); + } + } + // Check # of coefficients + if ( (int)fCoeff.size() != newnc + newnd ) { + logger.error["AddTable"]<<"Sorry, I'm confused about the no. of contributions. Aborted!" << endl; + logger.error["AddTable"]<<"newnc = " << newnc << ", newnd = " << newnd << ", fCoeff.size() = " << fCoeff.size() << endl; + exit(1); + } + // Set nc and nd for current table to be written out eventually + // SetNcontrib(newnc); + // SetNdata(newnd); +} + + +// ___________________________________________________________________________________________________ +void fastNLOTable::CatenateTable(const fastNLOTable& other) { + // Catenate another table to this table. + // All contributions must be identically defined. + // + static unsigned int table_count = 0; + if ( !IsCatenable(other) ) { + logger.error["CatenateTable"]<<"Tried to catenate incompatible tables. Aborted!"<<endl; + exit(1); + } else { + table_count++; + } + for ( unsigned int iObs=0; iObs<other.GetNObsBin(); iObs++ ) { + this->CatBinToTable(other,iObs,table_count); + } +} + + +// ___________________________________________________________________________________________________ +int fastNLOTable::CreateCoeffTable(int no, fastNLOCoeffBase *newblockb) { + // Attention: Proper adaptation of Ncontrib and Ndata, which are set each time a table is read, + // to the current value of the table in memory must be done in the calling routine! + logger.debug["CreateCoeffTable"]<<"Old: Ncontrib = " << GetNcontrib() << ", Ndata = " << GetNdata() << ", fCoeff.size() = " << fCoeff.size() << endl; + logger.debug["CreateCoeffTable"]<<"Creating coefficient table no. " << no << ", actual fCoeff.size() is: " << fCoeff.size() << endl; + if ( (no+1) > (int)fCoeff.size() ) { + fCoeff.resize(no+1); + logger.debug["CreateCoeffTable"]<<"Creating new coefficient table no. " << no << endl; + } + fCoeff[no] = newblockb; + //Ncontrib = fCoeff.size(); + return 0; +} + + +// ___________________________________________________________________________________________________ +bool fastNLOTable::cmp(const double x1, const double x2) const { + double norm = (x1>0.) ? x1 : 1.; // If x1 is 0, do not try to calculate relative deviation, use absolute + return((fabs(x1-x2)/norm)<1e-7); +} + +bool fastNLOTable::cmp(const vector<double>& x1,const vector<double>& x2) const { + bool result = true; + for(unsigned int i = 0; i<x1.size() ;i++ ){ + result &= cmp (x1[i],x2[i]); + } + return result; +} + +bool fastNLOTable::cmp(const vector<vector<double> >& x1, const vector<vector<double> >& x2) const { + bool result = true; + for(unsigned int i = 0; i<x1.size() ;i++ ){ + result &= cmp (x1[i],x2[i]); + } + return result; +} + +bool fastNLOTable::cmp(const vector<vector<pair<double,double> > >& x1, const vector<vector<pair<double,double> > >& x2) const { + bool result = true; + for(unsigned int i = 0; i<x1.size() ;i++ ){ + for(unsigned int j = 0; j<x1[i].size() ;j++ ){ + result = result & (cmp(x1[i][j].first,x2[i][j].first) && cmp(x1[i][j].second,x2[i][j].second)); + } + } + return result; +} + + +// ___________________________________________________________________________________________________ +void fastNLOTable::SetLoOrder(int LOOrd){ + ILOord = LOOrd; +} + + +// ___________________________________________________________________________________________________ +void fastNLOTable::SetDimLabel( string label, unsigned int iDim , bool IsDiff ){ + //! Set label for dimension + //! In this method, we also set IDiffBin. + //! The IDiffBin flag defines, if this dimension is + //! 0 (not differential, two bin borders required), + //! 1 (pointwise differential, one value required), (not yet completely implemented) + //! 2 (binwise differential, two bin borders required) + //! In case 2 the cross section is divided by the corresponding bin width in this dimension. + // + // TODO: KR: The IsDiff boolean should be changed into an int to accommodate IDiffBin 0,1,2 + // possibility?! + // + + // check validity of call + if ( ! (iDim < NDim) ) { + logger.error["SetDimLabel"]<<"Sorry, you have only initialized "<<NDim<<" dimensions, but you want to label a dimension with number "<<iDim<<endl; + exit(1); + } + + if ( DimLabel.size() != NDim ){ + logger.error["SetDimLabel"]<<"You have to call SetNumDiffBin with a reasonable number before."<<endl; + exit(1); + } + + DimLabel[iDim] = label; + IDiffBin[iDim] = IsDiff ? 2 : 0 ; +} + + +// ___________________________________________________________________________________________________ +int fastNLOTable::GetNmult() const { + int ret = 0; + for ( unsigned int i = 0 ; i<fCoeff.size() ; i++ ) + if ( (fCoeff[i]->GetIDataFlag()==0) && (fCoeff[i]->GetIAddMultFlag()==1) ) ret++; + return ret; +} + + +// ___________________________________________________________________________________________________ +int fastNLOTable::GetNcontrib() const { + int ret = 0; + for ( unsigned int i = 0 ; i<fCoeff.size() ; i++ ) + if ( (fCoeff[i]->GetIDataFlag()==0) /*&& (fCoeff[i]->GetIAddMultFlag()==0)*/ ) ret++; + return ret; +} + + +// ___________________________________________________________________________________________________ +int fastNLOTable::GetNdata() const { + int ret = 0; + for ( unsigned int i = 0 ; i<fCoeff.size() ; i++ ) + if ( (fCoeff[i]->GetIDataFlag()==1) && (fCoeff[i]->GetIAddMultFlag()==0) ) ret++; + return ret; +} + + +// ___________________________________________________________________________________________________ +fastNLOCoeffBase* fastNLOTable::GetCoeffTable(int no) const { + if ( no >= (int)fCoeff.size() ){ + logger.warn["GetCoeffTable"]<<"There is no contribution with number "<<no<<" but only "<<fCoeff.size()<<". Returning null pointer."<<endl; + return NULL; + } + else + return fCoeff[no]; +} + + +// ___________________________________________________________________________________________________ +fastNLOCoeffData* fastNLOTable::GetDataTable() const { + for (unsigned int i= 0; i<fCoeff.size() ; i++ ) { + fastNLOCoeffBase* c = GetCoeffTable(i); + if ( fastNLOCoeffData::CheckCoeffConstants(c,true) ) { + return (fastNLOCoeffData*)c; + } + } + return NULL; +} + + +// ___________________________________________________________________________________________________ +fastNLOCoeffAddBase* fastNLOTable::GetReferenceTable(fastNLO::ESMOrder eOrder) const { + for (unsigned int i= 0; i<fCoeff.size() ; i++ ){ + fastNLOCoeffBase* c = GetCoeffTable(i); + if ( fastNLOCoeffAddBase::CheckCoeffConstants(c,true) ) { + if ( ((fastNLOCoeffAddBase*)c)->IsReference() ) { + if ( eOrder == fastNLO::kLeading && c->IsLO() ) + return (fastNLOCoeffAddBase*)c; + else if ( eOrder == fastNLO::kNextToLeading && c->IsNLO() ) + return (fastNLOCoeffAddBase*)c; + else if ( eOrder == fastNLO::kNextToNextToLeading && c->IsNNLO() ) + return (fastNLOCoeffAddBase*)c; + } + } + } + return NULL; +} + + +// ___________________________________________________________________________________________________ +// Getters for binning structure +// ___________________________________________________________________________________________________ + + +// ___________________________________________________________________________________________________ +// Return lower bin bound for obs. bin iObs in dim. iDim +double fastNLOTable::GetObsBinLoBound(unsigned int iObs, unsigned int iDim) const { + if ( ! (iObs < NObsBin) ) { + logger.error["GetObsBinLoBound"]<<"Observable bin iObs " << iObs << " out of range, NObsBin = " << NObsBin << ", aborted!" << endl; + exit(1); + } + if ( ! (iDim < NDim) ) { + logger.error["GetObsBinLoBound"]<<"Dimension iDim " << iDim << " out of range, NDim = " << NDim << ", aborted!" << endl; + exit(1); + } + return Bin[iObs][iDim].first; +} + + +// ___________________________________________________________________________________________________ +// Return upper bin bound for obs. bin iObs in dim. iDim +double fastNLOTable::GetObsBinUpBound(unsigned int iObs, unsigned int iDim) const { + if ( ! (iObs < NObsBin) ) { + logger.error["GetObsBinUpBound"]<<"Observable bin iObs " << iObs << " out of range, NObsBin = " << NObsBin << ", aborted!" << endl; + exit(1); + } + if ( ! (iDim < NDim) ) { + logger.error["GetObsBinUpBound"]<<"Dimension iDim " << iDim << " out of range, NDim = " << NDim << ", aborted!" << endl; + exit(1); + } + return Bin[iObs][iDim].second; +} + + +// ___________________________________________________________________________________________________ +// Return/set vector of lower bin bounds in dim. iDim for all obs. bins +vector < double > fastNLOTable::GetObsBinsLoBounds(unsigned int iDim) const { + if ( ! (iDim < NDim) ) { + logger.error["GetObsBinsLoBounds"]<<"Dimension iDim " << iDim << " out of range, NDim = " << NDim << ", aborted!" << endl; + exit(1); + } + // Get lower bin edge of all observable bins for dimension 'iDim' + vector < double > LoBin; + for (size_t i = 0; i < Bin.size(); ++i) { + LoBin.push_back(Bin[i][iDim].first); + } + return LoBin; +} + +void fastNLOTable::SetObsBinsLoBounds(unsigned int iDim, vector < double > v) { + if ( ! (iDim < NDim) ) { + logger.error["SetObsBinsLoBounds"]<<"Dimension iDim " << iDim << " out of range, NDim = " << NDim << ", aborted!" << endl; + exit(1); + } + if ( v.size() != NObsBin ) { + logger.error["SetObsBinsLoBounds"]<<"Vector size " << v.size() << " unequal to no. of observable bins " << NObsBin << ", aborted!" << endl; + exit(1); + } + // Set lower bin edge of all observable bins for dimension 'iDim' + for (size_t i = 0; i < v.size(); ++i) { + Bin[i][iDim].first = v[i]; + } + return; +} + + +// ___________________________________________________________________________________________________ +// Return/set vector of upper bin bounds in dim. iDim for all obs. bins +vector < double > fastNLOTable::GetObsBinsUpBounds(unsigned int iDim) const { + if ( ! (iDim < NDim) ) { + logger.error["GetObsBinsUpBounds"]<<"Dimension iDim " << iDim << " out of range, NDim = " << NDim << ", aborted!" << endl; + exit(1); + } + // Get upper bin edge of all observable bins for dimension 'iDim' + vector < double > UpBin; + for (size_t i = 0; i < Bin.size(); ++i) { + UpBin.push_back(Bin[i][iDim].second); + } + return UpBin; +} + +void fastNLOTable::SetObsBinsUpBounds(unsigned int iDim, vector < double > v) { + if ( ! (iDim < NDim) ) { + logger.error["SetObsBinsUpBounds"]<<"Dimension iDim " << iDim << " out of range, NDim = " << NDim << ", aborted!" << endl; + exit(1); + } + if ( v.size() != NObsBin ) { + logger.error["SetObsBinsUpBounds"]<<"Vector size " << v.size() << " unequal to no. of observable bins " << NObsBin << ", aborted!" << endl; + exit(1); + } + // Set upper bin edge of all observable bins for dimension 'iDim' + for (size_t i = 0; i < v.size(); ++i) { + Bin[i][iDim].second = v[i]; + } + return; +} + +// ___________________________________________________________________________________________________ +// Return minimum value of all lower bin bounds for dim. iDim +double fastNLOTable::GetObsBinsLoBoundsMin(unsigned int iDim) const { + if ( ! (iDim < NDim) ) { + logger.error["GetObsBinsLoBoundsMin"]<<"Dimension iDim " << iDim << " out of range, NDim = " << NDim << ", aborted!" << endl; + exit(1); + } + //! Get lowest bin edge of all observable bins for dimension 'iDim' + double LoBinMin = DBL_MAX; + for (size_t i = 0; i < Bin.size(); ++i) { + logger.debug["GetObsBinsLoBoundsMin"]<<"iDim = " << iDim << ", i = " << i << ", Bin[i][iDim].first = " << Bin[i][iDim].first << ", LoBinMin = " << LoBinMin << endl; + LoBinMin = ( (Bin[i][iDim].first < LoBinMin) ? Bin[i][iDim].first : LoBinMin ); + } + logger.debug["GetObsBinsLoBoundsMin"]<<"Minimum found for dimension " << iDim << " is: " << LoBinMin << endl; + return LoBinMin; +} + + +// ___________________________________________________________________________________________________ +// Return maximum value of all upper bin bounds for dim. iDim +double fastNLOTable::GetObsBinsUpBoundsMax(unsigned int iDim) const { + if ( ! (iDim < NDim) ) { + logger.error["GetObsBinsUpBoundsMax"]<<"Dimension iDim " << iDim << " out of range, NDim = " << NDim << ", aborted!" << endl; + exit(1); + } + //! Get uppermost bin edge of all observable bins for dimension 'iDim' + double UpBinMax = -DBL_MAX; + for (size_t i = 0; i < Bin.size(); ++i) { + logger.debug["GetObsBinsUpBoundsMax"]<<"iDim = " << iDim << ", i = " << i << ", Bin[i][iDim].second = " << Bin[i][iDim].second << ", UpBinMax = " << UpBinMax << endl; + UpBinMax = ( (Bin[i][iDim].second > UpBinMax) ? Bin[i][iDim].second : UpBinMax ); + } + logger.debug["GetObsBinsUpBoundsMax"]<<"Maximum found for dimension " << iDim << " is: " << UpBinMax << endl; + return UpBinMax; +} + + +// ___________________________________________________________________________________________________ +// Return vector of pairs with lower and upper bin bounds in dim. iDim for all obs. bins +vector < pair < double, double > > fastNLOTable::GetObsBinsBounds(unsigned int iDim) const { + if ( ! (iDim < NDim) ) { + logger.error["GetObsBinsBounds"]<<"Dimension iDim " << iDim << " out of range, NDim = " << NDim << ", aborted!" << endl; + exit(1); + } + // Get bin edges of all observable bins for dimension 'iDim' + vector < pair < double, double > > Bounds; + for (size_t i = 0; i < Bin.size(); ++i) { + Bounds.push_back( Bin[i][iDim] ); + } + return Bounds; +} + + +// ___________________________________________________________________________________________________ +// Return vector of pairs with unique bin bounds of 1st dim. +vector < pair < double, double > > fastNLOTable::GetDim0BinBounds() const { + vector< pair<double, double > > Bins = GetObsBinsBounds(0); + set< pair< double,double> > set (Bins.begin(), Bins.end()); + Bins.assign(set.begin(),set.end()); + return Bins; +} + + +// ___________________________________________________________________________________________________ +// Return vector of pairs with unique bin bounds of 2nd dim. for 'iDim0Bin' of 1st dim. +vector < pair < double, double > > fastNLOTable::GetDim1BinBounds(unsigned int iDim0Bin) const { + vector< pair<double, double > > Bins; + if ( NDim < 2 ) { + logger.error["GetDim1BinBounds"] << "No second dimension available, aborted!" << endl; + exit(1); + } + pair< double, double> bin0 = GetDim0BinBounds()[iDim0Bin]; + for (size_t iobs = 0; iobs < Bin.size(); iobs++) { + if (Bin[iobs][0] == bin0) { + Bins.push_back(Bin[iobs][1]); + } + } + set< pair< double,double> > set (Bins.begin(), Bins.end()); + Bins.assign(set.begin(),set.end()); + return Bins; +} + + +// ___________________________________________________________________________________________________ +// Return vector of pairs with unique bin bounds of 3rd dim. for 'iDim0Bin' and 'iDim1Bin' of 1st two dim. +vector < pair < double, double > > fastNLOTable::GetDim2BinBounds(unsigned int iDim0Bin, unsigned int iDim1Bin) const { + vector< pair<double, double > > Bins; + if ( NDim < 3 ) { + logger.error["GetDim2BinBounds"] << "No third dimension available, aborted!" << endl; + exit(1); + } + pair< double, double> bin0 = GetDim0BinBounds()[iDim0Bin]; + pair< double, double> bin1 = GetDim1BinBounds(iDim0Bin)[iDim1Bin]; + for (size_t iobs = 0; iobs < Bin.size(); iobs++) { + if (Bin[iobs][0] == bin0 && Bin[iobs][1] == bin1) { + Bins.push_back(Bin[iobs][2]); + } + } + set< pair< double,double> > set (Bins.begin(), Bins.end()); + Bins.assign(set.begin(),set.end()); + return Bins; +} + + +// ___________________________________________________________________________________________________ +// Return vector of pairs with lower and upper bin bounds for all dimensions for a given obs. bin +vector < pair < double, double > > fastNLOTable::GetObsBinDimBounds(unsigned int iObs) const { + if ( ! ( iObs < NObsBin ) ) { + logger.error["GetObsBinDimBounds"]<<"Observable bin iObs " << iObs << " out of range, NObsBin = " << NObsBin << ", aborted!" << endl; + exit(1); + } + // // Get bin edges of all dimensions for observable bin 'iObs' + // vector < pair < double, double > > Bounds; + // for (size_t i = 0; i < Bin[iObs].size(); ++i) { + // Bounds.push_back( Bin[iObs][i] ); + // } + // return Bounds; + return Bin[iObs]; +} + + +// ___________________________________________________________________________________________________ +// Return pair with lower and upper bin bounds for given obs. bin and dim. iDim +pair < double, double > fastNLOTable::GetObsBinDimBounds(unsigned int iObs, unsigned int iDim) const { + if ( ! ( iObs < NObsBin ) ) { + logger.error["GetObsBinDimBounds"]<<"Observable bin iObs " << iObs << " out of range, NObsBin = " << NObsBin << ", aborted!" << endl; + exit(1); + } + if ( ! ( iDim < NDim ) ) { + logger.error["GetObsBinDimBounds"]<<"Dimension iDim " << iDim << " out of range, NDim = " << NDim << ", aborted!" << endl; + exit(1); + } + return Bin[iObs][iDim]; +} + + +// ___________________________________________________________________________________________________ +// Return bin no. in 1st dim. for obs. bin iObs +unsigned int fastNLOTable::GetIDim0Bin(unsigned int iObs) const { + //! Returns bin number in first dimension + //! Valid for up to triple differential binnings + // There always must be at least one bin! + if ( Bin.size() == 0 || Bin[0].size() == 0 ) { + logger.error["GetIDim0Bin"] << "No observable bins defined, aborted!" << endl; + exit(1); + } + if ( ! (iObs < NObsBin) ) { + logger.error["GetIDim0Bin"]<<"Observable bin iObs " << iObs << " out of range, NObsBin = " << NObsBin << ", aborted!" << endl; + exit(1); + } + unsigned int i0bin = 0; + double lo0bin = Bin[0][0].first; + for ( unsigned int i = 0; i<Bin.size(); i++ ) { + if ( lo0bin < Bin[i][0].first ) { + lo0bin = Bin[i][0].first; + i0bin++; + } + if ( i == iObs ) { + return i0bin; + } + } + logger.error["GetIDim0Bin"] << "Observable bin not found. This should never happen, aborted!" << endl; + exit(1); +} + + +// ___________________________________________________________________________________________________ +// Return bin no. in 2nd dim. for obs. bin iObs +unsigned int fastNLOTable::GetIDim1Bin(unsigned int iObs) const { + //! Returns bin number in second dimension + //! Valid for up to triple differential binnings + // 1d binning --> logger.error exit + if ( NDim < 2 ) { + logger.error["GetIDim1Bin"] << "No second dimension available, aborted!" << endl; + exit(1); + } + // Otherwise there always must be at least one bin! + if ( Bin.size() == 0 || Bin[0].size() == 0 ) { + logger.error["GetIDim1Bin"] << "No observable bins defined, aborted!" << endl; + exit(1); + } + if ( ! (iObs < NObsBin) ) { + logger.error["GetIDim1Bin"]<<"Observable bin iObs " << iObs << " out of range, NObsBin = " << NObsBin << ", aborted!" << endl; + exit(1); + } + unsigned int i0bin = 0; + unsigned int i1bin = 0; + double lo0bin = Bin[0][0].first; + double lo1bin = Bin[0][1].first; + for ( unsigned int i = 0; i<Bin.size(); i++ ) { + if ( lo0bin < Bin[i][0].first ) { + lo0bin = Bin[i][0].first; + lo1bin = Bin[i][1].first; + i0bin++; + i1bin = 0; + } else if ( lo1bin < Bin[i][1].first ) { + lo1bin = Bin[i][1].first; + i1bin++; + } + if ( i == iObs ) { + return i1bin; + } + } + logger.error["GetIDim1Bin"] << "Observable bin not found. This should never happen, aborted!" << endl; + exit(1); +} + + +// ___________________________________________________________________________________________________ +// Return bin no. in 3rd dim. for obs. bin iObs +unsigned int fastNLOTable::GetIDim2Bin(unsigned int iObs) const { + //! Returns bin number in third dimension + //! Valid for up to triple differential binnings + // 1d, 2d binning --> logger.error exit + if ( NDim < 3 ) { + logger.error["GetIDim2Bin"] << "No third dimension available, aborted!" << endl; + exit(1); + } + // Otherwise there always must be at least one bin! + if ( Bin.size() == 0 || Bin[0].size() == 0 ) { + logger.error["GetIDim2Bin"] << "No observable bins defined, aborted!" << endl; + exit(1); + } + if ( iObs >= NObsBin ) { + logger.error["GetIDim2Bin"] << "Observable bin out of range, aborted!" << endl; + exit(1); + } + unsigned int i0bin = 0; + unsigned int i1bin = 0; + unsigned int i2bin = 0; + double lo0bin = Bin[0][0].first; + double lo1bin = Bin[0][1].first; + double lo2bin = Bin[0][2].first; + for ( unsigned int i = 0; i<Bin.size(); i++ ) { + if ( lo0bin < Bin[i][0].first ) { + lo0bin = Bin[i][0].first; + lo1bin = Bin[i][1].first; + lo2bin = Bin[i][2].first; + i0bin++; + i1bin = 0; + i2bin = 0; + } else if ( lo1bin < Bin[i][1].first ) { + lo1bin = Bin[i][1].first; + lo2bin = Bin[i][2].first; + i1bin++; + i2bin = 0; + } else if ( lo2bin < Bin[i][2].first ) { + lo2bin = Bin[i][2].first; + i2bin++; + } + if ( i == iObs ) { + return i2bin; + } + } + logger.error["GetIDim2Bin"] << "Observable bin not found. This should never happen, aborted!" << endl; + exit(1); +} + + +// ___________________________________________________________________________________________________ +// Return no. of bins in 1st dimension +unsigned int fastNLOTable::GetNDim0Bins() const { + //! Returns number of bins in first dimension + //! Valid for up to triple differential binnings + // There always must be at least one bin! + return (GetIDim0Bin(NObsBin-1) + 1); +} + + +// ___________________________________________________________________________________________________ +// Return no. of bins in 2nd dimension for given bin in 1st dim. +unsigned int fastNLOTable::GetNDim1Bins(unsigned int iDim0Bin) const { + //! Returns number of bins in second dimension for iDim0Bin in first dimension + //! Valid for up to triple differential binnings + // 1d binning --> logger.error exit + if ( NDim < 2 ) { + logger.error["GetNDim1Bins"] << "No second dimension available, aborted!" << endl; + exit(1); + } + for ( unsigned int i = 0; i<Bin.size(); i++ ) { + if ( GetIDim0Bin(i) == iDim0Bin +1) { + return GetIDim1Bin(i-1) +1; + } else if ( i == Bin.size() -1 ) { + return GetIDim1Bin(i) +1; + } + } + logger.error["GetNDim1Bins"] << "Observable bin not found. This should never happen, aborted!" << endl; + exit(1); +} + + +// ___________________________________________________________________________________________________ +// Return no. of bins in 3rd dimension for given bins in 1st and 2nd dim. +unsigned int fastNLOTable::GetNDim2Bins(unsigned int iDim0Bin, unsigned int iDim1Bin) const { + //! Returns number of bins in third dimension for iDim0Bin in first and iDim1Bin in second dimension + //! Valid for up to triple differential binnings + // 1d, 2d binning --> logger.error exit + if ( NDim < 3 ) { + logger.error["GetNDim2Bins"] << "No third dimension available, aborted!" << endl; + exit(1); + } + for ( unsigned int i = 0; i<Bin.size(); i++ ) { + if ( GetIDim0Bin(i) == iDim0Bin && GetIDim1Bin(i) == iDim1Bin +1) { + return GetIDim2Bin(i-1) +1; + } else if ( GetIDim0Bin(i) == iDim0Bin +1 && GetIDim1Bin(i-1) == iDim1Bin) { + return GetIDim2Bin(i-1) +1; + } else if ( i == Bin.size() -1 ) { + return GetIDim2Bin(i) +1; + } + } + logger.error["GetNDim2Bins"] << "Observable bin not found. This should never happen, aborted!" << endl; + exit(1); +} + + +// ___________________________________________________________________________________________________ +// Return bin no. in 1st dim. for obs0=var0; -1 if outside range +int fastNLOTable::GetODim0Bin(double obs0) const { + int iDim0Bin = -1; + for ( unsigned int i=0; i<NObsBin; i++ ) { + if ( IDiffBin[0] == 1 ) { + logger.error["GetODim0Bin"] << "Point-wise differential not yet implemented, aborted!" << endl; + exit(1); + } else { + if ( Bin[i][0].first <= obs0 && obs0 < Bin[i][0].second ) { + iDim0Bin = GetIDim0Bin(i); + break; + } + } + } + return iDim0Bin; +} + + +// ___________________________________________________________________________________________________ +// Return bin no. in 2nd dim. for obs0=var0,obs1=var1; -1 if outside range +int fastNLOTable::GetODim1Bin(double obs0, double obs1) const { + int iDim1Bin = -1; + for ( unsigned int i=0; i<NObsBin; i++ ) { + if ( IDiffBin[0] == 1 ) { + logger.error["GetODim1Bin"] << "Point-wise differential not yet implemented, aborted!" << endl; + exit(1); + } else { + if ( Bin[i][0].first <= obs0 && obs0 < Bin[i][0].second && + Bin[i][1].first <= obs1 && obs1 < Bin[i][1].second ) { + iDim1Bin = GetIDim1Bin(i); + break; + } + } + } + return iDim1Bin; +} + + +// ___________________________________________________________________________________________________ +// Return bin no. in 3rd dim. for obs0=var0,obs1=var1,obs2=var2; -1 if outside range +int fastNLOTable::GetODim2Bin(double obs0, double obs1, double obs2) const { + int iDim2Bin = -1; + for ( unsigned int i=0; i<NObsBin; i++ ) { + if ( IDiffBin[0] == 1 ) { + logger.error["GetODim2Bin"] << "Point-wise differential not yet implemented, aborted!" << endl; + exit(1); + } else { + if ( Bin[i][0].first <= obs0 && obs0 < Bin[i][0].second && + Bin[i][1].first <= obs1 && obs1 < Bin[i][1].second && + Bin[i][2].first <= obs2 && obs2 < Bin[i][2].second ) { + iDim2Bin = GetIDim2Bin(i); + break; + } + } + } + return iDim2Bin; +} + + +// ___________________________________________________________________________________________________ +// Return observable bin no. for vector of values obs0=var0,obs1=var1,...; -1 if outside range +int fastNLOTable::GetObsBinNumber( const vector<double>& vobs ) const { + //! Returns first matching observable bin number for vector of observations + //! (assumes none or exactly one matching bin!) + //! Returns -1 if outside range + if ( vobs.size() != NDim ) { + logger.error["GetObsBinNumber"] << "Number of observable values not equal dimensionality of the binning, aborted" << endl; + logger.error["GetObsBinNumber"] << "NDim = " << NDim << ", vobs.size() = " << vobs.size() << endl; + exit(1); + } + if ( ! (NDim < 4) ) { + logger.error["GetObsBinNumber"] << "More than 3-dimensional binning not yet implemented, aborted!" << endl; + exit(1); + } + + for ( unsigned int i=0; i<NObsBin; i++ ) { + bool lmatch = true; + for ( unsigned int j=0; j<NDim; j++ ) { + if ( IDiffBin[j] == 1 ) { // Point-wise differential + lmatch = lmatch && ( fabs(Bin[i][j].first - vobs[j]) < DBL_MIN ); + } else { // Non- or bin-wise differential + lmatch = lmatch && ( Bin[i][j].first <= vobs[j] && vobs[j] < Bin[i][j].second ); + } + } + if ( lmatch ) {return i;} + } + return -1; +} + + +// ___________________________________________________________________________________________________ +// Return observable bin no. for obs0=var0 in 1D binning; -1 if outside range +int fastNLOTable::GetObsBinNumber( double obs0 ) const { + //! Returns first matching observable bin number for one observation + //! (assumes none or exactly one matching bin!) + //! Returns -1 if outside range + vector < double > vobs(1); + vobs[0] = obs0; + return GetObsBinNumber(vobs); +} + + +// ___________________________________________________________________________________________________ +// Return observable bin no. for obs0=var0,obs1=var1 in 2D binning; -1 if outside range +int fastNLOTable::GetObsBinNumber( double obs0, double obs1 ) const { + //! Returns first matching observable bin number for two observations + //! (assumes none or exactly one matching bin!) + //! Returns -1 if outside range + vector < double > vobs(2); + vobs[0] = obs0; + vobs[1] = obs1; + return GetObsBinNumber(vobs); +} + + +// ___________________________________________________________________________________________________ +// Return observable bin no. for obs0=var0,obs1=var1,obs2=var2 in 3D binning; -1 if outside range +int fastNLOTable::GetObsBinNumber( double obs0, double obs1, double obs2 ) const { + //! Returns first matching observable bin number for three observations + //! (assumes none or exactly one matching bin!) + //! Returns -1 if outside range + vector < double > vobs(3); + vobs[0] = obs0; + vobs[1] = obs1; + vobs[2] = obs2; + return GetObsBinNumber(vobs); +} + + +// ___________________________________________________________________________________________________ +// Some other info getters/setters +// ___________________________________________________________________________________________________ +string fastNLOTable::GetRivetId() const { + string identifier("RIVET_ID"); + string found; + for (size_t i=0; i < ScDescript.size(); ++i) { + if (ScDescript[i].find(identifier) != string::npos){ + size_t RivetIdx = ScDescript[i].find(identifier); + size_t RivetValIdx = ScDescript[i].find("=", RivetIdx) + 1; + size_t RivetValLen = ScDescript[i].find(",", RivetValIdx) - RivetValIdx; + found = ScDescript[i].substr(RivetValIdx, RivetValLen); + break; + } + } + return found; +} + +string fastNLOTable::GetXSDescr() const { + string identifier("sigma"); + for (size_t i=0; i < ScDescript.size(); ++i) { + if (ScDescript[i].find(identifier) != string::npos){ + return ScDescript[i]; + } + } + return "Undefined"; +} + +void fastNLOTable::SetScDescr(std::vector <std::string> ScDescr) { + size_t NScDescript = ScDescr.size(); + fastNLOTable::ScDescript.resize(NScDescript); + for (size_t i=0; i < NScDescript; ++i) { + fastNLOTable::ScDescript[i] = ScDescr[i]; + } +} + +void fastNLOTable::SetNObsBin(int NObs) { + fastNLOTable::NObsBin = NObs; +} + +void fastNLOTable::SetBinSize(std::vector < double > NewBinSize) { + size_t NewSize = NewBinSize.size(); + fastNLOTable::BinSize.resize(NewSize); + for (size_t i=0; i < NewSize; ++i) { + fastNLOTable::BinSize[i] = NewBinSize[i]; + } +} + +void fastNLOTable::SetBins(std::vector < std::vector <std::pair<double,double> > > NewBins) { + size_t NewSize = NewBins.size(); + fastNLOTable::Bin.resize(NewSize); + for (size_t i=0; i < NewSize; ++i) { + fastNLOTable::Bin[i] = NewBins[i]; + } +} + + + +// ___________________________________________________________________________________________________ +// Info print out functionality +// ___________________________________________________________________________________________________ + + +// ___________________________________________________________________________________________________ +void fastNLOTable::Print(int iprint) const { + // Define different levels of detail for printing out table content + // The minimum (iprint = 0) just gives basic scenario information + // including the employed code with references. The additional levels + // are mostly for debugging purposes. + // (Partially to be implemented!) + // + // iprint = 0: No additional printout + // 1: Print Block A1 & A2 (A1, A2) + // 2: Also print values of Block B (B0) + // Not implemented yet + // 3: Also print x nodes of Block B for each contribution (BX) + // 4: Also print scale nodes of Block B for each contribution (BS) + // 5: Also print sigma tilde of Block B (not implemented yet) + + // + // Print table header + char buffer[1024]; + cout << endl; + cout << fastNLO::_CSEPSC << endl; + snprintf(buffer, sizeof(buffer), "Information on table header"); + logger.shout << buffer << endl; + cout << fastNLO::_SSEPSC << endl; + PrintHeader(iprint); + + // + // Print scenario information + PrintScenario(iprint); + + // + // Loop over available contributions + for (unsigned int j = 0 ; j<fCoeff.size() ; j++) { + fastNLOCoeffBase* c = fCoeff[j]; + char buffer[1024]; + cout << endl; + cout << fastNLO::_CSEPSC << endl; + snprintf(buffer, sizeof(buffer), "Information on table contribution no. %d: %s",j,c->CtrbDescript[0].data()); + logger.shout << buffer << endl; + cout << fastNLO::_SSEPSC << endl; + // Print information for each contribution + c->Print(iprint); + } +} + + +// ___________________________________________________________________________________________________ +void fastNLOTable::PrintScenario(int iprint) const { + // + // Print scenario information for table + // iprint: iprint > 0: Print more info ... + // + logger.debug["PrintScenario"] << "Printing info on scenario: " << ScenName.data() << endl; + char buffer[1024]; + cout << endl; + cout << fastNLO::_CSEPSC << endl; + snprintf(buffer, sizeof(buffer), "Information on fastNLO scenario: %s",ScenName.data()); + logger.shout << buffer << endl; + cout << fastNLO::_SSEPSC << endl; + if ( !(iprint < 0) ) { + cout << fastNLO::_DSEP20C << " fastNLO Table: Scenario " << fastNLO::_DSEP20 << endl; + } else { + cout << endl << fastNLO::_CSEP20C << " fastNLO Table: Scenario " << fastNLO::_CSEP20 << endl; + } + fastNLOTools::PrintVector(ScDescript,"Scenario description (ScDescript)","#"); + printf(" #\n"); + printf(" # Publ. x section (10^-Ipublunits b) %d\n",Ipublunits); + printf(" # Centre-of-mass energy (Ecms/GeV) %5.0f\n",Ecms); + printf(" # Power in a_s of LO process (ILOord) %d\n",ILOord); + printf(" # No. of observable bins (NObsBin) %d\n",NObsBin); + printf(" # Dim. of observable binning (NDim) %d\n",NDim); + printf(" #\n"); + fastNLOTools::PrintVector(DimLabel,"Dimension labels (DimLabel)","#"); + fastNLOTools::PrintVector(IDiffBin,"Differential dimension (IDiffBin)","#"); + printf(" #\n"); + if ( std::abs(iprint) > 1 ) { + cout << fastNLO::_SSEP20C << " Extended information (iprint > 1) " << fastNLO::_SSEP20 << endl; + for (unsigned int i=0; i<NObsBin; i++) { + // Print only for first and last observable bin + if (i==0 || i==NObsBin-1) { + for (unsigned int j=0; j<NDim; j++) { + printf(" # LoBin[%d][%d] %7.4f\n", i,j,Bin[i][j].first); + if ( IDiffBin[j]==2 ) { + printf(" # UpBin[%d][%d] %7.4f\n", i,j,Bin[i][j].second); + } + } + } + } + for (unsigned int i=0; i<NObsBin; i++) { + // Print only for first and last observable bin + if (i==0 || i==NObsBin-1) { + printf(" # BinSize[%d] %7.4f\n", i,BinSize[i]); + } + } + } + if( INormFlag != 0 ) { + printf(" # Normalization flag (INormFlag) %d\n",INormFlag); + if ( INormFlag<0 ) { + printf(" # Normalization table (DenomTable) %s\n",DenomTable.data()); + } + if ( std::abs(iprint) > 1 ) { + cout << fastNLO::_SSEP20C << " Extended information (iprint > 1) " << fastNLO::_SSEP20 << endl; + for (unsigned int i=0; i<NObsBin; i++) { + // Print only for first and last observable bin + if (i==0 || i==NObsBin-1) { + printf(" # IDivLoPointer[%d] %d\n",i,IDivLoPointer[i]); + printf(" # IDivUpPointer[%d] %d\n",i,IDivUpPointer[i]); + } + } + } + printf(" #\n"); + } + printf(" # Total no. of contributions (theory + optional data) in this table: %d\n",(int)fCoeff.size()); + cout << fastNLO::_CSEPSC << endl; +} + + +//______________________________________________________________________________ +void fastNLOTable::PrintContributionSummary(int iprint) const { + // + // Print summary of contributions available in table + // iprint: iprint > 0: Print full descriptions (all lines) for each contribution + // + logger.debug["PrintContributionSummary"] << "Printing flag iprint = " << iprint << endl; + char buffer[1024]; + // cout << endl; + cout << fastNLO::_CSEPSC << endl; + logger.shout << "Overview on contribution types and numbers contained in table: " << ffilename << endl; + cout << fastNLO::_SSEPSC << endl; + snprintf(buffer, sizeof(buffer), "Total number of contributions: %2i", (int)fCoeff.size()); + logger.shout << buffer << endl; + + int iccount[21] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; + int ictype = 0; + string coeffname; + for (unsigned int j = 0 ; j<fCoeff.size() ; j++) { + fastNLOCoeffBase* c = fCoeff[j]; + if ( fastNLOCoeffData::CheckCoeffConstants(c,true) ) { + ictype = 20; + coeffname = "Data"; + } else { + ictype = fCoeff[j]->GetIContrFlag1()-1; + coeffname = fastNLO::_ContrName[ictype]; + } + iccount[ictype]++; + snprintf(buffer, sizeof(buffer), " No.: %d, type: %-30.30s, Id: %d, order: %-20.20s, by: %s", + j+1, + coeffname.c_str(), + iccount[ictype]-1, + c->GetContributionDescription()[0].c_str(), + c->GetCodeDescription()[0].c_str()); + logger.shout << buffer << endl; + + if (iprint > 0) { + for (unsigned int k = 0 ; k<c->GetCodeDescription().size(); k++) { + snprintf(buffer, sizeof(buffer), " %s",c->GetCodeDescription()[k].c_str()); + logger.shout << buffer << endl; + } + } + } + int nc = 0; + for ( int icnt=0; icnt<21; icnt++ ) { + nc += iccount[icnt]; + } + if ( iccount[2]+iccount[3] != GetNmult() ) { + logger.warn["PrintContributionSummary"] << "Multiplicative contribution not correctly advertised in table header." << endl; + logger.warn["PrintContributionSummary"] << "Nmult = " << GetNmult() << + " should equal " << iccount[2]+iccount[3] << " instead. Continue anyway, since not actually used." << endl; + } + if ( iccount[20] > 1 ) { + logger.error["PrintContributionSummary"] << "Maximally one data contribution allowed per table," << endl; + logger.error["PrintContributionSummary"] << "but found " << iccount[20] << "! Aborted!" << endl; + exit(1); + } + if ( iccount[20] != GetNdata() ) { + if ( nc == GetNcontrib()+GetNdata() ) { + logger.warn["PrintContributionSummary"] << "Data contribution not correctly advertised in table header." << endl; + logger.warn["PrintContributionSummary"] << "Ncontrib = " << GetNcontrib() << " and Ndata = " << GetNdata() << + " should equal " << nc-1 << " and " << iccount[20] << " instead. Continue anyway, since only sum is actually used." << endl; + } else { + logger.error["PrintContributionSummary"] << "Inconsistent number of contributions found!" << endl; + logger.error["PrintContributionSummary"] << "Ncontrib = " << GetNcontrib() << " and Ndata = " << GetNdata() << + " should be " << nc-1 << " and " << iccount[20] << " instead. Aborted!" << endl; + exit(1); + } + } + cout << fastNLO::_CSEPSC << endl; +} + + +//_DEPRECATED___________________________________________________________________ +void fastNLOTable::PrintFastNLOTableConstants(const int iprint) const { + logger.error["PrintFastNLOTableConstants"]<<"This function is deprecated, aborted!"<<endl; + logger.error["PrintFastNLOTableConstants"]<<"Please use Print instead."<<endl; +} + + +//_DEPRECATED___________________________________________________________________ +void fastNLOTable::PrintTableInfo(const int iprint) const { + logger.error["PrintTableInfo"]<<"This function is deprecated, aborted!"<<endl; + logger.error["PrintTableInfo"]<<"Please use PrintContributionSummary instead."<<endl; +} + + +// DO NOT USE ANYTHING BELOW! DOES NOT WORK YET! +// ___________________________________________________________________________________________________ +// DO NOT USE! DOES NOT WORK YET! +// unsigned int fastNLOTable::GetIDimBin(unsigned int iObsBin, unsigned int iDim) const { +// //! Returns bin number in dimension iDim +// // iDim larger than table dimensions --> logger.error exit +// logger.error["GetIDimBin"] << "DO NOT USE! DOES NOT WORK YET!" << endl; +// const unsigned int idiff = GetNumDiffBin(); +// if ( ! (iDim < idiff) ) { +// logger.error["GetIDimBin"] << "Requested dimension iDim not available, aborted!" << endl; +// exit(1); +// } +// // Otherwise there always must be at least one bin! +// if ( Bin.size() == 0 || Bin[0].size() == 0 ) { +// logger.error["GetIDimBin"] << "No observable bins defined, aborted!" << endl; +// exit(1); +// } +// if ( iObsBin >= NObsBin ) { +// logger.error["GetIDimBin"] << "Observable bin out of range, aborted!" << endl; +// exit(1); +// } +// vector < unsigned int > ibin(NDim); +// vector < double > lobin(NDim); +// for ( unsigned int jdim = 0; jdim<=iDim; jdim++ ) { +// ibin.push_back(0); +// lobin.push_back(Bin[0][jdim].first); +// } +// for ( unsigned int iobs = 0; iobs<Bin.size(); iobs++ ) { +// if (iDim == 2) { +// if ( lobin[0] < Bin[iobs][0].first ) { +// for (unsigned int k=0; k<=iDim; k++) { +// lobin[k] = Bin[iobs][k].first; +// } +// ibin[0]++; +// for (unsigned int k=1; k<=iDim; k++) { +// ibin[k] = 0; +// } +// } else if ( lobin[1] < Bin[iobs][1].first ) { +// for (unsigned int k=1; k<=iDim; k++) { +// lobin[k] = Bin[iobs][k].first; +// } +// ibin[1]++; +// for (unsigned int k=2; k<=iDim; k++) { +// ibin[k] = 0; +// } +// } else if ( lobin[2] < Bin[iobs][2].first ) { +// for (unsigned int k=2; k<=iDim; k++) { +// lobin[k] = Bin[iobs][k].first; +// } +// ibin[2]++; +// } +// } else if (iDim == 1) { +// if ( lobin[0] < Bin[iobs][0].first ) { +// for (unsigned int k=0; k<=iDim; k++) { +// lobin[k] = Bin[iobs][k].first; +// } +// ibin[0]++; +// for (unsigned int k=1; k<=iDim; k++) { +// ibin[k] = 0; +// } +// } else if ( lobin[1] < Bin[iobs][1].first ) { +// for (unsigned int k=1; k<=iDim; k++) { +// lobin[k] = Bin[iobs][k].first; +// } +// ibin[1]++; +// } +// } else if (iDim == 0 ) { +// if ( lobin[0] < Bin[iobs][0].first ) { +// for (unsigned int k=0; k<=iDim; k++) { +// lobin[k] = Bin[iobs][k].first; +// } +// ibin[0]++; +// } +// } +// if ( iobs == iObsBin ) { +// return ibin[iDim]; +// } +// } +// logger.error["GetIDimBin"] << "Observable bin not found. This should never happen, aborted!" << endl; +// exit(1); +// } +// +// +// ___________________________________________________________________________________________________ +// DO NOT USE! DOES NOT WORK YET! +// vector < pair < double, double > > fastNLOTable::GetBinBoundaries(int iDim0Bin, int iDim1Bin, int iDim2Bin) { +// //! +// //! Get bin boundaries for first, second, and third dimension +// //! Assuming for instance following 2-dimensional binning scheme: +// //! +// //! iDim0Bin ________________________________ +// //! 0 |___|___|___|_______|__|__|____| +// //! D 1 |____|____|____|_____|____|____| +// //! I 2 |__|__|___|__|__|___|__|___|___| +// //! M 3 |______|_______|_________|_____| +// //! 4 |__________|_______|_________|_| +// //! 0 5 |______________|______|___|____| +// //! 6 |_______|_______|______|_______| +// //! DIM 1 +// //! iDim1Bin may be different for each iDim0Bin +// //! +// //! usage e.g.: +// //! int LowerBoundary = GetBinBoundaries(ibin)[dim].first; +// //! int UpperBoundary = GetBinBoundaries(ibin)[dim].second; +// //! 'dim' must be smaller than number of parameters passed to GetBinBoundaries +// //! usage e.g.: +// //! int LoYBin = GetBinBoundaries(2)[0].first; +// //! int UpPtBin = GetBinBoundaries(2,5)[1].second; +// //! int LoYBin = GetBinBoundaries(2,5)[0].second; +// logger.error["GetBinBoundaries"] << "DO NOT USE! DOES NOT WORK YET!" << endl; +// vector<pair<double,double> > BinRet(NDim); +// const int idiff = GetNumDiffBin(); +// +// if ( idiff==1 ) { +// if ( iDim0Bin<0 || iDim0Bin >= (int)NObsBin ) { +// logger.warn["GetBinBoundaries"]<<"0th dimension does only have "<<NObsBin<<" but bin "<<iDim0Bin<<" was requested."<<endl; +// return BinRet; +// } +// return Bin[iDim0Bin]; +// } +// else if ( idiff==2) { +// unsigned int nDim1 = GetNDim1Bins(iDim0Bin); +// unsigned int nDim0 = GetNDim0Bins(); +// // sanity +// if ( iDim0Bin < 0 || iDim0Bin >= (int)nDim0 ) { +// logger.warn["GetBinBoundaries"]<<"Dimension 2 does only have "<<nDim0<<" but bin "<<iDim0Bin<<" was requested."<<endl; +// } +// if ( iDim1Bin < 0 || iDim1Bin >= (int)nDim1 ) { +// logger.warn["GetBinBoundaries"]<<"Dimension 1 does only have "<<nDim1<<" but bin "<<iDim1Bin<<" was requested."<<endl; +// } +// int iObs = 0; +// for ( int i0 = 0 ; i0<iDim0Bin ; i0++ ) { +// iObs += GetNDim1Bins(i0); +// } +// iObs += iDim1Bin; +// return Bin[iObs]; +// } +// else if ( idiff == 3 ) { +// unsigned int nDim0 = GetNDim0Bins(); +// unsigned int nDim1 = GetNDim1Bins(iDim0Bin); +// unsigned int nDim2 = GetNDim2Bins(iDim0Bin,iDim1Bin); +// // sanity +// if ( iDim0Bin < 0 || iDim0Bin >= (int)nDim0 ) { +// logger.warn["GetBinBoundaries"]<<"Dimension 0 does only have "<<nDim0<<" but bin "<<iDim0Bin<<" was requested."<<endl; +// } +// if ( iDim1Bin < 0 || iDim1Bin >= (int)nDim1 ) { +// logger.warn["GetBinBoundaries"]<<"Dimension 1 does only have "<<nDim1<<" but bin "<<iDim1Bin<<" was requested."<<endl; +// } +// if ( iDim2Bin < 0 || iDim2Bin >= (int)nDim2 ) { +// logger.warn["GetBinBoundaries"]<<"Dimension 2 does only have "<<nDim2<<" but bin "<<iDim2Bin<<" was requested."<<endl; +// } +// logger.error["GetBinBoundaries"]<<"todo. Further code no yet implemented."<<endl; +// +// } +// else { +// logger.error["GetBinBoundaries"]<<"Higher than triple-differential binnings are not implemented."<<endl; +// } +// return BinRet; +// +// } + + +// Erase observable bin; iObsIdx is the C++ array index to be removed and +// not the observable bin no. running from 1 to NObsBin +template<typename T> void fastNLOTable::EraseBin(vector<T>& v, unsigned int idx) { + if ( v.empty() ) { + logger.warn["EraseBin"]<<"Empty vector, nothing to erase!" << endl; + } else if ( idx < v.size() ) { + logger.info["EraseBin"]<<"Erasing vector index no. " << idx << endl; + v.erase(v.begin()+idx); + } else { + logger.error["EraseBin"]<<"Bin no. larger than vector size, aborted!" << endl; + exit(1); + } +} + + +void fastNLOTable::EraseBinFromTable(unsigned int iObsIdx) { + if ( IsNorm() != 0 ) { + logger.error["EraseBinFromTable"]<<"Not implemented yet for normalisable tables. Aborted!" << endl; + exit(1); + } + + logger.info["EraseBinFromTable"]<<"Erasing from table the observable index no. " << iObsIdx << endl; + // Changes to table header block A2 + EraseBin(fastNLOTable::Bin,iObsIdx); + EraseBin(fastNLOTable::BinSize,iObsIdx); + if ( fastNLOTable::INormFlag != 0 ) { + EraseBin(fastNLOTable::IDivLoPointer,iObsIdx); + EraseBin(fastNLOTable::IDivUpPointer,iObsIdx); + } + // Changes to table contributions block B + for ( int ic = 0; ic<GetNcontrib()+GetNdata(); ic++ ) { + logger.info["EraseBinFromTable"]<<"Erasing the observable index no. " << iObsIdx << " from contribution no. " << ic << endl; + fastNLOCoeffAddBase* ctmp = (fastNLOCoeffAddBase*)fCoeff[ic]; + + // Identify type of coeff-table + bool quiet = true; + if ( fastNLOCoeffData::CheckCoeffConstants(ctmp,quiet) ) { + logger.info["EraseBinFromTable"]<<"Found data contribution. Now erasing index no. " << iObsIdx << endl; + fastNLOCoeffData* cdata = (fastNLOCoeffData*)fCoeff[ic]; + cdata->EraseBin(iObsIdx); + } else if ( fastNLOCoeffMult::CheckCoeffConstants(ctmp,quiet) ) { + logger.info["EraseBinFromTable"]<<"Found multiplicative contribution. Now erasing index no. " << iObsIdx << endl; + fastNLOCoeffMult* cmult = (fastNLOCoeffMult*)fCoeff[ic]; + cmult->EraseBin(iObsIdx); + } else if ( fastNLOCoeffAddFix::CheckCoeffConstants(ctmp,quiet) ) { + logger.info["EraseBinFromTable"]<<"Found additive fix-table contribution. Now erasing index no. " << iObsIdx << endl; + fastNLOCoeffAddFix* cfix = (fastNLOCoeffAddFix*)fCoeff[ic]; + cfix->EraseBin(iObsIdx,ITabVersionRead); + } else if ( fastNLOCoeffAddFlex::CheckCoeffConstants(ctmp,quiet) ) { + logger.info["EraseBinFromTable"]<<"Found additive flex-table contribution. Now erasing index no. " << iObsIdx << endl; + fastNLOCoeffAddFlex* cflex = (fastNLOCoeffAddFlex*)fCoeff[ic]; + cflex->EraseBin(iObsIdx,ITabVersionRead); + } else { + logger.error["EraseBinFromTable"]<<"Could not identify contribution. Print and abort!" << endl; + ctmp->Print(-1); + exit(1); + } + } + // Reduce no. of observable bins + SetNObsBin(GetNObsBin()-1); +} + + + +// Multiply observable bin; iObsIdx is the C++ array index to be multiplied and +// not the observable bin no. running from 1 to NObsBin +template<typename T> void fastNLOTable::MultiplyBin(vector<T>& v, unsigned int idx, double fact) { + if ( v.empty() ) { + logger.warn["MultiplyBin"]<<"Empty vector, nothing to multiply!" << endl; + } else if ( idx < v.size() ) { + logger.info["MultiplyBin"]<<"Multiplying vector index no. " << idx << endl; + v[idx] *= fact; + } else { + logger.error["MultiplyBin"]<<"Bin no. larger than vector size, aborted!" << endl; + exit(1); + } +} + +void fastNLOTable::MultiplyBinSize(unsigned int iObsIdx, double fact) { + logger.debug["MultiplyBinSize"]<<"Multiplying the bin size of the observable index no. " << iObsIdx << " by " << fact << endl; + MultiplyBin(fastNLOTable::BinSize,iObsIdx,fact); +} + +void fastNLOTable::MultiplyBinBorders(unsigned int iDim, double fact) { + logger.debug["MultiplyBinBorders"]<<"Multiplying the bin borders of dimension " << iDim << " by " << fact << endl; + if ( ! (iDim < NDim) ) { + logger.error["MultiplyBinBorders"]<<"Dimensionality iDim " << iDim << " too large for this table with NDim = " << NDim << endl; + exit(1); + } + std::vector < double > lo = GetObsBinsLoBounds(iDim); + std::vector < double > up = GetObsBinsUpBounds(iDim); + for (size_t i = 0; i < NObsBin; ++i) { + // cout << "AAA: iobs = " << i << ", lo = " << lo[i] << ", up = " << up[i] << endl; + lo[i] *= fact; + up[i] *= fact; + // cout << "BBB: iobs = " << i << ", lo = " << lo[i] << ", up = " << up[i] << endl; + } + SetObsBinsLoBounds(iDim, lo); + SetObsBinsUpBounds(iDim, up); + return; +} + +void fastNLOTable::MultiplyBinInTable(unsigned int iObsIdx, double fact) { + logger.debug["MultiplyBinInTable"]<<"Multiplying the observable index no. " << iObsIdx << endl; + // Changes to table header block A2 + // Changes to table contributions block B + for ( int ic = 0; ic<GetNcontrib()+GetNdata(); ic++ ) { + logger.debug["MultiplyBinInTable"]<<"Multiplying the observable index no. " << iObsIdx << " from contribution no. " << ic << endl; + fastNLOCoeffAddBase* ctmp = (fastNLOCoeffAddBase*)fCoeff[ic]; + + // Identify type of coeff-table + bool quiet = true; + if ( fastNLOCoeffData::CheckCoeffConstants(ctmp,quiet) ) { + logger.debug["MultiplyBinInTable"]<<"Found data contribution. Skipped! Index no. " << iObsIdx << endl; + fastNLOCoeffData* cdata = (fastNLOCoeffData*)fCoeff[ic]; + cdata->MultiplyBin(iObsIdx,fact); + } else if ( fastNLOCoeffMult::CheckCoeffConstants(ctmp,quiet) ) { + logger.debug["MultiplyBinInTable"]<<"Found multiplicative contribution. Skipped! Index no. " << iObsIdx << endl; + fastNLOCoeffMult* cmult = (fastNLOCoeffMult*)fCoeff[ic]; + cmult->MultiplyBin(iObsIdx,fact); + } else if ( fastNLOCoeffAddFix::CheckCoeffConstants(ctmp,quiet) ) { + logger.debug["MultiplyBinInTable"]<<"Found additive fix-table contribution. Now multiplying index no. " << iObsIdx << endl; + fastNLOCoeffAddFix* cfix = (fastNLOCoeffAddFix*)fCoeff[ic]; + cfix->MultiplyBin(iObsIdx,fact); + } else if ( fastNLOCoeffAddFlex::CheckCoeffConstants(ctmp,quiet) ) { + logger.debug["MultiplyBinInTable"]<<"Found additive flex-table contribution. Now multiplying index no. " << iObsIdx << endl; + fastNLOCoeffAddFlex* cflex = (fastNLOCoeffAddFlex*)fCoeff[ic]; + cflex->MultiplyBin(iObsIdx,fact); + } else { + logger.error["MultiplyBinInTable"]<<"Could not identify contribution. Print and abort!" << endl; + ctmp->Print(-1); + exit(1); + } + } +} + +void fastNLOTable::CatBinToTable(const fastNLOTable& other, unsigned int iObsIdx, unsigned int table_count) { + logger.info["CatBinToTable"]<<"Catenating the observable bin index no. " << iObsIdx << " from other table to this." << endl; + // Changes to table header block A2 + CatBin(other,iObsIdx,table_count); + // Changes to table contributions block B + // Loop over all contributions from 'other'-table + for ( int ic=0; ic<other.GetNcontrib()+other.GetNdata(); ic++ ) { + logger.info["CatBinToTable"]<<"Catenating the observable index no. " << iObsIdx << " from contribution no. " << ic << endl; + // Find matching contribution from 'this'-table + for ( unsigned int jc=0; jc<fCoeff.size(); jc++) { + bool quiet = true; + // fastNLOCoeffBase* cthis = (fastNLOCoeffBase*)fCoeff[jc]; + fastNLOCoeffBase* cother = (fastNLOCoeffBase*)other.GetCoeffTable(ic); + // Identify type of other coeff table + // Additive fixed-order? + if ( fastNLOCoeffAddBase::CheckCoeffConstants(cother,quiet) ) { + if ( fastNLOCoeffAddFix::CheckCoeffConstants(cother,quiet) ) { + fastNLOCoeffAddFix* clhs = (fastNLOCoeffAddFix*)fCoeff[jc]; + fastNLOCoeffAddFix* crhs = (fastNLOCoeffAddFix*)other.GetCoeffTable(ic); + if ( clhs->IsCatenable(*crhs) ) { + logger.info["CatBinToTable"]<<"Found fix-scale additive contribution. Now catenating index no. " << iObsIdx << endl; + clhs->CatBin(*crhs,iObsIdx,ITabVersionRead); + continue; + } + } + else if ( fastNLOCoeffAddFlex::CheckCoeffConstants(cother,quiet) ) { + fastNLOCoeffAddFlex* clhs = (fastNLOCoeffAddFlex*)fCoeff[jc]; + fastNLOCoeffAddFlex* crhs = (fastNLOCoeffAddFlex*)other.GetCoeffTable(ic); + if ( clhs->IsCatenable(*crhs) ) { + logger.info["CatBinToTable"]<<"Found flex-scale additive contribution. Now catenating index no. " << iObsIdx << endl; + clhs->CatBin(*crhs,iObsIdx,ITabVersionRead); + continue; + } + } + } + // Multiplicative? + else if ( fastNLOCoeffMult::CheckCoeffConstants(cother,quiet) ) { + fastNLOCoeffMult* clhs = (fastNLOCoeffMult*)fCoeff[jc]; + fastNLOCoeffMult* crhs = (fastNLOCoeffMult*)other.GetCoeffTable(ic); + if ( clhs->IsCatenable(*crhs) ) { + logger.info["CatBinToTable"]<<"Found multiplicative contribution. Now catenating index no. " << iObsIdx << endl; + clhs->CatBin(*crhs,iObsIdx); + continue; + } + } + // Data? + else if ( fastNLOCoeffData::CheckCoeffConstants(cother,quiet) ) { + fastNLOCoeffData* clhs = (fastNLOCoeffData*)fCoeff[jc]; + fastNLOCoeffData* crhs = (fastNLOCoeffData*)other.GetCoeffTable(ic); + if ( clhs->IsCatenable(*crhs) ) { + logger.info["CatBinToTable"]<<"Found data contribution. Now catenating index no. " << iObsIdx << endl; + clhs->CatBin(*crhs,iObsIdx); + continue; + } + } + // Unknown + else { + logger.error["CatBinToTable"]<<"Could not identify contribution. Print and abort!" << endl; + cother->Print(-1); + exit(1); + } + } + } + // Increase no. of observable bins + SetNObsBin(GetNObsBin()+1); +} + +// Catenate observable bin +void fastNLOTable::CatBin(const fastNLOTable& other, unsigned int iObsIdx, unsigned int table_count) { + logger.debug["CatBin"]<<"Catenating observable bin in scenario header corresponding to bin index " << iObsIdx << endl; + if ( Bin.size() == 0 ) { + say::error["CatBin"]<<"Bin size cannot be zero for a fastNLO table. Aborted!" << endl; + exit(1); + } + static unsigned int noff = 0; + static unsigned int ntab = 0; + unsigned int nold = Bin.size(); + if ( ntab != table_count ) { + ntab = table_count; + noff = nold; + } + Bin.resize(nold+1); + Bin[nold] = other.Bin[iObsIdx]; + BinSize.resize(nold+1); + BinSize[nold] = other.BinSize[iObsIdx]; + if ( fastNLOTable::INormFlag != 0 ) { + IDivLoPointer.resize(nold+1); + IDivUpPointer.resize(nold+1); + if ( fastNLOTable::INormFlag == 2 ) { + IDivLoPointer[nold] = noff + other.IDivLoPointer[iObsIdx]; + IDivUpPointer[nold] = noff + other.IDivUpPointer[iObsIdx]; + } else { + say::error["CatBin"]<<"Table catenation not yet implemented for INormFlag = " << fastNLOTable::INormFlag << ". Aborted!" << endl; + exit(1); + } + } +} + +// +// functions previously included in fastNLOBase +// + +//______________________________________________________________________________ +std::istream* fastNLOTable::OpenFileRead() { + //! Open file-stream for reading table + // does file exist? + if (access(ffilename.c_str(), R_OK) != 0) { + logger.error["OpenFileRead"]<<"File does not exist! Was looking for: "<<ffilename<<". Exiting."<<endl; + exit(1); + } + + // check if filename ends with .gz +#ifdef HAVE_LIBZ + std::istream* strm = (istream*)(new zstr::ifstream(ffilename.c_str(),ios::in | std::ifstream::binary)); + if ( strm ) logger.info["OpenFileRead"]<<"Opened file "<<ffilename<<" successfully."<<endl; + return strm; +#else + const std::string ending = ".gz"; + if (ffilename.length() >= ending.length() && ffilename.compare(ffilename.length() - ending.length(), ending.length(), ending) == 0) { + logger.error["ReadHeader"]<<"Input file has a .gz file extension but zlib support is not enabled! Please unzip file first."<<endl; + exit(1); + } + std::istream* strm = (istream*)(new ifstream(ffilename.c_str(),ios::in | std::ifstream::binary)); + return strm; +#endif /* HAVE_LIBZ */ + +} + + +//______________________________________________________________________________ +void fastNLOTable::CloseFileRead(std::istream& strm) { + //! Close file-stream + // strm.close(); + delete &strm; +} + + +//______________________________________________________________________________ +std::ostream* fastNLOTable::OpenFileWrite(bool compress) { + //! open ostream for writing tables + //! do overwrite existing table + if (access(ffilename.c_str(), F_OK) == 0) { + logger.info["OpenFileWrite"]<<"Overwriting the already existing table file: " << ffilename << endl; + } +#ifdef HAVE_LIBZ + std::ostream* stream = compress ? + (ostream*)(new zstr::ofstream(ffilename)) : + (ostream*)(new std::ofstream(ffilename)); +#else + std::ostream* stream = (ostream*)(new std::ofstream(ffilename)); + if ( compress ) logger.info["OpenFileWrite"]<<"gz-compression requested, but compilation was performed without zlib."<<endl; +#endif /* HAVE_LIBZ */ + if (!stream->good()) { + logger.error["OpenFileWrite"]<<"Cannot open file '"<<ffilename<<"' for writing. Aborting."<<endl; + exit(2); + } + stream->precision(fPrecision); + return stream; +} + + +//______________________________________________________________________________ +void fastNLOTable::CloseFileWrite(std::ostream& table) { + //! close stream and delete object; + table << fastNLO::tablemagicno << sep; + table << fastNLO::tablemagicno << sep; + // table.close(); + delete &table; +} + + +//______________________________________________________________________________ +bool fastNLOTable::IsCompatibleHeader(const fastNLOTable& other) const { + if ( trunc(ITabVersionRead/10000) != trunc(other.GetITabVersionRead()/10000)) { + logger.error["IsCompatibleHeader"]<<"Differing major versions of table format: "<<ITabVersionRead<<" and "<<other.GetITabVersionRead()<<endl; + return false; + } else if ( ( trunc(ITabVersionRead/1000) <= 22 && trunc(other.GetITabVersionRead()/1000) >= 23 ) || + ( trunc(ITabVersionRead/1000) >= 23 && trunc(other.GetITabVersionRead()/1000) <= 22 ) ) { + logger.error["IsCompatibleHeader"]<<"Incompatible minor versions of table format: "<<ITabVersionRead<<" and "<<other.GetITabVersionRead()<<endl; + return false; + } else if ( ITabVersionRead != other.GetITabVersionRead() ) { + logger.warn["IsCompatibleHeader"]<<"Differing sub-versions of table format: "<<ITabVersionRead<<" and "<<other.GetITabVersionRead()<<endl; + logger.warn["IsCompatibleHeader"]<<"Please check your result carefully!"<<endl; + } + if (GetNdata() + other.GetNdata() > 1) { + logger.warn["IsCompatibleHeader"]<<"Two tables containing both experimental data are incompatible"<<endl; + return false; + } + if (ScenName!= other.GetScenName()) { + logger.warn["IsCompatibleHeader"]<<"Differing names of scenarios: "<<ScenName.c_str()<<" and "<<other.ScenName.c_str()<<endl; + // continue... + } + return true; +} + + +//______________________________________________________________________________ +bool fastNLOTable::IsCatenableHeader(const fastNLOTable& other) const { + if ( trunc(ITabVersionRead/10000) != trunc(other.GetITabVersionRead()/10000)) { + logger.error["IsCatenableHeader"]<<"Differing major versions of table format: "<<ITabVersionRead<<" and "<<other.GetITabVersionRead()<<endl; + return false; + } else if ( ( trunc(ITabVersionRead/1000) <= 22 && trunc(other.GetITabVersionRead()/1000) >= 23 ) || + ( trunc(ITabVersionRead/1000) >= 23 && trunc(other.GetITabVersionRead()/1000) <= 22 ) ) { + logger.error["IsCatenableHeader"]<<"Incatenable minor versions of table format: "<<ITabVersionRead<<" and "<<other.GetITabVersionRead()<<endl; + return false; + } else if ( ITabVersionRead != other.GetITabVersionRead() ) { + logger.warn["IsCatenableHeader"]<<"Differing sub-versions of table format: "<<ITabVersionRead<<" and "<<other.GetITabVersionRead()<<endl; + logger.warn["IsCatenableHeader"]<<"Please check your result carefully!"<<endl; + } + if (GetNcontrib() != other.GetNcontrib()) { + logger.warn["IsCatenableHeader"]<<"Differing number of contributions: "<<GetNcontrib()<<" and "<<other.GetNcontrib()<<endl; + return false; + } + if (GetNmult() != other.GetNmult()) { + logger.warn["IsCatenableHeader"]<<"Differing number of multiplicative contributions: "<<GetNmult()<<" and "<<other.GetNmult()<<endl; + return false; + } + if (GetNdata() != other.GetNdata()) { + logger.warn["IsCatenableHeader"]<<"Differing number of data contributions: "<<GetNdata()<<" and "<<other.GetNdata()<<endl; + return false; + } + return true; +} + +//______________________________________________________________________________ +void fastNLOTable::PrintHeader(int iprint) const { + if ( !(iprint < 0) ) { + cout << fastNLO::_DSEP20C << " fastNLO Table: Header " << fastNLO::_DSEP20 << endl; + } else { + cout << endl << fastNLO::_CSEP20C << " fastNLO Table: Header " << fastNLO::_CSEP20 << endl; + } + printf(" # Table version (ITabVersionRead) %d\n",ITabVersionRead); + printf(" # Scenario name (ScenName) %s\n",ScenName.data()); + printf(" # Theory contributions (Ncontrib) %d\n",GetNcontrib()); + printf(" # Data contribution 0/1 (Ndata) %d\n",GetNdata()); + if ( std::abs(iprint) > 0 ) { + cout << fastNLO::_SSEP20C << " Extended information (iprint > 0) " << fastNLO::_SSEP20 << endl; + printf(" # Separator (tablemagicno) %d\n",fastNLO::tablemagicno); + printf(" # Unused (Nmult) %d\n",GetNmult()); + } + cout << fastNLO::_CSEPSC << endl; +} + + +//______________________________________________________________________________ +void fastNLOTable::PrintWelcomeMessage() { + // say::SetGlobalVerbosity(say::toVerbosity()["WARNING"]); + char fnlo[100]; + sprintf(fnlo,"%c[%d;%dmfast%c[%d;%dmNLO\033[0m",27,0,31,27,0,34); + char subproject[100] = FNLO_SUBPROJECT; + char package_version[100] = FNLO_VERSION; + char gitrev[100] = FNLO_GITREV; + char authors[500] = FNLO_AUTHORS; + char webpage[500] = FNLO_WEBPAGE; + char authorsv14[200] = FNLO_AUTHORSv14; + char quotev14[200] = FNLO_QUOTEv14; + char authorsv2[200] = FNLO_AUTHORSv2; + char quotev2[200] = FNLO_QUOTEv2; + char years[100] = FNLO_YEARS; + + speaker &infosep = logger.infosep; + infosep << fastNLO::_CSEPSC << endl; + infosep << " #" << endl; + infosep << " # " << fnlo << "_" << subproject << endl; + infosep << " # Version " << package_version << "_" << gitrev << endl; + infosep << " #" << endl; + infosep << " # " << "C++ program and toolkit to read and create fastNLO v2 tables and" << endl; + infosep << " # " << "derive QCD cross sections using PDFs, e.g. from LHAPDF" << endl; + infosep << " #" << endl; + infosep << fastNLO::_SSEPSC << endl; + infosep << " #" << endl; + infosep << " # " << "Copyright © " << years << " " << fnlo << " Collaboration" << endl; + infosep << " # " << authors << endl; + infosep << " #" << endl; + infosep << " # " << "This program is free software: you can redistribute it and/or modify" << endl; + infosep << " # " << "it under the terms of the GNU General Public License as published by" << endl; + infosep << " # " << "the Free Software Foundation, either version 3 of the License, or" << endl; + infosep << " # " << "(at your option) any later version." << endl; + infosep << " #" << endl; + infosep << " # " << "This program is distributed in the hope that it will be useful," << endl; + infosep << " # " << "but WITHOUT ANY WARRANTY; without even the implied warranty of" << endl; + infosep << " # " << "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the" << endl; + infosep << " # " << "GNU General Public License for more details." << endl; + infosep << " #" << endl; + infosep << " # " << "You should have received a copy of the GNU General Public License" << endl; + infosep << " # " << "along with this program. If not, see <http://www.gnu.org/licenses/>." << endl; + infosep << " #" << endl; + infosep << fastNLO::_SSEPSC << endl; + infosep << " #" << endl; + infosep << " # " << "The projects web page can be found at:" << endl; + infosep << " # " << webpage << endl; + infosep << " #" << endl; + infosep << " # " << "If you use this code, please cite:" << endl; + infosep << " # " << authorsv14 << ", " << quotev14 << endl; + infosep << " # " << authorsv2 << ", " << quotev2 << endl; + infosep << " #" << endl; + infosep << fastNLO::_CSEPSC << endl; + fWelcomeOnce = true; +} diff --git a/v2.6/toolkit/fastnlotoolkit/fastNLOTools.cc b/v2.6/toolkit/fastnlotoolkit/fastNLOTools.cc new file mode 100644 index 0000000000000000000000000000000000000000..418b4488c4a46386c05b01be0111a9a2d746d252 --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/fastNLOTools.cc @@ -0,0 +1,660 @@ +#include <cfloat> +#include <cstdlib> +#include <fstream> +#include <iostream> +#include <cmath> +#include <sstream> +#include <string> +#include "fastnlotk/fastNLOReader.h" +#include "fastnlotk/fastNLOTools.h" + +using namespace std; +using namespace say; +using namespace fastNLO; + +namespace fastNLOTools { + + //________________________________________________________________________________________________________________ // + void PrintFastnloVersion() { + char fnlo[100]; + sprintf(fnlo,"%c[%d;%dmfast%c[%d;%dmNLO\033[0m",27,0,31,27,0,34); + char subproject[100] = FNLO_SUBPROJECT; + char package_version[100] = FNLO_VERSION; + char gitrev[100] = FNLO_GITREV; + cout << fnlo << "_" << subproject << " Version " << package_version << "_" << gitrev << endl; + return; + } + + //________________________________________________________________________________________________________________ // + bool CheckVersion(int version ){ + if ( fastNLO::CompatibleVersions.count(version) == 0 ) { + error["fastNLOTools::CheckVersion"]<<"This table version ("<<version<<") is incompatible with this fastNLO code."<<endl; + error["fastNLOTools::CheckVersion"]<<"Supported table versions are:"; + for ( auto i : fastNLO::CompatibleVersions ) error>>" "<<i; + error>>""<<endl; + error["fastNLOTools::CheckVersion"]<<"Exiting."<<endl; + exit(1); + return false; + } + return true; + } + + + //________________________________________________________________________________________________________________ // + int ReadVector(vector<double >& v, istream& table , double nevts ){ + //! Read values according to the size() of the given vector + //! from table (v2.0 format). + const bool ReadBinary = false; + if ( !ReadBinary ) { + for( unsigned int i=0 ; i<v.size() ; i++){ + table >> v[i]; + v[i] *= nevts; + if ( !isfinite(v[i]) ) { + error["ReadVector"]<<"Non-finite number read from table, aborted! value = " << v[i] << endl; + error["ReadVector"]<<"Please check the table content." << endl; + exit(1); + } + } + } + else { + table.get(); + float f; + for ( unsigned int k = 0; k < v.size(); ++k ) { + table.read(reinterpret_cast<char *>(&f), sizeof(f)); + v[k] = f*nevts; + } + } + return v.size(); + } + + //________________________________________________________________________________________________________________ // + int ReadUnused(istream& table ){ + //! Read values, which are not known to the current code. + int nLines = 0; + table >> nLines; + if ( nLines==fastNLO::tablemagicno ) { + error["ReadUnused"]<<"Number of lines identical to magic number. Exiting."<<endl; exit(3); + } + string sUnused; + if ( nLines > 0 ) std::getline(table,sUnused); // discard empty space due to precendent >> + for( int i=0 ; i<nLines ; i++) + std::getline(table,sUnused); + return nLines; + } + + + //________________________________________________________________________________________________________________ // + int ReadFlexibleVector(vector<double >& v, istream& table , int nProcLast , double nevts ){ + int nn = 0; + if ( nProcLast == 0 ) { + table >> nProcLast; + nn++; + } + v.resize(nProcLast); + for(unsigned int i0=0;i0<v.size();i0++){ + table >> v[i0]; + v[i0] *= nevts; + nn++; + if ( !isfinite(v[i0]) ) { + error["ReadFlexibleVector"]<<"Non-finite number read from table, aborted! value = " << v[i0] << endl; + error["ReadFlexibleVector"]<<"Please check the table content." << endl; + exit(1); + } + } + return nn; + } + + //________________________________________________________________________________________________________________ // + int ReadFlexibleVector(vector<unsigned long long >& v, istream& table , int nProcLast , double nevts ){ + int nn = 0; + if ( nProcLast == 0 ) { + table >> nProcLast; + nn++; + } + v.resize(nProcLast); + for(unsigned int i0=0;i0<v.size();i0++){ + char buffer[256]; + table >> buffer; + double value = atof(buffer); + v[i0] = value; + v[i0] *= nevts; + nn++; + } + return nn; + } + + + //________________________________________________________________________________________________________________ // + int ReadFlexibleVector(vector<std::string >& v, istream& table , int size , double nevts ){ + if ( size == 0 ) table >> size; + v.resize(size); + if ( size > 0 ) std::getline(table,v[0]); // discard empty space due to precendent >> + for( auto& i : v) { + std::getline(table,i); + } + return v.size() + 1; + } + + + //________________________________________________________________________________________________________________ // + int ReadFlexibleVector(vector<int >& v, istream& table , int size , double nevts ){ + if ( size == 0 ) table >> size; + v.resize(size); + for( auto& i : v) { + table >> i; + } + return v.size() + 1; + } + + + //________________________________________________________________________________________________________________ // + void ResizeVector( v7d& v, int dim0 , int dim1, int dim2, int dim3, int dim4, int dim5, int dim6 ){ + if ( dim0 > 0 ){ + v.resize(dim0); + for ( int i= 0 ; i<dim0 ; i++) + ResizeVector( v[i] , dim1, dim2, dim3, dim4, dim5, dim6 ); + } else { + error["fastNLOTools::ResizeVector"]<<"Cannot resize table, because dimension is <= zero (dim0="<<dim0<<"). Exiting"<<endl; + exit(1); + } + } + + + //________________________________________________________________________________________________________________ // + void ResizeVector( v6d& v, int dim0 , int dim1, int dim2, int dim3, int dim4, int dim5 ){ + if ( dim0 > 0 ){ + v.resize(dim0); + for ( int i= 0 ; i<dim0 ; i++) + ResizeVector( v[i] , dim1, dim2, dim3, dim4, dim5 ); + } else { + error["fastNLOTools::ResizeVector"]<<"Cannot resize table, because dimension is <= zero (dim0="<<dim0<<"). Exiting"<<endl; + exit(1); + } + } + + + + + //________________________________________________________________________________________________________________ // + void ResizeVector( v5d& v, int dim0 , int dim1, int dim2, int dim3, int dim4 ){ + if ( dim0 > 0 ){ + v.resize(dim0); + for ( int i= 0 ; i<dim0 ; i++) + ResizeVector( v[i] , dim1, dim2, dim3, dim4 ); + } else { + error["fastNLOTools::ResizeVector"]<<"Cannot resize table, because dimension is <= zero (dim0="<<dim0<<"). Exiting"<<endl; + exit(1); + } + } + + + //________________________________________________________________________________________________________________ // + void ResizeVector( v4d& v, int dim0 , int dim1, int dim2, int dim3 ){ + if ( dim0 > 0 ){ + v.resize(dim0); + for ( int i= 0 ; i<dim0 ; i++) + ResizeVector( v[i] , dim1, dim2, dim3 ); + } else { + error["fastNLOTools::ResizeVector"]<<"Cannot resize table, because dimension is <= zero (dim0="<<dim0<<"). Exiting"<<endl; + exit(1); + } + } + + + //________________________________________________________________________________________________________________ // + void ResizeVector( v3d& v, int dim0 , int dim1, int dim2 ){ + if ( dim0 > 0 ){ + v.resize(dim0); + for ( int i= 0 ; i<dim0 ; i++) + ResizeVector( v[i] , dim1, dim2 ); + } else { + error["fastNLOTools::ResizeVector"]<<"Cannot resize table, because dimension is <= zero (dim0="<<dim0<<"). Exiting"<<endl; + exit(1); + } + } + + + //________________________________________________________________________________________________________________ // + void ResizeVector( v2d& v, int dim0 , int dim1 ){ + if ( dim0 > 0 ){ + v.resize(dim0); + for ( int i= 0 ; i<dim0 ; i++) + ResizeVector( v[i] , dim1 ); + } else { + error["fastNLOTools::ResizeVector"]<<"Cannot resize table, because dimension is <= zero (dim0="<<dim0<<"). Exiting"<<endl; + exit(1); + } + } + + + //________________________________________________________________________________________________________________ // + void ResizeVector( v1d& v, int dim0 ){ + if ( dim0 > 0 ) + v.resize(dim0); + else{ + error["fastNLOTools::ResizeVector"]<<"Cannot resize table, because dimension is <= zero (dim0="<<dim0<<"). Exiting"<<endl; + exit(1); + } + } + + + + //______________________________________________________________________________ + void ResizeFlexibleVector(vector<double >& v, const vector<double >& nom) { + v.resize(nom.size()); + } + + + //______________________________________________________________________________ + int WriteVector( const vector<string >& v, ostream& table , double nevts ) { + if ( nevts != 0 ) { + error["fastNLOTools::WriteVector"]<<"Cannot scale a string table by nevts (nevts="<<nevts<<")."<<endl; + return -1000; + } + else return _Write1DVector(v,table); + } + //______________________________________________________________________________ + int WriteVector( const vector<double >& v, ostream& table , double nevts ) { + return _Write1DVectorByN(v,table,nevts); + } + //______________________________________________________________________________ + int WriteVector( const vector<int >& v, ostream& table , double nevts ) { + return _Write1DVectorByN(v,table,nevts); + } + //______________________________________________________________________________ + int WriteVector( const vector<unsigned long long >& v, ostream& table , double nevts ) { + return _Write1DVectorByN(v,table,nevts); + } + + + //______________________________________________________________________________ + void AddVectors( vector<double >& vSum, const vector<double >& vAdd, double w1, double w2 ) { + _DoAddVectors(vSum,vAdd,w1,w2); + } + //______________________________________________________________________________ + void AddVectors( vector<int >& vSum, const vector<int >& vAdd, double w1, double w2 ) { + _DoAddVectors(vSum,vAdd,w1,w2); + } + //______________________________________________________________________________ + void AddVectors( vector<unsigned long long >& vSum, const vector<unsigned long long >& vAdd, double w1, double w2 ) { + _DoAddVectors(vSum,vAdd,w1,w2); + } + + + //______________________________________________________________________________ + int WriteFlexibleVector(const vector<double >& v, ostream& table, int nProcLast, double nevts) { + //! Write 1-dimensional flexible table to disk + //! nevts: Divide all values by nevts + //! nProcLast: Specify, if the size of the vector should be written in the first line. + //! if nProcLast != 0, skip the first line + if ( nevts == 0 ) { + error["fastNLOTools::WriteFlexibleVector"]<<"Cannot divide by zero. nProcLast ="<<nProcLast<<endl; + return -1000; + } + if ( nProcLast == 0 ) + table << v.size() << sep; + if ( nProcLast != 0 && nProcLast != (int)v.size() ) + warn["fastNLOTools::WriteFlexibleVector(double)"] + <<"Dimension of this vector is not compatible with its size (i.e. nProclast ="<<nProcLast<<", v.size()="<<v.size()<<endl; + int n = _Write1DVectorByN(v,table,nevts); + return ( nProcLast == 0 ) ? n+1 : n; + } + + //______________________________________________________________________________ + int WriteFlexibleVector(const vector<string >& v, ostream& table, int nProcLast, double nevts) { + //! Write 1-dimensional flexible table to disk + //! nevts: ignoring nevts !! + //! nProcLast: Specify, if the size of the vector should be written in the first line. + //! if nProcLast != 0, skip the fist line + if ( nevts!= 1 ) warn["fastNLOTools::WriteFlexibleVector(string)"] + <<"String variable cannot be divided by integer number! Ignoring nevts="<<nevts<<endl; + if ( nProcLast == 0 ) + table << v.size() << sep; + if ( nProcLast != 0 && nProcLast != (int)v.size() ) + warn["fastNLOTools::WriteFlexibleVector(string)"] + <<"Dimension of this vector is not compatible with its size (i.e. nProclast ="<<nProcLast<<", v.size()="<<v.size()<<endl; + int n = _Write1DVector(v,table); + return ( nProcLast == 0 ) ? n+1 : n; + } + + //______________________________________________________________________________ + int WriteFlexibleVector(const vector<unsigned long long >& v, ostream& table, int nProcLast, double nevts) { + //! Write 1-dimensional flexible table to disk + //! nevts: ignoring nevts !! + //! nProcLast: Specify, if the size of the vector should be written in the first line. + //! if nProcLast != 0, skip the fist line + if ( nevts!= 1 ) warn["fastNLOTools::WriteFlexibleVector(unsigned long long)"] + <<"String variable cannot be divided by integer number! Ignoring nevts="<<nevts<<endl; + if ( nProcLast == 0 ) + table << v.size() << sep; + if ( nProcLast != 0 && nProcLast != (int)v.size() ) + warn["fastNLOTools::WriteFlexibleVector(string)"] + <<"Dimension of this vector is not compatible with its size (i.e. nProclast ="<<nProcLast<<", v.size()="<<v.size()<<endl; + int n = _Write1DVector(v,table); + return ( nProcLast == 0 ) ? n+1 : n; + } + + //______________________________________________________________________________ + int WriteFlexibleVector(const vector<int >& v, ostream& table, int nProcLast, double nevts) { + //! Write 1-dimensional flexible table to disk + //! nevts: ignoring nevts !! + //! nProcLast: Specify, if the size of the vector should be written in the first line. + //! if nProcLast != 0, skip the fist line + if ( nevts!= 1 ) warn["fastNLOTools::WriteFlexibleVector(int)"] + <<"Refusing dividing integer numbers by each other! Ignoring nevts="<<nevts<<endl; + if ( nProcLast == 0 ) + table << v.size() << sep; + if ( nProcLast != 0 && nProcLast != (int)v.size() ) + warn["fastNLOTools::WriteFlexibleVector(int)"] + <<"Dimension of this vector is not compatible with its size (i.e. nProclast ="<<nProcLast<<", v.size()="<<v.size()<<endl; + int n = _Write1DVector(v,table); + return ( nProcLast == 0 ) ? n+1 : n; + } + + //________________________________________________________________________________________________________________ // + void StripWhitespace(string& str) { + //! remove white spaces from string + for(string::iterator achar = str.end(); achar>str.begin();achar--) { + if (*achar==0x20 || *achar==0x00){ + str.erase(achar); + } else { + break; + } + } + } + + //________________________________________________________________________________________________________________ // + void PutBackMagicNo(istream& table){ + //! Put magic number back + for(int i=0;i<(int)(log10((double)tablemagicno)+1);i++){ + table.unget(); + } + table.unget(); + } + + //______________________________________________________________________________ + bool ReadMagicNo(istream& table) { + //! read and crosscheck magic number + if (table.eof()){ + error["ReadMagicNo"]<<"Cannot read from file. Exiting"<<endl; + exit(3); + } + string line; + std::getline(table,line); + if ( line=="" ) std::getline(table,line); // last one was '<<' + if( line != std::to_string(tablemagicno)){ + error["ReadMagicNo"]<<"Found '"<<line<<"' instead of "<<tablemagicno<<"."<<endl; + error["ReadMagicNo"]<<"Did not find magic number, aborting!"<<endl; + error["ReadMagicNo"]<<"Please check compatibility of tables and program version. Exiting."<<endl; + exit(2); + return false; + }; + return true; + } + + //______________________________________________________________________________ + std::vector <double> ReadContentFromFile(std::string filename, unsigned int icola, unsigned int icolb) { + std::string extension = ""; + std::ifstream infile; + std::string line; + std::vector <double> Content; + + //! Determine extension to differentiate for parsing + //! - fnlo-tk-statunc: 'log' file extension; column numbers not needed, rel. stat. uncertainty = col #4 + //! - NNLOJET dat file: 'dat' file extension; column numbers not needed, rel. stat. uncertainty = (col #5 / col #4) + //! - Generic txt file: 'txt' file extension; only icola --> rel. stat. uncertainty = col #icola + //! - icol a & b --> rel. stat. uncertainty = col #icolb / #icola + if ( filename.find_last_of(".") != std::string::npos ) { + extension = filename.substr(filename.find_last_of(".")+1); + } + if ( extension != "dat" && extension != "log" && extension != "txt" ) { + error["ReadContentFromFile"]<<"Unknown filename extension, aborted! filename = " << filename <<endl; + exit(34); + } else if ( extension == "txt" && icola == 0) { + error["ReadContentFromFile"]<<"'txt' file found, but column specification is missing, aborted! icola " << icola <<endl; + exit(35); + } else if ( extension == "txt" && (icola > 10 || icolb > 10) ) { + error["ReadContentFromFile"]<<"'txt' file found, but column specification is too large, aborted! icola, icolb = " << icola << ", " << icolb <<endl; + exit(35); + } else { + info["ReadContentFromFile"]<<"Reading additional uncertainty content from file: " << filename <<endl; + } + + infile.open(filename); + if (infile.is_open()) { + int iline = 0; + bool lline = false; + // Read line-by-line + while(std::getline(infile, line)) { + // Put line into stringstream and read word-by-word + std::istringstream iss(line); + std::string word, word1, word2; + iss >> word; + // For 'dat' extension assume NNLOJET dat file format: + // - Skip all lines starting with comment symbol '#' + // - Read cross section and absolute statistical uncertainty from 4th and 5th columns + if ( extension == "dat" ) { + if ( word.at(0) != '#' ) { + // Skip first three words of each line + iss >> word; + iss >> word; + double xs, dxs; + iss >> xs; + iss >> dxs; + if (icola != 0 && icolb == 0) { + Content.push_back(xs); + } else if ( fabs(xs) > DBL_MIN ) { + // Is negative, if NLO_only or NNLO_only x section at production was < 0; keep this as additional information. + Content.push_back(dxs/xs); + // Only allow positive numbers with maximum value of 1, i.e. = 100% uncertainty maximum + // Content.push_back(std::min(fabs(dxs/xs),1.0)); + } else { + Content.push_back(0.); + } + iline += 1; + } + } + // For 'log' extension assume fnlo-tk-stat v2.5 log file format: + // (New v2.5 separator lines starting with #- - - - - - -) + // - Start at first line with "#-" as 1st word and + // - stop again at next line starting with "#-" in 1st word + else if ( extension == "log" ) { + if ( word == "#-" ) { + lline = ! lline; + } else if ( lline ) { + // Skip second & third word of each uncertainty line (x section; lower uncertainty) + iss >> word; + iss >> word; + double dxsrel; + iss >> dxsrel; + Content.push_back(dxsrel); + iline += 1; + } + } + // For 'txt' extension either read column #icola or divide column #icolb / #icola; max col = 10 + else if ( extension == "txt" ) { + double a = 0; + double b = 0; + for ( unsigned int ic = 1; ic<11; ic++ ) { + if ( ic == icola ) a = std::stod(word); + if ( ic == icolb ) b = std::stod(word); + iss >> word; + } + if ( icolb == 0 ) { + Content.push_back(a); + } else { + if ( fabs(a) > DBL_MIN ) { + Content.push_back(b/a); + } else { + Content.push_back(0); + } + } + } else { + error["ReadContentFromFile"]<<"Unknown filename extension, aborted! filename = " << filename <<endl; + exit(34); + } + } + } else { + error["ReadContentFromFile"]<<"Cannot read from file, aborted! filename is: " << filename <<endl; + exit(33); + } + return Content; + } + + //______________________________________________________________________________ + //! string to enum conversion of central scale choice + fastNLO::EScaleFunctionalForm GetScaleEnum(const std::string s) { + static std::unordered_map<std::string,fastNLO::EScaleFunctionalForm> const STRtoEScaleFunctionalForm = { + {"kScale1" ,fastNLO::EScaleFunctionalForm::kScale1}, + {"kScale2" ,fastNLO::EScaleFunctionalForm::kScale2}, + {"kQuadraticSum" ,fastNLO::EScaleFunctionalForm::kQuadraticSum}, + {"kQuadraticMean" ,fastNLO::EScaleFunctionalForm::kQuadraticMean}, + {"kQuadraticSumOver4",fastNLO::EScaleFunctionalForm::kQuadraticSumOver4}, + {"kLinearMean" ,fastNLO::EScaleFunctionalForm::kLinearMean}, + {"kLinearSum" ,fastNLO::EScaleFunctionalForm::kLinearSum}, + {"kScaleMax" ,fastNLO::EScaleFunctionalForm::kScaleMax}, + {"kScaleMin" ,fastNLO::EScaleFunctionalForm::kScaleMin}, + {"kProd" ,fastNLO::EScaleFunctionalForm::kProd}, + {"kS2plusS1half" ,fastNLO::EScaleFunctionalForm::kS2plusS1half}, + {"kPow4Sum" ,fastNLO::EScaleFunctionalForm::kPow4Sum}, + {"kWgtAvg" ,fastNLO::EScaleFunctionalForm::kWgtAvg}, + {"kS2plusS1fourth" ,fastNLO::EScaleFunctionalForm::kS2plusS1fourth}, + {"kExpProd2" ,fastNLO::EScaleFunctionalForm::kExpProd2}, + {"kExtern" ,fastNLO::EScaleFunctionalForm::kExtern}, + {"kConst" ,fastNLO::EScaleFunctionalForm::kConst}, + // Additionally catch asymmetric mur, muf choices + {"scale12" ,fastNLO::EScaleFunctionalForm::kScale1}, + {"scale21" ,fastNLO::EScaleFunctionalForm::kScale2} + }; + auto it = STRtoEScaleFunctionalForm.find(s); + if (it != STRtoEScaleFunctionalForm.end()) { + return it->second; + } else { + error["GetScaleEnum"]<<"Unknown string for central scale choice, aborted! value = " << s << endl; + exit(1); + } + } + + //______________________________________________________________________________ + std::pair<fastNLO::v1d, fastNLO::v1d> GetTails(fastNLO::v1d& vector1, fastNLO::v1d& vector2) { + if (vector1.size() > vector2.size()) { + return std::make_pair(fastNLO::v1d(vector1.begin() + (vector1.size() - vector2.size()), vector1.end()), vector2); + } else if (vector1.size() < vector2.size()) { + return std::make_pair(vector1, fastNLO::v1d(vector2.begin() + (vector2.size() - vector1.size()), vector2.end())); + } else { + return std::make_pair(vector1, vector2); + } + } + + //______________________________________________________________________________ + bool SameTails(fastNLO::v1d vector1, fastNLO::v1d vector2, double rtol) { + std::tie(vector1, vector2) = GetTails(vector1, vector2); + for (unsigned int i = 0; i < vector1.size(); i++) { + if (abs(vector1[i] - vector2[i]) > abs(rtol * vector1[i])) { + debug["SameTails"] << "1D vector index is " << i << ". val1=" << vector1[i] + << " val2=" << vector2[i] << " rdiff=" + << abs((vector1[i]-vector2[i])/vector1[i]) << " rtol=" << rtol << endl; + return false; + } + } + return true; + } + + //______________________________________________________________________________ + bool SameTails(fastNLO::v2d vector1, fastNLO::v2d vector2, double rtol) { + if (vector1.size() != vector2.size()) { + debug["SameTails"] << "2D vectors have different sizes." << endl; + return false; + } + for (unsigned int i = 0; i < vector1.size(); i++) { + if (!SameTails(vector1[i], vector2[i], rtol)) { + debug["SameTails"] << "2D vector index is " << i << endl; + return false; + } + } + return true; + } + + //______________________________________________________________________________ + bool ExtendHead(fastNLO::v1d& vector1, const fastNLO::v1d& vector2) { + if (vector1.size() < vector2.size()) { + vector1.insert(vector1.begin(), vector2.begin(), vector2.begin() + (vector2.size() - vector1.size())); + return true; + } + return false; + } + + //______________________________________________________________________________ + template <typename T> void ExtendSigmaTildeX( + std::vector<T>& SigmaTildeX, unsigned int OldDimSize1, unsigned int NewDimSize1, + unsigned int OldDimSize2, unsigned int NewDimSize2, int NPDFDim, T InsertValue) { + if (NPDFDim == 0) { + for (unsigned int i = OldDimSize1; i < NewDimSize1; i++) { + SigmaTildeX.insert(SigmaTildeX.begin(), InsertValue); + } + } else if (NPDFDim == 1) { + for (unsigned int i = OldDimSize1; i < NewDimSize1; i++) { + for (unsigned int j = 0; j <= i; j++) { + SigmaTildeX.insert(SigmaTildeX.begin() + (j * (j + 1) / 2), InsertValue); + } + } + } else if (NPDFDim == 2) { + for (unsigned int i = 0; i < OldDimSize2; i++) { + for (unsigned int j = OldDimSize1; j < NewDimSize1; j++) { + SigmaTildeX.insert(SigmaTildeX.begin() + i * NewDimSize1, InsertValue); + } + } + for (unsigned int i = OldDimSize2; i < NewDimSize2; i++) { + for (unsigned int j = 0; j < NewDimSize1; j++) { + SigmaTildeX.insert(SigmaTildeX.begin(), InsertValue); + } + } + } else { + error["ExtendSigmaTildeX"] << "Unsupported NPDFDim for x node density: " << NPDFDim << endl; + exit(1); + } + } + template void ExtendSigmaTildeX<fastNLO::v1d>( + fastNLO::v2d&, unsigned int, unsigned int, unsigned int, unsigned int, int, fastNLO::v1d); + template void ExtendSigmaTildeX<fastNLO::v3d>( + fastNLO::v4d&, unsigned int, unsigned int, unsigned int, unsigned int, int, fastNLO::v3d); + + + //______________________________________________________________________________ + void PrintXSUncertainty(XsUncertainty XsUnc, string UncName, string HeadLine) { + // + // Print evaluated cross section and relative uncertainty stored in + // struct XsUncertainty of fastNLOReader.h + // + + if ( XsUnc.xs.size() ) { + cout << _CSEPSC << endl; + cout << " # fastNLOReader: Evaluating uncertainties" << endl; + cout << _CSEPSC << endl; + cout << _DSEPSC << endl; + cout << UncName << endl; + cout << _SSEPSC << endl; + cout << HeadLine << endl; + cout << _TSEPSC << endl; + for ( unsigned int iobs=0;iobs<XsUnc.xs.size();iobs++ ) { + printf("%5.i %#18.11E %#18.11E %#18.11E\n",iobs+1,XsUnc.xs[iobs],XsUnc.dxsl[iobs],XsUnc.dxsu[iobs]); + } + cout << _TSEPSC << endl; + } + } + + + //______________________________________________________________________________ + void PrintXSUncertaintyVec(std::vector< std::vector<double> > xsUncVec, string UncName, string HeadLine) { + // + // Print evaluated cross section and relative uncertainty stored in + // Tri-vector XsUncertaintyVec of fastNLOReader.h + // + XsUncertainty xsUnc; + xsUnc.xs = xsUncVec[0]; + xsUnc.dxsu = xsUncVec[1]; + xsUnc.dxsl = xsUncVec[2]; + PrintXSUncertainty(xsUnc, UncName, HeadLine); + } + +} // end namespace fastNLO diff --git a/v2.6/toolkit/fastnlotoolkit/fastNLOUserBlock.cc b/v2.6/toolkit/fastnlotoolkit/fastNLOUserBlock.cc new file mode 100644 index 0000000000000000000000000000000000000000..1fe362b4ad93a321adba2548a72f0d463adfc21b --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/fastNLOUserBlock.cc @@ -0,0 +1,76 @@ +#include <cstdlib> +#include <unistd.h> +#include <string> +#include <fstream> +#include <iostream> +#include <cmath> +#include "fastnlotk/fastNLOUserBlock.h" + +using namespace std; +using namespace fastNLO; + +//______________________________________________________________________________ +fastNLOUserBlock::fastNLOUserBlock() : PrimalScream("fastNLOUserBlock") { + +} + + +//______________________________________________________________________________ +fastNLOUserBlock::~fastNLOUserBlock(){ +} + + + +//______________________________________________________________________________ +void fastNLOUserBlock::Read(istream *table){ + //! Read user block from disk + *table >> fUserFlag; + int nLinesDescr; + *table >> nLinesDescr; + fDescr.resize(nLinesDescr); + for ( int i = 0 ; i<nLinesDescr ; i++ ) + *table >> fDescr[i]; + *table >> fNLines; + fContent.resize(fNLines); + for ( int i = 0 ; i<fNLines ; i++ ) + *table >> fContent[i]; +} + + + +//______________________________________________________________________________ +void fastNLOUserBlock::Write (ostream *table){ + //! Write UserBlock to disk + if ( fNlines != 3+fDescr.size()+fContent.size() ) { + error["Write"]<<"Number of lines in this user block is inconsistent with content."<<endl; + error<<"\tfNlines="<<fNlines<<",\tCalculated number of lines: "<<3+fDescr.size()+fContent.size()<<endl; + exit(1); + } + *table << fUserFlag << endl; + *table << fDescr.size() <<endl; + for ( unsigned int i = 0 ; i < fDescr.size() ; i++ ) + *table << fDescr[i] << endl; + *table << fNLines << endl; + *table << fContent.size() << endl; + for ( unsigned int i = 0 ; i< fContent.size(); i++ ) + *table << fContent[i] << endl; +} + + + +//______________________________________________________________________________ +void fastNLOUserBlock::Print() const { + printf("\n **************** FastNLO UserBlock ****************\n\n"); + printf(" UserFlag %d\n",fUserFlag); + printf(" No. of lines %d\n",fNLines); + printf("\n"); + printf(" Description:\n"); + for(unsigned int i=0;i<fDescr.size();i++) + printf(" %s:\n",fDescr[i].c_str()); + printf("\n"); + printf(" Content:\n"); + for(unsigned int i=0;i<fContent.size();i++) + printf(" %s:\n",fContent[i].c_str()); + printf("\n"); +} + diff --git a/v2.6/toolkit/fastnlotoolkit/include/Makefile.am b/v2.6/toolkit/fastnlotoolkit/include/Makefile.am new file mode 100644 index 0000000000000000000000000000000000000000..0fcd66ec72c4d5eaafa40ca054f09e33e63fca19 --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/include/Makefile.am @@ -0,0 +1,20 @@ +# -*- Automake -*- +# ----------------------------------------------------------------------------- +# +# K. Rabbertz, 06.10.2013 +# +# fastNLO_toolkit +# +# ----------------------------------------------------------------------------- +# Use GNU standards +AUTOMAKE_OPTIONS = gnu + +# Subdirectories +SUBDIRS = fastnlotk + +# Files that are required to build the project but that can be +# recreated IF the necessary autotools etc. are available by: +# "autoreconf -i; ./configure" +# Use "make maintainer-clean" (on a build machine) before svn commits, +# but not for distribution +MAINTAINERCLEANFILES = Makefile.in diff --git a/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/.gitignore b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..a048453f65be4bce2f79246c909c512cc051588e --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/.gitignore @@ -0,0 +1,2 @@ +# Ignore produced temporary files +fastNLOConstants.h diff --git a/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/Alphas.h b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/Alphas.h new file mode 100644 index 0000000000000000000000000000000000000000..997725a585b904a515535c5db40e8d5b08588114 --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/Alphas.h @@ -0,0 +1,68 @@ +#ifndef __ALPHAS_H +#define __ALPHAS_H + +class Alphas { + +public: + ~Alphas(); + + // initializations + static void SetMz(double Mz) { + fMz = Mz; + }; + static double GetMz() { + return fMz; + }; + static void SetAlphasMz(double alphas) { + fAlphasMz = alphas; + }; + static double GetAlphasMz() { + return fAlphasMz; + }; + static void SetNf(int nf) { + fNf = nf; + }; + static int GetNf() { + return fNf; + }; + static void SetNLoop(int nLoop) { + fnLoop = nLoop; + }; + static int GetNLoop() { + return fnLoop; + }; + static void SetFlavorMatchingOn(bool FlavorMatching) { + bFlavorMatching = FlavorMatching; + }; + static bool GetFlavorMatchingOn() { + return bFlavorMatching; + }; + static void SetFlavorMatchingThresholds(double th1, double th2, double th3, double th4, double th5, double th6); + static void GetFlavorMatchingThresholds(double& th1, double& th2, double& th3, double& th4, double& th5, double& th6); + + // Getters for Alphas at scale mu + static double CalcAlphasMu(double mu, double alphasMz = 0, int nLoop = 0, int nFlavors = 0); + static double CalcAlphasMuFixedNf(double mu, int nf) { // calculate alpha_s as scale mu for fixed number of flavors nf. Ignore flavor matching thresholds. + return CalcAlphasMu(mu, fAlphasMz, fnLoop, nf); + }; + + static int CalcNf(double mu); + static void PrintInfo(); + +private: + static Alphas* instance; + Alphas(); + + static double FBeta(double alphasMz , int nLoop , int nf); + +public: + static double fMz; // mass of Z0, which is the nominal scale here + static double fAlphasMz; // alpha_s at starting scale of Mz + static int fNf; // MAXIMUM number of active flavours. e.g. at low scales mu, number of flavors is calculated with respecting flavor thresholds if FlavorMatching is ON. + static int fnLoop; // n-loop solution of the RGE + static bool bFlavorMatching; // switch flaovr matching on or off + static double fTh[6]; // flavor thresholds (quark masses) + +}; + +#endif // __ALPHAS_H diff --git a/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/CRunDec.h b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/CRunDec.h new file mode 100644 index 0000000000000000000000000000000000000000..67ada173e1d675dcef12a718ea3bbc0f4ff0aa23 --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/CRunDec.h @@ -0,0 +1,1024 @@ +/* + CRunDec.h + + Header file for CRunDec.cpp + + Author: Barbara Schmidt (Jan 2012) + Florian Herren and Matthias Steinhauser (Jan 2016) +*/ + +/* + Minor update: (Sep 2016) + Remove "static" from definition and initialization of constants for Runge-Kutta procedure. + The C++11 standard supports the new version, so a C++11 compliant compiler and maybe + the switch "-std=c++11" should be used. +*/ + +// K. Rabbertz, 24.01.2019: +// Version for use within fastNLOReader +// - Removed trailing whitespaces +// - Changed Runge-Kutta constants from "const double" to "static constexpr double" + +/* +License: + +CRunDec is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see <http://www.gnu.org/licenses/>. +*/ + + +#ifndef CRUNDEC_H_ +#define CRUNDEC_H_ + +#include <utility> + +// Default return statement: +#define RETURN return(0); +// The following might be useful for Windows: +//#define RETURN system("PAUSE"); exit(1); + + +// Numerical values for input parameters: +static struct RunDec_values { + double asMz = 0.1181; + double asMtau = 0.332; + double Mz = 91.1876; + double Mh = 125.09; + double muc = 1.279; + double mc3 = 0.986; + double mub = 4.163; + double Mtau = 1.77686; + double Mc = 1.5; + double Mb = 4.8; + double Mt = 173.21; +} NumDef; + + + + +// Struct for triple {nf, Mth, Muth}: + +//! Structure containing: the number of light flavours (nf), the mass of the heavy quark (Mth) and the decoupling scale (muth) +/*! + This structure is used to pass information on decoupling thresholds to AlH2AlL, AlL2AlH, mH2mL and mL2mH. +*/ +struct TriplenfMmu{ + int nf; + double Mth; + double muth; +}; + + +//! Structure containing: \f$\alpha_s^{(n_f)}\f$ (Asexact) and \f$m_{MS}^{(n_f)}\f$ (mMSexact) +/*! + This structure is used to return the results of AsmMsexact. +*/ +struct AsmMS{ + double Asexact; + double mMSexact; +}; + +// class declaration of CRunDec: + +//! Main class, contains all functions +/*! + All RunDec functions are accessed via this class. + For many of the functions versions with and without the parameters nl/nf exist. + The ones with the parameters nl/nf call the ones without after calling SetNf(nl)/SetNf(nf). It is + recommended not to use the ones without nl/nf since some of them change the values of nl/nf during their execution. + + Detailed descriptions are only provided for the the functions + with parameters nl/nf. +*/ +class CRunDec +{ +private: + // KR Adapt to fastnlo environment + // - Changed Runge-Kutta constants from "const double" to "static constexpr double" + // Aux. constants for implicit Runge-Kutta-Procedure: + static constexpr double a2=0.2, a3=0.3, a4=0.6, a5=1., a6=0.875; + + static constexpr double b21=0.2, b31=3./40., b32=9./40., b41=0.3, b42=-0.9, + b43=6./5.; + static constexpr double b51=-11./54., b52=2.5, b53=-70./27., b54=35./27.; + static constexpr double b61=1631./55296., b62=175./512., b63=575./13824.; + static constexpr double b64=44275./110592., b65=253./4096.; + + static constexpr double c1=37./378., c2=0., c3=250./621., c4=125./594., c5=0.; + static constexpr double c6= 512./1771.; + + static constexpr double dc1=37./378.-2825./27648., dc2=0.-0., + dc3=250./621.-18575./48384.; + static constexpr double dc4=125./594.-13525./55296., dc5=0.-277./14336., + dc6=512./1771.-0.25; + + // Coefficients for diff. equations: + double Beta[5], B[5], Betap[5], Bp[5], Gamma[5], C[5], Nf; + + // Define constants (if not already done with constructor): + void SetConstants(int n); + + // R.h.s. of diff. equations: + friend double fSetdydx(CRunDec S, double A, int nl); + + friend double fSetdydxa1(CRunDec S, double x, double A); + friend double fSetdydxM1(CRunDec S, double A, double M); + + friend double fSetdydxa2(CRunDec S, double x, double A); + friend double fSetdydxM2(CRunDec S, double A, double M); + + friend double fSetdydxa3(CRunDec S, double x, double A); + friend double fSetdydxM3(CRunDec S, double A, double M); + + friend double fSetdydxa4(CRunDec S, double x, double A); + friend double fSetdydxM4(CRunDec S, double A, double M); + + friend double fSetdydxa5(CRunDec S, double x, double A); + friend double fSetdydxM5(CRunDec S, double A, double M); + + // Additional aux. functions: + int Abbruch(void); + double fSetAsL(double Lambda, double Mu, int nl, double AlphaS); + double fSetcx(double x, int nl); + double fOsFromMs1(double mu, double M); + double fOsFromMs2(double mu, double M, double nl); + double fOsFromMs3(double mu, double M, double nl); + double fOsFromMs4(double mu, double M, double nl, double err); + double fMsFromOs1(double mu, double M); + double fMsFromOs2(double mu, double M, double nl); + double fMsFromOs3(double mu, double M, double nl); + double fMsFromOs4(double mu, double M, double nl, double err); + double fZmM(double n); + double fZmInvM(double n); + double deltamOS2mMS(double mOS, std::pair<double,double>* mq, + double asmu, double mu, int nlq, int nloops); + double deltamMS2mOS(double mMS, std::pair<double,double>* mq, + double asmu, double mu, int nlq, int nloops); + double fMsFromRi1(void); + double fMsFromRi2(void); + double fMsFromRi3(void); + double fMumFromOs1(void); + double fMumFromOs2(void); + double fMumFromOs3(void); + double fMumFromOs4(double err); + double fRiFromMs(double alpha, double nl); + double fMsFromRi(double alpha, double nl); + double fHelpmOS2mMSit(double mMS,double mOS, std::pair<double,double>* mq, + double asmu, double mu, int nl); + double fas5to6os(double alpha, double mass, double mu, double nlq, double nl); + double fas6to5os(double alpha, double mass, double mu, double nlq, double nl); + double fas5to6ms(double alpha, double mass, double mu, double nlq, double nl); + double fas6to5ms(double alpha, double mass, double mu, double nlq, double nl); + double fas6to5si(double alpha, double mass, double mu, double nlq, double nl); + double fas5to6si(double alpha, double mass, double mu, double nlq, double nl); + double fmq5to6os(double A, double mass, double mu, double nlq, double nl); + double fmq6to5os(double A, double mass, double mu, double nlq, double nl); + double fmq5to6ms(double A, double mass, double mu, double nlq, double nl); + double fmq6to5ms(double A, double mass, double mu, double nlq, double nl); + double fmq5to6si(double A, double mass, double mu, double nlq, double nl); + double fmq6to5si(double A, double mass, double mu, double nlq, double nl); + + double PSdelta(double asmu, double muf, double mu, int nl, int nloops); + double E1p(double mOS, double asmu, double mu, int nl, int nloops); + double exOS2RS(double api, double mmu, double nnuf, int nnl, int nloops); + double exOS2RSp(double api, double mmu, double nnuf, int nnl, int nloops); + double mMS2mOSmod(double mMS, std::pair<double,double>* mq, + double asmu, double mu, int nf, int nloops, double err); + + double fRungeKuttaImpl(double &x, double y, double &htry, int nl, + double (*f)(CRunDec, double, int)); + double fRKSchritt(double x, double y, double h, double &yerr, + double (*f)(CRunDec, double, double)); + double PolyLog(unsigned int n, double x); + + +public: + // constructor: + CRunDec(); + CRunDec(int); + + // Arrays and structs to store data: + std::pair<double,double> mq[4]; + TriplenfMmu nfMmu[4]; + AsmMS AM; + + + //! GetNf returns the number of light flavours currently in use + /*! + \return \f$n_f\f$ + */ + int GetNf(); + + //! SetNf sets the number of light flavours + /*! + \param nf \f$n_f\f$ + */ + void SetNf(int nf); + + // Functions for the running of alpha_s and m_q: + + //! LamExpl calculates \f$\Lambda^{(n_f)}\f$ from \f$\alpha_s^{(n_f)}\f$ explicitly solving for \f$\Lambda^{(n_f)}\f$ + /*! + \param asmu \f$\alpha_s^{(n_f)}(\mu)\f$ + \param mu \f$\mu\f$ + \param nf \f$n_f\f$ + \param nloops number of loops + \return \f$\Lambda^{(n_f)}\f$ + */ + double LamExpl(double asmu, double mu, int nf, int nloops); + + //! LamImpl calculates \f$\Lambda^{(n_f)}\f$ from \f$\alpha_s^{(n_f)}\f$ implicitly solving for \f$\Lambda^{(n_f)}\f$ + /*! + \param asmu \f$\alpha_s^{(n_f)}(\mu)\f$ + \param mu \f$\mu\f$ + \param nf \f$n_f\f$ + \param nloops number of loops + \return \f$\Lambda^{(n_f)}\f$ + */ + double LamImpl(double asmu, double mu,int nf,int nloops); + + //! AlphasLam calculates \f$\alpha_s^{(n_f)}\f$ from \f$\Lambda^{(n_f)}\f$ + /*! + \param Lambda \f$\Lambda^{(n_f)}\f$ + \param mu \f$\mu\f$ + \param nf \f$n_f\f$ + \param nloops number of loops + \return \f$\alpha_s^{(n_f)}(\mu)\f$ + */ + double AlphasLam(double Lambda, double mu,int nf, int nloops); + + //! AlphasExact calculates \f$\alpha_s^{(n_f)}(\mu_1)\f$ from \f$\alpha_s^{(n_f)}(\mu_0)\f$ + /*! + \param asmu0 \f$\alpha_s^{(n_f)}(\mu_0)\f$ + \param mu0 \f$\mu_0\f$ + \param mu1 \f$\mu_1\f$ + \param nf \f$n_f\f$ + \param nloops number of loops + \return \f$\alpha_s^{(n_f)}(\mu_1)\f$ + */ + double AlphasExact(double asmu0, double mu0, double mu1, int nf,int nloops); + + //! mMS2mMS calculates \f$m_{MS}^{(n_f}(\mu_1)\f$ from \f$m_{MS}^{(n_f)}(\mu_0)\f$ + /*! + \param mu0 \f$m_{MS}^{(n_f)}(\mu_0)\f$ + \param asmu0 \f$\alpha_s^{(n_f)}(\mu_0)\f$ + \param asmu1 \f$\alpha_s^{(n_f)}(\mu_1)\f$ + \param nf \f$n_f\f$ + \param nloops number of loops + \return \f$m_{MS}^{(n_f)}(\mu_1)\f$ + */ + double mMS2mMS(double mu0, double asmu1, double asmu0,int nf, int nloops); + + //! AsmMSrunexact solves simultaneously the differential equations for \f$\alpha_s^{(n_f)}\f$ and \f$m_{MS}^{(n_f)}\f$ + + //! Returns a structure of type AsmMS. + /*! + \param mmu \f$m_{MS}^{(n_f)}(\mu_0)\f$ + \param asmu0 \f$\alpha_s^{(n_f)}(\mu_0)\f$ + \param mu0 \f$\mu_0\f$ + \param mu1 \f$\mu_1\f$ + \param nf \f$n_f\f$ + \param nloops number of loops + \return \f$(\alpha_s^{(n_f)}(\mu_1),m_{MS}^{(n_f)}(\mu_1))\f$ + */ + AsmMS AsmMSrunexact(double mmu, double asmu0, double mu0, double mu1, + int nf, int nloops); + + // Decoupling relations: + //! DecLambdaUp calculates \f$\Lambda^{(n_l+1)}\f$ from \f$\Lambda^{(n_l)}\f$ + /*! + \param lam \f$\Lambda^{(n_l)}\f$ + \param massth quark mass at which the matching is performed (\f$m_{MS}^{(n_l+1)}(m_{MS})\f$) + \param nl \f$n_l\f$ + \param nloops number of loops + \return \f$\Lambda^{(n_l+1)}\f$ + */ + double DecLambdaUp(double lam, double massth, int nl, int nloops); + + //! DecLambdaDown calculates \f$\Lambda^{(n_l)}\f$ from \f$\Lambda^{(n_l+1)}\f$ + /*! + \param lam \f$\Lambda^{(n_l+1)}\f$ + \param massth quark mass at which the matching is performed (\f$m_{MS}^{(n_l+1)}(m_{MS})\f$) + \param nl \f$n_l\f$ + \param nloops number of loops + \return \f$\Lambda^{(n_l)}\f$ + */ + double DecLambdaDown(double lam, double massth, int nl, int nloops); + + + //! DecAsDownOS calculates \f$\alpha_s^{(n_l)}\f$ from \f$\alpha_s^{(n_l+1)}\f$ + /*! + \param asmu \f$\alpha_s^{(n_l+1)}(\mu)\f$ + \param massth mass of the heavy quark (\f$M_{OS}\f$) + \param muth scale \f$\mu\f$ at which the matching is performed + \param nl \f$n_l\f$ + \param nloops number of loops + \return \f$\alpha_s^{(n_l)}(\mu)\f$ + */ + double DecAsDownOS(double asmu, double massth, double muth, int nl, int nloops); + + //! DecAsUpOS calculates \f$\alpha_s^{(n_l+1)}\f$ from \f$\alpha_s^{(n_l)}\f$ + /*! + \param asmu \f$\alpha_s^{(n_l)}(\mu)\f$ + \param massth mass of the heavy quark (\f$M_{OS}\f$) + \param muth scale \f$\mu\f$ at which the matching is performed + \param nl \f$n_l\f$ + \param nloops number of loops + \return \f$\alpha_s^{(n_l+1)}(\mu)\f$ + */ + double DecAsUpOS(double asmu, double massth, double muth, int nl, int nloops); + + //! DecAsDownMS calculates \f$\alpha_s^{(n_l)}\f$ from \f$\alpha_s^{(n_l+1)}\f$ + /*! + \param asmu \f$\alpha_s^{(n_l+1)}(\mu)\f$ + \param massth mass of the heavy quark (\f$m_{MS}^{(n_l+1)}(\mu)\f$) + \param muth scale \f$\mu\f$ at which the matching is performed + \param nl \f$n_l\f$ + \param nloops number of loops + \return \f$\alpha_s^{(n_l)}(\mu)\f$ + */ + double DecAsDownMS(double asmu, double massth, double muth, int nl, int nloops); + + //! DecAsUpMS calculates \f$\alpha_s^{(n_l+1)}\f$ from \f$\alpha_s^{(n_l)}\f$ + /*! + \param asmu \f$\alpha_s^{(n_l)}(\mu)\f$ + \param massth mass of the heavy quark (\f$m_{MS}^{(n_l+1)}(\mu)\f$) + \param muth scale \f$\mu\f$ at which the matching is performed + \param nl \f$n_l\f$ + \param nloops number of loops + \return \f$\alpha_s^{(n_l+1)}(\mu)\f$ + */ + double DecAsUpMS(double asmu, double massth, double muth, int nl, int nloops); + + //! DecAsDownSI calculates \f$\alpha_s^{(n_l)}\f$ from \f$\alpha_s^{(n_l+1)}\f$ + /*! + \param asmu \f$\alpha_s^{(n_l+1)}(\mu)\f$ + \param massth mass of the heavy quark (\f$m_{MS}^{(n_l+1)}(m_{MS})\f$) + \param muth scale \f$\mu\f$ at which the matching is performed + \param nl \f$n_l\f$ + \param nloops number of loops + \return \f$\alpha_s^{(n_l)}(\mu)\f$ + */ + double DecAsDownSI(double asmu, double massth, double muth, int nl, int nloops); + + //! DecAsUpSI calculates \f$\alpha_s^{(n_l+1)}\f$ from \f$\alpha_s^{(n_l)}\f$ + /*! + \param asmu \f$\alpha_s^{(n_l)}(\mu)\f$ + \param massth mass of the heavy quark (\f$m_{MS}^{(n_l+1)}(m_{MS})\f$) + \param muth scale \f$\mu\f$ at which the matching is performed + \param nl \f$n_l\f$ + \param nloops number of loops + \return \f$\alpha_s^{(n_l+1)}(\mu)\f$ + */ + double DecAsUpSI(double asmu, double massth, double muth, int nl, int nloops); + + //! DecMqUpOS calculates \f$m_{MS}^{(n_l+1)}(\mu)\f$ from \f$m_{MS}^{(n_l)}(\mu)\f$ + /*! + \param mq \f$m_{MS}^{(n_l)}(\mu)\f$ + \param asmu \f$\alpha_s^{(n_l)}(\mu)\f$ + \param massth mass of the heavy quark (\f$M_{OS}\f$) + \param muth scale \f$\mu\f$ at which the matching is performed + \param nl \f$n_l\f$ + \param nloops number of loops + \return \f$m_{MS}^{(n_l+1)}(\mu)\f$ + */ + double DecMqUpOS(double mq, double asmu, double massth, double muth, int nl, + int nloops); + + //! DecMqDownOS calculates \f$m_{MS}^{(n_l)}(\mu)\f$ from \f$m_{MS}^{(n_l+1)}(\mu)\f$ + /*! + \param mq \f$m_{MS}^{(n_l+1)}(\mu)\f$ + \param asmu \f$\alpha_s^{(n_l+1)}(\mu)\f$ + \param massth mass of the heavy quark (\f$M_{OS}\f$) + \param muth scale \f$\mu\f$ at which the matching is performed + \param nl \f$n_l\f$ + \param nloops number of loops + \return \f$m_{MS}^{(n_l)}(\mu)\f$ + */ + double DecMqDownOS(double mq, double asmu, double massth, double muth, int nl, + int nloops); + + //! DecMqUpMS calculates \f$m_{MS}^{(n_l+1)}(\mu)\f$ from \f$m_{MS}^{(n_l)}(\mu)\f$ + /*! + \param mq \f$m_{MS}^{(n_l)}(\mu)\f$ + \param asmu \f$\alpha_s^{(n_l)}(\mu)\f$ + \param massth mass of the heavy quark (\f$m_{MS}^{(n_l+1)}(\mu)\f$) + \param muth scale \f$\mu\f$ at which the matching is performed + \param nl \f$n_l\f$ + \param nloops number of loops + \return \f$m_{MS}^{(n_l+1)}(\mu)\f$ + */ + double DecMqUpMS(double mq, double asmu, double massth, double muth, int nl, + int nloops); + + //! DecMqDownMS calculates \f$m_{MS}^{(n_l)}(\mu)\f$ from \f$m_{MS}^{(n_l+1)}(\mu)\f$ + /*! + \param mq \f$m_{MS}^{(n_l+1)}(\mu)\f$ + \param asmu \f$\alpha_s^{(n_l+1)}(\mu)\f$ + \param massth mass of the heavy quark (\f$m_{MS}^{(n_l+1)}(\mu)\f$) + \param muth scale \f$\mu\f$ at which the matching is performed + \param nl \f$n_l\f$ + \param nloops number of loops + \return \f$m_{MS}^{(n_l)}(\mu)\f$ + */ + double DecMqDownMS(double mq, double asmu, double massth, double muth, int nl, + int nloops); + + //! DecMqUpSI calculates \f$m_{MS}^{(n_l+1)}(\mu)\f$ from \f$m_{MS}^{(n_l)}(\mu)\f$ + /*! + \param mq \f$m_{MS}^{(n_l)}(\mu)\f$ + \param asmu \f$\alpha_s^{(n_l)}(\mu)\f$ + \param massth mass of the heavy quark (\f$m_{MS}^{(n_l+1)}(m_{MS})\f$) + \param muth scale \f$\mu\f$ at which the matching is performed + \param nl \f$n_l\f$ + \param nloops number of loops + \return \f$m_{MS}^{(n_l+1)}(\mu)\f$ + */ + double DecMqUpSI(double mq, double asmu, double massth, double muth, int nl, + int nloops); + + //! DecMqDownSI calculates \f$m_{MS}^{(n_l)}(\mu)\f$ from \f$m_{MS}^{(n_l+1)}(\mu)\f$ + /*! + \param mq \f$m_{MS}^{(n_l+1)}(\mu)\f$ + \param asmu \f$\alpha_s^{(n_l+1)}(\mu)\f$ + \param massth mass of the heavy quark (\f$m_{MS}^{(n_l+1)}(m_{MS})\f$) + \param muth scale \f$\mu\f$ at which the matching is performed + \param nl \f$n_l\f$ + \param nloops number of loops + \return \f$m_{MS}^{(n_l)}(\mu)\f$ + */ + double DecMqDownSI(double mq, double asmu, double massth, double muth, int nl, + int nloops); + + // Running and decoupling: + + //! AlL2AlH calculates \f$\alpha_s(\mu_2)\f$ from \f$\alpha_s(\mu_1)\f$ decoupling at intermediate scales, running from low to high + /*! + \param asl \f$\alpha_s(\mu_1)\f$ + \param mu1 \f$\mu_1\f$ + \param decpar arrays of triples indicating the number of flavours, the OS-mass and the scale at which decoupling is performed + \param mu2 \f$\mu_2\f$ + \param nloops number of loops + \return \f$\alpha_s(\mu_2)\f$ + */ + double AlL2AlH(double asl, double mu1, TriplenfMmu decpar[], double mu2, int nloops); + + //! AlH2AlL calculates \f$\alpha_s(\mu_2)\f$ from \f$\alpha_s(\mu_1)\f$ decoupling at intermediate scales, running from high to low + /*! + \param ash \f$\alpha_s(\mu_1)\f$ + \param mu1 \f$\mu_1\f$ + \param decpar arrays of triples indicating the number of flavours, the OS-mass and the scale at which decoupling is performed + \param mu2 \f$\mu_2\f$ + \param nloops number of loops + \return \f$\alpha_s(\mu_2)\f$ + */ + double AlH2AlL(double ash, double mu1, TriplenfMmu decpar[], double mu2, int nloops); + + //! mL2mH calculates \f$m_{MS}(\mu_2)\f$ from \f$m_{MS}(\mu_1)\f$ decoupling at intermediate scales, running from low to high + /*! + \param mql \f$m_{MS}(\mu_1)\f$ + \param asl \f$\alpha_s(\mu_1)\f$ + \param mu1 \f$\mu_1\f$ + \param decpar arrays of triples indicating the number of flavours, the OS-mass and the scale at which decoupling is performed + \param mu2 \f$\mu_2\f$ + \param nloops number of loops + \return \f$m_{MS}(\mu_2)\f$ + */ + double mL2mH(double mql, double asl, double mu1, TriplenfMmu decpar[], double mu2, + int nloops); + + //! mH2mL calculates \f$m_{MS}(\mu_2)\f$ from \f$m_{MS}(\mu_1)\f$ decoupling at intermediate scales, running from high to low + /*! + \param mqh \f$m_{MS}(\mu_1)\f$ + \param ash \f$\alpha_s(\mu_1)\f$ + \param mu1 \f$\mu_1\f$ + \param decpar arrays of triples indicating the number of flavours, the OS-mass and the scale at which decoupling is performed + \param mu2 \f$\mu_2\f$ + \param nloops number of loops + \return \f$m_{MS}(\mu_2)\f$ + */ + double mH2mL(double mqh, double ash, double mu1, TriplenfMmu decpar[], double mu2, + int nloops); + + // Mass relations + + //! mMS2mOS calculates \f$M_{OS}\f$ from \f$m_{MS}^{(n_f)}(\mu)\f$ + /*! + \param mMS \f$m_{MS}^{(n_f)}(\mu)\f$ + \param mq pointer to pairs of light quark masses + \param asmu \f$\alpha_s^{(n_f)}(\mu)\f$ + \param mu \f$\mu\f$ + \param nf \f$n_f\f$ + \param nloops number of loops + \param fdelm factor multiplying the non-logarithmic part of the 4-loop term + \return \f$M_{OS}\f$ + */ + + double mMS2mOS(double mMS, std::pair<double,double>* mq, + double asmu, double mu,int nf, int nloops, double fdelm=1.0); + + //! mOS2mMS calculates \f$m_{MS}^{(n_f)}(\mu)\f$ from \f$M_{OS}\f$ + /*! + \param mOS \f$M_{OS}\f$ + \param mq pointer to pairs of light quark masses + \param asmu \f$\alpha_s^{(n_f)}(\mu)\f$ + \param mu \f$\mu\f$ + \param nf \f$n_f\f$ + \param nloops number of loops + \param fdelm factor multiplying the non-logarithmic part of the 4-loop term + \return \f$m_{MS}^{(n_f)}(\mu)\f$ + */ + double mOS2mMS(double mOS, std::pair<double,double>* mq, + double asmu, double mu,int nf, int nloops, double fdelm=1.0); + + //! mMS2mSI calculates \f$m_{MS}^{(n_f)}(m_{MS})\f$ from \f$m_{MS}^{(n_f)}(\mu)\f$ + /*! + \param mMS \f$m_{MS}^{(n_f)}(\mu)\f$ + \param asmu \f$\alpha_s^{(n_f)}(\mu)\f$ + \param mu \f$\mu\f$ + \param nf \f$n_f\f$ + \param nloops number of loops + \return \f$m_{MS}^{(n_f)}(m_{MS})\f$ + */ + double mMS2mSI(double mMS, double asmu, double mu, int nf, int nloops); + + //! mRI2mMS calculates \f$m_{MS}^{(n_f)}(\mu)\f$ from \f$m^{RI}(\mu)\f$ + /*! + \param mRI \f$m^{RI}(\mu)\f$ + \param asmu \f$\alpha_s^{(n_f)}(\mu)\f$ + \param nf \f$n_f\f$ + \param nloops number of loops + \return \f$m_{MS}^{(n_f)}(\mu)\f$ + */ + double mRI2mMS(double mRI, double asmu, int nf, int nloops); + + //! mMS2mRGI calculates \f$m^{RGI}\f$ from \f$m_{MS}^{(n_f)}(\mu)\f$ + + //! for the difference between mMS2mRGImod and mMS2mRGI see arXiv:1201:6149 + /*! + \param mMS \f$m_{MS}^{(n_f)}(\mu)\f$ + \param asmu \f$\alpha_s^{(n_f)}(\mu)\f$ + \param nf \f$n_f\f$ + \param nloops number of loops + \return \f$m^{RGI}\f$ + */ + double mMS2mRGI(double mMS, double asmu, int nf, int nloops); + + //! mRGI2mMS calculates \f$m_{MS}^{(n_f)}(\mu)\f$ from \f$m^{RGI}\f$ + /*! + \param mRGI \f$m^{RGI}\f$ + \param asmu \f$\alpha_s^{(n_f)}(\mu)\f$ + \param nf \f$n_f\f$ + \param nloops number of loops + \return \f$m_{MS}^{(n_f)}(\mu)\f$ + */ + double mRGI2mMS(double mRGI, double asmu, int nf, int nloops); + + //! mOS2mSI calculates \f$m_{MS}^{(n_f)}(m_{MS})\f$ from \f$M_{OS}\f$ + /*! + \param mOS \f$M_{OS}\f$ + \param mq pointer to pairs of light quark masses + \param asM \f$\alpha_s^{(n_f)}(M_{OS})\f$ + \param nf \f$n_f\f$ + \param nloops number of loops + \param fdelm factor multiplying the non-logarithmic part of the 4-loop term + \return \f$m_{MS}^{(n_f)}(m_{MS})\f$ + */ + double mOS2mSI(double mOS, std::pair<double,double>* mq, + double asM, int nf, int nloops, double fdelm=1.0); + + //! mOS2mMSrun calculates \f$m_{MS}^{(n_f)}(\mu)\f$ from \f$M_{OS}\f$ + + //! Calculates \f$m_{MS}^{(n_f)}(m_{MS})\f$ in an intermediate step + /*! + \param mOS \f$M_{OS}\f$ + \param mq pointer to pairs of light quark masses + \param asmu \f$\alpha_s^{(n_f)}(\mu)\f$ + \param mu \f$\mu\f$ + \param nf \f$n_f\f$ + \param nloops number of loops + \return \f$m_{MS}^{(n_f)}(\mu)\f$ + */ + double mOS2mMSrun(double mOS, std::pair<double,double>* mq, + double asmu, double mu,int nf, int nloops); + + //! mMS2mOSrun calculates \f$M_{OS}\f$ from \f$m_{MS}^{(n_f)}(\mu)\f$ + + //! Calculates \f$m_{MS}^{(n_f)}(m_{MS})\f$ in an intermediate step + /*! + \param mMS \f$m_{MS}^{(n_f)}(\mu)\f$ + \param mq pointer to pairs of light quark masses + \param asmu \f$\alpha_s^{(n_f)}(\mu)\f$ + \param mu \f$\mu\f$ + \param nf \f$n_f\f$ + \param nloops number of loops + \return \f$M_{OS}\f$ + */ + double mMS2mOSrun(double mMS, std::pair<double,double>* mq, + double asmu, double mu,int nf, int nloops); + + //! mMS2mRI calculates \f$m^{RI}(\mu)\f$ from \f$m_{MS}^{(n_f)}(\mu)\f$ + /*! + \param mMS \f$m_{MS}^{(n_f)}(\mu)\f$ + \param asmu \f$\alpha_s^{(n_f)}(\mu)\f$ + \param nf \f$n_f\f$ + \param nloops number of loops + \return \f$m^{RI}(\mu)\f$ + */ + double mMS2mRI(double mMS, double asmu,int nf, int nloops); + + //! mOS2mMSit calculates \f$m_{MS}^{(n_f)}(\mu)\f$ from \f$M_{OS}\f$ + + //! DEPRECATED, will be removed in future versions + /*! + \param mOS \f$M_{OS}\f$ + \param mq pointer to pairs of light quark masses + \param asmu \f$\alpha_s^{(n_f)}(\mu)\f$ + \param mu \f$\mu\f$ + \param nf \f$n_f\f$ + \param nloops number of loops + \return \f$m_{MS}^{(n_f)}(\mu)\f$ + */ + double mOS2mMSit(double mOS, std::pair<double,double>* mq, + double asmu, double mu, int nf, int nloops); + + //! mMS2mRGImod calculates \f$m^{RGI}\f$ from \f$m_{MS}^{(n_f)}(\mu)\f$ + + //! for the difference between mMS2mRGImod and mMS2mRGI see arXiv:1201:6149 + /*! + \param mMS \f$m_{MS}^{(n_f)}(\mu)\f$ + \param asmu \f$\alpha_s^{(n_f)}(\mu)\f$ + \param nf \f$n_f\f$ + \param nloops number of loops + \return \f$m^{RGI}\f$ + */ + double mMS2mRGImod(double mMS, double asmu, int nf, int nloops); + + //! mOS2mPS calculates \f$m^{PS}(\mu_f)\f$ from \f$M_{OS}\f$ + /*! + \param mOS \f$M_{OS}\f$ + + \param mq pointer to pairs of light quark masses, not active + \param asmu \f$\alpha_s^{(n_l)}(\mu)\f$ + \param mu \f$\mu\f$ + \param muf \f$\mu_f\f$ + \param nl \f$n_l\f$ + \param nloops number of loops + \return \f$m^{PS}(\mu_f)\f$ + */ + double mOS2mPS(double mOS, std::pair<double,double>* mq, + double asmu, double mu, double muf, int nl, int nloops); + + //! mMS2mPS calculates \f$m^{PS}(\mu_f)\f$ from \f$m_{MS}^{(n_l+1)}(\mu)\f$ + /*! + \param mMS \f$m_{MS}^{(n_l+1)}(\mu)\f$ + \param mq pointer to pairs of light quark masses, not active + \param asmu \f$\alpha_s^{(n_l)}(\mu)\f$ + \param mu \f$\mu\f$ + \param muf \f$\mu_f\f$ + \param nl \f$n_l\f$ + \param nloops number of loops + \param fdelm factor multiplying the non-logarithmic part of the 4-loop term + \return \f$m^{PS}(\mu_f)\f$ + */ + double mMS2mPS(double mMS, std::pair<double,double>* mq, + double asmu, double mu, double muf, int nl, int nloops, double fdelm=1.0); + + //! mPS2mMS calculates \f$m_{MS}^{(n_l+1)}(\mu)\f$ from \f$m^{PS}(\mu_f)\f$ + /*! + \param mPS \f$m^{PS}(\mu_f)\f$ + \param mq pointer to pairs of light quark masses, not active + \param asmu \f$\alpha_s^{(n_l)}(\mu)\f$ + \param mu \f$\mu\f$ + \param muf \f$\mu_f\f$ + \param nl \f$n_l\f$ + \param nloops number of loops + \param fdelm factor multiplying the non-logarithmic part of the 4-loop term + \return \f$m_{MS}^{(n_l+1)}(\mu)\f$ + */ + double mPS2mMS(double mPS, std::pair<double,double>* mq, + double asmu, double mu, double muf, int nl, int nloops, double fdelm=1.0); + + //! mPS2mSI calculates \f$m_{MS}^{(n_l+1)}(m_{MS})\f$ from \f$m^{PS}(\mu_f)\f$ + /*! + \param mPS \f$m^{PS}(\mu_f)\f$ + \param mq pointer to pairs of light quark masses, not active + \param as pointer to a function which calculates \f$\alpha_s^{(n_l)}(\mu)\f$ and takes \f$\mu\f$ as argument + \param muf \f$\mu_f\f$ + \param nl \f$n_l\f$ + \param nloops number of loops + \param fdelm factor multiplying the non-logarithmic part of the 4-loop term + \return \f$m_{MS}^{(n_l+1)}(m_{MS})\f$ + */ + double mPS2mSI(double mPS, std::pair<double,double>* mq, + double (*as)(double), double muf, int nl, int nloops, double fdelm=1.0); + + //! mOS2m1S calculates \f$m^{1S}\f$ from \f$M_{OS}\f$ + /*! + \param mOS \f$M_{OS}\f$ + \param mq pointer to pairs of light quark masses, not active + \param asmu \f$\alpha_s^{(n_l)}(\mu)\f$ + \param mu \f$\mu\f$ + \param nl \f$n_l\f$ + \param nloops number of loops + \return \f$m^{1S}\f$ + */ + double mOS2m1S(double mOS, std::pair<double,double>* mq, + double asmu, double mu, int nl, int nloops); + + //! mMS2m1S calculates \f$m^{1S}\f$ from \f$m_{MS}^{(n_l+1)}(\mu)\f$ + /*! + \param mMS \f$m_{MS}^{(n_l+1)}(\mu)\f$ + \param mq pointer to pairs of light quark masses, not active + \param asmu \f$\alpha_s^{(n_l)}(\mu)\f$ + \param mu \f$\mu\f$ + \param nl \f$n_l\f$ + \param nloops number of loops + \param fdelm factor multiplying the non-logarithmic part of the 4-loop term + \return \f$m^{1S}\f$ + */ + double mMS2m1S(double mMS, std::pair<double,double>* mq, + double asmu, double mu, int nl, int nloops, double fdelm=1.0); + + //! m1S2mMS calculates \f$m_{MS}^{(n_l+1)}(\mu)\f$ from \f$m^{1S}\f$ + /*! + \param m1S \f$m^{PS}\f$ + \param mq pointer to pairs of light quark masses, not active + \param asmu \f$\alpha_s^{(n_l)}(\mu)\f$ + \param mu \f$\mu\f$ + \param nl \f$n_l\f$ + \param nloops number of loops + \param fdelm factor multiplying the non-logarithmic part of the 4-loop term + \return \f$m_{MS}^{(n_l+1)}(\mu)\f$ + */ + double m1S2mMS(double m1S, std::pair<double,double>* mq, + double asmu, double mu, int nl, int nloops, double fdelm=1.0); + + //! m1S2mSI calculates \f$m_{MS}^{(n_l+1)}(m_{MS})\f$ from \f$m^{1S}\f$ + /*! + \param m1S \f$m^{1S}\f$ + \param mq pointer to pairs of light quark masses, not active + \param as pointer to a function which calculates \f$\alpha_s^{(n_l)}(\mu)\f$ and takes \f$\mu\f$ as argument + \param nl \f$n_l\f$ + \param nloops number of loops + \param fdelm factor multiplying the non-logarithmic part of the 4-loop term + \return \f$m_{MS}^{(n_l+1)}(m_{MS})\f$ + */ + double m1S2mSI(double m1S, std::pair<double,double>* mq, + double (*as)(double), int nl, int nloops, double fdelm=1.0); + + //! mOS2mRS calculates \f$m^{RS}(\nu_f)\f$ or \f$m^{RS'}(\nu_f)\f$ from \f$M_{OS}\f$ + + //! This is a helper function, use the version without the parameter prime or mOS2mRSp + /*! + \param mOS \f$M_{OS}\f$ + \param mq pointer to pairs of light quark masses, not active + \param asmu \f$\alpha_s^{(n_l)}(\mu)\f$ + \param mu \f$\mu\f$ + \param nuf \f$\nu_f\f$ + \param nl \f$n_l\f$ + \param nloops number of loops + \param prime selects if \f$m^{RS}\f$ or \f$m^{RS'}\f$ should be calculated + \return \f$m^{RS}(\nu_f)\f$ or \f$m^{RS'}(\nu_f)\f$ + */ + double mOS2mRS(double mOS, std::pair<double,double>* mq, double asmu, + double mu, double nuf, int nl, int nloops, bool prime); + + //! mMS2mRS calculates \f$m^{RS}(\nu_f)\f$ or \f$m^{RS'}(\nu_f)\f$ from \f$m_{MS}^{(n_l+1)}(\mu)\f$ + + //! This is a helper function, use the version without the parameter prime or mMS2mRSp + /*! + \param mMS \f$m_{MS}^{(n_l+1)}(\mu)\f$ + \param mq pointer to pairs of light quark masses, not active + \param asmu \f$\alpha_s^{(n_l)}(\mu)\f$ + \param mu \f$\mu\f$ + \param nuf \f$\nu_f\f$ + \param nl \f$n_l\f$ + \param nloops number of loops + \param fdelm factor multiplying the non-logarithmic part of the 4-loop term + \param prime selects if \f$m^{RS}\f$ or \f$m^{RS'}\f$ should be calculated + \return \f$m^{RS}(\nu_f)\f$ or \f$m^{RS'}(\nu_f)\f$ + */ + double mMS2mRS(double mMS, std::pair<double,double>* mq, double asmu, + double mu, double nuf, int nl, int nloops, double fdelm, bool prime); + + //! mRS2mMS calculates \f$m_{MS}^{(n_l+1)}(\mu)\f$ from \f$m^{RS}(\nu_f)\f$ or \f$m^{RS'}(\nu_f)\f$ + + //! This is a helper function, use the version without the parameter prime or mRSp2mMS + /*! + \param mRS \f$m^{RS}(\nu_f)\f$ or \f$m^{RS'}(\nu_f)\f$ + \param mq pointer to pairs of light quark masses, not active + \param asmu \f$\alpha_s^{(n_l)}(\mu)\f$ + \param mu \f$\mu\f$ + \param nuf \f$\nu_f\f$ + \param nl \f$n_l\f$ + \param nloops number of loops + \param fdelm factor multiplying the non-logarithmic part of the 4-loop term + \param prime selects if \f$m^{RS}\f$ or \f$m^{RS'}\f$ is given + \return \f$m_{MS}^{(n_l+1)}(\mu)\f$ + */ + double mRS2mMS(double mRS, std::pair<double,double>* mq, double asmu, + double mu, double nuf, int nl, int nloops, double fdelm, bool prime); + + //! mRS2mSI calculates \f$m_{MS}^{(n_l+1)}(m_{MS})\f$ from \f$m^{RS}(\nu_f)\f$ or \f$m^{RS'}(\nu_f)\f$ + + //! This is a helper function, use the version without the parameter prime or mRSp2mSI + /*! + \param mRS \f$m^{RS}(\nu_f)\f$ or \f$m^{RS'}(\nu_f)\f$ + \param mq pointer to pairs of light quark masses, not active + \param as pointer to a function which calculates \f$\alpha_s^{(n_l)}(\mu)\f$ and takes \f$\mu\f$ as argument + \param nuf \f$\nu_f\f$ + \param nl \f$n_l\f$ + \param nloops number of loops + \param fdelm factor multiplying the non-logarithmic part of the 4-loop term + \param prime selects if \f$m^{RS}\f$ or \f$m^{RS'}\f$ is given + \return \f$m_{MS}^{(n_l+1)}(m_{MS})\f$ + */ + double mRS2mSI(double mRS, std::pair<double,double>* mq, double (*as)(double), + double nuf, int nl, int nloops, double fdelm, bool prime); + + + //! mOS2mRS calculates \f$m^{RS}(\nu_f)\f$ from \f$M_{OS}\f$ + + /*! + \param mOS \f$M_{OS}\f$ + \param mq pointer to pairs of light quark masses, not active + \param asmu \f$\alpha_s^{(n_l)}(\mu)\f$ + \param mu \f$\mu\f$ + \param nuf \f$\nu_f\f$ + \param nl \f$n_l\f$ + \param nloops number of loops + \return \f$m^{RS}(\nu_f)\f$ + */ + double mOS2mRS(double mOS, std::pair<double,double>* mq, + double asmu, double mu, double nuf, int nl, int nloops); + + //! mMS2mRS calculates \f$m^{RS}(\nu_f)\f$ from \f$m_{MS}^{(n_l+1)}(\mu)\f$ + + /*! + \param mMS \f$m_{MS}^{(n_l+1)}(\mu)\f$ + \param mq pointer to pairs of light quark masses, not active + \param asmu \f$\alpha_s^{(n_l)}(\mu)\f$ + \param mu \f$\mu\f$ + \param nuf \f$\nu_f\f$ + \param nl \f$n_l\f$ + \param nloops number of loops + \param fdelm factor multiplying the non-logarithmic part of the 4-loop term + \return \f$m^{RS}(\nu_f)\f$ + */ + double mMS2mRS(double mMS, std::pair<double,double>* mq, + double asmu, double mu, double nuf, int nl, int nloops, double fdelm=1.0); + + //! mRS2mMS calculates \f$m_{MS}^{(n_l+1)}(\mu)\f$ from \f$m^{RS}(\nu_f)\f$ + + /*! + \param mRS \f$m^{RS}(\nu_f)\f$ + \param mq pointer to pairs of light quark masses, not active + \param asmu \f$\alpha_s^{(n_l)}(\mu)\f$ + \param mu \f$\mu\f$ + \param nuf \f$\nu_f\f$ + \param nl \f$n_l\f$ + \param nloops number of loops + \param fdelm factor multiplying the non-logarithmic part of the 4-loop term + \return \f$m_{MS}^{(n_l+1)}(\mu)\f$ + */ + double mRS2mMS(double mRS, std::pair<double,double>* mq, + double asmu, double mu, double nuf, int nl, int nloops, double fdelm=1.0); + + //! mRS2mSI calculates \f$m_{MS}^{(n_l+1)}(m_{MS})\f$ from \f$m^{RS}(\nu_f)\f$ + + /*! + \param mRS \f$m^{RS}(\nu_f)\f$ + \param mq pointer to pairs of light quark masses, not active + \param as pointer to a function which calculates \f$\alpha_s^{(n_l)}(\mu)\f$ and takes \f$\mu\f$ as argument + \param nuf \f$\nu_f\f$ + \param nl \f$n_l\f$ + \param nloops number of loops + \param fdelm factor multiplying the non-logarithmic part of the 4-loop term + \return \f$m_{MS}^{(n_l+1)}(m_{MS})\f$ + */ + double mRS2mSI(double mRS, std::pair<double,double>* mq, + double (*as)(double), double nuf, int nl, int nloops, double fdelm=1.0); + + //! mOS2mRSp calculates \f$m^{RS'}(\nu_f)\f$ from \f$M_{OS}\f$ + + /*! + \param mOS \f$M_{OS}\f$ + \param mq pointer to pairs of light quark masses, not active + \param asmu \f$\alpha_s^{(n_l)}(\mu)\f$ + \param mu \f$\mu\f$ + \param nuf \f$\nu_f\f$ + \param nl \f$n_l\f$ + \param nloops number of loops + \return \f$m^{RS'}(\nu_f)\f$ + */ + double mOS2mRSp(double mOS, std::pair<double,double>* mq, + double asmu, double mu, double nuf, int nl, int nloops); + + //! mMS2mRSp calculates \f$m^{RS'}(\nu_f)\f$ from \f$m_{MS}^{(n_l+1)}(\mu)\f$ + + /*! + \param mMS \f$m_{MS}^{(n_l+1)}(\mu)\f$ + \param mq pointer to pairs of light quark masses, not active + \param asmu \f$\alpha_s^{(n_l)}(\mu)\f$ + \param mu \f$\mu\f$ + \param nuf \f$\nu_f\f$ + \param nl \f$n_l\f$ + \param nloops number of loops + \param fdelm factor multiplying the non-logarithmic part of the 4-loop term + \return \f$m^{RS'}(\nu_f)\f$ + */ + double mMS2mRSp(double mMS, std::pair<double,double>* mq, + double asmu, double mu, double nuf, int nl, int nloops, double fdelm=1.0); + + //! mRSp2mMS calculates \f$m_{MS}^{(n_l+1)}(\mu)\f$ from \f$m^{RS'}(\nu_f)\f$ + + /*! + \param mRS \f$m^{RS'}(\nu_f)\f$ + \param mq pointer to pairs of light quark masses, not active + \param asmu \f$\alpha_s^{(n_l)}(\mu)\f$ + \param mu \f$\mu\f$ + \param nuf \f$\nu_f\f$ + \param nl \f$n_l\f$ + \param nloops number of loops + \param fdelm factor multiplying the non-logarithmic part of the 4-loop term + \return \f$m_{MS}^{(n_l+1)}(\mu)\f$ + */ + double mRSp2mMS(double mRS, std::pair<double,double>* mq, + double asmu, double mu, double nuf, int nl, int nloops, double fdelm=1.0); + + //! mRSp2mSI calculates \f$m_{MS}^{(n_l+1)}(m_{MS})\f$ from \f$m^{RS'}(\nu_f)\f$ + + /*! + \param mRS \f$m^{RS'}(\nu_f)\f$ + \param mq pointer to pairs of light quark masses, not active + \param as pointer to a function which calculates \f$\alpha_s^{(n_l)}(\mu)\f$ and takes \f$\mu\f$ as argument + \param nuf \f$\nu_f\f$ + \param nl \f$n_l\f$ + \param nloops number of loops + \param fdelm factor multiplying the non-logarithmic part of the 4-loop term + \return \f$m_{MS}^{(n_l+1)}(m_{MS})\f$ + */ + double mRSp2mSI(double mRS, std::pair<double,double>* mq, + double (*as)(double), double nuf, int nl, int nloops, double fdelm=1.0); + + + // Overload functions: + double LamExpl(double asmu, double mu, int nloops); + double LamImpl(double asmu, double mu,int nloops); + double AlphasLam(double Lambda, double mu, int nloops); + double AlphasExact(double asmu0, double mu0, double mu1, int nloops); + double mMS2mMS(double mmu0, double asmu0, double asmu1, int nloops); + AsmMS AsmMSrunexact(double mmu, double asmu0, double mu0, double mu1, + int nloops); + + double DecAsDownOS(double asmu, double massth, double muth, int nloops); + double DecAsUpOS(double asmu, double massth, double muth, int nloops); + double DecAsDownMS(double asmu, double massth, double muth, int nloops); + double DecAsUpMS(double asmu, double massth, double muth, int nloops); + double DecAsDownSI(double asmu, double massth, double muth, int nloops); + double DecAsUpSI(double asmu, double massth, double muth, int nloops); + + double DecMqUpOS(double mq, double asmu, double massth, double muth, int nloops); + double DecMqDownOS(double mq, double asmu, double massth, double muth, int nloops); + double DecMqUpMS(double mq, double asmu, double massth, double muth, int nloops); + double DecMqDownMS(double mq, double asmu, double massth, double muth, int nloops); + double DecMqUpSI(double mq, double asmu, double massth, double muth, int nloops); + double DecMqDownSI(double mq, double asmu, double massth, double muth, int nloops); + + + double mMS2mOS(double mMS, std::pair<double,double>* mq, + double asmu, double mu, int nloops, double fdelm=1.0); + double mOS2mMS(double mOS, std::pair<double,double>* mq, + double asmu, double mu, int nloops, double fdelm=1.0); + + double mMS2mSI(double mMS, double asmu, double mu, int nloops); + double mRI2mMS(double mRI, double asmu, int nloops); + double mMS2mRGI(double mMS, double asmu, int nloops); + double mRGI2mMS(double mRGI, double asmu, int nloops); + double mOS2mSI(double mOS, std::pair<double,double>* mq, + double asM, int nloops, double fdelm=1.0); + double mOS2mMSrun(double mOS, std::pair<double,double>* mq, + double asmu, double mu, int nloops); + double mMS2mOSrun(double mMS, std::pair<double,double>* mq, + double asmu, double mu, int nloops); + double mMS2mRI(double mMS, double asmu, int nloops); + double mOS2mMSit(double mOS, std::pair<double,double>* mq, + double asmu, double mu, int nloops); + double mMS2mRGImod(double mMS, double asmu, int nloops); + + + +}; + +#endif diff --git a/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/HoppetInterface.h b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/HoppetInterface.h new file mode 100644 index 0000000000000000000000000000000000000000..f5a73591fed745ef61f1cae5bdcf98d3b5100629 --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/HoppetInterface.h @@ -0,0 +1,26 @@ +#include <vector> + +class fastNLOReader; + +extern "C" void evolvepdf_(const double& x, const double& Q, double* xf); + +class HoppetInterface { + public: + static void InitHoppet(fastNLOReader&); + static std::vector<double> GetSpl(double, double); + static std::vector<double> GetXFX(double, double); + static double EvolveAlphas(double); + static bool IsInitialized; + // ---- Alphas vars ---- // + static double fAlphasMz; + static double fMz; + static std::string fnScheme; + static int fnFlavor; + static int fnLoop; + static double QMass[6]; + // ____ // + private: + static void StartHoppet(); + static void LHAsub(const double &, const double &, double*); + static fastNLOReader *fnlo; +}; diff --git a/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/Makefile.am b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/Makefile.am new file mode 100644 index 0000000000000000000000000000000000000000..ca9d04e8350576e7537819bdde952bfa7756efdf --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/Makefile.am @@ -0,0 +1,31 @@ +# -*- Automake -*- +# ----------------------------------------------------------------------------- +# +# K. Rabbertz, 06.10.2013 +# +# fastNLO_toolkit +# +# ----------------------------------------------------------------------------- +# Use GNU standards +AUTOMAKE_OPTIONS = gnu + +# +# Include files to be distributed +# +# pkginclude_HEADERS would install to $(includedir)/$(PACKAGE_NAME) instead +fastnloincludedir = $(includedir)/fastnlotk +fastnloinclude_HEADERS = fastNLOCoeffAddBase.h fastNLOCoeffAddFix.h fastNLOCoeffAddFlex.h fastNLOEvent.h \ + fastNLOCoeffBase.h fastNLOCoeffData.h fastNLOCoeffMult.h fastNLOCoefficients.h fastNLOConstants.h fastNLOTableConstants.h \ + fastNLOCreate.h fastNLOInterpolBase.h fastNLOInterpolCatmullRom.h fastNLOInterpolLagrange.h fastNLOInterpolLinear.h fastNLOInterpolOneNode.h \ + fastNLOAlphas.h fastNLOLHAPDF.h fastNLOPDFLinearCombinations.h fastNLOTools.h \ + fastNLODiffReader.h fastNLODiffUser.h \ + fastNLOReader.h fastNLOTable.h read_steer.h speaker.h Alphas.h CRunDec.h fastNLOCRunDec.h fastNLOQCDNUMAS.h \ + fastNLOHoppetAs.h fastNLOHoppet.h HoppetInterface.h \ + zstr.hpp + +# Files that are required to build the project but that can be +# recreated IF the necessary autotools etc. are available by: +# "autoreconf -i; ./configure" +# Use "make maintainer-clean" (on a build machine) before svn commits, +# but not for distribution +MAINTAINERCLEANFILES = Makefile.in diff --git a/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOAlphas.h b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOAlphas.h new file mode 100644 index 0000000000000000000000000000000000000000..8caaef9d7c735d2cc1ae1e8fe2583ed97e7df479 --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOAlphas.h @@ -0,0 +1,74 @@ +// Author: Daniel Britzger +// DESY, 20/04/2012 + +////////////////////////////////////////////////////////////////////////// +// // +// fastNLO_reader_2.1.0 // +// D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch // +// // +// The projects web page can be found at: // +// http://projects.hepforge.org/fastnlo // +// // +// If you use this code, please cite: // +// T. Kluge, K. Rabbertz and M. Wobisch, hep-ph/0609285 // +// D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, // +// arXiv:1109.1310 // +// // +////////////////////////////////////////////////////////////////////////// + +////////////////////////////////////////////////////////////////////////// +// +// fastNLOAlhpas +// This class inherits the PDF interface from +// fastNLOLHAPDF, while the alpha_s evolution +// is superseeded by the Alphas.h class. +// +////////////////////////////////////////////////////////////////////////// + + +#ifndef FASTNLOALPHAS +#define FASTNLOALPHAS + +//#include "fastNLOReader.h" +#include <string> +//#include <iostream> +//#include <cstdio> +//#include <cstdlib> +//#include <LHAPDF/LHAPDF.h> +//#include "speaker.h" +#include "fastNLOLHAPDF.h" +//#include "Alphas.h" + + +class fastNLOAlphas : public fastNLOLHAPDF { + +public: + fastNLOAlphas(std::string name); + fastNLOAlphas(std::string name, std::string LHAPDFFile, int PDFSet); + + // ---- Alphas vars ---- // + // Setters + void SetMz(double Mz); + void SetNFlavor(int nflavor); + void SetNLoop(int nloop); + void SetAlphasMz(double AlphasMz); + // Getters + double GetAlphasMz() const; + void SetGRVtoPDG2012_2loop(); + + +protected: + // inherited functions + double EvolveAlphas(double Q) const ; + + // ---- Alphas vars ---- // + double fAlphasMz; + +}; + + + +//______________________________________________________________________________ + + +#endif diff --git a/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCRunDec.h b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCRunDec.h new file mode 100644 index 0000000000000000000000000000000000000000..349cfd3b8da084eedf2b6e4b00315f7a6a327594 --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCRunDec.h @@ -0,0 +1,79 @@ +// Author: Daniel Britzger +// DESY, 20/04/2012 + +////////////////////////////////////////////////////////////////////////// +// // +// fastNLO_toolkit // +// D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch // +// // +// The projects web page can be found at: // +// http://projects.hepforge.org/fastnlo // +// // +// If you use this code, please cite: // +// T. Kluge, K. Rabbertz and M. Wobisch, hep-ph/0609285 // +// D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, // +// arXiv:1109.1310 // +// // +////////////////////////////////////////////////////////////////////////// + +////////////////////////////////////////////////////////////////////////// +// +// fastNLOAlphas +// This class inherits the PDF interface from +// fastNLOLHAPDF, while the alpha_s evolution +// is superseeded by the Alphas.h class. +// +////////////////////////////////////////////////////////////////////////// + +#ifndef FASTNLOCRUNDEC +#define FASTNLOCRUNDEC + +#include "fastNLOLHAPDF.h" +#include "CRunDec.h" + + + +class fastNLOCRunDec : public fastNLOLHAPDF { + + public: + // Parameter initialisation with PDG values + fastNLOCRunDec(std::string name); + // Parameter initialisation with LHAPDF set values + fastNLOCRunDec(std::string name, std::string LHAPDFFile, int PDFMem = 0); + + // Getters + double GetQMass(int pdgid) const; + double GetMz() const; + std::string GetNScheme() const; + int GetNFlavor() const; + int GetNLoop() const; + double GetAlphasMz() const; + + // Setters + void SetQMass(int pdgid, double qmass); + void SetMz(double Mz); + void SetNFlavor(int nflavor); + void SetNLoop(int nloop); + void SetAlphasMz(double AlphasMz); + void SetPDGValues(); + void SetLHAPDFValues(std::string LHAPDFFile, int PDFMem = 0); + + // Printers + void PrintParmValues(); + + protected: + // Inherited functions + double EvolveAlphas(double Q) const ; + + // ---- Alphas vars ---- // + void InitCRunDec(); + CRunDec *crundec; + double QMass[6]; + double fMz; + std::string fnScheme; + int fnFlavor; + int fnLoop; + double fAlphasMz; +}; + +#endif diff --git a/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffAddBase.h b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffAddBase.h new file mode 100644 index 0000000000000000000000000000000000000000..d5cfc12842c4d0543aade2c9843db560cd3b5cd4 --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffAddBase.h @@ -0,0 +1,233 @@ +#ifndef __fastNLOCoeffAddBase__ +#define __fastNLOCoeffAddBase__ + + +#include "fastNLOCoeffBase.h" +#include "fastNLOConstants.h" +#include "fastNLOInterpolBase.h" +#include "fastNLOEvent.h" + +namespace fastNLO { + struct WgtStat { + double WgtNevt = 0; //!< 'number of events', i.e. normalisation as suggested by generator (identical to previously use 'Nevt') + int NumTable = 1; //!< Number of tables merged into this table + unsigned long long WgtNumEv = 0; //!< number of entries + double WgtSumW2 = 0; //!< Sum of all weight**2 + double SigSumW2 = 0; //!< Sum of all sigma**2 (i.e. (wgt*alpha*pdf)**2 ) + double SigSum = 0; //!< Sum of all sigma (i.e. (wgt*alpha*pdf)**2 ) + fastNLO::v2d WgtObsSumW2; //!< sumw2[proc][obs] + fastNLO::v2d SigObsSumW2; //!< sumw2[proc][obs] + fastNLO::v2d SigObsSum; //!< sum[proc][obs] + std::vector < std::vector < unsigned long long > > WgtObsNumEv; //!< Nentries[proc][obs] + //fastNLO::v2d SigObsUser; //!< sum[proc][obs] + + void Erase() { + WgtNevt=0; + NumTable=1; + WgtNumEv=0; + WgtSumW2=0; + SigSumW2=0; + SigSum=0; + for ( auto& i : WgtObsSumW2 ) for ( auto& j : i ) j=0; + for ( auto& i : SigObsSumW2 ) for ( auto& j : i ) j=0; + for ( auto& i : SigObsSum ) for ( auto& j : i ) j=0; + for ( auto& i : WgtObsNumEv ) for ( auto& j : i ) j=0; + //for ( auto& i : SigObsUser ) for ( auto& j : i ) j=0; + }; + + void Add(const WgtStat& other ) { + this->WgtNevt += other.WgtNevt; + this->NumTable += other.NumTable; + this->WgtNumEv += other.WgtNumEv; + this->WgtSumW2 += other.WgtSumW2; + this->SigSumW2 += other.SigSumW2; + this->SigSum += other.SigSum; + if ( this->WgtObsNumEv.size() != other.WgtObsNumEv.size() ) exit(8); + for ( unsigned int i = 0 ; i<WgtObsNumEv.size() ; i++ ) { + if ( this->WgtObsNumEv[i].size() != other.WgtObsNumEv[i].size() ) exit(8); + for ( unsigned int j = 0 ; j<WgtObsNumEv[i].size() ; j++ ) { + this->WgtObsSumW2[i][j] += other.WgtObsSumW2[i][j]; + this->SigObsSumW2[i][j] += other.SigObsSumW2[i][j]; + this->SigObsSum[i][j] += other.SigObsSum[i][j]; + this->WgtObsNumEv[i][j] += other.WgtObsNumEv[i][j]; + //this->SigObsUser[i][j] += other.SigObsUser[i][j]; + } + } + }; + WgtStat& operator+=(const WgtStat& other) { this->Add(other); return *this;} + + void SetWgtUser( const fastNLO::v2d& wgtUser ) { + //! Set user weights + //! wgtUser[proc][obs] + if ( wgtUser.size()!=WgtObsNumEv.size() ) { + std::cerr<<"Error [fastNLO::WgtStat::SetWgtUser()] Array with wrong size (wrong number of subprocesses. Must be " + <<WgtObsNumEv.size()<<", but is "<< wgtUser.size()<<std::endl; + exit(8); + } + if ( wgtUser[0].size()!=WgtObsNumEv[0].size() ) { + std::cerr<<"Error [fastNLO::WgtStat::SetWgtUser()] Array with wrong size (wrong number of obs bins. Must be " + <<WgtObsNumEv[0].size()<<", but is "<< wgtUser[0].size()<<std::endl; + exit(8); + } + SigObsSum = wgtUser; + //SigObsUser = wgtUser; + }; + + void SetWgtUser( double wgtUser ) { + //! Set user weight valid for all entries + SigSum = wgtUser; + for ( auto& proc : SigObsSum ) { + for ( auto& w : proc ) w=wgtUser; + } + }; + + void SetWgtUser( const std::vector<double>& wgtUserObs ) { + //! Set user weights + //! wgtUserObs[obs] + if ( wgtUserObs.size()!=WgtObsNumEv[0].size() ) { + std::cerr<<"Error [fastNLO::WgtStat::SetWgtUser()] Array with wrong size (wrong number of obs bins. Must be " + <<WgtObsNumEv[0].size()<<", but is "<< wgtUserObs.size()<<std::endl; + exit(8); + } + for ( std::vector<double>& proc : SigObsSum ) { + proc = wgtUserObs; + } + }; + }; + +} + +class fastNLOCoeffAddBase : public fastNLOCoeffBase { + + friend class fastNLOTable; + friend class fastNLOCreate; + +public: + fastNLOCoeffAddBase() = delete; + fastNLOCoeffAddBase(int NObsBin); + explicit fastNLOCoeffAddBase(const fastNLOCoeffBase& base); + virtual ~fastNLOCoeffAddBase() {} + virtual fastNLOCoeffAddBase* Clone() const; //!< returns 'new' copy of this instance. + static bool CheckCoeffConstants(const fastNLOCoeffBase* c, bool quiet = false); + void Read(std::istream& table, int ITabVersionRead); + virtual void Write(std::ostream& table, int ITabVersionWrite); + virtual void Add(const fastNLOCoeffAddBase& other, fastNLO::EMerge moption=fastNLO::kMerge); + virtual void Print(int iprint) const; + + // Manipulate coefficient bins + virtual void Clear();//!< Clear all coefficients and event counters + virtual void NormalizeCoefficients(double wgt=1); //!< Set number of events to unity and normalize coefficients accordingly + virtual void NormalizeCoefficients(const std::vector<std::vector<double> >& wgtProcBin) {}; + virtual void MultiplyCoefficientsByConstant(double fact) {};//!< Multiply all coefficients of all bins by a constant factor + virtual void MultiplyBin(unsigned int iObsIdx, double fact) {}; //!< Multiply coefficients of one observable bin a factor + virtual void MultiplyBinProc(unsigned int iObsIdx, unsigned int iProc, double fact) {}; //!< Multiply coefficients of one observable bin a factor (idx starting from 0) + virtual void EraseBin(unsigned int iObsIdx, int ITabVersionRead);//!< Erase observable bin from table + virtual void CatBin(const fastNLOCoeffAddBase& other, unsigned int iObsIdx, int ITabVersionRead); //!< Catenate observable to table + + int GetIRef() const {return IRef;} + void SetIRef(int iref=1) {IRef=iref;} + double GetNevt() const { return Nevt; } + double GetNevt(int NObsBin, int NSubproc) const { + //return fWgt.WgtObsSumW2[NSubproc][NObsBin]; + if (Nevt > 0) return Nevt; + else {std::cout<<"Todo. Preparation for v2.3."<< std::endl; return Nevt;} + } + void SetNevt(double nevt) { Nevt = nevt;} //!< Set number of events + int GetNxmax(int Obsbin) const ; + int GetXIndex(int Obsbin,int x1bin,int x2bin =0) const ; + int GetNSubproc() const { return NSubproc;} + int GetIScaleDep() const { return IScaleDep;} + int GetNPDF() const {return NPDFPDG.size();} + int GetPDFPDG(int iPDF) const {return NPDFPDG[iPDF];} + int GetNPDFDim() const {return NPDFDim;} + int GetIPDFdef1() const { return IPDFdef1; } + int GetIPDFdef2() const { return IPDFdef2; } + int GetIPDFdef3() const { return IPDFdef3; } + int GetNpow() const {return Npow;} + int GetNScales() const {return NScales;} + int GetNScaleDim() const {return NScaleDim;} + //std::vector<std::string > GetScaleDescript(int iScale=0) const { return ScaleDescript[iScale]; }; + std::string GetScaleDescription(int iScale=0) const { return ScaleDescript[0][iScale]; }; // getter for scale description of scale iScale + const std::vector<std::vector<std::string > >& GetScaleDescr() const { return ScaleDescript; } + int GetNxtot1(int iBin) const { return XNode1[iBin].size(); } + int GetNxtot2(int iBin) const { return XNode2.size() > 0 ? XNode2[iBin].size() : -1; } + + double GetXNode1(int iObsBin, int iNode) const { return XNode1[iObsBin][iNode]; } + double GetXNode2(int iObsBin, int iNode) const { return XNode2[iObsBin][iNode]; } + double GetX1(int iObsBin, int iXnode) const; //! return x value of pdf1 for x-node 1 + double GetX2(int iObsBin, int iXnode) const; //! return x value of pdf1 for x-node 1 + + const std::vector < double >& GetXNodes1(int iObsBin) const { return XNode1[iObsBin]; } + const std::vector < double >& GetXNodes2(int iObsBin) const { return XNode2[iObsBin]; } + + fastNLO::v2d GetAllXNodes1() const { return XNode1; } + fastNLO::v2d GetAllXNodes2() const { return XNode2; } + fastNLO::v2d* AccessAllXNodes1() { return &XNode1; } + fastNLO::v2d* AccessAllXNodes2() { return &XNode2; } + bool IsReference() const {return IRef>0;}; + bool IsCompatible(const fastNLOCoeffAddBase& other) const; + bool IsCatenable(const fastNLOCoeffAddBase& other) const; + + const std::vector<std::vector<std::pair<int,int> > >& GetPDFCoeff() const { return fPDFCoeff;} + + bool SubIsEnabled(int index) const { return index < NSubproc && sub_enabled[index]; } //!< Returns true if a single subcontribution is enabled in this contribution + void SubEnable(int index, bool on = true) { if ( index < NSubproc ) sub_enabled[index] = on; } //!< Enables/Disables a single subcontribution + void SubEnableAll( bool on = true ) { sub_enabled.assign(sub_enabled.size(), on); } //!< Enables/Disables all subcontributions + bool SubSelect( std::vector< std::pair<int,int> > processes, bool on = true); //!< checks if the given subprocess list is compatible with the subcontribution list and enables/disables the corresponding subcontributions. Returns true on sucess and false on failure. + + const fastNLO::WgtStat& GetWgtStat() const { return fWgt;} //!< Get weight and event counts + fastNLO::WgtStat& AccessWgtStat() { return fWgt;} //!< Get weight and event counts + double GetMergeWeight(fastNLO::EMerge moption, int proc, int bin) const ; //!< Get merge weight for a given bin and subprocess + + void ExtendX(int ObsBin, std::vector<fastNLOInterpolBase*>& KernX1, std::vector<fastNLOInterpolBase*>& KernX2); + virtual void ExtendSigmaTildeX(int ObsBin, unsigned int OldXSize1, unsigned int OldXSize2); + virtual void Fill(fnloEvent& Event, int ObsBin, int X, int scalevar, const std::vector<std::pair<int, double>>& nmu1, + const std::vector<std::pair<int, double>>& nmu2, int SubProcess, double w); + +protected: + void ReadCoeffAddBase(std::istream& table, int ITabVersionRead); + int GetScaledimfromvar(int scalevar) const; + + int IRef = 0; + int IScaleDep = 0; + double Nevt = 0; + int Npow = 0; + std::vector < int > NPDFPDG; + int NPDFDim = 0; + std::vector < int > NFFPDG; + int NFFDim = 0; + int NSubproc = 0; + int IPDFdef1 = 0; + int IPDFdef2 = 0; + int IPDFdef3 = 0; + std::vector<std::vector<std::pair<int,int> > > fPDFCoeff; //! fPDFCoeff[iSubProc][iPartonPair][pair] + // Missing: linear PDF combinations for IPDFdef1=0 + std::vector < double > Hxlim1; + fastNLO::v2d XNode1; + std::vector < double > Hxlim2; + fastNLO::v2d XNode2; + std::vector < int > Nztot; + std::vector < double > Hzlim; + fastNLO::v2d ZNode; + int NScales = 0; + int NScaleDim = 0; + std::vector < int > Iscale; // not used + std::vector < std::vector < std::string > > ScaleDescript; + + std::vector < bool > sub_enabled; + + fastNLO::WgtStat fWgt; //!< event and weight counts + // double fWgtNevt = 0; //!< 'number of events', i.e. normalisation as suggested by generator (identical to previously use 'Nevt') + // unsigned long long fWgtNumEv = 0; //!< number of entries + // double fWgtSumW2 = 0; //!< Sum of all weight**2 + // double fSigSumW2 = 0; //!< Sum of all sigma**2 (i.e. (wgt*alpha*pdf)**2 ) + // double fSigSum = 0; //!< Sum of all sigma (i.e. (wgt*alpha*pdf)**2 ) + // fastNLO::v2d fWgtObsSumW2; //!< sumw2[proc][obs] + // fastNLO::v2d fSigObsSumW2; //!< sumw2[proc][obs] + // fastNLO::v2d fSigObsSum; //!< sum[proc][obs] + // std::vector < std::vector < unsigned long long > > fWgtObsNumEv; //!< Nentries[proc][obs] + + +}; + +#endif diff --git a/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffAddFix.h b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffAddFix.h new file mode 100644 index 0000000000000000000000000000000000000000..6c97460ec1c0bed1585b5734d447cb95a80c7c60 --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffAddFix.h @@ -0,0 +1,82 @@ +#ifndef __fastNLOCoeffAddFix__ +#define __fastNLOCoeffAddFix__ + +#include "fastNLOCoeffAddBase.h" +#include "fastNLOConstants.h" +#include "fastNLOEvent.h" + + +class fastNLOCoeffAddFix : public fastNLOCoeffAddBase { + + friend class fastNLOTable; + friend class fastNLOReader; + friend class fastNLOCreate; + +public: + fastNLOCoeffAddFix() = delete; + fastNLOCoeffAddFix(int NObsBin); + explicit fastNLOCoeffAddFix(const fastNLOCoeffBase&); + virtual ~fastNLOCoeffAddFix(){;} + virtual fastNLOCoeffAddFix* Clone() const; //!< returns 'new' copy of this instance. + static bool CheckCoeffConstants(const fastNLOCoeffBase* c, bool quiet = false); + virtual void Read(std::istream&table, int ITabVersionRead); + void ReadRest(std::istream& table, int ITabVersionRead); + virtual void Write(std::ostream& table, int ITabVersionWrite); + virtual void Add(const fastNLOCoeffAddBase& other, fastNLO::EMerge moption = fastNLO::kMerge); + virtual void Print(int iprint) const; + + // Manipulate coefficient bins + virtual void Clear();//!< Clear all coefficients and event counters + virtual void NormalizeCoefficients(double wgt=1);//!<a Set number of events to wgt and re-normalize coefficients accordingly + virtual void NormalizeCoefficients(const std::vector<std::vector<double> >& wgtProcBin); + virtual void MultiplyCoefficientsByConstant(double fact);//!< Multiply all coefficients of all bins by a constant factor + virtual void MultiplyBin(unsigned int iObsIdx, double fact); //!< Multiply coefficients of one bin a factor + virtual void MultiplyBinProc(unsigned int iObsIdx, unsigned int iProc, double fact); //!< Multiply coefficients of one bin and subprocess by a factor + // Erase observable bin from table + virtual void EraseBin(unsigned int iObsIdx, int ITabVersionRead); + // Catenate observable to table + virtual void CatBin(const fastNLOCoeffAddFix& other, unsigned int iObsIdx, int ITabVersionRead); + + int GetTotalScalevars() const ; + int GetTotalScalenodes() const ; + int GetNScaleNode() const { return GetTotalScalenodes(); } + int GetNScalevar() const { return Nscalevar[0];} + fastNLO::v1d GetAvailableScaleFactors() const { return ScaleFac[0]; } + double GetScaleFactor(int iVar) const { + if ( iVar >= (int)ScaleFac[0].size() ) + this->error["GetScaleFactor"]<<"Scalevariation no. "<<iVar<<" not available. There are only "<<GetNScalevar()<<" available in this table."<< std::endl; + return ScaleFac[0][iVar]; + } + + double GetSigmaTilde(int iObs, int iSvar, int ix, int is, int iN ) const { return SigmaTilde[iObs][iSvar][ix][is][iN];} + double GetScaleNode(int iObs, int iSvar, int iNode ) const { return ScaleNode[iObs][0][iSvar][iNode]; } + std::vector < double > GetScaleNodes(int iObs, int iSvar) const { return ScaleNode[iObs][0][iSvar]; } + + void ResizePdfLC(); + void ResizePdfSplLC(); + void ResizeSigmaTilde(); + bool IsCompatible(const fastNLOCoeffAddFix& other) const; //!< Check for compatibility of two contributions for merging/adding + bool IsCatenable(const fastNLOCoeffAddFix& other) const; //!< Check for compatibility of two contributions for merging/adding + bool IsEquivalent(const fastNLOCoeffBase& other, double rtol) const; + + void ExtendSigmaTildeX(int ObsBin, unsigned int OldXSize1, unsigned int OldXSize2); + void Fill(fnloEvent& Event, int ObsBin, int X, int scalevar, const std::vector<std::pair<int, double>>& nmu1, + const std::vector<std::pair<int, double>>& nmu2, int SubProcess, double w); + +protected: + void ReadCoeffAddFix(std::istream& table, int ITabVersionRead); + + std::vector < int > Nscalevar; + //std::vector < int > Nscalenode; + fastNLO::v2d ScaleFac; + fastNLO::v4d ScaleNode; + fastNLO::v5d SigmaTilde; // units are (p)barn * Nevt / BinSize + +public: + fastNLO::v2d AlphasTwoPi_v20; + fastNLO::v4d PdfLc; + fastNLO::v4d PdfSplLc1; + fastNLO::v4d PdfSplLc2; +}; + +#endif diff --git a/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffAddFlex.h b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffAddFlex.h new file mode 100644 index 0000000000000000000000000000000000000000..80fd287cd99a653e60b84c563700359374017a76 --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffAddFlex.h @@ -0,0 +1,92 @@ +#ifndef __fastNLOCoeffAddFlex__ +#define __fastNLOCoeffAddFlex__ + +#include "fastNLOCoeffAddBase.h" +#include "fastNLOConstants.h" + + +class fastNLOCoeffAddFlex : public fastNLOCoeffAddBase { + + friend class fastNLOTable; + friend class fastNLOReader; + friend class fastNLOCreate; + +public: + fastNLOCoeffAddFlex() = delete; + fastNLOCoeffAddFlex(int NObsBin, int iLOord); + explicit fastNLOCoeffAddFlex(const fastNLOCoeffBase& base , int iLOord); + virtual ~fastNLOCoeffAddFlex(){;} + virtual fastNLOCoeffAddFlex* Clone() const; //!< returns 'new' copy of this instance. + static bool CheckCoeffConstants(const fastNLOCoeffBase* c, bool quiet = false) ; + virtual void Read(std::istream& table, int ITabVersionRead); + void ReadRest(std::istream& table, int ITabVersionRead); + virtual void Write(std::ostream& table, int ITabVersionWrite); + virtual void Print(int iprint) const; + virtual void Add(const fastNLOCoeffAddBase& other, fastNLO::EMerge moption = fastNLO::kMerge); + + // Manipulate coefficient bins + virtual void Clear(); //!< Clear all coefficients and event counters + virtual void NormalizeCoefficients(double wgt=1); //!< Set number of events to given wgt and re-normalize coefficients accordingly + virtual void NormalizeCoefficients(const std::vector<std::vector<double> >& wgtProcBin); + virtual void MultiplyCoefficientsByConstant(double fact); //!< Multiply all coefficients of all bins by a constant factor + virtual void MultiplyBin(unsigned int iObsIdx, double fact); //!< Multiply coefficients of one bin a factor (iObsIdx starting with index 0) + virtual void MultiplyBinProc(unsigned int iObsIdx, unsigned int iProc, double fact); //!< Multiply coefficients of one bin and subprocess a factor + virtual void EraseBin(unsigned int iObsIdx, int ITabVersionRead); //!< Erase observable bin from table + virtual void CatBin(const fastNLOCoeffAddFlex& other, unsigned int iObsIdx, int ITabVersionRead); //!< Catenate observable to table + + unsigned int GetNScaleNode1(int iObsBin) const { return ScaleNode1[iObsBin].size(); }; + unsigned int GetNScaleNode2(int iObsBin) const { return ScaleNode2[iObsBin].size(); }; + double GetScaleNode1(int iObsBin, int iNode) const { return ScaleNode1[iObsBin][iNode]; }; + double GetScaleNode2(int iObsBin, int iNode) const { return ScaleNode2[iObsBin][iNode]; }; + fastNLO::v2d* AccessScaleNode1() { return &XNode1; } + fastNLO::v2d* AccessScaleNode2() { return &XNode2; } + const std::vector < double >& GetScaleNodes1(int iObsBin) const { return ScaleNode1[iObsBin]; }; + const std::vector < double >& GetScaleNodes2(int iObsBin) const { return ScaleNode2[iObsBin]; }; + bool IsCompatible(const fastNLOCoeffAddFlex& other) const; //!< check for compatibilty for adding/merging of two tables + bool IsCatenable(const fastNLOCoeffAddFlex& other) const; //!< Check for compatibility of two contributions for merging/adding + std::vector<fastNLO::v5d*> AccessSigmaTildes() { + return {&SigmaTildeMuIndep,&SigmaTildeMuRDep,&SigmaTildeMuFDep,&SigmaTildeMuRRDep,&SigmaTildeMuFFDep,&SigmaTildeMuRFDep}; + };//!< Get access to sigma tilde + std::vector<const fastNLO::v5d*> GetSigmaTildes() const { + return {&SigmaTildeMuIndep,&SigmaTildeMuRDep,&SigmaTildeMuFDep,&SigmaTildeMuRRDep,&SigmaTildeMuFFDep,&SigmaTildeMuRFDep}; + };//!< Get access to sigma tilde + bool IsEquivalent(const fastNLOCoeffBase& other, double rtol) const; + bool IsSigmaTildeEquivalent(const fastNLOCoeffAddFlex* op, const fastNLO::v5d *tst5, const fastNLO::v5d *ost5, double rtol, std::string name) const; + + void ExtendSigmaTildeX(int ObsBin, unsigned int OldXSize1, unsigned int OldXSize2); + void Fill(fnloEvent& Event, int ObsBin, int X, int scalevar, const std::vector<std::pair<int, double>>& nmu1, + const std::vector<std::pair<int, double>>& nmu2, int SubProcess, double w); + +protected: + + void ReadCoeffAddFlex(std::istream& table, int ITabVersionRead); + void ExtendSigmaTilde(const fastNLOCoeffAddFlex& othflex, fastNLO::v5d& ThisSigmaTilde, fastNLO::v5d& OtherSigmaTilde); + + int fILOord; // obtained from Scenario + int fSTildeDISFormat = 1; // format of sigma-tilde coefficients (0: log(mu2/q2), 1: log(mu2)) + + // SigmaTilde [NObsBins] ['n' x-nodes] [n s1-Nodes] [n s2-Nodes] [nsubproc] + fastNLO::v5d SigmaTildeMuIndep; // units are (p)barn * Nevt / BinSize + fastNLO::v5d SigmaTildeMuFDep; + fastNLO::v5d SigmaTildeMuRDep; + fastNLO::v5d SigmaTildeMuRRDep; + fastNLO::v5d SigmaTildeMuFFDep; + fastNLO::v5d SigmaTildeMuRFDep; + // SigmaRef [NObsBins] [nsubproc] + fastNLO::v2d SigmaRefMixed; // units are (p)barn * Nevt / BinSize + fastNLO::v2d SigmaRef_s1; + fastNLO::v2d SigmaRef_s2; + //int NscalenodeScale1; + //int NscalenodeScale2; + // ScaleNodeXY [ObsBin] [NscalenodeScaleX] + fastNLO::v2d ScaleNode1; + fastNLO::v2d ScaleNode2; + +public: + fastNLO::v3d AlphasTwoPi; + fastNLO::v5d PdfLcMuVar; + fastNLO::v5d PdfXfx; + +}; + +#endif diff --git a/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffBase.h b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffBase.h new file mode 100644 index 0000000000000000000000000000000000000000..b6d519476445f0852a34c614e566aa32156aa4a2 --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffBase.h @@ -0,0 +1,136 @@ +#ifndef __fastNLOCoeffBase__ +#define __fastNLOCoeffBase__ + +#include <string> +#include <fstream> +#include <sstream> +#include <math.h> +#include <vector> +#include <iostream> + +#include "fastNLOConstants.h" +#include "speaker.h" + + +class fastNLOCoeffBase : public PrimalScream { + + friend class fastNLOTable; + +public: + fastNLOCoeffBase() = delete; + fastNLOCoeffBase(int NObsBin); //! Use this constructor + // deletes instance of derived classes through pointer to base class + virtual ~fastNLOCoeffBase(){}; //! destructor + virtual fastNLOCoeffBase* Clone() const; //!< returns 'new' copy of this instance. + + virtual void Read(std::istream& table, int ITabVersionRead); + virtual void Write(std::ostream& table, int ITabVersionWrite); + virtual void Print(int iprint) const; + + // Erase or multiply observable bin; iObsIdx is the C++ array index to be removed and + // not the observable bin no. running from 1 to fNObsBins + virtual void EraseBin(unsigned int iObsIdx); + virtual void MultiplyBin(unsigned int iObsIdx, double fact); + // Catenate observable to table + virtual void CatBin(const fastNLOCoeffBase& other, unsigned int iObsIdx); + + bool IsCatenable(const fastNLOCoeffBase& other) const; + virtual bool IsEquivalent(const fastNLOCoeffBase& other, double rtol) const; + + void SetCoeffAddDefaults(); + + /// ___________________________________________________________________________________________________ + /// Some info getters & setters for contribution modifications + /// ___________________________________________________________________________________________________ + + int GetIDataFlag() const {return IDataFlag;} + void SetIDataFlag(int n){IDataFlag = n;} + + int GetIAddMultFlag() const {return IAddMultFlag;} + void SetIAddMultFlag(int n){IAddMultFlag = n;} + + int GetIContrFlag1() const {return IContrFlag1;} + void SetIContrFlag1(int n){IContrFlag1 = n;} + + int GetIContrFlag2() const {return IContrFlag2;} + void SetIContrFlag2(int n){IContrFlag2 = n;} + + int GetNScaleDep() const {return NScaleDep;} + void SetNScaleDep(int n){NScaleDep = n;} + + int GetIXsectUnits() const { return IXsectUnits;} + void SetIXsectUnits(int n){IXsectUnits = n;} + + int GetNObsBin() const { return fNObsBins;} + void SetNObsBin(unsigned int nObs) { fNObsBins = nObs;} + + bool GetIsFlexibleScale() const { return (NScaleDep>=3) && (IAddMultFlag==0); } + + /// get/set contribution and code description + std::vector<std::string > GetContributionDescription() const { return CtrbDescript; } + void SetContributionDescription(std::vector<std::string > descr ); + std::vector<std::string > GetCodeDescription() const { return CodeDescript; } + void SetCodeDescription(std::vector<std::string > descr ); + + bool IsLO() const {return IContrFlag1==1 && IContrFlag2==1;} + bool IsNLO() const {return IContrFlag1==1 && IContrFlag2==2;} + bool IsNNLO() const {return IContrFlag1==1 && IContrFlag2==3;} + bool IsCompatible(const fastNLOCoeffBase& other) const; + + bool IsEnabled() const {return enabled;} + void Enable(bool on=true) {enabled = on;} + + // Added to include CoeffInfoBlocks + bool HasCoeffInfoBlock() const {return NCoeffInfoBlocks>0;} + bool HasCoeffInfoBlock(int ICoeffInfoBlockFlag1) const; + bool HasCoeffInfoBlock(int ICoeffInfoBlockFlag1, int ICoeffInfoBlockFlag2) const; + int GetCoeffInfoBlockIndex(int ICoeffInfoBlockFlag1); + int GetCoeffInfoBlockIndex(int ICoeffInfoBlockFlag1, int ICoeffInfoBlockFlag2); + int GetCoeffInfoBlockFlag1(int Index) const { return ICoeffInfoBlockFlag1[Index]; }; + int GetCoeffInfoBlockFlag2(int Index) const { return ICoeffInfoBlockFlag2[Index]; }; + void SetCoeffInfoBlockFlag1(int Index, int iFlag1) { ICoeffInfoBlockFlag1[Index] = iFlag1; }; + void SetCoeffInfoBlockFlag2(int Index, int iFlag2) { ICoeffInfoBlockFlag2[Index] = iFlag2; }; + std::vector< std::string > GetCoeffInfoBlockDescription(int Index) const { return CoeffInfoBlockDescript[Index]; } + std::vector < double > GetCoeffInfoBlockContent(int Index) const { return CoeffInfoBlockContent[Index]; }; + int GetNCoeffInfoBlocks() const {return NCoeffInfoBlocks;} + // Provide uncertainty via input vector + void AddCoeffInfoBlock(int ICoeffInfoBlockFlag1, int ICoeffInfoBlockFlag2, std::vector<std::string> Description, + std::vector<double> Content); + // Provide uncertainty reading from filename + void AddCoeffInfoBlock(int ICoeffInfoBlockFlag1, int ICoeffInfoBlockFlag2, std::vector<std::string> Description, + std::string filename, unsigned int icola = 0, unsigned int icolb = 0, double relfac = 1); + + + +protected: + void ReadBase(std::istream& table, int ITabVersionRead); + void ReadCoeffInfoBlocks(std::istream& table, int ITabVersionRead); + void WriteCoeffInfoBlocks(std::ostream& table, int ITabVersionWrite); + void EndReadCoeff(std::istream& table, int ITabVersionRead); + + int fNObsBins; // obtained from Scenario + + int IXsectUnits; + int IDataFlag; + int IAddMultFlag; + int IContrFlag1; + int IContrFlag2; + int NScaleDep; + int fVersionRead = 23000; + std::vector < std::string > CtrbDescript; + std::vector < std::string > CodeDescript; + + bool enabled = false; + + // Added to include CoeffInfoBlocks + int NCoeffInfoBlocks = 0; // Not present for version numbers < 25000 + std::vector < int > ICoeffInfoBlockFlag1; + std::vector < int > ICoeffInfoBlockFlag2; + std::vector < int > NCoeffInfoBlockDescr; + std::vector < std::vector < std::string > > CoeffInfoBlockDescript; + std::vector < int > NCoeffInfoBlockCont; + fastNLO::v2d CoeffInfoBlockContent; +}; + + +#endif diff --git a/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffData.h b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffData.h new file mode 100644 index 0000000000000000000000000000000000000000..27b1302b4e9a3337d7f73f35932141a3e3a17737 --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffData.h @@ -0,0 +1,58 @@ +#ifndef __fastNLOCoeffData__ +#define __fastNLOCoeffData__ + +#include "fastNLOCoeffBase.h" +#include "fastNLOConstants.h" + + +class fastNLOCoeffData : public fastNLOCoeffBase { + + friend class fastNLOTable; + +public: + fastNLOCoeffData() = delete; + fastNLOCoeffData(int NObsBin); + explicit fastNLOCoeffData(const fastNLOCoeffBase&); + virtual ~fastNLOCoeffData(){;}; + virtual fastNLOCoeffData* Clone() const; //!< returns 'new' copy of this instance. + virtual void Read(std::istream& table, int ITabVersionRead); + virtual void Write(std::ostream& table, int ITabVersionWrite); + virtual void Print(int iprint) const; + static bool CheckCoeffConstants(const fastNLOCoeffBase* c, bool quiet = false); + + // Erase observable bin; iObsIdx is the C++ array index to be removed and + // not the observable bin no. running from 1 to fNObsBins + virtual void EraseBin(unsigned int iObsIdx); + virtual void MultiplyBin(unsigned int iObsIdx, double fact); + // Catenate observable to table + virtual void CatBin(const fastNLOCoeffData& other, unsigned int iObsIdx); + bool IsCatenable(const fastNLOCoeffData& other) const; + + // getter/setter + int GetNuncorrel() const {return Nuncorrel;} + void SetNuncorrel(int n){Nuncorrel = n;} + int GetNcorrel() const {return Ncorrel;} + void SetNcorrel(int n){Ncorrel = n;} + int GetNErrMatrix() const {return NErrMatrix;} + void SetNErrMatrix(int n){NErrMatrix = n;} + +protected: + void ReadCoeffData(std::istream& table); + void ReadRest(std::istream& table, int ITabVersionRead); + + int Nuncorrel; + std::vector<std::string > UncDescr; + int Ncorrel; + std::vector<std::string > CorDescr; + std::vector<double > Xcenter; + std::vector<double > Value; + fastNLO::v2d UncorLo; + fastNLO::v2d UncorHi; + fastNLO::v2d CorrLo; + fastNLO::v2d CorrHi; + int NErrMatrix; + fastNLO::v2d matrixelement; + +}; + +#endif diff --git a/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffMult.h b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffMult.h new file mode 100644 index 0000000000000000000000000000000000000000..ecb4c8616cb2cd2d59de1393eb4a10c42e553b25 --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoeffMult.h @@ -0,0 +1,63 @@ +#ifndef __fastNLOCoeffMult__ +#define __fastNLOCoeffMult__ + +#include "fastNLOCoeffBase.h" +#include "fastNLOConstants.h" + + +class fastNLOCoeffMult : public fastNLOCoeffBase { + + friend class fastNLOTable; + friend class fastNLOCreate; + +public: + fastNLOCoeffMult() = delete; + fastNLOCoeffMult(int NObsBin); + explicit fastNLOCoeffMult(const fastNLOCoeffBase&); + virtual ~fastNLOCoeffMult(){;}; + virtual fastNLOCoeffMult* Clone() const; //!< returns 'new' copy of this instance. + static bool CheckCoeffConstants(const fastNLOCoeffBase* c, bool quiet = false); + virtual void Read(std::istream& table, int ITabVersionRead); + virtual void Write(std::ostream& table, int ITabVersionWrite); + virtual void Print(int iprint) const; + + double GetMultFactor(int iObs) const { return fact[iObs]; } + std::vector<double > GetMultFactor() const { return fact; } + std::vector<std::string> GetUncDescription() const { return UncDescr; } + std::vector<std::string> GetCorDescription() const { return CorDescr; } + fastNLO::v2d GetUncorLo() const { return UncorLo; }; + fastNLO::v2d GetUncorHi() const { return UncorHi; }; + fastNLO::v2d GetCorrLo() const { return CorrLo; }; + fastNLO::v2d GetCorrHi() const { return CorrHi; }; + + // Erase observable bin; iObsIdx is the C++ array index to be removed and + // not the observable bin no. running from 1 to fNObsBins + virtual void EraseBin(unsigned int iObsIdx); + virtual void MultiplyBin(unsigned int iObsIdx, double fact); + bool IsCatenable(const fastNLOCoeffMult& other) const; + // Catenate observable to table + virtual void CatBin(const fastNLOCoeffMult& other, unsigned int iObsIdx); + + // getter/setter + int GetNuncorrel() const {return Nuncorrel;} + void SetNuncorrel(int n){Nuncorrel = n;} + int GetNcorrel() const {return Ncorrel;} + void SetNcorrel(int n){Ncorrel = n;} + +protected: + void ReadCoeffMult(std::istream& table); + void ReadRest(std::istream& table, int ITabVersionRead); + + int Nuncorrel; + std::vector < std::string > UncDescr; + int Ncorrel; + std::vector < std::string > CorDescr; + fastNLO::v2d UncorLo; + fastNLO::v2d UncorHi; + fastNLO::v2d CorrLo; + fastNLO::v2d CorrHi; + fastNLO::v1d fact; + +}; + +#endif diff --git a/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoefficients.h b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoefficients.h new file mode 100644 index 0000000000000000000000000000000000000000..4dd756dcaaccfd3cc4462061a955f5d27a08f714 --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCoefficients.h @@ -0,0 +1,233 @@ +#ifndef __fastNLOCoefficients__ +#define __fastNLOCoefficients__ + +#include <string> +#include <fstream> +#include <sstream> +#include <math.h> +#include <vector> +#include <iostream> + +#include "fastNLOConstants.h" + + +class fastNLOCoefficients { + + friend class fastNLOTable; + friend class fastNLOCreate; + +public: + fastNLOCoefficients(); + fastNLOCoefficients(int NObsBin, int iLOord); + int Read(std::istream *table); + int Write(std::ostream *table, int option = 0); + int Copy(fastNLOCoefficients* other); + + void StripWhitespace(std::string& s) const; + + // template<typename T> void ResizeFlexibleVector(std::vector<T>* v, std::vector<T>* nom); + // void ResizeFlexibleVector(std::vector<double >* v, std::vector<double >*nom ){ v->resize(nom->size());}; + + void ResizeTable( std::vector<double >* v, int dim0 ); + void ResizeTable( std::vector<std::vector<double > >* v, int dim0 , int dim1 ); + void ResizeTable( std::vector<std::vector<double > >* v, int dim0 , int* dim1GetNxmaxFromDimI ); + void ResizeTable( std::vector<std::vector<std::vector<double > > >* v, int dim0 , int* dim1GetNxmaxFromDimI, int dim2 ); + void ResizeTable( std::vector<std::vector<std::vector<double > > >* v, int dim0 , int dim1, int dim2 ); + void ResizeTable( std::vector<std::vector<std::vector<std::vector<double > > > >* v, int dim0 , int dim1, int dim2, int dim3 ); + void ResizeTable( std::vector<std::vector<std::vector<std::vector<double > > > >* v, int dim0 , int dim1, int* dim2GetNxmaxFromDimI, int dim3 ); + void ResizeTable( std::vector<std::vector<std::vector<std::vector<std::vector<double > > > > >* v, int dim0 , int dim1, int dim2, int dim3, int dim4 ); + void ResizeTable( std::vector<std::vector<std::vector<std::vector<std::vector<double > > > > >* v, int dim0 , int dim1, int dim2, int* dim3GetNxmaxFromDimI, int dim4 ); + void ResizeTable( std::vector<std::vector<std::vector<std::vector<std::vector<double > > > > >* v, int dim0 , int* dim1GetNxmaxFromDimI, int dim2, int dim3, int dim4 ); + void ResizeTable( std::vector<std::vector<std::vector<std::vector<std::vector<std::vector<double > > > > > >* v, int dim0 , int dim1, int dim2, int dim3, int dim4, int dim5 ); + void ResizeTable( std::vector<std::vector<std::vector<std::vector<std::vector<std::vector<std::vector<double > > > > > > >* v, int dim0 , int dim1, int dim2, int dim3, int dim4, int dim5, int dim6 ); + void ResizeTable( std::vector<std::vector<std::vector<std::vector<std::vector<std::vector<std::vector<double > > > > > > >* v, int dim0 , int dim1, int dim2, int dim3, int dim4, int* dim5GetNxmaxFromDimI , int dim6 ); + + + template<typename T> int ReadTable( std::vector<T>* v, std::istream *table ); + int ReadTable( std::vector<double>* v, std::istream *table ); + + template<typename T> int ReadFlexibleVector(std::vector<T>* v, std::istream* table, bool nProcLast=false); + int ReadFlexibleVector( std::vector<double >* v, std::istream *table , bool nProcLast = false ); + + int WriteTable( std::vector<std::vector<std::vector<std::vector<std::vector<std::vector<std::vector<double > > > > > > >* v, std::ostream *table , bool DivByNevt=false , int Nevt=1 ); + int WriteTable( std::vector<std::vector<std::vector<std::vector<std::vector<std::vector<double > > > > > >* v, std::ostream *table , bool DivByNevt=false, int Nevt=1 ); + int WriteTable( std::vector<std::vector<std::vector<std::vector<std::vector<double > > > > >* v, std::ostream *table , bool DivByNevt=false, int Nevt=1 ); + int WriteTable( std::vector<std::vector<std::vector<std::vector<double > > > >* v, std::ostream *table , bool DivByNevt=false, int Nevt=1 ); + int WriteTable( std::vector<std::vector<std::vector<double > > >* v, std::ostream *table , bool DivByNevt=false, int Nevt=1 ); + int WriteTable( std::vector<std::vector<double > >* v, std::ostream *table , bool DivByNevt=false, int Nevt=1 ); + int WriteTable( std::vector<double >* v, std::ostream *table , bool DivByNevt=false, int Nevt=1 ); + + int WriteFlexibleTable( std::vector<std::vector<std::vector<std::vector<std::vector<std::vector<std::vector<double > > > > > > >* v, std::ostream *table , bool DivByNevt=false , int Nevt=1 , bool nProcLast = false ); + int WriteFlexibleTable( std::vector<std::vector<std::vector<std::vector<std::vector<std::vector<double > > > > > >* v, std::ostream *table , bool DivByNevt=false, int Nevt=1 , bool nProcLast = false ); + int WriteFlexibleTable( std::vector<std::vector<std::vector<std::vector<std::vector<double > > > > >* v, std::ostream *table , bool DivByNevt=false, int Nevt=1 , bool nProcLast = false ); + int WriteFlexibleTable( std::vector<std::vector<std::vector<std::vector<double > > > >* v, std::ostream *table , bool DivByNevt=false, int Nevt=1 , bool nProcLast = false ); + int WriteFlexibleTable( std::vector<std::vector<std::vector<double > > >* v, std::ostream *table , bool DivByNevt=false, int Nevt=1 , bool nProcLast = false ); + int WriteFlexibleTable( std::vector<std::vector<double > >* v, std::ostream *table , bool DivByNevt=false, int Nevt=1 , bool nProcLast = false ); + int WriteFlexibleTable( std::vector<double >* v, std::ostream *table , bool DivByNevt=false, int Nevt=1 , bool nProcLast = false ); + + void AddTableToAnotherTable( std::vector<std::vector<std::vector<std::vector<std::vector<std::vector<std::vector<double > > > > > > >* vSum, std::vector<std::vector<std::vector<std::vector<std::vector<std::vector<std::vector<double > > > > > > >* vAdd, double w1 = 0, double w2 = 0 ); + void AddTableToAnotherTable( std::vector<std::vector<std::vector<std::vector<std::vector<std::vector<double > > > > > >* vSum, std::vector<std::vector<std::vector<std::vector<std::vector<std::vector<double > > > > > >* vAdd, double w1 = 1, double w2 = 1 ); + void AddTableToAnotherTable( std::vector<std::vector<std::vector<std::vector<std::vector<double > > > > >* vSum, std::vector<std::vector<std::vector<std::vector<std::vector<double > > > > >* vAdd, double w1 = 1, double w2 = 1 ); + void AddTableToAnotherTable( std::vector<std::vector<std::vector<std::vector<double > > > >* vSum, std::vector<std::vector<std::vector<std::vector<double > > > >* vAdd, double w1 = 1, double w2 = 1 ); + void AddTableToAnotherTable( std::vector<std::vector<std::vector<double > > >* vSum, std::vector<std::vector<std::vector<double > > >* vAdd, double w1 = 1, double w2 = 1 ); + void AddTableToAnotherTable( std::vector<std::vector<double > >* vSum, std::vector<std::vector<double > >* vAdd, double w1 = 1, double w2 = 1 ); + void AddTableToAnotherTable( std::vector<double >* vSum, std::vector<double >* vAdd, double w1 = 1, double w2 = 1 ); + + void Print() const; + + int GetIRef() const {return IRef;} + int GetIDataFlag() const {return IDataFlag;} + int GetIAddMultFlag() const {return IAddMultFlag;} + int GetIContrFlag1() const {return IContrFlag1;} + int GetIContrFlag2() const {return IContrFlag2;} + int GetNScaleDep() const {return NScaleDep;} + int GetNpow() const {return Npow;} + long long int GetNevt() const {return Nevt;} + int GetNxmax(int Obsbin) const ; + int GetXIndex(int Obsbin,int x1bin,int x2bin =0) const ; + + void SetNlojetDefaults(); + void SetIXsectUnits(int n){IXsectUnits = n;} + void SetIDataFlag(int n){IDataFlag = n;} + void SetIAddMultFlag(int n){IAddMultFlag = n;} + void SetIContrFlag1(int n){IContrFlag1 = n;} + void SetIContrFlag2(int n){IContrFlag2 = n;} + void SetNScaleDep(int n){NScaleDep = n;} + void SetNlojetDescr(){ + CodeDescript.push_back("NLOJet++_4.1.3"); + CodeDescript.push_back("Z. Nagy, Phys. Rev. Lett. 88, 122003 (2002),"); + CodeDescript.push_back("Z. Nagy, Phys. Rev. D68, 094002 (2003)."); + } + + void Add(fastNLOCoefficients* other); + bool IsLO() const {return IContrFlag1==1 && IContrFlag2==1;} + bool IsNLO() const {return IContrFlag1==1 && IContrFlag2==2;} + bool IsReference() const {return IRef>0;}; + int GetTotalScalevars() const ; + int GetTotalScalenodes() const ; + + static const int DividebyNevt = 1; // shitty definition of a global constant + +private: + int GetScaledimfromvar(int scalevar) const; + + +protected: + + //fastNLOScenario *fScen; + int fNObsBins; // obtained from Scenario + int fILOord; // obtained from Scenario + + int IXsectUnits; + int IDataFlag; + int IAddMultFlag; + int IContrFlag1; + int IContrFlag2; + int NScaleDep; + // obsolete int NContrDescr; + std::vector < std::string > CtrbDescript; + // obsolete int NCodeDescr; + std::vector < std::string > CodeDescript; + int Nuncorrel; + std::vector < std::string > UncDescr; + int Ncorrel; + std::vector < std::string > CorDescr; + std::vector < double > Xcenter; + std::vector < double > Value; + std::vector < std::vector < double > > UncorLo; + std::vector < std::vector < double > > UncorHi; + std::vector < std::vector < double > > CorrLo; + std::vector < std::vector < double > > CorrHi; + int NErrMatrix; + std::vector < std::vector < double > > matrixelement; + std::vector < double > fact; + int IRef; + int IScaleDep; + unsigned long long int Nevt; + int Npow; + int NPDF; + std::vector < int > NPDFPDG; + int NPDFDim; + int NFragFunc; + std::vector < int > NFFPDG; + int NFFDim; + int NSubproc; + int IPDFdef1; + int IPDFdef2; + int IPDFdef3; + // Missing: linear PDF combinations for IPDFdef1=0 + //std::vector < int > Nxtot1; + std::vector < double > Hxlim1; + std::vector < std::vector < double > > XNode1; + //std::vector < int > Nxtot2; + std::vector < double > Hxlim2; + std::vector < std::vector < double > > XNode2; + std::vector < int > Nztot; + std::vector < double > Hzlim; + std::vector < std::vector < double > > ZNode; + int NScales; + int NScaleDim; + std::vector < int > Iscale; + // obsolete std::vector < int > NscaleDescript; + std::vector < std::vector < std::string > > ScaleDescript; + + + // ------------------------ not flexible scale --------------------------- // + std::vector < int > Nscalevar; + std::vector < int > Nscalenode; + std::vector < std::vector < double > > ScaleFac; + std::vector < std::vector < std::vector < std::vector < double > > > > ScaleNode; + //std::vector < std::vector < std::vector < std::vector < double > > > > HScaleNode; + std::vector < std::vector < std::vector < std::vector < std::vector < double > > > > > SigmaTilde; + + // --------------------------- flexible scale --------------------------- // + // ---- members to write to disc ---- // + // SigmaTilde [NObsBins] ['n' x-nodes] [n s1-Nodes] [n s2-Nodes] [nsubproc] + std::vector < std::vector < std::vector < std::vector < std::vector < double > > > > > SigmaTildeMuIndep; + std::vector < std::vector < std::vector < std::vector < std::vector < double > > > > > SigmaTildeMuFDep; + std::vector < std::vector < std::vector < std::vector < std::vector < double > > > > > SigmaTildeMuRDep; + // SigmaRef [NObsBins] [nsubproc] + std::vector < std::vector < double > > SigmaRefMixed; + std::vector < std::vector < double > > SigmaRef_s1; + std::vector < std::vector < double > > SigmaRef_s2; + int NscalenodeScale1; + int NscalenodeScale2; + // ScaleNodeXY [ObsBin] [NscalenodeScaleX] + std::vector < std::vector < double > > ScaleNode1; + std::vector < std::vector < double > > ScaleNode2; + // std::vector < std::vector < double > > HScaleNode1; + // std::vector < std::vector < double > > HScaleNode2; + +}; + + +template<typename T> +int fastNLOCoefficients::ReadFlexibleVector(std::vector<T>* v, std::istream* table, bool nProcLast){ + int nn = 0; + int size = 0; + *table >> size; nn++; + v->resize(size); + for(unsigned int i0=0;i0<v->size();i0++){ + nn += ReadFlexibleVector(&(v->at(i0)),table,nProcLast); + } + return nn; +}; + + +// template<typename T> +// void fastNLOCoefficients::ResizeFlexibleVector(std::vector<T>* v, std::vector<T>* nom){ +// v->resize(nom->size()); +// for ( unsigned int i = 0 ; i<v->size() ; i++ ){ +// ResizeFlexibleVector(&((*v)[i]),&((*nom)[i])); +// } +// }; + +template<typename T> int fastNLOCoefficients::ReadTable( std::vector<T>* v, std::istream *table ){ + int nn = 0; + for(unsigned int i0=0;i0<v->size();i0++){ + nn+= ReadTable(&(*v)[i0],table); + } + return nn; +}; + +#endif diff --git a/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOConstants.h.in b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOConstants.h.in new file mode 100644 index 0000000000000000000000000000000000000000..5a1a9beab5bea763d2159dfd057b6a59276e0c2b --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOConstants.h.in @@ -0,0 +1,280 @@ +#ifndef __fnloconstants__ +#define __fnloconstants__ + +// NEVER EVER include a project's internal config.h in installable header files! +// Use for conditional compilation only in .cc source code files. +// Otherwise conflicts with other linked projects are to be expected. +#include <optional> +#include <set> +#include <string> +#include <unordered_map> +#include <vector> + +#ifndef FNLO_NAME +#define FNLO_NAME "@PACKAGE_NAME@" +#define FNLO_SUBPROJECT "@SUBPROJECT@" +#define FNLO_VERSION "@PACKAGE_VERSION@" +#define FNLO_GITREV "@GITREV@" +#define FNLO_AUTHORS "@AUTHORS@" +#define FNLO_WEBPAGE "@WEBPAGE@" +#define FNLO_AUTHORSv14 "@AUTHORSv14@" +#define FNLO_QUOTEv14 "@QUOTEv14@" +#define FNLO_AUTHORSv2 "@AUTHORSv2@" +#define FNLO_QUOTEv2 "@QUOTEv2@" +#define FNLO_YEARS "@YEARS@" +#endif + +// KR: Replace by precompiler defines +const double TWOPI = 6.28318530717958647692528; +const double TWOPISQR = 39.47841760435743447533796; +const double TOCL90 = 1.64485362695147271486385; // SQRT(2.D0)*InvERF(0.9D0) +//#define TWOPI (2.*M_PI) +//#define TWOPISQR (4.*M_PI*M_PI) +// PDG values 2017, MSbar except MT +#define PDG_MU (0.0022) +#define PDG_MD (0.0047) +#define PDG_MS (0.096) +#define PDG_MC (1.28) +#define PDG_MB (4.18) +#define PDG_MT (173.1) +#define PDG_MZ (91.1876) +#define PDG_ASMZ (0.1182) + +namespace fastNLO { + + // ---- typedefs ---- // + typedef std::vector<double > v1d; + typedef std::vector<std::vector<double > > v2d; + typedef std::vector<std::vector<std::vector<double > > > v3d; + typedef std::vector<std::vector<std::vector<std::vector<double > > > > v4d; + typedef std::vector<std::vector<std::vector<std::vector<std::vector<double > > > > > v5d; + typedef std::vector<std::vector<std::vector<std::vector<std::vector<std::vector<double > > > > > > v6d; + typedef std::vector<std::vector<std::vector<std::vector<std::vector<std::vector<std::vector<double > > > > > > > v7d; + + // ---- constants ---- // + static const std::set<int> CompatibleVersions{20000,21000,22000,23000,23500,23600,25000,26000}; + const int tabversion = 26000; + const int tablemagicno = 1234567890; + // separating character between entries in table + const char sep[] = "\n"; + // const double TWOPI = 6.28318530717958647692528; + + + // ---- enumerators ---- // + enum EMuX { + kMuR = 0, // renormalization scale + kMuF = 1 // factorization scale + }; + + enum EScaleFunctionalForm { + kScale1 = 0, // e.g. mu^2 = Q^2 + kScale2 = 1, // e.g. mu^2 = pt^2 + kQuadraticSum = 2, // e.g. mu^2 = ( Q^2 + pt^2 ) + kQuadraticMean = 3, // e.g. mu^2 = ( Q^2 + pt^2 ) / 2 + kQuadraticSumOver4 = 4, // e.g. mu^2 = ( Q^2 + pt^2 ) / 4 + kLinearMean = 5, // e.g. mu^2 = (( Q + pt ) / 2 )^2 + kLinearSum = 6, // e.g. mu^2 = (( Q + pt ))^2 + kScaleMax = 7, // e.g. mu^2 = max( Q^2, pt^2) + kScaleMin = 8, // e.g. mu^2 = min( Q^2, pt^2) + kProd = 9, // e.g. mu^2 = (scale1 * scale2) ^2 + kS2plusS1half = 10, // e.g. mu^2 = (scale1^1/2 + scale2^2) + kPow4Sum = 11, // e.g. mu^2 = sqrt((scale1^4 + scale2^4)) + kWgtAvg = 12, // e.g. mu^2 = sqrt( (scale1^4 + scale2^4)/(scale1^2 + scale2^2)) [weighted average] + kS2plusS1fourth = 13, // e.g. mu^2 = (scale1^1/4 + scale2^2) + kExpProd2 = 14, // e.g. mu^2 = (scale1 * exp(0.3 * scale2)) ^2 + kExtern = 15, // define an external function for your scale + kConst = 16, // e.g. mu^2 = c, while c is a constant and could be for instance the top-mass + }; + + enum ESMCalculation { + kFixedOrder = 0, // Fixed order calculation (pQCD) + kThresholdCorrection = 1, // Threshold corrections + kElectroWeakCorrection = 2, // Electroweak corrections + kNonPerturbativeCorrection= 3, // Non-perturbative corrections|Hadronisation corrections + kContactInteraction = 10 // Contact interactions + }; + + enum ESMOrder { + kLeading = 0, // LO, 1-loop, LO MC + kNextToLeading = 1, // NLO, 2-loop, NLO MC + kNextToNextToLeading = 2 // NNLO, 3-loop, NNLO MC + }; + + enum EUnits { + kAbsoluteUnits = 0, // calculate the cross section in barn for each publicated bin + kPublicationUnits = 1 // calculate the cross section in units as given in the according publication + }; + + enum EScaleUncertaintyStyle { + kScaleNone = 0, // no scale uncertainty, only central scale (mu_r,mu_f) = (1,1) evaluated + kSymmetricTwoPoint = 1, // symmetric (mu_r,mu_f) scale variations by factors (1/2,1/2), (2,2) + kAsymmetricSixPoint = 2, // asymmetric (mu_r,mu_f) scale variations by factors (1/2,1/2), (2,2) plus + // (1/2,1), (1,1/2), (1,2), (2,1) + kAsymmetricRatio = 3 // 30(+1) combinations for mu_r, mu_f in numerator and denominator + }; + + constexpr std::string_view ScaleUncertaintyStyle_to_string(EScaleUncertaintyStyle estyle) { + switch (estyle) { + case kScaleNone: return "NN"; + case kSymmetricTwoPoint: return "2P"; + case kAsymmetricSixPoint: return "6P"; + case kAsymmetricRatio: return "30"; + default: return "??"; + } + } + + constexpr std::optional<EScaleUncertaintyStyle> ScaleUncertaintyStyle_to_enum(std::string_view sstyle) { + if (sstyle == "NN") return kScaleNone; + if (sstyle == "2P") return kSymmetricTwoPoint; + if (sstyle == "6P") return kAsymmetricSixPoint; + if (sstyle == "30") return kAsymmetricRatio; + return{kScaleNone}; + } + + enum ENumUncertaintyStyle { + kNumNone = 0, // no numerical uncertainty + kStatInt = 1, // statistical uncertainty from MC integration + kApproxBias = 2 // bias from approximation through interpolation + }; + + constexpr std::string_view NumUncertaintyStyle_to_string(ENumUncertaintyStyle estyle) { + switch (estyle) { + case kNumNone: return "NN"; + case kStatInt: return "ST"; + case kApproxBias: return "AB"; + default: return "??"; + } + } + + constexpr std::optional<ENumUncertaintyStyle> NumUncertaintyStyle_to_enum(std::string_view sstyle) { + if (sstyle == "NN") return kNumNone; + if (sstyle == "ST") return kStatInt; + if (sstyle == "AB") return kApproxBias; + return{kNumNone}; + } + + enum EPDFUncertaintyStyle { + kPDFNone = 0, // No PDF uncertainty, only averaged cross section result evaluated (Correct for NNPDF, wrong otherwise!) + kLHAPDF6 = 1, // LHAPDF6 uncertainties (recommended if LHAPDF6 is available) + kHessianSymmetric = 2, // symmetric Hessian PDF uncertainties (ABM) + kHessianAsymmetric = 3, // asymmetric Hessian PDF uncertainties + kHessianAsymmetricMax = 4, // asymmetric Hessian PDF uncertainties with pairwise max deviations per eigenvector (CTEQ,MRST|MSTW) + kHessianCTEQCL68 = 5, // like kHessianAsymmetricMax, but with uncertainties rescaled to CL68 + kMCSampling = 6, // statistical sampling PDF uncertainties (and central value) (NNPDF) + kHeraPDF10 = 7 // HERAPDF 1.0 uncertainties + }; + + constexpr std::string_view PDFUncertaintyStyle_to_string(EPDFUncertaintyStyle estyle) { + switch (estyle) { + case kPDFNone: return "NN"; + case kLHAPDF6: return "L6"; + case kHessianSymmetric: return "HS"; + case kHessianAsymmetric: return "HA"; + case kHessianAsymmetricMax: return "HP"; + case kHessianCTEQCL68: return "HC"; + case kMCSampling: return "MC"; + case kHeraPDF10: return "H1"; // not yet implemented + default: return "??"; + } + } + + constexpr std::optional<EPDFUncertaintyStyle> PDFUncertaintyStyle_to_enum(std::string_view sstyle) { + if (sstyle == "NN") return kPDFNone; + if (sstyle == "L6") return kLHAPDF6; + if (sstyle == "HS") return kHessianSymmetric; + if (sstyle == "HA") return kHessianAsymmetric; + if (sstyle == "HP") return kHessianAsymmetricMax; + if (sstyle == "HC") return kHessianCTEQCL68; + if (sstyle == "MC") return kMCSampling; + if (sstyle == "H1") return kHeraPDF10; + return{kPDFNone}; + } + + enum EAsUncertaintyStyle { + kAsNone = 0, // no a_s uncertainty + kAsGRV = 1, // a_s(M_Z) uncertainty with GRV evolution + }; + + constexpr std::string_view AsUncertaintyStyle_to_string(EAsUncertaintyStyle estyle) { + switch (estyle) { + case kAsNone: return "NN"; + case kAsGRV: return "AS"; + default: return "??"; + } + } + + constexpr std::optional<EAsUncertaintyStyle> AsUncertaintyStyle_to_enum(std::string_view sstyle) { + if (sstyle == "NN") return kAsNone; + if (sstyle == "AS") return kAsGRV; + return{kAsNone}; + } + + enum EMerge { //!< mergeing options. + kMerge, //!< Calculate weighted average (default. Nevt usually set externally by generator code). + kAdd, //!< Add (Append)! Do not merge, but add two tables together (fully unweighted) (1+1=2). + kUnweighted, //!< Calculated unweighted average (usually better: take kNumEvent). + kAttach, //!< Add (Append)! Same functionality as 'add' but subprocesses are attached and file size increases. + kNumEvent, kNumEventBinProc, //!< Calculate weighted average, using w = num entries + kSumW2, kSumW2BinProc, //!< Calculate weighted average , using w = sum(weight**2) + kSumSig2, kSumSig2BinProc, //!< Calculate weighted average, using w = sum(sig**2) [sig ~ wgt*as*pdf] + kSumUser, kSumUserBinProc, //!< Calculate weighted average, using w = sum(sig) [sig ~ wgt*as*pdf], or 'user-specified' weights + kMedian, kMean, //!< build median or median value of many tables (option not applicable to member function, because many tables are needed as input). + kUndefined //!< Error + }; + + + // ---- some names for nice output ---- // + const std::string _ContrName[20] = { + "Fixed order calculation", "Threshold corrections", "Electroweak corrections", "Non-perturbative corrections", + "Undefined", "Undefined", "Undefined", "Undefined", "Undefined", "Undefined", "Undefined", + "Quark compositeness", "ADD-LED", "TeV 1-ED", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown", "Unknown" + }; + const std::string _OrdName[4][4] = { + { "LO", "NLO", "NNLO" , "N3LO" }, + { "1-loop", "2-loop", "3-loop" , "4-loop" }, + { "Undef" , "Undef" , "Undef" , "Undef" }, + { "LO MC" , "NLO MC", "NNLO MC", "N3LO MC" } + }; + const std::string _fNSDep[6] = {"v2.0","v2.0","v2.0","v2.1","v2.2","v2.2"}; + + + + // ---- Some shapes for nice output ---- // + // +#ifndef SWIG + const std::string _CSEP20("####################"); + const std::string _DSEP20("===================="); + const std::string _SSEP20("--------------------"); + const std::string _TSEP20(" - - - - - - - - - -"); + const std::string _CSEP20C(" ######################"); + const std::string _DSEP20C(" #====================="); + const std::string _SSEP20C(" #---------------------"); + const std::string _TSEP20C(" #- - - - - - - - - - -"); + const std::string _CSEP40 = _CSEP20 + _CSEP20; + const std::string _DSEP40 = _DSEP20 + _DSEP20; + const std::string _SSEP40 = _SSEP20 + _SSEP20; + const std::string _TSEP40 = _TSEP20 + _TSEP20; + const std::string _CSEP40C = _CSEP20C + _CSEP20; + const std::string _DSEP40C = _DSEP20C + _DSEP20; + const std::string _SSEP40C = _SSEP20C + _SSEP20; + const std::string _TSEP40C = _TSEP20C + _TSEP20; + const std::string _CSEPS = _CSEP40 + _CSEP40; + const std::string _DSEPS = _DSEP40 + _DSEP40; + const std::string _SSEPS = _SSEP40 + _SSEP40; + const std::string _TSEPS = _TSEP40 + _TSEP40; + const std::string _CSEPSC = _CSEP40C + _CSEP40; + const std::string _DSEPSC = _DSEP40C + _DSEP40; + const std::string _SSEPSC = _SSEP40C + _SSEP40; + const std::string _TSEPSC = _TSEP40C + _TSEP40; + const std::string _CSEPL = _CSEPS + _CSEPS ; + const std::string _DSEPL = _DSEPS + _DSEPS ; + const std::string _SSEPL = _SSEPS + _SSEPS ; + const std::string _TSEPL = _TSEPS + _TSEPS ; + const std::string _CSEPLC = _CSEPSC + _CSEPS ; + const std::string _DSEPLC = _DSEPSC + _DSEPS ; + const std::string _SSEPLC = _SSEPSC + _SSEPS ; + const std::string _TSEPLC = _TSEPSC + _TSEPS ; +#endif +} + +#endif diff --git a/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCreate.h b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCreate.h new file mode 100644 index 0000000000000000000000000000000000000000..8bace7e196db4047d184f03fb82a362ac91aeabb --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOCreate.h @@ -0,0 +1,293 @@ +// Daniel Britzger +// DESY, 29.07.2013 +#ifndef __fastNLOCreate__ +#define __fastNLOCreate__ + +#include <math.h> +#include <string> +#include <fstream> +#include <vector> +#include <map> +#include <ctime> +#include "fastNLOReader.h" // for reference tables +#include "fastNLOTable.h" +#include "fastNLOEvent.h" +#include "read_steer.h" + +#include "fastNLOInterpolBase.h" +#include "fastNLOCoeffAddBase.h" +#include "fastNLOTableConstants.h" + + +class fastNLOCreate : public fastNLOTable { + //! + //! fastNLOCreate. A class for creating a fastNLO Table which contains + //! exactly one table of coefficients. + //! + //! Member variables are initialized by reading in + //! a steering file. + //! + //! Following information has to be obtained from the generator and is NOT obtained from steering: + //! - Order in alpha_s of leading-order process + //! - Center of mass energy + //! - Order of calculation (LO=0, NLO=1, NNLO=2) + //! + +public: + fastNLOCreate(const fastNLO::GeneratorConstants& GenConsts, const fastNLO::ProcessConstants& ProcConsts, + const fastNLO::ScenarioConstants& ScenConsts, const fastNLO::WarmupConstants& WarmConsts); + // KR: Deprecated, to be replaced by + fastNLOCreate(const std::string& warmupfile, const fastNLO::GeneratorConstants& GenConsts, + const fastNLO::ProcessConstants& ProcConsts, const fastNLO::ScenarioConstants& ScenConsts); + // KR: this one. + fastNLOCreate(const fastNLO::GeneratorConstants& GenConsts, const fastNLO::ProcessConstants& ProcConsts, + const fastNLO::ScenarioConstants& ScenConsts, const std::string& warmupfile); + fastNLOCreate(const fastNLO::GeneratorConstants& GenConsts, const fastNLO::ProcessConstants& ProcConsts, + const fastNLO::ScenarioConstants& ScenConsts, const std::string& warmupfile, + const std::string& steerfile); + // KR: Deprecated, to be replaced by + fastNLOCreate(const std::string& steerfile, const fastNLO::GeneratorConstants& GenConsts, + const fastNLO::ProcessConstants& ProcConsts); + // KR: this one. + fastNLOCreate(const fastNLO::GeneratorConstants& GenConsts, const fastNLO::ProcessConstants& ProcConsts, + const std::string& steerfile); + // KR: Don't see any use for shouldReadSteeringFile ==> remove it + // fastNLOCreate(const std::string& steerfile, std::string warmupfile = "", bool shouldReadSteeringFile = true); + fastNLOCreate(const std::string& steerfile, std::string steeringNameSpace = ""); + ~fastNLOCreate(); + + fnloEvent fEvent; //!< Structure, which holds all relevant variables related to event observables + fnloScenario fScenario; //!< Structure, which holds perturbative (wilson) coefficients/weights and x-values + + void SetOrderOfAlphasOfCalculation(unsigned int ord); //!< set absolute order of alpha_s + void SetScenario(const fnloScenario scen) {fScenario = scen;} //!< set the member fScenario, which will be used when calling Fill() + void SetEvent(const fnloEvent ev) {fEvent = ev;} //!< set the member fEvent, which will be used when calling Fill() + inline void SetNumberOfEvents(double n) { + GetTheCoeffTable()->Nevt = n; + GetTheCoeffTable()->fWgt.WgtNevt = n; + fStats._nEv=n;}; //!< set number of events. This is only mandatory, before calling WriteTable(). + void SetLoOrder(int LOOrd); //!< set order of alpha_s for leading order process. + + fastNLOReader* SetIsReferenceTable(fastNLOReader* fnloread = NULL); //!< set this table/contribution to become a reference contribution + + void ReadSteeringFile(std::string steerfile, std::string steeringNameSpace = ""); //!< only read steering file, do not set anything + void TransformPartonCombinations(); //!< somehow transform parton combinations, why? + void SetTableConstsDefaults(); //!< set defaults for all table constants + void SetGenConstsDefaults(); //!< set defaults for generator constants + void SetProcConstsDefaults(); //!< set defaults for process constants + void SetScenConstsDefaults(); //!< set defaults for scenario constants + void SetWarmupConstsDefaults(); //!< set defaults for warmup constants + void SetGenConstsFromSteering(); //!< set generator constants from steering + void SetProcConstsFromSteering(); //!< set process constants from steering + void SetScenConstsFromSteering(); //!< set scenario constants from steering + void SetWarmupConstsFromSteering(); //!< set warmup constants from steering + void PrintTableConsts(); //!< print all table constants + void PrintGenConsts(); //!< print generator constants + void PrintProcConsts(); //!< print process constants + void PrintScenConsts(); //!< print scenario constants + void PrintWarmupConsts(); //!< print warmup constants + bool CheckTableConsts(); //!< check all table constants + bool CheckGenConsts(); //!< check generator constants + bool CheckProcConsts(); //!< check process constants + bool CheckScenConsts(); //!< check scenario constants + bool CheckWarmupConsts(); //!< check warmup constants + + // SetBinGrid() + // todo: SetBinGrid. However, if BinGrid is set, then this is necessarily a warmup run -> one also has to store the bin grid in warmup table (todo). + // furthermore all vectors have to be 'resized' + //void SetBinGrid(std::vector < std::vector <std::pair<double,double> > > BinGrid, std::vector <int> IDiffBin, std::vector <std::string> DimLabel, std::vector <double> BinSize = std::vector <double>() ); + + void Fill(int scalevar=0, const double wgtfac=1.0); //!< fill event quantities in fastNLO table. Call it for every subprocess. + void FillOneSubprocess(const fnloEvent& event, const fnloScenario& scen, int scalevar=0, const double wgtfac=1.0); //!< same function as 'Fill()', but uses content of member fScenario and fEvent + void FillAllSubprocesses(const std::vector<fnloEvent>& events, const fnloScenario& scen, int scalevar=0, const double wgtfac=1.0); //!< Fill a selection (std::vector) of events/processes/channels, which all have the identic scenario + void FillAllSubprocesses(const std::vector<std::vector<fnloEvent> >& events, const fnloScenario& scen, const double wgtfac=1.0); //!< Fill a list of subprocesses for various scale-variations into a fixed-scale table + int GetNSubprocesses() const { return GetTheCoeffTable()->GetNSubproc();} //!< The number of subprocesses (channels) + const std::vector<double>& GetScaleVariations() const { return fScaleFac; } //!< Get list of scale variations + int GetScaleVarMax() const { return fScaleFac.size(); } //!< Get no. of scale variations + + void WriteTable(std::string filename); //!< Write fastNLO table to file filename + void WriteTable(); //!< Write fastNLO table to disk. + inline void WriteTable(double nEvents) {SetNumberOfEvents(nEvents); WriteTable();}; //!< Write fastNLO table to disk and set number of events. + void WriteWarmupTable(); //!< Write the warmup table to disk. + void MultiplyCoefficientsByBinSize(); //!< Multiply all coefficients by bin size + void DivideCoefficientsByBinSize(); //!< Divide all coefficients by bin size + void MultiplyCoefficientsByConstant(double c); //!< Multiply all coefficients with a constant factor c + void NormalizeCoefficients(double wgt=1); //!< Set number of events to wgt and adjust coefficients accordingly + void NormalizeCoefficients(const std::vector<std::vector<double> >& wgtProcBin); //!< Set number of events to wgt (with wgt differently for each subproc. and bin) resulting Nevt will become 1 + + void PrintWarmupValues(); //!< Print the warmup values to the screen + std::string GetWarmupTableFilename(); //!< Get the filename, which is used for storage of the warmup-table. + void SetWarmupTableFilename(std::string); //!< Set the filename, which is used for storage of the warmup-table (otherwise a default is used) + inline bool GetIsWarmup() const { return fIsWarmup; }; //!< Get flag for warmup table + inline bool GetIsFlexibleScale() const { return fIsFlexibleScale; } //!< Get if flexible-scale table is requested + inline int GetNFlexScales() const { return fNFlexScales; } //!< Get no. flexible scales to fill simultaneously + inline double GetFlexConstScale2() const { return fFlexConstScale2; } //!< Get constant value set for 2nd "flexible" scale + inline bool GetIsInclusiveJets() const { return fIsInclusiveJets; } //!< Get if inclusive jet table is requested + inline double GetReduceXmin() const { return fReduceXmin; } //!< Get ReduceXmin value + void SetWarmupXSafetyMargin(int margin = 4) { fWarmupXMargin = margin;} //!< Set margin for x-value: First digit in '%e' notation (e.g. margin=4: x=6.6e-3 -> 6.2e-3) + void SetWarmupNDigitMu1(int rnd = 1) { fWarmupNDigitMu1 = rnd;} //!< Round warmup values for scale 1 + void SetWarmupNDigitMu2(int rnd = 2) { fWarmupNDigitMu2 = rnd;} //!< Round warmup values for scale 2 + + inline fastNLOCoeffAddBase* GetTheCoeffTable() const { + return (fastNLOCoeffAddBase*)GetCoeffTable(0); + } //!< Getter for the one (and only) coefficient table + + bool TestParameterInSteering(const std::string& label) const; //!< Test on existence of user-defined parameter name in steering card. + bool GetParameterFromSteering(const std::string& label, bool& val) const; //!< Get user-defined parameter from steering file. + bool GetParameterFromSteering(const std::string& label, int& val) const; //!< Get user-defined parameter from steering file. + bool GetParameterFromSteering(const std::string& label, double& val) const; //!< Get user-defined parameter from steering file. + bool GetParameterFromSteering(const std::string& label, std::string& val) const; //!< Get user-defined parameter from steering file. + bool GetParameterFromSteering(const std::string& label, std::vector<int>& val) const; //!< Get user-defined parameter from steering file. + bool GetParameterFromSteering(const std::string& label, std::vector<double>& val) const; //!< Get user-defined parameter from steering file. + bool GetParameterFromSteering(const std::string& label, std::vector<std::string>& val) const; //!< Get user-defined parameter from steering file. + bool GetParameterFromSteering(const std::string& label, std::vector<std::vector<int > >& val) const; //!< Get user-defined parameter from steering file. + bool GetParameterFromSteering(const std::string& label, std::vector<std::vector<double > >& val) const; //!< Get user-defined parameter from steering file. + + void AdjustWarmupValues(); //!< Round warmup values to more likely values. + void PrintAllSteeringValues() const { PRINTALL();}; //!< Print all steering values obtained from steering files (of all fastNLOCreate instances); + + void Clear() { GetTheCoeffTable()->Clear();}; //!< Clear coefficient table + void PrintStats() const { fStats.PrintStats();} //!< Print statistics + void SetGlobalVerbosity(std::string sverb); //!< Set GlobalVerbosity using std::string variable + + // KR Allow nnlo-bridge_0.0.40 to be linked + void SetCacheSize(int MaxCache, int CacheCompare=2, int CacheType=2); //!< Set maximum number of events in cache. Set to 0 to deactivate caching, CacheCompare: maximum numbers of entries to be compared with new element; fCacheType: 0: deactivate, 1: 1D cache, 2: cache per ObsBin and Proc + int GetCacheSize() const { return fCacheMax; } //!< Get max cache size + int GetCacheCompare() const { return fCacheCompare; } //!< Get cache comp value + int GetCacheType() const { return fCacheType; } //!< Get cache type + +protected: + fastNLOCreate(); //!< don't use the default constructor. fastNLOCreate is only reasonable with input steering. + void Instantiate(); + int CreateCoeffTable(); //!< Create the one (and only) coefficient table + + inline void ApplyPDFWeight(std::vector<std::pair<int,double> >& nodes, const double x, const std::vector<double>* grid) const; + inline double CalcPDFReweight(double x) const; + //!< Fill contribution into table + void FillContribution(int scalevar = 0, const double wgtfac=1.0); + //!< fill contribution if this is a reference table + void FillRefContribution(int scalevar = 0, const double wgtfac=1.0); + // KR: Don't see any use for shouldReadSteeringFile ==> remove it + // void ReadSteering(std::string steerfile, std::string steeringNameSpace = "", bool shouldReadSteeringFile = true); //!< read steering file + void ReadSteering(std::string steerfile, std::string steeringNameSpace = ""); //!< read steering file + + void ReadBinning(); + void ReadBinningFromScenarioConsts(); + void ReadBinSize(); + /// + void SetBinning1D(std::vector<double> bgrid, std::string label, unsigned int idiff); + void SetBinning1D(std::vector<double> bgrid, std::string label, unsigned int idiff, double norm); + void SetBinning1D(std::vector<double> bgrid, std::string label, unsigned int idiff, std::vector<double> vnorm); + void SetBinning1D(std::vector<double> blow, std::vector<double> bupp, std::string label, unsigned int idiff); + void SetBinning1D(std::vector<double> blow, std::vector<double> bupp, std::string label, unsigned int idiff, double norm); + void SetBinning1D(std::vector<double> blow, std::vector<double> bupp, std::string label, unsigned int idiff, std::vector<double> vnorm); + void SetBinningND(std::vector<double> bgrid, unsigned int ndim, std::vector<int> idiff); + void SetBinningND(std::vector<std::vector<double> > bgrid, unsigned int ndim, std::vector<int> idiff); + /// + void ReadCoefficientSpecificVariables(); + void ReadScaleFactors(); + void InitVariablesInCoefficientTable(); + void InitCoeffTable(); + void InitInterpolationKernels(); + fastNLOInterpolBase* MakeInterpolationKernels(std::string KernelName, double xdn, double xup, const std::string& distancemeasure); + fastNLOInterpolBase* MakeInterpolationKernels(std::string KernelName, double density, const std::string& distancemeasure); + void InitGrids(); + void GetWarmupValues(); + bool CheckWarmupConsistency(); //!< Check consistency of warmup bin-grid and variables with steering values. + void UseBinGridFromWarmup(); //!< Use bin grid as given in the warmup table + int CheckWarmupValuesIdenticalWithBinGrid(std::vector<std::pair<double,double> >& wrmmu); //!< Check if warmup values are possibly identical with bin grid + void RoundValues(std::vector<std::pair<double,double> >& wrmmu, int ibin=-1 , int nth=3); //!< Round values to closes value by at most 1% + int GetNthRelevantDigit(double val, int n); + std::vector<std::vector<std::pair<int,int> > > ReadPartonCombinations(int ord, const std::vector<std::vector<int> >& PartonCombinations); //!< Read PDFCoeff from steering + + int GetBin(); //!< get bin number from 'scenario' observables + inline int GetXIndex(const int& Obsbin, const int& x1bin, const int& x2bin) const; //!< get x-index in case of two hadrons. + int GetNxmax(const std::vector<double>* xGrid1, const std::vector<double>* xGrid2); //!< get maximum x-index + bool fIsWarmup; //!< is it a warmup run? + int fWarmupXMargin; //!< margin for x-value: First digit in '%e' notation (e.g. margin=4: x=6.6e-3 -> 6.2e-3) + int fWarmupNDigitMu1; //!< Digits of warmup values for scale 1 + int fWarmupNDigitMu2; //!< Digits of warmup values for scale 2 + int fIOrd; //!< order of alpha_s of run + bool fIsFlexibleScale; //!< is it a flexible scale table? + int fNFlexScales; //!< no. of simultaneous flex-scales + double fFlexConstScale2; //!< constant value set for 2nd "flexible" scale + bool fIsInclusiveJets; //!< is it an inclusive jets table? + bool fApplyPDFReweight; //!< shall the PDF reweight be applied. + double fReduceXmin; //!< Reduce Xmin in units of x-nodes. + std::string fWarmupFilename; //!< File name of the warmup table + // TODO: fSteerfile as internally set variable is used as default steeringNameSpace at many places. This should be avoided! + std::string fSteerfile; //!< filename of steering file (and default steeringNameSpace!) + int fObsBin; //!< ObsBin from 'last' 'Fill()'-call + std::map<int,double> fPreviousObs_o; //!< keep information of scenario from last 'Fill()'-call + int fPreviousObsBin; //!< keep information of scenario from last 'Fill()'-call + fastNLOReader* fReader; //!< PDF and alpha_s interface for reference tables + + fastNLO::GeneratorConstants fGenConsts; //!< Generator specific constants + fastNLO::ProcessConstants fProcConsts; //!< Process specific constants + fastNLO::ScenarioConstants fScenConsts; //!< Scenario specific constants + fastNLO::WarmupConstants fWarmupConsts; //!< Warmup specific constants + + bool CheckWeightIsFinite(); //!< Check if weight is reasonable. + inline void HalfMatrixCheck(double x1, double x2, int& xmin, int& xmax, int& subproc) const; //!< check x-values in case of half-matrix notation (pp,ppbar), and exchange if necessary. + std::vector<int> fSymProc; //!< necessary for half-matrix notation + std::vector<double> fScaleFac; //!< Scale factors. Needed for fixed-scale tables + + // interpolation kernels + std::vector<fastNLOInterpolBase*> fKernX1; //!< Interpolation kernel for x-interpolation + std::vector<fastNLOInterpolBase*> fKernX2; //!< Interpolation kernel for x-interpolation + std::vector<fastNLOInterpolBase*> fKernMu1; //!< Interpolation kernel for mu1-interpolation + std::vector<fastNLOInterpolBase*> fKernMu2; //!< Interpolation kernel for mu2-interpolation + std::vector<std::vector<fastNLOInterpolBase*> > fKernMuS; //!< Interpolation kernels for each scale var for fixed-scale tables + + // arrays for warmup + void UpdateWarmupArrays(); + void InitWarmupArrays(); + void OutWarmup(std::ostream& = std::cout); + std::vector<double> GetColumnFromTable(const std::vector<std::vector<double> >& table, int iCol); //!< Get a column from a table + std::string GetWarmupHeader(int iScale, std::string minmax); + std::vector<std::pair<double,double> > fWMu1; //!< array of warmup-up values + std::vector<std::pair<double,double> > fWMu2; //!< array of warmup-values + std::vector<std::pair<double,double> > fWx; //!< array of warmup-values + std::vector<std::pair<double,double> > fWMu1Rnd; //!< copy of warm-up array for rounding + std::vector<std::pair<double,double> > fWMu2Rnd; //!< copy of warm-up array for rounding + std::vector<std::pair<double,double> > fWxRnd; //!< copy of warm-up array for rounding + + int fCacheMax = 30; //!< maximum number of entries in weight cahce + int fCacheCompare = 20; //!< maximum number of entries in weight cahce + int fCacheType = 0; //!< maximum number of entries in weight cahce + std::vector<std::pair<fnloScenario,fnloEvent> > fWeightCache; //!< cache for fill-weights + std::vector<std::vector<std::vector<std::pair<fnloScenario,fnloEvent> > > > fWeightCacheBinProc; //!< alternative cache for fill-weights + void FillWeightCache(int scalevar); //!< Fill weight into cache, merge weights for identical phase space points + void FlushCache(); //!< Fill weights from cache into table + + bool WarmupNeeded() const; + + struct fnloStats { + //! structre to keep track of statisics. Just for fun and information. + time_t _time; + fnloStats() : _nProc(0), _nEvPS(0), _nEv(0) { _time = time(0);} + long long int _nProc, _nEvPS; + double _nEv; + void PrintStats() const { + time_t hour, min, time = std::time(0) - _time; + hour = time/3600L; + time -= hour*3600L; + min = time/60L; + time -= min*60L; + std::cout<<std::endl;; + std::cout<<" ------------------- fastNLOstats ------------------"<<std::endl;; + std::cout<<" Time elapsed: " + << (hour < 10 ? "0" : "") << hour + << (min < 10 ? ":0" : ":") << min + << (time < 10 ? ":0" : ":") << time << std::endl;; + if (_nEv!=0) std::cout << " Total event weight (NEvt): " << _nEv << std::endl;; + if (_nEvPS!=0) std::cout << " Contributions in phase space: " << _nEvPS << std::endl;; + if (_nProc!=0) std::cout << " Number of calls: " << _nProc << std::endl;; + std::cout << " -------------------------------------------------" << std::endl;; + std::cout<<std::endl;; + std::cout.flush(); + } + } fStats; + +}; +#endif diff --git a/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLODiffH12006FitB.h b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLODiffH12006FitB.h new file mode 100644 index 0000000000000000000000000000000000000000..36907364261ab1f55ec1a0572341a1e431f5e5d1 --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLODiffH12006FitB.h @@ -0,0 +1,123 @@ +// Author: Daniel Britzger +// DESY, 02/04/2012 + +#ifndef fASTNLODIFFH12006FITB +#define fASTNLODIFFH12006FITB + + +////////////////////////////////////////////////////////////////////////// +// // +// FastNLODiffUSER // +// // +// FastNLODiffReader is a standalone code for reading // +// diffractive FastNLO tables of version 2.0 for DIS processes // +// // +// // +////////////////////////////////////////////////////////////////////////// + + +#include <string> +#include <cstdio> +#include <vector> +#include "fastnlotk/fastNLODiffReader.h" + + +class fastNLODiffH12006FitB : public fastNLODiffReader { + +public: + + fastNLODiffH12006FitB(string filename); + ~fastNLODiffH12006FitB(void) { + ; + }; + + void SetTIntegratedRange(double tmax) { ftint = tmax;} + double GetTIntegratedRange() const {return ftint;} + +protected: + + double ftint; + // inherited functions + double EvolveAlphas(double Q) const ; + bool InitPDF(); + vector<double> GetDiffXFX(double xpom, double zpom, double muf) const ; + +}; + + + +//______________________________________________________________________________ + + +extern "C" { + // tint is the 'maximum t' + void diffpdf_(double* xpom, double* zpom, double* Q2, double *pdfs, double *tint); +} + + + +//______________________________________________________________________________ + + + + +fastNLODiffH12006FitB::fastNLODiffH12006FitB(string filename) : fastNLODiffReader(filename) , fint(-1.) { +} + + +//______________________________________________________________________________ + + +double fastNLODiffH12006FitB::EvolveAlphas(double Q) const { + // --- fastNLO user: + // Implementation of Alpha_s evolution as function of the + // factorization scale [and alphas(Mz)]. + // + + static const int NF=4; // from h12006B_wrapper.h + static const double b0 = (11. - 2./3.*NF); // The beta coefficients of the QCD beta function + static const double b1 = (51. - 19./3.*NF); + + // double lmd = 0.399; // according to matthias + static const double lmd = 0.3395; // according to matthias + double t = log(Q/lmd); + double asMz = 1.0/(b0*t); + + return asMz*(1.0-b1/b0*asMz*log(2.0*t)) *TWOPI ; +} + + +//______________________________________________________________________________ + + +bool fastNLODiffH12006FitB::InitPDF() { + // --- fastNLO user: + // Initalize PDF parameters if necessary + // + // nothing todo! + return true; +} + + +//______________________________________________________________________________ + + + +vector<double> fastNLODiffH12006FitB::GetDiffXFX(double xpom, double zpom, double muf) const { + // + // GetDiffXFX is used to get the parton array from the + // pdf-interface. It should return a vector of 13 + // parton flavors from tbar to t at a certain + // xpom, zpom and factorisation scale. + // + vector < double > xfx(13); + diffpdf_(&xpom,&zpom,&muf,&xfx[0],&ftint); + //debug<<"xpom="<<xpom<<"\tzpom="<<zpom<<"\tmuf="<<muf<<"\tgluon = "<<xfx[6]<<endl; + return xfx; +} + + +//______________________________________________________________________________ + + +#endif diff --git a/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLODiffReader.h b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLODiffReader.h new file mode 100644 index 0000000000000000000000000000000000000000..790376163895f9b1b5966c0d3aa17c616c7b8e42 --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLODiffReader.h @@ -0,0 +1,84 @@ +// Author: Daniel Britzger +// DESY, 02/04/2012 + +#ifndef fASTNLODIFFREADER +#define fASTNLODIFFREADER + + +////////////////////////////////////////////////////////////////////////// +// // +// fastNLODiffReader // +// // +// fastNLODiffReader is a standalone code for reading // +// diffractive FastNLO tables of version 2.0 for DIS processes // +// // +// http://projects.hepforge.org/fastnlo // +// // +////////////////////////////////////////////////////////////////////////// + + +#include <string> +#include <vector> +#include "fastnlotk/fastNLOReader.h" + + +class fastNLODiffReader : public fastNLOReader { + +public: + + fastNLODiffReader(std::string filename); + virtual ~fastNLODiffReader(void) {}; + + void SetXPomSlicing(int nStep, double* xpom, double* dxpom); + void SetXPomLogSlicing(int nStep, double xpommin, double xpommax); + void SetXPomLinSlicing(int nStep, double xpommin, double xpommax); + void SetXPomExpSlicing(int nStep, double xpommin, double xpommax); + void SetZRange(double zmin , double zmax) { + fzmin = zmin ; + fzmax = zmax; + }; + double GetZRangeMin() { return fzmin; }; + double GetZRangeMax() { return fzmax; }; + void SetPrintCrossSectionVsxIPzIP(bool print=true) {fPrintxIPzIP=print;}; //!< Print these values during integration. + std::vector < std::map< std::pair<double, double>, double > > GetXSection_vs_xIPzIP() { + return fXSection_vs_xIPzIP;}//!< Get cross section for each zIP node and xIP slice. + + std::vector < double > GetCrossSection(); + void CalcCrossSection(); + std::vector < double > GetDiffCrossSection(); + void FillPDFCache(bool ReCalcCrossSection = false); + std::vector < double > GetReferenceCrossSection(); + + // ---- Print outs must be overwritten ---- // + void PrintCrossSectionsWithReference(); + + std::map<double, std::vector < std::map< double, double > > > Get3DCrossSection() { return xsQ2; } + + void SetProtonE(double E) { fProtonE = E; } + +protected: + + double fxpom; + double fzmin; + double fzmax; + + std::vector < double > fxPoms; + std::vector < double > fdxPoms; + bool fPrintxIPzIP = false; + std::vector < std::map< std::pair<double, double>, double > > fXSection_vs_xIPzIP; //! Cross section vs. x ( XSection_vsX1[bin][<{x,z},xs>] ) + + // inherited functions + virtual double EvolveAlphas(double Q) const = 0; + virtual bool InitPDF() = 0; + std::vector<double> GetXFX(double xp, double muf) const; + virtual std::vector<double> GetDiffXFX(double xpom, double zpom, double muf) const = 0; + + + std::map<double, std::vector < std::map< double, double > > > xsQ2; + double fProtonE; + + +}; + +#endif + diff --git a/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLODiffUser.h b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLODiffUser.h new file mode 100644 index 0000000000000000000000000000000000000000..7eea6c8b4ddcde15f4f7caa4eb665ec937edffd8 --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLODiffUser.h @@ -0,0 +1,54 @@ +// Author: Daniel Britzger +// DESY, 08/08/2012 + +#ifndef fASTNLODIFFUSER +#define fASTNLODIFFUSER + + +////////////////////////////////////////////////////////////////////////// +// // +// FastNLODiffUSER // +// // +// FastNLODiffReader is a standalone code for reading // +// diffractive FastNLO tables of version 2.0 for DIS processes // +// // +// This is a dummy class and not working!!! // +// // +// Please insert your desired code into the functions // +// - EvolveAlphas() // +// - InitPDF() // +// - GetDiffXFX() // +// // +// Within most applications it is necessary to define the functions // +// within a .cc-file. // +// // +////////////////////////////////////////////////////////////////////////// + + +#include <string> +#include <cstdio> +#include <vector> +#include "fastnlotk/fastNLODiffReader.h" + + +class fastNLODiffUser : public fastNLODiffReader { + +public: + + fastNLODiffUser(std::string filename); + ~fastNLODiffUser(void) {;}; + +protected: + + // inherited functions + double EvolveAlphas(double Q) const ; + bool InitPDF(); + std::vector<double> GetDiffXFX(double xpom, double zpom, double muf) const ; + +}; + + +//______________________________________________________________________________ + + +#endif diff --git a/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOEvent.h b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOEvent.h new file mode 100644 index 0000000000000000000000000000000000000000..9f4176810923034a7a4229f80de67ed12ae5c089 --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOEvent.h @@ -0,0 +1,140 @@ +#ifndef __fnloevent__ +#define __fnloevent__ + +#include <string> +#include <vector> +#include <map> + +class fnloScenario { + //! Useful class to keep all scenario specific quantities, + //! e.g. observables and scales. + //! KR: Test including additional weight factor per observable entry + //! This could be helpful e.g. for jet cross section differences! + friend class fastNLOCreate; + + public: + fnloScenario() : _m1(0), _m2(0), _iOB(-1), _wo(1) {;} + ~fnloScenario() {;}; + //! Store observable + //!< Set observable of dimension iDim (e.g. in case of multidimensional measurements) + inline void SetObservableDimI(double o, int iDim) {_o[iDim]=o;} + //!< Set observable for '0th' dimension for single-differential calculation + inline void SetObservable0(double o) {SetObservableDimI(o,0);} + //!< Set observable for '1st' dimension for single and double-differential calculations + inline void SetObservable1(double o) {SetObservableDimI(o,1);} + //!< Set observable for '2nd' dimension for single/double/triple differential calculations + inline void SetObservable2(double o) {SetObservableDimI(o,2);} + //!< [ALTERNATIVELY] Directly set ObsBin of serialised one-dimensional representation, + //!< e.g. when serialisation is performed already in generator. + //!< The observables per dimension then are not needed, but take care with GetBin! + inline void SetObsBin(int iBin) {_iOB = iBin; } + + //! Store central scale choice for mur and muf (not mu^2!) + //!< Fixed-scale table (scale must be given in units of GeV) + inline void SetScale(double mu) {_m1=mu;} + //!< Flexible-scale table + //!< Set scale 1 (scale must be given in units of GeV) + inline void SetObsScale1(double mu) {_m1=mu;} + //!< Set scale 2 + inline void SetObsScale2(double mu) {_m2=mu;} + + //! Store extra weight factor + inline void SetObsWeight(double w) {_wo=w;} + + private: + std::map<int,double> _o; + double _m1, _m2; + int _iOB; + double _wo; +}; + + + +class fnloEvent { + //! Useful class to keep all process related variables. + //! e.g x-values, weights, process identifiers, etc. + friend class fastNLOCreate; + friend class fastNLOCoeffAddFix; + friend class fastNLOCoeffAddFlex; + +public: + fnloEvent(){Reset();} + ~fnloEvent(){;} + + inline void ResetButX(){ + _w=0, _wf=0, _wr=0, _wrr=0, _wff=0, _wrf=0; + _sig = 0; // sigma + _p = -1; + _n = -1; + } + inline void Reset(){ + ResetButX(); + _x1 = 0, _x2 = 0; + } + + // Event specific quantites, which are required for every 'Fill()' step. + //!< Get x-value of first hadron + inline const double& X1() const {return _x1;} + //!< Get x-value of second hadron + inline const double& X2() const {return _x2;} + //!< Get subprocess ID + inline const int& p() const {return _p;} + //!< Set x-value of first hadron (if e.g. DIS) + inline void SetX(double x) {_x1=x;} + //!< Set x-value of first hadron + inline void SetX1(double x) {_x1=x;} + //!< Set x-value of second hadron + inline void SetX2(double x) {_x2=x;} + //!< Set subprocess ID + inline void SetProcessId(int n){_p=n;} + //!< Set event counter + inline void SetEventCounter(long long int n){_n=n;} + + //! Fixed-scale table: + //!< Weights must be multiplied with dummypdf (1/x) + inline void SetWeight(double w) {_w=w;} + //!< Set weight to calculate cross section (i.e. already multiplied by PDF,alpha_s). + inline void SetSigma(double s) {_sig=s;} + //!< Add weight + inline void AddSigma(double s) {_sig+=s;} + + //! Flexible-scale table: + //!< Weights must be multiplied with dummypdf (1/x) + inline void SetWeight_MuIndependent(double w) {_w=w;} + //!< Set weight w, which will contribute with log_e(mur^2)*w + inline void SetWeight_log_mur(double w) {_wr=w;} + //!< Set weight w, which will contribute with log_e(muf^2)*w + inline void SetWeight_log_muf(double w) {_wf=w;} + //!< Set weight w, which will contribute with log^2_e(mur^2)*w + inline void SetWeight_log_murr(double w) {_wrr=w;} + //!< Set weight w, which will contribute with log^2_e(muf^2)*w + inline void SetWeight_log_muff(double w) {_wff=w;} + //!< Set weight w, which will contribute with log_e(mur^2)*log_e(muf^2)*w + inline void SetWeight_log_murf(double w) {_wrf=w;} + //!< Weights must be multiplied with dummypdf (1/x) + inline void AddWeight_MuIndependent(double w) {_w+=w;} + //!< Add weight w, which will contribute with log_e(mur^2)*w + inline void AddWeight_log_mur(double w) {_wr+=w;} + //!< Add weight w, which will contribute with log_e(muf^2)*w + inline void AddWeight_log_muf(double w) {_wf+=w;} + //!< Add weight w, which will contribute with log^2_e(mur^2)*w + inline void AddWeight_log_murr(double w) {_wrr+=w;} + //!< Add weight w, which will contribute with log^2_e(muf^2)*w + inline void AddWeight_log_muff(double w) {_wff+=w;} + //!< Add weight w, which will contribute with log_e(mur^2)*log_e(muf^2)*w + inline void AddWeight_log_murf(double w) {_wrf+=w;} + + private: + //!< An event has always identical x1 and x2 + double _x1, _x2; + //!< Sigma, i.e. weight including PDF & alpha_s + double _sig; + //!< Weights + double _w, _wf, _wr, _wrr, _wff, _wrf; + //!< SubprocessId/channel. Must be consistent with PDF linear combination + int _p; + //!< Event count + long long int _n; +}; + +#endif diff --git a/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOHoppet.h b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOHoppet.h new file mode 100644 index 0000000000000000000000000000000000000000..9d1d62b5c6948005338ab8da8a9984e9512e666f --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOHoppet.h @@ -0,0 +1,70 @@ +// Author: Daniel Britzger +// DESY, 20/04/2012 + +////////////////////////////////////////////////////////////////////////// +// // +// fastNLO_toolkit // +// D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch // +// // +// The projects web page can be found at: // +// https://fastnlo.hepforge.org // +// // +// If you use this code, please cite: // +// T. Kluge, K. Rabbertz and M. Wobisch, hep-ph/0609285 // +// D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, // +// arXiv:1109.1310 // +// // +////////////////////////////////////////////////////////////////////////// + +////////////////////////////////////////////////////////////////////////// +// +// fastNLOAlphas +// This class inherits the PDF interface from +// fastNLOLHAPDF, while the alpha_s evolution +// is superseeded by the Alphas.h class. +// +////////////////////////////////////////////////////////////////////////// + +#ifndef FASTNLOHOPPET +#define FASTNLOHOPPET + +#include "fastNLOLHAPDF.h" + + + +class fastNLOHoppet : public fastNLOLHAPDF { + + public: + // Only allow constructor with information on LHAPDF set and member + // as needed for HOPPET initialisation. + fastNLOHoppet(std::string name) = delete; + fastNLOHoppet(std::string name, std::string LHAPDFFile, int PDFMem = 0); + + // Getters + double GetQMass(int pdgid) const; + double GetMz() const; + std::string GetNScheme() const; + int GetNFlavor() const; + int GetNLoop() const; + double GetAlphasMz() const; + + // Setters + virtual bool InitPDF(); + void SetQMass(int pdgid, double qmass); + void SetMz(double Mz); + void SetNFlavor(int nflavor); + void SetNLoop(int nloop); + void SetAlphasMz(double AlphasMz); + void SetPDGValues(); + void SetLHAPDFValues(std::string LHAPDFFile, int PDFMem = 0); + + // Printers + void PrintParmValues(); + + protected: + // Inherited functions + virtual double EvolveAlphas(double Q) const; + virtual std::vector<double> GetXFX(double xp, double muf) const; +}; + +#endif diff --git a/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOHoppetAs.h b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOHoppetAs.h new file mode 100644 index 0000000000000000000000000000000000000000..3cccd98b4617ea087daf9d15391334a9c3554f3a --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOHoppetAs.h @@ -0,0 +1,48 @@ +// Author: Daniel Britzger +// DESY, 20/04/2012 + +////////////////////////////////////////////////////////////////////////// +// // +// fastNLO_toolkit // +// D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch // +// // +// The projects web page can be found at: // +// http://projects.hepforge.org/fastnlo // +// // +// If you use this code, please cite: // +// T. Kluge, K. Rabbertz and M. Wobisch, hep-ph/0609285 // +// D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, // +// arXiv:1109.1310 // +// // +////////////////////////////////////////////////////////////////////////// + +////////////////////////////////////////////////////////////////////////// +// +// fastNLOAlphas +// This class inherits the PDF interface from +// fastNLOLHAPDF, while the alpha_s evolution +// is superseeded by the Alphas.h class. +// +////////////////////////////////////////////////////////////////////////// + +#ifndef FASTNLOHOPPETAS +#define FASTNLOHOPPETAS + +#include "fastNLOHoppet.h" + + + +class fastNLOHoppetAs : public fastNLOHoppet { + + public: + // Only allow constructor with information on LHAPDF set and member + // as needed for HOPPET initialisation. + fastNLOHoppetAs(std::string name) = delete; + fastNLOHoppetAs(std::string name, std::string LHAPDFFile, int PDFMem = 0); + + protected: + virtual std::vector<double> GetXFX(double xp, double muf) const; + +}; + +#endif diff --git a/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOInterpolBase.h b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOInterpolBase.h new file mode 100644 index 0000000000000000000000000000000000000000..9a7169e3fdd63f0a74919c112ccdc690b808b3fe --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOInterpolBase.h @@ -0,0 +1,115 @@ +// Author: Daniel Britzger +// DESY, 28/06/2013 + +#ifndef __fastNLOInterpolBase__ +#define __fastNLOInterpolBase__ + + +#include "speaker.h" +#include <string> +#include <vector> +#include <cmath> +#include <utility> + +namespace fastNLOGrid { + enum GridType { + kLinear = 0, // linear grid + kLog10 = 1, // log10 grid + kLogLog025 = 2, // loglog grid (only valid for mu-grids) + kLogLog = 3, // loglog grid (only valid for mu-grids) + kSqrtLog10 = 4, // sqrt(logarithmic) grid (only valid for x-grids) + k3rdrtLog10 = 5, // log(x)^(1/3) (3rd root) (only valid for x-grids) + k4thrtLog10 = 6 // log(x)^(1/4) (4th root) (only valid for x-grids) + }; +} + + +class fastNLOInterpolBase : public PrimalScream { + +public: + + fastNLOInterpolBase(double min, double max, fastNLOGrid::GridType type, int nMinNodes); + fastNLOInterpolBase(double density, fastNLOGrid::GridType type, int nMinNodes); + virtual ~fastNLOInterpolBase(void); + + const std::vector<std::pair<int,double> >& GetNodeValues(double val); + + void MakeGrids(int nNodes,double ReduceXmin=0); + void MakeGridsWithNNodesPerMagnitude(int nNodes,double ReduceXmin=0); + void RemoveLastNode(); + + void PrintGrid(); + const std::vector<double>& GetGrid() const { return fgrid;} + const std::vector<double>* GetGridPtr() const { return &fgrid;} + const std::vector<double>& GetHGrid() const { return fHgrid;} + double GetDelta(double); + bool CheckX(double&); + + static fastNLOGrid::GridType TranslateGridType(std::string in); + std::vector<double> fgrid; + +protected: + + void SetGrid(std::vector<double> grid); + void SetHGrid(std::vector<double> grid); + void MakeGrids(double min, double max, int nNodes); + std::vector<double> MakeGridFromHGrid(std::vector<double> g); + std::vector<double> MakeLinearGrid(double min, double max, int nNodes); + + //virtual std::vector<std::pair<int,double> > CalcNodeValues(double val) = 0; + virtual void CalcNodeValues(std::vector<std::pair<int,double> >& nodes, double val) = 0; + + int FindLargestPossibleNode(double, bool); + + inline double Function_loglog025( double mu ){ + // function H(mu) = log(log( mu / 0.25 )) + return log(log(mu/0.25));} + inline double Function_loglog025_inv( double mu ){ + // inverse of function H(mu) = log(log( mu / 0.25 )) + return 0.25*exp(exp(mu));} + inline double Function_loglog( double mu ){ + // function H(mu) = log(log( mu )) + return log(log(mu));} + inline double Function_loglog_inv( double mu ){ + // inverse of function H(mu) = log(log( mu )) + return exp(exp(mu));} + inline double Function_x( double mu ){ + // function H(mu) = x + return mu;} + inline double Function_x_inv( double mu ){ + // inverse of function H(mu) = x; + return mu;} + inline double Function_log10( double x ){return log10(x);} + inline double Function_log10_inv( double x ){return pow(10,x);} + inline double Function_sqrtlog10( double x ){return -sqrt(-log10(x));} + inline double Function_sqrtlog10_inv( double x ){return pow(10,-pow(x,2));} + inline double Function_3rdrtlog10( double mu ){return -pow(fabs(log10(mu)),1./3.);} + inline double Function_3rdrtlog10_inv( double mu ){return pow(10,-pow(fabs(mu),3));} + inline double Function_4thrtlog10( double mu ){return -pow(fabs(log10(mu)),0.25);} + inline double Function_4thrtlog10_inv( double mu ){return pow(10,-pow(mu,4));} + + std::vector<double> HGrid_loglog025_inv(std::vector<double> grid); + std::vector<double> HGrid_loglog_inv(std::vector<double> grid); + std::vector<double> HGrid_log10_inv(std::vector<double> grid); + std::vector<double> HGrid_sqrtlog10_inv(std::vector<double> grid); + std::vector<double> HGrid_4thrtlog10_inv(std::vector<double> grid); + std::vector<double> HGrid_3rdrtlog10_inv(std::vector<double> grid); + int GetNMod() const {return fnmod;} + double GetHx(double); + +protected: + std::vector<std::pair<int,double> > fNodes; + + int fNMinNodes; + double fvalmin; + double fvalmax; + double fLastVal[5] = {M_PI,M_PI,M_PI,M_PI,M_PI}; + bool fLastGridPointWasRemoved; // odd boolean to agree with original code; + fastNLOGrid::GridType fdm; // distance measure + std::vector<double> fHgrid; + int fnmod ; // variable for final nodes. Has to be filled by inherited algorithm + bool fExtendLow = false; + +}; + +#endif diff --git a/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOInterpolCatmullRom.h b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOInterpolCatmullRom.h new file mode 100644 index 0000000000000000000000000000000000000000..0df406e253195691adadda613e7c3514f2157b1a --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOInterpolCatmullRom.h @@ -0,0 +1,32 @@ +// Author: Daniel Britzger +// DESY, 28/06/2013 + +#ifndef __fastNLOInterpolCatmullRom__ +#define __fastNLOInterpolCatmullRom__ + +#include "speaker.h" +#include <string> +#include <vector> +#include <utility> +#include "fastNLOInterpolBase.h" + + +class fastNLOInterpolCatmullRom : public fastNLOInterpolBase { + +public: + + fastNLOInterpolCatmullRom(double min, double max, fastNLOGrid::GridType type); + fastNLOInterpolCatmullRom(double density, fastNLOGrid::GridType type); + ~fastNLOInterpolCatmullRom(void); + + // vector<pair<int,double> > CalcNodeValues(double val); + void CalcNodeValues(std::vector<std::pair<int,double> >& nodes, double val); + +protected: + + +private: + + +}; +#endif diff --git a/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOInterpolLagrange.h b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOInterpolLagrange.h new file mode 100644 index 0000000000000000000000000000000000000000..deff97057022efa674cc199ec1a303378eea34e9 --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOInterpolLagrange.h @@ -0,0 +1,41 @@ +// Author: Daniel Britzger +// DESY, 29/01/2014 + +/** + fastNLOInterpolLagrange + + Interpolation routines for lagrange interpolation + of second order polynomials. +*/ + +#ifndef __fastNLOInterpolLagrange__ +#define __fastNLOInterpolLagrange__ + +#include "speaker.h" +#include <string> +#include <vector> +#include <utility> +#include "fastNLOInterpolBase.h" + + +class fastNLOInterpolLagrange : public fastNLOInterpolBase { + +public: + + fastNLOInterpolLagrange(double min, double max, fastNLOGrid::GridType type); + fastNLOInterpolLagrange(double density, fastNLOGrid::GridType type); + ~fastNLOInterpolLagrange(void); + + // vector<pair<int,double> > CalcNodeValues(double val); + void CalcNodeValues(std::vector<std::pair<int,double> >& nodes, double val); + +protected: + + +private: + + +}; + + +#endif diff --git a/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOInterpolLinear.h b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOInterpolLinear.h new file mode 100644 index 0000000000000000000000000000000000000000..ceb174b1385fd30be25daf0fec5b4980a6d313e8 --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOInterpolLinear.h @@ -0,0 +1,40 @@ +// Author: Daniel Britzger +// DESY, 29/01/2014 + +/** + fastNLOInterpolLinear + + Interpolation routines for linear interpolation. +*/ + +#ifndef __fastNLOInterpolLinear__ +#define __fastNLOInterpolLinear__ + +#include "speaker.h" +#include <string> +#include <vector> +#include <utility> +#include "fastNLOInterpolBase.h" + + +class fastNLOInterpolLinear : public fastNLOInterpolBase { + +public: + + fastNLOInterpolLinear(double min, double max, fastNLOGrid::GridType type); + fastNLOInterpolLinear(double density, fastNLOGrid::GridType type); + ~fastNLOInterpolLinear(void); + + // vector<pair<int,double> > CalcNodeValues(double val); + void CalcNodeValues(std::vector<std::pair<int,double> >& nodes, double val); + +protected: + + +private: + + +}; + + +#endif diff --git a/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOInterpolOneNode.h b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOInterpolOneNode.h new file mode 100644 index 0000000000000000000000000000000000000000..6ccb71307db5bdad3c048ed1f5e94edf5844122e --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOInterpolOneNode.h @@ -0,0 +1,42 @@ +// Author: Daniel Britzger +// DESY, 29/01/2014 + +/** + fastNLOInterpolOneNode + + No interpolation is performed, but all + values are stored at one single node. + The 'x'-value of the node is calculated + from the H-function. +*/ + +#ifndef __fastNLOInterpolOneNode__ +#define __fastNLOInterpolOneNode__ + +#include "speaker.h" +#include <string> +#include <vector> +#include <utility> +#include "fastNLOInterpolBase.h" + + +class fastNLOInterpolOneNode : public fastNLOInterpolBase { + +public: + + fastNLOInterpolOneNode(double min, double max, fastNLOGrid::GridType type); + ~fastNLOInterpolOneNode(void); + + // vector<pair<int,double> > CalcNodeValues(double val); + void CalcNodeValues(std::vector<std::pair<int,double> >& nodes, double val); + +protected: + + +private: + std::vector<std::pair<int,double> > fDummyNode; + +}; + + +#endif diff --git a/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOLHAPDF.h b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOLHAPDF.h new file mode 100644 index 0000000000000000000000000000000000000000..ca88c53ba6c5d94c3742fef8c63fa45f4570fb62 --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOLHAPDF.h @@ -0,0 +1,117 @@ +// Author: Daniel Britzger +// DESY, 20/04/2012 + +////////////////////////////////////////////////////////////////////////// +// // +// fastNLO_reader_2.1.0 // +// D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch // +// // +// The projects web page can be found at: // +// http://projects.hepforge.org/fastnlo // +// // +// If you use this code, please cite: // +// T. Kluge, K. Rabbertz and M. Wobisch, hep-ph/0609285 // +// D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, // +// arXiv:1109.1310 // +// // +////////////////////////////////////////////////////////////////////////// + +#ifndef FASTNLOLHAPDF +#define FASTNLOLHAPDF + +#include "fastNLOReader.h" +#include "fastNLOConstants.h" +#include <LHAPDF/LHAPDF.h> +#include <cmath> + + +class fastNLOLHAPDF : public fastNLOReader { + +private: +public: + fastNLOLHAPDF(std::string name); + fastNLOLHAPDF(const fastNLOTable&); + ~fastNLOLHAPDF(); + fastNLOLHAPDF(std::string name, std::string LHAPDFfile, int PDFSet = 0); + fastNLOLHAPDF(const fastNLOTable&, std::string LHAPDFfile, int PDFSet = 0); + + // Initializer. Necessary for some alternative evolutions. + virtual void InitEvolveAlphas(); + // Pseudo-Setters. Don´t work with LHAPDF, but print warning instead. + virtual void SetMz(double Mz); + virtual void SetNFlavor(int nflavor); + virtual void SetNLoop(int nloop); + virtual void SetAlphasMz(double AlphasMz); + virtual void SetQMass(int pdgid, double mq); + // Setters + void SetLHAPDFFilename(std::string filename); + void SetLHAPDFMember(int set); + // Getters + std::string GetLHAPDFFilename() const {return fLHAPDFFilename;} + int GetIPDFMember() const; + int GetNPDFMembers() const; + int GetNPDFMaxMember() const; + void PrintPDFInformation() const ; + virtual double GetQMass(int pdgid) const; + int GetNLoop() const; + int GetNFlavor() const; + LHAPDF::PDFSet* GetPDFSet() const { return PDFSet;}; + LHAPDF::PDF* GetPDF() const { return PDF;}; + + double GetAlphasMz() const; + + //! Return struct with vectors (for C++) or vector of vectors (for Python) containing the cross section values and the selected uncertainty + //! Enum of Uncertaintstyle decides on method to call, but does not work for Python extension --> switch back to use differently named UncertaintyVec methods + // Use implementations in fastNLOReader for these + XsUncertainty GetXsUncertainty(const fastNLO::ENumUncertaintyStyle eNumUnc, bool lNorm = false); + // std::vector< std::vector<double> > GetXsUncertaintyVec(const fastNLO::ENumUncertaintyStyle eNumUnc, bool lNorm = false, int iprint = 0); + // void PrintXsUncertaintyVec(fastNLO::ENumUncertaintyStyle, std::string UncName, bool lNorm = false); + std::vector< std::vector<double> > GetNumUncertaintyVec(const fastNLO::ENumUncertaintyStyle eNumUnc, bool lNorm = false, int iprint = 0); + void PrintNumUncertaintyVec(fastNLO::ENumUncertaintyStyle, std::string UncName, bool lNorm = false); + // + XsUncertainty GetXsUncertainty(const fastNLO::EScaleUncertaintyStyle eScaleUnc, bool lNorm = false, double sclfac = 1.); + // std::vector< std::vector<double> > GetXsUncertaintyVec(const fastNLO::EScaleUncertaintyStyle eScaleUnc, bool lNorm = false, int iprint = 0, double sclfac = 1.); + // void PrintXsUncertaintyVec(fastNLO::EScaleUncertaintyStyle, std::string UncName, bool lNorm = false, double sclfac =1.); + std::vector< std::vector<double> > GetScaleUncertaintyVec(const fastNLO::EScaleUncertaintyStyle eScaleUnc, bool lNorm = false, int iprint = 0, double sclfac = 1.); + void PrintScaleUncertaintyVec(fastNLO::EScaleUncertaintyStyle, std::string UncName, bool lNorm = false, double sclfac =1.); + // Specific implementations in fastNLOLHAPDF + XsUncertainty GetXsUncertainty(const fastNLO::EAsUncertaintyStyle eAsUnc, bool lNorm = false); + // std::vector< std::vector<double> > GetXsUncertaintyVec(const fastNLO::EAsUncertaintyStyle eAsUnc, bool lNorm = false, int iprint = 0); + // void PrintXsUncertaintyVec(fastNLO::EAsUncertaintyStyle, std::string UncName, bool lNorm = false); + std::vector< std::vector<double> > GetAsUncertaintyVec(const fastNLO::EAsUncertaintyStyle eAsUnc, bool lNorm = false, int iprint = 0); + void PrintAsUncertaintyVec(fastNLO::EAsUncertaintyStyle, std::string UncName, bool lNorm = false); + // + XsUncertainty GetXsUncertainty(const fastNLO::EPDFUncertaintyStyle ePDFUnc, bool lNorm = false); + // std::vector<std::vector<double> > GetXsUncertaintyVec(const fastNLO::EPDFUncertaintyStyle, bool lNorm = false, int iprint = 0); + // void PrintXsUncertaintyVec(fastNLO::EPDFUncertaintyStyle, std::string UncName, bool lNorm = false); + std::vector<std::vector<double> > GetPDFUncertaintyVec(const fastNLO::EPDFUncertaintyStyle, bool lNorm = false, int iprint = 0); + void PrintPDFUncertaintyVec(fastNLO::EPDFUncertaintyStyle, std::string UncName, bool lNorm = false); + + std::vector<LHAPDF::PDFUncertainty> GetPDFUncertaintyLHAPDF(double cl=100*erf(1/sqrt(2)), bool alternative=false); //!< return PDF uncertainty, formulae taken from LHAPDF6 + std::vector<double> CalcPDFUncertaintyMinus(const std::vector<LHAPDF::PDFUncertainty>& ) const; //!<get vector<double> for PDF-minus uncertainty. Uncertainties are POSITIVE! + std::vector<double> CalcPDFUncertaintyPlus(const std::vector<LHAPDF::PDFUncertainty>& ) const; //!<get vector<double> for PDF-up uncertainty + std::vector<double> CalcPDFUncertaintyRelMinus(const std::vector<LHAPDF::PDFUncertainty>& ) const; //!<get vector<double> for relative PDF-minus uncertainty. Uncertainties are NEGATIVE! + std::vector<double> CalcPDFUncertaintyRelPlus(const std::vector<LHAPDF::PDFUncertainty>& ) const; //!<get vector<double> for relative PDF-up uncertainty + std::vector<double> CalcPDFUncertaintySymm(const std::vector<LHAPDF::PDFUncertainty>& ) const; //!< get vector<double> for symmetrized PDF uncertainty + std::vector<double> CalcPDFUncertaintyCentral(const std::vector<LHAPDF::PDFUncertainty>& ) const; //!< get vector<double> for 'new' central value + + // inherited functions + virtual double EvolveAlphas(double Q) const ; + virtual bool InitPDF(); + virtual std::vector<double> GetXFX(double xp, double muf) const ; + +protected: + + // ---- LHAPDF vars ---- // + std::string fLHAPDFFilename; + LHAPDF::PDFSet* PDFSet; + LHAPDF::PDF* PDF; + int fnPDFs; + int fiPDFMember; + + double fchksum; + + +}; + +#endif diff --git a/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOPDFLinearCombinations.h b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOPDFLinearCombinations.h new file mode 100644 index 0000000000000000000000000000000000000000..0a924ae9b146e9c18b3d83e94ecc10f34b14d9ab --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOPDFLinearCombinations.h @@ -0,0 +1,31 @@ +#ifndef __fastNLOLinearCombinations__ +#define __fastNLOLinearCombinations__ + +#include "speaker.h" +#include "fastNLOCoeffAddBase.h" + + +class fastNLOPDFLinearCombinations { + +public: + fastNLOPDFLinearCombinations(); + ~fastNLOPDFLinearCombinations(); + + std::vector<double > CalcPDFLinearCombination(const fastNLOCoeffAddBase* c, const std::vector<double>& pdfx1 = std::vector<double>(), const std::vector<double>& pdfx2 = std::vector<double>() , bool pdf2IsAntiParticle = false) const; + +protected: + std::vector<double > MakeAntiHadron(const std::vector<double >& hadron) const; + +private: + std::vector<double > CalcPDFLCTwoHadrons(const fastNLOCoeffAddBase* c, const std::vector<double>& pdfx1, const std::vector<double>& pdfx2 ) const ; + std::vector<double > CalcPDFLCOneHadron(const fastNLOCoeffAddBase* c, const std::vector<double>& pdfx1 ) const; + + std::vector<double> CalcPDFDIS(const fastNLOCoeffAddBase* c, const std::vector<double>& pdfx1) const; + std::vector<double> CalcPDFDISFromTable(const fastNLOCoeffAddBase* c, const std::vector<double>& pdfx1) const ; // DIS. PDFLiCos are stored in table + std::vector<double> CalcPDFHHCFromTable(const fastNLOCoeffAddBase* c, const std::vector<double>& pdfx1 , const std::vector<double>& pdfx2) const ; // hh collisions. PDFLiCos are stored in table + std::vector<double> CalcPDFHHC(const fastNLOCoeffAddBase* c, const std::vector<double>& pdfx1 , const std::vector<double>& pdfx2) const ; // jets in hh + std::vector<double> CalcDefaultPDFLiCos(const fastNLOCoeffAddBase* c, const std::vector<double>& pdfx1 , const std::vector<double>& pdfx2) const ; // jets in hh + std::vector<double> CalcPDFttbar(const fastNLOCoeffAddBase* c, const std::vector<double>& pdfx1 , const std::vector<double>& pdfx2) const ; // ttbar + std::vector<double> CalcPDFThreshold(const fastNLOCoeffAddBase* c, const std::vector<double>& pdfx1 , const std::vector<double>& pdfx2) const ; // pp->2jets +}; +#endif diff --git a/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOQCDNUMAS.h b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOQCDNUMAS.h new file mode 100644 index 0000000000000000000000000000000000000000..38d0c58018888bd04fa6c3c0e172da8633589ffa --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOQCDNUMAS.h @@ -0,0 +1,93 @@ +// Author: Daniel Britzger +// DESY, 20/04/2012 + +////////////////////////////////////////////////////////////////////////// +// // +// fastNLO_toolkit // +// D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch // +// // +// The projects web page can be found at: // +// http://projects.hepforge.org/fastnlo // +// // +// If you use this code, please cite: // +// T. Kluge, K. Rabbertz and M. Wobisch, hep-ph/0609285 // +// D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, // +// arXiv:1109.1310 // +// // +////////////////////////////////////////////////////////////////////////// + +////////////////////////////////////////////////////////////////////////// +// +// fastNLOAlphas +// This class inherits the PDF interface from +// fastNLOLHAPDF, while the alpha_s evolution +// is superseeded by the Alphas.h class. +// +////////////////////////////////////////////////////////////////////////// + +#ifndef FASTNLOQCDNUMAS +#define FASTNLOQCDNUMAS + +#include "fastNLOLHAPDF.h" + + + +extern "C" { + double asfunc_(double* r2, int* nf , int* ierr); + double qcinit_(int* lun, char* filename, int); + double setalf_(double* alfs, double* r2); + double setord_(int* iord); + double setcbt_(int* nfix, int* iqc, int* iqb, int* iqt); + double gqmake_(double* qarr, double* wgt, int* n, int* nqin, int* nqout); + int iqfrmq_(double* q2); +} + +class fastNLOQCDNUMAS : public fastNLOLHAPDF { + +public: + // Parameter initialisation with PDG values + fastNLOQCDNUMAS(std::string name); + // Parameter initialisation with LHAPDF set values + fastNLOQCDNUMAS(std::string name, std::string LHAPDFFile, int PDFMem = 0); + // Inherited + void CalcCrossSection(); + + // Getters + double GetQMass(int pdgid) const; + double GetMz() const; + std::string GetNScheme() const; + int GetNFlavor(int nflavor) const; + int GetNLoop() const; + double GetAlphasMz() const; + + // Setters + void SetQMass(int pdgid, double qmass); + void SetMz(double Mz); + void SetNFlavor(int nflavor); + void SetNLoop(int nloop); + void SetAlphasMz(double AlphasMz); + void SetPDGValues(); + void SetLHAPDFValues(std::string LHAPDFFile, int PDFMem = 0); + + // Printers + void PrintParmValues(); + + // Other + void InitEvolveAlphas(); + + + +protected: + // Inherited functions + double EvolveAlphas(double Q) const ; + + // ---- Alphas vars ---- // + double QMass[6]; + double fMz; + std::string fnScheme; + int fnFlavor; + int fnLoop; + double fAlphasMz; +}; + +#endif diff --git a/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOReader.h b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOReader.h new file mode 100644 index 0000000000000000000000000000000000000000..58a9a33ae51089ecec0c01e2ef8f7933caec3f4a --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOReader.h @@ -0,0 +1,271 @@ +#ifndef __fastNLOReader__ +#define __fastNLOReader__ + +#include "fastNLOTable.h" +#include "fastNLOPDFLinearCombinations.h" + +// ---- Getters for results---- // +struct XsUncertainty { + //! Struct for returning vectors with cross section and relative uncertainty + // keep definition of this class outside of fastNLOReader, because of python wrapper + std::vector < double > xs; + std::vector < double > dxsl; + std::vector < double > dxsu; +}; + + +class fastNLOReader : public fastNLOTable , public fastNLOPDFLinearCombinations { + //! + //! fastNLOReader. + //! Abstract base class for evaluation of fastNLO tables. + //! Instantiations must implement functions for PDF and alpha_s access. + //! + +public: + typedef double(*mu_func)(double,double); + + fastNLOReader(std::string filename); + fastNLOReader(const fastNLOTable&); + fastNLOReader(const fastNLOReader&); + // fastNLOReader(std::string filename, std::string verbosity = "INFO"); + // fastNLOReader(const fastNLOTable&, std::string verbosity = "INFO"); + // fastNLOReader(const fastNLOReader&, std::string verbosity = "INFO"); + virtual ~fastNLOReader(); + void SetFilename(std::string filename) ; + void InitScalevariation(); + void SetUnits(fastNLO::EUnits Unit); + /// Set contribution Id On/Off. Check for Id of a particular contribution with ContrId(...) or use ActivateContribution(...). + bool SetContributionON(fastNLO::ESMCalculation eCalc , unsigned int Id , bool SetOn = true); + /// Activate first found contribution of type eCalc and order eOrd + bool ActivateContribution(fastNLO::ESMCalculation eCalc , fastNLO::ESMOrder eOrd , bool SetOn = true); + /// Find Id in table of contribution of type eCalc and order eOrd + int ContrId(const fastNLO::ESMCalculation eCalc, const fastNLO::ESMOrder eOrder) const; + /// Switch on LO and NLO contributions, deactivate other contributions. + void SetCoefficientUsageDefault(); + /// Get, if this table is a 'flexible-scale' table or not. + inline bool GetIsFlexibleScaleTable(fastNLOCoeffAddBase* ctest=NULL) const { + if ( ctest ) return ctest->GetNScaleDep() >= 3; + else if ( B_LO() ) return B_LO()->GetIsFlexibleScale(); + else if ( B_NLO() ) return B_NLO()->GetIsFlexibleScale(); + else if ( B_NNLO() ) return B_NNLO()->GetIsFlexibleScale(); + else return false; + } + void SelectProcesses( const std::vector< std::pair<int,int> >& proclist ); //!< tries to select the specified subprocesses for calculation. Prints a warning on failure. + void SelectProcesses( const std::string& processes, bool symmetric = true ); //!< tries to select the specified subprocesses for calculation. Prints a warning on failure. + + // ---- setters for specific options ---- // + void SetNewSqrtS(double NewSqrtS, double OldSqrtS=0 ); + + // ---- setters for scales of MuVar tables ---- // + void SetMuRFunctionalForm(fastNLO::EScaleFunctionalForm func); //!< Set the functional form of Mu_R + void SetMuFFunctionalForm(fastNLO::EScaleFunctionalForm func); //!< Set the functional form of Mu_F + void SetFunctionalForm(fastNLO::EScaleFunctionalForm func , fastNLO::EMuX kMuX); //!< Set functional form of MuX + bool SetScaleFactorsMuRMuF(double xmur, double xmuf); //!< Set scale factors for MuR and MuF + void SetExternalFuncForMuR(mu_func); //!< Set external function for scale calculation (optional) + void SetExternalFuncForMuF(mu_func); //!< Set external function for scale calculation (optional) + void SetExternalConstantForMuR(double MuR); //!< Set value for mu_r if mu_r is chosen to be a constant value (i.e. m_t, or m_Z) + void SetExternalConstantForMuF(double MuF); //!< Set value for mu_f if mu_f is chosen to be a constant value (i.e. m_t, or m_Z) + + void UseHoppetScaleVariations(bool); + + // ---- Pdf interface ---- // + void FillPDFCache(double chksum=0., bool lForce=false); //!< Prepare for recalculation of cross section with 'new'/updated pdf. + std::vector<double> GetXFXSqrtS(double x, double muf); //!< Interface to GetXFX, but for 'reweighted' sqrt(s) + virtual std::vector<double> GetXFX(double x, double muf) const = 0; + + // virtual functions for the user interface + virtual bool InitPDF() = 0; + virtual double EvolveAlphas(double Q) const = 0; + + // ---- alphas cache ---- // + void FillAlphasCache(bool lForce=false); //!< prepare for recalculation of cross section with new alpha_s value. + + // --- cache ---- // + void ResetCache() { fPDFCached=0; fAlphasCached=0;} + + // ---- Do the cross section calculation ---- // + void CalcCrossSection(); //!< Main method to calculate cross sections + void CalcReferenceCrossSection(); //!< Old-style from grid like entries; is this working at all? Remove? TODO + void CalcRefCrossSection(); //!< New-style from InfoBlocks + std::vector < double > GetCrossSection(bool lNorm = false); //!< Return vector with all cross section values, normalize on request + std::vector < double > GetReferenceCrossSection(); //!< Old-style from grid like entries; is this working at all? Remove? TODO + + std::vector < double > GetNormCrossSection(bool lNormScale = false, double xmurd = 1.0, double xmufd = 1.0); //!< Return vector with all normalized cross section values + std::vector < std::map< double, double > > GetCrossSection_vs_x1(); //! Cross section vs. x1 ( XSection_vsX1[bin][<x,xs>] ) Working? TODO + std::vector < std::map< double, double > > GetCrossSection_vs_x2(); //! Cross section vs. x2 ( XSection_vsX1[bin][<x,xs>] ) Working? TODO + std::vector < std::vector < double > > GetCrossSection2Dim(); //! Needed? Working? TODO + + std::vector < double > GetQScales(); //!< Order (power of alpha_s) rel. to LO: 0 --> LO, 1 --> NLO + std::vector < double > GetUncertainty(bool lNorm = false); //!< Return vector with statistical uncertainty of cross section values, normalise on request (NOT YET IMPLEMENTED) TODO + + //! Return struct with vectors (for C++) or vector of vectors (for Python) containing the cross section values and the selected uncertainty + //! Enum of Uncertaintstyle decides on method to call, but does not work for Python extension --> switch back to use differently named UncertaintyVec methods + //! Scale uncertainty + XsUncertainty GetXsUncertainty(const fastNLO::EScaleUncertaintyStyle eScaleUnc, bool lNorm = false, double sclfac = 1.); + // std::vector< std::vector<double> > GetXsUncertaintyVec(const fastNLO::EScaleUncertaintyStyle eScaleUnc, bool lNorm = false, int iprint = 0, double sclfac = 1.); + // void PrintXsUncertaintyVec(fastNLO::EScaleUncertaintyStyle, std::string UncName, bool lNorm = false, double sclfac =1.); + std::vector< std::vector<double> > GetScaleUncertaintyVec(const fastNLO::EScaleUncertaintyStyle eScaleUnc, bool lNorm = false, int iprint = 0, double sclfac = 1.); + void PrintScaleUncertaintyVec(fastNLO::EScaleUncertaintyStyle, std::string UncName, bool lNorm = false, double sclfac =1.); + //! Numerical uncertainty + XsUncertainty GetXsUncertainty(const fastNLO::ENumUncertaintyStyle eNumUnc, bool lNorm = false); + // std::vector< std::vector<double> > GetXsUncertaintyVec(const fastNLO::ENumUncertaintyStyle eNumUnc, bool lNorm = false, int iprint = 0); + // void PrintXsUncertaintyVec(fastNLO::ENumUncertaintyStyle, std::string UncName, bool lNorm = false); + std::vector< std::vector<double> > GetNumUncertaintyVec(const fastNLO::ENumUncertaintyStyle eNumUnc, bool lNorm = false, int iprint = 0); + void PrintNumUncertaintyVec(fastNLO::ENumUncertaintyStyle, std::string UncName, bool lNorm = false); + + double RescaleCrossSectionUnits(double binsize, int xunits); // Rescale according to kAbsoluteUnits and Ipublunits settings + + // ---- Getters for fastNLOReader member variables ---- // + fastNLO::EScaleFunctionalForm GetMuRFunctionalForm() const { return fMuRFunc; }; + fastNLO::EScaleFunctionalForm GetMuFFunctionalForm() const { return fMuFFunc; }; + fastNLO::EUnits GetUnits() const { return fUnits; }; + mu_func GetExternalFuncForMuR() { return Fct_MuR; }; + mu_func GetExternalFuncForMuF() { return Fct_MuF; }; + double fConst_MuR; //!< Constant _value_ for the renormalization scale. Used only for flexible-scale tables and if requested. + double fConst_MuF; //!< Constant _value_ for the factorization scale. Used only for flexible-scale tables and if requested. + + double GetScaleFactorMuR() const { return fScaleFacMuR; }; + double GetScaleFactorMuF() const { return fScaleFacMuF; }; + int GetScaleVariation() const { return fScalevar; }; + std::string GetScaleDescription(const fastNLO::ESMOrder eOrder, int iScale=0) const; + double GetNevt(const fastNLO::ESMOrder eOrder) const; //!< Get number of events in contribution + int GetNSubproc(const fastNLO::ESMOrder eOrder) const; //!< Get number of subprocesses in this contribution + std::vector < std::vector < std::pair < int,int > > > GetSubprocIndices(const fastNLO::ESMOrder eOrder) const; //!< Get information on the members of each subprocess. Each member of the [iSubproc][iPartonPair] pair is a pair of PDGIds indicating the particles involved in the subprocess. + + int GetNScaleVariations() const; //!< Get number of available scale variations + std::vector < double > GetScaleFactors() const; //!< Get list of available scale factors + + // ---- Print outs ---- // + /// Print basic info about fastNLO table and its contributions + void Print(int iprint) const; + void PrintContributionSummary(int iprint) const; + void PrintCrossSections() const; //!< Print cross sections (optimized for double-differential tables) + void PrintCrossSectionsWithReference(); + + // ---- Test virtual functions for reasonable values. ---- // + bool TestXFX(); //!< Test if XFX reasonable values + bool TestAlphas(); //!< Test if EvolvaAlphas returns a reasonable value + + +protected: + fastNLOReader(); + void OrderCoefficients() ; + //void ReadTable(); + void StripWhitespace(std::string* s); + + void PrintScaleSettings(fastNLO::EMuX kMuX=fastNLO::kMuR); + void FillBlockBPDFLCsDISv20(fastNLOCoeffAddFix* B); + void FillBlockBPDFLCsDISv21(fastNLOCoeffAddFlex* B, fastNLOCoeffAddFlex* B0=NULL); + void FillBlockBPDFLCsHHCv20(fastNLOCoeffAddFix* B); + void FillBlockBPDFLCsHHCv21(fastNLOCoeffAddFlex* B); + void CalcAposterioriScaleVariationMuR(); + void CalcAposterioriScaleVariationMuF(); + void FillAlphasCacheInBlockBv20(fastNLOCoeffAddFix* B); + void FillAlphasCacheInBlockBv21(fastNLOCoeffAddFlex* B); + double CalcAlphas(double Q); + double CalcReferenceAlphas(); + double CalcNewPDFChecksum(); + double CalcChecksum(double mu); + bool PrepareCache(); + + double CalcMu(fastNLO::EMuX kMuX, double scale1 , double scale2 , double scalefactor); + double FuncMixedOver1(double scale1 , double scale2) ; + double FuncMixedOver2(double scale1 , double scale2) ; + double FuncMixedOver4(double scale1 , double scale2) ; + double FuncMixed2s2Ov2(double scale1 , double scale2) ; + double FuncMixed2s2Ov4(double scale1 , double scale2) ; + double FuncPow4Sum(double scale1 , double scale2) ; + double FuncWgtAvg(double scale1 , double scale2) ; + double FuncLinearMean(double scale1 , double scale2) ; + double FuncLinearSum(double scale1 , double scale2) ; + double FuncMax(double scale1 , double scale2) ; + double FuncMin(double scale1 , double scale2) ; + double FuncProd(double scale1 , double scale2) ; + double FuncExpProd2(double scale1 , double scale2) ; + + void CalcCrossSectionv20(fastNLOCoeffAddFix* B); + void CalcCrossSectionv21(fastNLOCoeffAddFlex* B); + + fastNLOCoeffAddBase* B_LO() const { + //if ( BBlocksSMCalc[fastNLO::kFixedOrder][fastNLO::kLeading] !=0 ) + return (fastNLOCoeffAddBase*) BBlocksSMCalc[fastNLO::kFixedOrder][fastNLO::kLeading]; + // else if ( B_NLO()!= NULL ) return B_NLO(); + // else if ( B_NNLO()!= NULL ) return B_NNLO(); + }; + fastNLOCoeffAddBase* B_NLO() const { + return (fastNLOCoeffAddBase*) BBlocksSMCalc[fastNLO::kFixedOrder][fastNLO::kNextToLeading]; + }; + fastNLOCoeffAddBase* B_NNLO() const { + return (fastNLOCoeffAddBase*) BBlocksSMCalc[fastNLO::kFixedOrder][fastNLO::kNextToNextToLeading]; + }; + fastNLOCoeffBase* B_ThC(int n=0) { + if (BBlocksSMCalc[fastNLO::kThresholdCorrection].empty()) return NULL; + else return BBlocksSMCalc[fastNLO::kThresholdCorrection][n]; + }; + fastNLOCoeffAddBase* B_Any() const { + if (B_LO() != NULL ) return B_LO(); + else if ( B_NLO()!= NULL ) return B_NLO(); + else if ( B_NNLO()!= NULL ) return B_NNLO(); + // else if ( B_ThC(0)!= NULL ) return B_ThC(0); + // else if ( B_ThC(1)!= NULL ) return B_ThC(1); + else { + std::cerr<<"Error. Cannot get any additive contribution, but requested."<<std::endl; + exit(3); + return NULL; + } + }; + + // ---- setters for scale variation in v2.0 tables ---- // + bool SetScaleVariation(int scalevar); //!< Choose the MuF scale variation table + + // ---- human readable strings ---- // + //static const std::string fContrName[20]; + //static const std::string fOrdName[4][4]; + //static const std::string fNSDep[6]; + + bool UpdateProcesses(); //!< Checks if the choosen processes in fselect_processes are compatible to all selected contributions and activate them. Returns true on success false on failure. + +protected: + std::string ffilename; + int fScalevar; + double fScaleFacMuR; + double fScaleFacMuF; + fastNLO::EScaleFunctionalForm fMuRFunc; + fastNLO::EScaleFunctionalForm fMuFFunc; + fastNLO::EUnits fUnits; + bool fPDFSuccess; + double fPDFCached; + double fAlphasCached; + mu_func Fct_MuR; //!< Function, if you define your functional form for your scale external + mu_func Fct_MuF; //!< Function, if you define your functional form for your scale external + + bool fUseHoppet; + double fSqrtSovSP = 1; //!< Center-of-mass 'reweighting' + + std::vector < std::pair<int,int> >* fselected_processes = NULL; //!< selected processes. When NULL, all processes are used in the calculation + + // ---- pointers to coefftables in fCoeff ---- // + // std::vector< std::vector < fastNLOCoeffAddBase* > > fCoAdd; + // std::vector< std::vector < fastNLOCoeffMult* > > fCoMult; + std::vector < std::vector < fastNLOCoeffBase* > > BBlocksSMCalc; //!< BlockB's for SM corrections + + // ---- Cross sections ---- // + std::vector < double > XSection_LO; + std::vector < double > XSection; + std::vector < double > dXSection; // uncertainty sum of x section + std::vector < double > dX2Section; // squared uncertainty sum of x section + std::vector < double > QScale_LO; + std::vector < double > QScale; + std::vector < std::map< double, double > > fXSection_vsX1; //! Cross section vs. x ( XSection_vsX1[bin][<x,xs>] ) + std::vector < std::map< double, double > > fXSection_vsX2; + std::vector < std::map< double, double > > fXSection_vsQ2; //RADEK add + + // ---- reference tables ---- // + std::vector < double > XSectionRef; + std::vector < double > XSectionRefMixed; + std::vector < double > XSectionRef_s1; + std::vector < double > XSectionRef_s2; + + +}; +#endif diff --git a/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOTable.h b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOTable.h new file mode 100644 index 0000000000000000000000000000000000000000..de0638f08aefcede200f33ddd0a68cc7f281c523 --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOTable.h @@ -0,0 +1,317 @@ +// Daniel Britzger +// DESY, 08.08.2013 +#ifndef __fastNLOTable__ +#define __fastNLOTable__ +#include <fstream> +#include <istream> +#include <string> +#include <vector> +#include "speaker.h" + +#include "fastNLOCoeffBase.h" +#include "fastNLOCoeffAddFix.h" +#include "fastNLOCoeffAddFlex.h" +#include "fastNLOCoeffData.h" +#include "fastNLOCoeffMult.h" +#include "fastNLOConstants.h" + + + +class fastNLOTable { + + public: + fastNLOTable(); + fastNLOTable(std::string filename); + // fastNLOTable(std::string filename, std::string verbosity = "INFO"); + virtual ~fastNLOTable(); + // fastNLOTable(const fastNLOTable&, std::string verbosity = "INFO"); + fastNLOTable(const fastNLOTable&); + + virtual void ReadTable(); + virtual void WriteTable(); + virtual void WriteTable(std::string filename); + bool IsCompatible(const fastNLOTable& other) const; + bool IsCompatibleScenario(const fastNLOTable& other) const; + bool IsCatenable(const fastNLOTable& other) const; + bool IsCatenableScenario(const fastNLOTable& other) const; + bool IsEquivalent(const fastNLOTable& other, double rtol) const; + + // --- function previously included in fastNLOBase + // header + void PrintHeader(int iprint) const; //!< Print header variables (BlockA1) to screen + bool IsCompatibleHeader(const fastNLOTable& other) const; //!< Compare header with header of another table + bool IsCatenableHeader(const fastNLOTable& other) const; //!< Compare header with header of another table + + // getter/setters + std::string GetFilename() const {return ffilename;} + void SetFilename(std::string name){ffilename=name;} + + // int GetItabversion() const {return Itabversion;} + // void SetItabversion(int version){Itabversion = version;} + int GetITabVersionRead() const {return ITabVersionRead;} + int GetITabVersionWrite() const {return ITabVersionWrite;} + void SetITabVersionRead(int version){ITabVersionRead = version;} + void SetITabVersionWrite(int version){ITabVersionWrite = version;} + + std::string GetScenName() const {return ScenName;} + void SetScenName(std::string name){ScenName = name;} + + int GetNmult() const; + int GetNcontrib() const; + int GetNdata() const; + + int GetOutputPrecision() const {return fPrecision;} + void SetOutputPrecision(int precision) {fPrecision = precision;} + + /// _____________________________________________________________________________________________ + /// Getters for binning structure + /// _____________________________________________________________________________________________ + + /// Get dimensionality of calculation: single-, double-, or triple-differential + unsigned int GetNumDiffBin() const {return NDim;} + + /// Getters/setters for linear array of observable bins "ObsBin" running from 0->(NObsBin-1) + + /// Return lower bin bound for obs. bin iObs in dim. iDim + double GetObsBinLoBound(unsigned int iObs, unsigned int iDim) const; + /// Return upper bin bound for obs. bin iObs in dim. iDim + double GetObsBinUpBound(unsigned int iObs, unsigned int iDim) const; + /// Return std::vector of lower bin bounds in dim. iDim for all obs. bins + std::vector < double > GetObsBinsLoBounds(unsigned int iDim) const; + /// Set std::vector of lower bin bounds in dim. iDim for all obs. bins + void SetObsBinsLoBounds(unsigned int iDim, std::vector < double > v); + /// Return std::vector of upper bin bounds in dim. iDim for all obs. bins + std::vector < double > GetObsBinsUpBounds(unsigned int iDim) const; + /// Set std::vector of upper bin bounds in dim. iDim for all obs. bins + void SetObsBinsUpBounds(unsigned int iDim, std::vector < double > v); + /// Return minimum value of all lower bin bounds for dim. iDim + double GetObsBinsLoBoundsMin(unsigned int iDim) const; + /// Return maximum value of all upper bin bounds for dim. iDim + double GetObsBinsUpBoundsMax(unsigned int iDim) const; + /// Return std::vector of pairs with lower and upper bin bounds in dim. iDim for all obs. bins + std::vector < std::pair < double, double > > GetObsBinsBounds(unsigned int iDim) const; + /// Return observable bin no. for std::vector of values obs0=var0,obs1=var1,...; -1 if outside range + int GetObsBinNumber(const std::vector < double >& vobs) const ; + /// Return observable bin no. for obs0=var0 in 1D binning; -1 if outside range + int GetObsBinNumber(double var0) const ; + /// Return observable bin no. for obs0=var0,obs1=var1 in 2D binning; -1 if outside range + int GetObsBinNumber(double var0, double var1) const ; + /// Return observable bin no. for obs0=var0,obs1=var1,obs2=var2 in 3D binning; -1 if outside range + int GetObsBinNumber(double var0, double var1, double var2) const ; + + /// Getters for multidimensional binning, here called Dim<I>Bins + + /// Return std::vector of pairs with unique bin bounds of 1st dim. + std::vector < std::pair < double, double > > GetDim0BinBounds() const; + /// Return std::vector of pairs with unique bin bounds of 2nd dim. for 'iDim0Bin' of 1st dim. + std::vector < std::pair < double, double > > GetDim1BinBounds(unsigned int iDim0Bin) const; + /// Return std::vector of pairs with unique bin bounds of 3rd dim. for 'iDim0Bin' and 'iDim1Bin' of 1st two dim. + std::vector < std::pair < double, double > > GetDim2BinBounds(unsigned int iDim0Bin, unsigned int iDim1Bin) const; + /// Return std::vector of pairs with lower and upper bin bounds for all dimensions for a given obs. bin + std::vector < std::pair < double, double > > GetObsBinDimBounds(unsigned int iObs) const; + /// Return pair with lower and upper bin bounds for given obs. bin and dim. iDim + std::pair < double, double > GetObsBinDimBounds(unsigned int iObs, unsigned int iDim) const; + /// Return bin no. in 1st dim. for obs. bin iObs + unsigned int GetIDim0Bin(unsigned int iObs) const; + /// Return bin no. in 2nd dim. for obs. bin iObs + unsigned int GetIDim1Bin(unsigned int iObs) const; + /// Return bin no. in 3rd dim. for obs. bin iObs + unsigned int GetIDim2Bin(unsigned int iObs) const; + /// Return no. of bins in 1st dimension + unsigned int GetNDim0Bins() const; + /// Return no. of bins in 2nd dimension for given bin in 1st dim. + unsigned int GetNDim1Bins(unsigned int iDim0Bin) const; + /// Return no. of bins in 3rd dimension for given bins in 1st and 2nd dim. + unsigned int GetNDim2Bins(unsigned int iDim0Bin, unsigned int iDim1Bin) const; + /// Return bin no. in 1st dim. for obs0=var0; -1 if outside range + int GetODim0Bin(double var0) const; + /// Return bin no. in 2nd dim. for obs0=var0,obs1=var1; -1 if outside range + int GetODim1Bin(double var0, double var1) const; + /// Return bin no. in 3rd dim. for obs0=var0,obs1=var1,obs2=var2; -1 if outside range + int GetODim2Bin(double var0, double var1, double var2) const; + // DO NOT USE! DOES NOT WORK! + // unsigned int GetIDimBin(unsigned int iObs, unsigned int iDim) const; + // std::vector < std::pair < double, double > > GetBinBoundaries(int iDim0Bin, int iDim1Bin = -1, int iDim2Bin = -1); + + /// ___________________________________________________________________________________________________ + /// Some more info getters with respect to observable dimensions + /// ___________________________________________________________________________________________________ + + /// Get if dimension is 'truly differential' or bin-integrated (divided by bin width or not) + int GetIDiffBin(int bin) const {return IDiffBin[bin];} + /// Get BinSize for bin = BinSizeDim1 < * BinSizeDim2 > + double GetBinSize(int bin) const {return BinSize[bin];}; + /// Get vector of dimensions labels + std::vector < std::string > GetDimLabels() const {return DimLabel;}; + /// Get dimension label for dimension iDim + std::string GetDimLabel(int iDim) const {return DimLabel[iDim];}; + + /// ___________________________________________________________________________________________________ + /// Some info getters with respect to normalization + /// ___________________________________________________________________________________________________ + + /// Get normalization flag: + /// def=0 -> no norm. + /// 1, 2, 3,... -> normalize to slice in NDim of same table + /// -1,-2,-3,... -> normalize to slice in NDim of other table + int GetINormFlag() const {return INormFlag;}; + /// Get normalization logical (def=false) + bool IsNorm() const {return INormFlag == 0 ? false : true;} + /// Get filename of normalization table for INormFlag<0 + std::string GetDenomTable() const {return DenomTable;} + + /// ___________________________________________________________________________________________________ + /// Some info getters & setters for table modifications + /// ___________________________________________________________________________________________________ + + /// get/set scenario description + std::vector <std::string> GetScDescr() const { return ScDescript; } + void SetScDescr(std::vector <std::string> ScDescr); + + /// get/set cross section units of published results (pb = 12, fb = 15, ...) + int GetIpublunits() const {return Ipublunits;} + void SetIpublunits(int unit){Ipublunits = unit;} + + /// get/set center-of-mass energy in units of GeV + double GetEcms() const {return Ecms;} + void SetEcms(double E) {Ecms = E;} + + /// get/set power of alpha_s for LO process + int GetLoOrder() const {return ILOord;} + void SetLoOrder(int LOOrd); + + /// get/set no. of observable bins + unsigned int GetNObsBin() const {return NObsBin;} + void SetNObsBin(int NObs); + + /// get/set Bin vector + std::vector < std::vector <std::pair<double,double> > > GetBins() const {return Bin;}; + void SetBins(std::vector < std::vector <std::pair<double,double> > >); + + /// get/set BinSize vector + std::vector < double > GetBinSize() const {return BinSize;}; + void SetBinSize(std::vector < double >); + + // Erase observable bin; iObsIdx is the C++ array index to be removed and + // not the observable bin no. running from 1 to NObsBin + void EraseBinFromTable(unsigned int iObsIdx); + template<typename T> void EraseBin(std::vector<T>& v, unsigned int idx); + + // Multiply observable bin; iObsIdx is the C++ array index to be multiplied and + // not the observable bin no. running from 1 to NObsBin + void MultiplyBinInTable(unsigned int iObsIdx, double fact); + void MultiplyBinSize(unsigned int iObsIdx, double fact); + template<typename T> void MultiplyBin(std::vector<T>& v, unsigned int idx, double fact); + void MultiplyBinBorders(unsigned int iDim, double fact); + + void CatBinToTable(const fastNLOTable& other, unsigned int iObsIdx, unsigned int table_count); + void CatBin(const fastNLOTable& other, unsigned int iObsIdx, unsigned int table_count); + + /// ??? + /// Get Rivet ID of analysis + std::string GetRivetId() const; + /// Get cross section from analysis description + std::string GetXSDescr() const; + void SetDimLabel(std::string label, unsigned int iDim, bool IsDiff = true); + void SetNumDiffBin(int iDiff) {NDim=iDiff; DimLabel.resize(NDim); IDiffBin.resize(NDim);} + + //void Cat(const fastNLOCoeffBase& other); + + + /// ___________________________________________________________________________________________________ + /// Info print out functionality + /// ___________________________________________________________________________________________________ + + /// Print basic info about fastNLO table and its contributions + void PrintTableInfo(const int iprint = 0) const; // DEPRECATED, use PrintContributionSummary instead + void PrintContributionSummary(int iprint) const; + /// Print (technical) constants of fastNLO table (use iprint) for level of details. + void PrintFastNLOTableConstants(const int iprint = 0) const; // DEPRECATED, use PrintContributionSummary instead + void PrintScenario(int iprint) const; + virtual void Print(int iprint) const; + + /// ___________________________________________________________________________________________________ + /// Other useful functions + /// ___________________________________________________________________________________________________ + void MergeTable(const fastNLOTable& rhs, fastNLO::EMerge option=fastNLO::kMerge ); //!< 'merge' + void MergeTables(const std::vector<fastNLOTable*>& tables, fastNLO::EMerge option=fastNLO::kMerge, double cutRMS=0 ); //!< 'merge' (also supports 'median' and 'mean') + void AddTable(const fastNLOTable& rhs, fastNLO::EMerge option=fastNLO::kMerge); //!< 'merge' + void SetUserWeights(double wgt); //!< Set user weights for subsequent mergeing wgt + void SetUserWeights(std::vector<double> wgtsObs); //!< Set user weights for subsequent mergeing wgt[obs] + void SetUserWeights(std::vector<std::vector<double> > wgtsBinProc); //!< Set user weights for subsequent mergeing wgt[proc][obs] + + /// Handle coefficient tables + //int WriteCoeffTable(int no); + //int WriteCoeffTable(int no, ofstream* outstream); + //int WriteCoeffTableDividebyN(int no); + void DeleteAllCoeffTable(); + //int CreateCoeffBase(int no); + int CreateCoeffTable(int no, fastNLOCoeffBase *newcoeff); + void CatenateTable(const fastNLOTable& other); + fastNLOCoeffBase* GetCoeffTable(int no) const; + /// Returns pointer to data table if available, else returns NULL pointer + fastNLOCoeffData* GetDataTable() const; + /// Returns pointer to reference table if available, else returns NULL pointer + fastNLOCoeffAddBase* GetReferenceTable(fastNLO::ESMOrder eOrder) const; + +private: + bool cmp(const double x1, const double x2) const; + bool cmp(const std::vector<double>& x1, const std::vector<double >& x2) const; + bool cmp(const std::vector<std::vector<double> >& x1,const std::vector<std::vector<double > >& x2) const; + bool cmp(const std::vector<std::vector<std::pair<double,double> > >& x1,const std::vector<std::vector<std::pair<double,double> > >& x2) const; + +protected: + // --- functions previously included in fastNLOBase + void PrintWelcomeMessage(); //!< Say hello to fastNLO user + std::ostream* OpenFileWrite(bool compress=false); //!< open std::ofstream for writing tables to ffilename + std::istream* OpenFileRead(); //!< open std::ifstream for reading table + //std::ofstream *OpenFileRewrite(); + void WriteHeader(std::ostream& table); //!< write (or cout) hader using std::ostream + int ReadHeader(std::istream& table); //!< read header of table (BlockA1) + void CloseFileWrite(std::ostream& table); + void CloseFileRead(std::istream& table); + //void CloseStream(); + + std::string ffilename; + int fPrecision; + // int Itabversion; + int ITabVersionRead; + int ITabVersionWrite = fastNLO::tabversion; + std::string ScenName; + + PrimalScream logger; + static bool fWelcomeOnce; + // ---- fastNLOBase end + + + void WriteScenario(std::ostream& table); + void ReadScenario(std::istream& table); + void ReadCoeffTables(std::istream& table, int nCoeff); + fastNLOCoeffBase* ReadRestOfCoeffTable(const fastNLOCoeffBase& cB, std::istream& table, int ITabVersionRead); + + std::vector < fastNLOCoeffBase* > fCoeff; + //fastNLOCoeffData* fData; + + double Ecms; + int ILOord; + int Ipublunits; + std::vector <std::string> ScDescript; + + // Unsigned int + unsigned int NObsBin; + unsigned int NDim; + + std::vector <std::string> DimLabel; + std::vector <int> IDiffBin; + // Every bin has a lower and upper bin boundary and belongs to a 'dimension'. In a point-wise differential measurement, the upper bin boundary is equal to the lower one. + std::vector < std::vector <std::pair<double,double> > > Bin; + std::vector <double> BinSize; + + // Contributions for normalization + int INormFlag; + std::string DenomTable; + std::vector <int> IDivLoPointer; + std::vector <int> IDivUpPointer; + +}; +#endif diff --git a/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOTableConstants.h b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOTableConstants.h new file mode 100644 index 0000000000000000000000000000000000000000..55e2b876482f60dbc1a62efb4509216d3ec7f04b --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOTableConstants.h @@ -0,0 +1,204 @@ +#ifndef __fnlotableconstants__ +#define __fnlotableconstants__ + +// NEVER EVER include a project's internal config.h in installable header files! +// Use for conditional compilation only in .cc source code files. +// Otherwise conflicts with other linked projects are to be expected. +#include <iostream> +#include <string> +#include <vector> + +namespace fastNLO { + + struct GeneratorConstants { + //! GeneratorConstants + //! + //! Collection of generator specific constants. + //! These are: + //! - name and version of generator + //! - references for generator + //! - (additional information about generator may be included in References) + // KR: Use C++11 possibility of non-static member initialization + std::string Name{"Undefined"}; //!< Name and version of generator + std::vector<std::string> References; //!< References for generator. Potentially include additional information. + int UnitsOfCoefficients {12}; //!< Prefactor of x section in barns for coefficients passed to fastNLO (neg. power of 10: pb->12, fb->15) + //! Transform these constants into 'CodeDescription' usable with fastNLO table + std::vector<std::string > GetCodeDescription() { + std::vector<std::string > CodeDescr(References.size()+1); + CodeDescr[0] = Name; + for ( unsigned int i = 0 ; i<References.size() ; i++ ) + CodeDescr[i+1] = References[i]; + return CodeDescr; + } + }; + + + struct ProcessConstants { + //! ProcessConstants + //! + //! Collection of process specific constants. + //! Please see fastNLO table format definition for a detailed explanation. + //! + int LeadingOrder{-1}; //!< Order in alpha_s of leading order process + int NPDF{-1}; //!< No. of PDFs involved + int NSubProcessesLO{-1}; //!< No. of LO subprocesses + int NSubProcessesNLO{-1}; //!< No. of NLO subprocesses + int NSubProcessesNNLO{-1}; //!< No. of NNLO subprocesses + int IPDFdef1{-1}; //!< Flag 1 to define PDF linear combinations of partonic subprocesses (e.g. hh --> jets: 3) + int IPDFdef2{-1}; //!< Flag 2 to define PDF linear combinations (dep. on IPDFdef1; for 3 e.g. 1 for jet specific LCs, 121 for generic 11x11 matrix) + int IPDFdef3LO{-1}; //!< Flag 3 to define PDF LCs at LO (dep. on IPDFdef1, IPDFdef2; for 3, 1 e.g. 6 subprocesses, ignored for IPDFdef2==121) + int IPDFdef3NLO{-1}; //!< Flag 3 to define PDF LCs at NLO (dep. on IPDFdef1, IPDFdef2; for 3, 1 e.g. 7 subprocesses, ignored for IPDFdef2==121) + int IPDFdef3NNLO{-1}; //!< Flag 3 to define PDF LCs at NNLO (dep. on IPDFdef1, IPDFdef2; for 3, 1 e.g. 7 subprocesses, ignored for IPDFdef2==121) + int NPDFDim{-1}; //!< Define internal storage mode for PDF LCs (dep. on NPDF; e.g. for 1: 0 for linear, for 2: 1 for half- or 2 for full-matrix) + std::vector<std::vector<std::pair<int,int> > > PDFCoeffLO; //!< PDF Linear combinations for LO calculation (used only if IPDFdef2==0) + std::vector<std::vector<std::pair<int,int> > > PDFCoeffNLO; //!< PDF Linear combinations for NLO calculation (used only if IPDFdef2==0) + std::vector<std::vector<std::pair<int,int> > > PDFCoeffNNLO; //!< PDF Linear combinations for NNLO calculation (used only if IPDFdef2==0) + std::vector<std::vector<int> > PDFLiCoInLO; //!< PDF Linear combinations for LO calculation (used only if IPDFdef2==0) [definition as in steering] (used if PDFCoeffLO is empty) + std::vector<std::vector<int> > PDFLiCoInNLO; //!< PDF Linear combinations for NLO calculation (used only if IPDFdef2==0) [definition as in steering] + std::vector<std::vector<int> > PDFLiCoInNNLO; //!< PDF Linear combinations for NNLO calculation (used only if IPDFdef2==0) [definition as in steering] + std::vector<std::pair<int,int> > AsymmetricProcesses; //!< Specify processes that need to be exchanged in half-matrix notation, when xmin>xmax (only if NPDFDim==1) + std::string Name{"Undefined"}; //!<< More precise description for specific contribution (e.g. LO, pp -> 2 jets; also can add 'run-mode' and further details) + std::vector<std::string> References; //!<< References for process (also other plain text lines can be included here) + std::vector<std::string > GetProcessDescription() { + //! Get 'ContrDescription' usable for fastNLO table + unsigned int iadd = 0; + if ( Name != "" ) iadd=1; + std::vector<std::string > ProcDescr(References.size()+iadd); + if ( iadd != 0 ) ProcDescr[0] = Name; + for ( unsigned int i = 0 ; i<References.size() ; i++ ) + ProcDescr[i+iadd] = References[i]; + return ProcDescr; + } + }; + + + struct ScenarioConstants { + //! fastNLO Scenario constants + //! Steering parameters for a fastNLO scenario. + //! Contains mostly the binning and description of the specific scenario + + std::string ScenarioName{"Undefined"}; //!< Name of the scenario + std::vector<std::string> ScenarioDescription; //!< Description of the scenario + int PublicationUnits{12}; //!< Unit of data cross sections (negative power of 10, e.g. 12->pb, 15->fb) + int DifferentialDimension{0}; //!< Dimensionality of binning (1: single-differential, 2: double-differential; also decides if SingleDifferentialBinning or DoubleDifferentialBinning is used) + std::vector<std::string> DimensionLabels; //!< Labels (symbol and unit) for the measurement dimensions (from outer to inner "loop"), e.g. "|y|" and "p_T [GeV]". This may also help to define the observables to be calculated in an automatized way! + std::vector<int> DimensionIsDifferential; //!< Specify for each dimension whether: 0: the cross section is NOT differential, i.e. there are two bin borders (but NO division (normalization) by bin width); 1 : the cross section is point-wise differential, i.e. only one point is given; 2 : the cross section is bin-wise differential, i.e. there are two bin borders and division by bin width + bool CalculateBinSize{true}; //!< Calculate bin width from lower and upper bin boundaries + double BinSizeFactor{1}; //!< Possibility to provide additional normalization factor, e.g. of 2 for bins in |y| + std::vector<double> BinSize; //!< If 'CalculateBinSize' is 'false' provide table with bin widths 'by hand' for normalization. If the calculation should not be divided by bin width, then use 'DimensionIsDifferential' equal '0', and set 'CalculateBinSize' 'true' for each dimension. + std::string ScaleDescriptionScale1{"Undefined"}; //!< "<pT_1,2>_[GeV]" # This defines the scale to be used (Note: The 1st scale should always be in units of [GeV]!) + std::string ScaleDescriptionScale2{"Undefined"}; //!< "pT_max_[GeV]" # Specify 2nd scale name and unit (ONLY for flexible-scale tables) + std::vector<double> SingleDifferentialBinning; //!< Observable binning Use either 'SingleDifferentialBinning' or 'DoubleDifferentialBinning' or 'TripleDifferentialBinning' in accordance with 'DifferentialDimension' above + std::vector<std::vector<double> > DoubleDifferentialBinning; //!< Observable binning + std::vector<std::vector<double> > TripleDifferentialBinning; //!< Observable binning + double CenterOfMassEnergy{7000.}; //!< Center-of-mass energy in GeV. LHC Next Run II: 13000 + int PDF1{2212}; //!< PDF of 1st hadron (following PDG convention: proton 2212). + int PDF2{2212}; //!< PDF of 2nd hadron (following PDG convention: proton 2212). + std::string OutputFilename{"fastnlo"}; //!< Filename of fastNLO output table + int OutputPrecision{8}; //!< Number of decimal digits to store in output table (def.=8). + bool OutputCompression{true}; //!< If zlib available, gzip output table. + // KR: Cache experimental, switch off by default + int CacheType{0}; //!< Cache type: 1 or 2, 0 for deactivation + int CacheMax{0}; //!< maximum size of cache + int CacheCompare{0}; //!< number of elements to be compared with new entry + // Flex-scale tables; should be future default ... + bool FlexibleScaleTable{false}; //!< Create table fully flexible in mu_f (larger size, and requires scale independent weights during creation), true, or table with fixed number of mu_f scale factors, def.=false. + int NFlexScales{2}; //!< No. of flexible scales to fill simultaneously; 1 or 2 + double FlexConstScale2{91.1876}; //!< Constant value set for 2nd "flexible" scale + // Fixed-scale tables + std::vector<double> ScaleVariationFactors; //!< Factorization scale variations (only needed for fixed-scale tables), List of scale factors must include factor '1', Scale factors will be ordered according to fastNLO convention: (1, min, ... , max). Defaults: {0.5, 1, 2} + bool ReadBinningFromSteering{false}; //!< Specify if binning is read from fScenConst or from warmup + bool IgnoreWarmupBinningCheck{false}; //!< Don't check warmup binning to avoid too many floating precision issues + bool ApplyPDFReweighting{true}; //!< Apply reweighting of pdfs for an optimized interpolation, def.=true. + bool CheckScaleLimitsAgainstBins{true}; //!< For warmup-run! Set limits for scale nodes to bin borders, if possible + // KR: Attention: Meaning of InclusiveJets keyword changed between nnlo-bridge code 0.0.40 and 0.0.46 to NNLOJET; see str files for info + bool InclusiveJets{false}; //!< Flag to store one entry per jet, not just one per event; not stored in table; only used with NNLOJET so far + // KR: Feature experimental, switch off by default + double ReduceXmin{0.}; //!< Reduce xmin by n nodes (no change in number of x nodes) + /**# -------------------------------------------------------------------- # + # Choose fastNLO interpolation kernels and distance measures + # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + # Currently implemented interpolation kernels + # Catmull + # Lagrange + # OneNode + # Linear + # + # Currently implemented distance measures + # linear + # loglog025 eq. to (log(log(4*x))) + # log10 + # sqrtlog10 eq. to sqrt(log_10(x)) + # -------------------------------------------------------------------- # + */ + std::string X_Kernel{"Lagrange"}; //!< "Lagrange" + std::string X_DistanceMeasure{"sqrtlog10"}; //!< "sqrtlog10" + double X_NNodes{15}; //!< 15 + std::string X_NNodeCounting{"NodesPerBin"}; //!< "NodesPerBin" ("NodesMax", "NodesPerMagnitude") + + std::string Mu1_Kernel{"Lagrange"}; //!< "Lagrange" + std::string Mu1_DistanceMeasure{"loglog025"}; //!< "loglog025" + double Mu1_NNodes{6}; //!< 6 + std::string Mu1_NNodeCounting{"NodesPerBin"}; + + std::string Mu2_Kernel{"Lagrange"}; //!< "Lagrange"; Scale2 not used for fixed-scale tables + std::string Mu2_DistanceMeasure{"loglog025"}; //!< "loglog025" + double Mu2_NNodes{6}; //!< 6 + std::string Mu2_NNodeCounting{"NodesPerBin"}; + + // KR: Defaults can be set using SetScenConstsDefaults(). + // If the struct is directly created within another project, + // uninitialised struct members are possible! + }; + + + struct WarmupConstants { + //! Variables from warmup-run + //! Initalize WarmupConstants with ScenarioConstants + //! for consistency. + //! Furthermore needed for full initialization: + //! + OrderInAlphasOfWarmupRunWas + //! + Binning + //! + Values + //! + headerValues + int OrderInAlphasOfWarmupRunWas; + bool CheckScaleLimitsAgainstBins; + std::string ScaleDescriptionScale1; + std::string ScaleDescriptionScale2; + int DifferentialDimension; + std::vector<std::string> DimensionLabels; + std::vector<int> DimensionIsDifferential; + std::vector<std::vector<double> > Values; + std::vector<std::string> headerValues; + std::vector<std::vector<double> > Binning; + public: + WarmupConstants(const ScenarioConstants& scenario) { + Init(); + ScaleDescriptionScale1 = scenario.ScaleDescriptionScale1; + ScaleDescriptionScale2 = scenario.ScaleDescriptionScale2; + CheckScaleLimitsAgainstBins = scenario.CheckScaleLimitsAgainstBins; + DifferentialDimension = scenario.DifferentialDimension; + DimensionLabels = scenario.DimensionLabels; + DimensionIsDifferential = scenario.DimensionIsDifferential; + std::cout<<"Warning [WarmupConstants]. Binning has not be taken over from ScenarioConstants (not implemented.)"<<std::endl; + //exit(4); + // Binning = ; + // Values = ; + // headerValues = ; + } + void Init(){ + OrderInAlphasOfWarmupRunWas=-1; + // ObsBin x_min x_max 173.3GeV_min 173.3GeV_max y_min y_max + headerValues.clear(); + // headerValues.push_back("ObsBin"); + // headerValues.push_back("x_min"); + // headerValues.push_back("x_max"); + }; + + WarmupConstants() { + Init(); + } + }; +}; + +#endif diff --git a/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOTools.h b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOTools.h new file mode 100644 index 0000000000000000000000000000000000000000..b66340e4fb9d5338d9715bdacc6cd8d23249c30f --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOTools.h @@ -0,0 +1,294 @@ +#ifndef __fnlotools__ +#define __fnlotools__ + +#include <string> +#include <vector> +#include "fastNLOReader.h" +#include "speaker.h" + +namespace fastNLOTools { + + const bool binary = false; + + //! - Reading std::vectors from disk + template<typename T> int ReadVector( std::vector<T>& v, std::istream& table , double nevts = 1); + int ReadVector( std::vector<double>& v, std::istream& table , double nevts = 1); + + template<typename T> int ReadFlexibleVector(std::vector<T>& v, std::istream& table, int nProcLast=0 , double nevts = 1); + int ReadFlexibleVector( std::vector<std::string >& v, std::istream& table , int nProcLast = 0 , double nevts = 1 ); + int ReadFlexibleVector( std::vector<double >& v, std::istream& table , int nProcLast = 0 , double nevts = 1 ); + int ReadFlexibleVector( std::vector<int >& v, std::istream& table , int nProcLast = 0 , double nevts = 1 ); + int ReadFlexibleVector( std::vector<unsigned long long >& v, std::istream& table , int nProcLast = 0 , double nevts = 1 ); + int ReadUnused( std::istream& table ); + + //! - Resizing tools + template<typename T> void ResizeFlexibleVector(std::vector<T>& v, const std::vector<T>& nom); + void ResizeFlexibleVector( std::vector<double >& v, const std::vector<double >& nom); + void ResizeFlexibleVector( std::vector<unsigned long long >& v, const std::vector<double >& nom); + + //! - Clearing tools + template<typename T> void ClearVector(std::vector<std::vector<T > >& v); + template<typename T> void ClearVector(std::vector<T>& v); + + // there are nicer options in c++11 + void ResizeVector( fastNLO::v1d& v, int dim0 ); + void ResizeVector( fastNLO::v2d& v, int dim0 , int dim1 ); + void ResizeVector( fastNLO::v3d& v, int dim0 , int dim1, int dim2 ); + void ResizeVector( fastNLO::v4d& v, int dim0 , int dim1, int dim2, int dim3 ); + void ResizeVector( fastNLO::v5d& v, int dim0 , int dim1, int dim2, int dim3, int dim4 ); + void ResizeVector( fastNLO::v6d& v, int dim0 , int dim1, int dim2, int dim3, int dim4, int dim5 ); + void ResizeVector( fastNLO::v7d& v, int dim0 , int dim1, int dim2, int dim3, int dim4, int dim5, int dim6 ); + + //! - Check if std::vector is empty + template<typename T> bool IsEmptyVector(const std::vector<std::vector<T > >& v); + template<typename T> bool IsEmptyVector(const std::vector<T>& v); + + //! - Writing tables to disk + //! use 'fastNLO::WriteVector(std::vector..., *table, nevts=1) to write fastNLO table in v2.0 format to disk + //! use 'fastNLO::WriteFlexibleVector(std::vector..., *table, int nProcLast=0, nevts=1) to write 'flexible' table + template<typename T> int WriteVector( const std::vector<T>& v, std::ostream& table , double nevts=1 ); + template<typename T> int _Write1DVectorByN( const std::vector<T>& v, std::ostream& table , double nevts ); + template<typename T> int _Write1DVector( const std::vector<T>& v, std::ostream& table); + int WriteVector( const std::vector<double >& v, std::ostream& table , double nevts=1 ); + int WriteVector( const std::vector<std::string >& v, std::ostream& table , double nevts=1 ); + int WriteVector( const std::vector<int >& v, std::ostream& table , double nevts=1 ) ; + int WriteVector( const std::vector<unsigned long long >& v, std::ostream& table , double nevts=1 ); + + template<typename T> int WriteFlexibleVector( const std::vector<T>& v, std::ostream& table, int nProcLast = 0, double nevts=1 ); + int WriteFlexibleVector( const std::vector<double >& v, std::ostream& table, int nProcLast = 0 , double nevts=1 ); + int WriteFlexibleVector( const std::vector<std::string >& v, std::ostream& table, int nProcLast = 0 , double nevts=1 ); + int WriteFlexibleVector( const std::vector<int >& v, std::ostream& table, int nProcLast = 0 , double nevts=1 ); + int WriteFlexibleVector( const std::vector<unsigned long long >& v, std::ostream& table, int nProcLast = 0 , double nevts=1 ); + + //! - adding std::vectors + template<typename T> void AddVectors( std::vector<T>& vSum, const std::vector<T>& vAdd, double w1 = 1, double w2 = 1 ); + template<typename T> void _DoAddVectors( std::vector<T>& vSum, const std::vector<T>& vAdd, double w1 = 1, double w2 = 1 ); + void AddVectors( std::vector<double >& vSum, const std::vector<double >& vAdd, double w1 = 1, double w2 = 1 ) ; + void AddVectors( std::vector<int >& vSum, const std::vector<int >& vAdd, double w1 = 1, double w2 = 1 ) ; + void AddVectors( std::vector<unsigned long long >& vSum, const std::vector<unsigned long long >& vAdd, double w1=1, double w2=1 ) ; + + //! - std::string modifications + void StripWhitespace(std::string& s); + + //! - Printout of std::vectors + template<typename T> void PrintVector( const std::vector<T>& v, std::string name, std::string prefix=""); + + //! - Printout of x section with uncertainty + void PrintXSUncertainty(XsUncertainty XsUnc, std::string UncName, + std::string HeadLine = " # bin cross_section lower_uncertainty upper_uncertainty"); + void PrintXSUncertaintyVec(std::vector< std::vector<double> > XsUncVec, std::string UncName, + std::string HeadLine = " # bin cross_section lower_uncertainty upper_uncertainty"); + + //! - useful i/o + void PrintFastnloVersion(); //!< Print out fastNLO version + bool CheckVersion(int version); //!< check version and exit if failed. + //bool CheckVersion(const std::string& version) {return CheckVersion((int)std::stoi(version));} ; //!< check version and exit if failed. + bool ReadMagicNo(std::istream& table); //!< Read and check magic number from table. + void PutBackMagicNo(std::istream& table); //!< Reset magic number, such that it can be recognized by other reading routines + + //! Parse filename for additional information (uncertainties, reference cross sections, ...) + //! - fnlo-tk-statunc: 'log' file extension; column numbers not needed, rel. stat. uncertainty = col #4 + //! - NNLOJET dat file: 'dat' file extension; column numbers either two (rel. stat. uncertainty = [col #5 / col #4]) or one (ref. cross section = col #4) + //! - Generic txt file: 'txt' file extension; only icola --> rel. stat. uncertainty = col #icola + //! - icol a & b --> rel. stat. uncertainty = col #icolb / #icola + std::vector <double> ReadContentFromFile(std::string filename, unsigned int icola = 0, unsigned int icolb = 0); + + //! Function prototype for string to enum conversion of central scale choice + fastNLO::EScaleFunctionalForm GetScaleEnum(const std::string); + + std::pair<fastNLO::v1d, fastNLO::v1d> GetTails(fastNLO::v1d& vector1, fastNLO::v1d& vector2); + bool SameTails(fastNLO::v1d vector1, fastNLO::v1d vector2, double rtol=0.0); + bool SameTails(fastNLO::v2d vector1, fastNLO::v2d vector2, double rtol=0.0); + bool ExtendHead(fastNLO::v1d& vector1, const fastNLO::v1d& vector2); + template <typename T> void ExtendSigmaTildeX( + std::vector<T>& SigmaTildeX, unsigned int OldDimSize1, unsigned int NewDimSize1, + unsigned int OldDimSize2, unsigned int NewDimSize2, int NPDFDim, T InsertValue); + +}; + + + +//________________________________________________________________________________________________________________ +// Reading functions +template<typename T> +int fastNLOTools::ReadVector( std::vector<T>& v, std::istream& table , double nevts){ + //! Read values according to the size() of the given std::vector + //! from table (v2.0 format). + int nn = 0; + for( unsigned int i=0 ; i<v.size() ; i++ ){ + nn += ReadVector(v[i],table, nevts); + } + return nn; +}; + + +template<typename T> +int fastNLOTools::ReadFlexibleVector(std::vector<T>& v, std::istream& table, int nProcLast, double nevts ){ + int nn = 0; + int size = 0; + table >> size; nn++; + v.resize(size); + for(unsigned int i0=0;i0<v.size();i0++){ + nn += ReadFlexibleVector(v[i0],table,nProcLast,nevts); + } + return nn; +}; + +//________________________________________________________________________________________________________________ +// Resizing functions +template<typename T> +void fastNLOTools::ResizeFlexibleVector(std::vector<T>& v, const std::vector<T>& nom) { + v.resize(nom.size()); + for (unsigned int i = 0 ; i<v.size() ; i++) { + ResizeFlexibleVector(v[i],nom[i]); + } +}; + + +//________________________________________________________________________________________________________________ +// Clearing +template<typename T> +void fastNLOTools::ClearVector(std::vector<std::vector<T > >& v) { + for (unsigned int i = 0 ; i<v.size() ; i++) { + ClearVector(v[i]); + } +}; + +template<typename T> +void fastNLOTools::ClearVector(std::vector<T >& v) { + for (unsigned int i = 0 ; i<v.size() ; i++) { + v[i]=0; + } +}; + + +//________________________________________________________________________________________________________________ +// Check if std::vector is empty +template<typename T> +bool fastNLOTools::IsEmptyVector(const std::vector<std::vector<T > >& v){ + //! check if std::vector is 'empty', or if sum of all elements is 0. + if ( v.empty() ) return true; + for (unsigned int i = 0 ; i<v.size() ; i++) { + if ( !IsEmptyVector(v[i]) ) return false; + } + return true; +} + +template<typename T> +bool fastNLOTools::IsEmptyVector(const std::vector<T>& v){ + //! check if std::vector is 'empty', or if sum of all elements is 0. + if ( v.empty() ) return true; + for (unsigned int i = 0 ; i<v.size() ; i++) { + if ( v[i] != 0 ) return false; + } + return true; +} + + +//________________________________________________________________________________________________________________ +// Writing functions +template<typename T> +int fastNLOTools::WriteVector( const std::vector<T>& v, std::ostream& table , double nevts) { + //! Write values of std::vector v to table (v2.0 format) . + int nn = 0; + for(unsigned int i=0;i<v.size();i++) + nn += WriteVector( v[i] , table , nevts ); + return nn; +} + +template<typename T> +int fastNLOTools::_Write1DVectorByN( const std::vector<T>& v, std::ostream& table , double nevts) { + if( nevts == 0) return -1000; + // --- ascii + if ( !fastNLOTools::binary ) { + for(unsigned int i0=0;i0<v.size();i0++) + table << v[i0] / nevts << fastNLO::sep; + } + else { + // --- binary as float + std::vector<float> ff; + ff.reserve(v.size()); + for ( auto val : v ) ff.push_back(val/nevts); + table << 'b'; + //table.flush(); + table.write(reinterpret_cast<const char *>(&ff[0]), ff.size()*sizeof(float)); + //table << std::endl; + } + /* static int bb = 0; */ + /* if ( bb++ > 3 ) exit(1); */ + /* std::cout<<"size: " <<v.size() <<std::endl; */ + /* for ( auto val : v ) std::cout<<"\t"<<val; */ + /* std::cout<<std::endl; */ + + return v.size(); +} + +template<typename T> +int fastNLOTools::_Write1DVector( const std::vector<T>& v, std::ostream& table ) { + //if ( !fastNLOTools::binary ) { + for(unsigned int i0=0;i0<v.size();i0++) + table << v[i0] << fastNLO::sep; +// else +// table.write(reinterpret_cast<const char *>(&v[0]), v.size()*sizeof(T)); + return v.size(); +} + + +template<typename T> +int fastNLOTools::WriteFlexibleVector( const std::vector<T>& v, std::ostream& table, int nProcLast , double nevts ) { + if ( nevts == 0 ) { + say::error["fastNLOTools::WriteFlexibleVector"]<<"Cannot divide by zero."<<std::endl; + return -1000; + } + int nn = 1; + table << v.size() << fastNLO::sep; + for(unsigned int i0=0;i0<v.size();i0++){ + nn += WriteFlexibleVector( v[i0] , table , nProcLast , nevts ); + } + return nn; +}; + + +//________________________________________________________________________________________________________________ +// Adding functions +template<typename T> +void fastNLOTools::AddVectors( std::vector<T>& vSum, const std::vector<T>& vAdd, double w1, double w2 ) { + //! Add the values of the std::vector vAdd to the std::vector vSum + //! if weights w1 and w1 are specified, the values are weighted accordingly + //! i.e.: vSum[i] = w1*vSum[i] + w2*vAdd[i]; + if ( vSum.size() != vAdd.size() ) { + say::error["fastNLOTools::AddVectors"] + <<"Cannot add tables with different size. s1=" + <<vSum.size()<<", s2="<<vAdd.size()<<std::endl; + return; + } + for ( unsigned int i = 0 ; i<vSum.size() ; i++ ) + AddVectors( vSum[i], vAdd[i], w1 , w2 ); +} + +template<typename T> +void fastNLOTools::_DoAddVectors( std::vector<T>& vSum, const std::vector<T>& vAdd, double w1, double w2 ) { + //! This function infact does the addition + if ( vSum.size() != vAdd.size() ) { + say::error["fastNLOTools::_DoAddVectors"] + <<"Cannot add tables with different size. s1=" + <<vSum.size()<<", s2="<<vAdd.size()<<std::endl; + return; + } + if ( w1==1. && w2==1. ) + for ( unsigned int i = 0 ; i<vSum.size() ; i++ ) + vSum[i] += vAdd[i]; + else + for ( unsigned int i = 0 ; i<vSum.size() ; i++ ) + vSum[i] = w1*vSum[i] + w2*vAdd[i]; +} + +template<typename T> +void fastNLOTools::PrintVector( const std::vector<T>& v, std::string name, std::string prefix){ + std::cout<<" "<<prefix<<" "<<name<<std::endl; + for(unsigned int i=0;i<v.size();i++){ + std::cout<<" "<<prefix<<" "<<i<<"\t"<<v[i]<<std::endl; + } +} + +#endif diff --git a/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOUserBlock.h b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOUserBlock.h new file mode 100644 index 0000000000000000000000000000000000000000..beaf396e776021024e88f9f3328f5e319132bb6c --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/fastNLOUserBlock.h @@ -0,0 +1,41 @@ +#ifndef __fastNLOUserBlock__ +#define __fastNLOUserBlock__ + +#include <fstream> +#include <iostream> +#include <istream> +#include <string> +#include "speaker.h" + + +class fastNLOUserBlock : public PrimalScream { + +public: + fastNLOUserBlock(); + ~fastNLOUserBlock(); + + // i/o + int Read(istream *table); //! read UserBlock + virtual void Write(ostream *table); //! write to disk + virtual void Print() const; + + int GetUserFlag() const {return fUserFlag;} //! Get UserFlag of UserBlock + void SetUserFlag(int id) {fId = id;} //! Set UserFlag of UserBlock + + int GetNLines() const { return fNLines;} //! Get number of lines in table on disk + void SetNLines(int nl) { fNLines = nl; fContent.resize(nl);} //! Set number of lines. Should be consistent with content of user block. Must always be greater than 3 + + vector<string> GetDescription() const { return fContent; } //! Get description of user block + void SetDescription(vector<string> description) { fDescr = Description;} //! Set description for user block + +protected: + int fNLines; //! number of lines in user block (here: identical to fContent.size() when read) + int fUserFlag; //! UserFlag according to table definition + vector<string> fDescr; //! Description of user block + +private: + vector<string> fContent; //! Plain-text content if read from disk + +}; + +#endif diff --git a/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/read_steer.h b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/read_steer.h new file mode 100644 index 0000000000000000000000000000000000000000..5eeefc273bcffd792dff116b88f482047d4f937e --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/read_steer.h @@ -0,0 +1,687 @@ +// Author: Daniel Britzger +// DESY, 17/07/2012 +#ifndef __READ_STEER_INC__ +#define __READ_STEER_INC__ + +/** +// ********************************************************************************** +// +// read_steer.h +// Tiny reading tool to read steering values from one or more steering files. +// +// This class reads in values, which are stored in a file. New variables +// can be included without changes of the steering class. +// +// Features +// ------------------------------ +// o Following types are supported: +// - Single values +// bool, int, double, string (with empty spaces), char +// - Arrays +// int, double, string (with empty spaces) +// - Tables/matrices +// int, double, string +// o Multiple files can be read in and handled individually or together. +// o Namespaces can be defined (e.g. same variable name in different namesapces). +// o Variables within a steer-file can be defined similar to shell skripts. +// o Command line arguments can be parsed and can superseed values from files. +// o Easy access via pre-processor commands +// o Other files can be included into steering file +// +// +// Initalize the steering +// ------------------------------ +// Set the filename and initilize the read_steer class by using: +// read_steer::readfile(string filename); +// or +// READ("steerfile.str"); +// +// +// Single values +// ------------------------------ +// To access the values, simply use the adequate getter functions +// for the desired variable type and the label of this variable. +// To speed up the code and to avoid repeated string comparisions, +// use static variables, e.g if you want to access the value in +// your steering file with the label 'pi' or 'name', use: +// static double pi = read_steer::getdouble("pi"); +// or +// static string name = read_steer::getstring("name"); +// static int age = read_steer::getint("age"); +// static bool sex = read_steer::getbool("female"); +// A more readable method is to use the pre-processor macro +// static string name = STRING(name); +// static int age = INT(age); +// static bool sex = BOOL(female); +// +// Labels are case sensitive. +// +// Check existence of label using: +// bool IsPresent = EXIST(name); +// bool IsPresent = read_steer::exist("name"); +// +// +// +// Syntax of steering file +// ------------------------------ +// The steering file can consist of an arbitrary number of lines, where +// the syntax should follow: +// <label> <value> [!comment] +// where 'label' and 'value' are necessary tags and comments are +// beginning with the '!' character and are ignored by the read_steer class. +// As seperator between the <label> and the <value> empty spaces or tabstops +// are recognized. Complete lines can beginn with '!' to mark comments. +// If string values should contain empty spaces, enclose them in double quotes +// like: +// Name "Peter Higgs" +// Age 137 +// Boolean values can be assigned by 0, 1, true or false, e.g. +// WithHiggs true +// +// +// Arrays +// ------------------------------ +// To read in an array of values, assign a label and enclose the following +// values in curly brackets { }, with a leading empty space [" {" and "}"]. +// Within curly brackets, each separated (by an empty space or tabstop) +// value is stored in the array as an element, or each line when double quotes are +// used (only one occurence of double quotes per line is recognized). +// The steering file should look like: +// +// !Numbers 1-9 are read into an array (9 elements) +// Array1 { !array starts here +// 1 2 3 4 5 ! integers from 1 to 5 +// 6 7 8 9 +// } +// !Eleven Names of famous musicians (11 elements) +// FamousMusicians { +// John Paul Ringo George !The Beatles +// Beethoven Bach Mozart !Famous componists +// Mick Keith Ron Charlie !The Rolling Stones +// } +// !Full sentences or documentations (2 string-elements) +// Array3 { +// "Hello World!" !Sentences are great +// "Was the first scream." +// } +// +// To access the arrays use e.g.: +// static vector<string> musicians = read_steer::getstringarray("FamousMusicians"); +// static vector<double> nums = read_steer::getdoublearray("Array1"); +// static vector<int> ints = read_steer::getintarray("Array1"); +// or equivalently +// static vector<string> musicians = STRING_ARR(FamousMusicians); +// static vector<double> nums = DOUBLE_ARR(Array1); +// static vector<int> ints = INT_ARR(Array1); +// +// +// Tables and matrices +// ------------------------------ +// Tables and matrices are tagged by ' {{' and '}}' in the steering file. +// No double quotes (e.g. "text") are allowed as table values. The first row +// of a table is always expected to be the row-header. The row headers are +// separated by empty spaces or tabstops. If matrices are necessary +// keep the first line empty or add a comment there. The steering file should look like: +// +// Crossections {{ +// Q2min Q2max cs[pb] stat[%] !header tags should not contain emtpy spaces +// 100 200 22.12 1.2 +// 200 300 12.72 2.7 +// 300 500 23.22 5.3 +// }} +// Participants {{ +// Name Surname Country ! first line is always the header +// Obama Barack U.S.A. +// Merkel Angela Germany +// Benedikt XVI Vatican +// }} +// Matrix {{ +// !the first line is ignored. Keep it empty. +// 11 12 +// 21 22 +// }} +// +// To access the table use e.g.: +// static vector<vector<string> > guys = read_steer::getstringtable("Participants"); +// static vector<vector<double> > cs = read_steer::getdoubletable("Crossections"); +// static vector<vector<int> > mat = read_steer::getinttable("Matrix"); +// To access the table header use: +// static vector<string> head = read_steer::gettableheader("Crossections); +// To access a single column of a table use: +// static vector<double> xs = read_steer::getdoublecolumn("Crossections","cs[pb]"); +// static vector<string> nick = read_steer::getstringcolumn("Participants","Surname"); +// or equivalently +// static vector<double> xs = DOUBLE_COL("Crossections","cs[pb]"); +// static vector<string> nick = STRING_COL("Participants","Surname"); +// +// +// +// Multiple steering files. +// ------------------------------ +// In case multiple steering files are necessary, each steering file must +// be assigned a unique 'steerID' if variable names (labels) are identical. +// read_steer::readfile("file1.steer","file1") +// read_steer::readfile("anotherfile.steer","constants") +// +// To access values, pass the steerID to the getter methods, e.g.: +// static double pi = read_steer::getdouble("pi","constants"); +// static string name = read_steer::getstring("name","file1"); +// static vector<vector<string> > ConfIchepNames = read_steer::getstringcolumn("Participants","Surname","file1") +// You can access the values at any place within your code. +// +// If different labels should be read in from multiple files, just call +// read_steer::readfile("file1.steer"); +// read_steer::readfile("file2.steer"); +// and access the variables without the usage of the steerID. +// +// +// Namespaces +// ------------------------------ +// Instead of using multiple files for reading identical labels for +// various occasions, one can use namespaces instead. Namespaces are +// handled identically to multiple files, but can be defined within +// one single steering file. Each namespace is assigned a steerID. +// Namespaces are defined by a label, which is used as the steerID +// and start with the '{{{' tag and end with the '}}}' tag. +// A steerfile could look like: +// HostInstitute CERN ! standard variabel +// ATLAS {{{ ! namespace ATLAS starts here +// length 45 ! define variables as usual +// height 22 +// weight 7000 +// Crossection {{ ! also tables are possible +// bin cs[pb] stat[%] +// 1 32.2 1.2 +// 2 12.2 3.2 +// }} +// }}} ! namespace ATLAS ends here +// CMS {{{ +// length 21 +// height 16 +// weight 12500 +// Crossection {{ +// bin cs[pb] stat[%] +// 1 33.1 0.8 +// 2 13.6 3.4 +// }} +// }}} +// +// To access the values, use the steerID which is the label of the namespace +// static double ATLASheight = read_steer::getdouble("height","ATLAS"); +// static double CMSheight = read_steer::getdouble("height","CMS"); +// static vector<double> CMSxs = read_steer::getdoublecolumn("Crossection","cs[pb]","CMS"); +// static vector<double> ATLASxs = read_steer::getdoublecolumn("Crossection","cs[pb]","ATLAS"); +// +// Check existence of labels in namespaces using: +// bool IsPresent = EXIST_NS(name,"ATLAS"); +// bool IsPresent = read_steer::getexist("name","ATLAS"); +// +// Warning: Namespace steerID and file steerID might conflict if identically! +// It is NOT possible to read in multiple files, wherein identical namespaces are define! +// There is no possiblity to access variables using the pre-processor commands (e.g. DOUBLE(val)) +// for namespaces, other than the standard namespace. +// +// +// Script-like Variables +// ------------------------------ +// It is often neessary to read in identical substrings, e.g. if +// many different files are located in the same folder. To simplify the +// structure of the steering file, 'script-like' variables can be used. +// +// It is possible to access previously defined variables foo by ${foo}. +// An example steering file can look like: +// !Home directories of famous physicists +// HomeDir /afs/cern.ch/user +// UserEinstein ${HomeDir}/e/einstein +// UserNewton "${HomeDir}/i/isaac" +// +// Local variables are only valid within the defined namespace. +// +// +// Parse command line +// ------------------------------ +// It is possible to read in steering values and specify steering files +// via the command line of the program. +// To read in values over the command line, one has to call +// read_steer::parsecommandline(argc,argv); +// read_steer::parsecommandline(vector<string> v); +// or +// PARSE(arc,argv); +// PARSEV(v); +// Where argc and argv are the command line parameters as specified in main(argc,argv). +// Specify a value when executing the program (e.g. Run) over the command line like: +// >$ Run label1=value1 WelcomeMessage="Hello World" Names::Name=Einstein steerfile=file.str steerfile=file2.str->Names +// +// This example will initialize the labels in the standard namespace +// label1 value1 +// WelcomeMessage "Hello World" +// Further it will read in the steering file file.str into the standard namespace +// and will read in the file file2.str into the namespace "Names". +// The value +// Name Einstein +// will be available in the namespace 'Names'. +// +// +// Include external files into steer-file +// --------------------------------------- +// It is possible to include other files into a steerfile. This might be useful +// for defining tables or arrays. +// To include other files, use the '#include:<filename>[:start[:stop]]' tag like: +// #include:steerfile2.str +// The file steerfile2.str in this example is handled like all its content would be at +// this position of the base-steerfile. This is useful if e.g. cross section +// tables should be read in: +// CrossSections {{ +// #include:HiggsCrossSection.txt +// }} +// If only certain lines of an external file should be read in, these could be +// specified, with a separated ':'-symbol. +// CrossSections {{ +// #include:HiggsCrossSection.txt:2:12 +// }} +// Here, only lines 2-12 are read in. It is also possible, to specify only the first line. +// +// Mention: Although the content of the included file is exactly treated like its content +// would stand in the base steefile, it is not possible to define namespaces within included files. +// However, brackets, local variables, table definitions, etc. are all treated the same way. +// +// +// Adding values during runtime with setters +// ------------------------------------------- +// It is possible to add values with a key during runtime, i.e. using functions +// instead of a steering file. Using this option it is also possible +// to modify and replace values. +// For adding a single value, array or table, the shorthand notations are respectively: +// ADD(K,Y); +// ADDARRAY(K,Y); +// ADDTABLE(K,H,Y); +// For instance to add a value "76" for the key "age" +// ADD("age",76); +// The full notation woule be: +// read_steer::Steering()->AddLabel("age",76); +// +// To add a key to a specific namespace use ADD_NS, ADDARRAY_NS or ADDTABLE_NS. For instance: +// ADD_NS("age",76,"MyMom") +// which adds the value 76 for the label 'age' to the namespace 'MyMom'. +// +// Further methods for appending single elements to arrays or tables also exist. +// +// Printing +// ------------------------------ +// Print all steering information in SingleFileMode by calling +// read_steer::print(); +// If multiple files are used, print all information using: +// read_steer::printall(); +// or +// PRINTALL(); +// or just the information of one steerID: +// read_steer::print("constants"); +// +// +// Warning +// ------------------------------ +// This tool is basically based on string comparisions to identify +// the steering values. Do not call it too often within your code in order to +// avoid speed problems. The best way to use the steering values is to assign the +// values to static const variables. +// +// +// Not existing labels or steerID +// ------------------------------ +// If you access an element which was not read in from the steering file, +// this label is automatically added to the list of elements with value zero. +// If a steerID is accessed, which is not identified, a new steerID is added +// to the list without any values. +// +// +// D. Britzger +// daniel.britzger@desy.de +// +// +// ********************************************************************************** */ + +#include <stdio.h> +#include <stdlib.h> +#include <string> +#include <cstring> +#include <fstream> +#include <iostream> +#include <map> +#include <set> +//update to unordered_map in C++11 in gcc4.7 +#include <vector> +#include <sstream> +// use the pre-processor for accessing values +// in 'single-file' mode +#define READ(X) read_steer::readfile(X) + +#define BOOL(X) read_steer::getbool(#X) +#define INT(X) read_steer::getint(#X) +#define DOUBLE(X) read_steer::getdouble(#X) +#define CHAR(X) read_steer::getstring(#X).c_str() +#define STRING(X) read_steer::getstring(#X) + +#define BOOL_ARR(X) read_steer::getboolarray(#X) +#define INT_ARR(X) read_steer::getintarray(#X) +#define DOUBLE_ARR(X) read_steer::getdoublearray(#X) +#define STRING_ARR(X) read_steer::getstringarray(#X) + +#define BOOL_COL(X,Y) read_steer::getboolcolumn(#X,#Y) +#define INT_COL(X,Y) read_steer::getintcolumn(#X,#Y) +#define DOUBLE_COL(X,Y) read_steer::getdoublecolumn(#X,#Y) +#define STRING_COL(X,Y) read_steer::getstringcolumn(#X,#Y) +#define TABLEHEADER(X) read_steer::gettableheader(#X) + +#define INT_TAB(X) read_steer::getinttable(#X) +#define DOUBLE_TAB(X) read_steer::getdoubletable(#X) +#define STRING_TAB(X) read_steer::getstringtable(#X) + +#define ADD(X,Y) read_steer::addvalue(X,Y) +#define ADDARRAY(X,Y) read_steer::addarray(X,Y) +#define ADDTABLE(X,Y,Z) read_steer::addtable(X,Y,Z) + +// use the pre-processor for accessing values +// in 'multi-file' mode +// NS specifies the steerID-namespace +#define READ_NS(X,NS) read_steer::readfile(X,NS) + +#define BOOL_NS(X,NS) read_steer::getbool(#X,NS) +#define INT_NS(X,NS) read_steer::getint(#X,NS) +#define DOUBLE_NS(X,NS) read_steer::getdouble(#X,NS) +#define CHAR_NS(X,NS) read_steer::getstring(#X,NS).c_str() +#define STRING_NS(X,NS) read_steer::getstring(#X,NS) + +#define BOOL_ARR_NS(X,NS) read_steer::getboolarray(#X,NS) +#define INT_ARR_NS(X,NS) read_steer::getintarray(#X,NS) +#define DOUBLE_ARR_NS(X,NS) read_steer::getdoublearray(#X,NS) +#define STRING_ARR_NS(X,NS) read_steer::getstringarray(#X,NS) + +#define BOOL_COL_NS(X,Y,NS) read_steer::getboolcolumn(#X,#Y,NS) +#define INT_COL_NS(X,Y,NS) read_steer::getintcolumn(#X,#Y,NS) +#define DOUBLE_COL_NS(X,Y,NS) read_steer::getdoublecolumn(#X,#Y,NS) +#define STRING_COL_NS(X,Y,NS) read_steer::getstringcolumn(#X,#Y,NS) +#define TABLEHEADER_NS(X,NS) read_steer::gettableheader(#X,NS) + +#define INT_TAB_NS(X,NS) read_steer::getinttable(#X,NS) +#define DOUBLE_TAB_NS(X,NS) read_steer::getdoubletable(#X,NS) +#define STRING_TAB_NS(X,NS) read_steer::getstringtable(#X,NS) + +#define ADD_NS(X,Y,NS) read_steer::addvalue(X,Y,NS) +#define ADDARRAY_NS(X,Y,NS) read_steer::addarray(X,Y,NS) +#define ADDTABLE_NS(X,Y,Z,NS) read_steer::addtable(X,Y,Z,NS) + +// shortcuts for parsing command line and printing +#define PARSE(X,Y) read_steer::parsecommandline(X,Y) +#define PARSEV(X) read_steer::parsecommandline(X) +#define PRINTALL() read_steer::printall() + +// check if key exists +#define EXIST(X) read_steer::getexist(#X) +#define EXIST_NS(X,NS) read_steer::getexist(#X,NS) + +// check if array or array element exists +#define EXISTARRAY_NS(X,NS) read_steer::getarrayexist(#X, NS) +#define CONTAINKEYARRAY_NS(X,A,NS) read_steer::getarraycontainkey(#X, #A, NS) +#define PUSHBACKARRAY_NS(X,A,NS) read_steer::arraypushback_steer(X, #A, NS) + +class read_steer { + +private: + static std::string stdID; + +public: + ~read_steer() {;}; + static read_steer* Steering(std::string steerID=read_steer::stdID); // get an object! + static void destroy(); // destroy all instances + +public: + // getters for single instance + // values + bool getb(const std::string& label); + int geti(const std::string& label); + double getd(const std::string& label); + std::string gets(const std::string& label); + // arrays + std::vector<bool> getbf(const std::string& label); + std::vector<int> getif(const std::string& label); + std::vector<double> getdf(const std::string& label); + std::vector<std::string> getsf(const std::string& label); + // tables/matrices + std::vector<std::string> getsthead(const std::string& label); + std::vector<std::vector<int> > getit(const std::string& label); + std::vector<std::vector<double> > getdt(const std::string& label); + std::vector<std::vector<std::string> > getst(const std::string& label); + std::vector<bool> getbtcol(const std::string& label,const std::string& col); + std::vector<int> getitcol(const std::string& label,const std::string& col); + std::vector<double> getdtcol(const std::string& label,const std::string& col); + std::vector<std::string> getstcol(const std::string& label,const std::string& col); + + // check if key exists + bool exist(const std::string& label) { + bool ret = ( fstrings.count(label) > 0 || ffields.count(label) > 0 || ftables.count(label) > 0 ); + return ret;} + bool arrayexist(const std::string& label) { + return ffields.count(label) > 0;} + bool arraycontainkey(const std::string& key, const std::string& label) { + if (ffields.count(label) == 0) return false; + for (size_t i = 0; i < ffields[label].size(); ++i) { + if (ffields[label][i].find(key+"=") == std::string::npos) { + return true; + } + } + return false;} + void arraypushback(const std::string& value, const std::string& label) { + ffields[label].push_back(value);} + // setter + void AddLabel(const std::string& key, const std::string& value); + template <typename T> void AddLabel ( const std::string& key, T value); + void AddArray(const std::string& key, const std::vector<std::string>& values); + template <typename T> void AddArray ( const std::string& key, const std::vector<T>& values); + void AddTable(const std::string& key, const std::vector<std::string>& header, const std::vector<std::vector<std::string> >& values); + template <typename T> void AddTable ( const std::string& key, const std::vector<std::string>& header, const std::vector<std::vector<T> >& values); + void AppendToArray(const std::string& key, const std::string& entry); + template <typename T> void AppendToArray ( const std::string& key, const T& entry); + void AppendToTable(const std::string& key, const std::vector<std::string>& entry); + template <typename T> void AppendToTable ( const std::string& key, const std::vector<T>& entry); + // controls + // report return code instead of void function + int inits(std::string filename); + int initnmspc(std::ifstream& strm, std::string filename); + void prt(); + static void initnamespace(std::ifstream& strm,std::string filename, std::string steerID=read_steer::stdID) { // set the steer-filename + read_steer::Steering(steerID)->initnmspc(strm,filename); } + + // get labels + std::set<std::string> GetAvailableLabels() const; + std::set<std::string> GetAvailableArrrays() const; + std::set<std::string> GetAvailableTables() const; + + static bool CheckNumber(const std::string& str); + static bool CheckInt(const std::string& str); + static int separatetag(std::string& vallhs, std::string& valrhs, const std::string& sep); + + static const std::string& GetDefaultNamespace(){ return stdID;} + static void SetDefaultNamespace(const std::string& nspc){ stdID = nspc;} + +private: + read_steer(); + read_steer(const read_steer& ) {;}; + static std::map<std::string,read_steer*>* instances; + + int read_stdin(const std::string& filename); + int readstrm(std::ifstream& strm,unsigned int lstart=0,unsigned int lend=0, bool incfile=false); + bool ParseString(std::string value); + bool ParseFindString(const std::string& str, const std::string& tag) const; + std::string ParseEnclosedString(const std::string&) const; + bool EnclosedStringToOneEntity(std::string&) const; + int ReplaceVariables(std::string& value); + bool StringToBool(const std::string& str, const std::string& label="") const; + static int cmdlinetag(const char* arg, std::string& label, std::string& value); + + std::map<std::string,std::string> fstrings; + std::map<std::string,std::vector<std::string> > ffields; + std::map<std::string,std::vector<std::vector<std::string> > > ftables; + std::map<std::string,std::vector<std::string> > ftableheaders; + bool fParseFieldMode; + int fParseTableMode; + std::string ffieldlabel; + std::vector<std::string> ffieldvalues; + std::vector<std::vector<std::string> > ftablevalues; + std::string ffilename; + std::string fcurrentfilename; + std::ifstream ffile; + + const std::string str_sep; + const std::string str_cmt; + const std::string str_arrbeg; + const std::string str_arrend; + const std::string str_tabbeg; + const std::string str_tabend; + const std::string str_nmspcbeg; + const std::string str_nmspcend; + const std::string str_inc; + int fParseIncMode; + const std::string oW; + const std::string oI; + const std::string oE; + +public: + // static member function; report return code instead of void function + static int readfile(std::string filename,std::string steerID=read_steer::stdID) { // set the steer-filename + return read_steer::Steering(steerID)->inits(filename); } + // setters + // verbosity + static int fVerbosity; + static void setVerbosity(int iVerbosity) { + read_steer::fVerbosity = iVerbosity; } + // getters + // verbosity + static int getVerbosity() { + return read_steer::fVerbosity; } + // values + static bool getbool(std::string label,std::string steerID=read_steer::stdID) { + return read_steer::Steering(steerID)->getb(label); } + static int getint(std::string label,std::string steerID=read_steer::stdID) { + return read_steer::Steering(steerID)->geti(label); } + static double getdouble(std::string label,std::string steerID=read_steer::stdID) { + return read_steer::Steering(steerID)->getd(label); } + static std::string getstring(std::string label,std::string steerID=read_steer::stdID) { + return read_steer::Steering(steerID)->gets(label); } + // arrays + static std::vector<bool> getboolarray(std::string label,std::string steerID=read_steer::stdID) { + return read_steer::Steering(steerID)->getbf(label); } + static std::vector<int> getintarray(std::string label,std::string steerID=read_steer::stdID) { + return read_steer::Steering(steerID)->getif(label); } + static std::vector<double> getdoublearray(std::string label,std::string steerID=read_steer::stdID) { + return read_steer::Steering(steerID)->getdf(label); } + static std::vector<std::string> getstringarray(std::string label,std::string steerID=read_steer::stdID) { + return read_steer::Steering(steerID)->getsf(label); } + // tables header + static std::vector<std::string> gettableheader(std::string label,std::string steerID=read_steer::stdID) { + return read_steer::Steering(steerID)->getsthead(label); } + // tables/matrices + static std::vector<std::vector<int> > getinttable(std::string label,std::string steerID=read_steer::stdID) { + return read_steer::Steering(steerID)->getit(label); } + static std::vector<std::vector<double> > getdoubletable(std::string label,std::string steerID=read_steer::stdID) { + return read_steer::Steering(steerID)->getdt(label); } + static std::vector<std::vector<std::string> > getstringtable(std::string label,std::string steerID=read_steer::stdID) { + return read_steer::Steering(steerID)->getst(label); } + // table columns + static std::vector<bool> getboolcolumn(std::string label,std::string column,std::string steerID=read_steer::stdID) { + return read_steer::Steering(steerID)->getbtcol(label,column); } + static std::vector<int> getintcolumn(std::string label,std::string column,std::string steerID=read_steer::stdID) { + return read_steer::Steering(steerID)->getitcol(label,column); } + static std::vector<double> getdoublecolumn(std::string label,std::string column,std::string steerID=read_steer::stdID) { + return read_steer::Steering(steerID)->getdtcol(label,column); } + static std::vector<std::string> getstringcolumn(std::string label,std::string column,std::string steerID=read_steer::stdID) { + return read_steer::Steering(steerID)->getstcol(label,column); } + // check existence of value + static bool getexist(const std::string& label, std::string steerID=read_steer::stdID ){ + if ( read_steer::instances->count(steerID) == 0 ) return false; + return read_steer::Steering(steerID)->exist(label);} + static bool getarrayexist(const std::string& label, std::string steerID=read_steer::stdID ){ + if ( read_steer::instances->count(steerID) == 0 ) return false; + return read_steer::Steering(steerID)->arrayexist(label);} + static bool getarraycontainkey(const std::string& key, const std::string& label, std::string steerID=read_steer::stdID ){ + if ( read_steer::instances->count(steerID) == 0 ) return false; + return read_steer::Steering(steerID)->arraycontainkey(key, label);} + static void arraypushback_steer(const std::string& value, const std::string& label, std::string steerID=read_steer::stdID ){ + if ( read_steer::instances->count(steerID) == 0 ) return; + read_steer::Steering(steerID)->arraypushback(value, label);} + // add values + template <typename T> + static void addvalue(const std::string& key,const T& val,std::string steerID=read_steer::stdID) { + read_steer::Steering(steerID)->AddLabel(key,val); } + template <typename T> + static void addarray(const std::string& key,const std::vector<T>& val,std::string steerID=read_steer::stdID) { + read_steer::Steering(steerID)->AddArray(key,val); } + template <typename T> + static void addtable(const std::string& key, const std::vector<std::string>& header, const std::vector<std::vector<T> >& values,std::string steerID=read_steer::stdID) { + read_steer::Steering(steerID)->AddTable(key,header,values); } + template <typename T> + static void appendtoarray(const std::string& key, const T& entry, std::string steerID=read_steer::stdID) { + read_steer::Steering(steerID)->AppendToArray(key,entry); } + template <typename T> + static void appendtotable(const std::string& key, const std::vector<T>& entry, std::string steerID=read_steer::stdID) { + read_steer::Steering(steerID)->AppendToTable(key,entry); } + + static void printall(); // print values of all files + static void print(std::string steerID=read_steer::stdID); // print values + static bool parsecommandline(int argc,char** argv); + static bool parsecommandline(std::vector<std::string> argv); + +}; + + +template <typename T> +void read_steer::AddLabel ( const std::string& key, T val) { + std::stringstream ss; + ss << val; + AddLabel(key,ss.str()); +} + +template <typename T> +void read_steer::AddArray ( const std::string& key, const std::vector<T>& val) { + std::vector<std::string> str(val.size()); + for ( unsigned int i = 0 ; i<val.size() ; i++ ) { + std::stringstream ss; + ss << val[i]; + str[i] = ss.str(); + } + AddArray(key,str); +} + +template <typename T> +void read_steer::AddTable ( const std::string& key, const std::vector<std::string>& header, const std::vector<std::vector<T> >& values) { + std::vector<std::vector<std::string> > str(values.size()); + for ( unsigned int i = 0 ; i<values.size() ; i++ ) { + str[i].resize(values[i].size()); + for ( unsigned int j = 0 ; j<values[i].size() ; j++ ) { + std::stringstream ss; + ss << values[i][j]; + str[i][j]=ss.str(); + } + } + AddTable(key,header,str); +} + +template <typename T> +void read_steer::AppendToArray ( const std::string& key, const T& entry ) { + std::stringstream ss; + ss << entry; + std::string str=ss.str(); + AppendToArray(key,entry); +} + +template <typename T> +void read_steer::AppendToTable ( const std::string& key, const std::vector<T>& entry ) { + std::vector<std::string > str(entry.size()); + for ( unsigned int j = 0 ; j<entry.size() ; j++ ) { + std::stringstream ss; + ss << entry[j]; + str[j]=ss.str(); + } + AppendToTable(key,entry); +} + +#endif diff --git a/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/speaker.h b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/speaker.h new file mode 100644 index 0000000000000000000000000000000000000000..48f57068466aff38b9b52832518b36f36c46a4ab --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/speaker.h @@ -0,0 +1,138 @@ +// Author: Daniel Britzger +// DESY, 06/08/2012 + +#ifndef SPEAKER_H_ +#define SPEAKER_H_ + +#include <string> +#include <iostream> +#include <map> + +namespace say { + enum Verbosity {DEBUG=-1000, MANUAL=2, INFO=0, WARNING=1, ERROR=2, SILENT=1000}; + + // String to enum + struct toVerbosity : public std::map<std::string, Verbosity> + { + toVerbosity() + { + this->operator[]("DEBUG") = DEBUG; + this->operator[]("MANUAL") = MANUAL; + this->operator[]("INFO") = INFO; + this->operator[]("WARNING") = WARNING; + this->operator[]("ERROR") = ERROR; + this->operator[]("SILENT") = SILENT; + }; + ~toVerbosity(){} + }; + +} + +class speaker { +public: + speaker(std::string prefix="",say::Verbosity volume=say::INFO,bool err=false,bool quiet=false); + speaker(const speaker& spk); + ~speaker(); + const speaker& operator= (const speaker& other); + std::ostream& operator[](const std::string& fct) const ; + const speaker& operator+ (const std::string& fct) const { + return this->prefix(fct); + } + const speaker& prefix(const std::string& fct) const ; + std::ostream& operator()(const std::string& fct) const ; + + template<typename T> std::ostream& operator<< (const T& arg) const { + if (fquiet) return *weg; + else { + if (errs && fe2cerr) return std::cerr<<pref<<arg; + else return std::cout<<pref<<arg; + } + } +#ifndef SWIG + std::ostream& operator>> (const std::string& arg) const ; +#endif + std::ostream& print(const std::string& mes) const ; + void DoSpeak(bool loud) { + fquiet=!loud; + }; + bool GetSpeak() const { + return !fquiet; + }; + void SetPrefix(std::string prefix) { + pref=prefix; + }; + std::string GetPrefix() const { + return pref; + }; + void SetClassName(std::string classname) { + cn=classname; + }; + std::string GetClassName(void) const { + return cn; + }; + say::Verbosity GetVolume(void) const { + return fvol; + }; + void SetVolume(say::Verbosity volume) { + fvol=volume; + }; + static int SetGlobalVerbosity(say::Verbosity volume); + say::Verbosity GetGlobalVerbosity(); + static say::Verbosity fverb; + static void ErrorToErrStream(bool ToCerr) { + fe2cerr=ToCerr; + }; + +protected: + static std::ostream* weg; + bool fquiet; + std::string pref; + bool errs; + say::Verbosity fvol; + unsigned long fii; + static unsigned long ct; + static bool fe2cerr; + static std::map<unsigned long,speaker*>* list; + std::string cn; +}; + +namespace say { + extern speaker debug; + extern speaker man; + extern speaker info; + extern speaker warn; + extern speaker error; + extern speaker debugsep; + extern speaker mansep; + extern speaker infosep; + extern speaker warnsep; + extern speaker errorsep; + extern speaker shout; // same as error but streamed to cout + extern speaker yell; // same as error but streamed to cout without prefix + extern int SetGlobalVerbosity(Verbosity verbosity); + extern Verbosity GetGlobalVerbosity(void); +} + + +class PrimalScream { +public: + PrimalScream(std::string classname); + void SetClassName(const std::string classname ); + void SetVerbosity(say::Verbosity volume); + speaker debug; + speaker man; + speaker info; + speaker warn; + speaker error; + speaker debugsep; + speaker mansep; + speaker infosep; + speaker warnsep; + speaker errorsep; + speaker shout; + speaker yell; +private: + std::string ___cn; +}; + +#endif //SPEAKER_H_ diff --git a/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/zstr.hpp b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/zstr.hpp new file mode 100644 index 0000000000000000000000000000000000000000..e96919f79b077855dc8b6da0980afed83563e5bf --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/include/fastnlotk/zstr.hpp @@ -0,0 +1,609 @@ +// Code taken from https://github.com/mateidavid/zstr +// +// The MIT License (MIT) +// +// Copyright (c) 2015 Matei David, Ontario Institute for Cancer Research +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. +// +//--------------------------------------------------------- +// Copyright 2015 Ontario Institute for Cancer Research +// Written by Matei David (matei@cs.toronto.edu) +//--------------------------------------------------------- + +// Reference: +// http://stackoverflow.com/questions/14086417/how-to-write-custom-input-stream-in-c + +#ifndef __ZSTR_HPP +#define __ZSTR_HPP + +#include <cassert> +#include <fstream> +#include <sstream> +#include <zlib.h> +#include <cstring> +#include <string> + +/** + * This namespace defines wrappers for std::ifstream, std::ofstream, and + * std::fstream objects. The wrappers perform the following steps: + * - check the open modes make sense + * - check that the call to open() is successful + * - (for input streams) check that the opened file is peek-able + * - turn on the badbit in the exception mask + */ + +#ifdef HAVE_LIBZ +namespace strict_fstream +{ + +/// Exception class thrown by failed operations. +class Exception + : public std::exception +{ +public: + Exception(const std::string& msg) : _msg(msg) {} + const char * what() const noexcept { return _msg.c_str(); } +private: + std::string _msg; +}; // class Exception + +namespace detail +{ + +struct static_method_holder +{ + static std::string mode_to_string(std::ios_base::openmode mode) + { + static const int n_modes = 6; + static const std::ios_base::openmode mode_val_v[n_modes] = + { + std::ios_base::in, + std::ios_base::out, + std::ios_base::app, + std::ios_base::ate, + std::ios_base::trunc, + std::ios_base::binary + }; + + static const char * mode_name_v[n_modes] = + { + "in", + "out", + "app", + "ate", + "trunc", + "binary" + }; + std::string res; + for (size_t i = 0; i < n_modes; ++i) + { + if (mode & mode_val_v[i]) + { + res += (not res.empty()? "|" : ""); + res += mode_name_v[i]; + } + } + if (res.empty()) res = "none"; + return res; + } + static void check_mode(const std::string& filename, std::ios_base::openmode mode) + { + if ((mode & std::ios_base::trunc) and not (mode & std::ios_base::out)) + { + throw Exception(std::string("strict_fstream: open('") + filename + "'): mode error: trunc and not out"); + } + else if ((mode & std::ios_base::app) and not (mode & std::ios_base::out)) + { + throw Exception(std::string("strict_fstream: open('") + filename + "'): mode error: app and not out"); + } + else if ((mode & std::ios_base::trunc) and (mode & std::ios_base::app)) + { + throw Exception(std::string("strict_fstream: open('") + filename + "'): mode error: trunc and app"); + } + } + static void check_open(std::ios * s_p, const std::string& filename, std::ios_base::openmode mode) + { + if (s_p->fail()) + { + throw Exception(std::string("strict_fstream: open('") + + filename + "'," + mode_to_string(mode) + "): open failed: " + + std::strerror(errno)); + } + } + static void check_peek(std::istream * is_p, const std::string& filename, std::ios_base::openmode mode) + { + bool peek_failed = true; + try + { + is_p->peek(); + peek_failed = is_p->fail(); + } + catch (std::ios_base::failure& e) {} + if (peek_failed) + { + throw Exception(std::string("strict_fstream: open('") + + filename + "'," + mode_to_string(mode) + "): peek failed: " + + std::strerror(errno)); + } + is_p->clear(); + } +}; // struct static_method_holder + +} // namespace detail + +class ifstream + : public std::ifstream +{ +public: + ifstream() = default; + ifstream(const std::string& filename, std::ios_base::openmode mode = std::ios_base::in) + { + open(filename, mode); + } + void open(const std::string& filename, std::ios_base::openmode mode = std::ios_base::in) + { + mode |= std::ios_base::in; + exceptions(std::ios_base::badbit); + detail::static_method_holder::check_mode(filename, mode); + std::ifstream::open(filename, mode); + detail::static_method_holder::check_open(this, filename, mode); + detail::static_method_holder::check_peek(this, filename, mode); + } +}; // class ifstream + +class ofstream + : public std::ofstream +{ +public: + ofstream() = default; + ofstream(const std::string& filename, std::ios_base::openmode mode = std::ios_base::out) + { + open(filename, mode); + } + void open(const std::string& filename, std::ios_base::openmode mode = std::ios_base::out) + { + mode |= std::ios_base::out; + exceptions(std::ios_base::badbit); + detail::static_method_holder::check_mode(filename, mode); + std::ofstream::open(filename, mode); + detail::static_method_holder::check_open(this, filename, mode); + } +}; // class ofstream + +class fstream + : public std::fstream +{ +public: + fstream() = default; + fstream(const std::string& filename, std::ios_base::openmode mode = std::ios_base::in) + { + open(filename, mode); + } + void open(const std::string& filename, std::ios_base::openmode mode = std::ios_base::in) + { + if (not (mode & std::ios_base::out)) mode |= std::ios_base::in; + exceptions(std::ios_base::badbit); + detail::static_method_holder::check_mode(filename, mode); + std::fstream::open(filename, mode); + detail::static_method_holder::check_open(this, filename, mode); + detail::static_method_holder::check_peek(this, filename, mode); + } +}; // class fstream + +} // namespace strict_fstream + + + + +namespace zstr +{ + +/// Exception class thrown by failed zlib operations. +class Exception + : public std::exception +{ +public: + Exception(z_stream * zstrm_p, int ret) + : _msg("zlib: ") + { + switch (ret) + { + case Z_STREAM_ERROR: + _msg += "Z_STREAM_ERROR: "; + break; + case Z_DATA_ERROR: + _msg += "Z_DATA_ERROR: "; + break; + case Z_MEM_ERROR: + _msg += "Z_MEM_ERROR: "; + break; + case Z_VERSION_ERROR: + _msg += "Z_VERSION_ERROR: "; + break; + case Z_BUF_ERROR: + _msg += "Z_BUF_ERROR: "; + break; + default: + std::ostringstream oss; + oss << ret; + _msg += "[" + oss.str() + "]: "; + break; + } + _msg += zstrm_p->msg; + } + Exception(const std::string msg) : _msg(msg) {} + const char * what() const noexcept { return _msg.c_str(); } +private: + std::string _msg; +}; // class Exception + +namespace detail +{ + +class z_stream_wrapper + : public z_stream +{ +public: + z_stream_wrapper(bool _is_input = true, int _level = Z_DEFAULT_COMPRESSION) + : is_input(_is_input) + { + this->zalloc = Z_NULL; + this->zfree = Z_NULL; + this->opaque = Z_NULL; + int ret; + if (is_input) + { + this->avail_in = 0; + this->next_in = Z_NULL; + ret = inflateInit2(this, 15+32); + } + else + { + ret = deflateInit2(this, _level, Z_DEFLATED, 15+16, 8, Z_DEFAULT_STRATEGY); + } + if (ret != Z_OK) throw Exception(this, ret); + } + ~z_stream_wrapper() + { + if (is_input) + { + inflateEnd(this); + } + else + { + deflateEnd(this); + } + } +private: + bool is_input; +}; // class z_stream_wrapper + +} // namespace detail + +class istreambuf + : public std::streambuf +{ +public: + istreambuf(std::streambuf * _sbuf_p, + std::streamsize _buff_size = default_buff_size, bool _auto_detect = true) + : sbuf_p(_sbuf_p), + zstrm_p(nullptr), + buff_size(_buff_size), + auto_detect(_auto_detect), + auto_detect_run(false), + is_text(false) + { + assert(sbuf_p); + in_buff = new char [buff_size]; + in_buff_start = in_buff; + in_buff_end = in_buff; + out_buff = new char [buff_size]; + setg(out_buff, out_buff, out_buff); + } + + istreambuf(const istreambuf &) = delete; + istreambuf(istreambuf &&) = default; + istreambuf & operator = (const istreambuf &) = delete; + istreambuf & operator = (istreambuf &&) = default; + + virtual ~istreambuf() + { + delete [] in_buff; + delete [] out_buff; + if (zstrm_p) delete zstrm_p; + } + + virtual std::streambuf::int_type underflow() + { + if (this->gptr() == this->egptr()) + { + // pointers for free region in output buffer + char * out_buff_free_start = out_buff; + do + { + // read more input if none available + if (in_buff_start == in_buff_end) + { + // empty input buffer: refill from the start + in_buff_start = in_buff; + std::streamsize sz = sbuf_p->sgetn(in_buff, buff_size); + in_buff_end = in_buff + sz; + if (in_buff_end == in_buff_start) break; // end of input + } + // auto detect if the stream contains text or deflate data + if (auto_detect and not auto_detect_run) + { + auto_detect_run = true; + unsigned char b0 = *reinterpret_cast< unsigned char * >(in_buff_start); + unsigned char b1 = *reinterpret_cast< unsigned char * >(in_buff_start + 1); + // Ref: + // http://en.wikipedia.org/wiki/Gzip + // http://stackoverflow.com/questions/9050260/what-does-a-zlib-header-look-like + is_text = not (in_buff_start + 2 <= in_buff_end + and ((b0 == 0x1F and b1 == 0x8B) // gzip header + or (b0 == 0x78 and (b1 == 0x01 // zlib header + or b1 == 0x9C + or b1 == 0xDA)))); + } + if (is_text) + { + // simply swap in_buff and out_buff, and adjust pointers + assert(in_buff_start == in_buff); + std::swap(in_buff, out_buff); + out_buff_free_start = in_buff_end; + in_buff_start = in_buff; + in_buff_end = in_buff; + } + else + { + // run inflate() on input + if (not zstrm_p) zstrm_p = new detail::z_stream_wrapper(true); + zstrm_p->next_in = reinterpret_cast< decltype(zstrm_p->next_in) >(in_buff_start); + zstrm_p->avail_in = in_buff_end - in_buff_start; + zstrm_p->next_out = reinterpret_cast< decltype(zstrm_p->next_out) >(out_buff_free_start); + zstrm_p->avail_out = (out_buff + buff_size) - out_buff_free_start; + int ret = inflate(zstrm_p, Z_NO_FLUSH); + // process return code + if (ret != Z_OK and ret != Z_STREAM_END) throw Exception(zstrm_p, ret); + // update in&out pointers following inflate() + in_buff_start = reinterpret_cast< decltype(in_buff_start) >(zstrm_p->next_in); + in_buff_end = in_buff_start + zstrm_p->avail_in; + out_buff_free_start = reinterpret_cast< decltype(out_buff_free_start) >(zstrm_p->next_out); + assert(out_buff_free_start + zstrm_p->avail_out == out_buff + buff_size); + // if stream ended, deallocate inflator + if (ret == Z_STREAM_END) + { + delete zstrm_p; + zstrm_p = nullptr; + } + } + } while (out_buff_free_start == out_buff); + // 2 exit conditions: + // - end of input: there might or might not be output available + // - out_buff_free_start != out_buff: output available + this->setg(out_buff, out_buff, out_buff_free_start); + } + return this->gptr() == this->egptr() + ? traits_type::eof() + : traits_type::to_int_type(*this->gptr()); + } +private: + std::streambuf * sbuf_p; + char * in_buff; + char * in_buff_start; + char * in_buff_end; + char * out_buff; + detail::z_stream_wrapper * zstrm_p; + std::streamsize buff_size; + bool auto_detect; + bool auto_detect_run; + bool is_text; + + static const std::streamsize default_buff_size = 1 << 20; +}; // class istreambuf + +class ostreambuf + : public std::streambuf +{ +public: + ostreambuf(std::streambuf * _sbuf_p, + std::streamsize _buff_size = default_buff_size, int _level = Z_DEFAULT_COMPRESSION) + : sbuf_p(_sbuf_p), + zstrm_p(new detail::z_stream_wrapper(false, _level)), + buff_size(_buff_size) + { + assert(sbuf_p); + in_buff = new char [buff_size]; + out_buff = new char [buff_size]; + setp(in_buff, in_buff + buff_size); + } + + ostreambuf(const ostreambuf &) = delete; + ostreambuf(ostreambuf &&) = default; + ostreambuf & operator = (const ostreambuf &) = delete; + ostreambuf & operator = (ostreambuf &&) = default; + + int deflate_loop(int flush) + { + while (true) + { + zstrm_p->next_out = reinterpret_cast< decltype(zstrm_p->next_out) >(out_buff); + zstrm_p->avail_out = buff_size; + int ret = deflate(zstrm_p, flush); + if (ret != Z_OK and ret != Z_STREAM_END and ret != Z_BUF_ERROR) throw Exception(zstrm_p, ret); + std::streamsize sz = sbuf_p->sputn(out_buff, reinterpret_cast< decltype(out_buff) >(zstrm_p->next_out) - out_buff); + if (sz != reinterpret_cast< decltype(out_buff) >(zstrm_p->next_out) - out_buff) + { + // there was an error in the sink stream + return -1; + } + if (ret == Z_STREAM_END or ret == Z_BUF_ERROR or sz == 0) + { + break; + } + } + return 0; + } + + virtual ~ostreambuf() + { + // flush the zlib stream + sync(); + delete [] in_buff; + delete [] out_buff; + delete zstrm_p; + } + virtual std::streambuf::int_type overflow(std::streambuf::int_type c = traits_type::eof()) + { + zstrm_p->next_in = reinterpret_cast< decltype(zstrm_p->next_in) >(pbase()); + zstrm_p->avail_in = pptr() - pbase(); + while (zstrm_p->avail_in > 0) + { + int r = deflate_loop(Z_NO_FLUSH); + if (r != 0) + { + setp(nullptr, nullptr); + return traits_type::eof(); + } + } + setp(in_buff, in_buff + buff_size); + return traits_type::eq_int_type(c, traits_type::eof()) ? traits_type::eof() : sputc(c); + } + virtual int sync() + { + // first, call overflow to clear in_buff + overflow(); + if (not pptr()) return -1; + // then, call deflate asking to finish the zlib stream + zstrm_p->next_in = nullptr; + zstrm_p->avail_in = 0; + if (deflate_loop(Z_FINISH) != 0) return -1; + deflateReset(zstrm_p); + return 0; + } +private: + std::streambuf * sbuf_p; + char * in_buff; + char * out_buff; + detail::z_stream_wrapper * zstrm_p; + std::streamsize buff_size; + + static const std::streamsize default_buff_size = 1 << 20; +}; // class ostreambuf + +class istream + : public std::istream +{ +public: + istream(std::istream & is) + : std::istream(new istreambuf(is.rdbuf())) + { + exceptions(std::ios_base::badbit); + } + explicit istream(std::streambuf * sbuf_p) + : std::istream(new istreambuf(sbuf_p)) + { + exceptions(std::ios_base::badbit); + } + virtual ~istream() + { + delete rdbuf(); + } +}; // class istream + +class ostream + : public std::ostream +{ +public: + ostream(std::ostream & os) + : std::ostream(new ostreambuf(os.rdbuf())) + { + exceptions(std::ios_base::badbit); + } + explicit ostream(std::streambuf * sbuf_p) + : std::ostream(new ostreambuf(sbuf_p)) + { + exceptions(std::ios_base::badbit); + } + virtual ~ostream() + { + delete rdbuf(); + } +}; // class ostream + +namespace detail +{ + +template < typename FStream_Type > +struct strict_fstream_holder +{ + strict_fstream_holder(const std::string& filename, std::ios_base::openmode mode = std::ios_base::in) + : _fs(filename, mode) + {} + FStream_Type _fs; +}; // class strict_fstream_holder + +} // namespace detail + +class ifstream + : private detail::strict_fstream_holder< strict_fstream::ifstream >, + public std::istream +{ +public: + explicit ifstream(const std::string& filename, std::ios_base::openmode mode = std::ios_base::in) + : detail::strict_fstream_holder< strict_fstream::ifstream >(filename, mode), + std::istream(new istreambuf(_fs.rdbuf())) + { + exceptions(std::ios_base::badbit); + } + virtual ~ifstream() + { + if (rdbuf()) delete rdbuf(); + } +}; // class ifstream + +class ofstream + : private detail::strict_fstream_holder< strict_fstream::ofstream >, + public std::ostream +{ +public: + explicit ofstream(const std::string& filename, std::ios_base::openmode mode = std::ios_base::out) + : detail::strict_fstream_holder< strict_fstream::ofstream >(filename, mode | std::ios_base::binary), + std::ostream(new ostreambuf(_fs.rdbuf())) + { + exceptions(std::ios_base::badbit); + } + virtual ~ofstream() + { + if (rdbuf()) delete rdbuf(); + } +}; // class ofstream + +} // namespace zstr +#else +namespace zstr +{ +typedef std::ifstream ifstream; +typedef std::ofstream ofstream; +} +#endif + + +#endif diff --git a/v2.6/toolkit/fastnlotoolkit/read_steer.cc b/v2.6/toolkit/fastnlotoolkit/read_steer.cc new file mode 100644 index 0000000000000000000000000000000000000000..3ca3f1c4dc14c46d2083a329f1d1fc56ad1b6955 --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/read_steer.cc @@ -0,0 +1,859 @@ +// Author: Daniel Britzger +// DESY, 17/07/2012 +// +//********************************************************************************** +// +// D. Britzger +// daniel.britzger@desy.de +// +// +//********************************************************************************** + +#include "fastnlotk/read_steer.h" +#include <stdio.h> +#include <stdlib.h> +#include <string> +#include <cstring> +#include <fstream> +#include <iostream> +#include <map> +#include <vector> + +using namespace std; + +map<string,read_steer*>* read_steer::instances = NULL; +//const string& read_steer::stdID = *(new string("SingleFileMode")); +string read_steer::stdID = "SingleFileMode"; +int read_steer::fVerbosity = 2; + +read_steer::read_steer() : + str_sep(" \t") , str_cmt("#"), + str_arrbeg("{") , str_arrend("}"), + str_tabbeg("{{") , str_tabend("}}"), + str_nmspcbeg("{{{"), str_nmspcend("}}}"), + // str_inc("#include:"), fParseIncMode(0), + str_inc(">>"), fParseIncMode(0), + oW(" # WARNING! [read_steer] "), oI(" # INFO. [read_steer] "), oE(" # ERROR! [read_steer] ") { +} + +read_steer* read_steer::Steering(string steerID) { + if (instances==NULL) instances = new std::map<string,read_steer*>(); + // get singleton class + if (!(*instances)[steerID]) { //new instance + (*instances)[steerID] = new read_steer(); + if (steerID.compare(read_steer::stdID)!=0) { + if (fVerbosity > 2) { + cout << " # INFO. [read_steer] " << "Initialized new read_steer namespace with steerID = '" << steerID << "'." << endl; + } + } + } + return (read_steer*)((*instances)[steerID]); +} + + +int read_steer::inits(string filename) { + if (filename == "") + if (fVerbosity > 1) {cout << oW << "No filename specified." << endl;} + if (ffilename !="") ffilename+=", "; + ffilename += filename; + fcurrentfilename = filename; + // also report return code + return read_stdin(fcurrentfilename); +} + + +void read_steer::destroy() { + for (map<string, read_steer*>::iterator ii=(*instances).begin(); ii!=(*instances).end(); ++ii) { + if ((*ii).second) { + delete(*ii).second; + } + (*instances).erase((*ii).first); + } +} + +void read_steer::printall() { + const string linesep = " +----------------------------------------------------------------------------+\n"; + const string l = " | "; + cout << linesep; + cout << l << " read_steer. Printing all steering information. |" << endl; + cout << linesep; + for (map<string, read_steer*>::iterator ii=(*instances).begin(); ii!=(*instances).end(); ++ii) { + cout << l << endl; + cout << l << "steerID = '" << (*ii).first << "'" << endl; + cout << linesep; + (*ii).second->prt(); + cout << linesep; + } +} + + +void read_steer::print(string steerID) { + const string linesep = " +----------------------------------------------------------------------------+\n"; + const string l = " | "; + cout << linesep; + cout << l << " read_steer. Printing steering information of steerID = '" << steerID << "'" << endl; + cout << linesep; + read_steer::Steering(steerID)->prt(); + cout << linesep; +} + +void read_steer::prt() { + const string l = " | "; + // filename + printf("%s%-30s%s\n",l.c_str(),"Filename(s)",ffilename.c_str()); + cout << l << endl;; + //single values + cout << l << "Single values" << endl; + for (map<string,string>::iterator ii=fstrings.begin(); ii!=fstrings.end(); ++ii) + if ((*ii).first!="") + printf("%s %-27s\t\t%s\n",l.c_str(),(*ii).first.c_str(),(*ii).second.c_str()); + // arrays + if (!ffields.empty()) { + cout << l << endl; + cout << l << "Arrays" << endl; + for (map<string,vector<string> >::iterator ii=ffields.begin(); ii!=ffields.end(); ++ii) { + cout << l << " " << (*ii).first << " {" << endl; + for (unsigned int j = 0 ; j<(*ii).second.size() ; j++) + cout << l << " [" << j << "]\t" << (*ii).second[j] << endl; + cout << l << " }" << endl; + } + } + // tables + if (!ftables.empty()) { + cout << l << endl; + cout << l << "Tables/Matrices" << endl; + for (map<string,vector<string> >::iterator ii=ftableheaders.begin(); ii!=ftableheaders.end(); ++ii) { + cout << l << " " << (*ii).first << " {{" << endl; + cout << l << " [H]\t"; + for (unsigned int j = 0 ; j<(*ii).second.size() ; j++) + printf("%-10s",(*ii).second[j].c_str()); + cout << endl; + vector<vector<string> > tab = ftables[(*ii).first]; + for (unsigned int ll = 0 ; ll<tab.size() ; ll++) { + cout << l << " [" << ll << "]\t"; + for (unsigned int j = 0 ; j<tab[ll].size() ; j++) + printf("%-10s",tab[ll][j].c_str()); + cout << endl; + } + cout << l << " }}" << endl; + } + } +} + +int read_steer::initnmspc(ifstream& strm, string filename) { + if (ffilename !="") ffilename+=", "; + ffilename += filename; + //ffilename = filename; + return readstrm(strm); +} + +int read_steer::readstrm(ifstream& strm,unsigned int lstart, unsigned int lend, bool incfile) { + if (!strm) { + if (fVerbosity > 0) {cerr << oE << "This is not a valid stream." << endl;} + return EXIT_FAILURE; + } + string lineread; + if (!incfile) { + fParseFieldMode = false; + fParseTableMode = 0; + ffieldlabel = ""; + } + fParseIncMode++; + unsigned int nlines=0; + unsigned int rlines=0; + while (std::getline(strm, lineread)) { + nlines++; + if (nlines < lstart) continue; + if (lend!=0 && nlines > lend) break; + rlines++; + bool goon = ParseString(lineread); + if (!goon) break; + } + if (incfile && fParseTableMode>2 ) fParseTableMode--; // correct counting of table rows + fParseIncMode--; + // return rlines; // return nlines including comments + return EXIT_SUCCESS; // return nlines including comments +} + +int read_steer::read_stdin(const string& filename) { + //If the steering has alread been read -> do nothing + ffile.open(filename.c_str()); + if (!ffile) { + if (fVerbosity > 0) {cerr << oE << " Could not open steering file ('" << filename << "')." << endl;} + return EXIT_FAILURE; + } + int n = readstrm(ffile); + ffile.close(); + return n; +}; + + +vector<bool> read_steer::getbf(const string& label) { + vector<string> sf = ffields[label]; + vector<bool> ret(sf.size()); + for (unsigned int i = 0 ; i<sf.size() ; i++) + ret[i] = StringToBool(sf[i],label); + return ret; +} + +vector<int> read_steer::getif(const string& label) { + vector<int> ret; + vector<string> sf = ffields[label]; + for (unsigned int i = 0 ; i<sf.size() ; i++) { + string val = sf[i]; + bool isnan = CheckInt(val.c_str()); + if (!isnan) + if (fVerbosity > 1) {cout << oW << "Value number " << i << " of label='" << label << "' does not seem to be an integer number. value=" << val << endl;} + ret.push_back(atoi(val.c_str())); + } + return ret; +} + +vector<double> read_steer::getdf(const string& label) { + vector<double> ret; + vector<string> sf = ffields[label]; + for (unsigned int i = 0 ; i<sf.size() ; i++) { + string val = sf[i]; + bool isnan = CheckNumber(val.c_str()); + if (!isnan) + if (fVerbosity > 1) {cout << oW << "Value number " << i << " of label='" << label << "' does not seem to be a numeric number. value=" << val << endl;} + ret.push_back(atof(val.c_str())); + } + return ret; +} + +vector<string> read_steer::getsf(const string& label) { + vector<string> ret = ffields[label]; + if (ret.empty()) + if (fVerbosity > 1) {cout << oW << "Label '" << label << "' was not found in list or has no values." << endl;} + return ret; +} + +vector<string> read_steer::getstcol(const string& label,const string& col) { + // get column of a table with header 'col' as string values + vector<string> ret; + vector<string> head = getsthead(label); + vector<vector<string> > tab = getst(label); + for (vector<string>::size_type i = 0; i != head.size(); i++) { + if (col.compare(head[i])==0) { + bool IsErr = false; + for (vector<string>::size_type j = 0; j != tab.size(); j++) { + if ( i >= tab[j].size() ) { + if (fVerbosity > 1) {cout << oW << "Row "<<j<<" has too little columns ("<<tab[j].size()<<"). Column '"<<col<<"' cannot be read correctly."<<endl;} + IsErr = true; + } + else + ret.push_back(tab[j][i]); + } + if ( IsErr ) ret.resize(tab.size(),"read_steer::warning"); + return ret; + } + } + if (fVerbosity > 1) {cout << oW << "Column '" << col << "' was not found in table '" << label << "'." << endl;} + return ret; +} + + +vector<bool> read_steer::getbtcol(const string& label,const string& col) { + // get column of a table with header 'col' as string values + vector<string> scol = getstcol(label,col); + vector<bool> ret(scol.size()); + for (vector<string>::size_type i = 0; i != scol.size(); i++) + ret[i] = StringToBool(scol[i]); + return ret; +} + + +vector<int> read_steer::getitcol(const string& label,const string& col) { + // get column of a table with header 'col' as string values + vector<int> ret; + vector<string> scol = getstcol(label,col); + for (vector<string>::size_type i = 0; i != scol.size(); i++) { + string val = scol[i]; + if (!CheckInt(val.c_str())) + if (fVerbosity > 1) { + cout << oW << "Value number " << i << " of table='" << label + << "' in column '" << col << "' does not seem to be an integer number. value=" << val << endl; + } + ret.push_back(atoi(val.c_str())); + } + return ret; +} + +vector<double> read_steer::getdtcol(const string& label,const string& col) { + // get column of a table with header 'col' as string values + vector<double> ret; + vector<string> scol = getstcol(label,col); + for (vector<string>::size_type i = 0; i != scol.size(); i++) { + string val = scol[i]; + if (!CheckNumber(val.c_str())) + if (fVerbosity > 1) { + cout << oW << "Value number " << i << " of table='" << label + << "' in column '" << col << "' does not seem to be a numeric number. value=" << val << endl; + } + ret.push_back(atof(val.c_str())); + } + return ret; +} + +vector<string> read_steer::getsthead(const string& label) { + // get table header + vector<string> ret = ftableheaders[label]; + if (ret.empty()) + if (fVerbosity > 1) {cout << oW << "Label '" << label << "' was not found in list or has no values." << endl;} + return ret; +} + +vector<vector<string> > read_steer::getst(const string& label) { + // get table values as strings + vector<vector<string> > ret = ftables[label]; + if (ret.empty() && ftableheaders[label].empty()) { + if (fVerbosity > 1) {cout << oW << "Label '" << label << "' was not found as a table." << endl;} + } else if (ret.empty()) { + if (fVerbosity > 2) {cout << oI << "Table '" << label << "' is empty." << endl;} + } + return ret; +} + +vector<vector<double> > read_steer::getdt(const string& label) { + // get table values as doubles + vector<vector<double> > ret; + vector<vector<string> > sf = getst(label); + for (unsigned int i = 0 ; i<sf.size() ; i++) { + ret.push_back(vector<double>()); + for (unsigned int j = 0 ; j<sf[i].size() ; j++) { + string val = sf[i][j]; + if (!CheckNumber(val.c_str())) + if (fVerbosity > 1) {cout << oW << "Value number (" << i << "," << j << ") of label='" << label << "' does not seem to be a numeric number. value=" << val << endl;} + ret[i].push_back(atof(val.c_str())); + } + } + return ret; +} + + +vector<vector<int> > read_steer::getit(const string& label) { + // get table values as integers + vector<vector<int> > ret; + vector<vector<string> > sf = getst(label); + for (unsigned int i = 0 ; i<sf.size() ; i++) { + ret.push_back(vector<int>()); + for (unsigned int j = 0 ; j<sf[i].size() ; j++) { + string val = sf[i][j]; + if (!CheckInt(val.c_str())) + if (fVerbosity > 1) {cout << oW << "Value number (" << i << "," << j << ") of label='" << label << "' does not seem to be an integer number. value=" << val << endl;} + ret[i].push_back(atoi(val.c_str())); + } + } + return ret; +} + + +string read_steer::gets(const string& label) { + string ret = fstrings[label]; + if (ret=="") + if (fVerbosity > 1) {cout << oW << "Label '" << label << "' was not found in list or has an empty value." << endl;} + return ret; +} + +double read_steer::getd(const string& label) { + string val = gets(label); + if (!CheckNumber(val.c_str())) + if (fVerbosity > 1) {cout << oW << "Value of label='" << label << "' does not seem to be a numeric number. value=" << val << endl;} + return atof(val.c_str()); +} + +int read_steer::geti(const string& label) { + string val = gets(label); + bool isnan = CheckInt(val.c_str()); + if (!isnan) + if (fVerbosity > 1) {cout << oW << "Value of label='" << label << "' does not seem to be an integer number. value=" << val << endl;} + return atoi(val.c_str()); +} + +bool read_steer::getb(const string& label) { + return StringToBool(gets(label),label); +} + +bool read_steer::StringToBool(const string& sval, const string& label) const { + if (sval!="0" && sval!="1" && sval!="true" && sval!="false" && sval!="") { + if (label=="") { + if (fVerbosity > 1) {cout << oW << "Expecting value '0','1','true', 'false' or no value for boolean values. value='" << sval << "'. Using 'true'." << endl;} + } else { + if (fVerbosity > 1) {cout << oW << "Expecting value '0','1','true', 'false' or no value for boolean values for label=" << label << " and its value='" << sval << "'. Using 'true'." << endl;} + } + return true; + } + if (sval=="true") return true; + else if (sval=="false") return false; + else if (sval=="") return false; + else return atoi(sval.c_str()); +} + +void read_steer::AddLabel(const string& key, const string& value) { + if (fstrings.count(key)>0) + cout << " # read_steer. Replacing label '" << key << "' with value '" << value << "'." << endl; + fstrings[key] = value; +} + + +void read_steer::AddArray(const string& key, const vector<string>& values) { + if (ffields.count(key)>0) + cout << " # read_steer. Replacing label '" << key << "' with an array of size '" << values.size() << "'." << endl; + ffields[key] = values; +} + + +void read_steer::AddTable(const string& key, const vector<string>& header, const vector<vector<string> >& values) { + if (ftables.count(key)>0 || ftableheaders.count(key)>0 ) + cout << " # read_steer. Replacing label '" << key << "' with a table of '" << values.size() << "' columns." << endl; + ftableheaders[key] = header; + ftables[key] = values; +} + + +void read_steer::AppendToArray(const std::string& key, const std::string& entry) { + // append one element to an array + if (ffields.count(key)==0 ) + cout<<" # read_steer. Could not find array '"<<key<<"' yet. Ingoring call please use ::AddArray() instead."<<endl; + else + ffields[key].push_back(entry); +} + + +void read_steer::AppendToTable(const std::string& key, const std::vector<std::string>& entry){ + //! append one element to a table + if (ftableheaders.count(key)==0 ) + cout<<" # read_steer. Could not find table '"<<key<<"' yet. Ingoring call please use ::AddTable() instead."<<endl; + else { + //cout<<" # read_steer. Append row with "<<entry.size()<<" entries to table '"<<key<<"'."<<endl; + ftables[key].push_back(entry); + } +} + + +bool read_steer::CheckNumber(const string& str) { + //! check if str is a float number + return str.find_first_of(".-+1234567890")==0; +} + + +bool read_steer::CheckInt(const string& str) { + //! check if str is an integer number + return str.find_first_of(".eE")==string::npos && CheckNumber(str); +} + + + +bool read_steer::ParseString(string line) { + //! Parse the actual string into member variables + + //cout<<"ParseString: "<<line<<endl; + // target variables + string label; + string value; + + // keep the string for error messages + const string orgl=line; + + // parsing statements enclosed in '"' + if (!(fParseTableMode>0) && !fParseFieldMode) + value = ParseEnclosedString(line.c_str()); // old + else + while (EnclosedStringToOneEntity(line)); // new + + // count + int i=0; + + // parsing line + // char* str = (char*)line.c_str(); + char str[20000]; + strcpy(str,line.c_str()); + for (char* pch=strtok(str,str_sep.c_str()); + pch!=NULL; + pch=strtok(NULL,str_sep.c_str()),i++) { + // look for include files + if (ParseFindString(pch,str_inc)) { + //cout << "Found Include File. pch=" << pch << endl; + string incfile,ls,le; + string spch(pch); + separatetag(spch, incfile, str_inc); + separatetag(incfile,ls,":"); + separatetag(ls,le,":"); + ReplaceVariables(incfile); + unsigned int is = atoi(ls.c_str()); + unsigned int ie = atoi(le.c_str()); + ifstream incstrm; + incstrm.open(incfile.c_str()); + if (!incstrm) { + if ( incfile == "fastNLO-warmup.txt" ) { + if (fVerbosity > 2) {cout << oI << " Could not include specified warmup file " << incfile << ", default warm-up file will be tried!" << endl;} + } else { + if (fVerbosity > 0) {cerr << oE << " Could not open include file ('" << incfile << "') from include statement (" << str_inc << ")." << endl;} + } + return EXIT_FAILURE; + } + readstrm(incstrm,is,ie,true); + incstrm.close(); + break; + } + // tables + if (fParseTableMode>0) { + if (ParseFindString(pch,str_tabend)) { + fParseTableMode = 0; + ftableheaders[ffieldlabel] = ffieldvalues; + ftables[ffieldlabel] = ftablevalues; + ffieldvalues.clear(); + ftablevalues.clear(); + ffieldlabel = ""; + return true; + } else { + if (fParseTableMode==2) { // column names + if (ParseFindString(pch,str_cmt)) break; + //ffieldvalues.push_back(pch); + string val = pch; + ReplaceVariables(val); + ffieldvalues.push_back(val); + } else { // table values + if (ParseFindString(pch,str_cmt)) { + if (i==0) return true; //--fParseTableMode; + break; + } + if ((int)ftablevalues.size() < fParseTableMode-2) + ftablevalues.push_back(vector<string>()); + //ftablevalues[fParseTableMode-3].push_back(pch); + string val = pch; + ReplaceVariables(val); + ftablevalues.back().push_back(val); + } + } + } + // arrays + else if (fParseFieldMode) { + if (ParseFindString(pch,str_arrend)) { // store field + fParseFieldMode = false; + ffields[ffieldlabel] = ffieldvalues; + ffieldvalues.clear(); + ffieldlabel=""; + return true; + } + if (value=="") { // read single values + if (ParseFindString(pch,str_cmt)) break; + //ffieldvalues.push_back(pch); + string val = pch; + ReplaceVariables(val); + ffieldvalues.push_back(val); + } else { // read enclosed value + //ffieldvalues.push_back(value); + string val = value; + ReplaceVariables(val); + ffieldvalues.push_back(val); + break; + } + } else { + // look for a namespace + if (ParseFindString(pch,str_nmspcend)) { + return false; + } + if (ParseFindString(pch,str_nmspcbeg)) { + if (fParseIncMode>1) { + if (fVerbosity > 0) {cerr << oE << "It is not possible to define namespaces in #include(ed) files." << endl;} + } + read_steer::initnamespace(ffile,fcurrentfilename,label); + label = ""; + continue; + } + // look for a table + if (ParseFindString(pch,str_tabbeg)) { + fParseTableMode = 1; + if (label=="") + if (fVerbosity > 1) {cout << oW << "Table found, starting with ' " << str_tabbeg << "' but no label was found." << endl;} + ffieldlabel = label; + break; + } + // look for an array of values + if (ParseFindString(pch,str_arrbeg)) { + fParseFieldMode = true; + if (label=="") + if (fVerbosity > 1) {cout << oW << "Array found, starting with ' " << str_arrbeg << "' but no label was found." << endl;} + ffieldlabel = label; + continue; + } + // look for comments + if (ParseFindString(pch,str_cmt)) { + if (i==1) { + if (fVerbosity > 1) {cout << oW << "Found comment after label ('" << label << "'), but before a value." << endl;} + } + break; + } + + // set label and value + if (i==0) label = pch; + else if (i==1 && value != "") { // value was already filled with enclosed string + break; + } else if (i==1 && value=="") { // set value + value = pch; + } else { + cout << " # read_steer. Error parsing string: " << endl; + cout << "'" << orgl << "'" << endl; + cout << " # Expect two values separated by 'empty spaces' or 'tabstop'." << endl; + cout << " # Add comments starting with '"<< str_cmt <<"' character." << endl; + } + } + } // for parse + + + + strcpy(str,line.c_str()); + char* pch=strtok(str,str_sep.c_str()); + if (fParseTableMode>0) { + if (fParseTableMode>2 && pch==NULL) return true; + fParseTableMode++; + } + + // Philosophy of priorities when using read_steer: + // 1. Parameters set in command line have highest priority and are not overwritten + // 2. Then first read steering file, previously set parameters are kept --> warn user + // 3. Only now set additional parameters that have not been defined yet (Check with EXIST() resp. EXIST_NS()) + // If parameters are discovered that, for the purpose at hand, have been chosen inappropriately by the user , then either + // - exit with error message or + // - set to correct value and warn user + if (!fParseFieldMode && fParseTableMode==0) { + if (fstrings[label] == "") { + // Set previously empty value + ReplaceVariables(value); + fstrings[label] = value; + } else if (fstrings[label] == value) { + // Inform that old and new values are identical + if (fVerbosity > 2) {cout << oI << "Label '" << label << "' already set identically. Keeping value '" << fstrings[label] << "'." << endl;} + } else { + // Inform that new value read from steering file is ignored and warn user + if (fVerbosity > 1) {cout << oW << "Label '" << label << "' already found. Keeping previous value of '" << fstrings[label] << "' and IGNORE this one '" << value << "'" << endl;} + // Do not overwrite existing value + // ReplaceVariables(value); + // fstrings[label] = value; + } + } + return true; +} + +int read_steer::ReplaceVariables(string& str) { + //! replace all occurences of ${<sth>} by + //! the stringvalue of the label <sth> + //! return the number of replaced variables + + // remove all '$' which could come from enclosed statements in tablemode. + + int ret=0; + size_t found = str.find(string("${")); + while (found!=string::npos) { + size_t end = str.find(string("}"),found); + if (end==string::npos) { + if (fVerbosity > 1) {cout << oW << "Start of a variable found with '${', but termination with '}' is missing." << endl;} + break; + } + string var = string(str,found+2,end-found-2); + string val = fstrings[var]; + + if (val=="") + if (fVerbosity > 1) {cout << oW << "Value of variable ${" << var << "} is empty or was not defined." << endl;} + str.replace(found,end-found+1,val); + ret++; + found = str.find(string("${")); + } + + // erasing '$' if e.g. in tablemode enclosed strings were used. + found = str.find(string("$&$")); + while (found!=string::npos) { + str.replace(found,3," "); + found = str.find(string("$&$")); + } + + // remove empty strings "" + found = str.find(string("$$%$$")); + while (found!=string::npos) { + str.replace(found,5,""); + found = str.find(string("$$%$$")); + } + + return ret; +} + + +string read_steer::ParseEnclosedString(const string& str) const { + vector<size_t> occ; + for (size_t found = str.find_first_of('"'); found!=string::npos; found = str.find_first_of('"',found+1)) + occ.push_back(found+1); + if (occ.size()>0 && occ[0] > str.find(string(str_cmt))) { + //cout << "Return. '!' before enclosed string: \" in str=" << str << endl; + return string(); + } + if (occ.size() >= 2) { + //if ( occ.size()!=2) + //cout << oW << "Only lines with exactly two \" symbols are expected in substring '" << str << "'." << endl; + if (occ[1]-occ[0]-1 > 0) return str.substr(occ[0],occ[1]-occ[0]-1); + else return "$$%$$"; + } else { + if (!occ.empty()) + if (fVerbosity > 1) {cout << oW << "Only lines more than two \" symbols are allowed in substring '" << str << "'." << endl;} + } + return string(); +} + +bool read_steer::EnclosedStringToOneEntity(string& str) const { + // replace within first occurances of "" all empty-spaces and tab-stops by $ + // return false, of nothing was replaced + // return true of, sth. was replaced + + size_t one = str.find('"'); + if (one==string::npos) return false; + if (one!=string::npos) str.erase(one,1); + size_t two = str.find('"'); + if (one!=string::npos) str.erase(two,1); + string substr = str.substr(one,two-one); + const string sub = str.substr(one,two-one); + + if (one==two) { // it is only "" -> we tag it. + str.insert(two,"$$%$$"); + } + + while (substr.find_first_of(str_sep)!=string::npos) { + size_t pos = substr.find_first_of(str_sep); + substr.replace(pos,1,"$&$"); + } + + // replace ins str, sub with substr + size_t pos = str.find(sub); + size_t len = sub.size(); + str = str.replace(pos,len,substr); + + return true; +} + + +bool read_steer::ParseFindString(const string& str, const string& tag) const { + //return strncmp(str,tag.c_str(),tag.size())==0; + return (str.find(tag)==0); +} + +int read_steer::separatetag(string& vallhs, string& valrhs, const string& sep) { + // separate a string, according to separation string sep; + // input: vallhs, sep + // output: vallhs, valrhs + // if no separator was found return vallhs and valrhs untouched + // otherwise vallhs is replaced by left-hand-side of separator, and + // valrhs is replace by right-hand-side of separator + // return -1, if no separator was found, + // return position of separato string in vallhs + const size_t pos = vallhs.find(sep); + const string temp=vallhs; + if (pos!=string::npos) { + vallhs=temp.substr(0,pos); + valrhs=temp.substr(pos+sep.size(),temp.size()); + return (int)pos; + } + return -1; +} + +int read_steer::cmdlinetag(const char* arg, string& label, string& value) { + label = string(arg); + int ret = separatetag(label,value,"="); + return ret; +} + + +bool read_steer::parsecommandline(vector<string> argv) { + vector<char*> argc;//(argv.size(), new char[400]); + // C++11 + // for ( unsigned int i = 0 ; i<argv.size() ; i++ ) + // argc.push_back((char*)&argv[0]); // C++11 + // return ret = parsecommandline(argc.size(),&argc[0]); + + for ( unsigned int i = 0 ; i<argv.size() ; i++ ){ + argc.push_back(new char[argv[i].size()+1]); + std::copy(argv[i].begin(), argv[i].end(), argc[i]); + argc[i][argv[i].size()] = '\0'; + } + bool ret = parsecommandline(argc.size(),&argc[0]); + for ( unsigned int i=0 ; i<argc.size() ;i ++ ) delete[] argc[i]; + return ret; +} + +bool read_steer::parsecommandline(int argc,char** argv) { + bool gotfile = false; + map<string,string> cmdvals; + for (int i=0; i<argc; i++) { + string val, lab; + if (fVerbosity > 2) { + cout << " # INFO. [read_steer] " << "Parsing cmdline: i = " << i << "\targv[i] = " << argv[i] << endl; + } + int suc=cmdlinetag(argv[i],lab,val); + if (suc>0) { + if (fVerbosity > 2) { + cout << " # INFO. [read_steer] " << "Found cmdline tag. label = " << lab << "\tvalue = " << val << endl; + } + if (lab=="steerfile") { + string fID = stdID; + int pos = separatetag(val,fID,"->"); + if (fVerbosity > 2) { + cout << " # INFO. [read_steer] " << "Found steerfile name. val = " << val << "\tfID = " << fID << endl; + } + if (pos>=0 && fVerbosity > 2) cout << " # INFO. [read_steer] Reading new steerfile '" << val << "'." << endl; + // check return code instead of assuming gotfile to be ok; exit on error + int retcode = readfile(val,fID); + if ( retcode == 0 ) { + gotfile=true; + } else { + exit(retcode); + } + } else { + cmdvals[lab] = val; + } + } + } + + // if already StdId found -> replace values + // else create new StdID namespace with cmd-line arguments + if (instances==NULL) read_steer::Steering(stdID); + for (map<string, string>::const_iterator ii=cmdvals.begin(); ii!=cmdvals.end(); ++ii) { + //! use like key=value:namespace + //string val = (*ii).second; + //string fID = stdID; + //separatetag(val, fID ,":"); + //! use like namespace:key=value + string val = (*ii).second; + string fID = stdID; + string key = (*ii).first; + separatetag(key, fID ,"::"); + if ( fID!=stdID )swap(key,fID); + read_steer::Steering(fID)->AddLabel(key, val); + } + return gotfile; +} + + +set<string> read_steer::GetAvailableLabels() const { + std::set<std::string> ret; + std::map<std::string,std::string> map = fstrings; + for (std::map<std::string,std::string>::iterator it=map.begin(); it!=map.end(); ++it) + ret.insert(it->first); + return ret; +} + + +set<string> read_steer::GetAvailableArrrays() const { + std::set<std::string> ret; + std::map<std::string,std::vector<std::string> > map = ffields; + for (std::map<std::string,std::vector<std::string> >::iterator it=map.begin(); it!=map.end(); ++it) + ret.insert(it->first); + return ret; +} + + +set<string> read_steer::GetAvailableTables() const { + std::set<std::string> ret; + std::map<std::string,std::vector<std::vector<std::string> > > map = ftables; + for (std::map<std::string,std::vector<std::vector<std::string> > > ::iterator it=map.begin(); it!=map.end(); ++it) + ret.insert(it->first); + return ret; +} diff --git a/v2.6/toolkit/fastnlotoolkit/speaker.cc b/v2.6/toolkit/fastnlotoolkit/speaker.cc new file mode 100644 index 0000000000000000000000000000000000000000..d82977ed14c53a4cc0934999451b7f390f38c9d1 --- /dev/null +++ b/v2.6/toolkit/fastnlotoolkit/speaker.cc @@ -0,0 +1,182 @@ +// Author: Daniel Britzger +// DESY, 06/08/2012 + +#include <iostream> +#include <map> +#include <string> +#include "fastnlotk/speaker.h" + +using namespace std; + +std::map<unsigned long,speaker*>* speaker::list = NULL; +std::ostream* speaker::weg = NULL; +// Set default logging level to start with; should be INFO. +// Use DEBUG only for debugging code executed before +// SetGlobalVerbosity(say::Verbosity volume) +// can be called from within the program. +say::Verbosity speaker::fverb = say::INFO; +unsigned long speaker::ct = 0; +bool speaker::fe2cerr = true; + +speaker::speaker(std::string prefix,say::Verbosity volume,bool err,bool quiet) { + if (list==NULL) list = new map<unsigned long,speaker*>(); + if (weg==NULL) { + weg = new ostream(0); + weg->clear(std::ios::badbit); + } + pref=prefix; + fii=ct; + (*list)[ct++] = this; + fvol=volume; + errs=err; + fquiet= (quiet || fvol<fverb); +} + + +speaker::speaker(const speaker& other) : + fquiet(other.fquiet), pref(other.pref), + errs(other.errs), fvol(other.fvol), + cn(other.cn) +{ + (*list)[ct++] = this; +} + + +speaker::~speaker() { + list->erase(fii); + if (list->empty()) { + delete list; + list=NULL; + delete weg; + weg=NULL; + } +} + +const speaker& speaker::operator=(const speaker& other) +{ + list->erase(fii); + fii=ct; + (*list)[ct++] = this; + + fquiet=other.fquiet; + pref=other.pref; + errs=other.errs; + fvol=other.fvol; + cn=other.cn; + return *this; +} + +std::ostream& speaker::operator()(const std::string& fct) const { + if (fquiet) return *weg; + // *this<<"In "<<fct<<". "; + if (errs && fe2cerr) return std::cerr<<fct; + else return std::cout<<fct; +} + +std::ostream& speaker::operator>> (const std::string& arg) const { + return print(arg); +} + +std::ostream& speaker::print(const std::string& mes) const { + if (fquiet) return *weg; + else { + if (errs&&fe2cerr) return std::cerr<<mes; + else return std::cout<<mes; + } +} + +std::ostream& speaker::operator[](const std::string& fct) const { + if (fquiet) return *weg; + if (!cn.empty()) return *this<<"["<<cn<<"::"<<fct<<"] "; + else return *this<<"["<<fct<<"] "; +} + +const speaker& speaker::prefix(const std::string& fct) const { + if (!fquiet) { + if (errs&&fe2cerr) std::cerr<<fct; + else std::cout<<fct; + } + return *this; +} + +int speaker::SetGlobalVerbosity(say::Verbosity volume) { + fverb=volume; + int c=0; + for (map<unsigned long, speaker*>::const_iterator ii=(*list).begin(); ii!=(*list).end(); ++ii) { + (*ii).second->DoSpeak((*ii).second->GetVolume()>=volume); + c++; + } + return c; +} + +say::Verbosity speaker::GetGlobalVerbosity() { + return fverb; +} + +PrimalScream::PrimalScream(std::string classname) { + debug = speaker(" # DEBUG. ",say::DEBUG); + man = speaker(" # USAGE. ",say::MANUAL); + info = speaker(" # INFO. ",say::INFO); + warn = speaker(" # WARNING! ",say::WARNING); + error = speaker(" # ERROR! ",say::ERROR,true); + debugsep = speaker("",say::DEBUG); + mansep = speaker("",say::MANUAL); + infosep = speaker("",say::INFO); + warnsep = speaker("",say::WARNING); + errorsep = speaker("",say::ERROR,true); + shout = speaker(" # ",say::ERROR,false); + yell = speaker("",say::ERROR,false); + SetClassName(classname); +} + +void PrimalScream::SetClassName(const std::string classname){ + ___cn=classname; + debug.SetClassName(___cn); + man.SetClassName(___cn); + info.SetClassName(___cn); + warn.SetClassName(___cn); + error.SetClassName(___cn); + debugsep.SetClassName(___cn); + mansep.SetClassName(___cn); + infosep.SetClassName(___cn); + warnsep.SetClassName(___cn); + errorsep.SetClassName(___cn); + shout.SetClassName(___cn); + yell.SetClassName(___cn); +} + +void PrimalScream::SetVerbosity(say::Verbosity volume) { + debug.DoSpeak(debug.GetVolume() >= volume); + man.DoSpeak(man.GetVolume() >= volume); + info.DoSpeak(info.GetVolume() >= volume); + warn.DoSpeak(warn.GetVolume() >= volume); + error.DoSpeak(error.GetVolume() >= volume); + debugsep.DoSpeak(debug.GetVolume() >= volume); + mansep.DoSpeak(man.GetVolume() >= volume); + infosep.DoSpeak(info.GetVolume() >= volume); + warnsep.DoSpeak(warn.GetVolume() >= volume); + errorsep.DoSpeak(error.GetVolume() >= volume); + shout.DoSpeak(shout.GetVolume() >= volume); + yell.DoSpeak(yell.GetVolume() >= volume); +} + +namespace say { + speaker debug(" # DEBUG. ",say::DEBUG); + speaker man (" # USAGE. ",say::MANUAL); + speaker info (" # INFO. ",say::INFO); + speaker warn (" # WARNING! ",say::WARNING); + speaker error(" # ERROR! ",say::ERROR,true); + speaker debugsep("",say::DEBUG); + speaker mansep ("",say::MANUAL); + speaker infosep ("",say::INFO); + speaker warnsep ("",say::WARNING); + speaker errorsep("",say::ERROR,true); + speaker shout(" # ",say::ERROR,false); + speaker yell("",say::ERROR,false); + int SetGlobalVerbosity(Verbosity verbosity) { + return speaker::SetGlobalVerbosity(verbosity); + }; + Verbosity GetGlobalVerbosity() { + return speaker::fverb; + } +} diff --git a/v2.6/toolkit/fortranext/.gitignore b/v2.6/toolkit/fortranext/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..dc9a66c26bbda0fdd71cf1f1b36fb5adbabac36d --- /dev/null +++ b/v2.6/toolkit/fortranext/.gitignore @@ -0,0 +1,2 @@ +# Ignore created executables +fnlo-tk-* diff --git a/v2.6/toolkit/fortranext/Makefile.Fred b/v2.6/toolkit/fortranext/Makefile.Fred new file mode 100644 index 0000000000000000000000000000000000000000..b43e1e57532bac4bf39accb95ee26918327e6979 --- /dev/null +++ b/v2.6/toolkit/fortranext/Makefile.Fred @@ -0,0 +1,22 @@ +LD = g++ +LDFLAGS += -L../fastnlotoolkit/.libs -Wl,-rpath,../fastnlotoolkit/.libs -lfastnlotoolkit +# C++ compiler settings +GXX = g++ +CFLAGS += -I../fastnlotoolkit/include/fastnlotk/ +# Fortran compiler settings +FC = gfortran +LDFLAGS += -lgfortran + +all: fortran_example + +fortran_example: fastNLOFI_cc.o fastNLOFI_f.o + $(LD) $(LDFLAGS) -o fortran_example fastNLOFI_cc.o fastNLOFI_f.o + +fastNLOFI_cc.o: fastNLOFI_cc.cc + $(GXX) $(CFLAGS) -o fastNLOFI_cc.o -c fastNLOFI_cc.cc + +fastNLOFI_f.o: fastNLOFI_f.f + $(FC) -o fastNLOFI_f.o -c fastNLOFI_f.f + +clean: + rm -rf *.o fortran_example diff --git a/v2.6/toolkit/fortranext/Makefile.am b/v2.6/toolkit/fortranext/Makefile.am new file mode 100644 index 0000000000000000000000000000000000000000..f3f0a1e5a0754d27df5b5be5a0ce87db4f6a0a20 --- /dev/null +++ b/v2.6/toolkit/fortranext/Makefile.am @@ -0,0 +1,61 @@ +# -*- Automake -*- +# ----------------------------------------------------------------------------- +# +# K. Rabbertz, 08.11.2016 +# +# fastNLO_toolkit +# +# ----------------------------------------------------------------------------- +# Use GNU standards +AUTOMAKE_OPTIONS = gnu + +# Optional extension +if ENABLE_FORTRANEXT + +# +# Targets +# +# The fastnlo toolkit example for use with Fortran +# + bin_PROGRAMS = fnlo-tk-fortex + +# +# Sources +# +# All source files which go into the targets (and have to be distributed) +# Programs to be compiled + fnlo_tk_fortex_SOURCES = fastNLOFI_cc.cc fastNLOFI_f.f + +# +# Preprocessor flags +# +# All targets + AM_CPPFLAGS = + my_include_dirs = -I${srcdir}/../fastnlotoolkit/include -I${top_builddir}/fastnlotoolkit/include -I${top_srcdir}/fastnlotoolkit/include + +# Individual targets + fnlo_tk_fortex_CPPFLAGS = $(my_include_dirs) -I${includedir} $(AM_CPPFLAGS) + +# +# Fortran compiler flags +# + +# +# Linker flags +# +# All targets +# FRTLDFLAGS is determined and set in configure.ac +# This is required to make things work on Mac + AM_LDFLAGS = $(FRTLDFLAGS) + my_lib_dirs = -L${srcdir}/../fastnlotoolkit -lfastnlotoolkit -L${top_builddir}/fastnlotoolkit -lfastnlotoolkit -L${top_srcdir}/fastnlotoolkit -lfastnlotoolkit +# Individual targets + fnlo_tk_fortex_LDFLAGS = $(my_lib_dirs) -L${pkglibdir} -lfastnlotoolkit $(AM_LDFLAGS) + +endif + +# Files that are required to build the project but that can be +# recreated IF the necessary autotools etc. are available by: +# "autoreconf -i; ./configure" +# Use "make maintainer-clean" (on a build machine) before svn commits, +# but not for distribution +MAINTAINERCLEANFILES = Makefile.in diff --git a/v2.6/toolkit/fortranext/README b/v2.6/toolkit/fortranext/README new file mode 100644 index 0000000000000000000000000000000000000000..2295408f6f25f88bcbca61969955ba1f244d7598 --- /dev/null +++ b/v2.6/toolkit/fortranext/README @@ -0,0 +1,8 @@ +Basic example for a bi-directional interface between: + + * C++ fastNLO toolkit +and + * Fortran analysis / PDF fitting code + +The fastNLO toolkit calculates PDF / alpha_s using Fortran code. +And the fortran code evaluates a fastNLO table using the toolkit. diff --git a/v2.6/toolkit/fortranext/fastNLOFI_cc.cc b/v2.6/toolkit/fortranext/fastNLOFI_cc.cc new file mode 100644 index 0000000000000000000000000000000000000000..be722cf19e7bdbd55961371cee878540a658d18d --- /dev/null +++ b/v2.6/toolkit/fortranext/fastNLOFI_cc.cc @@ -0,0 +1,114 @@ +////////////////////////////////////////////////////////////////////////// +// // +// fastNLO_reader_2.1.0 // +// D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch // +// // +// The projects web page can be found at: // +// http://projects.hepforge.org/fastnlo // +// // +// If you use this code, please cite: // +// T. Kluge, K. Rabbertz and M. Wobisch, hep-ph/0609285 // +// D. Britzger, T. Kluge, K. Rabbertz, F. Stober, M. Wobisch, // +// arXiv:1109.1310 // +// // +////////////////////////////////////////////////////////////////////////// + +////////////////////////////////////////////////////////////////////////// +// +// fastNLOExtern +// This class allows to supply the three main abstract methods from an +// externally linked library. +// +////////////////////////////////////////////////////////////////////////// + +#include "fastnlotk/fastNLOReader.h" + +using namespace std; + +// Fortran Functions that get consumed by C++ +extern "C" { + void fastnlo_initpdf_(); + void fastnlo_getxfx_(double *ret, double* x, double* muf, int* f); + void fastnlo_evolve_as_(double *ret, double* q); +} + +class fastNLOExtern : public fastNLOReader { +public: + fastNLOExtern(std::string tablename) : fastNLOReader(tablename) {} +protected: + // Call external function to init PDF + virtual bool InitPDF() { + fastnlo_initpdf_(); + return true; + } + + // Call external function to get PDF values + virtual vector<double> GetXFX(double x, double muf) const { + vector <double> xfx(13); + for (int f = -6; f < 7; ++f) + fastnlo_getxfx_(&(xfx[f + 6]), &x, &muf, &f); + return xfx; + } + + // Call external function to get alpha_s value + virtual double EvolveAlphas(double Q) const { + double result; + fastnlo_evolve_as_(&result, &Q); + return result; + } +}; + +std::map<int, fastNLOExtern*> fastNLO_context; + +fastNLOExtern *fastnlo_get(int *ctx) { + if (fastNLO_context.find(*ctx) != fastNLO_context.end()) + return fastNLO_context[*ctx]; + std::cerr << "Invalid fastNLO instance! " << *ctx << std::endl; + return 0; +} + +void v2f(vector<double> v, double *result, int *result_size) { + for (size_t i = 0; i < v.size(); ++i) // memcpy could be dangerous? + result[i] = v[i]; + *result_size = v.size(); +} + +// C++ Functions that get consumed by Fortran +extern "C" { + void fastnlo_create_(int *ctx, char *tbl_name, int tbl_name_len) { + fastNLOExtern *reader = new fastNLOExtern(std::string(tbl_name, tbl_name_len)); + *ctx = 0; + if (fastNLO_context.rbegin() != fastNLO_context.rend()) + *ctx = fastNLO_context.rbegin()->first + 1; + fastNLO_context[*ctx] = reader; + } + + void fastnlo_destroy_(int *ctx) { + fastNLOExtern *reader = fastnlo_get(ctx); + delete reader; + fastNLO_context.erase(*ctx); + } + + void fastnlo_setscalefactorsmurmuf_(int *ctx, double *muR, double *muF) { + fastnlo_get(ctx)->SetScaleFactorsMuRMuF(*muR, *muF); + fastnlo_get(ctx)->CalcCrossSection(); + } + + void fastnlo_getcrosssection_(int *ctx, double *result, int *result_size) { + v2f(fastnlo_get(ctx)->GetCrossSection(), result, result_size); + } + + void fastnlo_getqscales_(int *ctx, int *irelord, double *result, int *result_size) { + v2f(fastnlo_get(ctx)->GetQScales(), result, result_size); + } + + void fastnlo_getobsbindimbounds_(int *ctx, int *bin, double *result, int *result_size) { + fastNLOExtern *reader = fastnlo_get(ctx); + vector<pair<double, double > > binInfo = reader->GetObsBinDimBounds(*bin); + for (size_t i = 0, j = 0; i < reader->GetNumDiffBin(); ++i) { + result[j++] = binInfo[i].first; + result[j++] = binInfo[i].second; + } + *result_size = reader->GetNumDiffBin(); + } +} diff --git a/v2.6/toolkit/fortranext/fastNLOFI_f.f b/v2.6/toolkit/fortranext/fastNLOFI_f.f new file mode 100644 index 0000000000000000000000000000000000000000..56a853a962ada9d34a0cd42520a9772f63844378 --- /dev/null +++ b/v2.6/toolkit/fortranext/fastNLOFI_f.f @@ -0,0 +1,53 @@ + SUBROUTINE fastnlo_initpdf + REAL*8 A1, A2, A3 + COMMON A1, A2, A3 + A1 = 0.5 + A2 = 1 + A3 = 2 + END + + subroutine fastnlo_getxfx(RESULT, X, MUF, F) + REAL*8 RESULT, X, MUF + INTEGER F + + REAL*8 A1, A2, A3 + COMMON A1, A2, A3 + + RESULT = A1 * X**A2 * (1 - X)**A3 + end + + subroutine fastnlo_evolve_as(RESULT, Q) + REAL*8 RESULT, Q + RESULT = 0.118 / ( 1 - 0.118 / 9.423 * dlog( Q**2 / 91.18**2)) + end + + PROGRAM main + INTEGER CTX + INTEGER IDX, BINS, DIMS + REAL*8 XS(1024) + REAL*8 BININFO(4) + CHARACTER*65 TABLE + REAL*8 MUR, MUF + TABLE = "../data/check/InclusiveNJets_fnr0001midpHT_I723509"// + _ "_v23_fix.tab.gz"//CHAR(0) + + call fastnlo_create(CTX, TABLE) + write(*,*) CTX + call fastnlo_getcrosssection(CTX, XS, BINS) + write(*,*) CTX, BINS + do IDX = 1,BINS + call fastnlo_getobsbindimbounds(CTX, IDX - 1, BININFO, DIMS) + write(*,*) IDX,BININFO,"->",XS(IDX) + enddo + +Comment: MUR = 2E0 +Comment: MUF = 2E0 +Comment: call fastnlo_setscalefactorsmurmuf(CTX, MUR, MUF) +Comment: call fastnlo_getcrosssection(CTX, XS, BINS) +Comment: do IDX = 1,BINS +Comment: write(*,*) IDX,BININFO,"->",XS(IDX) +Comment: enddo + + call fastnlo_destroy(CTX) + + END PROGRAM diff --git a/v2.6/toolkit/git_commits_and_tags b/v2.6/toolkit/git_commits_and_tags new file mode 100644 index 0000000000000000000000000000000000000000..c50c69ee062ad9df1c497d183c040c9b22f99834 --- /dev/null +++ b/v2.6/toolkit/git_commits_and_tags @@ -0,0 +1,10 @@ +# 1. Describe actual state +git describe +# 2. List tags +git tag -l +# 3. Count commits until master since last revision tag lasttag +git rev-list lasttag..master --count +# 4. Set annotated tag adding up lasttag and commit count since then +git tag -a -m "message" lasttag+count +# 5. Push tag to master +git push origin lasttag+count diff --git a/v2.6/toolkit/m4.tar.gz b/v2.6/toolkit/m4.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..35f8f6572c393b50856ef331790d3d8aa9ce61a3 Binary files /dev/null and b/v2.6/toolkit/m4.tar.gz differ diff --git a/v2.6/toolkit/m4/ax_check_zlib.m4 b/v2.6/toolkit/m4/ax_check_zlib.m4 new file mode 100644 index 0000000000000000000000000000000000000000..1a168430485fe1e8cf9e7c500ee95307df54fac1 --- /dev/null +++ b/v2.6/toolkit/m4/ax_check_zlib.m4 @@ -0,0 +1,141 @@ +# =========================================================================== +# https://www.gnu.org/software/autoconf-archive/ax_check_zlib.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_CHECK_ZLIB([action-if-found], [action-if-not-found]) +# +# DESCRIPTION +# +# This macro searches for an installed zlib library. If nothing was +# specified when calling configure, it searches first in /usr/local and +# then in /usr, /opt/local and /sw. If the --with-zlib=DIR is specified, +# it will try to find it in DIR/include/zlib.h and DIR/lib/libz.a. If +# --without-zlib is specified, the library is not searched at all. +# +# If either the header file (zlib.h) or the library (libz) is not found, +# shell commands 'action-if-not-found' is run. If 'action-if-not-found' is +# not specified, the configuration exits on error, asking for a valid zlib +# installation directory or --without-zlib. +# +# If both header file and library are found, shell commands +# 'action-if-found' is run. If 'action-if-found' is not specified, the +# default action appends '-I${ZLIB_HOME}/include' to CPFLAGS, appends +# '-L$ZLIB_HOME}/lib' to LDFLAGS, prepends '-lz' to LIBS, and calls +# AC_DEFINE(HAVE_LIBZ). You should use autoheader to include a definition +# for this symbol in a config.h file. Sample usage in a C/C++ source is as +# follows: +# +# #ifdef HAVE_LIBZ +# #include <zlib.h> +# #endif /* HAVE_LIBZ */ +# +# LICENSE +# +# Copyright (c) 2008 Loic Dachary <loic@senga.org> +# Copyright (c) 2010 Bastien Chevreux <bach@chevreux.org> +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 2 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see <https://www.gnu.org/licenses/>. +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Archive. When you make and distribute a +# modified version of the Autoconf Macro, you may extend this special +# exception to the GPL to apply to your modified version as well. + +#serial 16 + +AU_ALIAS([CHECK_ZLIB], [AX_CHECK_ZLIB]) +AC_DEFUN([AX_CHECK_ZLIB], +# +# Handle user hints +# +[AC_MSG_CHECKING(if zlib is wanted) +zlib_places="/usr/local /usr /opt/local /sw" +AC_ARG_WITH([zlib], +[ --with-zlib=DIR root directory path of zlib installation @<:@defaults to + /usr/local or /usr if not found in /usr/local@:>@ + --without-zlib to disable zlib usage completely], +[if test "$withval" != no ; then + AC_MSG_RESULT(yes) + if test -d "$withval" + then + zlib_places="$withval $zlib_places" + else + AC_MSG_WARN([Sorry, $withval does not exist, checking usual places]) + fi +else + zlib_places= + AC_MSG_RESULT(no) +fi], +[AC_MSG_RESULT(yes)]) + +# +# Locate zlib, if wanted +# +if test -n "${zlib_places}" +then + # check the user supplied or any other more or less 'standard' place: + # Most UNIX systems : /usr/local and /usr + # MacPorts / Fink on OSX : /opt/local respectively /sw + for ZLIB_HOME in ${zlib_places} ; do + if test -f "${ZLIB_HOME}/include/zlib.h"; then break; fi + ZLIB_HOME="" + done + + ZLIB_OLD_LDFLAGS=$LDFLAGS + ZLIB_OLD_CPPFLAGS=$CPPFLAGS + if test -n "${ZLIB_HOME}"; then + LDFLAGS="$LDFLAGS -L${ZLIB_HOME}/lib" + CPPFLAGS="$CPPFLAGS -I${ZLIB_HOME}/include" + fi + AC_LANG_PUSH([C]) + AC_CHECK_LIB([z], [inflateEnd], [zlib_cv_libz=yes], [zlib_cv_libz=no]) + AC_CHECK_HEADER([zlib.h], [zlib_cv_zlib_h=yes], [zlib_cv_zlib_h=no]) + AC_LANG_POP([C]) + if test "$zlib_cv_libz" = "yes" && test "$zlib_cv_zlib_h" = "yes" + then + # + # If both library and header were found, action-if-found + # + m4_ifblank([$1],[ + CPPFLAGS="$CPPFLAGS -I${ZLIB_HOME}/include" + LDFLAGS="$LDFLAGS -L${ZLIB_HOME}/lib" + LIBS="-lz $LIBS" + AC_DEFINE([HAVE_LIBZ], [1], + [Define to 1 if you have `z' library (-lz)]) + ],[ + # Restore variables + LDFLAGS="$ZLIB_OLD_LDFLAGS" + CPPFLAGS="$ZLIB_OLD_CPPFLAGS" + $1 + ]) + else + # + # If either header or library was not found, action-if-not-found + # + m4_default([$2],[ + AC_MSG_ERROR([either specify a valid zlib installation with --with-zlib=DIR or disable zlib usage with --without-zlib]) + ]) + fi +fi +]) diff --git a/v2.6/toolkit/m4/ax_cxx_compile_stdcxx.m4 b/v2.6/toolkit/m4/ax_cxx_compile_stdcxx.m4 new file mode 100644 index 0000000000000000000000000000000000000000..9413da624d2545123501b7788b7ac6d96fd322e8 --- /dev/null +++ b/v2.6/toolkit/m4/ax_cxx_compile_stdcxx.m4 @@ -0,0 +1,962 @@ +# =========================================================================== +# https://www.gnu.org/software/autoconf-archive/ax_cxx_compile_stdcxx.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_CXX_COMPILE_STDCXX(VERSION, [ext|noext], [mandatory|optional]) +# +# DESCRIPTION +# +# Check for baseline language coverage in the compiler for the specified +# version of the C++ standard. If necessary, add switches to CXX and +# CXXCPP to enable support. VERSION may be '11' (for the C++11 standard) +# or '14' (for the C++14 standard). +# +# The second argument, if specified, indicates whether you insist on an +# extended mode (e.g. -std=gnu++11) or a strict conformance mode (e.g. +# -std=c++11). If neither is specified, you get whatever works, with +# preference for no added switch, and then for an extended mode. +# +# The third argument, if specified 'mandatory' or if left unspecified, +# indicates that baseline support for the specified C++ standard is +# required and that the macro should error out if no mode with that +# support is found. If specified 'optional', then configuration proceeds +# regardless, after defining HAVE_CXX${VERSION} if and only if a +# supporting mode is found. +# +# LICENSE +# +# Copyright (c) 2008 Benjamin Kosnik <bkoz@redhat.com> +# Copyright (c) 2012 Zack Weinberg <zackw@panix.com> +# Copyright (c) 2013 Roy Stogner <roystgnr@ices.utexas.edu> +# Copyright (c) 2014, 2015 Google Inc.; contributed by Alexey Sokolov <sokolov@google.com> +# Copyright (c) 2015 Paul Norman <penorman@mac.com> +# Copyright (c) 2015 Moritz Klammler <moritz@klammler.eu> +# Copyright (c) 2016, 2018 Krzesimir Nowak <qdlacz@gmail.com> +# Copyright (c) 2019 Enji Cooper <yaneurabeya@gmail.com> +# Copyright (c) 2020 Jason Merrill <jason@redhat.com> +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 12 + +dnl This macro is based on the code from the AX_CXX_COMPILE_STDCXX_11 macro +dnl (serial version number 13). + +AC_DEFUN([AX_CXX_COMPILE_STDCXX], [dnl + m4_if([$1], [11], [ax_cxx_compile_alternatives="11 0x"], + [$1], [14], [ax_cxx_compile_alternatives="14 1y"], + [$1], [17], [ax_cxx_compile_alternatives="17 1z"], + [m4_fatal([invalid first argument `$1' to AX_CXX_COMPILE_STDCXX])])dnl + m4_if([$2], [], [], + [$2], [ext], [], + [$2], [noext], [], + [m4_fatal([invalid second argument `$2' to AX_CXX_COMPILE_STDCXX])])dnl + m4_if([$3], [], [ax_cxx_compile_cxx$1_required=true], + [$3], [mandatory], [ax_cxx_compile_cxx$1_required=true], + [$3], [optional], [ax_cxx_compile_cxx$1_required=false], + [m4_fatal([invalid third argument `$3' to AX_CXX_COMPILE_STDCXX])]) + AC_LANG_PUSH([C++])dnl + ac_success=no + + m4_if([$2], [], [dnl + AC_CACHE_CHECK(whether $CXX supports C++$1 features by default, + ax_cv_cxx_compile_cxx$1, + [AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])], + [ax_cv_cxx_compile_cxx$1=yes], + [ax_cv_cxx_compile_cxx$1=no])]) + if test x$ax_cv_cxx_compile_cxx$1 = xyes; then + ac_success=yes + fi]) + + m4_if([$2], [noext], [], [dnl + if test x$ac_success = xno; then + for alternative in ${ax_cxx_compile_alternatives}; do + switch="-std=gnu++${alternative}" + cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx$1_$switch]) + AC_CACHE_CHECK(whether $CXX supports C++$1 features with $switch, + $cachevar, + [ac_save_CXX="$CXX" + CXX="$CXX $switch" + AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])], + [eval $cachevar=yes], + [eval $cachevar=no]) + CXX="$ac_save_CXX"]) + if eval test x\$$cachevar = xyes; then + CXX="$CXX $switch" + if test -n "$CXXCPP" ; then + CXXCPP="$CXXCPP $switch" + fi + ac_success=yes + break + fi + done + fi]) + + m4_if([$2], [ext], [], [dnl + if test x$ac_success = xno; then + dnl HP's aCC needs +std=c++11 according to: + dnl http://h21007.www2.hp.com/portal/download/files/unprot/aCxx/PDF_Release_Notes/769149-001.pdf + dnl Cray's crayCC needs "-h std=c++11" + for alternative in ${ax_cxx_compile_alternatives}; do + for switch in -std=c++${alternative} +std=c++${alternative} "-h std=c++${alternative}"; do + cachevar=AS_TR_SH([ax_cv_cxx_compile_cxx$1_$switch]) + AC_CACHE_CHECK(whether $CXX supports C++$1 features with $switch, + $cachevar, + [ac_save_CXX="$CXX" + CXX="$CXX $switch" + AC_COMPILE_IFELSE([AC_LANG_SOURCE([_AX_CXX_COMPILE_STDCXX_testbody_$1])], + [eval $cachevar=yes], + [eval $cachevar=no]) + CXX="$ac_save_CXX"]) + if eval test x\$$cachevar = xyes; then + CXX="$CXX $switch" + if test -n "$CXXCPP" ; then + CXXCPP="$CXXCPP $switch" + fi + ac_success=yes + break + fi + done + if test x$ac_success = xyes; then + break + fi + done + fi]) + AC_LANG_POP([C++]) + if test x$ax_cxx_compile_cxx$1_required = xtrue; then + if test x$ac_success = xno; then + AC_MSG_ERROR([*** A compiler with support for C++$1 language features is required.]) + fi + fi + if test x$ac_success = xno; then + HAVE_CXX$1=0 + AC_MSG_NOTICE([No compiler with C++$1 support was found]) + else + HAVE_CXX$1=1 + AC_DEFINE(HAVE_CXX$1,1, + [define if the compiler supports basic C++$1 syntax]) + fi + AC_SUBST(HAVE_CXX$1) +]) + + +dnl Test body for checking C++11 support + +m4_define([_AX_CXX_COMPILE_STDCXX_testbody_11], + _AX_CXX_COMPILE_STDCXX_testbody_new_in_11 +) + + +dnl Test body for checking C++14 support + +m4_define([_AX_CXX_COMPILE_STDCXX_testbody_14], + _AX_CXX_COMPILE_STDCXX_testbody_new_in_11 + _AX_CXX_COMPILE_STDCXX_testbody_new_in_14 +) + +m4_define([_AX_CXX_COMPILE_STDCXX_testbody_17], + _AX_CXX_COMPILE_STDCXX_testbody_new_in_11 + _AX_CXX_COMPILE_STDCXX_testbody_new_in_14 + _AX_CXX_COMPILE_STDCXX_testbody_new_in_17 +) + +dnl Tests for new features in C++11 + +m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_11], [[ + +// If the compiler admits that it is not ready for C++11, why torture it? +// Hopefully, this will speed up the test. + +#ifndef __cplusplus + +#error "This is not a C++ compiler" + +#elif __cplusplus < 201103L + +#error "This is not a C++11 compiler" + +#else + +namespace cxx11 +{ + + namespace test_static_assert + { + + template <typename T> + struct check + { + static_assert(sizeof(int) <= sizeof(T), "not big enough"); + }; + + } + + namespace test_final_override + { + + struct Base + { + virtual ~Base() {} + virtual void f() {} + }; + + struct Derived : public Base + { + virtual ~Derived() override {} + virtual void f() override {} + }; + + } + + namespace test_double_right_angle_brackets + { + + template < typename T > + struct check {}; + + typedef check<void> single_type; + typedef check<check<void>> double_type; + typedef check<check<check<void>>> triple_type; + typedef check<check<check<check<void>>>> quadruple_type; + + } + + namespace test_decltype + { + + int + f() + { + int a = 1; + decltype(a) b = 2; + return a + b; + } + + } + + namespace test_type_deduction + { + + template < typename T1, typename T2 > + struct is_same + { + static const bool value = false; + }; + + template < typename T > + struct is_same<T, T> + { + static const bool value = true; + }; + + template < typename T1, typename T2 > + auto + add(T1 a1, T2 a2) -> decltype(a1 + a2) + { + return a1 + a2; + } + + int + test(const int c, volatile int v) + { + static_assert(is_same<int, decltype(0)>::value == true, ""); + static_assert(is_same<int, decltype(c)>::value == false, ""); + static_assert(is_same<int, decltype(v)>::value == false, ""); + auto ac = c; + auto av = v; + auto sumi = ac + av + 'x'; + auto sumf = ac + av + 1.0; + static_assert(is_same<int, decltype(ac)>::value == true, ""); + static_assert(is_same<int, decltype(av)>::value == true, ""); + static_assert(is_same<int, decltype(sumi)>::value == true, ""); + static_assert(is_same<int, decltype(sumf)>::value == false, ""); + static_assert(is_same<int, decltype(add(c, v))>::value == true, ""); + return (sumf > 0.0) ? sumi : add(c, v); + } + + } + + namespace test_noexcept + { + + int f() { return 0; } + int g() noexcept { return 0; } + + static_assert(noexcept(f()) == false, ""); + static_assert(noexcept(g()) == true, ""); + + } + + namespace test_constexpr + { + + template < typename CharT > + unsigned long constexpr + strlen_c_r(const CharT *const s, const unsigned long acc) noexcept + { + return *s ? strlen_c_r(s + 1, acc + 1) : acc; + } + + template < typename CharT > + unsigned long constexpr + strlen_c(const CharT *const s) noexcept + { + return strlen_c_r(s, 0UL); + } + + static_assert(strlen_c("") == 0UL, ""); + static_assert(strlen_c("1") == 1UL, ""); + static_assert(strlen_c("example") == 7UL, ""); + static_assert(strlen_c("another\0example") == 7UL, ""); + + } + + namespace test_rvalue_references + { + + template < int N > + struct answer + { + static constexpr int value = N; + }; + + answer<1> f(int&) { return answer<1>(); } + answer<2> f(const int&) { return answer<2>(); } + answer<3> f(int&&) { return answer<3>(); } + + void + test() + { + int i = 0; + const int c = 0; + static_assert(decltype(f(i))::value == 1, ""); + static_assert(decltype(f(c))::value == 2, ""); + static_assert(decltype(f(0))::value == 3, ""); + } + + } + + namespace test_uniform_initialization + { + + struct test + { + static const int zero {}; + static const int one {1}; + }; + + static_assert(test::zero == 0, ""); + static_assert(test::one == 1, ""); + + } + + namespace test_lambdas + { + + void + test1() + { + auto lambda1 = [](){}; + auto lambda2 = lambda1; + lambda1(); + lambda2(); + } + + int + test2() + { + auto a = [](int i, int j){ return i + j; }(1, 2); + auto b = []() -> int { return '0'; }(); + auto c = [=](){ return a + b; }(); + auto d = [&](){ return c; }(); + auto e = [a, &b](int x) mutable { + const auto identity = [](int y){ return y; }; + for (auto i = 0; i < a; ++i) + a += b--; + return x + identity(a + b); + }(0); + return a + b + c + d + e; + } + + int + test3() + { + const auto nullary = [](){ return 0; }; + const auto unary = [](int x){ return x; }; + using nullary_t = decltype(nullary); + using unary_t = decltype(unary); + const auto higher1st = [](nullary_t f){ return f(); }; + const auto higher2nd = [unary](nullary_t f1){ + return [unary, f1](unary_t f2){ return f2(unary(f1())); }; + }; + return higher1st(nullary) + higher2nd(nullary)(unary); + } + + } + + namespace test_variadic_templates + { + + template <int...> + struct sum; + + template <int N0, int... N1toN> + struct sum<N0, N1toN...> + { + static constexpr auto value = N0 + sum<N1toN...>::value; + }; + + template <> + struct sum<> + { + static constexpr auto value = 0; + }; + + static_assert(sum<>::value == 0, ""); + static_assert(sum<1>::value == 1, ""); + static_assert(sum<23>::value == 23, ""); + static_assert(sum<1, 2>::value == 3, ""); + static_assert(sum<5, 5, 11>::value == 21, ""); + static_assert(sum<2, 3, 5, 7, 11, 13>::value == 41, ""); + + } + + // http://stackoverflow.com/questions/13728184/template-aliases-and-sfinae + // Clang 3.1 fails with headers of libstd++ 4.8.3 when using std::function + // because of this. + namespace test_template_alias_sfinae + { + + struct foo {}; + + template<typename T> + using member = typename T::member_type; + + template<typename T> + void func(...) {} + + template<typename T> + void func(member<T>*) {} + + void test(); + + void test() { func<foo>(0); } + + } + +} // namespace cxx11 + +#endif // __cplusplus >= 201103L + +]]) + + +dnl Tests for new features in C++14 + +m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_14], [[ + +// If the compiler admits that it is not ready for C++14, why torture it? +// Hopefully, this will speed up the test. + +#ifndef __cplusplus + +#error "This is not a C++ compiler" + +#elif __cplusplus < 201402L + +#error "This is not a C++14 compiler" + +#else + +namespace cxx14 +{ + + namespace test_polymorphic_lambdas + { + + int + test() + { + const auto lambda = [](auto&&... args){ + const auto istiny = [](auto x){ + return (sizeof(x) == 1UL) ? 1 : 0; + }; + const int aretiny[] = { istiny(args)... }; + return aretiny[0]; + }; + return lambda(1, 1L, 1.0f, '1'); + } + + } + + namespace test_binary_literals + { + + constexpr auto ivii = 0b0000000000101010; + static_assert(ivii == 42, "wrong value"); + + } + + namespace test_generalized_constexpr + { + + template < typename CharT > + constexpr unsigned long + strlen_c(const CharT *const s) noexcept + { + auto length = 0UL; + for (auto p = s; *p; ++p) + ++length; + return length; + } + + static_assert(strlen_c("") == 0UL, ""); + static_assert(strlen_c("x") == 1UL, ""); + static_assert(strlen_c("test") == 4UL, ""); + static_assert(strlen_c("another\0test") == 7UL, ""); + + } + + namespace test_lambda_init_capture + { + + int + test() + { + auto x = 0; + const auto lambda1 = [a = x](int b){ return a + b; }; + const auto lambda2 = [a = lambda1(x)](){ return a; }; + return lambda2(); + } + + } + + namespace test_digit_separators + { + + constexpr auto ten_million = 100'000'000; + static_assert(ten_million == 100000000, ""); + + } + + namespace test_return_type_deduction + { + + auto f(int& x) { return x; } + decltype(auto) g(int& x) { return x; } + + template < typename T1, typename T2 > + struct is_same + { + static constexpr auto value = false; + }; + + template < typename T > + struct is_same<T, T> + { + static constexpr auto value = true; + }; + + int + test() + { + auto x = 0; + static_assert(is_same<int, decltype(f(x))>::value, ""); + static_assert(is_same<int&, decltype(g(x))>::value, ""); + return x; + } + + } + +} // namespace cxx14 + +#endif // __cplusplus >= 201402L + +]]) + + +dnl Tests for new features in C++17 + +m4_define([_AX_CXX_COMPILE_STDCXX_testbody_new_in_17], [[ + +// If the compiler admits that it is not ready for C++17, why torture it? +// Hopefully, this will speed up the test. + +#ifndef __cplusplus + +#error "This is not a C++ compiler" + +#elif __cplusplus < 201703L + +#error "This is not a C++17 compiler" + +#else + +#include <initializer_list> +#include <utility> +#include <type_traits> + +namespace cxx17 +{ + + namespace test_constexpr_lambdas + { + + constexpr int foo = [](){return 42;}(); + + } + + namespace test::nested_namespace::definitions + { + + } + + namespace test_fold_expression + { + + template<typename... Args> + int multiply(Args... args) + { + return (args * ... * 1); + } + + template<typename... Args> + bool all(Args... args) + { + return (args && ...); + } + + } + + namespace test_extended_static_assert + { + + static_assert (true); + + } + + namespace test_auto_brace_init_list + { + + auto foo = {5}; + auto bar {5}; + + static_assert(std::is_same<std::initializer_list<int>, decltype(foo)>::value); + static_assert(std::is_same<int, decltype(bar)>::value); + } + + namespace test_typename_in_template_template_parameter + { + + template<template<typename> typename X> struct D; + + } + + namespace test_fallthrough_nodiscard_maybe_unused_attributes + { + + int f1() + { + return 42; + } + + [[nodiscard]] int f2() + { + [[maybe_unused]] auto unused = f1(); + + switch (f1()) + { + case 17: + f1(); + [[fallthrough]]; + case 42: + f1(); + } + return f1(); + } + + } + + namespace test_extended_aggregate_initialization + { + + struct base1 + { + int b1, b2 = 42; + }; + + struct base2 + { + base2() { + b3 = 42; + } + int b3; + }; + + struct derived : base1, base2 + { + int d; + }; + + derived d1 {{1, 2}, {}, 4}; // full initialization + derived d2 {{}, {}, 4}; // value-initialized bases + + } + + namespace test_general_range_based_for_loop + { + + struct iter + { + int i; + + int& operator* () + { + return i; + } + + const int& operator* () const + { + return i; + } + + iter& operator++() + { + ++i; + return *this; + } + }; + + struct sentinel + { + int i; + }; + + bool operator== (const iter& i, const sentinel& s) + { + return i.i == s.i; + } + + bool operator!= (const iter& i, const sentinel& s) + { + return !(i == s); + } + + struct range + { + iter begin() const + { + return {0}; + } + + sentinel end() const + { + return {5}; + } + }; + + void f() + { + range r {}; + + for (auto i : r) + { + [[maybe_unused]] auto v = i; + } + } + + } + + namespace test_lambda_capture_asterisk_this_by_value + { + + struct t + { + int i; + int foo() + { + return [*this]() + { + return i; + }(); + } + }; + + } + + namespace test_enum_class_construction + { + + enum class byte : unsigned char + {}; + + byte foo {42}; + + } + + namespace test_constexpr_if + { + + template <bool cond> + int f () + { + if constexpr(cond) + { + return 13; + } + else + { + return 42; + } + } + + } + + namespace test_selection_statement_with_initializer + { + + int f() + { + return 13; + } + + int f2() + { + if (auto i = f(); i > 0) + { + return 3; + } + + switch (auto i = f(); i + 4) + { + case 17: + return 2; + + default: + return 1; + } + } + + } + + namespace test_template_argument_deduction_for_class_templates + { + + template <typename T1, typename T2> + struct pair + { + pair (T1 p1, T2 p2) + : m1 {p1}, + m2 {p2} + {} + + T1 m1; + T2 m2; + }; + + void f() + { + [[maybe_unused]] auto p = pair{13, 42u}; + } + + } + + namespace test_non_type_auto_template_parameters + { + + template <auto n> + struct B + {}; + + B<5> b1; + B<'a'> b2; + + } + + namespace test_structured_bindings + { + + int arr[2] = { 1, 2 }; + std::pair<int, int> pr = { 1, 2 }; + + auto f1() -> int(&)[2] + { + return arr; + } + + auto f2() -> std::pair<int, int>& + { + return pr; + } + + struct S + { + int x1 : 2; + volatile double y1; + }; + + S f3() + { + return {}; + } + + auto [ x1, y1 ] = f1(); + auto& [ xr1, yr1 ] = f1(); + auto [ x2, y2 ] = f2(); + auto& [ xr2, yr2 ] = f2(); + const auto [ x3, y3 ] = f3(); + + } + + namespace test_exception_spec_type_system + { + + struct Good {}; + struct Bad {}; + + void g1() noexcept; + void g2(); + + template<typename T> + Bad + f(T*, T*); + + template<typename T1, typename T2> + Good + f(T1*, T2*); + + static_assert (std::is_same_v<Good, decltype(f(g1, g2))>); + + } + + namespace test_inline_variables + { + + template<class T> void f(T) + {} + + template<class T> inline T g(T) + { + return T{}; + } + + template<> inline void f<>(int) + {} + + template<> int g<>(int) + { + return 5; + } + + } + +} // namespace cxx17 + +#endif // __cplusplus < 201703L + +]]) diff --git a/v2.6/toolkit/m4/ax_cxx_compile_stdcxx_11.m4 b/v2.6/toolkit/m4/ax_cxx_compile_stdcxx_11.m4 new file mode 100644 index 0000000000000000000000000000000000000000..1733fd85f9595ea9e680c3382f0c9a01a288b637 --- /dev/null +++ b/v2.6/toolkit/m4/ax_cxx_compile_stdcxx_11.m4 @@ -0,0 +1,39 @@ +# ============================================================================= +# https://www.gnu.org/software/autoconf-archive/ax_cxx_compile_stdcxx_11.html +# ============================================================================= +# +# SYNOPSIS +# +# AX_CXX_COMPILE_STDCXX_11([ext|noext], [mandatory|optional]) +# +# DESCRIPTION +# +# Check for baseline language coverage in the compiler for the C++11 +# standard; if necessary, add switches to CXX and CXXCPP to enable +# support. +# +# This macro is a convenience alias for calling the AX_CXX_COMPILE_STDCXX +# macro with the version set to C++11. The two optional arguments are +# forwarded literally as the second and third argument respectively. +# Please see the documentation for the AX_CXX_COMPILE_STDCXX macro for +# more information. If you want to use this macro, you also need to +# download the ax_cxx_compile_stdcxx.m4 file. +# +# LICENSE +# +# Copyright (c) 2008 Benjamin Kosnik <bkoz@redhat.com> +# Copyright (c) 2012 Zack Weinberg <zackw@panix.com> +# Copyright (c) 2013 Roy Stogner <roystgnr@ices.utexas.edu> +# Copyright (c) 2014, 2015 Google Inc.; contributed by Alexey Sokolov <sokolov@google.com> +# Copyright (c) 2015 Paul Norman <penorman@mac.com> +# Copyright (c) 2015 Moritz Klammler <moritz@klammler.eu> +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 18 + +AX_REQUIRE_DEFINED([AX_CXX_COMPILE_STDCXX]) +AC_DEFUN([AX_CXX_COMPILE_STDCXX_11], [AX_CXX_COMPILE_STDCXX([11], [$1], [$2])]) diff --git a/v2.6/toolkit/m4/ax_cxx_compile_stdcxx_17.m4 b/v2.6/toolkit/m4/ax_cxx_compile_stdcxx_17.m4 new file mode 100644 index 0000000000000000000000000000000000000000..a6834171739bed1a8974fe48999a9c91104cab34 --- /dev/null +++ b/v2.6/toolkit/m4/ax_cxx_compile_stdcxx_17.m4 @@ -0,0 +1,35 @@ +# ============================================================================= +# https://www.gnu.org/software/autoconf-archive/ax_cxx_compile_stdcxx_17.html +# ============================================================================= +# +# SYNOPSIS +# +# AX_CXX_COMPILE_STDCXX_17([ext|noext], [mandatory|optional]) +# +# DESCRIPTION +# +# Check for baseline language coverage in the compiler for the C++17 +# standard; if necessary, add switches to CXX and CXXCPP to enable +# support. +# +# This macro is a convenience alias for calling the AX_CXX_COMPILE_STDCXX +# macro with the version set to C++17. The two optional arguments are +# forwarded literally as the second and third argument respectively. +# Please see the documentation for the AX_CXX_COMPILE_STDCXX macro for +# more information. If you want to use this macro, you also need to +# download the ax_cxx_compile_stdcxx.m4 file. +# +# LICENSE +# +# Copyright (c) 2015 Moritz Klammler <moritz@klammler.eu> +# Copyright (c) 2016 Krzesimir Nowak <qdlacz@gmail.com> +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 2 + +AX_REQUIRE_DEFINED([AX_CXX_COMPILE_STDCXX]) +AC_DEFUN([AX_CXX_COMPILE_STDCXX_17], [AX_CXX_COMPILE_STDCXX([17], [$1], [$2])]) diff --git a/v2.6/toolkit/m4/ax_prog_doxygen.m4 b/v2.6/toolkit/m4/ax_prog_doxygen.m4 new file mode 100644 index 0000000000000000000000000000000000000000..9a34322cee78c1dbe33186ac2c242413eb2f6677 --- /dev/null +++ b/v2.6/toolkit/m4/ax_prog_doxygen.m4 @@ -0,0 +1,586 @@ +# =========================================================================== +# https://www.gnu.org/software/autoconf-archive/ax_prog_doxygen.html +# =========================================================================== +# +# SYNOPSIS +# +# DX_INIT_DOXYGEN(PROJECT-NAME, [DOXYFILE-PATH], [OUTPUT-DIR], ...) +# DX_DOXYGEN_FEATURE(ON|OFF) +# DX_DOT_FEATURE(ON|OFF) +# DX_HTML_FEATURE(ON|OFF) +# DX_CHM_FEATURE(ON|OFF) +# DX_CHI_FEATURE(ON|OFF) +# DX_MAN_FEATURE(ON|OFF) +# DX_RTF_FEATURE(ON|OFF) +# DX_XML_FEATURE(ON|OFF) +# DX_PDF_FEATURE(ON|OFF) +# DX_PS_FEATURE(ON|OFF) +# +# DESCRIPTION +# +# The DX_*_FEATURE macros control the default setting for the given +# Doxygen feature. Supported features are 'DOXYGEN' itself, 'DOT' for +# generating graphics, 'HTML' for plain HTML, 'CHM' for compressed HTML +# help (for MS users), 'CHI' for generating a separate .chi file by the +# .chm file, and 'MAN', 'RTF', 'XML', 'PDF' and 'PS' for the appropriate +# output formats. The environment variable DOXYGEN_PAPER_SIZE may be +# specified to override the default 'a4wide' paper size. +# +# By default, HTML, PDF and PS documentation is generated as this seems to +# be the most popular and portable combination. MAN pages created by +# Doxygen are usually problematic, though by picking an appropriate subset +# and doing some massaging they might be better than nothing. CHM and RTF +# are specific for MS (note that you can't generate both HTML and CHM at +# the same time). The XML is rather useless unless you apply specialized +# post-processing to it. +# +# The macros mainly control the default state of the feature. The use can +# override the default by specifying --enable or --disable. The macros +# ensure that contradictory flags are not given (e.g., +# --enable-doxygen-html and --enable-doxygen-chm, +# --enable-doxygen-anything with --disable-doxygen, etc.) Finally, each +# feature will be automatically disabled (with a warning) if the required +# programs are missing. +# +# Once all the feature defaults have been specified, call DX_INIT_DOXYGEN +# with the following parameters: a one-word name for the project for use +# as a filename base etc., an optional configuration file name (the +# default is '$(srcdir)/Doxyfile', the same as Doxygen's default), and an +# optional output directory name (the default is 'doxygen-doc'). To run +# doxygen multiple times for different configuration files and output +# directories provide more parameters: the second, forth, sixth, etc +# parameter are configuration file names and the third, fifth, seventh, +# etc parameter are output directories. No checking is done to catch +# duplicates. +# +# Automake Support +# +# The DX_RULES substitution can be used to add all needed rules to the +# Makefile. Note that this is a substitution without being a variable: +# only the @DX_RULES@ syntax will work. +# +# The provided targets are: +# +# doxygen-doc: Generate all doxygen documentation. +# +# doxygen-run: Run doxygen, which will generate some of the +# documentation (HTML, CHM, CHI, MAN, RTF, XML) +# but will not do the post processing required +# for the rest of it (PS, PDF). +# +# doxygen-ps: Generate doxygen PostScript documentation. +# +# doxygen-pdf: Generate doxygen PDF documentation. +# +# Note that by default these are not integrated into the automake targets. +# If doxygen is used to generate man pages, you can achieve this +# integration by setting man3_MANS to the list of man pages generated and +# then adding the dependency: +# +# $(man3_MANS): doxygen-doc +# +# This will cause make to run doxygen and generate all the documentation. +# +# The following variable is intended for use in Makefile.am: +# +# DX_CLEANFILES = everything to clean. +# +# Then add this variable to MOSTLYCLEANFILES. +# +# LICENSE +# +# Copyright (c) 2009 Oren Ben-Kiki <oren@ben-kiki.org> +# Copyright (c) 2015 Olaf Mandel <olaf@mandel.name> +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 24 + +## ----------## +## Defaults. ## +## ----------## + +DX_ENV="" +AC_DEFUN([DX_FEATURE_doc], OFF) +AC_DEFUN([DX_FEATURE_dot], OFF) +AC_DEFUN([DX_FEATURE_man], OFF) +AC_DEFUN([DX_FEATURE_html], OFF) +AC_DEFUN([DX_FEATURE_chm], OFF) +AC_DEFUN([DX_FEATURE_chi], OFF) +AC_DEFUN([DX_FEATURE_rtf], OFF) +AC_DEFUN([DX_FEATURE_xml], OFF) +AC_DEFUN([DX_FEATURE_pdf], OFF) +AC_DEFUN([DX_FEATURE_ps], OFF) + +## --------------- ## +## Private macros. ## +## --------------- ## + +# DX_ENV_APPEND(VARIABLE, VALUE) +# ------------------------------ +# Append VARIABLE="VALUE" to DX_ENV for invoking doxygen and add it +# as a substitution (but not a Makefile variable). The substitution +# is skipped if the variable name is VERSION. +AC_DEFUN([DX_ENV_APPEND], +[AC_SUBST([DX_ENV], ["$DX_ENV $1='$2'"])dnl +m4_if([$1], [VERSION], [], [AC_SUBST([$1], [$2])dnl +AM_SUBST_NOTMAKE([$1])])dnl +]) + +# DX_DIRNAME_EXPR +# --------------- +# Expand into a shell expression prints the directory part of a path. +AC_DEFUN([DX_DIRNAME_EXPR], + [[expr ".$1" : '\(\.\)[^/]*$' \| "x$1" : 'x\(.*\)/[^/]*$']]) + +# DX_IF_FEATURE(FEATURE, IF-ON, IF-OFF) +# ------------------------------------- +# Expands according to the M4 (static) status of the feature. +AC_DEFUN([DX_IF_FEATURE], [ifelse(DX_FEATURE_$1, ON, [$2], [$3])]) + +# DX_REQUIRE_PROG(VARIABLE, PROGRAM) +# ---------------------------------- +# Require the specified program to be found for the DX_CURRENT_FEATURE to work. +AC_DEFUN([DX_REQUIRE_PROG], [ +AC_PATH_TOOL([$1], [$2]) +if test "$DX_FLAG_[]DX_CURRENT_FEATURE$$1" = 1; then + AC_MSG_WARN([$2 not found - will not DX_CURRENT_DESCRIPTION]) + AC_SUBST(DX_FLAG_[]DX_CURRENT_FEATURE, 0) +fi +]) + +# DX_TEST_FEATURE(FEATURE) +# ------------------------ +# Expand to a shell expression testing whether the feature is active. +AC_DEFUN([DX_TEST_FEATURE], [test "$DX_FLAG_$1" = 1]) + +# DX_CHECK_DEPEND(REQUIRED_FEATURE, REQUIRED_STATE) +# ------------------------------------------------- +# Verify that a required features has the right state before trying to turn on +# the DX_CURRENT_FEATURE. +AC_DEFUN([DX_CHECK_DEPEND], [ +test "$DX_FLAG_$1" = "$2" \ +|| AC_MSG_ERROR([doxygen-DX_CURRENT_FEATURE ifelse([$2], 1, + requires, contradicts) doxygen-$1]) +]) + +# DX_CLEAR_DEPEND(FEATURE, REQUIRED_FEATURE, REQUIRED_STATE) +# ---------------------------------------------------------- +# Turn off the DX_CURRENT_FEATURE if the required feature is off. +AC_DEFUN([DX_CLEAR_DEPEND], [ +test "$DX_FLAG_$1" = "$2" || AC_SUBST(DX_FLAG_[]DX_CURRENT_FEATURE, 0) +]) + +# DX_FEATURE_ARG(FEATURE, DESCRIPTION, +# CHECK_DEPEND, CLEAR_DEPEND, +# REQUIRE, DO-IF-ON, DO-IF-OFF) +# -------------------------------------------- +# Parse the command-line option controlling a feature. CHECK_DEPEND is called +# if the user explicitly turns the feature on (and invokes DX_CHECK_DEPEND), +# otherwise CLEAR_DEPEND is called to turn off the default state if a required +# feature is disabled (using DX_CLEAR_DEPEND). REQUIRE performs additional +# requirement tests (DX_REQUIRE_PROG). Finally, an automake flag is set and +# DO-IF-ON or DO-IF-OFF are called according to the final state of the feature. +AC_DEFUN([DX_ARG_ABLE], [ + AC_DEFUN([DX_CURRENT_FEATURE], [$1]) + AC_DEFUN([DX_CURRENT_DESCRIPTION], [$2]) + AC_ARG_ENABLE(doxygen-$1, + [AS_HELP_STRING(DX_IF_FEATURE([$1], [--disable-doxygen-$1], + [--enable-doxygen-$1]), + DX_IF_FEATURE([$1], [don't $2], [$2]))], + [ +case "$enableval" in +#( +y|Y|yes|Yes|YES) + AC_SUBST([DX_FLAG_$1], 1) + $3 +;; #( +n|N|no|No|NO) + AC_SUBST([DX_FLAG_$1], 0) +;; #( +*) + AC_MSG_ERROR([invalid value '$enableval' given to doxygen-$1]) +;; +esac +], [ +AC_SUBST([DX_FLAG_$1], [DX_IF_FEATURE([$1], 1, 0)]) +$4 +]) +if DX_TEST_FEATURE([$1]); then + $5 + : +fi +if DX_TEST_FEATURE([$1]); then + $6 + : +else + $7 + : +fi +]) + +## -------------- ## +## Public macros. ## +## -------------- ## + +# DX_XXX_FEATURE(DEFAULT_STATE) +# ----------------------------- +AC_DEFUN([DX_DOXYGEN_FEATURE], [AC_DEFUN([DX_FEATURE_doc], [$1])]) +AC_DEFUN([DX_DOT_FEATURE], [AC_DEFUN([DX_FEATURE_dot], [$1])]) +AC_DEFUN([DX_MAN_FEATURE], [AC_DEFUN([DX_FEATURE_man], [$1])]) +AC_DEFUN([DX_HTML_FEATURE], [AC_DEFUN([DX_FEATURE_html], [$1])]) +AC_DEFUN([DX_CHM_FEATURE], [AC_DEFUN([DX_FEATURE_chm], [$1])]) +AC_DEFUN([DX_CHI_FEATURE], [AC_DEFUN([DX_FEATURE_chi], [$1])]) +AC_DEFUN([DX_RTF_FEATURE], [AC_DEFUN([DX_FEATURE_rtf], [$1])]) +AC_DEFUN([DX_XML_FEATURE], [AC_DEFUN([DX_FEATURE_xml], [$1])]) +AC_DEFUN([DX_XML_FEATURE], [AC_DEFUN([DX_FEATURE_xml], [$1])]) +AC_DEFUN([DX_PDF_FEATURE], [AC_DEFUN([DX_FEATURE_pdf], [$1])]) +AC_DEFUN([DX_PS_FEATURE], [AC_DEFUN([DX_FEATURE_ps], [$1])]) + +# DX_INIT_DOXYGEN(PROJECT, [CONFIG-FILE], [OUTPUT-DOC-DIR], ...) +# -------------------------------------------------------------- +# PROJECT also serves as the base name for the documentation files. +# The default CONFIG-FILE is "$(srcdir)/Doxyfile" and OUTPUT-DOC-DIR is +# "doxygen-doc". +# More arguments are interpreted as interleaved CONFIG-FILE and +# OUTPUT-DOC-DIR values. +AC_DEFUN([DX_INIT_DOXYGEN], [ + +# Files: +AC_SUBST([DX_PROJECT], [$1]) +AC_SUBST([DX_CONFIG], ['ifelse([$2], [], [$(srcdir)/Doxyfile], [$2])']) +AC_SUBST([DX_DOCDIR], ['ifelse([$3], [], [doxygen-doc], [$3])']) +m4_if(m4_eval(3 < m4_count($@)), 1, [m4_for([DX_i], 4, m4_count($@), 2, + [AC_SUBST([DX_CONFIG]m4_eval(DX_i[/2]), + 'm4_default_nblank_quoted(m4_argn(DX_i, $@), + [$(srcdir)/Doxyfile])')])])dnl +m4_if(m4_eval(3 < m4_count($@)), 1, [m4_for([DX_i], 5, m4_count($@,), 2, + [AC_SUBST([DX_DOCDIR]m4_eval([(]DX_i[-1)/2]), + 'm4_default_nblank_quoted(m4_argn(DX_i, $@), + [doxygen-doc])')])])dnl +m4_define([DX_loop], m4_dquote(m4_if(m4_eval(3 < m4_count($@)), 1, + [m4_for([DX_i], 4, m4_count($@), 2, [, m4_eval(DX_i[/2])])], + [])))dnl + +# Environment variables used inside doxygen.cfg: +DX_ENV_APPEND(SRCDIR, $srcdir) +DX_ENV_APPEND(PROJECT, $DX_PROJECT) +DX_ENV_APPEND(VERSION, $PACKAGE_VERSION) + +# Doxygen itself: +DX_ARG_ABLE(doc, [generate any doxygen documentation], + [], + [], + [DX_REQUIRE_PROG([DX_DOXYGEN], doxygen) + DX_REQUIRE_PROG([DX_PERL], perl)], + [DX_ENV_APPEND(PERL_PATH, $DX_PERL)]) + +# Dot for graphics: +DX_ARG_ABLE(dot, [generate graphics for doxygen documentation], + [DX_CHECK_DEPEND(doc, 1)], + [DX_CLEAR_DEPEND(doc, 1)], + [DX_REQUIRE_PROG([DX_DOT], dot)], + [DX_ENV_APPEND(HAVE_DOT, YES) + DX_ENV_APPEND(DOT_PATH, [`DX_DIRNAME_EXPR($DX_DOT)`])], + [DX_ENV_APPEND(HAVE_DOT, NO)]) + +# Man pages generation: +DX_ARG_ABLE(man, [generate doxygen manual pages], + [DX_CHECK_DEPEND(doc, 1)], + [DX_CLEAR_DEPEND(doc, 1)], + [], + [DX_ENV_APPEND(GENERATE_MAN, YES)], + [DX_ENV_APPEND(GENERATE_MAN, NO)]) + +# RTF file generation: +DX_ARG_ABLE(rtf, [generate doxygen RTF documentation], + [DX_CHECK_DEPEND(doc, 1)], + [DX_CLEAR_DEPEND(doc, 1)], + [], + [DX_ENV_APPEND(GENERATE_RTF, YES)], + [DX_ENV_APPEND(GENERATE_RTF, NO)]) + +# XML file generation: +DX_ARG_ABLE(xml, [generate doxygen XML documentation], + [DX_CHECK_DEPEND(doc, 1)], + [DX_CLEAR_DEPEND(doc, 1)], + [], + [DX_ENV_APPEND(GENERATE_XML, YES)], + [DX_ENV_APPEND(GENERATE_XML, NO)]) + +# (Compressed) HTML help generation: +DX_ARG_ABLE(chm, [generate doxygen compressed HTML help documentation], + [DX_CHECK_DEPEND(doc, 1)], + [DX_CLEAR_DEPEND(doc, 1)], + [DX_REQUIRE_PROG([DX_HHC], hhc)], + [DX_ENV_APPEND(HHC_PATH, $DX_HHC) + DX_ENV_APPEND(GENERATE_HTML, YES) + DX_ENV_APPEND(GENERATE_HTMLHELP, YES)], + [DX_ENV_APPEND(GENERATE_HTMLHELP, NO)]) + +# Separate CHI file generation. +DX_ARG_ABLE(chi, [generate doxygen separate compressed HTML help index file], + [DX_CHECK_DEPEND(chm, 1)], + [DX_CLEAR_DEPEND(chm, 1)], + [], + [DX_ENV_APPEND(GENERATE_CHI, YES)], + [DX_ENV_APPEND(GENERATE_CHI, NO)]) + +# Plain HTML pages generation: +DX_ARG_ABLE(html, [generate doxygen plain HTML documentation], + [DX_CHECK_DEPEND(doc, 1) DX_CHECK_DEPEND(chm, 0)], + [DX_CLEAR_DEPEND(doc, 1) DX_CLEAR_DEPEND(chm, 0)], + [], + [DX_ENV_APPEND(GENERATE_HTML, YES)], + [DX_TEST_FEATURE(chm) || DX_ENV_APPEND(GENERATE_HTML, NO)]) + +# PostScript file generation: +DX_ARG_ABLE(ps, [generate doxygen PostScript documentation], + [DX_CHECK_DEPEND(doc, 1)], + [DX_CLEAR_DEPEND(doc, 1)], + [DX_REQUIRE_PROG([DX_LATEX], latex) + DX_REQUIRE_PROG([DX_MAKEINDEX], makeindex) + DX_REQUIRE_PROG([DX_DVIPS], dvips) + DX_REQUIRE_PROG([DX_EGREP], egrep)]) + +# PDF file generation: +DX_ARG_ABLE(pdf, [generate doxygen PDF documentation], + [DX_CHECK_DEPEND(doc, 1)], + [DX_CLEAR_DEPEND(doc, 1)], + [DX_REQUIRE_PROG([DX_PDFLATEX], pdflatex) + DX_REQUIRE_PROG([DX_MAKEINDEX], makeindex) + DX_REQUIRE_PROG([DX_EGREP], egrep)]) + +# LaTeX generation for PS and/or PDF: +if DX_TEST_FEATURE(ps) || DX_TEST_FEATURE(pdf); then + DX_ENV_APPEND(GENERATE_LATEX, YES) +else + DX_ENV_APPEND(GENERATE_LATEX, NO) +fi + +# Paper size for PS and/or PDF: +AC_ARG_VAR(DOXYGEN_PAPER_SIZE, + [a4wide (default), a4, letter, legal or executive]) +case "$DOXYGEN_PAPER_SIZE" in +#( +"") + AC_SUBST(DOXYGEN_PAPER_SIZE, "") +;; #( +a4wide|a4|letter|legal|executive) + DX_ENV_APPEND(PAPER_SIZE, $DOXYGEN_PAPER_SIZE) +;; #( +*) + AC_MSG_ERROR([unknown DOXYGEN_PAPER_SIZE='$DOXYGEN_PAPER_SIZE']) +;; +esac + +# Rules: +AS_IF([[test $DX_FLAG_html -eq 1]], +[[DX_SNIPPET_html="## ------------------------------- ## +## Rules specific for HTML output. ## +## ------------------------------- ## + +DX_CLEAN_HTML = \$(DX_DOCDIR)/html]dnl +m4_foreach([DX_i], [m4_shift(DX_loop)], [[\\ + \$(DX_DOCDIR]DX_i[)/html]])[ + +"]], +[[DX_SNIPPET_html=""]]) +AS_IF([[test $DX_FLAG_chi -eq 1]], +[[DX_SNIPPET_chi=" +DX_CLEAN_CHI = \$(DX_DOCDIR)/\$(PACKAGE).chi]dnl +m4_foreach([DX_i], [m4_shift(DX_loop)], [[\\ + \$(DX_DOCDIR]DX_i[)/\$(PACKAGE).chi]])["]], +[[DX_SNIPPET_chi=""]]) +AS_IF([[test $DX_FLAG_chm -eq 1]], +[[DX_SNIPPET_chm="## ------------------------------ ## +## Rules specific for CHM output. ## +## ------------------------------ ## + +DX_CLEAN_CHM = \$(DX_DOCDIR)/chm]dnl +m4_foreach([DX_i], [m4_shift(DX_loop)], [[\\ + \$(DX_DOCDIR]DX_i[)/chm]])[\ +${DX_SNIPPET_chi} + +"]], +[[DX_SNIPPET_chm=""]]) +AS_IF([[test $DX_FLAG_man -eq 1]], +[[DX_SNIPPET_man="## ------------------------------ ## +## Rules specific for MAN output. ## +## ------------------------------ ## + +DX_CLEAN_MAN = \$(DX_DOCDIR)/man]dnl +m4_foreach([DX_i], [m4_shift(DX_loop)], [[\\ + \$(DX_DOCDIR]DX_i[)/man]])[ + +"]], +[[DX_SNIPPET_man=""]]) +AS_IF([[test $DX_FLAG_rtf -eq 1]], +[[DX_SNIPPET_rtf="## ------------------------------ ## +## Rules specific for RTF output. ## +## ------------------------------ ## + +DX_CLEAN_RTF = \$(DX_DOCDIR)/rtf]dnl +m4_foreach([DX_i], [m4_shift(DX_loop)], [[\\ + \$(DX_DOCDIR]DX_i[)/rtf]])[ + +"]], +[[DX_SNIPPET_rtf=""]]) +AS_IF([[test $DX_FLAG_xml -eq 1]], +[[DX_SNIPPET_xml="## ------------------------------ ## +## Rules specific for XML output. ## +## ------------------------------ ## + +DX_CLEAN_XML = \$(DX_DOCDIR)/xml]dnl +m4_foreach([DX_i], [m4_shift(DX_loop)], [[\\ + \$(DX_DOCDIR]DX_i[)/xml]])[ + +"]], +[[DX_SNIPPET_xml=""]]) +AS_IF([[test $DX_FLAG_ps -eq 1]], +[[DX_SNIPPET_ps="## ----------------------------- ## +## Rules specific for PS output. ## +## ----------------------------- ## + +DX_CLEAN_PS = \$(DX_DOCDIR)/\$(PACKAGE).ps]dnl +m4_foreach([DX_i], [m4_shift(DX_loop)], [[\\ + \$(DX_DOCDIR]DX_i[)/\$(PACKAGE).ps]])[ + +DX_PS_GOAL = doxygen-ps + +doxygen-ps: \$(DX_CLEAN_PS) + +]m4_foreach([DX_i], [DX_loop], +[[\$(DX_DOCDIR]DX_i[)/\$(PACKAGE).ps: \$(DX_DOCDIR]DX_i[)/\$(PACKAGE).tag + \$(DX_V_LATEX)cd \$(DX_DOCDIR]DX_i[)/latex; \\ + rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \\ + \$(DX_LATEX) refman.tex; \\ + \$(DX_MAKEINDEX) refman.idx; \\ + \$(DX_LATEX) refman.tex; \\ + countdown=5; \\ + while \$(DX_EGREP) 'Rerun (LaTeX|to get cross-references right)' \\ + refman.log > /dev/null 2>&1 \\ + && test \$\$countdown -gt 0; do \\ + \$(DX_LATEX) refman.tex; \\ + countdown=\`expr \$\$countdown - 1\`; \\ + done; \\ + \$(DX_DVIPS) -o ../\$(PACKAGE).ps refman.dvi + +]])["]], +[[DX_SNIPPET_ps=""]]) +AS_IF([[test $DX_FLAG_pdf -eq 1]], +[[DX_SNIPPET_pdf="## ------------------------------ ## +## Rules specific for PDF output. ## +## ------------------------------ ## + +DX_CLEAN_PDF = \$(DX_DOCDIR)/\$(PACKAGE).pdf]dnl +m4_foreach([DX_i], [m4_shift(DX_loop)], [[\\ + \$(DX_DOCDIR]DX_i[)/\$(PACKAGE).pdf]])[ + +DX_PDF_GOAL = doxygen-pdf + +doxygen-pdf: \$(DX_CLEAN_PDF) + +]m4_foreach([DX_i], [DX_loop], +[[\$(DX_DOCDIR]DX_i[)/\$(PACKAGE).pdf: \$(DX_DOCDIR]DX_i[)/\$(PACKAGE).tag + \$(DX_V_LATEX)cd \$(DX_DOCDIR]DX_i[)/latex; \\ + rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \\ + \$(DX_PDFLATEX) refman.tex; \\ + \$(DX_MAKEINDEX) refman.idx; \\ + \$(DX_PDFLATEX) refman.tex; \\ + countdown=5; \\ + while \$(DX_EGREP) 'Rerun (LaTeX|to get cross-references right)' \\ + refman.log > /dev/null 2>&1 \\ + && test \$\$countdown -gt 0; do \\ + \$(DX_PDFLATEX) refman.tex; \\ + countdown=\`expr \$\$countdown - 1\`; \\ + done; \\ + mv refman.pdf ../\$(PACKAGE).pdf + +]])["]], +[[DX_SNIPPET_pdf=""]]) +AS_IF([[test $DX_FLAG_ps -eq 1 -o $DX_FLAG_pdf -eq 1]], +[[DX_SNIPPET_latex="## ------------------------------------------------- ## +## Rules specific for LaTeX (shared for PS and PDF). ## +## ------------------------------------------------- ## + +DX_V_LATEX = \$(_DX_v_LATEX_\$(V)) +_DX_v_LATEX_ = \$(_DX_v_LATEX_\$(AM_DEFAULT_VERBOSITY)) +_DX_v_LATEX_0 = @echo \" LATEX \" \$][@; + +DX_CLEAN_LATEX = \$(DX_DOCDIR)/latex]dnl +m4_foreach([DX_i], [m4_shift(DX_loop)], [[\\ + \$(DX_DOCDIR]DX_i[)/latex]])[ + +"]], +[[DX_SNIPPET_latex=""]]) + +AS_IF([[test $DX_FLAG_doc -eq 1]], +[[DX_SNIPPET_doc="## --------------------------------- ## +## Format-independent Doxygen rules. ## +## --------------------------------- ## + +${DX_SNIPPET_html}\ +${DX_SNIPPET_chm}\ +${DX_SNIPPET_man}\ +${DX_SNIPPET_rtf}\ +${DX_SNIPPET_xml}\ +${DX_SNIPPET_ps}\ +${DX_SNIPPET_pdf}\ +${DX_SNIPPET_latex}\ +DX_V_DXGEN = \$(_DX_v_DXGEN_\$(V)) +_DX_v_DXGEN_ = \$(_DX_v_DXGEN_\$(AM_DEFAULT_VERBOSITY)) +_DX_v_DXGEN_0 = @echo \" DXGEN \" \$<; + +.PHONY: doxygen-run doxygen-doc \$(DX_PS_GOAL) \$(DX_PDF_GOAL) + +.INTERMEDIATE: doxygen-run \$(DX_PS_GOAL) \$(DX_PDF_GOAL) + +doxygen-run:]m4_foreach([DX_i], [DX_loop], + [[ \$(DX_DOCDIR]DX_i[)/\$(PACKAGE).tag]])[ + +doxygen-doc: doxygen-run \$(DX_PS_GOAL) \$(DX_PDF_GOAL) + +]m4_foreach([DX_i], [DX_loop], +[[\$(DX_DOCDIR]DX_i[)/\$(PACKAGE).tag: \$(DX_CONFIG]DX_i[) \$(pkginclude_HEADERS) + \$(A""M_V_at)rm -rf \$(DX_DOCDIR]DX_i[) + \$(DX_V_DXGEN)\$(DX_ENV) DOCDIR=\$(DX_DOCDIR]DX_i[) \$(DX_DOXYGEN) \$(DX_CONFIG]DX_i[) + \$(A""M_V_at)echo Timestamp >\$][@ + +]])dnl +[DX_CLEANFILES = \\] +m4_foreach([DX_i], [DX_loop], +[[ \$(DX_DOCDIR]DX_i[)/doxygen_sqlite3.db \\ + \$(DX_DOCDIR]DX_i[)/\$(PACKAGE).tag \\ +]])dnl +[ -r \\ + \$(DX_CLEAN_HTML) \\ + \$(DX_CLEAN_CHM) \\ + \$(DX_CLEAN_CHI) \\ + \$(DX_CLEAN_MAN) \\ + \$(DX_CLEAN_RTF) \\ + \$(DX_CLEAN_XML) \\ + \$(DX_CLEAN_PS) \\ + \$(DX_CLEAN_PDF) \\ + \$(DX_CLEAN_LATEX)"]], +[[DX_SNIPPET_doc=""]]) +AC_SUBST([DX_RULES], +["${DX_SNIPPET_doc}"])dnl +AM_SUBST_NOTMAKE([DX_RULES]) + +#For debugging: +#echo DX_FLAG_doc=$DX_FLAG_doc +#echo DX_FLAG_dot=$DX_FLAG_dot +#echo DX_FLAG_man=$DX_FLAG_man +#echo DX_FLAG_html=$DX_FLAG_html +#echo DX_FLAG_chm=$DX_FLAG_chm +#echo DX_FLAG_chi=$DX_FLAG_chi +#echo DX_FLAG_rtf=$DX_FLAG_rtf +#echo DX_FLAG_xml=$DX_FLAG_xml +#echo DX_FLAG_pdf=$DX_FLAG_pdf +#echo DX_FLAG_ps=$DX_FLAG_ps +#echo DX_ENV=$DX_ENV +]) diff --git a/v2.6/toolkit/m4/ax_python_devel.m4 b/v2.6/toolkit/m4/ax_python_devel.m4 new file mode 100644 index 0000000000000000000000000000000000000000..44dbd83e0053f9e23cfd782a2c016d246178de79 --- /dev/null +++ b/v2.6/toolkit/m4/ax_python_devel.m4 @@ -0,0 +1,327 @@ +# =========================================================================== +# https://www.gnu.org/software/autoconf-archive/ax_python_devel.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_PYTHON_DEVEL([version]) +# +# DESCRIPTION +# +# Note: Defines as a precious variable "PYTHON_VERSION". Don't override it +# in your configure.ac. +# +# This macro checks for Python and tries to get the include path to +# 'Python.h'. It provides the $(PYTHON_CPPFLAGS) and $(PYTHON_LIBS) output +# variables. It also exports $(PYTHON_EXTRA_LIBS) and +# $(PYTHON_EXTRA_LDFLAGS) for embedding Python in your code. +# +# You can search for some particular version of Python by passing a +# parameter to this macro, for example ">= '2.3.1'", or "== '2.4'". Please +# note that you *have* to pass also an operator along with the version to +# match, and pay special attention to the single quotes surrounding the +# version number. Don't use "PYTHON_VERSION" for this: that environment +# variable is declared as precious and thus reserved for the end-user. +# +# This macro should work for all versions of Python >= 2.1.0. As an end +# user, you can disable the check for the python version by setting the +# PYTHON_NOVERSIONCHECK environment variable to something else than the +# empty string. +# +# If you need to use this macro for an older Python version, please +# contact the authors. We're always open for feedback. +# +# LICENSE +# +# Copyright (c) 2009 Sebastian Huber <sebastian-huber@web.de> +# Copyright (c) 2009 Alan W. Irwin +# Copyright (c) 2009 Rafael Laboissiere <rafael@laboissiere.net> +# Copyright (c) 2009 Andrew Collier +# Copyright (c) 2009 Matteo Settenvini <matteo@member.fsf.org> +# Copyright (c) 2009 Horst Knorr <hk_classes@knoda.org> +# Copyright (c) 2013 Daniel Mullner <muellner@math.stanford.edu> +# +# This program is free software: you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation, either version 3 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see <https://www.gnu.org/licenses/>. +# +# As a special exception, the respective Autoconf Macro's copyright owner +# gives unlimited permission to copy, distribute and modify the configure +# scripts that are the output of Autoconf when processing the Macro. You +# need not follow the terms of the GNU General Public License when using +# or distributing such scripts, even though portions of the text of the +# Macro appear in them. The GNU General Public License (GPL) does govern +# all other use of the material that constitutes the Autoconf Macro. +# +# This special exception to the GPL applies to versions of the Autoconf +# Macro released by the Autoconf Archive. When you make and distribute a +# modified version of the Autoconf Macro, you may extend this special +# exception to the GPL to apply to your modified version as well. + +#serial 21 + +AU_ALIAS([AC_PYTHON_DEVEL], [AX_PYTHON_DEVEL]) +AC_DEFUN([AX_PYTHON_DEVEL],[ + # + # Allow the use of a (user set) custom python version + # + AC_ARG_VAR([PYTHON_VERSION],[The installed Python + version to use, for example '2.3'. This string + will be appended to the Python interpreter + canonical name.]) + + AC_PATH_PROG([PYTHON],[python[$PYTHON_VERSION]]) + if test -z "$PYTHON"; then + AC_MSG_ERROR([Cannot find python$PYTHON_VERSION in your system path]) + PYTHON_VERSION="" + fi + + # + # Check for a version of Python >= 2.1.0 + # + AC_MSG_CHECKING([for a version of Python >= '2.1.0']) + ac_supports_python_ver=`$PYTHON -c "import sys; \ + ver = sys.version.split ()[[0]]; \ + print (ver >= '2.1.0')"` + if test "$ac_supports_python_ver" != "True"; then + if test -z "$PYTHON_NOVERSIONCHECK"; then + AC_MSG_RESULT([no]) + AC_MSG_FAILURE([ +This version of the AC@&t@_PYTHON_DEVEL macro +doesn't work properly with versions of Python before +2.1.0. You may need to re-run configure, setting the +variables PYTHON_CPPFLAGS, PYTHON_LIBS, PYTHON_SITE_PKG, +PYTHON_EXTRA_LIBS and PYTHON_EXTRA_LDFLAGS by hand. +Moreover, to disable this check, set PYTHON_NOVERSIONCHECK +to something else than an empty string. +]) + else + AC_MSG_RESULT([skip at user request]) + fi + else + AC_MSG_RESULT([yes]) + fi + + # + # if the macro parameter ``version'' is set, honour it + # + if test -n "$1"; then + AC_MSG_CHECKING([for a version of Python $1]) + ac_supports_python_ver=`$PYTHON -c "import sys; \ + ver = sys.version.split ()[[0]]; \ + print (ver $1)"` + if test "$ac_supports_python_ver" = "True"; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + AC_MSG_ERROR([this package requires Python $1. +If you have it installed, but it isn't the default Python +interpreter in your system path, please pass the PYTHON_VERSION +variable to configure. See ``configure --help'' for reference. +]) + PYTHON_VERSION="" + fi + fi + + # + # Check if you have distutils, else fail + # + AC_MSG_CHECKING([for the distutils Python package]) + ac_distutils_result=`$PYTHON -c "import distutils" 2>&1` + if test $? -eq 0; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + AC_MSG_ERROR([cannot import Python module "distutils". +Please check your Python installation. The error was: +$ac_distutils_result]) + PYTHON_VERSION="" + fi + + # + # Check for Python include path + # + AC_MSG_CHECKING([for Python include path]) + if test -z "$PYTHON_CPPFLAGS"; then + python_path=`$PYTHON -c "import distutils.sysconfig; \ + print (distutils.sysconfig.get_python_inc ());"` + plat_python_path=`$PYTHON -c "import distutils.sysconfig; \ + print (distutils.sysconfig.get_python_inc (plat_specific=1));"` + if test -n "${python_path}"; then + if test "${plat_python_path}" != "${python_path}"; then + python_path="-I$python_path -I$plat_python_path" + else + python_path="-I$python_path" + fi + fi + PYTHON_CPPFLAGS=$python_path + fi + AC_MSG_RESULT([$PYTHON_CPPFLAGS]) + AC_SUBST([PYTHON_CPPFLAGS]) + + # + # Check for Python library path + # + AC_MSG_CHECKING([for Python library path]) + if test -z "$PYTHON_LIBS"; then + # (makes two attempts to ensure we've got a version number + # from the interpreter) + ac_python_version=`cat<<EOD | $PYTHON - + +# join all versioning strings, on some systems +# major/minor numbers could be in different list elements +from distutils.sysconfig import * +e = get_config_var('VERSION') +if e is not None: + print(e) +EOD` + + if test -z "$ac_python_version"; then + if test -n "$PYTHON_VERSION"; then + ac_python_version=$PYTHON_VERSION + else + ac_python_version=`$PYTHON -c "import sys; \ + print (sys.version[[:3]])"` + fi + fi + + # Make the versioning information available to the compiler + AC_DEFINE_UNQUOTED([HAVE_PYTHON], ["$ac_python_version"], + [If available, contains the Python version number currently in use.]) + + # First, the library directory: + ac_python_libdir=`cat<<EOD | $PYTHON - + +# There should be only one +import distutils.sysconfig +e = distutils.sysconfig.get_config_var('LIBDIR') +if e is not None: + print (e) +EOD` + + # Now, for the library: + ac_python_library=`cat<<EOD | $PYTHON - + +import distutils.sysconfig +c = distutils.sysconfig.get_config_vars() +if 'LDVERSION' in c: + print ('python'+c[['LDVERSION']]) +else: + print ('python'+c[['VERSION']]) +EOD` + + # This small piece shamelessly adapted from PostgreSQL python macro; + # credits goes to momjian, I think. I'd like to put the right name + # in the credits, if someone can point me in the right direction... ? + # + if test -n "$ac_python_libdir" -a -n "$ac_python_library" + then + # use the official shared library + ac_python_library=`echo "$ac_python_library" | sed "s/^lib//"` + PYTHON_LIBS="-L$ac_python_libdir -l$ac_python_library" + else + # old way: use libpython from python_configdir + ac_python_libdir=`$PYTHON -c \ + "from distutils.sysconfig import get_python_lib as f; \ + import os; \ + print (os.path.join(f(plat_specific=1, standard_lib=1), 'config'));"` + PYTHON_LIBS="-L$ac_python_libdir -lpython$ac_python_version" + fi + + if test -z "PYTHON_LIBS"; then + AC_MSG_ERROR([ + Cannot determine location of your Python DSO. Please check it was installed with + dynamic libraries enabled, or try setting PYTHON_LIBS by hand. + ]) + fi + fi + AC_MSG_RESULT([$PYTHON_LIBS]) + AC_SUBST([PYTHON_LIBS]) + + # + # Check for site packages + # + AC_MSG_CHECKING([for Python site-packages path]) + if test -z "$PYTHON_SITE_PKG"; then + PYTHON_SITE_PKG=`$PYTHON -c "import distutils.sysconfig; \ + print (distutils.sysconfig.get_python_lib(0,0));"` + fi + AC_MSG_RESULT([$PYTHON_SITE_PKG]) + AC_SUBST([PYTHON_SITE_PKG]) + + # + # libraries which must be linked in when embedding + # + AC_MSG_CHECKING(python extra libraries) + if test -z "$PYTHON_EXTRA_LIBS"; then + PYTHON_EXTRA_LIBS=`$PYTHON -c "import distutils.sysconfig; \ + conf = distutils.sysconfig.get_config_var; \ + print (conf('LIBS') + ' ' + conf('SYSLIBS'))"` + fi + AC_MSG_RESULT([$PYTHON_EXTRA_LIBS]) + AC_SUBST(PYTHON_EXTRA_LIBS) + + # + # linking flags needed when embedding + # + AC_MSG_CHECKING(python extra linking flags) + if test -z "$PYTHON_EXTRA_LDFLAGS"; then + PYTHON_EXTRA_LDFLAGS=`$PYTHON -c "import distutils.sysconfig; \ + conf = distutils.sysconfig.get_config_var; \ + print (conf('LINKFORSHARED'))"` + fi + AC_MSG_RESULT([$PYTHON_EXTRA_LDFLAGS]) + AC_SUBST(PYTHON_EXTRA_LDFLAGS) + + # + # final check to see if everything compiles alright + # + AC_MSG_CHECKING([consistency of all components of python development environment]) + # save current global flags + ac_save_LIBS="$LIBS" + ac_save_LDFLAGS="$LDFLAGS" + ac_save_CPPFLAGS="$CPPFLAGS" + LIBS="$ac_save_LIBS $PYTHON_LIBS $PYTHON_EXTRA_LIBS $PYTHON_EXTRA_LIBS" + LDFLAGS="$ac_save_LDFLAGS $PYTHON_EXTRA_LDFLAGS" + CPPFLAGS="$ac_save_CPPFLAGS $PYTHON_CPPFLAGS" + AC_LANG_PUSH([C]) + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[#include <Python.h>]], + [[Py_Initialize();]]) + ],[pythonexists=yes],[pythonexists=no]) + AC_LANG_POP([C]) + # turn back to default flags + CPPFLAGS="$ac_save_CPPFLAGS" + LIBS="$ac_save_LIBS" + LDFLAGS="$ac_save_LDFLAGS" + + AC_MSG_RESULT([$pythonexists]) + + if test ! "x$pythonexists" = "xyes"; then + AC_MSG_FAILURE([ + Could not link test program to Python. Maybe the main Python library has been + installed in some non-standard library path. If so, pass it to configure, + via the LIBS environment variable. + Example: ./configure LIBS="-L/usr/non-standard-path/python/lib" + ============================================================================ + ERROR! + You probably have to install the development version of the Python package + for your distribution. The exact name of this package varies among them. + ============================================================================ + ]) + PYTHON_VERSION="" + fi + + # + # all done! + # +]) diff --git a/v2.6/toolkit/m4/ax_require_defined.m4 b/v2.6/toolkit/m4/ax_require_defined.m4 new file mode 100644 index 0000000000000000000000000000000000000000..17c3eab7dafde6c1358c7c189bbe44a6e14995a7 --- /dev/null +++ b/v2.6/toolkit/m4/ax_require_defined.m4 @@ -0,0 +1,37 @@ +# =========================================================================== +# https://www.gnu.org/software/autoconf-archive/ax_require_defined.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_REQUIRE_DEFINED(MACRO) +# +# DESCRIPTION +# +# AX_REQUIRE_DEFINED is a simple helper for making sure other macros have +# been defined and thus are available for use. This avoids random issues +# where a macro isn't expanded. Instead the configure script emits a +# non-fatal: +# +# ./configure: line 1673: AX_CFLAGS_WARN_ALL: command not found +# +# It's like AC_REQUIRE except it doesn't expand the required macro. +# +# Here's an example: +# +# AX_REQUIRE_DEFINED([AX_CHECK_LINK_FLAG]) +# +# LICENSE +# +# Copyright (c) 2014 Mike Frysinger <vapier@gentoo.org> +# +# Copying and distribution of this file, with or without modification, are +# permitted in any medium without royalty provided the copyright notice +# and this notice are preserved. This file is offered as-is, without any +# warranty. + +#serial 2 + +AC_DEFUN([AX_REQUIRE_DEFINED], [dnl + m4_ifndef([$1], [m4_fatal([macro ]$1[ is not defined; is a m4 file missing?])]) +])dnl AX_REQUIRE_DEFINED diff --git a/v2.5/toolkit/m4/libtool.m4 b/v2.6/toolkit/m4/libtool.m4 similarity index 100% rename from v2.5/toolkit/m4/libtool.m4 rename to v2.6/toolkit/m4/libtool.m4 diff --git a/v2.5/toolkit/m4/ltoptions.m4 b/v2.6/toolkit/m4/ltoptions.m4 similarity index 100% rename from v2.5/toolkit/m4/ltoptions.m4 rename to v2.6/toolkit/m4/ltoptions.m4 diff --git a/v2.5/toolkit/m4/ltsugar.m4 b/v2.6/toolkit/m4/ltsugar.m4 similarity index 100% rename from v2.5/toolkit/m4/ltsugar.m4 rename to v2.6/toolkit/m4/ltsugar.m4 diff --git a/v2.5/toolkit/m4/ltversion.m4 b/v2.6/toolkit/m4/ltversion.m4 similarity index 100% rename from v2.5/toolkit/m4/ltversion.m4 rename to v2.6/toolkit/m4/ltversion.m4 diff --git a/v2.5/toolkit/m4/lt~obsolete.m4 b/v2.6/toolkit/m4/lt~obsolete.m4 similarity index 100% rename from v2.5/toolkit/m4/lt~obsolete.m4 rename to v2.6/toolkit/m4/lt~obsolete.m4 diff --git a/v2.6/toolkit/mydistconfig b/v2.6/toolkit/mydistconfig new file mode 100755 index 0000000000000000000000000000000000000000..f334ef086a0aca8c669189042c9e5b5a17bada54 --- /dev/null +++ b/v2.6/toolkit/mydistconfig @@ -0,0 +1 @@ +./configure --prefix=$HOME/local --enable-pyext diff --git a/v2.6/toolkit/myfullconfig b/v2.6/toolkit/myfullconfig new file mode 100755 index 0000000000000000000000000000000000000000..54fd728914924c795407d12bc82c4c56cbd52e57 --- /dev/null +++ b/v2.6/toolkit/myfullconfig @@ -0,0 +1 @@ +./configure --prefix=$HOME/local --enable-fortranext --enable-pyext --with-hoppet --with-qcdnum --with-root --with-yoda diff --git a/v2.6/toolkit/mygitcl b/v2.6/toolkit/mygitcl new file mode 100755 index 0000000000000000000000000000000000000000..b14d7563a397e6b4177e1cceeee07cf3d1d4f76d --- /dev/null +++ b/v2.6/toolkit/mygitcl @@ -0,0 +1 @@ +git log --pretty --numstat --summary -p . | git2cl > ChangeLog.new diff --git a/v2.6/toolkit/mygittag b/v2.6/toolkit/mygittag new file mode 100755 index 0000000000000000000000000000000000000000..bb5909c348bb5e1eb74b49e90bef282fdc4e95b6 --- /dev/null +++ b/v2.6/toolkit/mygittag @@ -0,0 +1,5 @@ +# Create annotated tag with name given on command line. +# A tag message must be provided via the editor. +git tag -a $1 +# Share git tag with other users by pushing to origin. +git push origin $1 diff --git a/v2.6/toolkit/pyext/.gitignore b/v2.6/toolkit/pyext/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..9100ed77399c71037710f35dbda8f85b9a049896 --- /dev/null +++ b/v2.6/toolkit/pyext/.gitignore @@ -0,0 +1,3 @@ +# Ignore produced temporary files +fastnlo.py +fastnlo_wrap.cc diff --git a/v2.6/toolkit/pyext/Makefile.am b/v2.6/toolkit/pyext/Makefile.am new file mode 100644 index 0000000000000000000000000000000000000000..5499ed66b5171e60cf80a6f42f2807cd6ff77aa0 --- /dev/null +++ b/v2.6/toolkit/pyext/Makefile.am @@ -0,0 +1,42 @@ +# -*- Automake -*- +# ----------------------------------------------------------------------------- +# +# K. Rabbertz, 08.11.2013 +# +# fastNLO: C++ version +# +# ----------------------------------------------------------------------------- +# Use GNU standards +AUTOMAKE_OPTIONS = gnu + +EXTRA_DIST = fastnlo.i + +if ENABLE_PYEXT + +python_PYTHON = fastnlo.py +pyexec_LTLIBRARIES = _fastnlo.la + +_fastnlo_la_SOURCES = fastnlo_wrap.cc fastnlo_wrap.h +_fastnlo_la_CPPFLAGS = $(PYTHON_CPPFLAGS) -I$(top_srcdir)/fastnlotoolkit/include/fastnlotk -I$(LHAPDFINCLUDEPATH) +_fastnlo_la_LDFLAGS = -module -shared -avoid-version +_fastnlo_la_LIBADD = $(top_srcdir)/fastnlotoolkit/libfastnlotoolkit.la + +include ./$(DEPDIR)/fastnlo_wrap.Plo + +$(DEPDIR)/fastnlo_wrap.Plo: fastnlo_wrap.cc + +fastnlo_wrap.cc: fastnlo.i + $(SWIG) -c++ -python -I$(top_srcdir)/fastnlotoolkit/include/fastnlotk -o $@ -MD -MF $(DEPDIR)/fastnlo_wrap.Plo $< + +clean-local: + rm -f fastnlo_wrap.cc fastnlo_wrap.h fastnlo.py +#$(DEPDIR)/fastnlo_wrap.Plo + +endif + +# Files that are required to build the project but that can be +# recreated IF the necessary autotools etc. are available by: +# "autoreconf -i; ./configure" +# Use "make maintainer-clean" (on a build machine) before svn commits, +# but not for distribution +MAINTAINERCLEANFILES = Makefile.in fastnlo.py fastnlo_wrap.cc diff --git a/v2.6/toolkit/pyext/fastnlo.i b/v2.6/toolkit/pyext/fastnlo.i new file mode 100644 index 0000000000000000000000000000000000000000..171cd26715c54093d5093c4e7997734f26fda2d7 --- /dev/null +++ b/v2.6/toolkit/pyext/fastnlo.i @@ -0,0 +1,67 @@ +// To be tested: Following suggestion from Dmitry Kalinkin, 12.06.2021 +%module(directors="1") fastnlo + +// generate directors for all classes that have virtual methods +%feature("director"); + +%{ +/** + * This is a workaround for a minor swig bug when building on gcc 4.6.1 and above. + * Prior to gcc 4.6.1 the STL headers like vector, string, etc. used to + * automatically pull in the cstddef header but starting with gcc 4.6.1 they no + * longer do. This leads to swig generated a file that does not compile so we + * explicitly include cstddef so the swig generated file will compile. + */ +#include <cstddef> +%} + +%include <std_string.i> +%include <std_vector.i> +%include <std_pair.i> + +namespace std { + %template(vectori) vector<int>; + %template(vectors) vector<string>; + %template(vectord) vector<double>; + %template(vectord2) vector<vector<double> >; + %template() pair<double,double>; + %template(pairvector) vector<pair<double,double> >; + %template(pairi) pair<int,int>; + %template(vectorpairi) vector<pair<int,int> >; + %template(vector2pairi) vector<vector<pair<int,int> > >; +}; + +%ignore *::operator[]; +%ignore *operator>>; +%rename("PrintMessage") speaker::print; + + +/* Suppress SWIG warning */ +#pragma SWIG nowarn=SWIGWARN_PARSE_NESTED_CLASS +/* Redefine nested class in global scope in order for SWIG to generate */ +/* a proxy class. Only SWIG parses this definition. */ + +%{ +#include "../fastnlotoolkit/include/fastnlotk/fastNLOTable.h" +#include "../fastnlotoolkit/include/fastnlotk/fastNLOReader.h" +#include "../fastnlotoolkit/include/fastnlotk/fastNLOLHAPDF.h" +#include "../fastnlotoolkit/include/fastnlotk/fastNLOAlphas.h" +#include "../fastnlotoolkit/include/fastnlotk/fastNLOCRunDec.h" +#include "../fastnlotoolkit/include/fastnlotk/Alphas.h" +%} +%include "../fastnlotoolkit/include/fastnlotk/speaker.h" +%include "../fastnlotoolkit/include/fastnlotk/fastNLOPDFLinearCombinations.h" +%include "../fastnlotoolkit/include/fastnlotk/fastNLOConstants.h" +%include "../fastnlotoolkit/include/fastnlotk/fastNLOTable.h" +%include "../fastnlotoolkit/include/fastnlotk/fastNLOReader.h" +%include "../fastnlotoolkit/include/fastnlotk/fastNLOLHAPDF.h" +%include "../fastnlotoolkit/include/fastnlotk/fastNLOAlphas.h" +%include "../fastnlotoolkit/include/fastnlotk/fastNLOCRunDec.h" +%include "../fastnlotoolkit/include/fastnlotk/Alphas.h" +/* Avoid syntax errors because of 'as' by ignoring declarations using '*as' in CRunDec */ +/* Let's hope this doesn't break anything important ... */ +%ignore mPS2mSI; +%ignore m1S2mSI; +%ignore mRS2mSI; +%ignore mRSp2mSI; +%include "../fastnlotoolkit/include/fastnlotk/CRunDec.h" diff --git a/v2.6/toolkit/src/.gitignore b/v2.6/toolkit/src/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..dc9a66c26bbda0fdd71cf1f1b36fb5adbabac36d --- /dev/null +++ b/v2.6/toolkit/src/.gitignore @@ -0,0 +1,2 @@ +# Ignore created executables +fnlo-tk-* diff --git a/v2.6/toolkit/src/Makefile.am b/v2.6/toolkit/src/Makefile.am new file mode 100644 index 0000000000000000000000000000000000000000..75bc6a4180d00379dd951c00c18dee48f7a4bc6b --- /dev/null +++ b/v2.6/toolkit/src/Makefile.am @@ -0,0 +1,119 @@ +# -*- Automake -*- +# ----------------------------------------------------------------------------- +# +# K. Rabbertz, 06.10.2013 +# +# fastNLO_toolkit +# +# ----------------------------------------------------------------------------- +# Use GNU standards +AUTOMAKE_OPTIONS = gnu + +# +# Targets +# +# The C++ fastnlo toolkit utility and example programs +# +if HAVE_LHAPDF + bin_PROGRAMS = fnlo-tk-cppread fnlo-tk-example fnlo-tk-merge fnlo-tk-merge2 fnlo-tk-append fnlo-tk-modify fnlo-tk-cat + bin_SCRIPTS = fnlo-tk-config fnlo-py-print.py +# YODA features in fnlo-tk-statunc & fnlo-tk-yodaout are now conditionally compiled +#if HAVE_YODA + bin_PROGRAMS += fnlo-tk-statunc + bin_PROGRAMS += fnlo-tk-yodaout +#endif +#if HAVE_ROOT + bin_PROGRAMS += fnlo-tk-rootout +#endif +endif + +# +# Sources +# +# All source files which go into the targets (and have to be distributed) +# Scripts +EXTRA_DIST = fnlo-tk-config.in fnlo-py-print.py +# Programs to be compiled +fnlo_tk_cppread_SOURCES = fnlo-tk-cppread.cc +fnlo_tk_example_SOURCES = fnlo-tk-example.cc +fnlo_tk_yodaout_SOURCES = fnlo-tk-yodaout.cc +fnlo_tk_statunc_SOURCES = fnlo-tk-statunc.cc +fnlo_tk_rootout_SOURCES = fnlo-tk-rootout.cc +fnlo_tk_merge_SOURCES = fnlo-tk-merge.cc +fnlo_tk_merge2_SOURCES = fnlo-tk-merge2.cc +fnlo_tk_append_SOURCES = fnlo-tk-append.cc +fnlo_tk_modify_SOURCES = fnlo-tk-modify.cc +fnlo_tk_cat_SOURCES = fnlo-tk-cat.cc + +# +# Preprocessor flags +# +# All targets +AM_CPPFLAGS = +my_include_dirs = -I${srcdir}/../fastnlotoolkit/include -I${top_builddir}/fastnlotoolkit/include -I${top_srcdir}/fastnlotoolkit/include + +if HAVE_LHAPDF + my_include_dirs += -I${LHAPDFINCLUDEPATH} +endif + +# Individual targets +fnlo_tk_cppread_CPPFLAGS = $(my_include_dirs) -I${includedir} $(AM_CPPFLAGS) $(LHAPDFCPPFLAGS) +fnlo_tk_example_CPPFLAGS = $(my_include_dirs) -I${includedir} $(AM_CPPFLAGS) $(ROOTCPPFLAGS) +fnlo_tk_yodaout_CPPFLAGS = $(my_include_dirs) -I${includedir} $(AM_CPPFLAGS) $(YODACPPFLAGS) +fnlo_tk_statunc_CPPFLAGS = $(my_include_dirs) -I${includedir} $(AM_CPPFLAGS) $(YODACPPFLAGS) +fnlo_tk_rootout_CPPFLAGS = $(my_include_dirs) -I${includedir} $(AM_CPPFLAGS) $(ROOTCPPFLAGS) +fnlo_tk_merge_CPPFLAGS = $(my_include_dirs) -I${includedir} $(AM_CPPFLAGS) +fnlo_tk_merge2_CPPFLAGS = $(my_include_dirs) -I${includedir} $(AM_CPPFLAGS) +fnlo_tk_append_CPPFLAGS = $(my_include_dirs) -I${includedir} $(AM_CPPFLAGS) +fnlo_tk_modify_CPPFLAGS = $(my_include_dirs) -I${includedir} $(AM_CPPFLAGS) +fnlo_tk_cat_CPPFLAGS = $(my_include_dirs) -I${includedir} $(AM_CPPFLAGS) + +# +# C++ compiler flags +# +# Recall: -std=c++17 is requested by default through configure.ac macro AX_CXX_COMPILE_STDCXX_17 +# and works with g++, clang etc.! +# -std=gnu++17 is restricted to g++ only and not the best option +# All targets +AM_CXXFLAGS = -g -O2 -Wall -Wdeprecated-declarations +# Debug flags +# AM_CXXFLAGS = -g -ftrapping-math -fsignaling-nans -O0 -Wall +fnlo_tk_cppread_CXXFLAGS = $(AM_CXXFLAGS) $(HOPPETCXXFLAGS) +fnlo_tk_example_CXXFLAGS = $(AM_CXXFLAGS) $(ROOTCXXFLAGS) +fnlo_tk_yodaout_CXXFLAGS = $(AM_CXXFLAGS) +fnlo_tk_statunc_CXXFLAGS = $(AM_CXXFLAGS) +fnlo_tk_rootout_CXXFLAGS = $(AM_CXXFLAGS) $(ROOTCXXFLAGS) +fnlo_tk_merge_CXXFLAGS = $(AM_CXXFLAGS) +fnlo_tk_merge2_CXXFLAGS = $(AM_CXXFLAGS) +fnlo_tk_append_CXXFLAGS = $(AM_CXXFLAGS) +fnlo_tk_modify_CXXFLAGS = $(AM_CXXFLAGS) +fnlo_tk_cat_CXXFLAGS = $(AM_CXXFLAGS) + +# +# Linker flags +# +# Require lhapdf, use lhapdf-config if possible +# All targets +AM_LDFLAGS = -L${pkglibdir} -lfastnlotoolkit +if HAVE_HOPPET + AM_LDFLAGS += -lgfortran +endif +my_lib_dirs = -L${srcdir}/../fastnlotoolkit -lfastnlotoolkit -L${top_builddir}/fastnlotoolkit -lfastnlotoolkit -L${top_srcdir}/fastnlotoolkit -lfastnlotoolkit +# Individual targets +fnlo_tk_cppread_LDFLAGS = $(my_lib_dirs) $(AM_LDFLAGS) $(LHAPDFLDFLAGS) $(HOPPETLDFLAGS) +fnlo_tk_example_LDFLAGS = $(my_lib_dirs) $(AM_LDFLAGS) $(LHAPDFLDFLAGS) $(ROOTLDFLAGS) +fnlo_tk_yodaout_LDFLAGS = $(my_lib_dirs) $(AM_LDFLAGS) $(LHAPDFLDFLAGS) $(YODALDFLAGS) +fnlo_tk_statunc_LDFLAGS = $(my_lib_dirs) $(AM_LDFLAGS) $(LHAPDFLDFLAGS) $(YODALDFLAGS) +fnlo_tk_rootout_LDFLAGS = $(my_lib_dirs) $(AM_LDFLAGS) $(LHAPDFLDFLAGS) $(ROOTLDFLAGS) +fnlo_tk_merge_LDFLAGS = $(my_lib_dirs) $(AM_LDFLAGS) +fnlo_tk_merge2_LDFLAGS = $(my_lib_dirs) $(AM_LDFLAGS) +fnlo_tk_append_LDFLAGS = $(my_lib_dirs) $(AM_LDFLAGS) +fnlo_tk_modify_LDFLAGS = $(my_lib_dirs) $(AM_LDFLAGS) +fnlo_tk_cat_LDFLAGS = $(my_lib_dirs) $(AM_LDFLAGS) + +# Files that are required to build the project but that can be +# recreated IF the necessary autotools etc. are available by: +# "autoreconf -i; ./configure" +# Use "make maintainer-clean" (on a build machine) before svn commits, +# but not for distribution +MAINTAINERCLEANFILES = Makefile.in diff --git a/v2.6/toolkit/src/fnlo-py-print.py b/v2.6/toolkit/src/fnlo-py-print.py new file mode 100755 index 0000000000000000000000000000000000000000..42c93211f9eb60232301a1be4178d38367b0c69f --- /dev/null +++ b/v2.6/toolkit/src/fnlo-py-print.py @@ -0,0 +1,354 @@ +#!/usr/bin/env python3 +#-*- coding:utf-8 -*- +### This shebang line only works with recent enough env version: !/usr/bin/env -S python3 -u +### Set PYTHONUNBUFFERED environment variable instead to 1. +# +######################################################################## +# +# Read fastNLO grids and print cross section & uncertainty +# +# Created by K. Rabbertz, 22.04.2024 +# +######################################################################## +# +import argparse +import glob +import os +import re +import string +import sys +import timeit +# numpy +import numpy as np +# fastNLO for direct evaluation of interpolation grids +# ATTENTION: fastNLO python extension is required for Python 3! +import fastnlo +from fastnlo import fastNLOLHAPDF +from fastnlo import SetGlobalVerbosity +# ATTENTION: Make sure to have python support for ROOT +# import ROOT + +# Action class to allow comma-separated (or empty) list in options +class SplitArgs(argparse.Action): + def __call__(self, parser, namespace, values, option_string=None): + if values: + setattr(namespace, self.dest, values[0].split(',')) + else: + setattr(namespace, self.dest, ['']) + + +# Some global definitions +_text_to_order = {'LO': 0, 'NLO': 1, 'NNLO': 2} +_order_to_text = {0: 'LO', 1: 'NLO', 2: 'NNLO'} +#_scale_to_text = {0: 'kScale1', 1: 'kScale2', 2: 'kQuadraticSum', 3: 'kQuadraticMean', 4: 'kQuadraticSumOver4', +# 5: 'kLinearMean', 6: 'kLinearSum', 7: 'kScaleMax', 8: 'kScaleMin', 9: 'kProd', +# 10: 'kS2plusS1half', 11: 'kPow4Sum', 12: 'kWgtAvg', 13: 'kS2plusS1fourth', 14: 'kExpProd2', 15: 'kExtern'} +# TODO: How can this be done using fastNLO directly? +_verb_to_enum = {'SILENT': 1000, 'ERROR': 2, 'WARNING': 1, 'INFO': 0, 'MANUAL': -1000, 'DEBUG': -1000} + + +######################################################################## + +def main(): + # Start timer + # just for measuring wall clock time - not necessary + start_time = timeit.default_timer() + # Define arguments & options + parser = argparse.ArgumentParser(epilog='', formatter_class=argparse.ArgumentDefaultsHelpFormatter) + # Positional arguments + parser.add_argument('table', type=str, nargs='+', + help='Filename glob of fastNLO tables to be evaluated. This must be specified!') + # Optional arguments + parser.add_argument('-m', '--member', default=0, type=int, + help='Member of PDFset, default is 0.') + parser.add_argument('-o', '--order', default=None, required=False, nargs=1, type=str, action=SplitArgs, + help='Comma-separated list of orders to show: LO, NLO, and/or NNLO. If nothing is chosen, show all orders available in table.') + parser.add_argument('-p', '--pdfset', default='CT18NNLO', type=str, + help='PDFset to evaluate fastNLO table.') + parser.add_argument('-s', '--scale', default=0, required=False, nargs='?', type=int, + choices=list(range(16)), metavar='[0-15]', + help='For flexible-scale tables define central scale choice for MuR and MuF by selection enum fastNLO::ScaleFunctionalForm ("0"=kScale1, "1"=kScale2, "2"=kQuadraticSum), ...') + parser.add_argument('-u', '--uncertainty', default=None, required=False, type=str, + help='Type of uncertainty to be derived: 2- or 6-point scale uncertainty [2P,6P],\n' + + 'LHAPDF6 uncertainty [L6], statistical integration uncertainty [ST].') + parser.add_argument('-v', '--verbosity', default='WARNING', type=str, + help="Set fastNLO output verbosity to one of SILENT, ERROR, WARNING, INFO, MANUAL, DEBUG") + + # Parse arguments + args = vars(parser.parse_args()) + + # Verbosity + verb = args['verbosity'] + eVerb = _verb_to_enum[verb] + # fVerbosity = toVerbosity()[VerbosityLevel] + SetGlobalVerbosity(eVerb) + + # Print header + if eVerb < 1: + print(" ##################################################################################") + print(" # [fnlo-py-print] Program to read fastNLO tables and write out") + print(" # [fnlo-py-print] QCD cross sections with uncertainties") + print(" #---------------------------------------------------------------------------------") + print(" # [fnlo-py-print] For an explanation of command line arguments type:") + print(" # [fnlo-py-print] ./fnlo-py-print.py -h") + print(" ##################################################################################") + print("") + + # List of table names + files = args['table'] + if eVerb < 1000: + print(" ##################################################################################") + print(" # [fnlo-py-print] Iterating over table list:") + for file in files: + if eVerb < 1000: + print(' # [fnlo-py-print] ', file) + + # PDF set name + pdfset = os.path.basename(args['pdfset']) + if eVerb < 1000: + print(' # [fnlo-py-print] Using PDF set:', pdfset) + + # Orders to be shown + iorders = [] + iordmin = _text_to_order['LO'] + iordmax = _text_to_order['NNLO'] + if args['order'] is None: + if eVerb < 1000: + print(' # [fnlo-py-print] Evaluate tables up to highest available order.') + else: + for ord in args['order']: + if ord in _text_to_order: + iorders.append(_text_to_order[ord]) + else: + print(' # [fnlo-py-print] Illegal order specified, aborted!') + print(' # [fnlo-py-print] Order list:', args['order']) + exit(1) + iordmin = min(iorders) + iordmax = max(iorders) + if eVerb < 1000: + print(' # [fnlo-py-print] Evaluate tables up to order(s):', args['order']) + print(" ##################################################################################") + + # Type of uncertainty (None, scale variation [2P,6P], PDF [L6], statistical [ST]) + unc_type = None + unc_style = fastnlo.kScaleNone + unc_label = '' + if args['uncertainty']: + unc_type = args['uncertainty'] + if unc_type == '2P': + unc_style = fastnlo.kSymmetricTwoPoint + unc_label = 'Scale uncertainty (2P)' + elif unc_type == '6P': + unc_style = fastnlo.kAsymmetricSixPoint + unc_label = 'Scale uncertainty (6P)' + elif unc_type == 'L6': + unc_style = fastnlo.kLHAPDF6 + unc_label = 'PDF uncertainty (LHAPDF)' + elif unc_type == 'ST': + unc_style = fastnlo.kStatInt + unc_label = 'numerical uncertainty (theory)' + else: + print(' # [fnlo-py-print] Illegal uncertainty specified, aborted!') + print(' # [fnlo-py-print] Uncertainty:', args['uncertainty']) + exit(11) + + # Scale choice + scale_choice = args['scale'] + + # Loop over table list + for table in files: + # Table name + tablepath = os.path.split(table)[0] + if not tablepath: + tablepath = '.' + tablename = os.path.split(table)[1] + if tablename.endswith('.tab.gz'): + tablename = tablename.replace('.tab.gz', '', 1) + elif tablename.endswith('.tab'): + tablename = tablename.replace('.tab', '', 1) + else: + print(' # [fnlo-py-print] Error! Wrong extension for table: ', table) + exit(1) + if eVerb < 1000: + print("") + print(" ##################################################################################") + print(' # [fnlo-py-print] Evaluating table: ', table) + print(" ##################################################################################") + print("") + + ###################### Start EVALUATION with fastNLO library ################################################### + # Take the general information (bin_bounds, labels, order_existence, etc.) from given pdfset. + fnlo = fastnlo.fastNLOLHAPDF(table, args['pdfset'], args['member']) + + # Print essential table information + if eVerb < 1: + fnlo.PrintContributionSummary(0) + fnlo.Print(0) + + # Get labeling for the x-axis + # Dimensionality of the table: + ndim = fnlo.GetNumDiffBin() + if eVerb < 0: + print('') + print(' # [fnlo-py-print] Table Dimensions: ', ndim) + + # Labels of all the dimensions: + labels = fnlo.GetDimLabels() + if eVerb < 0: + print(' # [fnlo-py-print] Labels:', labels) + + # x label of first dimension from table: + xlabel = fnlo.GetDimLabel(0) + if eVerb < 0: + print(' # [fnlo-py-print] x-label:', xlabel) + + # Generic y label + ylabel = '$\sigma \pm \Delta\sigma(\mu_R,\mu_F)$' + + # Creating x-axis + bin_bounds = np.array(fnlo.GetObsBinsBounds(0)) + # bin_bounds = np.array(fnlo.GetDim1BinBounds(0)) Mods needed for 2D tables ... + if eVerb < 0: + print(' # [fnlo-py-print] bin_bounds.T: \n', bin_bounds.T, '\n') + print(' # [fnlo-py-print] bin_bounds.flatten()', bin_bounds.flatten(), '\n') + + x_axis = (bin_bounds.T[0]+bin_bounds.T[1]) / 2. # this is a list of bin centers + xmin = 0.95*min(bin_bounds.ravel()) + xmax = 1.05*max(bin_bounds.ravel()) + if eVerb < 0: + print(' # [fnlo-py-print] xmin=%s, xmax=%s. \n' % (xmin, xmax)) + + # Preparing x-errors (via bin_bounds) --> x_errors[0, :] are initially negative (positive via -1*), x_errors[1, :] positive + x_errors = np.array( + [-1*(bin_bounds.T[0]-x_axis), bin_bounds.T[1]-x_axis]) + if eVerb < 0: + print(' # [fnlo-py-print] \n x_errors: ', x_errors, '\n') + + # Check existence of orders in table + lflex = fnlo.GetIsFlexibleScaleTable() + scale_name = 'scale1' + o_existence = [False, False, False] + cnt_order = -1 + max_order = 0 + for i in range(3): + o_existence[i] = fnlo.SetContributionON( + fastnlo.kFixedOrder, i, True) + if o_existence[i]: + max_order = i + if not lflex: + if scale_choice != 0: + print(' # [fnlo-py-print] Invalid choice of scale = ', scale_choice, ' Aborted!') + print(' # [fnlo-py-print] For fixed-scale tables only the default=0 is allowed.') + exit(1) + else: + scale_name = fnlo.GetScaleDescription(i, 0) + else: + if scale_choice < 2: + scale_name = fnlo.GetScaleDescription(i, scale_choice) + else: + scl0 = fnlo.GetScaleDescription(i, 0) + scl1 = fnlo.GetScaleDescription(i, 1) + scale_name = _scale_to_text[scale_choice] + \ + '_'+scl0+'_'+scl1 + if cnt_order == i-1: + cnt_order += 1 + if eVerb < 0: + print(' # [fnlo-py-print] Table has continuous orders up to', + cnt_order, 'and a maximal order of', max_order) + + # If previously undefined set iordmax to maximum found in table + if args['order'] is None: + iordmax = max_order + + if iordmax > cnt_order: + print(' # [fnlo-py-print] Invalid choice of orders. Aborted!') + print(' # [fnlo-py-print] Highest order requested is', + _order_to_text[iordmax], 'but continuous orders are available only up to', _order_to_text[cnt_order]) + exit(1) + + order_list = [] + if args['order'] is None: + for iord in range(cnt_order+1): + order_list.append(_order_to_text[iord]) + else: + order_list = args['order'] + + if eVerb < 1: + print(' # [fnlo-py-print] List of requested orders:', order_list) + + # For flexible-scale tables set scale to user choice (default is 0) + + if lflex: + if eVerb < 0: + print(' # [fnlo-py-print] Setting requested scale choice for flexible-scale table:', scale_choice) + fnlo.SetMuRFunctionalForm(scale_choice) + fnlo.SetMuFFunctionalForm(scale_choice) + else: + if scale_choice == 0: + if eVerb < 0: + print(' # [fnlo-py-print] Evaluating fixed-scale table. Scale choice must be', scale_choice) + else: + print(' # [fnlo-py-print] No scale choice possible for fixed-scale table. Aborted!') + print(' # [fnlo-py-print] scale_choice = ', scale_choice) + exit(1) + + # Now evaluate fastNLO table having a look at the requested uncertainty + xs_list = [] # will contain total cross section for selected orders out of LO, NLO, NNLO + # list for relative scale uncertainties (low, high) for selected orders + rel_unc_list = [] + for n in order_list: + for j in range(0, max_order+1): + if j <= _text_to_order[n]: + fnlo.SetContributionON(fastnlo.kFixedOrder, j, True) + else: + fnlo.SetContributionON(fastnlo.kFixedOrder, j, False) + if eVerb < 0: + print(' # [fnlo-py-print] \n') + print(' # [fnlo-py-print] Calculate XS for order: %s' % n, '\n') + print(' # [fnlo-py-print] ---- ---- ---- ---- ---- ---- ---- ----') + + fnlo.CalcCrossSection() + xs_list.append(fnlo.GetCrossSection()) + + ### Get requested uncertainty ### + # RELATIVE uncertainty for chosen uncertainty type and style + # Calculate this for all accessible orders just in case + if eVerb < 0: + print(' # [fnlo-py-print] Used scale factor MuF: ', fnlo.GetScaleFactorMuF()) + print(' # [fnlo-py-print] Used scale factor MuR: ', fnlo.GetScaleFactorMuR(), '\n') + print(' # [fnlo-py-print] Calculate uncertainty for this central scale.\n') + # Start of fastNLO print out + lnorm = False + # Set iprint to 1/0 to switch print-out on/off + iprint = 1 + if unc_type == '2P' or unc_type == '6P': + rel_unc_item = np.array(fnlo.GetXsUncertaintyVec(unc_style,lnorm,iprint)) + elif unc_type == 'L6': + rel_unc_item = np.array(fnlo.GetXsUncertaintyVec(unc_style,lnorm,iprint)) + elif unc_type == 'ST': + rel_unc_item = np.array(fnlo.GetXsUncertaintyVec(unc_style,lnorm,iprint)) + else: + rel_unc_item = np.array(fnlo.GetXsUncertaintyVec(fastnlo.kScaleNone,lnorm,iprint)) + + rel_unc_list.append(rel_unc_item) + + # Use these np arrays to fill e.g. your ROOT histograms + xs_all = np.array(xs_list) + rel_unc = np.array(rel_unc_list) + + ########## + # structure of rel_unc: + # rel_unc[0,:,:] means LO, rel_unc[1,:,:] means NLO, and rel_unc[2,:,:] in NNLO + # rel_unc[0,0,:] means xs in LO + # rel_unc[0,1,:] means rel. uncertainty upwards (in LO) + # rel_unc[0,2,:] means rel. uncertainty downwards (in LO) + ######### + + stop_time = timeit.default_timer() + timediff = stop_time-start_time + if eVerb < 1: + print(' # [fnlo-py-print] Elapsed time: %s sec = %s min' % (timediff, round(timediff/60, 2))) + + +if __name__ == '__main__': + main() diff --git a/v2.5/toolkit/src/fnlo-tk-append.cc b/v2.6/toolkit/src/fnlo-tk-append.cc similarity index 100% rename from v2.5/toolkit/src/fnlo-tk-append.cc rename to v2.6/toolkit/src/fnlo-tk-append.cc diff --git a/v2.5/toolkit/src/fnlo-tk-cat.cc b/v2.6/toolkit/src/fnlo-tk-cat.cc similarity index 100% rename from v2.5/toolkit/src/fnlo-tk-cat.cc rename to v2.6/toolkit/src/fnlo-tk-cat.cc diff --git a/v2.5/toolkit/src/fnlo-tk-config.in b/v2.6/toolkit/src/fnlo-tk-config.in similarity index 100% rename from v2.5/toolkit/src/fnlo-tk-config.in rename to v2.6/toolkit/src/fnlo-tk-config.in diff --git a/v2.5/toolkit/src/fnlo-tk-cppread.cc b/v2.6/toolkit/src/fnlo-tk-cppread.cc similarity index 100% rename from v2.5/toolkit/src/fnlo-tk-cppread.cc rename to v2.6/toolkit/src/fnlo-tk-cppread.cc diff --git a/v2.5/toolkit/src/fnlo-tk-example.cc b/v2.6/toolkit/src/fnlo-tk-example.cc similarity index 100% rename from v2.5/toolkit/src/fnlo-tk-example.cc rename to v2.6/toolkit/src/fnlo-tk-example.cc diff --git a/v2.5/toolkit/src/fnlo-tk-merge.cc b/v2.6/toolkit/src/fnlo-tk-merge.cc similarity index 100% rename from v2.5/toolkit/src/fnlo-tk-merge.cc rename to v2.6/toolkit/src/fnlo-tk-merge.cc diff --git a/v2.5/toolkit/src/fnlo-tk-merge2.cc b/v2.6/toolkit/src/fnlo-tk-merge2.cc similarity index 100% rename from v2.5/toolkit/src/fnlo-tk-merge2.cc rename to v2.6/toolkit/src/fnlo-tk-merge2.cc diff --git a/v2.5/toolkit/src/fnlo-tk-modify.cc b/v2.6/toolkit/src/fnlo-tk-modify.cc similarity index 62% rename from v2.5/toolkit/src/fnlo-tk-modify.cc rename to v2.6/toolkit/src/fnlo-tk-modify.cc index a7e52b025c2a41994277c0554e4a7ee62fa7ddeb..ee6fff1c7bc2752ece4b337e3e32948eda489d1d 100644 --- a/v2.5/toolkit/src/fnlo-tk-modify.cc +++ b/v2.6/toolkit/src/fnlo-tk-modify.cc @@ -205,14 +205,14 @@ int main(int argc, char** argv) { table.SetIpublunits(INT(Ipublunits)); } - if ( !STRING_ARR(ScDescript).empty() ){ + if ( EXIST(ScDescript) && !STRING_ARR(ScDescript).empty() ){ vector <string> ScDescr = table.GetScDescr(); size_t NScSize = ScDescr.size(); info["fnlo-tk-modify"]<<"Modifying existing scenario description:" << endl; for ( size_t i = 0; i < NScSize; i++ ) { shout << "Line no. " << i << ": " << ScDescr[i] << endl; } - if ( BOOL(AttachScDescription) ){ + if ( EXIST(AttachScDescription) && BOOL(AttachScDescription) ){ info["fnlo-tk-modify"]<<"Attaching to scenario description:" << endl; size_t NewNScSize = NScSize + STRING_ARR(ScDescript).size(); ScDescr.resize(NewNScSize); @@ -242,7 +242,7 @@ int main(int argc, char** argv) { table.SetLoOrder(INT(ILOord)); } - if ( !STRING_ARR(DimLabels).empty() ){ + if ( EXIST(DimLabels) && !STRING_ARR(DimLabels).empty() ){ unsigned int ndim = table.GetNumDiffBin(); if ( ndim != STRING_ARR(DimLabels).size() ) { error["fnlo-tk-modify"]<<"You need the same number of dimension labels than bin dimensions in the table, ndim = " << ndim << ". Aborted!" << endl; @@ -347,205 +347,215 @@ int main(int argc, char** argv) { } } - //! Add InfoBlocks with statistical uncertainty from steering file - //! Default flag1=0: Statistical/numerical uncertainty - int IBFlag1 = 0; - //! Default flag2=1: Quadratic addition, alternative: 0: linear addition - int IBFlag2 = 1; + //! Add InfoBlocks //! Default description line std::string Default = "Please provide description!"; - if ( EXIST(InfoBlockStatUnc) ) { - if ( !INT_ARR(RemoveBins).empty() ) { - info["fnlo-tk-modify"]<<"Do NOT erase bins while adding InfoBlocks or vice versa! Aborted."<<endl; - exit(25); - } else { - info["fnlo-tk-modify"]<<"Adding InfoBlocks to contributions."<<endl; - } - static vector<double> dstrel_LO = DOUBLE_COL(InfoBlockStatUnc,dstrel_LO); - static vector<double> dstrel_NLO = DOUBLE_COL(InfoBlockStatUnc,dstrel_NLO); - static vector<double> dstrel_NNLO = DOUBLE_COL(InfoBlockStatUnc,dstrel_NNLO); - unsigned int NDescr = STRING_ARR(InfoBlockDescr).size(); - if ( NDescr > 1 ) { - error["fnlo-tk-modify"]<<"Only one description line allowed for all blocks, aborted! NDescr = " << NDescr << endl; - exit(39); + //! Default key + std::string KeyBase = "InfoBlock"; + std::vector<std::string> KeyMods; + KeyMods.push_back("StatUnc"); + KeyMods.push_back("RefXs"); + for (unsigned int k=0; k<KeyMods.size(); k++) { + std::string Key = KeyBase + KeyMods[k]; + std::string KeyFlag1 = Key + "Flag1"; + std::string KeyFlag2 = Key + "Flag2"; + std::string KeyDescr = Key + "Descr"; + std::string KeyValuesLO = Key + "ValuesLO"; + std::string KeyValuesNLO = Key + "ValuesNLO"; + std::string KeyValuesNNLO = Key + "ValuesNNLO"; + std::string KeyOrders = Key + "Orders"; + std::string KeyFiles = Key + "Files"; + std::string KeyColumns = Key + "Columns"; + std::string KeyFacs = Key + "Facs"; + if ( !read_steer::getexist(KeyFlag1) || !read_steer::getexist(KeyFlag2) ){ + info["fnlo-tk-modify"]<<"No InfoBlock information found for key " << Key << " Skipped."<<endl; + continue; } - int Ncontrib = table.GetNcontrib(); - int ic = 0; - for ( int i = 0; i < Ncontrib; i++ ) { - fastNLOCoeffBase* c = table.GetCoeffTable(i); - if ( fastNLOCoeffAddBase::CheckCoeffConstants(c,true) ) { - int iFlag1 = IBFlag1; - int iFlag2 = IBFlag2; - if ( EXIST(InfoBlockFlag1) ) { iFlag1 = INT(InfoBlockFlag1); } - if ( EXIST(InfoBlockFlag2) ) { iFlag2 = INT(InfoBlockFlag2); } - if ( c->IsLO() ) { - info["fnlo-tk-modify"]<<"Found LO contribution " << i << endl; - std::vector<std::string> Description; - if ( NDescr > 0 ) { - Description.push_back(STRING_ARR(InfoBlockDescr)[0]); - } else { - Description.push_back(Default); - } - if ( dstrel_LO.size() == 0 ) { - warn["fnlo-tk-modify"]<<"Found LO contribution, but no uncertainties! Nothing added." << endl; - } else if ( dstrel_LO.size() != nobs ) { - error["fnlo-tk-modify"]<<"You need the same number of uncertainties, dstrel_LO = " << dstrel_LO.size() << - ", than bins in the table, nobsbin = " << nobs << ". Aborted!" << endl; - exit(1); - } else { - c->AddCoeffInfoBlock(iFlag1,iFlag2,Description,dstrel_LO); - } - ic += 1; - } else if ( c->IsNLO() ) { - info["fnlo-tk-modify"]<<"Found NLO contribution " << i << endl; - std::vector <std:: string> Description; - if ( NDescr > 0 ) { - Description.push_back(STRING_ARR(InfoBlockDescr)[0]); - } else { - Description.push_back(Default); - } - if ( dstrel_NLO.size() == 0 ) { - warn["fnlo-tk-modify"]<<"Found NLO contribution, but no uncertainties! Nothing added." << endl; - } else if ( dstrel_NLO.size() != nobs ) { - error["fnlo-tk-modify"]<<"You need the same number of uncertainties, dstrel_NLO = " << dstrel_NLO.size() << - ", than bins in the table, nobsbin = " << nobs << ". Aborted!" << endl; - exit(1); - } else { - c->AddCoeffInfoBlock(iFlag1,iFlag2,Description,dstrel_NLO); - } - ic += 1; - } else if ( c->IsNNLO() ) { - info["fnlo-tk-modify"]<<"Found NNLO contribution " << i << endl; - std::vector <std:: string> Description; - if ( NDescr > 0 ) { - Description.push_back(STRING_ARR(InfoBlockDescr)[0]); - } else { - Description.push_back(Default); - } - if ( dstrel_NNLO.size() == 0 ) { - warn["fnlo-tk-modify"]<<"Found NNLO contribution, but no uncertainties! Nothing added." << endl; - } else if ( dstrel_NNLO.size() != nobs ) { - error["fnlo-tk-modify"]<<"You need the same number of uncertainties, dstrel_NNLO = " << dstrel_NNLO.size() << - ", than bins in the table, nobsbin = " << nobs << ". Aborted!" << endl; - exit(1); + //! Add InfoBlocks with additional information from steering file + if ( read_steer::getexist(KeyValuesLO) ) { + if ( !INT_ARR(RemoveBins).empty() ) { + info["fnlo-tk-modify"]<<"Do NOT erase bins while adding InfoBlocks or vice versa! Aborted."<<endl; + exit(25); + } else { + info["fnlo-tk-modify"]<<"Adding InfoBlocks to contributions."<<endl; + } + unsigned int NDescr = read_steer::getstringarray(KeyDescr).size(); + unsigned int NValsLO = read_steer::getdoublearray(KeyValuesLO).size(); + unsigned int NValsNLO = read_steer::getdoublearray(KeyValuesNLO).size(); + unsigned int NValsNNLO = read_steer::getdoublearray(KeyValuesNNLO).size(); + unsigned int NFacs = read_steer::getdoublearray(KeyFacs).size(); + double relfac = 1.; + if ( NFacs == 0 ) { + } else if ( NFacs == 1 ) { + relfac = read_steer::getdoublearray(KeyFacs)[0]; + } else { + error["fnlo-tk-modify"]<<"Only one multiplicative factor allowed, but found more. Aborted! NFacs = " << NFacs <<endl; + exit(39); + } + std::vector<std::string> Description; + if ( NDescr > 0 ) { + for ( unsigned int j = 0; j < NDescr; j++ ) { + Description.push_back(read_steer::getstringarray(KeyDescr)[j]); + } + } else { + Description.push_back(Default); + } + vector<double> cont_LO = read_steer::getdoublearray(KeyValuesLO); + vector<double> cont_NLO = read_steer::getdoublearray(KeyValuesNLO); + vector<double> cont_NNLO = read_steer::getdoublearray(KeyValuesNNLO); + for ( unsigned int i = 0; i < NValsLO; i++ ) cont_LO[i] = relfac*cont_LO[i]; + for ( unsigned int i = 0; i < NValsNLO; i++ ) cont_NLO[i] = relfac*cont_NLO[i]; + for ( unsigned int i = 0; i < NValsNNLO; i++ ) cont_NNLO[i] = relfac*cont_NNLO[i]; + int Ncontrib = table.GetNcontrib(); + int ic = 0; + for ( int i = 0; i < Ncontrib; i++ ) { + fastNLOCoeffBase* c = table.GetCoeffTable(i); + if ( fastNLOCoeffAddBase::CheckCoeffConstants(c,true) ) { + int iFlag1 = read_steer::getint(KeyFlag1); + int iFlag2 = read_steer::getint(KeyFlag2); + if ( c->IsLO() && NValsLO > 0 ) { + info["fnlo-tk-modify"]<<"Found LO contribution " << i << endl; + if ( cont_LO.size() == 0 ) { + warn["fnlo-tk-modify"]<<"Found LO contribution, but no additional values! Nothing added." << endl; + } else if ( cont_LO.size() != nobs ) { + error["fnlo-tk-modify"]<<"You need the same number of values, cont_LO = " << cont_LO.size() << + ", than bins in the table, nobsbin = " << nobs << ". Aborted!" << endl; + exit(1); + } else { + c->AddCoeffInfoBlock(iFlag1,iFlag2,Description,cont_LO); + } + ic += 1; + } else if ( c->IsNLO() && NValsNLO > 0) { + info["fnlo-tk-modify"]<<"Found NLO contribution " << i << endl; + if ( cont_NLO.size() == 0 ) { + warn["fnlo-tk-modify"]<<"Found NLO contribution, but no additional values! Nothing added." << endl; + } else if ( cont_NLO.size() != nobs ) { + error["fnlo-tk-modify"]<<"You need the same number of values, cont_NLO = " << cont_NLO.size() << + ", than bins in the table, nobsbin = " << nobs << ". Aborted!" << endl; + exit(1); + } else { + c->AddCoeffInfoBlock(iFlag1,iFlag2,Description,cont_NLO); + } + ic += 1; + } else if ( c->IsNNLO() && NValsNNLO > 0) { + info["fnlo-tk-modify"]<<"Found NNLO contribution " << i << endl; + if ( cont_NNLO.size() == 0 ) { + warn["fnlo-tk-modify"]<<"Found NNLO contribution, but no additional values! Nothing added." << endl; + } else if ( cont_NNLO.size() != nobs ) { + error["fnlo-tk-modify"]<<"You need the same number of values, cont_NNLO = " << cont_NNLO.size() << + ", than bins in the table, nobsbin = " << nobs << ". Aborted!" << endl; + exit(1); + } else { + c->AddCoeffInfoBlock(iFlag1,iFlag2,Description,cont_NNLO); + } + ic += 1; } else { - c->AddCoeffInfoBlock(iFlag1,iFlag2,Description,dstrel_NNLO); + info["fnlo-tk-modify"]<<"Unknown contribution " << i << endl; + info["fnlo-tk-modify"]<<"Nothing changed." << endl; } - ic += 1; - } else { - info["fnlo-tk-modify"]<<"Unknown contribution " << i << endl; - info["fnlo-tk-modify"]<<"Nothing changed." << endl; } } } - } - //! Add InfoBlocks with statistical uncertainty from file (NNLOJET .dat, fnlo-tk-statunc .log, or .txt) - else if ( !STRING_ARR(InfoBlockFiles).empty() && - !STRING_ARR(InfoBlockOrders).empty() ) { - if ( !INT_ARR(RemoveBins).empty() ) { - info["fnlo-tk-modify"]<<"Do NOT erase bins while adding InfoBlocks or vice versa! Aborted."<<endl; - exit(25); - } else { - info["fnlo-tk-modify"]<<"Adding InfoBlocks to contributions."<<endl; - } - unsigned int NFiles = STRING_ARR(InfoBlockFiles).size(); - unsigned int NCols = INT_ARR(InfoBlockFileColumns).size(); - unsigned int NOrders = STRING_ARR(InfoBlockOrders).size(); - unsigned int NDescr = STRING_ARR(InfoBlockDescr).size(); - if ( NFiles != NOrders ) { - error["fnlo-tk-modify"]<<"Need one order specification per file, aborted! Found NFiles = " << NFiles << ", and NOrders = " << NOrders <<endl; - exit(37); - } - unsigned int icola = 0; - unsigned int icolb = 0; - if ( NCols == 0 ) { - } else if ( NCols == 1 ) { - icola = INT_ARR(InfoBlockFileColumns)[0]; - } else if ( NCols == 2 ) { - icola = INT_ARR(InfoBlockFileColumns)[0]; - icolb = INT_ARR(InfoBlockFileColumns)[1]; - } else { - error["fnlo-tk-modify"]<<"Up to two column numbers allowed, but found more. Aborted! NCols = " << NCols <<endl; - exit(38); - } - if ( NDescr > 1 ) { - error["fnlo-tk-modify"]<<"Only one description line allowed for all blocks, aborted! NDescr = " << NDescr << endl; - exit(39); - } - for ( unsigned int i = 0; i < NFiles; i++ ){ - info["fnlo-tk-modify"]<<"InfoBlock file no. " << i << " is: " << STRING_ARR(InfoBlockFiles)[i] << endl; - } - for ( unsigned int i = 0; i < NOrders; i++ ){ - info["fnlo-tk-modify"]<<"InfoBlock order no. " << i << " is: " << STRING_ARR(InfoBlockOrders)[i] << endl; - } - int Ncontrib = table.GetNcontrib(); - int ic = 0; - std::string Default = "Please provide description!"; - for ( int i = 0; i < Ncontrib; i++ ) { - fastNLOCoeffBase* c = table.GetCoeffTable(i); - if ( fastNLOCoeffAddBase::CheckCoeffConstants(c,true) ) { - int iFlag1 = IBFlag1; - int iFlag2 = IBFlag2; - if ( EXIST(InfoBlockFlag1) ) { iFlag1 = INT(InfoBlockFlag1); } - if ( EXIST(InfoBlockFlag2) ) { iFlag2 = INT(InfoBlockFlag2); } - if ( c->IsLO() ) { - info["fnlo-tk-modify"]<<"Found LO contribution " << i << endl; - int ilo = 0; - if ( NOrders > 1 ) { - for ( unsigned int j = 0; j < NFiles; j++ ) { - if (STRING_ARR(InfoBlockOrders)[j] == "LO") { - ilo = j; + //! Add InfoBlocks with additonal information from file (NNLOJET .dat, fnlo-tk-statunc .log, or .txt) + else if ( !read_steer::getstringarray(KeyFiles).empty() && + !read_steer::getstringarray(KeyOrders).empty() ) { + if ( !INT_ARR(RemoveBins).empty() ) { + info["fnlo-tk-modify"]<<"Do NOT erase bins while adding InfoBlocks or vice versa! Aborted."<<endl; + exit(25); + } else { + info["fnlo-tk-modify"]<<"Adding InfoBlocks to contributions."<<endl; + } + unsigned int NDescr = read_steer::getstringarray(KeyDescr).size(); + unsigned int NOrders = read_steer::getstringarray(KeyOrders).size(); + unsigned int NFiles = read_steer::getstringarray(KeyFiles).size(); + unsigned int NCols = read_steer::getintarray(KeyColumns).size(); + unsigned int NFacs = read_steer::getdoublearray(KeyFacs).size(); + if ( NFiles != NOrders ) { + error["fnlo-tk-modify"]<<"Need one order specification per file, aborted! Found NFiles = " << NFiles << ", and NOrders = " << NOrders <<endl; + exit(37); + } + unsigned int icola = 0; + unsigned int icolb = 0; + if ( NCols == 0 ) { + } else if ( NCols == 1 ) { + icola = read_steer::getintarray(KeyColumns)[0]; + } else if ( NCols == 2 ) { + icola = read_steer::getintarray(KeyColumns)[0]; + icolb = read_steer::getintarray(KeyColumns)[1]; + } else { + error["fnlo-tk-modify"]<<"Up to two column numbers allowed, but found more. Aborted! NCols = " << NCols <<endl; + exit(38); + } + double relfac = 1.; + if ( NFacs == 0 ) { + } else if ( NFacs == 1 ) { + relfac = read_steer::getdoublearray(KeyFacs)[0]; + } else { + error["fnlo-tk-modify"]<<"Only one multiplicative factor allowed, but found more. Aborted! NFacs = " << NFacs <<endl; + exit(39); + } + for ( unsigned int i = 0; i < NFiles; i++ ){ + info["fnlo-tk-modify"]<<"InfoBlock file no. " << i << " is: " << read_steer::getstringarray(KeyFiles)[i] << endl; + } + for ( unsigned int i = 0; i < NOrders; i++ ){ + info["fnlo-tk-modify"]<<"InfoBlock order no. " << i << " is: " << read_steer::getstringarray(KeyOrders)[i] << endl; + } + std::vector<std::string> Description; + if ( NDescr > 0 ) { + for ( unsigned int j = 0; j < NDescr; j++ ) { + Description.push_back(read_steer::getstringarray(KeyDescr)[j]); + } + } else { + Description.push_back(Default); + } + int Ncontrib = table.GetNcontrib(); + int ic = 0; + for ( int i = 0; i < Ncontrib; i++ ) { + fastNLOCoeffBase* c = table.GetCoeffTable(i); + if ( fastNLOCoeffAddBase::CheckCoeffConstants(c,true) ) { + int iFlag1 = read_steer::getint(KeyFlag1); + int iFlag2 = read_steer::getint(KeyFlag2); + if ( c->IsLO() ) { + info["fnlo-tk-modify"]<<"Found LO contribution " << i << endl; + int ilo = 0; + if ( NOrders > 1 ) { + for ( unsigned int j = 0; j < NFiles; j++ ) { + if (read_steer::getstringarray(KeyOrders)[j] == "LO") { + ilo = j; + } } } - } - std::vector<std::string> Description; - if ( NDescr > 0 ) { - Description.push_back(STRING_ARR(InfoBlockDescr)[0]); - } else { - Description.push_back(Default); - } - c->AddCoeffInfoBlock(iFlag1,iFlag2,Description,STRING_ARR(InfoBlockFiles)[ilo],icola,icolb); - ic += 1; - } else if ( c->IsNLO() ) { - info["fnlo-tk-modify"]<<"Found NLO contribution " << i << endl; - int inlo = 0; - if ( NOrders > 1 ) { - for ( unsigned int j = 0; j < NFiles; j++ ) { - if (STRING_ARR(InfoBlockOrders)[j] == "NLO") { - inlo = j; + c->AddCoeffInfoBlock(iFlag1,iFlag2,Description,read_steer::getstringarray(KeyFiles)[ilo],icola,icolb,relfac); + ic += 1; + } else if ( c->IsNLO() ) { + info["fnlo-tk-modify"]<<"Found NLO contribution " << i << endl; + int inlo = 0; + if ( NOrders > 1 ) { + for ( unsigned int j = 0; j < NFiles; j++ ) { + if (read_steer::getstringarray(KeyOrders)[j] == "NLO") { + inlo = j; + } } } - } - std::vector <std:: string> Description; - if ( NDescr > 0 ) { - Description.push_back(STRING_ARR(InfoBlockDescr)[0]); - } else { - Description.push_back(Default); - } - c->AddCoeffInfoBlock(iFlag1,iFlag2,Description,STRING_ARR(InfoBlockFiles)[inlo],icola,icolb); - ic += 1; - } else if ( c->IsNNLO() ) { - info["fnlo-tk-modify"]<<"Found NNLO contribution " << i << endl; - int innlo = 0; - if ( NOrders > 1 ) { - for ( unsigned int j = 0; j < NFiles; j++ ) { - if (STRING_ARR(InfoBlockOrders)[j] == "NNLO") { - innlo = j; + c->AddCoeffInfoBlock(iFlag1,iFlag2,Description,read_steer::getstringarray(KeyFiles)[inlo],icola,icolb,relfac); + ic += 1; + } else if ( c->IsNNLO() ) { + info["fnlo-tk-modify"]<<"Found NNLO contribution " << i << endl; + int innlo = 0; + if ( NOrders > 1 ) { + for ( unsigned int j = 0; j < NFiles; j++ ) { + if (read_steer::getstringarray(KeyOrders)[j] == "NNLO") { + innlo = j; + } } } - } - std::vector <std:: string> Description; - if ( NDescr > 0 ) { - Description.push_back(STRING_ARR(InfoBlockDescr)[0]); + c->AddCoeffInfoBlock(iFlag1,iFlag2,Description,read_steer::getstringarray(KeyFiles)[innlo],icola,icolb,relfac); + ic += 1; } else { - Description.push_back(Default); + info["fnlo-tk-modify"]<<"Unknown contribution " << i << endl; + info["fnlo-tk-modify"]<<"Nothing changed." << endl; } - c->AddCoeffInfoBlock(iFlag1,iFlag2,Description,STRING_ARR(InfoBlockFiles)[innlo],icola,icolb); - ic += 1; - } else { - info["fnlo-tk-modify"]<<"Unknown contribution " << i << endl; - info["fnlo-tk-modify"]<<"Nothing changed." << endl; } } } diff --git a/v2.5/toolkit/src/fnlo-tk-rootout.cc b/v2.6/toolkit/src/fnlo-tk-rootout.cc similarity index 99% rename from v2.5/toolkit/src/fnlo-tk-rootout.cc rename to v2.6/toolkit/src/fnlo-tk-rootout.cc index a6a29cc7fa084f32487840c06b1c1cbe7ce917e7..17b2388be3dcd07be411998889f6c2df7ae46bf1 100644 --- a/v2.5/toolkit/src/fnlo-tk-rootout.cc +++ b/v2.6/toolkit/src/fnlo-tk-rootout.cc @@ -108,7 +108,7 @@ int main(int argc, char** argv) { infosep << _SSEPSC << endl; infosep << " #" << endl; info["fnlo-tk-rootout"] << "This program evaluates a fastNLO table and" << endl; - info["fnlo-tk-rootout"] << "prints out cross sections with statistical (if available), " << endl; + info["fnlo-tk-rootout"] << "prints out cross sections with numerical (if available), " << endl; info["fnlo-tk-rootout"] << "scale, or PDF uncertainties in ROOT format." << endl; info["fnlo-tk-rootout"] << "" << endl; info["fnlo-tk-rootout"] << "TODO: Provide more info on ROOT histogram numbering/labelling ..." << endl; @@ -168,7 +168,7 @@ int main(int argc, char** argv) { EScaleUncertaintyStyle eScaleUnc = kScaleNone; EPDFUncertaintyStyle ePDFUnc = kPDFNone; // EAsUncertaintyStyle eAsUnc = kAsNone; - EStatUncertaintyStyle eStatUnc = kStatNone; + ENumUncertaintyStyle eNumUnc = kNumNone; string chunc; if (argc > 3) { chunc = (const char*) argv[3]; @@ -360,7 +360,7 @@ int main(int argc, char** argv) { if ( fnlo->IsNorm() ) { lNorm = true; } else { - error["fnlo-read"] << "Normalization requested but not defined for this table, aborted!" << endl; + error["fnlo-tk-rootout"] << "Normalization requested but not defined for this table, aborted!" << endl; exit(1); } } @@ -502,8 +502,8 @@ int main(int argc, char** argv) { if (ITabVersion < 25000) { info["fnlo-tk-rootout"] << "Table version " << ITabVersion << "too small; statistical uncertainties not available." << endl; } - eStatUnc = kStatInt; - XsUnc = fnlo->GetXsUncertainty(eStatUnc, lNorm); + eNumUnc = kStatInt; + XsUnc = fnlo->GetXsUncertainty(eNumUnc, lNorm); string chname = "ST"; UncName = " # Relative statistical uncertainties (" + chname + " " + PDFFiles[iPDF] + " " + sOrder + ")"; LineName += "_dxst"; diff --git a/v2.5/toolkit/src/fnlo-tk-statunc.cc b/v2.6/toolkit/src/fnlo-tk-statunc.cc similarity index 100% rename from v2.5/toolkit/src/fnlo-tk-statunc.cc rename to v2.6/toolkit/src/fnlo-tk-statunc.cc diff --git a/v2.5/toolkit/src/fnlo-tk-yodaout.cc b/v2.6/toolkit/src/fnlo-tk-yodaout.cc similarity index 97% rename from v2.5/toolkit/src/fnlo-tk-yodaout.cc rename to v2.6/toolkit/src/fnlo-tk-yodaout.cc index 6b6d299d3b759cccaf63421b9d480649bbbfc29c..23b6d571c36a979609e2ae66883afe2f00d92b31 100644 --- a/v2.5/toolkit/src/fnlo-tk-yodaout.cc +++ b/v2.6/toolkit/src/fnlo-tk-yodaout.cc @@ -100,7 +100,7 @@ int main(int argc, char** argv) { infosep << _SSEPSC << endl; infosep << " #" << endl; info["fnlo-tk-yodaout"] << "This program evaluates a fastNLO table and" << endl; - info["fnlo-tk-yodaout"] << "prints out cross sections with statistical (if available), " << endl; + info["fnlo-tk-yodaout"] << "prints out cross sections with numerical (if available), " << endl; info["fnlo-tk-yodaout"] << "scale, or PDF uncertainties in YODA format for use with Rivet." << endl; info["fnlo-tk-yodaout"] << "For this to work, the scenario description must contain" << endl; info["fnlo-tk-yodaout"] << "the Rivet ID in the form 'RIVET_ID=EXP_YYYY_INSPIREID/Dii-xjj-ykk'," << endl; @@ -130,6 +130,7 @@ int main(int argc, char** argv) { man << " L6 (LHAPDF6 PDF uncertainty --> LHAPDF6 PDFs)" << endl; man << " AS (a_s(M_Z) variation uncertainty with GRV evolution)" << endl; man << " ST (statistical uncertainty of x section calculation, if available)" << endl; + man << " AB (approximation bias of x section interpolation, if available)" << endl; man << "[order]: Fixed-order precision to use, def. = NLO" << endl; man << " Alternatives: LO, NLO_only, NNLO, NNLO_only (if available)" << endl; man << "[norm]: Normalize if applicable, def. = no." << endl; @@ -173,7 +174,7 @@ int main(int argc, char** argv) { EScaleUncertaintyStyle eScaleUnc = kScaleNone; EPDFUncertaintyStyle ePDFUnc = kPDFNone; EAsUncertaintyStyle eAsUnc = kAsNone; - EStatUncertaintyStyle eStatUnc = kStatNone; + ENumUncertaintyStyle eNumUnc = kNumNone; string chunc; if (argc > 3) { chunc = (const char*) argv[3]; @@ -215,8 +216,11 @@ int main(int argc, char** argv) { eAsUnc = kAsGRV; shout["fnlo-tk-yodaout"] << "Showing a_s(M_Z) uncertainty with GRV evolution." << endl; } else if ( chunc == "ST" ) { - eStatUnc = kStatInt; + eNumUnc = kStatInt; shout["fnlo-tk-yodaout"] << "Showing statistical uncertainty of x section calculation." << endl; + } else if ( chunc == "AB" ) { + eNumUnc = kApproxBias; + shout["fnlo-tk-yodaout"] << "Showing approximation bias from interpolation of x section calculation." << endl; } else { error["fnlo-tk-yodaout"] << "Illegal choice of uncertainty, " << chunc << ", aborted!" << endl; exit(1); @@ -499,6 +503,7 @@ int main(int argc, char** argv) { XsUncertainty XsUnc; string LineName; string UncName; + string HeadLine = " # bin cross_section lower_uncertainty upper_uncertainty"; if ( chunc == "2P" || chunc == "6P" || chunc == "30") { XsUnc = fnlo->GetXsUncertainty(eScaleUnc, lNorm, sclfac); UncName = " # Relative scale uncertainties"; @@ -508,9 +513,14 @@ int main(int argc, char** argv) { UncName = " # Relative a_s(M_Z) uncertainties"; LineName += "_dxa_s"; } else if ( chunc == "ST" ) { - XsUnc = fnlo->GetXsUncertainty(eStatUnc, lNorm); + XsUnc = fnlo->GetXsUncertainty(eNumUnc, lNorm); UncName = " # Relative statistical uncertainties"; LineName += "_dxst"; + } else if ( chunc == "AB" ) { + XsUnc = fnlo->GetXsUncertainty(eNumUnc, lNorm); + UncName = " # Relative interpolation bias"; + LineName += "_dxab"; + HeadLine = " # bin cross_section reference_value relative_deviation"; } else if ( chunc != "none" ) { XsUnc = fnlo->GetXsUncertainty(ePDFUnc, lNorm); UncName = " # Relative PDF uncertainties"; @@ -521,7 +531,7 @@ int main(int argc, char** argv) { LineName += "_dxnone"; } UncName = UncName + " (" + chunc + " " + PDFFile + " " + sOrder + ")"; - fastNLOTools::PrintXSUncertainty(XsUnc, UncName); + fastNLOTools::PrintXSUncertainty(XsUnc, UncName, HeadLine); //! --- Get RivetID //! For 2+-dimensions determine running number in Rivet plot name by spotting the capital letter in "RIVET_ID=" in the fnlo table