[Rivet] Madgraph (and alpgen) in Rivet

Gavin Hesketh gavin.hesketh at ucl.ac.uk
Tue Dec 23 17:24:53 GMT 2014


ah, I wondered if that number would be useful :) So if it is possible to 
write the cross section and sum of weights to each yoda file, I think 
we'd have everything needed. I'd be happy to look into this, bearing in 
mind that I've only just started using yoda :) So if you have some 
pointers, that would help.

cheers,
Gavin


On 23/12/14 17:13, Andy Buckley wrote:
> yodamerge already knows the pre-normalization numbers in each run's
> histos before merging, via the ScaledBy annotation. I think I got the
> scaling logic correct so that if you pass the scalefactors on the
> yodamerge command line, they will be applied after unrolling the
> normalization and before the merging and re-normalization.
>
> But I might have missed something. Will read more closely later but have
> to run now...
>
> Andy
>
>
> On 23/12/14 17:07, Gavin Hesketh wrote:
>> Hi Andy,
>> don't think yodamerge does what is needed. If we had the xsec and sum of
>> weights stored in the yoda file, and the area of each plot before
>> unit-normalising, it would be possible. The cross section for each run
>> alone does not help.
>>
>> Ok, simplest case scenario: we have two jet slices we need to combine
>> (eg W+0jet, W+1jet), with cross sections x1 and x2. Each sample is a
>> different size, and has sum of weights s1 and s2. To combine them, we
>> need to scale each sample to the same lumi (1 pb-1, say). The generated
>> lumi for each sample is L1=s1/x1 and L2=s2/x2. So we need to divide each
>> plot by L1 or L2.
>>
>> Now say we have a plot which has two bins. Due to the cuts, the first
>> bin is only filled by sample 1 (with N1 events), and the second bin is
>> only filled by sample 2 (with N2 events). N1!=s1 and N2!=s2, due to the
>> cuts.
>>
>> After scaling and merging the two samples, the first bin will have
>> N1*x1/L1 events, and the second will have N2*x2/L2.
>>
>> Then after unit-normalising the merged plot, the bins will contain:
>> 1) N1*x1/s1 / (N1*x1/s1 + N2*x2/s2)
>> 2) N2*x2/s2 / (N1*x1/s1 + N2*x2/s2)
>>
>>
>> With the current code, the plots are unit-normalised at the end of each
>> run (ie for each sample). After merging the samples, the plot contents
>> are (1,1). Redoing the unit-normalisation, they will be (0.5, 0.5). ie
>> there is no way to get the right answer...
>>
>> In order to get the right answer using yodamerge, we need N for each
>> plot, x and s for each run. Storing just x and s is not enough.
>>
>> Alternatively, as with the hack I've implemented, we normalise each plot
>> to N.x/s, and can then do anything needed with yodamerge.
>>
>> Hope that's clearer :)
>>
>> Gavin
>>
>>
>>
>> On 23/12/14 16:29, Andy Buckley wrote:
>>> Hi Gavin,
>>>
>>> Have you tried yodamerge? It allows you to give multiplicative
>>> coefficients for the merging (even of unit-normalised histograms and
>>> profiles) of YODA files from different np-X runs.
>>>
>>> You would still need to know the xsecs for each run, but that is not
>>> unusual! In future we'll make this a bit more automatic by writing the
>>> xsec into each .yoda file as one of several "hidden" data structures,
>>> but that's not in place yet -- you know the usual manpower story. We'd
>>> be *very* happy to have some effort donated if you need this to work,
>>> though!
>>>
>>> Let me know if yodamerge works for you, or if not, what I've
>>> misunderstood this time ;-)
>>>
>>> Merry Christmas!
>>> Andy
>>>
>>>
>>> On 23/12/14 16:06, Gavin Hesketh wrote:
>>>> Hi,
>>>> We are validating madgraph for ATLAS, and are having to generate samples
>>>> of jet multiplicities. This causes problems for some analyses where
>>>> histograms are unit-normalised or ratios are taken at the end of a run.
>>>> I've raised this problem in the past for alpgen, and unfortunately seems
>>>> like it's not going to go away any time soon...
>>>>
>>>> So I wondered if there are good ideas for how to handle it, or if yoda
>>>> has some features I'm not aware of that we can use for work-arounds?
>>>>
>>>>
>>>> An example: I'm looking at ATLAS_2013_I1217867 (kt splitting scales in W
>>>> events). At the end of the run, each plot is unit-normalised:
>>>>       normalize(_h_dI[flav][i], 1.0, false);
>>>> So, when later adding up 0-jet, 1-jet, 2-jet, 3-jet samples, we end up
>>>> with a histogram with area 4, and completely the wrong shape.
>>>>
>>>> To solve this, I've hacked the routine to do a more standard
>>>> cross-section normalisation:
>>>>         double normfac = crossSection()/sumOfWeights();
>>>>         scale(_h_dI[flav][i], normfac);
>>>> then will yodamerge the jet samples and write a little yoda script to
>>>> unit-normalise the plot at the end.
>>>>
>>>> While I think it would be a nightmare to try to generalise and solve for
>>>> all possible situations, it would be very useful to have a rivet
>>>> command-line flag which turns off unit-normalisation / ratios, and just
>>>> normalises all plots to cross sections. Still not a small amount of work
>>>> to modify all existing analyses of course... Could then provide an
>>>> example script to merge and unit-normalise plots in yodamerge.
>>>>
>>>> But, like I said, I'm hoping someone has a better idea...
>>>>
>>>> Merry Christmas :)
>>>> Gavin
>>>> _______________________________________________
>>>> Rivet mailing list
>>>> Rivet at projects.hepforge.org
>>>> https://www.hepforge.org/lists/listinfo/rivet
>>>
>>>
>
>


More information about the Rivet mailing list