[Rivet] Bug in Rivet?

Dag Gillberg dag.gillberg at cern.ch
Tue Apr 12 17:26:27 BST 2016


Thanks Andy!

I will ask the HXSWG ppl about what they had in mind regarding the "dodgy
physics" stuff.

Regarding the B-mesons - I meant B-baryons ... and D-baryons apparently.
I'll put a few print-outs below.
This is for 13 TeV gg→H MC, disabling warnings for Lambda particles which
are much more frequent than B baryons in this sample (there are no b-quarks
at tree level).

So 5232, 4232, 5122 ...

Warning: found unexpected particle!
  (pT,eta,phi,m) = (2.2,-1.3,4.8,0), ID = -11
  - partent -5232
Warning: found unexpected particle!
  (pT,eta,phi,m) = (1.7,-1.1,4.3,0), ID = 12
  - partent -5232
SimplifiedXSec::execute() INFO    Processed 0.3k events

Warning: found unexpected particle!
  (pT,eta,phi,m) = (1.2,-1.4,6.1,-0), ID = -16
  - partent -15
Warning: found unexpected particle!
  (pT,eta,phi,m) = (0.3,-2.2,0.0,0), ID = 16
  - partent -5232
SimplifiedXSec::execute() INFO    Processed 0.4k events

SimplifiedXSec::execute() INFO    Processed 0.5k events

Warning: found unexpected particle!
  (pT,eta,phi,m) = (0.3,-3.8,4.0,0), ID = -11
  - partent 4232
Warning: found unexpected particle!
  (pT,eta,phi,m) = (0.1,-7.6,5.3,0), ID = 12
  - partent 4232
SimplifiedXSec::execute() INFO    Processed 0.6k events

SimplifiedXSec::execute() INFO    Processed 0.7k events

Warning: found unexpected particle!
  (pT,eta,phi,m) = (0.2,-0.3,5.1,0), ID = 11
  - partent -4232
Warning: found unexpected particle!
  (pT,eta,phi,m) = (1.7,0.1,3.0,0), ID = -12
  - partent -4232
SimplifiedXSec::execute() INFO    Processed 0.8k events

Warning: found unexpected particle!
  (pT,eta,phi,m) = (1.0,-0.9,5.8,0), ID = -11
  - partent -5122
Warning: found unexpected particle!
  (pT,eta,phi,m) = (1.9,0.6,5.9,-0), ID = 12
  - partent -5122
SimplifiedXSec::execute() INFO    Processed 0.9k events

Warning: found unexpected particle!
  (pT,eta,phi,m) = (0.3,-1.9,5.9,0), ID = -13
  - partent -5132
Warning: found unexpected particle!
  (pT,eta,phi,m) = (0.4,1.4,4.6,-0), ID = 14
  - partent -5132
Warning: found unexpected particle!
  (pT,eta,phi,m) = (2.8,3.8,3.5,0), ID = 11
  - partent 5122
Warning: found unexpected particle!
  (pT,eta,phi,m) = (0.8,3.3,2.3,0), ID = -12
  - partent 5122
SimplifiedXSec::execute() INFO    Processed 1.0k events

SimplifiedXSec::execute() INFO    Processed 1.1k events

SimplifiedXSec::execute() INFO    Processed 1.2k events

SimplifiedXSec::execute() INFO    Processed 1.3k events

SimplifiedXSec::execute() INFO    Processed 1.4k events

Warning: found unexpected particle!
  (pT,eta,phi,m) = (0.6,0.9,4.6,0), ID = 13
  - partent 5122
Warning: found unexpected particle!
  (pT,eta,phi,m) = (2.1,1.5,5.8,-0), ID = -14
  - partent 5122
SimplifiedXSec::execute() INFO    Processed 1.5k events

SimplifiedXSec::execute() INFO    Processed 1.6k events

SimplifiedXSec::execute() INFO    Processed 1.7k events

SimplifiedXSec::execute() INFO    Processed 1.8k events

Warning: found unexpected particle!
  (pT,eta,phi,m) = (1.2,3.4,4.8,0), ID = 11
  - partent 11
Warning: found unexpected particle!
  (pT,eta,phi,m) = (1.6,3.5,5.0,0), ID = -11
  - partent -11
SimplifiedXSec::execute() INFO    Processed 1.9k events

Warning: found unexpected particle!
  (pT,eta,phi,m) = (0.7,3.3,6.2,0), ID = -13
  - partent 4122
