<div dir="ltr">Thanks Andy!<div><br></div><div>I will ask the HXSWG ppl about what they had in mind regarding the "dodgy physics" stuff.</div><div><br></div><div>Regarding the B-mesons - I meant B-baryons ... and D-baryons apparently.</div><div>I'll put a few print-outs below. </div><div>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).</div><div><br></div><div>So 5232, 4232, 5122 ...</div><div><br></div><div><div>Warning: found unexpected particle!</div><div> (pT,eta,phi,m) = (2.2,-1.3,4.8,0), ID = -11</div><div> - partent -5232</div><div>Warning: found unexpected particle!</div><div> (pT,eta,phi,m) = (1.7,-1.1,4.3,0), ID = 12</div><div> - partent -5232</div><div>SimplifiedXSec::execute() INFO Processed 0.3k events</div><div><br></div><div>Warning: found unexpected particle!</div><div> (pT,eta,phi,m) = (1.2,-1.4,6.1,-0), ID = -16</div><div> - partent -15</div><div>Warning: found unexpected particle!</div><div> (pT,eta,phi,m) = (0.3,-2.2,0.0,0), ID = 16</div><div> - partent -5232</div><div>SimplifiedXSec::execute() INFO Processed 0.4k events</div><div><br></div><div>SimplifiedXSec::execute() INFO Processed 0.5k events</div><div><br></div><div>Warning: found unexpected particle!</div><div> (pT,eta,phi,m) = (0.3,-3.8,4.0,0), ID = -11</div><div> - partent 4232</div><div>Warning: found unexpected particle!</div><div> (pT,eta,phi,m) = (0.1,-7.6,5.3,0), ID = 12</div><div> - partent 4232</div><div>SimplifiedXSec::execute() INFO Processed 0.6k events</div><div><br></div><div>SimplifiedXSec::execute() INFO Processed 0.7k events</div><div><br></div><div>Warning: found unexpected particle!</div><div> (pT,eta,phi,m) = (0.2,-0.3,5.1,0), ID = 11</div><div> - partent -4232</div><div>Warning: found unexpected particle!</div><div> (pT,eta,phi,m) = (1.7,0.1,3.0,0), ID = -12</div><div> - partent -4232</div><div>SimplifiedXSec::execute() INFO Processed 0.8k events</div><div><br></div><div>Warning: found unexpected particle!</div><div> (pT,eta,phi,m) = (1.0,-0.9,5.8,0), ID = -11</div><div> - partent -5122</div><div>Warning: found unexpected particle!</div><div> (pT,eta,phi,m) = (1.9,0.6,5.9,-0), ID = 12</div><div> - partent -5122</div><div>SimplifiedXSec::execute() INFO Processed 0.9k events</div><div><br></div><div>Warning: found unexpected particle!</div><div> (pT,eta,phi,m) = (0.3,-1.9,5.9,0), ID = -13</div><div> - partent -5132</div><div>Warning: found unexpected particle!</div><div> (pT,eta,phi,m) = (0.4,1.4,4.6,-0), ID = 14</div><div> - partent -5132</div><div>Warning: found unexpected particle!</div><div> (pT,eta,phi,m) = (2.8,3.8,3.5,0), ID = 11</div><div> - partent 5122</div><div>Warning: found unexpected particle!</div><div> (pT,eta,phi,m) = (0.8,3.3,2.3,0), ID = -12</div><div> - partent 5122</div><div>SimplifiedXSec::execute() INFO Processed 1.0k events</div><div><br></div><div>SimplifiedXSec::execute() INFO Processed 1.1k events</div><div><br></div><div>SimplifiedXSec::execute() INFO Processed 1.2k events</div><div><br></div><div>SimplifiedXSec::execute() INFO Processed 1.3k events</div><div><br></div><div>SimplifiedXSec::execute() INFO Processed 1.4k events</div><div><br></div><div>Warning: found unexpected particle!</div><div> (pT,eta,phi,m) = (0.6,0.9,4.6,0), ID = 13</div><div> - partent 5122</div><div>Warning: found unexpected particle!</div><div> (pT,eta,phi,m) = (2.1,1.5,5.8,-0), ID = -14</div><div> - partent 5122</div><div>SimplifiedXSec::execute() INFO Processed 1.5k events</div><div><br></div><div>SimplifiedXSec::execute() INFO Processed 1.6k events</div><div><br></div><div>SimplifiedXSec::execute() INFO Processed 1.7k events</div><div><br></div><div>SimplifiedXSec::execute() INFO Processed 1.8k events</div><div><br></div><div>Warning: found unexpected particle!</div><div> (pT,eta,phi,m) = (1.2,3.4,4.8,0), ID = 11</div><div> - partent 11</div><div>Warning: found unexpected particle!</div><div> (pT,eta,phi,m) = (1.6,3.5,5.0,0), ID = -11</div><div> - partent -11</div><div>SimplifiedXSec::execute() INFO Processed 1.9k events</div><div><br></div><div>Warning: found unexpected particle!</div><div> (pT,eta,phi,m) = (0.7,3.3,6.2,0), ID = -13</div><div> - partent 4122</div><div>Warning: found unexpected particle!</div><div> (pT,eta,phi,m) = (0.4,3.2,2.5,0), ID = 14</div><div> - partent 4122</div><div>Warning: found unexpected particle!</div><div> (pT,eta,phi,m) = (0.6,-1.1,0.8,0), ID = 11</div><div> - partent -4232</div><div>Warning: found unexpected particle!</div><div> (pT,eta,phi,m) = (0.3,-1.6,0.2,0), ID = -12</div><div> - partent -4232</div></div><div><br></div><div><br></div><div><br></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Apr 12, 2016 at 11:52 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:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On 12/04/16 14:51, Dag Gillberg wrote:<br>
</span><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi Andy,<br>
<br><span class="">
Thanks!<br>
I saw in some more tests that not only Lambda particles are affected,<br>
but also the B-mesons.<br>
This can actually slightly have affected our old Rivet routine (for the<br>
Higgs differential combination) since we might claissify electrons from<br>
a semileptonic heavy flavor hadron decay as a non-hadronic..<br>
</span></blockquote>
<br>
Which b-mesons are causing trouble? I think my error was only for baryons, and the digit ordering should be absolute for mesons.<br>
<br>
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.<br>
<br>
(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.)<span class=""><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I'm currently using Jim's setup, to run Rivet within AnalysisBase (i.e.<br>
RootCore).<br>
Hmm.. not sure how this works, but I see:<br>
<br>
url = $ROOTCOREBIN/../HEPSoftware/Rivet-2.4.1.tar.gz<br>
<br>
So I guess this is being downloaded and compiled somehow.<br>
</blockquote>
<br></span>
Sounds like you can make do for now, but I'd better get a new version ready for validation and patch release.<span class=""><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Now, regarding the code.<br>
We have two open questions, where we perhaps can pick your brain :)<br>
<br>
First, note that this is not a pure fiducial/differential measurement.<br>
We are using kinematic information, but are allowed to "cheat" and use<br>
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...<br>
<br>
gu → ZHu<br>
<br>
could be either of the above. Any ideas here?<br>
Is this split simply impossible with NLO MC?<br>
</blockquote>
<br></span>
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.<br>
<br>
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).<span class=""><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
2. Regarding the jets:<br>
We want to take all stable particles, remove anything from the Higgs<br>
(very easy with Rivet!).<br>
</blockquote>
<br></span>
As long as there's a Higgs in the event!<span class=""><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Also ignore particles from leptonic Z and W decays (leptons, e, µ, and<br>
FSR γ)<br>
<br>
Is there a standard way to do this?<br>
</blockquote>
<br></span>
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...<br>
<br>
Let us know what works for you, and if there's any machinery we could usefully add (or receive as a patch :-P )<span class=""><br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
I suppose we can just do exaclty what we did for the Higgs routine:<br>
<br>
<a href="https://svnweb.cern.ch/trac/atlasoff/browser/PhysicsAnalysis/HiggsPhys/HSG1/Analysis/trunk/GeneralTools/HggUnfoldingPaper2013/Rivet/Combination/HiggsDiffXSecCombination.cc#L110" rel="noreferrer" target="_blank">https://svnweb.cern.ch/trac/atlasoff/browser/PhysicsAnalysis/HiggsPhys/HSG1/Analysis/trunk/GeneralTools/HggUnfoldingPaper2013/Rivet/Combination/HiggsDiffXSecCombination.cc#L110</a><br>
<br>
which btw use the projections :)<br>
</blockquote>
<br></span>
:-)<br>
<br>
Actually, I think I cleaned this one a bit recently, for our forthcoming C++11-enabled 2.5.0 release:<br>
<a href="https://rivet.hepforge.org/hg/rivet/file/66e20000b87f/src/Analyses/ATLAS_2015_I1364361.cc" rel="noreferrer" target="_blank">https://rivet.hepforge.org/hg/rivet/file/66e20000b87f/src/Analyses/ATLAS_2015_I1364361.cc</a><span class="HOEnZb"><font color="#888888"><br>
<br>
Andy<br>
<br>
<br>
</font></span><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">
On Tue, Apr 12, 2016 at 4:04 AM, Andy Buckley <<a href="mailto:andy.buckley@cern.ch" target="_blank">andy.buckley@cern.ch</a><br></span><div><div class="h5">
<mailto:<a href="mailto:andy.buckley@cern.ch" target="_blank">andy.buckley@cern.ch</a>>> wrote:<br>
<br>
On 12/04/16 03:20, Dag Gillberg wrote:<br>
<br>
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,<br>
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>
<br>
<br>
<br>
Hi Dag,<br>
<br>
Yes, you're right: I had tried to tighten up my implementation of<br>
PID checks in the MCUtils package, following the PDG scheme<br>
definition, but missed that for baryons there are exceptions to the<br>
ordering.<br>
<br>
I fixed this a while ago in MCUtils but had forgotten to sync the<br>
fixes into Rivet. I'm not sure how it managed to not show up in our<br>
release validation -- we should look into that.<br>
<br>
Anyway I've done the sync now, and the fixed header file (from<br>
include/Rivet/Tools) is attached -- are you able to patch, or do you<br>
rely on a pre-built copy of Rivet? Since it's a bug with real<br>
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 ;-)<br>
<br>
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>
<br>
<br>
Since you only want stable particles, rather than loop over HepMC<br>
GenParticles, convert them to Rivet Particles, and ignore the<br>
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,<br>
"FS").particles();<br>
for (const Particle& p : particles) {<br>
...<br>
<br>
I am trying to move some core intelligence out of the projections<br>
and into standalone functions (or maybe Event methods) to make it<br>
easier to do many things without projections if wanted, though --<br>
the main benefit of projections is automatic caching, but that's not<br>
always the most important thing.<br>
<br>
Cheers,<br>
Andy<br>
<br>
--<br>
Dr Andy Buckley, Lecturer / Royal Society University Research Fellow<br>
Particle Physics Expt Group, University of Glasgow<br>
<br>
<br>
</div></div></blockquote><div class="HOEnZb"><div class="h5">
<br>
<br>
-- <br>
Dr Andy Buckley, Lecturer / Royal Society University Research Fellow<br>
Particle Physics Expt Group, University of Glasgow<br>
</div></div></blockquote></div><br></div>