18 {
19
20 if(ips.size() != 1){
22 ss <<
"Dijet::isSatisfied must see exactly 1 particle, but received "
23 << ips.size()
24 << '\n';
25 throw std::runtime_error(
ss.str());
26 }
27
28 auto jet = ips[0];
29
30
31 auto pt = jet->pt() * 0.001;
32 float detEta = 0;
33 if(!(jet->getAttribute("DetectorEta",detEta))){
34 throw std::runtime_error("JVT condition cannot retrieve variable 'DetectorEta', 'DetectorEta' does not exist");
35 }
36 auto absdetEta = std::abs(detEta);
38 bool pass = false;
39 float jvt = -1.;
40 if(!jvtApplicable){
41 pass = true;
42 } else {
43 if(!(jet->getAttribute("Jvt",jvt))){
44 throw std::runtime_error("JVT condition cannot retrieve variable 'Jvt', 'Jvt' does not exist");
45 }
46
48 }
49
50 if(collector){
51 std::stringstream ss0;
52 const void*
address =
static_cast<const void*
>(
this);
53 ss0 <<
"JVTCondition: (" <<
address
54 << ") jvt " << jvt
56 << " absdetEta " << absdetEta
57 << " pass: " <<std::boolalpha << pass << " jet group: \n";
58
59 std::stringstream ss1;
60
61 for(const auto& ip : ips){
62 address =
static_cast<const void*
>(
ip.get());
63 ss1 <<
" " <<
address <<
" " <<
ip->eta() <<
" pt " <<
ip->pt() <<
'\n';
64 }
65 ss1 << '\n';
66 collector ->
collect(ss0.str(), ss1.str());
67 }
68 return pass;
69
70}
void collect(const HLT::TriggerElement *te, std::vector< Trig::Feature< T > > &data, const std::string &label, unsigned int condition, const std::string &teName, const HLT::TrigNavStructure *navstructure)
actual feature acceess implementation It has (thanks to the ClassTraits) functionality to flatten con...