<div dir="ltr">Hi Andy,<div><br></div><div>Thanks!</div><div>I saw in some more tests that not only Lambda particles are affected, but also the B-mesons.</div><div>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..</div><div><br></div><div>I'm currently using Jim's setup, to run Rivet within AnalysisBase (i.e. RootCore).</div><div>Hmm.. not sure how this works, but I see:<br>
<p><span>url = $ROOTCOREBIN/../HEPSoftware/Rivet-2.4.1.tar.gz</span></p><p><span>So I guess this is being downloaded and compiled somehow.</span></p><p><span>Now, regarding the code.<br>We have two open questions, where we perhaps can pick your brain :)</span></p><p>First, note that this is not a pure fiducial/differential measurement.<br>We are using kinematic information, but are allowed to "cheat" and use quarks etc.<br><br>1. We are supposed to classify<br> gg → ZH<br>vs<br> qq → ZH<br>Which, at NLO, I don't think is possible...</p><p>gu → ZHu</p><p>could be either of the above. Any ideas here?<br>Is this split simply impossible with NLO MC?</p><p>2. Regarding the jets:<br>We want to take all stable particles, remove anything from the Higgs (very easy with Rivet!).<br>Also ignore particles from leptonic Z and W decays (leptons, e, µ, and FSR γ)</p><p>Is there a standard way to do this?</p><p>I suppose we can just do exaclty what we did for the Higgs routine:</p><p> <a href="https://svnweb.cern.ch/trac/atlasoff/browser/PhysicsAnalysis/HiggsPhys/HSG1/Analysis/trunk/GeneralTools/HggUnfoldingPaper2013/Rivet/Combination/HiggsDiffXSecCombination.cc#L110">https://svnweb.cern.ch/trac/atlasoff/browser/PhysicsAnalysis/HiggsPhys/HSG1/Analysis/trunk/GeneralTools/HggUnfoldingPaper2013/Rivet/Combination/HiggsDiffXSecCombination.cc#L110</a></p><p>which btw use the projections :)</p><p>Cheers,<br>Dag</p></div><div><br></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Apr 12, 2016 at 4:04 AM, Andy Buckley <span dir="ltr"><<a href="mailto:andy.buckley@cern.ch" target="_blank">andy.buckley@cern.ch</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><span>On 12/04/16 03:20, Dag Gillberg wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
Hi Andy,<br>
<br>
I'm writing Rivet code (yay! fun!).<br>
And I want to build jets out of stable particles that are hadrons or<br>
from hadron decay.<br>
So I do:<br>
if ( PID::isHadron(p.pdgId()) || p.fromHadron() )<br>
<br>
Now, as a cross check, I printed out particles that failed this, and I<br>
see a ton of strange baryons fail:<br>
Warning: found unexpected particle!<br>
(pT,eta,phi,m) = (0.9,-2.0,2.0,1), ID = 3122<br>
Warning: found unexpected particle!<br>
(pT,eta,phi,m) = (0.5,-4.3,1.9,1), ID = -3122<br>
Warning: found unexpected particle!<br>
(pT,eta,phi,m) = (0.9,-2.2,3.9,1), ID = 3122<br>
<br>
These are Lambda particles.<br>
They all fail this line in isBaryon:<br>
<br>
if (_digit(nq2,pid) < _digit(nq3,pid)) return false;<br>
<br>
since the second digit (1) is smaller than the third (2)<br>
( not sure what this condition is based on though..)<br>
But a Lambda is certainly a Baryon..<br>
So this must be a bug, right?<br>
</blockquote>
<br>
<br></span>
Hi Dag,<br>
<br>
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.<br>
<br>
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.<br>
<br>
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.<br>
<br>
Thanks for the report!<br>
<br>
Now a couple of unrelated comments on your code snippet ;-)<span><br>
<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
Particles hadrons_notFromHiggs;<br>
FourMomentum sum(0,0,0,0);<br>
for ( const GenParticle *ptcl :<br>
Rivet::particles(event.genEvent()) ) {<br>
Particle p(ptcl);<br>
if (!p.isStable()) continue;<br>
</blockquote>
<br></span>
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:<br>
<br>
// In init()<br>
addProjection(FinalState(), "FS")<br>
<br>
// In apply()<br>
const Particles& particles = applyProjection<FinalState>(event, "FS").particles();<br>
for (const Particle& p : particles) {<br>
...<br>
<br>
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.<br>
<br>
Cheers,<br>
Andy<span><font color="#888888"><br>
<br>
-- <br>
Dr Andy Buckley, Lecturer / Royal Society University Research Fellow<br>
Particle Physics Expt Group, University of Glasgow<br>
</font></span></blockquote></div><br></div></div>