[Rivet] Jets in DIS

Roman Kogler roman.kogler at desy.de
Mon Oct 17 21:51:52 BST 2011


Dear Andy,

I checked out the new Rivet version, thanks for including the boost of 
the final state to the Breit frame. I'm happy to see that working.

However, there is a bug in Rivet when looking for the scattered electron 
in DIS. The algorithm (DISLepton.cc) looks for the electron (or 
positron) in the event with the highest value of pz. This works at low 
Q2 rather well, but at high Q2 this algorithm fails. Here is why:
At HERA the +pz direction is defined to be the proton beam direction. So 
the electron beam has pz=-27.6. At low Q2, where the electron is 
scattered under small angles, the 'signed value' of the scattered 
electron is then +pz'. However, at high Q2 the electron can be scattered 
perpendicular to the beam (pz'=0) or in the forward direction (-pz'). So 
if there is any other electron in the event present, which goes in the 
-pz direction, it will be misidentified as the scattered electron. Below 
is an example for an event generated with Q2~17000, where the scattered 
electron has been misidentified and the calculated value of Q2 in Rivet 
is 72.8.

Cheers,
    Roman


DISLepton: searching for ID -11 with pz > -1e+09
part 0 id = -11 px = -55.7936 py = 67.9235 pz = 73.3469 E = 114.483
part 0 id = -11 signed_pz = -73.3469
   ---> taking 0 as outgoing lepton
part 1 id = 211 px = 4.3922 py = -5.36174 pz = 21.1347 E = 22.2426
part 2 id = 2212 px = 19.1258 py = -22.3493 pz = 85.5571 E = 90.4775
part 3 id = -2212 px = 7.27322 py = -8.24468 pz = 32.7272 E = 34.5373
part 4 id = 2112 px = -0.258489 py = 0.0192201 pz = 140.113 E = 140.116
part 5 id = 22 px = 0.0752175 py = -0.0810541 pz = 0.527222 E = 0.538693
part 6 id = -211 px = 2.95982 py = -3.164 pz = 14.1068 E = 14.7578
part 7 id = 130 px = 0.251775 py = -0.163703 pz = 183.251 E = 183.252
part 8 id = 211 px = 6.86782 py = -8.30335 pz = 33.2207 E = 34.9249
part 9 id = -211 px = 2.33043 py = -2.5695 pz = 10.0595 E = 10.6417
part 10 id = 22 px = 0.693957 py = -0.670989 pz = 3.14172 E = 3.28667
part 11 id = 22 px = 1.11994 py = -1.31727 pz = 5.41137 E = 5.68088
part 12 id = 130 px = -0.151476 py = -0.389603 pz = 18.067 E = 18.0787
part 13 id = -321 px = -0.516672 py = -0.553757 pz = 19.2324 E = 19.2536
part 14 id = 211 px = 0.0829556 py = 0.0993597 pz = 4.24924 E = 4.2535
part 15 id = 130 px = 0.375512 py = -0.621349 pz = 14.7582 E = 14.7844
part 16 id = 22 px = -0.0301481 py = -0.00922794 pz = 0.33583 E = 0.337307
part 17 id = 22 px = 0.340224 py = -0.445809 pz = 1.41281 E = 1.52004
part 18 id = 11 px = 0.075713 py = -0.141711 pz = 0.556192 E = 0.578934
part 19 id = -11 px = 0.124663 py = -0.154993 pz = 0.645015 E = 0.674987
part 19 id = -11 signed_pz = -0.645015
   ---> taking 19 as outgoing lepton
