[Rivet] reading a YODA file in a Rivet Routine

Patrick L.S. Connor connorpa at mail.desy.de
Sat Oct 31 16:02:53 GMT 2015


Hi Andi,

I'd use quadratic error. But I'll go for a post-processing, non-elegant 
script ;-)

Thanks for your help and have a nice week-end,

Patrick

On Fri, 30 Oct 2015, Andy Buckley wrote:

> Hi Patrick,
>
> I could add a multiply method to a new YODA version quite easily. But the 
> integration into Rivet would take a bit more work. It'd probably take longer 
> than you want.
>
> As I mentioned, it's not clear that a histogram is the data type that you 
> want for the binned correction factors -- they unavoidably come with errors 
> and then you need to decide how you want those errors to be combined. 
> Quadrature or linear addition would be obvious approaches; what would you 
> want to do?
>
> For the approach you suggested with the post-processing script, in the 
> absence of an automatic multiply method, you can just make the resulting 
> scatter by hand. Something like this in Python:
>
> assert len(h_data.bins) == len(h_corr.bins)
> s = yoda.Scatter2D("/out")
> for b_data, b_corr in zip(h_data.bins, h_corr.bins):
>    xedges = b_data.xEdges
>    xmid = 0.5*sum(xedges)
>    xerrs = [abs(x - xmid) for x in xedges]
>    y = b_data.height*b_corr.height
>    yerrs = [b_data.heightErr*b_corr.height for _ in xrange(2)]
>    p = yoda.Point2D(xmid, y, xerrs, yerrs)
>    s.addPoint(p)
>
> Sorry, not hugely elegant! I've ignored the correction factor error -- do 
> whatever you like.
>
> Andy
>
>
> On 30/10/15 15:21, Patrick L.S. Connor wrote:
>> Hi Andy,
>> 
>> Thanks a lot for your answer.
>> 
>> It could be indeed very nice if such a method as multiply() could exist,
>> but I need some solution quite fast, so I can code some script on my own.
>> 
>> What I want to do is to compute some kind of correction factor and apply
>> it to some data:
>>
>>     data = correction factor * measurement
>> 
>> where the correction factor and the "measurement" are produced from
>> different MC events.
>> 
>> What I am thinking to do is to write a script that would extract and
>> multiply the respective histograms from two .yoda files, and store the
>> result in a third .yoda file.
>> 
>> As you obviously know much better the framework, please tell me if you
>> have any suggestion.
>> 
>> Thanks again and cheers,
>> 
>> Patrick
>> 
>> 
>> 
>> 
>> 
>> On Wed, 28 Oct 2015, Andy Buckley wrote:
>> 
>>> Hi Patrick,
>>> 
>>> As it happens, we don't have multiply functions between histograms,
>>> because until now nobody had a use-case for it: histogram divisions
>>> yes, multiplications... not that I've seen.
>>> 
>>> What exactly is it that you're doing? Note that histograms in YODA are
>>> objects with fill history, not e.g. lookup tables of efficiencies or
>>> similar... although a future version will contain such objects, too.
>>> 
>>> We can add such methods to YODA quite easily, but just preferred not
>>> to fill it up with "for completeness" functions that wouldn't be used.
>>> 
>>> If we add these multiply methods, you would be able to call them on
>>> the YODA objects loaded into Rivet... modulo the detail that the
>>> histogram handles that you get in Rivet are smart pointers, and we
>>> provide dedicated divide() functions to handle the registration and
>>> path setting on the resulting Scatter2D.
>>> 
>>> Andy
>>> 
>>> 
>>> On 28/10/15 11:53, Patrick L.S. Connor wrote:
>>>> Dear Rivet Programmers,
>>>> 
>>>> I would like to multiply some YODA histograms from different Rivet
>>>> routines, but I could not find any way. Would there be anything like
>>>> this already implemented?
>>>> 
>>>> I thought of two ideas:
>>>>   - either mutliply histograms from the YODA files just before running
>>>> make-plots,
>>>>   - or load the YODA file from the routine A inside the routine B and
>>>> apply the multiplication there,
>>>>   but unsuccessfully...
>>>> 
>>>> Could you please help me?
>>>> Thanks in advance.
>>>> 
>>>> Regards,
>>>> 
>>>> Patrick
>>>> 
>>>> 
>>>> 
>>>> 
>>>> ----
>>>> Patrick L.S. Connor
>>>> Doktorand - CMS Team
>>>> Deutsches Elektronen-Synchrotron
>>>> Tel.: +49 40 8998-2617
>>>> Geb.: 01b/O2.208
>>>> _______________________________________________
>>>> Rivet mailing list
>>>> Rivet at projects.hepforge.org
>>>> https://www.hepforge.org/lists/listinfo/rivet
>>> 
>>> 
>>> --
>>> Dr Andy Buckley, Lecturer / Royal Society University Research Fellow
>>> Particle Physics Expt Group, University of Glasgow
>>> 
>> 
>> 
>> 
>> 
>> ----
>> Patrick L.S. Connor
>> Doktorand - CMS Team
>> Deutsches Elektronen-Synchrotron
>> Tel.: +49 40 8998-2617
>> Geb.: 01b/O2.208
>
>
> -- 
> Dr Andy Buckley, Lecturer / Royal Society University Research Fellow
> Particle Physics Expt Group, University of Glasgow
>




----
Patrick L.S. Connor
Doktorand - CMS Team
Deutsches Elektronen-Synchrotron
Tel.: +49 40 8998-2617
Geb.: 01b/O2.208


More information about the Rivet mailing list