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
…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...
|
|
||
| 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.
There was a problem hiding this comment.
Counting the days until someone call a process DISASTER for some reason 🙈
Highly likely. Do you have a better idea?
I would perhaps also guard against processes that have no x or no Q2.
Why would this happen?
There was a problem hiding this comment.
That's what I meant, check both that startswith('DIS') and that the processes have x and Q2 and we agree that everything that complies with both is a DIS process even if it called DISNOTREALLY
| 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...
There was a problem hiding this comment.
Eheh, we can ask our AI companions...
There was a problem hiding this comment.
I wouldn't even know how to start prompting it. Perhaps starting with "write a test for everything that uses this function" :__)
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(?)