[Rivet] b-tagging in Rivet 2.x.x

Andy Buckley andy.buckley at cern.ch
Sun Feb 15 22:10:58 GMT 2015


Hi Christian,

The best way to do it now is if (jet.bTagged()) ;-)  This uses ghost
association to hadrons.

The HeavyHadrons way should work, though, so I'm very puzzled that it
doesn't. What generator are you using? Is the bHadrons vector non-empty?
Could you try printing the dRs in that comparison? (By the way, you
shouldn't need to re-apply the > 5 GeV cut in the loop, since that's one
of your b-hadron selection criteria!)

Andy

PS. I will get back to you about the merging issue. I didn't get any
chance in the last 2 weeks, but have a "free" week coming up so will do
my best. Prod me if I don't!


On 15/02/15 14:05, Christian Gütschow wrote:
> Dear Rivet authors,
> 
> I'm just trying to implement a Rivet routine for a W+b ATLAS measurement
> and was wondering what the preferred way of doing particle-level
> b-tagging in Rivet is?
> 
> Naively, I would think that the easiest way to decide whether a jet is a
> b-jet is to use the HeavyHadrons projection, e.g. like so
> 
>     addProjection(HeavyHadrons(-2.5, 2.5, 5.0*GeV), "BHadrons");
>     ...
>     const Particles& bHadrons = applyProjection<HeavyHadrons>(event,
>     "BHadrons").bHadrons();
>     ...
>     // for each jet "j":
>     foreach(const Particle& b, bHadrons) {
>       if( (b.pT() > 5.0*GeV) && (deltaR(j, b) < 0.3) ) {
>         // jet matched to B hadron!
>         ...
>         break;
>       }
>     }
> 
> 
> Turns out, this doesn't do anything at all because bHadrons has always
> size 0 for some reason. Is this to be expected or likely to be some sort
> of bug (on my side)?
> 
> On the other hand, if I use the approach that was used in the Z+b(b)
> analysis (ATLAS_2014_I1306294), i.e. something like
> 
>     bool hasB = false; 
> 
>     foreach(const GenParticle* b, particles(event.genEvent())) {
>       if(b->momentum().perp() < 5.0*GeV)  continue;
>       for(uint k=0; k < stableB.size(); ++k) {
>         if( fabs(b->pdg_id()) == stableB[k] ) {
>           if( deltaR(j.momentum().eta(), j.momentum().phi(),
>     b->momentum().eta(), b->momentum().phi()) < 0.3 ) {
>             // jet matched to B hadron!
>             hasB = true;
>             break; 
>           }
>         }
>       }
>       if(hasB)  break;
>     }
> 
> 
> where stableB is a custom-made vector of the B-hadron PDG IDs, then I do
> find the B hadrons in the event and can successfully match my jets to them.
> 
> I think it's safe to say that while the latter option does the trick, it
> is a bit of an awkward way to code this up. (Presumably that's the
> reason why the Z+b(b) analysis is still dwelling in the contributions
> area...?) Is there a better way of doing this? 
> 
> Many thanks for your advice in advance!
> 
> Cheers,
> Chris
> 
> -- 
> 
>  Dr. Christian Gütschow
> 
>  TU Dresden
>  Institut für Kern- und Teilchenphysik
>  Zellescher Weg 19
>  01069 Dresden
> 
>  > E17, Andreas-Schubert-Bau 
>  > chris.g at cern.ch <mailto:chris.g at cern.ch>
> 
> 
> 
> _______________________________________________
> Rivet mailing list
> Rivet at projects.hepforge.org
> https://www.hepforge.org/lists/listinfo/rivet
> 


-- 
Dr Andy Buckley, Royal Society University Research Fellow
Particle Physics Expt Group, University of Glasgow / PH Dept, CERN


More information about the Rivet mailing list