New ht thcovmat#2126
Conversation
|
Greetings from your nice fit 🤖 !
Check the report carefully, and please buy me a ☕ , or better, a GPU 😉! |
28662e8 to
6b71fae
Compare
d75f1b9 to
8e1dc74
Compare
348be41 to
9ac473c
Compare
|
Hi @roy, I've updated the code so that now the covmat for power corrections can be constructed as in the case of scale variations. Please, look and let me know if something is unclear. I'd like if you could double-check the functions that compute the shifts, in particular when normalisation factors and conversion factors are used. There are few things that I still don't like here and there, but you're free to propose modifications. |
9ac473c to
84642cb
Compare
|
Greetings from your nice fit 🤖 !
Check the report carefully, and please buy me a ☕ , or better, a GPU 😉! |
39f5640 to
ef59af1
Compare
fdab4c9 to
9f286c6
Compare
3c8b923 to
de6497e
Compare
a7e265a to
49bca4f
Compare
scarlehoff
left a comment
There was a problem hiding this comment.
Hi @achiefa thanks for this.
I've left a few comments on the code. The 1000line higher_twist_functions I haven't look into in much detail, but one thing that I'd like to mention is please avoid using commondata_table. This is basically an object containing all commondata information like in the old days which was necessary to add for some of validphys functions but the idea is to instead get only the information you want.
For instance, the process type is part of the metadata now (no need to load the data and uncertainties!)
Same for the kinematics (although by the time you need the kinematics you often have already read the whole commondata). You can get the kinematics directly with cd.metadata.load_kinematics() and then you already have x, Q, and y for DIS as god intended!
32314ea to
d47da56
Compare
d47da56 to
f709249
Compare
Excluded HERACOMB Hacking NMC dataset Grouping kinematics Reimplementing thcovmat Added comment in HT for DIS Corrected normalisation for SIGMARED DIS NC data sets Removing unused code Added HT for F2C data (EMC) - removed deprecated function Corrected EMC data iron target Removed deprecated code Refactoring + DIS CC Corrected bug - ready for cc test Corrected bug - ready Removing unnecessary code Corrected bug after rebase Add normalisation in CC x-secs Correct normalisation Restore n3fit files from master remove _PB suffix from process type format a bit Correct typo + example runcard Update for new thcovmat construction + refactor + docstrings Correct bug Correct nuclear factors for nuclear targets First implementation of jet data Change pc jet dependence from pT to eta Allowing step-function for the prior Vectorize step_function + docstring Correct bug in step function Correct bug in step function Produce covs_pt_prescrip Allow different funcs for posterior Adjusting linear triangular function Correct bug in linear function Implement multiplicative PC for jet Correct docstring Remove unused vp runcard Dijet + clean-up + checks for pc dict Remove translation layer for pc parameters Remove copy of the same collection procs_data -> groups_data_by_process + clean-up Remove unused collect Update basic runcard Allow generation of L1 data Jets with single parameters Adjust format Restoring nodes for jets and dijets
…name H2j_ystar and H2j_ymax
scarlehoff
left a comment
There was a problem hiding this comment.
Left a few comments but haven't run the code yet. I've also look at higher_twist_functions very superficially for now, just got curious about the cuts.
I'm a bit worried about all the if conditions that this one prescription adds and whether it breaks some assumptions in the code. In particular the one where theoryid(s) is a one-item list...
| process_type: DIJET | ||
| # Plotting | ||
| kinematic_coverage: [ydiff, m_jj, sqrts] | ||
| kinematic_coverage: [ymax, m_jj, sqrts] |
There was a problem hiding this comment.
Are these changes necessary / should they be in this PR?
There was a problem hiding this comment.
I checked this with Emanuele, and we concluded that ydiff is equivalent to ymax. Since the other dijet datasets adopt ymax, and the name of the variables is processed in the construction of the theory covmat, I changed it to ymax
| size2 = deltas2[0].size | ||
| s = np.zeros(shape=(size1, size2)) | ||
| for shift1, shift2 in zip(deltas1, deltas2): | ||
| s += np.outer(shift1, shift2) |
There was a problem hiding this comment.
It says that it is using the 5 point prescription, but this is different from the covmat_5pt function. Why?
There was a problem hiding this comment.
To be fear, I don't know what to call this. Richard called this generalised 5-pt. The point is that we have a shift for each ht parameter. Moreover, since each shift is linear in the parameter, the outer products of positive and negative shifts are equivalent. That's way there is no 0.5 factor. In few words, is a generalised 5-pt prescription where positive and negative shifts are equivalent. Happy to change the name.
There was a problem hiding this comment.
No problem with the name, with a mention to the difference in the docstr I'd be happy.
| def covs_pt_prescrip_mhou(combine_by_type, point_prescription): | ||
| """Produces the sub-matrices of the theory covariance matrix according | ||
| to a point prescription which matches the number of input theories. | ||
| If 5 theories are provided, a scheme 'bar' or 'nobar' must be |
There was a problem hiding this comment.
Why has this single line fallen?
There was a problem hiding this comment.
I don't know what happened here. I'll restore this line.
| start_proc_by_exp = defaultdict(list) | ||
| for exp_name, data_spec in datagroup_spec.items(): | ||
| start_proc_by_exp[exp_name] = running_index | ||
| running_index += data_spec.load_commondata().ndata |
There was a problem hiding this comment.
I am a bit worried here, you are loading the commondata and taking the number of data point.
But then in the loop below, inside compute_deltas_pc you are cutting the data...
are you sure this is being done consistently? (in other words, are you sure that load_commmondata here is happening after cuts?
There was a problem hiding this comment.
I think this might give me mercy, right?
nnpdf/validphys2/src/validphys/core.py
Lines 504 to 512 in 73ad16a
There was a problem hiding this comment.
I see. I guess never load the data without cuts now. That's good then :)
Experience is a prison sometimes.
|
|
||
| pc_type = get_pc_type(exp_name, process_type, experiment=experiment, pc_dict=pc_dict) | ||
|
|
||
| if process_type.startswith('DIS'): |
There was a problem hiding this comment.
Counting the days until someone call a process DISASTER for some reason 🙈
I would perhaps also guard against processes that have no x or no Q2.
| This hard codes the theories needed for each prescription to avoid user error.""" | ||
| th = t0id.id | ||
| if point_prescription == 'power corrections': | ||
| return NSList([t0id], nskey="theoryid") |
There was a problem hiding this comment.
I wonder how many things across the code will assume that a theory covmat needs more than one theory...
Co-authored-by: Juan M. Cruz-Martinez <juacrumar@lairen.eu>
This PR allows for the inclusion of theory uncertainties due to the effect of power corrections. The theory covariance matrix is constructed by computing the shifts for the theoretical predictions as done for the MHOUs. The shift is computed at the level of the structure functions. Then, the shifts for the structure functions are combined to reconstruct the shift for the xsec. For this reason, the calculation of the shift depends on the dataset. Currently, only 1-JET and DIS (NC and CC) are supported.
At the level of the runcard, power corrections are specified as follows
For each process/sf implemented, we need to specify a series of information:
ht. This is useful to identify the type of power correction, in particular when computing the posterior.yshiftare the magnitudes of the prior.nodescontains the points where the prior is shiftedThe array
pc_included_procsspecifies the processes for which the shifts are computed. I've also implemented the possibility to exclude some particular datasets within the selected processes, and this can be done by specifying the names inpc_excluded_exps.The keyfunc_typeis temporary and will be deleted once we decide which function to use to construct the prior.All the relevant details for this PR are contained in the module
higher_twist_functions.py. For each observable for which the shift has to be computed, I implemented a factory that constructs a function which will then compute the shift. I thought it was kind of necessary to make the shift dependent on the shift parameters (yshiftandnodes) and on the prescription according to which we vary the parameters (which for now is fixed), and not on the kinematics (I think this is known as currying in computer science).TO DO
[x] Removefunc_typepower_correctionsis specified but the parameters are not given?httoname(?)