Warning: found unexpected particle!
  (pT,eta,phi,m) = (0.4,3.2,2.5,0), ID = 14
  - partent 4122
Warning: found unexpected particle!
  (pT,eta,phi,m) = (0.6,-1.1,0.8,0), ID = 11
  - partent -4232
Warning: found unexpected particle!
  (pT,eta,phi,m) = (0.3,-1.6,0.2,0), ID = -12
  - partent -4232





On Tue, Apr 12, 2016 at 11:52 AM, Andy Buckley <andy.buckley at cern.ch> wrote:

> On 12/04/16 14:51, Dag Gillberg wrote:
>
>> Hi Andy,
>>
>> Thanks!
>> I saw in some more tests that not only Lambda particles are affected,
>> but also the B-mesons.
>> This can actually slightly have affected our old Rivet routine (for the
>> Higgs differential combination) since we might claissify electrons from
>> a semileptonic heavy flavor hadron decay as a non-hadronic..
>>
>
> Which b-mesons are causing trouble? I think my error was only for baryons,
> and the digit ordering should be absolute for mesons.
>
> I checked with an equivalent set of functions, and at least 511, 521, and
> their excited states do seem to work fine now, but I'm not aware of having
> made any directly relevant change in the patch.
>
> (BTW, in the replacement file I've completely removed the check for
> baryons rather than enforce the exceptional conditions, since the particle
> listing that I had handy in ASCII form includes some baryon IDs which don't
> seem to fit into the published scheme at all.)
>
> I'm currently using Jim's setup, to run Rivet within AnalysisBase (i.e.
>> RootCore).
>> Hmm.. not sure how this works, but I see:
>>
>> url = $ROOTCOREBIN/../HEPSoftware/Rivet-2.4.1.tar.gz
>>
>> So I guess this is being downloaded and compiled somehow.
>>
>
> Sounds like you can make do for now, but I'd better get a new version
> ready for validation and patch release.
>
> Now, regarding the code.
>> We have two open questions, where we perhaps can pick your brain :)
>>
>> First, note that this is not a pure fiducial/differential measurement.
>> We are using kinematic information, but are allowed to "cheat" and use
>> quarks etc.
>>
>> 1. We are supposed to classify
>>    gg → ZH
>> vs
>>    qq → ZH
>> Which, at NLO, I don't think is possible...
>>
>> gu → ZHu
>>
>> could be either of the above. Any ideas here?
>> Is this split simply impossible with NLO MC?
>>
>
> I think the split is physically quite dodgy in general! There's no
> physical separation between gluon emissions and splittings that take place
> in the initial state shower and which take place in the matrix element...
> so at NLO where the ME can contain (sums of) such splittings on the
> incoming legs without any "external" indication, the distinction is false.
> The physical way would be to do "approximate" subprocess classification by
> using kinematic info to choose gg or qq (or whatever) enhanced regions...
> if there is a kinematic distinction.
>
> This is vague, armchair-physicist stuff from me, though, and sometimes
> there are "loopholes" (like in single top where there really is no
> interference between s- and t-channels because the final states are
> sufficiently distinct).
>
> 2. Regarding the jets:
>> We want to take all stable particles, remove anything from the Higgs
>> (very easy with Rivet!).
>>
>
> As long as there's a Higgs in the event!
>
> Also ignore particles from leptonic Z and W decays (leptons, e, µ, and
>> FSR γ)
>>
>> Is there a standard way to do this?
>>
>
> Well, this is pretty well-aligned with isPrompt(p). That will return false
> if there are any hadrons in the ancestor chain, otherwise true. This
> includes W and Z production, without accidentally tripping up on the
> off-shell W's that Herwig++ sometimes likes to insert into semileptonic
> hadron decays. But it will also (IIRC) classify FSR photons from quarks as
> prompt -- and you probably don't want to exclude those. The more explicit
> way would be to configure WFinder and ZFinder instances and exclude
> particles which appear in their particles() lists. We don't currently have
> any built-in handling for Z and W decays via taus, though...
>
> Let us know what works for you, and if there's any machinery we could
> usefully add (or receive as a patch :-P )
>
> I suppose we can just do exaclty what we did for the Higgs routine:
>>
>>
>> https://svnweb.cern.ch/trac/atlasoff/browser/PhysicsAnalysis/HiggsPhys/HSG1/Analysis/trunk/GeneralTools/HggUnfoldingPaper2013/Rivet/Combination/HiggsDiffXSecCombination.cc#L110
>>
>> which btw use the projections :)
>>
>
> :-)
>
> Actually, I think I cleaned this one a bit recently, for our forthcoming
> C++11-enabled 2.5.0 release:
>
> https://rivet.hepforge.org/hg/rivet/file/66e20000b87f/src/Analyses/ATLAS_2015_I1364361.cc
>
> Andy
>
>
> On Tue, Apr 12, 2016 at 4:04 AM, Andy Buckley <andy.buckley at cern.ch
>> <mailto:andy.buckley at cern.ch>> wrote:
>>
>>     On 12/04/16 03:20, Dag Gillberg wrote:
>>
>>         Hi Andy,
>>
>>         I'm writing Rivet code (yay! fun!).
>>         And I want to build jets out of stable particles that are hadrons
>> or
>>         from hadron decay.
>>         So I do:
>>               if ( PID::isHadron(p.pdgId()) || p.fromHadron() )
>>
>>         Now, as a cross check, I printed out particles that failed this,
>>         and I
>>         see a ton of strange baryons fail:
>>         Warning: found unexpected particle!
>>             (pT,eta,phi,m) = (0.9,-2.0,2.0,1), ID = 3122
>>         Warning: found unexpected particle!
>>             (pT,eta,phi,m) = (0.5,-4.3,1.9,1), ID = -3122
>>         Warning: found unexpected particle!
>>             (pT,eta,phi,m) = (0.9,-2.2,3.9,1), ID = 3122
>>
>>         These are Lambda particles.
>>         They all fail this line in isBaryon:
>>
>>         if (_digit(nq2,pid) < _digit(nq3,pid)) return false;
>>
>>         since the second digit (1) is smaller than the third (2)
>>         ( not sure what this condition is based on though..)
>>         But a Lambda is certainly a Baryon..
>>         So this must be a bug, right?
>>
>>
>>
>>     Hi Dag,
>>
>>     Yes, you're right: I had tried to tighten up my implementation of
>>     PID checks in the MCUtils package, following the PDG scheme
>>     definition, but missed that for baryons there are exceptions to the
>>     ordering.
>>
>>     I fixed this a while ago in MCUtils but had forgotten to sync the
>>     fixes into Rivet. I'm not sure how it managed to not show up in our
>>     release validation -- we should look into that.
>>
>>     Anyway I've done the sync now, and the fixed header file (from
>>     include/Rivet/Tools) is attached -- are you able to patch, or do you
>>     rely on a pre-built copy of Rivet? Since it's a bug with real
>>     physics implications, I'm tempted to get a patch release out asap.
>>
>>     Thanks for the report!
>>
>>     Now a couple of unrelated comments on your code snippet ;-)
>>
>>                 Particles hadrons_notFromHiggs;
>>                 FourMomentum sum(0,0,0,0);
>>                 for ( const GenParticle *ptcl :
>>         Rivet::particles(event.genEvent()) ) {
>>                   Particle p(ptcl);
>>                   if (!p.isStable()) continue;
>>
>>
>>     Since you only want stable particles, rather than loop over HepMC
>>     GenParticles, convert them to Rivet Particles, and ignore the
>>     non-stable ones the "Rivet way" is to set up a FinalState projection:
>>
>>     // In init()
>>     addProjection(FinalState(), "FS")
>>
>>     // In apply()
>>     const Particles& particles = applyProjection<FinalState>(event,
>>     "FS").particles();
>>     for (const Particle& p : particles) {
>>        ...
>>
>>     I am trying to move some core intelligence out of the projections
>>     and into standalone functions (or maybe Event methods) to make it
>>     easier to do many things without projections if wanted, though --
>>     the main benefit of projections is automatic caching, but that's not
>>     always the most important thing.
>>
>>     Cheers,
>>     Andy
>>
>>     --
>>     Dr Andy Buckley, Lecturer / Royal Society University Research Fellow
>>     Particle Physics Expt Group, University of Glasgow
>>
>>
>>
>
> --
> Dr Andy Buckley, Lecturer / Royal Society University Research Fellow
> Particle Physics Expt Group, University of Glasgow
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://www.hepforge.org/lists-archive/rivet/attachments/20160412/04140c56/attachment.html>


More information about the Rivet mailing list