part 20 id = 22 px = 0.04499 py = -0.12844 pz = 0.397113 E = 0.419785
part 21 id = 22 px = 0.827752 py = -1.19367 pz = 4.91671 E = 5.1268
part 22 id = 22 px = 0.748384 py = -1.12375 pz = 4.89815 E = 5.08082
part 23 id = 22 px = -0.00267821 py = -0.00925982 pz = 0.0143985 E = 
0.0173273
part 24 id = 130 px = 0.287098 py = 0.19742 pz = 17.3042 E = 17.3149
part 25 id = 130 px = 0.122298 py = -0.0634414 pz = 25.2863 E = 25.2916
part 26 id = 22 px = 0.0347235 py = 0.144282 pz = 1.65602 E = 1.66266
part 27 id = 22 px = -0.0248541 py = 0.146226 pz = 3.67157 E = 3.67456
part 28 id = 211 px = 0.954048 py = -0.963005 pz = 3.13684 E = 3.42006
part 29 id = 211 px = 0.235199 py = -0.343671 pz = 1.4502 E = 1.51525
part 30 id = -12 px = 1.57995 py = -1.37946 pz = 7.29499 E = 7.59052
part 31 id = 11 px = 0.471629 py = -0.856397 pz = 2.71535 E = 2.88599
part 32 id = 211 px = -0.0294085 py = -0.547087 pz = 0.758253 E = 0.94583
part 33 id = -211 px = 0.0861909 py = -0.0196154 pz = 0.452828 E = 0.482023
part 34 id = 211 px = 0.225543 py = -0.161993 pz = 0.915438 E = 0.966756
part 35 id = -211 px = 0.571015 py = -0.738361 pz = 5.30456 E = 5.38786
part 36 id = 211 px = 0.129393 py = -0.267621 pz = 1.02406 E = 1.07542
part 37 id = -211 px = 1.77415 py = -1.73558 pz = 7.05777 E = 7.48274
part 38 id = 22 px = 0.205595 py = -0.0964995 pz = 1.00644 E = 1.03175
part 39 id = 22 px = -0.00465838 py = -0.055959 pz = 0.356084 E = 0.360484
part 40 id = 22 px = 0.567172 py = -0.788086 pz = 3.53189 E = 3.66293
part 41 id = 22 px = 0.406857 py = -0.734593 pz = 2.77624 E = 2.90046
part 42 id = 211 px = 0.374462 py = -0.325563 pz = 2.74971 E = 2.7976
part 43 id = -211 px = 0.206282 py = -0.339635 pz = 0.964825 E = 1.05274
part 44 id = -211 px = 1.22403 py = -0.939285 pz = 24.7002 E = 24.7488
part 45 id = 211 px = -0.401421 py = 0.084246 pz = 17.7685 E = 17.7737
part 46 id = 22 px = 0.657991 py = -0.669357 pz = 29.0299 E = 29.0451
part 47 id = 22 px = 0.30748 py = 0.0117005 pz = 5.16715 E = 5.17631
part 48 id = 22 px = -0.0346924 py = -0.117068 pz = 6.57012 E = 6.57125
part 49 id = 321 px = -0.74251 py = -0.217304 pz = 43.1924 E = 43.2021
part 50 id = -321 px = -0.140918 py = -0.269146 pz = 4.47808 E = 4.51544
fulfilled phase space cuts, Q2 = 72.8641 y = 0.999457 weight = 51.0074
scat. elec: E = 0.674987 theta = 0.299122

Here is the code that I used the generate this output. It's the code of 
DISLepton.cc with some output statements added.

     cout << "DISLepton: searching for ID " << id << " with pz > " << 
pzMax << endl;
     const FinalState& fs = applyProjection<FinalState>(e, "FS");
     int ipart = 0;
     foreach (const Particle& p, fs.particles()) {

       cout << "part " << ipart << " id = " << p.pdgId()
<< " px = " << p.momentum().px()
<< " py = " << p.momentum().py()
<< " pz = " << p.momentum().pz()
<< " E = " << p.momentum().E() << endl;
       double pz = _sign * p.momentum().pz();
       if(p.pdgId() == id && pz > pzMax){
         cout << "part " << ipart << " id = " << p.pdgId() << " 
signed_pz = " << _sign * p.momentum().pz() << endl;
         cout << "  ---> taking " << ipart << " as outgoing lepton " << 
endl;
         _outgoing = p;
         pzMax = pz;
       }
       ++ipart;
     }




On 8/15/11 10:17, Andy Buckley wrote:
> Hi Roman,
>
> I'm no DIS expert, but I think that the FinalStateHCM should do 
> something like that -- is it not acceptable?
>
> If that is not appropriate, you don't absolutely need to use the 
> "central registry" aspect of the projection system: you can make your 
> list of particles, boosted and filtered however you want, in the 
> analyze() method, and then use the calc() method of a local JetAlg 
> object to make the jets. Let us know if you need more help with this 
> direction: we've only recently started providing this sort of access 
> to projection features without having to register the projections -- 
> sometimes it's necessary, but the normal docs don't describe it!
>
> Cheers,
> Andy
>
>
> On 15/08/11 18:08, Roman Kogler wrote:
>> Dear Rivet authors and developers,
>>
>> I'm trying to implement a new jet analysis in Rivet. The data come from
>> H1. The analysis is not published yet, but we are close to the
>> publication. It's a measurement of inclusive jet, dijet and trijet cross
>> sections in DIS at high Q^2 (for more information have a look at
>> H1prelim-11-032).
>>
>> In this jet analysis jets are found in the Breit frame and I could not
>> find a way in Rivet how to do this. What I need is to boost the full
>> event to the Breit frame before the jet finding is performed. FastJet
>> should then be applied to all final state particles in the Breit frame.
>>
>> Is there an elegant solution to do this in Rivet?
>>
>> Thanks,
>> Roman
>>
>>
>
>


More information about the Rivet mailing list