diff --git a/validphys2/src/validphys/commondataparser.py b/validphys2/src/validphys/commondataparser.py index ab2cbaf8c5..78394436e0 100644 --- a/validphys2/src/validphys/commondataparser.py +++ b/validphys2/src/validphys/commondataparser.py @@ -12,6 +12,9 @@ from validphys.core import peek_commondata_metadata from validphys.coredata import CommonData +import logging + +log = logging.getLogger(__name__) def load_commondata(spec): """ @@ -89,3 +92,81 @@ def parse_systypes(systypefile): systypetable.set_index("sys_index", inplace=True) return systypetable + + + +def write_commondata_data(commondata, buffer): + """ + write commondata table to buffer, this can be a memory map, + compressed archive or strings (using for instance StringIO) + + + Parameters + ---------- + + commondata : validphys.coredata.CommonData + + buffer : memory map, compressed archive or strings + example: StringIO object + + + Example + ------- + >>> from validphys.loader import Loader + >>> from io import StringIO + + >>> l = Loader() + >>> cd = l.check_commondata("NMC").load_commondata_instance() + >>> sio = StringIO() + >>> write_commondata_data(cd,sio) + >>> print(sio.getvalue()) + + """ + header = f"{commondata.setname} {commondata.nsys} {commondata.ndata}\n" + buffer.write(header) + commondata.commondata_table.to_csv(buffer, sep="\t", header=None) + +def write_commondata_to_file(commondata,path): + """ + write commondata table to file + """ + with open(path,"w") as file: + write_commondata_data(commondata,file) + +def write_systype_data(commondata, buffer): + """ + write systype table to buffer, this can be a memory map, + compressed archive or strings (using for instance StringIO) + + + Parameters + ---------- + + commondata : validphys.coredata.CommonData + + buffer : memory map, compressed archive or strings + example: StringIO object + + + Example + ------- + >>> from validphys.loader import Loader + >>> from io import StringIO + + >>> l = Loader() + >>> cd = l.check_commondata("NMC").load_commondata_instance() + >>> sio = StringIO() + >>> write_systype_data(cd,sio) + >>> print(sio.getvalue()) + + """ + header = f"{commondata.nsys}\n" + buffer.write(header) + commondata.systype_table.to_csv(buffer, sep="\t", header=None) + +def write_systype_to_file(commondata,path): + """ + write systype table to file + """ + with open(path,"w") as file: + write_systype_data(commondata,file) diff --git a/validphys2/src/validphys/core.py b/validphys2/src/validphys/core.py index 694135e3ae..161a3b0bb9 100644 --- a/validphys2/src/validphys/core.py +++ b/validphys2/src/validphys/core.py @@ -316,6 +316,13 @@ def load(self)->CommonData: #TODO: Use better path handling in python 3.6 return CommonData.ReadFile(str(self.datafile), str(self.sysfile)) + def load_commondata_instance(self): + """ + load a validphys.core.CommonDataSpec to validphys.core.CommonData + """ + from validphys.commondataparser import load_commondata + return load_commondata(self) + @property def plot_kinlabels(self): return get_plot_kinlabels(self) @@ -656,6 +663,19 @@ def load(self): def load_commondata(self): return [d.load_commondata() for d in self.datasets] + def load_commondata_instance(self): + """ + Given Experiment load list of validphys.coredata.CommonData + objects with cuts already applied + """ + commodata_list = [] + for dataset in self.datasets: + if dataset.cuts is None: + commodata_list.append(dataset.commondata.load_commondata_instance()) + else: + commodata_list.append(dataset.commondata.load_commondata_instance().with_cuts(dataset.cuts.load())) + return commodata_list + @property def thspec(self): #TODO: Is this good enough? Should we explicitly pass the theory diff --git a/validphys2/src/validphys/coredata.py b/validphys2/src/validphys/coredata.py index 5e73e3777f..e3819d7b2c 100644 --- a/validphys2/src/validphys/coredata.py +++ b/validphys2/src/validphys/coredata.py @@ -288,6 +288,11 @@ def with_cuts(self, cuts): def central_values(self): return self.commondata_table["data"] + def with_central_value(self, cv): + tb = self.commondata_table.copy() + tb["data"] = cv + return dataclasses.replace(self, commondata_table=tb) + @property def stat_errors(self): return self.commondata_table["stat"] diff --git a/validphys2/src/validphys/filters.py b/validphys2/src/validphys/filters.py index 913f883e8b..949352ff63 100644 --- a/validphys2/src/validphys/filters.py +++ b/validphys2/src/validphys/filters.py @@ -94,7 +94,7 @@ def prepare_nnpdf_rng(filterseed:int, rngalgo:int, seed:int): RandomGenerator.GetRNG().SetSeed(filterseed) @check_positive('errorsize') -def filter_closure_data(filter_path, data, fakepdf, fakenoise, errorsize, prepare_nnpdf_rng): +def filter_closure_data(filter_path, data, fakepdf, fakenoise, filterseed, errorsize): """Filter closure data. In addition to cutting data points, the data is generated from an underlying ``fakepdf``, applying a shift to the data if ``fakenoise`` is ``True``, which emulates the experimental central values @@ -103,12 +103,13 @@ def filter_closure_data(filter_path, data, fakepdf, fakenoise, errorsize, prepar """ log.info('Filtering closure-test data.') return _filter_closure_data( - filter_path, data, fakepdf, fakenoise, errorsize) + filter_path, data, fakepdf, fakenoise, filterseed, errorsize) @check_positive("errorsize") def filter_closure_data_by_experiment( - filter_path, experiments_data, fakepdf, fakenoise, errorsize, prepare_nnpdf_rng, + filter_path, experiments_data, fakepdf, fakenoise, filterseed + , errorsize, experiments_index ): """ Like :py:func:`filter_closure_data` except filters data by experiment. @@ -119,10 +120,14 @@ def filter_closure_data_by_experiment( not reproducible. """ - return [ - _filter_closure_data(filter_path, exp, fakepdf, fakenoise, errorsize) - for exp in experiments_data - ] + + res = [] + for exp in experiments_data: + experiment_index = experiments_index[experiments_index.isin([exp.name],level=0)] + res.append(_filter_closure_data(filter_path, exp, fakepdf, fakenoise, + filterseed, errorsize, experiment_index)) + + return res def filter_real_data(filter_path, data): @@ -157,6 +162,8 @@ def _write_ds_cut_data(path, dataset): def _filter_real_data(filter_path, data): """Filter real experimental data.""" + + total_data_points = 0 total_cut_data_points = 0 for dataset in data.datasets: @@ -168,24 +175,95 @@ def _filter_real_data(filter_path, data): return total_data_points, total_cut_data_points -def _filter_closure_data(filter_path, data, fakepdf, fakenoise, errorsize): - """Filter closure test data.""" +def _filter_closure_data(filter_path, data, fakepdf, fakenoise, filterseed, errorsize, experiments_index): + """ + This function is accessed within a closure test only, that is, the fakedata + namespace has to be True (If fakedata = False, the _filter_real_data function + will be used to write the commondata files). + + The function writes commondata and systypes files within the + name_closure_test/filter folder. + If fakenoise is True, Level 1 type data is written to the filter folder, otherwise + Level 0 data is written. + + Level 1 data is generated from the Level 0 data by adding noise sampled from + the experimental covariance matrix using the validphys.pseudodata.make_replica + function. + + Parameters + ---------- + + filter_path : str + path to filter folder + + data : validphys.core.DataGroupSpec + + fakepdf : validphys.core.PDF + + fakenoise : bool + if fakenoise perform level1 shift of central data values + + filterseed : int + random seed used for the generation of + random noise added to Level 0 data + + errorsize : float + (defined in runcard) + + experiments_index : pandas.MultiIndex + + + Returns + ------- + tuple + total data points and points passing the cuts + + """ + total_data_points = 0 total_cut_data_points = 0 - fakeset = fakepdf.legacy_load() # Load data, don't cache result loaded_data = data.load.__wrapped__(data) - # generate level 1 shift if fakenoise - loaded_data.MakeClosure(fakeset, fakenoise) + + from validphys.pseudodata import level0_commondata_wc + level0_commondata_instances_wc = level0_commondata_wc(data,fakepdf) + commondata_instances_wc = data.load_commondata_instance() # used to generate experimental covariance matrix + for j, dataset in enumerate(data.datasets): + #== print number of points passing cuts, make dataset directory and write FKMASK ==# path = filter_path / dataset.name nfull, ncut = _write_ds_cut_data(path, dataset) + make_dataset_dir(path / "systypes") total_data_points += nfull total_cut_data_points += ncut + # Rescale errors loaded_ds = loaded_data.GetSet(j) if errorsize != 1.0: loaded_ds.RescaleErrors(errorsize) - loaded_ds.Export(str(path)) + + from validphys.commondataparser import write_commondata_to_file, write_systype_to_file + if not fakenoise: + #======= Level 0 closure test =======# + log.info("Writing Level0 data") + for l0_cd in level0_commondata_instances_wc: + path_cd = filter_path / l0_cd.setname / f"DATA_{l0_cd.setname}.dat" + path_sys = filter_path / l0_cd.setname / "systypes" / f"SYSTYPE_{l0_cd.setname}_DEFAULT.dat" + write_commondata_to_file(commondata=l0_cd,path=path_cd) + write_systype_to_file(commondata=l0_cd,path=path_sys) + + else: + #======= Level 1 closure test =======# + from validphys.pseudodata import make_level1_data + level1_commondata_instances_wc = make_level1_data(data,commondata_instances_wc,level0_commondata_instances_wc, + filterseed, experiments_index) + #====== write commondata and systype files ======# + log.info("Writing Level1 data") + for l1_cd in level1_commondata_instances_wc: + path_cd = filter_path / l1_cd.setname / f"DATA_{l1_cd.setname}.dat" + path_sys = filter_path / l1_cd.setname / "systypes" / f"SYSTYPE_{l1_cd.setname}_DEFAULT.dat" + write_commondata_to_file(commondata=l1_cd,path=path_cd) + write_systype_to_file(commondata=l1_cd,path=path_sys) + return total_data_points, total_cut_data_points diff --git a/validphys2/src/validphys/pseudodata.py b/validphys2/src/validphys/pseudodata.py index 142072e0d6..f9feb0977d 100644 --- a/validphys2/src/validphys/pseudodata.py +++ b/validphys2/src/validphys/pseudodata.py @@ -236,7 +236,121 @@ def indexed_make_replica(groups_index, make_replica): return pd.DataFrame(make_replica, index=groups_index, columns=["data"]) +def level0_commondata_wc(data,fakepdf): + """ + Given a validphys.core.DataGroupSpec object, load commondata and + generate a new commondata instance with central values replaced + by fakepdf prediction + + Parameters + ---------- + + data : validphys.core.DataGroupSpec + + fakepdf: validphys.core.PDF + + Returns + ------- + list + list of validphys.coredata.CommonData instances corresponding to + all datasets within one experiment. The central value is replaced + by Level 0 fake data. + + Example + ------- + >>> from validphys.api import API + >>> API.level0_commondata_wc(dataset_inputs = [{"dataset":"NMC"}], use_cuts="internal", theoryid=200,fakepdf = "NNPDF40_nnlo_as_01180") + + [CommonData(setname='NMC', ndata=204, commondataproc='DIS_NCE', nkin=3, nsys=16)] + """ + level0_commondata_instances_wc = [] + + #==== Load validphys.coredata.CommonData instance with cuts ====# + + for j, dataset in enumerate(data.datasets): + if dataset.cuts is None: + commondata_wc = dataset.commondata.load_commondata_instance() + else: + cuts = dataset.cuts.load() + commondata_wc = dataset.commondata.load_commondata_instance().with_cuts(cuts) + + + #== Generate a new CommonData instance with central value given by Level 0 data generated with fakepdf ==# + from validphys.covmats import dataset_t0_predictions + t0_prediction = dataset_t0_predictions(dataset=dataset, t0set=fakepdf) # N.B. cuts already applied to th. pred. + level0_commondata_instances_wc.append(commondata_wc.with_central_value(t0_prediction)) + + return level0_commondata_instances_wc + + +def make_level1_data(data,commondata_wc,level0_commondata_wc,filterseed,experiments_index): + """ + Given a list of level0 commondata instances, return the same list + with central values replaced by level1 data + + + Parameters + ---------- + + data : validphys.core.DataGroupSpec + + commondata_wc : list + list of validphys.coredata.CommonData instances corresponding to + all datasets within one experiment. Cuts already applied. + + level0_commondata_wc : list + list of validphys.coredata.CommonData instances corresponding to + all datasets within one experiment. The central value is replaced + by Level 0 fake data. Cuts already applied. + + filterseed: int + random seed used for the generation of Level 1 data + + + Returns + ------- + list + list of validphys.coredata.CommonData instances corresponding to + all datasets within one experiment. The central value is replaced + by Level 1 fake data. + + Example + ------- + + >>> from validphys.api import API + >>> dataset='NMC' + >>> l1_cd = API.make_level1_data(dataset_inputs = [{"dataset":dataset}],use_cuts="internal", theoryid=200, + fakepdf = "NNPDF40_nnlo_as_01180",filterseed=1) + >>> l1_cd + [CommonData(setname='NMC', ndata=204, commondataproc='DIS_NCE', nkin=3, nsys=16)] + """ + + #=============== generate experimental covariance matrix ===============# + from validphys.covmats import dataset_inputs_covmat_from_systematics + dataset_input_list = list(data.dsinputs) + + covmat = dataset_inputs_covmat_from_systematics(commondata_wc, dataset_input_list, + use_weights_in_covmat=False, norm_threshold=None, + _list_of_central_values=None, _only_additive=False,) + + #================== generation of pseudo data ======================# + #= generate pseudo data starting from theory predictions + level1_data = make_replica(level0_commondata_wc, filterseed, covmat, + sep_mult=False, genrep=True) + + indexed_level1_data = indexed_make_replica(experiments_index, level1_data) + + #===== create commondata instances with central values given by pseudo_data =====# + level1_commondata_dict = {c.setname:c for c in level0_commondata_wc} + level1_commondata_instances_wc = [] + + for xx, grp in indexed_level1_data.groupby('dataset'): + level1_commondata_instances_wc.append( + level1_commondata_dict[xx].with_central_value(grp.values)) + + return level1_commondata_instances_wc + _group_recreate_pseudodata = collect('indexed_make_replica', ('group_dataset_inputs_by_experiment',)) _recreate_fit_pseudodata = collect('_group_recreate_pseudodata', ('fitreplicas', 'fitenvironment')) _recreate_pdf_pseudodata = collect('_group_recreate_pseudodata', ('pdfreplicas', 'fitenvironment')) diff --git a/validphys2/src/validphys/results.py b/validphys2/src/validphys/results.py index ad76c043ad..531ed599c2 100644 --- a/validphys2/src/validphys/results.py +++ b/validphys2/src/validphys/results.py @@ -224,6 +224,25 @@ def procs_data_values(proc_result_table): data_central_values = proc_result_table["data_central"] return data_central_values +def commondata_wc(data): + """ + commondata with cuts: + given a DataGroupSpec load all the DataSetInput + instances into CommonData instances with cuts + already applied to + + Parameters + ---------- + + data : validphys.core.DataGroupSpec + + Returns + ------- + list containing commondata instances with cuts + + """ + return data.load_commondata_instance() + groups_results = collect( "dataset_inputs_results", ("group_dataset_inputs_by_metadata",) ) diff --git a/validphys2/src/validphys/tests/conftest.py b/validphys2/src/validphys/tests/conftest.py index 74eb4315c3..b76f5073b7 100644 --- a/validphys2/src/validphys/tests/conftest.py +++ b/validphys2/src/validphys/tests/conftest.py @@ -23,6 +23,8 @@ def tmp(tmpdir): # Here define the default config items like the PDF, theory and experiment specs SINGLE_DATAPOINT = {'dataset': 'ATLASTTBARTOT8TEV', 'cfac': ['QCD']} +SINGLE_DATASET = {'dataset': 'NMC'} + DATA = [ {'dataset': 'NMC'}, {'dataset': 'ATLASTTBARTOT', 'cfac':['QCD']}, diff --git a/validphys2/src/validphys/tests/regressions/test_filter_rebuild_closure_data.csv b/validphys2/src/validphys/tests/regressions/test_filter_rebuild_closure_data.csv index f7ce521f40..a46ad353a5 100644 --- a/validphys2/src/validphys/tests/regressions/test_filter_rebuild_closure_data.csv +++ b/validphys2/src/validphys/tests/regressions/test_filter_rebuild_closure_data.csv @@ -1,236 +1,236 @@ group dataset id data_central -NMC NMC 16 0.4007353489505 -NMC NMC 21 0.3596156369461 -NMC NMC 22 0.3696772738631 -NMC NMC 27 0.3662960538326 -NMC NMC 28 0.3671016068397 -NMC NMC 29 0.3911462081599 -NMC NMC 34 0.3873596614146 -NMC NMC 35 0.3685951249355 -NMC NMC 36 0.3652752448135 -NMC NMC 40 0.3782916051482 -NMC NMC 41 0.3910438628795 -NMC NMC 42 0.3733418699219 -NMC NMC 46 0.3810537704863 -NMC NMC 47 0.3708532044501 -NMC NMC 48 0.3593684720153 -NMC NMC 51 0.3693367172184 -NMC NMC 52 0.3737791523646 -NMC NMC 53 0.3386288622738 -NMC NMC 54 0.3500948571991 -NMC NMC 57 0.3418514086764 -NMC NMC 58 0.3489404958264 -NMC NMC 59 0.3488612312165 -NMC NMC 60 0.3505041034015 -NMC NMC 63 0.3333040875332 -NMC NMC 64 0.2944010260022 -NMC NMC 65 0.3099040341106 -NMC NMC 68 0.2811103711856 -NMC NMC 69 0.2595731013581 -NMC NMC 83 0.332503113838 -NMC NMC 84 0.3062223521694 -NMC NMC 87 0.3477451853918 -NMC NMC 88 0.352597827366 -NMC NMC 89 0.3689837642521 -NMC NMC 91 0.3410075219517 -NMC NMC 92 0.3380026268081 -NMC NMC 93 0.3630165854001 -NMC NMC 94 0.3692037594232 -NMC NMC 95 0.3379900856468 -NMC NMC 97 0.3498975977998 -NMC NMC 98 0.3455821206785 -NMC NMC 99 0.3561806744993 -NMC NMC 100 0.3732490901176 -NMC NMC 101 0.3500032818012 -NMC NMC 104 0.3619815034828 -NMC NMC 105 0.3577747301693 -NMC NMC 106 0.3448546937843 -NMC NMC 107 0.3970272458214 -NMC NMC 108 0.3194277040841 -NMC NMC 110 0.3205419458354 -NMC NMC 111 0.3367281886952 -NMC NMC 112 0.3386950891887 -NMC NMC 113 0.3225662456658 -NMC NMC 114 0.29975210255 -NMC NMC 115 0.3258513025439 -NMC NMC 116 0.3369058963301 -NMC NMC 117 0.3302714626432 -NMC NMC 118 0.3149870988695 -NMC NMC 119 0.2993100089626 -NMC NMC 120 0.3368228206002 -NMC NMC 121 0.3102225912073 -NMC NMC 122 0.3180821969045 -NMC NMC 123 0.2933430928775 -NMC NMC 124 0.3098840948832 -NMC NMC 125 0.3231255065332 -NMC NMC 126 0.2902405904389 -NMC NMC 127 0.2669059748255 -NMC NMC 128 0.2689476065289 -NMC NMC 129 0.2956116242333 -NMC NMC 130 0.288082548032 -NMC NMC 131 0.2226505072116 -NMC NMC 132 0.2198391302795 -NMC NMC 133 0.204048963916 -NMC NMC 134 0.2127696389248 -NMC NMC 136 0.1375618648213 -NMC NMC 137 0.1339894685257 -NMC NMC 147 0.3489969251822 -NMC NMC 148 0.3552399410999 -NMC NMC 152 0.3483599212619 -NMC NMC 153 0.3560033903034 -NMC NMC 154 0.3796442730621 -NMC NMC 157 0.3429642181623 -NMC NMC 158 0.3706142444086 -NMC NMC 159 0.355255409241 -NMC NMC 160 0.352842258266 -NMC NMC 161 0.3539020551091 -NMC NMC 162 0.3521469993182 -NMC NMC 163 0.3632537732513 -NMC NMC 164 0.3725308840612 -NMC NMC 165 0.3576604586946 -NMC NMC 166 0.3816526263355 -NMC NMC 167 0.3688809286074 -NMC NMC 168 0.3385882966462 -NMC NMC 169 0.3387628659638 -NMC NMC 170 0.3760634504695 -NMC NMC 171 0.3785323104752 -NMC NMC 172 0.3632421316272 -NMC NMC 173 0.3623753029918 -NMC NMC 174 0.3362183838135 -NMC NMC 175 0.3432266150754 -NMC NMC 176 0.3640134644566 -NMC NMC 177 0.3576634295374 -NMC NMC 178 0.3597463154209 -NMC NMC 179 0.3603372275518 -NMC NMC 180 0.3177940693752 -NMC NMC 181 0.3620568994759 -NMC NMC 182 0.3701314089822 -NMC NMC 183 0.2978652392955 -NMC NMC 184 0.3541449769575 -NMC NMC 185 0.3448722906877 -NMC NMC 186 0.3412588395999 -NMC NMC 187 0.3570684620173 -NMC NMC 188 0.3286891216355 -NMC NMC 189 0.3477526408617 -NMC NMC 190 0.335703925785 -NMC NMC 191 0.3444529842929 -NMC NMC 192 0.3403578691808 -NMC NMC 193 0.3347353981548 -NMC NMC 194 0.3203688496486 -NMC NMC 195 0.3159487761597 -NMC NMC 196 0.3443688712277 -NMC NMC 197 0.3124097261611 -NMC NMC 198 0.3154190766316 -NMC NMC 199 0.2942857811848 -NMC NMC 200 0.2799806891526 -NMC NMC 201 0.2775840928341 -NMC NMC 202 0.2532591445827 -NMC NMC 203 0.2708438289781 -NMC NMC 204 0.254383734349 -NMC NMC 205 0.2584578349333 -NMC NMC 206 0.2288369641399 -NMC NMC 207 0.2168810713002 -NMC NMC 208 0.2203718114199 -NMC NMC 209 0.1847450793115 -NMC NMC 210 0.1459140382753 -NMC NMC 211 0.1143166792701 -NMC NMC 212 0.1267472998114 -NMC NMC 221 0.377311655587 -NMC NMC 222 0.3786167921399 -NMC NMC 225 0.3880648558735 -NMC NMC 226 0.3835579098506 -NMC NMC 227 0.3700815811285 -NMC NMC 229 0.3784519070427 -NMC NMC 230 0.3982216265502 -NMC NMC 231 0.4017000200127 -NMC NMC 232 0.3922919247205 -NMC NMC 233 0.4124193564822 -NMC NMC 234 0.3590905662548 -NMC NMC 235 0.3967950366239 -NMC NMC 236 0.3971726043601 -NMC NMC 237 0.4020683891529 -NMC NMC 238 0.3814902989618 -NMC NMC 239 0.386741867313 -NMC NMC 240 0.369385519281 -NMC NMC 241 0.3814990929537 -NMC NMC 242 0.381564927955 -NMC NMC 243 0.3948804610387 -NMC NMC 244 0.3839173773074 -NMC NMC 245 0.3802441689135 -NMC NMC 246 0.3752499091384 -NMC NMC 247 0.3974188959257 -NMC NMC 248 0.3836237312771 -NMC NMC 249 0.3911270447289 -NMC NMC 250 0.3877800272259 -NMC NMC 251 0.3629868559682 -NMC NMC 252 0.3754088188714 -NMC NMC 253 0.380648396326 -NMC NMC 254 0.379643330629 -NMC NMC 255 0.3717431381859 -NMC NMC 256 0.3850277979529 -NMC NMC 257 0.357666057149 -NMC NMC 258 0.3843712169454 -NMC NMC 259 0.3677026936208 -NMC NMC 260 0.3655736280598 -NMC NMC 261 0.3441364575008 -NMC NMC 262 0.3972401996537 -NMC NMC 263 0.3645143376461 -NMC NMC 264 0.3510977851517 -NMC NMC 265 0.3539138992202 -NMC NMC 266 0.3493708856316 -NMC NMC 267 0.3320087427879 -NMC NMC 268 0.3284299620477 -NMC NMC 269 0.3321367638445 -NMC NMC 270 0.3209261313501 -NMC NMC 271 0.3152880392914 -NMC NMC 272 0.3067196941747 -NMC NMC 273 0.3051998380667 -NMC NMC 274 0.3111118466168 -NMC NMC 275 0.2900155628937 -NMC NMC 276 0.2883840542816 -NMC NMC 277 0.2756559342559 -NMC NMC 278 0.2855005116247 -NMC NMC 279 0.2662589115441 -NMC NMC 280 0.2559570780724 -NMC NMC 281 0.2504174862552 -NMC NMC 282 0.2307957738123 -NMC NMC 283 0.241680108918 -NMC NMC 284 0.2146215617884 -NMC NMC 285 0.211746450436 -NMC NMC 286 0.2128987035927 -NMC NMC 287 0.1935284098196 -NMC NMC 288 0.131946290253 -NMC NMC 289 0.1180789438391 -NMC NMC 290 0.1049547912561 -NMC NMC 291 0.1106025920512 -ATLAS ATLASTTBARTOT 0 162.5686864865 -ATLAS ATLASTTBARTOT 1 236.1859490199 -ATLAS ATLASTTBARTOT 2 830.4482576268 -CMS CMSZDIFF12 1 2914.124612961 -CMS CMSZDIFF12 2 1080.410756147 -CMS CMSZDIFF12 3 466.257652438 -CMS CMSZDIFF12 4 227.8725970988 -CMS CMSZDIFF12 5 112.9922431625 -CMS CMSZDIFF12 6 60.11148107363 -CMS CMSZDIFF12 7 31.01641512591 -CMS CMSZDIFF12 11 2841.234006315 -CMS CMSZDIFF12 12 1045.712255313 -CMS CMSZDIFF12 13 455.7116015988 -CMS CMSZDIFF12 14 208.6895742617 -CMS CMSZDIFF12 15 111.8661789107 -CMS CMSZDIFF12 16 61.01526352725 -CMS CMSZDIFF12 17 30.58163323228 -CMS CMSZDIFF12 21 2534.025669336 -CMS CMSZDIFF12 22 911.9673411774 -CMS CMSZDIFF12 23 415.3681972017 -CMS CMSZDIFF12 24 198.7630470755 -CMS CMSZDIFF12 25 100.2899391664 -CMS CMSZDIFF12 26 56.45171623313 -CMS CMSZDIFF12 27 28.6103128109 -CMS CMSZDIFF12 31 1990.217512849 -CMS CMSZDIFF12 32 728.4681533061 -CMS CMSZDIFF12 33 332.4189366359 -CMS CMSZDIFF12 34 165.4302576598 -CMS CMSZDIFF12 35 88.19728756934 -CMS CMSZDIFF12 36 47.85196748986 -CMS CMSZDIFF12 37 24.06201644101 +NMC NMC 16 0.28019164359912174 +NMC NMC 21 0.35499349354805787 +NMC NMC 22 0.36699960383943325 +NMC NMC 27 0.36514731639520354 +NMC NMC 28 0.3796019817168817 +NMC NMC 29 0.3557283684527493 +NMC NMC 34 0.358213498117281 +NMC NMC 35 0.38344229108403 +NMC NMC 36 0.3906176180402464 +NMC NMC 40 0.3565478540570389 +NMC NMC 41 0.35449556242092534 +NMC NMC 42 0.3477428857498088 +NMC NMC 46 0.34058587588303324 +NMC NMC 47 0.37528607055424945 +NMC NMC 48 0.35810702495585167 +NMC NMC 51 0.35948420833368 +NMC NMC 52 0.3252481995431795 +NMC NMC 53 0.34839699344491915 +NMC NMC 54 0.3305599715630647 +NMC NMC 57 0.33854839805110815 +NMC NMC 58 0.3475248192617279 +NMC NMC 59 0.3224033407693148 +NMC NMC 60 0.3557230755468301 +NMC NMC 63 0.3076864562936749 +NMC NMC 64 0.3249652996062988 +NMC NMC 65 0.3225373982130234 +NMC NMC 68 0.2698593749956943 +NMC NMC 69 0.28697589129899725 +NMC NMC 83 0.3314942368553224 +NMC NMC 84 0.3497035726336489 +NMC NMC 87 0.3561247503065496 +NMC NMC 88 0.36048612554048426 +NMC NMC 89 0.342867775009473 +NMC NMC 91 0.3462149531948183 +NMC NMC 92 0.33322645114254057 +NMC NMC 93 0.3496968402988778 +NMC NMC 94 0.37224312344590277 +NMC NMC 95 0.3501229381653187 +NMC NMC 97 0.34862218791470695 +NMC NMC 98 0.3513864997869911 +NMC NMC 99 0.3463189635741315 +NMC NMC 100 0.34999374714067055 +NMC NMC 101 0.3219866280166407 +NMC NMC 104 0.3136568526784361 +NMC NMC 105 0.3238255813447048 +NMC NMC 106 0.34905991139783304 +NMC NMC 107 0.34365171884104645 +NMC NMC 108 0.2700951102701827 +NMC NMC 110 0.3516749264080651 +NMC NMC 111 0.3420426414588959 +NMC NMC 112 0.3368571659898279 +NMC NMC 113 0.32766489680568944 +NMC NMC 114 0.3309229352262125 +NMC NMC 115 0.3087559452541232 +NMC NMC 116 0.30434091887231657 +NMC NMC 117 0.31985278442485376 +NMC NMC 118 0.3081369779237656 +NMC NMC 119 0.32428991893790204 +NMC NMC 120 0.29177949202546344 +NMC NMC 121 0.2986166917278112 +NMC NMC 122 0.28530172048925173 +NMC NMC 123 0.30960790490633666 +NMC NMC 124 0.2838914377920225 +NMC NMC 125 0.327108232453106 +NMC NMC 126 0.30800213354866085 +NMC NMC 127 0.27505741362840286 +NMC NMC 128 0.3057396895330445 +NMC NMC 129 0.2948720021522578 +NMC NMC 130 0.28654594665723143 +NMC NMC 131 0.24998019481392156 +NMC NMC 132 0.23305710852110711 +NMC NMC 133 0.2285884324760879 +NMC NMC 134 0.21022049472555798 +NMC NMC 136 0.14289441509543208 +NMC NMC 137 0.1467309459465361 +NMC NMC 147 0.3783814687867924 +NMC NMC 148 0.3660143252628356 +NMC NMC 152 0.37316750851562697 +NMC NMC 153 0.38611716465278784 +NMC NMC 154 0.3698410284359639 +NMC NMC 157 0.36961892116181694 +NMC NMC 158 0.40918582365959344 +NMC NMC 159 0.3772237079249307 +NMC NMC 160 0.36695342000619174 +NMC NMC 161 0.37837880076113106 +NMC NMC 162 0.3574940348440908 +NMC NMC 163 0.38209182150349047 +NMC NMC 164 0.38555197565482335 +NMC NMC 165 0.38435365356895423 +NMC NMC 166 0.39523350385236933 +NMC NMC 167 0.352962329300064 +NMC NMC 168 0.33498853883029145 +NMC NMC 169 0.3799963472642203 +NMC NMC 170 0.3626711192860542 +NMC NMC 171 0.3726539470995713 +NMC NMC 172 0.38205670828934024 +NMC NMC 173 0.3624890112249862 +NMC NMC 174 0.351766590223616 +NMC NMC 175 0.38120620112890435 +NMC NMC 176 0.376704707091722 +NMC NMC 177 0.35767966843982835 +NMC NMC 178 0.3739917821379859 +NMC NMC 179 0.3779713226850912 +NMC NMC 180 0.3540178478852946 +NMC NMC 181 0.3563337922341492 +NMC NMC 182 0.3495895799725437 +NMC NMC 183 0.40513857686448185 +NMC NMC 184 0.3737246199455833 +NMC NMC 185 0.34224373934105096 +NMC NMC 186 0.3572968130894208 +NMC NMC 187 0.3513259873499916 +NMC NMC 188 0.36191625620248563 +NMC NMC 189 0.3757225472452201 +NMC NMC 190 0.34496599482267015 +NMC NMC 191 0.3671454519682669 +NMC NMC 192 0.3355832294500817 +NMC NMC 193 0.32611756260750746 +NMC NMC 194 0.3264723091842311 +NMC NMC 195 0.31358299893261243 +NMC NMC 196 0.3063679612675748 +NMC NMC 197 0.3243783766742867 +NMC NMC 198 0.2951522224003636 +NMC NMC 199 0.30478606823022336 +NMC NMC 200 0.3162026195490957 +NMC NMC 201 0.24410226609924124 +NMC NMC 202 0.29437714007416727 +NMC NMC 203 0.29086153651126373 +NMC NMC 204 0.2618537028601226 +NMC NMC 205 0.24746460684350655 +NMC NMC 206 0.22851397088173026 +NMC NMC 207 0.23143418017058778 +NMC NMC 208 0.2083333904728336 +NMC NMC 209 0.1871220049907259 +NMC NMC 210 0.13694037697890943 +NMC NMC 211 0.1410254122612783 +NMC NMC 212 0.10913012127955796 +NMC NMC 221 0.38635187132002613 +NMC NMC 222 0.4142522089627604 +NMC NMC 225 0.40345790673282933 +NMC NMC 226 0.40425695161223724 +NMC NMC 227 0.39659246253718794 +NMC NMC 229 0.4111692386727388 +NMC NMC 230 0.40555697596449714 +NMC NMC 231 0.4035342194456604 +NMC NMC 232 0.4151050115450948 +NMC NMC 233 0.3925537185116469 +NMC NMC 234 0.3991798063407916 +NMC NMC 235 0.42128296044596675 +NMC NMC 236 0.39594826617785617 +NMC NMC 237 0.4132863843007187 +NMC NMC 238 0.4063071052878472 +NMC NMC 239 0.39412536731089337 +NMC NMC 240 0.38212850421302924 +NMC NMC 241 0.3914294452161547 +NMC NMC 242 0.40047857374987483 +NMC NMC 243 0.4008070275555427 +NMC NMC 244 0.40262694743529254 +NMC NMC 245 0.39621958826618797 +NMC NMC 246 0.39102221801161896 +NMC NMC 247 0.3886398830939979 +NMC NMC 248 0.38188378549251667 +NMC NMC 249 0.3988887017211007 +NMC NMC 250 0.39585021194541986 +NMC NMC 251 0.40126477628252327 +NMC NMC 252 0.3964150971271786 +NMC NMC 253 0.3902202435316766 +NMC NMC 254 0.38160232623513723 +NMC NMC 255 0.3839102218492622 +NMC NMC 256 0.39033449259461933 +NMC NMC 257 0.37931861168091624 +NMC NMC 258 0.3709117293446901 +NMC NMC 259 0.3732315660927265 +NMC NMC 260 0.3720221661101343 +NMC NMC 261 0.3517503669287229 +NMC NMC 262 0.36807144164962735 +NMC NMC 263 0.3693458573629922 +NMC NMC 264 0.3592451130180051 +NMC NMC 265 0.35632376909940633 +NMC NMC 266 0.35150220374085334 +NMC NMC 267 0.34496329443474294 +NMC NMC 268 0.33956152225234476 +NMC NMC 269 0.3485667202754675 +NMC NMC 270 0.3391216940975037 +NMC NMC 271 0.33736702477837127 +NMC NMC 272 0.3133373105891819 +NMC NMC 273 0.32982788223049275 +NMC NMC 274 0.3211288416924518 +NMC NMC 275 0.3060547284123289 +NMC NMC 276 0.335436416428492 +NMC NMC 277 0.3073804246714358 +NMC NMC 278 0.294093691234672 +NMC NMC 279 0.2884616638265187 +NMC NMC 280 0.26397391314307916 +NMC NMC 281 0.2444528193940454 +NMC NMC 282 0.27832660956025357 +NMC NMC 283 0.25803828744513574 +NMC NMC 284 0.23389825136222092 +NMC NMC 285 0.2146733551898643 +NMC NMC 286 0.21813290674472682 +NMC NMC 287 0.212151341826686 +NMC NMC 288 0.16141376202106558 +NMC NMC 289 0.13433721471473095 +NMC NMC 290 0.11551212545868192 +NMC NMC 291 0.10901466846254028 +ATLAS ATLASTTBARTOT 0 165.5652425198355 +ATLAS ATLASTTBARTOT 1 245.16706727829992 +ATLAS ATLASTTBARTOT 2 801.771432400817 +CMS CMSZDIFF12 1 2973.4725103674823 +CMS CMSZDIFF12 2 1056.3849990121557 +CMS CMSZDIFF12 3 456.57202617345774 +CMS CMSZDIFF12 4 221.42094319673168 +CMS CMSZDIFF12 5 107.23839580843014 +CMS CMSZDIFF12 6 58.24831168720775 +CMS CMSZDIFF12 7 29.594897586398673 +CMS CMSZDIFF12 11 2828.9994410871873 +CMS CMSZDIFF12 12 1042.0799324021702 +CMS CMSZDIFF12 13 443.3584194436015 +CMS CMSZDIFF12 14 204.46185503728015 +CMS CMSZDIFF12 15 105.84479937812591 +CMS CMSZDIFF12 16 59.79512008357787 +CMS CMSZDIFF12 17 30.620091935371985 +CMS CMSZDIFF12 21 2590.081496607627 +CMS CMSZDIFF12 22 912.4546874257419 +CMS CMSZDIFF12 23 410.2638687475507 +CMS CMSZDIFF12 24 203.38813364945474 +CMS CMSZDIFF12 25 103.36390836336159 +CMS CMSZDIFF12 26 54.7135715358862 +CMS CMSZDIFF12 27 28.40706067537687 +CMS CMSZDIFF12 31 2029.9154133864206 +CMS CMSZDIFF12 32 737.238837202754 +CMS CMSZDIFF12 33 331.45213196343286 +CMS CMSZDIFF12 34 172.74641496097794 +CMS CMSZDIFF12 35 88.99325953676879 +CMS CMSZDIFF12 36 49.525868163359064 +CMS CMSZDIFF12 37 24.187338718035164 diff --git a/validphys2/src/validphys/tests/test_pseudodata.py b/validphys2/src/validphys/tests/test_pseudodata.py index 413975af7c..285be67bd9 100644 --- a/validphys2/src/validphys/tests/test_pseudodata.py +++ b/validphys2/src/validphys/tests/test_pseudodata.py @@ -8,10 +8,12 @@ recreation. """ import pandas as pd +import numpy as np +from numpy.testing import assert_allclose import pytest from validphys.api import API -from validphys.tests.conftest import FIT, PSEUDODATA_FIT +from validphys.tests.conftest import FIT, PSEUDODATA_FIT, THEORYID, SINGLE_DATASET, PDF def test_read_fit_pseudodata(): @@ -80,3 +82,18 @@ def test_read_matches_recreate(): ) pd.testing.assert_index_equal(read.tr_idx, recreate.tr_idx, check_order=False) pd.testing.assert_index_equal(read.val_idx, recreate.val_idx, check_order=False) + + +def test_level0_commondata_wc(): + from validphys.loader import Loader + from validphys.covmats import dataset_t0_predictions + dataset=SINGLE_DATASET + pdfname=PDF + l = Loader() + datasetspec = l.check_dataset(list(dataset.values())[0],theoryid=THEORYID) + t0set = l.check_pdf(pdfname) + l0_cd = API.level0_commondata_wc(dataset_inputs = [dataset], + use_cuts="internal", theoryid=THEORYID, fakepdf = pdfname) + l0_vals = l0_cd[0].central_values + assert_allclose(dataset_t0_predictions(dataset = datasetspec, t0set = t0set), + l0_vals,rtol=1e-07, atol=0) \ No newline at end of file