Page Menu
Home
HEPForge
Search
Configure Global Search
Log In
Files
F10881476
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Flag For Later
Size
24 KB
Subscribers
None
View Options
diff --git a/t/test_classify_new.cc b/t/test_classify_new.cc
index 17cc5c1..4c46644 100644
--- a/t/test_classify_new.cc
+++ b/t/test_classify_new.cc
@@ -1,425 +1,469 @@
/**
* \authors The HEJ collaboration (see AUTHORS for details)
* \date 2019
* \copyright GPLv2 or later
*/
#include <iostream>
#include <random>
#include "HEJ/Event.hh"
#include "HEJ/exceptions.hh"
#define ASSERT(x) if(!(x)) { \
throw std::logic_error("Assertion '" #x "' failed."); \
}
namespace {
const fastjet::JetDefinition jet_def{fastjet::JetAlgorithm::antikt_algorithm, 0.4};
const double min_jet_pt{30.};
+ // @TODO maybe it is a bit excessive to test _all_ (anti-) quarks
const std::array<std::string, 8> all_quarks{"-4","-3","-2","-1","1","2","3","4"};
const std::array<std::string, 9> all_partons{"g","-4","-3","-2","-1","1","2","3","4"};
const std::array<std::string, 3> all_bosons{"h", "Wp", "Wm"};
static std::mt19937_64 ran{0};
void shuffle_particles(HEJ::Event::EventData & ev) {
std::shuffle(begin(ev.incoming), end(ev.incoming), ran);
std::shuffle(begin(ev.outgoing), end(ev.outgoing), ran);
}
// if pos_boson = -1 (or not implemented) -> no boson
HEJ::Event::EventData get_process(int const njet, int const pos_boson){
HEJ::Event::EventData ev;
if(njet == 2){
switch(pos_boson){
case 0:
ev.outgoing.push_back({HEJ::ParticleID::higgs, { 198, 33, -170, 291}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, {-154, 68, 44, 174}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, { -44, -101, 88, 141}, {}});
ev.incoming[0] = {HEJ::ParticleID::gluon, { 0, 0, -322, 322}, {}};
ev.incoming[1] = {HEJ::ParticleID::gluon, { 0, 0, 284, 284}, {}};
return ev;
case 1:
ev.outgoing.push_back({HEJ::ParticleID::gluon, { -6, 82, -159, 179}, {}});
ev.outgoing.push_back({HEJ::ParticleID::higgs, { 195, -106, 74, 265}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, {-189, 24, 108, 219}, {}});
ev.incoming[0] = {HEJ::ParticleID::gluon, { 0, 0, -320, 320}, {}};
ev.incoming[1] = {HEJ::ParticleID::gluon, { 0, 0, 343, 343}, {}};
return ev;
case 2:
ev.outgoing.push_back({HEJ::ParticleID::gluon, { -80, -80, -140, 180}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, { -60, -32, 0, 68}, {}});
ev.outgoing.push_back({HEJ::ParticleID::higgs, { 140, 112, 177, 281}, {}});
ev.incoming[0] = {HEJ::ParticleID::gluon, { 0, 0, -246, 246}, {}};
ev.incoming[1] = {HEJ::ParticleID::gluon, { 0, 0, 283, 283}, {}};
return ev;
default:
ev.outgoing.push_back({HEJ::ParticleID::gluon, { -72, 24, 18, 78}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, { 72, -24, 74, 106}, {}});
ev.incoming[0] = {HEJ::ParticleID::gluon, { 0, 0, -46, 46}, {}};
ev.incoming[1] = {HEJ::ParticleID::gluon, { 0, 0, 138, 138}, {}};
return ev;
}
}
if(njet == 3){
switch(pos_boson){
case 0:
ev.outgoing.push_back({HEJ::ParticleID::higgs, { 152, -117, -88, 245}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, {-146, 62, -11, 159}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, { 126, -72, 96, 174}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, {-132, 127, 144, 233}, {}});
ev.incoming[0] = {HEJ::ParticleID::gluon, { 0, 0, -335, 335}, {}};
ev.incoming[1] = {HEJ::ParticleID::gluon, { 0, 0, 476, 476}, {}};
return ev;
case 1:
ev.outgoing.push_back({HEJ::ParticleID::gluon, {-191, 188, -128, 297}, {}});
ev.outgoing.push_back({HEJ::ParticleID::higgs, { 199, 72, -76, 257}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, { 184, -172, -8, 252}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, {-192, -88, 54, 218}, {}});
ev.incoming[0] = {HEJ::ParticleID::gluon, { 0, 0, -591, 591}, {}};
ev.incoming[1] = {HEJ::ParticleID::gluon, { 0, 0, 433, 433}, {}};
return ev;
case 2:
ev.outgoing.push_back({HEJ::ParticleID::gluon, { -42, 18, -49, 67}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, { -12, -54, -28, 62}, {}});
ev.outgoing.push_back({HEJ::ParticleID::higgs, { 99, 32, -16, 163}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, { -45, 4, 72, 85}, {}});
ev.incoming[0] = {HEJ::ParticleID::gluon, { 0, 0, -199, 199}, {}};
ev.incoming[1] = {HEJ::ParticleID::gluon, { 0, 0, 178, 178}, {}};
return ev;
case 3:
ev.outgoing.push_back({HEJ::ParticleID::gluon, { -65, -32, -76, 105}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, { -22, 31, -34, 51}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, { -12, -67, -36, 77}, {}});
ev.outgoing.push_back({HEJ::ParticleID::higgs, { 99, 68, -4, 173}, {}});
ev.incoming[0] = {HEJ::ParticleID::gluon, { 0, 0, -278, 278}, {}};
ev.incoming[1] = {HEJ::ParticleID::gluon, { 0, 0, 128, 128}, {}};
return ev;
default:
ev.outgoing.push_back({HEJ::ParticleID::gluon, { -90, -135, 30, 165}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, {-108, 198, 76, 238}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, { 198, -63, 126, 243}, {}});
ev.incoming[0] = {HEJ::ParticleID::gluon, { 0, 0, -207, 207}, {}};
ev.incoming[1] = {HEJ::ParticleID::gluon, { 0, 0, 439, 439}, {}};
return ev;
}
}
if(njet == 4){
switch(pos_boson){
case 0:
ev.outgoing.push_back({HEJ::ParticleID::higgs, { 199, 72, -76, 257}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, {-200, -155, -64, 261}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, { 198, 194, 57, 283}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, { 1, 32, 8, 33}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, {-198, -143, 186, 307}, {}});
ev.incoming[0] = {HEJ::ParticleID::gluon, { 0, 0, -515, 515}, {}};
ev.incoming[1] = {HEJ::ParticleID::gluon, { 0, 0, 626, 626}, {}};
return ev;
case 1:
ev.outgoing.push_back({HEJ::ParticleID::gluon, { 198, 61, -162, 263}, {}});
ev.outgoing.push_back({HEJ::ParticleID::higgs, { 199, 72, -76, 257}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, {-200, 135, 144, 281}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, {-198, -186, 171, 321}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, { 1, -82, 122, 147}, {}});
ev.incoming[0] = {HEJ::ParticleID::gluon, { 0, 0, -535, 535}, {}};
ev.incoming[1] = {HEJ::ParticleID::gluon, { 0, 0, 734, 734}, {}};
return ev;
case 2:
ev.outgoing.push_back({HEJ::ParticleID::gluon, {-180, -27, -164, 245}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, {-108, 78, -36, 138}, {}});
ev.outgoing.push_back({HEJ::ParticleID::higgs, { 196, -189, 68, 307}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, {-107, 136, 76, 189}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, { 199, 2, 178, 267}, {}});
ev.incoming[0] = {HEJ::ParticleID::gluon, { 0, 0, -512, 512}, {}};
ev.incoming[1] = {HEJ::ParticleID::gluon, { 0, 0, 634, 634}, {}};
return ev;
case 3:
ev.outgoing.push_back({HEJ::ParticleID::gluon, { -12, -30, -84, 90}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, { -72, 22, -96, 122}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, { 68, 0, -51, 85}, {}});
ev.outgoing.push_back({HEJ::ParticleID::higgs, { 64, 72, -81, 177}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, { -48, -64, 84, 116}, {}});
ev.incoming[0] = {HEJ::ParticleID::gluon, { 0, 0, -409, 409}, {}};
ev.incoming[1] = {HEJ::ParticleID::gluon, { 0, 0, 181, 181}, {}};
return ev;
case 4:
ev.outgoing.push_back({HEJ::ParticleID::gluon, { -72, -49, -72, 113}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, { -48, 0, -36, 60}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, { -12, 54, -36, 66}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, { 68, -77, -56, 117}, {}});
ev.outgoing.push_back({HEJ::ParticleID::higgs, { 64, 72, -81, 177}, {}});
ev.incoming[0] = {HEJ::ParticleID::gluon, { 0, 0, -407, 407}, {}};
ev.incoming[1] = {HEJ::ParticleID::gluon, { 0, 0, 126, 126}, {}};
return ev;
default:
ev.outgoing.push_back({HEJ::ParticleID::gluon, { 248, -56, -122, 282}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, { 249, 30, -10, 251}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, {-249, -18, 26, 251}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, {-248, 44, 199, 321}, {}});
ev.incoming[0] = {HEJ::ParticleID::gluon, { 0, 0, -506, 506}, {}};
ev.incoming[1] = {HEJ::ParticleID::gluon, { 0, 0, 599, 599}, {}};
return ev;
}
}
if(njet == 6){
switch(pos_boson){
case 0:
ev.outgoing.push_back({HEJ::ParticleID::higgs, { 349, 330, -94, 505}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, {-315, -300, 0, 435}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, { 347, 306, 18, 463}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, {-249, -342, 162, 453}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, { 345, 312, 284, 545}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, {-324, -126, 292, 454}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, {-153, -180, 304, 385}, {}});
ev.incoming[0] = {HEJ::ParticleID::gluon, { 0, 0, -1137, 1137}, {}};
ev.incoming[1] = {HEJ::ParticleID::gluon, { 0, 0, 2103, 2103}, {}};
return ev;
case 1:
ev.outgoing.push_back({HEJ::ParticleID::gluon, { 242, 241, -182, 387}, {}});
ev.outgoing.push_back({HEJ::ParticleID::higgs, { 243, 238, -190, 409}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, {-218, -215, -74, 315}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, {-224, -224, 112, 336}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, { 241, 182, 154, 339}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, { -53, -234, 126, 271}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, {-231, 12, 156, 279}, {}});
ev.incoming[0] = {HEJ::ParticleID::gluon, { 0, 0, -1117, 1117}, {}};
ev.incoming[1] = {HEJ::ParticleID::gluon, { 0, 0, 1219, 1219}, {}};
return ev;
case 2:
ev.outgoing.push_back({HEJ::ParticleID::gluon, { 151, 102, -42, 187}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, { -86, -46, -17, 99}, {}});
ev.outgoing.push_back({HEJ::ParticleID::higgs, { 152, 153, 0, 249}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, { -60, -135, 64, 161}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, { 150, 123, 110, 223}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, {-154, -49, 98, 189}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, {-153, -148, 144, 257}, {}});
ev.incoming[0] = {HEJ::ParticleID::gluon, { 0, 0, -504, 504}, {}};
ev.incoming[1] = {HEJ::ParticleID::gluon, { 0, 0, 861, 861}, {}};
return ev;
case 3:
ev.outgoing.push_back({HEJ::ParticleID::gluon, { 198, 197, -66, 287}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, {-198, -189, -54, 279}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, {-200, -64, 2, 210}, {}});
ev.outgoing.push_back({HEJ::ParticleID::higgs, { 199, 158, 6, 283}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, {-199, -184, 172, 321}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, { 196, 168, 177, 313}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, { 4, -86, 92, 126}, {}});
ev.incoming[0] = {HEJ::ParticleID::gluon, { 0, 0, -745, 745}, {}};
ev.incoming[1] = {HEJ::ParticleID::gluon, { 0, 0, 1074, 1074}, {}};
return ev;
case 4:
ev.outgoing.push_back({HEJ::ParticleID::gluon, { 151, 102, -42, 187}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, { -86, -133, -14, 159}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, {-154, -104, -8, 186}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, { -60, 11, 0, 61}, {}});
ev.outgoing.push_back({HEJ::ParticleID::higgs, { 152, 153, 0, 249}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, { 150, 125, 90, 215}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, {-153, -154, 126, 251}, {}});
ev.incoming[0] = {HEJ::ParticleID::gluon, { 0, 0, -578, 578}, {}};
ev.incoming[1] = {HEJ::ParticleID::gluon, { 0, 0, 730, 730}, {}};
return ev;
case 5:
ev.outgoing.push_back({HEJ::ParticleID::gluon, { -15, -90, -94, 131}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, { -11, 82, -74, 111}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, { 23, -80, -64, 105}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, { -48, -25, -36, 65}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, { -12, 99, -16, 101}, {}});
ev.outgoing.push_back({HEJ::ParticleID::higgs, { 68, 92, -18, 170}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, { -5, -78, 54, 95}, {}});
ev.incoming[0] = {HEJ::ParticleID::gluon, { 0, 0, -513, 513}, {}};
ev.incoming[1] = {HEJ::ParticleID::gluon, { 0, 0, 265, 265}, {}};
return ev;
case 6:
ev.outgoing.push_back({HEJ::ParticleID::gluon, { 198, 197, -66, 287}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, { 4, -84, -18, 86}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, {-198, -60, -36, 210}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, { 196, -78, -36, 214}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, {-200, 45, 0, 205}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, {-199, -178, 2, 267}, {}});
ev.outgoing.push_back({HEJ::ParticleID::higgs, { 199, 158, 6, 283}, {}});
ev.incoming[0] = {HEJ::ParticleID::gluon, { 0, 0, -850, 850}, {}};
ev.incoming[1] = {HEJ::ParticleID::gluon, { 0, 0, 702, 702}, {}};
return ev;
default:
ev.outgoing.push_back({HEJ::ParticleID::gluon, {-350, -112, -280, 462}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, { 347, 266, -322, 543}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, {-349, -314, -38, 471}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, { 349, 348, 12, 493}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, {-342, -54, 23, 347}, {}});
ev.outgoing.push_back({HEJ::ParticleID::gluon, { 345, -134, 138, 395}, {}});
ev.incoming[0] = {HEJ::ParticleID::gluon, { 0, 0, -1589, 1589}, {}};
ev.incoming[1] = {HEJ::ParticleID::gluon, { 0, 0, 1122, 1122}, {}};
return ev;
}
}
throw HEJ::unknown_option{"unkown process"};
}
bool couple_quark(std::string const & boson, std::string & quark){
if(abs(HEJ::to_ParticleID(boson)) == HEJ::ParticleID::Wp){
auto qflav{ HEJ::to_ParticleID(quark) };
if(!HEJ::is_anyquark(qflav)) return false;
const int W_charge = HEJ::to_ParticleID(boson)>0?1:-1;
if(W_charge*qflav < 0 && !(abs(qflav)%2)) return false; // not anti-down
if(W_charge*qflav > 0 && (abs(qflav)%2)) return false; // not up
quark=std::to_string(qflav-W_charge);
}
return true;
}
// create event corresponding from given Configuration
HEJ::Event parse_configuration(
std::array<std::string,2> const & in, std::vector<std::string> const & out
){
auto boson = std::find_if(out.cbegin(), out.cend(),
[](std::string id){ return HEJ::is_AWZH_boson(HEJ::to_ParticleID(id)); });
int const pos_boson = (boson == out.cend())?-1:std::distance(out.cbegin(), boson);
size_t njets = out.size();
if(boson != out.cend()) --njets;
HEJ::Event::EventData ev{get_process(njets, pos_boson)};
ASSERT((pos_boson==-1) || (ev.outgoing[pos_boson].type == HEJ::ParticleID::higgs));
for(size_t i=0; i<out.size(); ++i){
ev.outgoing[i].type = HEJ::to_ParticleID(out[i]);
}
for(size_t i=0; i<in.size(); ++i){
ev.incoming[i].type = HEJ::to_ParticleID(in[i]);
}
shuffle_particles(ev);
auto const clustered{ ev.cluster(jet_def, min_jet_pt) };
ASSERT(clustered.jets().size() == njets);
return clustered;
}
bool match_expectation( HEJ::event_type::EventType expected,
std::array<std::string,2> const & in, std::vector<std::string> const & out
){
HEJ::Event ev{parse_configuration(in,out)};
if(ev.type() != expected){
std::cerr << "Expected type " << HEJ::event_type::names[expected]
<< " but found " << HEJ::event_type::names[ev.type()] << "\n" << ev;
return false;
}
return true;
}
bool check_fkl(){
using namespace HEJ;
for(int njet=2; njet<=6; ++njet){ // all multiplicities
if(njet==5) continue;
for(std::string const & first: all_partons) // all quark flavours
for(std::string const & last: all_partons){
std::array<std::string,2> base_in{first,last};
std::vector<std::string> base_out(njet, "g");
base_out.front() = first;
base_out.back() = last;
if(!match_expectation(event_type::FKL, base_in, base_out))
return false;
for(auto const & boson: all_bosons) // any boson
for(int pos=0; pos<=njet; ++pos){ // at any position
auto in{base_in};
auto out{base_out};
// change quark flavours for W
int couple_idx{ std::uniform_int_distribution<int>{0,1}(ran) };
if(!couple_quark(boson, couple_idx?out.back():out.front()))
continue;
out.insert(out.begin()+pos, boson);
if(!match_expectation(event_type::FKL, in, out))
return false;
}
}
}
return true;
}
bool check_uno(){
using namespace HEJ;
for(int njet=3; njet<=6; ++njet){ // all multiplicities >2
if(njet==5) continue;
for(std::string const & uno: all_quarks) // all quark flavours
for(std::string const & fkl: all_partons){
for(int i=0; i<2; ++i){ // forward & backwards
std::array<std::string,2> base_in;
std::vector<std::string> base_out(njet, "g");
const int uno_pos = i?1:(njet-2);
const int fkl_pos = i?(njet-1):0;
base_in[i?0:1] = uno;
base_in[i?1:0] = fkl;
base_out[uno_pos] = uno;
base_out[fkl_pos] = fkl;
HEJ::event_type::EventType expectation{ i?event_type::unob:event_type::unof };
if( !match_expectation(expectation, base_in, base_out) )
return false;
for(auto const & boson: all_bosons) // any boson
// at any position inside FKL chain
for(int pos=i?(uno_pos+1):fkl_pos; pos<=(i?(fkl_pos+1):uno_pos); ++pos){
auto in{base_in};
auto out{base_out};
// change quark flavours for W
bool couple_idx{ std::uniform_int_distribution<int>{0,1}(ran) };
if(!couple_quark(boson, couple_idx?out[fkl_pos]:out[uno_pos]))
continue;
out.insert(out.begin()+pos, boson);
if(!match_expectation(expectation, in, out))
return false;
}
}
}
}
return true;
}
bool check_extremal_qqx(){
using namespace HEJ;
for(int njet=3; njet<=6; ++njet){ // all multiplicities >2
if(njet==5) continue;
for(std::string const & qqx: all_quarks) // all quark flavours
for(std::string const & fkl: all_partons){
for(int i=0; i<2; ++i){ // forward & backwards
std::array<std::string,2> base_in;
std::vector<std::string> base_out(njet, "g");
const int qqx_pos = i?0:(njet-2);
const int fkl_pos = i?(njet-1):0;
base_in[i?0:1] = "g";
base_in[i?1:0] = fkl;
base_out[fkl_pos] = fkl;
base_out[qqx_pos] = qqx;
- base_out[qqx_pos+1] = std::to_string(HEJ::to_ParticleID(qqx) * -1);
+ base_out[qqx_pos+1] = std::to_string(HEJ::to_ParticleID(qqx)*-1);
HEJ::event_type::EventType expectation{ i?event_type::qqxexb:event_type::qqxexf };
// extremal qqx for pure jets not implemented yet
// if( !match_expectation(expectation, base_in, base_out) )
// return false;
for(auto const & boson: {"Wp","Wm"}) // only W
// at any position
for(int pos=0; pos<=njet; ++pos){
auto in{base_in};
auto out{base_out};
// change quark flavours for W
bool couple_idx{ std::uniform_int_distribution<int>{0,1}(ran) };
if(couple_idx || !couple_quark(boson, out[fkl_pos]) ){
// (randomly) try couple to FKL, else fall-back to qqx
if(!couple_quark(boson, out[qqx_pos]))
couple_quark(boson, out[qqx_pos+1]);
}
out.insert(out.begin()+pos, boson);
if(!match_expectation(expectation, in, out))
return false;
}
}
}
}
return true;
}
+
+ bool check_central_qqx(){
+ using namespace HEJ;
+ for(int njet=4; njet<=6; ++njet){ // all multiplicities >3
+ if(njet==5) continue;
+ for(std::string const & qqx: all_quarks) // all quark flavours
+ for(std::string const & fkl1: all_partons)
+ for(std::string const & fkl2: all_partons){
+ for(int qqx_pos=1; qqx_pos<njet-2; ++qqx_pos){ // any qqx position
+ std::array<std::string,2> base_in;
+ std::vector<std::string> base_out(njet, "g");
+ base_in[0] = fkl1;
+ base_in[1] = fkl2;
+ base_out.front() = fkl1;
+ base_out.back() = fkl2;
+ base_out[qqx_pos] = qqx;
+ base_out[qqx_pos+1] = std::to_string(HEJ::to_ParticleID(qqx)*-1);
+ // extremal qqx for pure jets not implemented yet
+ // if( !match_expectation(expectation, base_in, base_out) )
+ // return false;
+ for(auto const & boson: {"Wp","Wm"}) // only W
+ // at any position
+ for(int pos=0; pos<=njet; ++pos){
+ auto in{base_in};
+ auto out{base_out};
+ // change quark flavours for W
+ int couple_idx{ std::uniform_int_distribution<int>{0,2}(ran) };
+ // (randomly) try couple to FKL, else fall-back to qqx
+ if( couple_idx == 0 && couple_quark(boson, out.front()) ){}
+ else if( couple_idx == 1 && couple_quark(boson, out.back()) ){}
+ else {
+ if(!couple_quark(boson, out[qqx_pos]))
+ couple_quark(boson, out[qqx_pos+1]);
+ }
+ if(!match_expectation(event_type::qqxmid, in, out))
+ return false;
+ }
+ }
+ }
+ }
+ return true;
+ }
}
int main() {
if(!check_fkl()) return EXIT_FAILURE;
if(!check_uno()) return EXIT_FAILURE;
if(!check_extremal_qqx()) return EXIT_FAILURE;
+ if(!check_central_qqx()) return EXIT_FAILURE;
//TODO next:
- // central qqx
// test a bunch of Non-HEJ configurations
+ // some check for partons sharing a jet
return EXIT_SUCCESS;
}
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Sat, May 3, 6:25 AM (1 d, 13 h)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
4971281
Default Alt Text
(24 KB)
Attached To
rHEJ HEJ
Event Timeline
Log In to Comment