The Gaudi Framework  master (37c0b60a)
NodePIDs.cpp
Go to the documentation of this file.
1 /***********************************************************************************\
2 * (c) Copyright 1998-2023 CERN for the benefit of the LHCb and ATLAS collaborations *
3 * *
4 * This software is distributed under the terms of the Apache version 2 licence, *
5 * copied verbatim in the file "LICENSE". *
6 * *
7 * In applying this licence, CERN does not waive the privileges and immunities *
8 * granted to it by virtue of its status as an Intergovernmental Organization *
9 * or submit itself to any jurisdiction. *
10 \***********************************************************************************/
11 #include <Gaudi/Decays/NodesPIDs.h>
12 #include <Gaudi/Decays/Symbols.h>
14 #include <Gaudi/ParticleID.h>
15 #include <Gaudi/ParticleProperty.h>
16 #include <GaudiKernel/SmartIF.h>
18 #include <algorithm>
19 #include <climits>
20 #include <functional>
21 
22 namespace Decays = Gaudi::Decays;
23 
29 namespace {
36  constexpr double s_SHORTLIVED = 0.1 * Gaudi::Units::micrometer;
43  constexpr double s_LONGLIVED = s_SHORTLIVED;
50  constexpr double s_STABLE = 1 * Gaudi::Units::meter;
57  constexpr double s_INFINITY = 0.5 * std::numeric_limits<double>::max();
58 } // namespace
59 namespace Gaudi::Decays {
60  /* Create the "OR" of two nodes
61  * @author Vanya BELYAEV Ivan.Belyaev@nikhef.nl
62  * @date 2008-04-12
63  */
65  return o1 || Decays::Nodes::Pid( o2 );
66  }
68  return o1 || Decays::Nodes::Pid( o2 );
69  }
71  return o1 || Decays::Nodes::Pid( o2 );
72  }
74  return o1 || Decays::Nodes::Pid( o2 );
75  }
77  return Decays::Nodes::Pid( o2 ) || o1;
78  }
80  return Decays::Nodes::Pid( o2 ) || o1;
81  }
83  return Decays::Nodes::Pid( o2 ) || o1;
84  }
86  return Decays::Nodes::Pid( o2 ) || o1;
87  }
88  /* Create the "AND" of two nodes
89  * @author Vanya BELYAEV Ivan.Belyaev@nikhef.nl
90  * @date 2008-04-12
91  */
93  return o1 && Decays::Nodes::Pid( o2 );
94  }
96  return o1 && Decays::Nodes::Pid( o2 );
97  }
99  return o1 && Decays::Nodes::Pid( o2 );
100  }
102  return o1 && Decays::Nodes::Pid( o2 );
103  }
105  return Decays::Nodes::Pid( o2 ) && o1;
106  }
108  return Decays::Nodes::Pid( o2 ) && o1;
109  }
111  return Decays::Nodes::Pid( o2 ) && o1;
112  }
114  return Decays::Nodes::Pid( o2 ) && o1;
115  }
116 } // namespace Gaudi::Decays
117 // MANDATORY: clone method ("virtual constructor")
118 Decays::Nodes::Any* Decays::Nodes::Any::clone() const { return new Any( *this ); }
119 // MANDATORY: check the validity
120 bool Decays::Nodes::Any::valid() const { return true; }
121 // MANDATORY: the proper validation of the node
123  return StatusCode::SUCCESS;
124 }
125 // MANDATORY: the only one essential method
126 bool Decays::Nodes::Any::operator()( const Gaudi::ParticleID& /* p */ ) const { return true; }
127 
128 // MANDATORY: clone method ("virtual constructor")
129 Decays::Nodes::Pid* Decays::Nodes::Pid::clone() const { return new Pid( *this ); }
130 // MANDATORY: clone method ("virtual constructor")
131 Decays::Nodes::CC* Decays::Nodes::CC::clone() const { return new CC( *this ); }
132 
133 // xSpin: valid only for reasonable spin
134 bool Decays::Nodes::JSpin::valid() const { return 0 < spin(); }
135 // MANDATORY: the proper validation of the node
137  return valid() ? StatusCode::SUCCESS : StatusCode{ InvalidSpin };
138 }
139 
140 // constructor from the decay item
141 Decays::Nodes::Pid::Pid( const Decays::Decay::Item& item ) : Decays::iNode(), m_item( item ) {}
142 // constructor from Particle Property
143 Decays::Nodes::Pid::Pid( const Gaudi::ParticleProperty* item ) : Decays::iNode(), m_item( item ) {}
144 // constructor from ParticleID
145 Decays::Nodes::Pid::Pid( const Gaudi::ParticleID& item ) : Decays::iNode(), m_item( item ) {}
146 // constructor from Particle name
147 Decays::Nodes::Pid::Pid( const std::string& item ) : Decays::iNode(), m_item( item ) {}
148 // MANDATORY: check the validity
149 bool Decays::Nodes::Pid::valid() const { return 0 != m_item.pp(); }
150 // MANDATORY: the proper validation of the node
152  return m_item.validate( svc );
153 }
154 
155 // constructor from the decay item
157 // constructor from Particle Property
159 // constructor from ParticleID
161 // constructor from Particle name
162 Decays::Nodes::CC::CC( const std::string& item ) : Decays::Nodes::Pid( item ) {}
163 // constructor from Pid
165 
166 // MANDATORY: clone method ("virtual constructor")
167 Decays::Nodes::Meson* Decays::Nodes::Meson::clone() const { return new Meson( *this ); }
168 // MANDATORY: clone method ("virtual constructor")
170 // MANDATORY: clone method ("virtual constructor")
171 Decays::Nodes::Nu* Decays::Nodes::Nu::clone() const { return new Nu( *this ); }
172 // MANDATORY: clone method ("virtual constructor")
173 Decays::Nodes::Ell* Decays::Nodes::Ell::clone() const { return new Ell( *this ); }
174 // MANDATORY: clone method ("virtual constructor")
176 // MANDATORY: clone method ("virtual constructor")
178 // MANDATORY: clone method ("virtual constructor")
180 // MANDATORY: clone method ("virtual constructor")
182 // MANDATORY: clone method ("virtual constructor")
184 // MANDATORY: clone method ("virtual constructor")
186 // MANDATORY: clone method ("virtual constructor")
188 // MANDATORY: clone method ("virtual constructor")
190 // MANDATORY: clone method ("virtual constructor")
192 // MANDATORY: clone method ("virtual constructor")
194 // MANDATORY: clone method ("virtual constructor")
195 Decays::Nodes::JSpin* Decays::Nodes::JSpin::clone() const { return new JSpin( *this ); }
196 // MANDATORY: clone method ("virtual constructor")
197 Decays::Nodes::SSpin* Decays::Nodes::SSpin::clone() const { return new SSpin( *this ); }
198 // MANDATORY: clone method ("virtual constructor")
199 Decays::Nodes::LSpin* Decays::Nodes::LSpin::clone() const { return new LSpin( *this ); }
200 
201 // constructor from the quark
203 // constructor from the 2J+1
204 Decays::Nodes::JSpin::JSpin( const int spin ) : Decays::Nodes::Any(), m_spin( spin ) {}
205 // constructor from the 2S+1
206 Decays::Nodes::SSpin::SSpin( const int spin ) : Decays::Nodes::JSpin( spin ) {}
207 // constructor from the 2L+1
208 Decays::Nodes::LSpin::LSpin( const int spin ) : Decays::Nodes::SSpin( spin ) {}
209 
211 std::ostream& Decays::Nodes::Pid::fillStream( std::ostream& s ) const { return s << " " << m_item.name() << " "; }
212 std::ostream& Decays::Nodes::CC::fillStream( std::ostream& s ) const { return s << " [" << item().name() << "]cc "; }
213 std::ostream& Decays::Nodes::Meson::fillStream( std::ostream& s ) const { return s << " Meson "; }
214 std::ostream& Decays::Nodes::Hadron::fillStream( std::ostream& s ) const { return s << " Hadron "; }
215 std::ostream& Decays::Nodes::Baryon::fillStream( std::ostream& s ) const { return s << " Baryon "; }
216 std::ostream& Decays::Nodes::Lepton::fillStream( std::ostream& s ) const { return s << " Lepton "; }
225 std::ostream& Decays::Nodes::Nucleus::fillStream( std::ostream& s ) const { return s << " Nucleus "; }
227  switch ( m_quark ) {
229  return s << " Xd ";
231  return s << " Xu ";
233  return s << " Xs ";
235  return s << " Xc ";
237  return s << " Xb ";
239  return s << " Xt ";
240  default:;
241  }
242  return s << " HasQuark(" << (int)m_quark << ") ";
243 }
245  switch ( spin() ) {
246  case 1:
247  return s << " Scalar ";
248  case 2:
249  return s << " Spinor ";
250  case 3:
251  return s << " Vector ";
252  case 4:
253  return s << " ThreeHalf ";
254  case 5:
255  return s << " Tensor ";
256  case 6:
257  return s << " FiveHalf ";
258  default:;
259  }
260  return s << " JSpin(" << m_spin << ") ";
261 }
262 std::ostream& Decays::Nodes::SSpin::fillStream( std::ostream& s ) const { return s << " SSpin(" << spin() << ") "; }
263 std::ostream& Decays::Nodes::LSpin::fillStream( std::ostream& s ) const { return s << " LSpin(" << spin() << ") "; }
264 
265 // constructor from c-tau range & Service
266 Decays::Nodes::CTau::CTau( const double low, const double high, const Gaudi::Interfaces::IParticlePropertySvc* svc )
267  : m_low( low ), m_high( high ) {
268  if ( svc ) { m_ppSvc = const_cast<Gaudi::Interfaces::IParticlePropertySvc*>( svc ); }
269 }
270 // MANDATORY: clone method ("virtual constructor")
271 Decays::Nodes::CTau* Decays::Nodes::CTau::clone() const { return new CTau( *this ); }
272 // MANDATORY: the specific printout
274  return s << " CTau(" << low() << "," << high() << ") ";
275 }
276 // MANDATORY: check the validity
277 bool Decays::Nodes::CTau::valid() const { return m_ppSvc.isValid(); }
278 // MANDATORY: the proper validation of the node
280  return setService( svc );
281 }
282 // MANDATORY: the only one essential method
284  return classify( pid, [&]( Gaudi::ParticleID id ) {
285  // invalid node
286  if ( !ppSvc() ) { return false; } // REJECT for invalid service
287  // use the service
288  const Gaudi::ParticleProperty* pp = ppSvc()->find( id );
289  if ( !pp ) { return false; } // REJECT for invalid dparticle
290  // final decision: check ctau range
291  const auto ctau = pp->ctau();
292  return low() <= ctau && ctau <= high();
293  } );
294 }
295 bool Decays::Nodes::CTau::add_( Gaudi::ParticleID pid, bool acc ) const {
296  return m_pids.with_lock(
297  []( KnownPids& pids, Gaudi::ParticleID pid, bool acc ) {
298  auto& c = ( acc ? pids.accepted : pids.rejected );
299  auto ifind = std::lower_bound( c.begin(), c.end(), pid );
300  if ( c.end() == ifind || pid < ( *ifind ) ) { c.insert( ifind, pid ); }
301  return acc;
302  },
303  pid, acc );
304 }
305 // MANDATORY: the proper validation of the node
307  // if service is substituted, clear the cache
308  if ( m_ppSvc != svc ) {
309  m_pids.with_lock( []( KnownPids& pids ) {
310  pids.accepted.clear();
311  pids.rejected.clear();
312  } );
313  }
314  //
315  if ( svc ) {
316  m_ppSvc = const_cast<Gaudi::Interfaces::IParticlePropertySvc*>( svc );
317  } else {
318  m_ppSvc = nullptr;
319  }
320  //
321  return m_ppSvc.isValid() ? StatusCode::SUCCESS : StatusCode::FAILURE;
322 }
323 // constructor from c-tau range & Service
324 Decays::Nodes::Mass::Mass( const double low, const double high, const Gaudi::Interfaces::IParticlePropertySvc* svc )
325  : Decays::Nodes::CTau( low, high, svc ) {}
326 // MANDATORY: clone method ("virtual constructor")
327 Decays::Nodes::Mass* Decays::Nodes::Mass::clone() const { return new Mass( *this ); }
328 // MANDATORY: the specific printout
330  return s << " Mass(" << low() << "," << high() << ") ";
331 }
332 // MANDATORY: the only one essential method
334  return classify( pid, [&]( Gaudi::ParticleID pid ) {
335  // invalid node
336  if ( !ppSvc() ) { return false; } // REJECT for invaild service
337  // use the service
338  const Gaudi::ParticleProperty* pp = ppSvc()->find( pid );
339  if ( !pp ) { return false; } // REJECT for invalid particle
340  // final decision: check mass range
341  const auto mass = pp->mass();
342  return low() <= mass && mass <= high();
343  } );
344 }
345 
346 namespace {
347  // idea coming from The art of computer programming by Knuth
348  constexpr bool essentiallyEqual( double const a, double const b ) {
349  return std::abs( a - b ) <= std::min( std::abs( a ), std::abs( b ) ) * std::numeric_limits<double>::epsilon();
350  }
351 } // namespace
352 
353 // constructor with high edge and service
355  : Decays::Nodes::CTau( -1 * Gaudi::Units::km, high, svc ) {}
356 // constructor with high edge and service
358  : Decays::Nodes::CTau( -1 * Gaudi::Units::km, s_SHORTLIVED, svc ) {}
359 // MANDATORY: clone method ("virtual constructor")
361  return new Decays::Nodes::ShortLived_( *this );
362 }
363 // MANDATORY: the specific printout
365  if ( essentiallyEqual( high(), s_SHORTLIVED ) ) { return s << " ShortLived "; }
366  return s << " ShortLived_( " << high() << ") ";
367 }
368 
369 // constructor with high edge and service
371  : Decays::Nodes::CTau( low, s_INFINITY, svc ) {}
372 // constructor with high edge and service
374  : Decays::Nodes::CTau( s_LONGLIVED, s_INFINITY, svc ) {}
375 // MANDATORY: clone method ("virtual constructor")
377 // MANDATORY: the specific printout
379  if ( essentiallyEqual( low(), s_LONGLIVED ) ) { return s << " LongLived "; }
380  return s << " LongLived_( " << low() << ") ";
381 }
382 
383 // constructor with the service
385  : Decays::Nodes::LongLived_( s_STABLE, svc ) {}
386 // MANDATORY: clone method ("virtual constructor")
388 // MANDATORY: the specific printout
389 std::ostream& Decays::Nodes::Stable::fillStream( std::ostream& s ) const { return s << " Stable "; }
390 
391 // constructor with the service
393  : Decays::Nodes::Stable( svc ) {}
394 // MANDATORY: clone method ("virtual constructor")
396  return new Decays::Nodes::StableCharged( *this );
397 }
398 // MANDATORY: the specific printout
399 std::ostream& Decays::Nodes::StableCharged::fillStream( std::ostream& s ) const { return s << " StableCharged "; }
400 // MANDATORY: the only one essential method
402  return classify( pid, [&]( Gaudi::ParticleID id ) {
403  // invalid node
404  if ( !ppSvc() ) { return false; } // REJECT for invalid service
405  // use the service
406  const Gaudi::ParticleProperty* pp = ppSvc()->find( id );
407  if ( !pp ) { return false; } // REJECT for invalid dparticle
408  // final decision: check ctau range
409  return low() <= pp->ctau() && 0 != id.threeCharge();
410  } );
411 }
412 
413 // constructor with high edge and service
415  : Decays::Nodes::Mass( -1 * Gaudi::Units::TeV, high, svc ) {}
416 // MANDATORY: clone method ("virtual constructor")
418 // MANDATORY: the specific printout
419 std::ostream& Decays::Nodes::Light::fillStream( std::ostream& s ) const { return s << " Light( " << high() << ") "; }
420 
421 // constructor with high edge and service
423  : Decays::Nodes::Mass( low, s_INFINITY, svc ) {}
424 // MANDATORY: clone method ("virtual constructor")
426 // MANDATORY: the specific printout
427 std::ostream& Decays::Nodes::Heavy::fillStream( std::ostream& s ) const { return s << " Heavy( " << high() << ") "; }
428 
429 // MANDATORY: clone method ("virtual constructor")
430 Decays::Nodes::PosID* Decays::Nodes::PosID::clone() const { return new PosID( *this ); }
431 // MANDATORY: check the validity
432 bool Decays::Nodes::PosID::valid() const { return true; }
433 // MANDATORY: the proper validation of the node
435  return StatusCode::SUCCESS;
436 }
437 // MANDATORY: the only one essential method
438 bool Decays::Nodes::PosID::operator()( const Gaudi::ParticleID& p ) const { return 0 < p.pid(); }
439 // MANDATORY: the specific printout
441 
442 // MANDATORY: clone method ("virtual constructor")
443 Decays::Nodes::NegID* Decays::Nodes::NegID::clone() const { return new NegID( *this ); }
444 // MANDATORY: check the validity
445 bool Decays::Nodes::NegID::valid() const { return true; }
446 // MANDATORY: the proper validation of the node
448  return StatusCode::SUCCESS;
449 }
450 // MANDATORY: the only one essential method
451 bool Decays::Nodes::NegID::operator()( const Gaudi::ParticleID& p ) const { return 0 > p.pid(); }
452 // MANDATORY: the specific printout
454 
455 // constructor from the symbol
458  StatusCode sc = sym.symbol( s, m_symbol );
459  sc.ignore();
460 }
461 // MANDATORY: clone method ("virtual constructor")
463 // MANDATORY: the only one essential method
464 bool Decays::Nodes::Symbol::operator()( const Gaudi::ParticleID& pid ) const { return m_symbol.node( pid ); }
465 // MANDATORY: the specific printout
466 std::ostream& Decays::Nodes::Symbol::fillStream( std::ostream& s ) const { return s << m_symbol.node(); }
467 // MANDATORY: check the validity
468 bool Decays::Nodes::Symbol::valid() const { return m_symbol.valid(); }
469 // MANDATORY: validate
471  return m_symbol.validate( svc );
472 }
Gaudi::Decays::Nodes::StableCharged::StableCharged
StableCharged(const Gaudi::Interfaces::IParticlePropertySvc *svc=0)
constructor service
Definition: NodePIDs.cpp:392
Gaudi::Decays::Nodes::Any
Definition: NodesPIDs.h:34
Gaudi::Decays::Nodes::StableCharged::operator()
bool operator()(const Gaudi::ParticleID &pid) const override
MANDATORY: the only one essential method.
Definition: NodePIDs.cpp:401
GaudiPartProp.Nodes.EllPlus
EllPlus
Definition: Nodes.py:255
Gaudi::Decays::Nodes::Hadron::fillStream
std::ostream & fillStream(std::ostream &s) const override
MANDATORY: the specific printout.
Definition: NodePIDs.cpp:214
DataOnDemand.Nodes
Nodes
Definition: DataOnDemand.py:34
Gaudi::ParticleID::Quark
Quark
Quark PDG IDs.
Definition: ParticleID.h:48
Gaudi::Decays::Nodes::PosID::valid
bool valid() const override
MANDATORY: check the validity.
Definition: NodePIDs.cpp:432
GaudiPartProp.Nodes.SSpin
SSpin
Definition: Nodes.py:266
Gaudi::Decays::Nodes::CTau::valid
bool valid() const override
MANDATORY: check the validity.
Definition: NodePIDs.cpp:277
std::string
STL class.
GaudiPartProp.Nodes.LongLived_
LongLived_
Definition: Nodes.py:304
Gaudi::Decays::Nodes::Meson::clone
Meson * clone() const override
MANDATORY: clone method ("virtual constructor")
Definition: NodePIDs.cpp:167
Gaudi::Decays::Nodes::HasQuark::fillStream
std::ostream & fillStream(std::ostream &s) const override
MANDATORY: the specific printout.
Definition: NodePIDs.cpp:226
Gaudi::Decays::Nodes::Symbol::validate
StatusCode validate(const Gaudi::Interfaces::IParticlePropertySvc *svc) const override
MANDATORY: the proper validation of the node.
Definition: NodePIDs.cpp:470
GaudiPartProp.Nodes.Ell
Ell
Definition: Nodes.py:254
Gaudi::Decays::operator&&
Decays::Nodes::And operator&&(const Decays::iNode &o1, const Decays::iNode &o2)
Create the "AND" of two nodes.
Definition: Nodes.h:363
Gaudi::Decays::Nodes::CTau::validate
StatusCode validate(const Gaudi::Interfaces::IParticlePropertySvc *svc) const override
MANDATORY: the proper validation of the node.
Definition: NodePIDs.cpp:279
Gaudi::Decays::Nodes::Symbol
Definition: NodesPIDs.h:644
gaudirun.s
string s
Definition: gaudirun.py:346
Gaudi::Decays::Nodes::PosID::fillStream
std::ostream & fillStream(std::ostream &s) const override
MANDATORY: the specific printout.
Definition: NodePIDs.cpp:440
Gaudi::Decays::Nodes::Mass::operator()
bool operator()(const Gaudi::ParticleID &pid) const override
MANDATORY: the only one essential method.
Definition: NodePIDs.cpp:333
Gaudi::Decays::Nodes::EllMinus
Definition: NodesPIDs.h:184
Gaudi::Decays::Nodes::ShortLived_::fillStream
std::ostream & fillStream(std::ostream &s) const override
MANDATORY: the specific printout.
Definition: NodePIDs.cpp:364
Gaudi::Decays::Nodes::Mass
Definition: NodesPIDs.h:555
Gaudi::Decays::Nodes::Light::Light
Light(const double high, const Gaudi::Interfaces::IParticlePropertySvc *svc=0)
constructor from mass-range
Definition: NodePIDs.cpp:414
Gaudi::Decays::Nodes::Stable::fillStream
std::ostream & fillStream(std::ostream &s) const override
MANDATORY: the specific printout.
Definition: NodePIDs.cpp:389
Gaudi::Interfaces::IParticlePropertySvc
Definition: IParticlePropertySvc.h:29
Gaudi::Units::TeV
constexpr double TeV
Definition: SystemOfUnits.h:180
Gaudi::Units::meter
constexpr double meter
Definition: SystemOfUnits.h:69
Gaudi::Decays::Nodes::LSpin
Definition: NodesPIDs.h:389
GaudiPartProp.Nodes.EllMinus
EllMinus
Definition: Nodes.py:256
Gaudi::Decays::Nodes::Pid::Pid
Pid(const Decays::Decay::Item &item)
constructor from the decay item
Definition: NodePIDs.cpp:141
Gaudi::ParticleID::bottom
@ bottom
Definition: ParticleID.h:48
Gaudi::Decays::Nodes::ShortLived_::clone
ShortLived_ * clone() const override
MANDATORY: clone method ("virtual constructor")
Definition: NodePIDs.cpp:360
Gaudi::Decays::Nodes::Negative::fillStream
std::ostream & fillStream(std::ostream &s) const override
MANDATORY: the specific printout.
Definition: NodePIDs.cpp:220
GaudiPartProp.Nodes.Baryon
Baryon
Definition: Nodes.py:259
Gaudi::Decays::Symbols::instance
static Symbols & instance()
static accessor to teh singleton
Definition: Symbols.cpp:39
ParticleID.h
Symbols.h
std::abs
Gaudi::ParticleID abs(const Gaudi::ParticleID &p)
Return the absolute value for a PID.
Definition: ParticleID.h:191
gaudirun.c
c
Definition: gaudirun.py:525
Gaudi::Decays::Nodes::LSpin::clone
LSpin * clone() const override
MANDATORY: clone method ("virtual constructor")
Definition: NodePIDs.cpp:199
IParticlePropertySvc.h
Gaudi::ParticleID::up
@ up
Definition: ParticleID.h:48
Gaudi::Decays::Nodes::Meson
Definition: NodesPIDs.h:216
Gaudi::Decays::Nodes::CC::fillStream
std::ostream & fillStream(std::ostream &s) const override
MANDATORY: the specific printout.
Definition: NodePIDs.cpp:212
Gaudi::Decays::Nodes::JSpin
Definition: NodesPIDs.h:342
Gaudi::Decays::Nodes::JSpin::clone
JSpin * clone() const override
MANDATORY: clone method ("virtual constructor")
Definition: NodePIDs.cpp:195
Gaudi::Decays::Nodes::Lepton::fillStream
std::ostream & fillStream(std::ostream &s) const override
MANDATORY: the specific printout.
Definition: NodePIDs.cpp:216
GaudiPartProp.Nodes.Heavy
Heavy
Definition: Nodes.py:312
Gaudi::Decays::Nodes::Symbol::fillStream
std::ostream & fillStream(std::ostream &s) const override
MANDATORY: the specific printout.
Definition: NodePIDs.cpp:466
Gaudi::Decays::Nodes::EllPlus
Definition: NodesPIDs.h:168
Gaudi::Decays::Nodes::Charged::clone
Charged * clone() const override
MANDATORY: clone method ("virtual constructor")
Definition: NodePIDs.cpp:183
Gaudi::Decays::Nodes::Baryon
Definition: NodesPIDs.h:231
GaudiPartProp.Nodes.JSpin
JSpin
Definition: Nodes.py:265
Gaudi::Decays::Nodes::Neutral::fillStream
std::ostream & fillStream(std::ostream &s) const override
MANDATORY: the specific printout.
Definition: NodePIDs.cpp:217
GaudiPartProp.Nodes.ShortLived_
ShortLived_
Definition: Nodes.py:306
Gaudi::Decays::Nodes::PosID::operator()
bool operator()(const Gaudi::ParticleID &) const override
MANDATORY: the only one essential method.
Definition: NodePIDs.cpp:438
Gaudi::Decays::Nodes::Pid::fillStream
std::ostream & fillStream(std::ostream &s) const override
MANDATORY: the specific printout.
Definition: NodePIDs.cpp:211
Gaudi::Decays::Nodes::Heavy::clone
Heavy * clone() const override
MANDATORY: clone method ("virtual constructor")
Definition: NodePIDs.cpp:425
Gaudi::Decays::Nodes::Invalid
Definition: Nodes.h:74
Gaudi::Decays::Nodes::Symbol::Symbol
Symbol(const std::string &sym)
the constructor from the symbol
Definition: NodePIDs.cpp:456
Gaudi::Decays::Nodes::Ell::fillStream
std::ostream & fillStream(std::ostream &s) const override
MANDATORY: the specific printout.
Definition: NodePIDs.cpp:222
SmartIF.h
Gaudi::Decays::Nodes::Stable
Definition: NodesPIDs.h:523
Gaudi::Decays::Nodes::Symbol::clone
Symbol * clone() const override
MANDATORY: clone method ("virtual constructor")
Definition: NodePIDs.cpp:462
Gaudi::Decays::Nodes::EllMinus::fillStream
std::ostream & fillStream(std::ostream &s) const override
MANDATORY: the specific printout.
Definition: NodePIDs.cpp:224
StatusCode
Definition: StatusCode.h:65
Gaudi::Decays::Nodes::CTau::operator()
bool operator()(const Gaudi::ParticleID &pid) const override
MANDATORY: the only one essential method.
Definition: NodePIDs.cpp:283
SystemOfUnits.h
Gaudi::Decays::operator||
Decays::Nodes::Or operator||(const Decays::iNode &o1, const Decays::iNode &o2)
Create the "OR" of two nodes.
Definition: Nodes.h:347
GaudiPartProp.Nodes.Hadron
Hadron
Definition: Nodes.py:257
Gaudi::Decays::Nodes::Pid::valid
bool valid() const override
MANDATORY: check the validity.
Definition: NodePIDs.cpp:149
Gaudi::Decays::Nodes::Symbol::operator()
bool operator()(const Gaudi::ParticleID &pid) const override
MANDATORY: the only one essential method.
Definition: NodePIDs.cpp:464
Gaudi::Decays::Nodes::CTau::KnownPids
Definition: NodesPIDs.h:471
std::ostream
STL class.
Gaudi::Decays::Nodes::Charged::fillStream
std::ostream & fillStream(std::ostream &s) const override
MANDATORY: the specific printout.
Definition: NodePIDs.cpp:218
Gaudi::Decays::Nodes::NegID::clone
NegID * clone() const override
MANDATORY: clone method ("virtual constructor")
Definition: NodePIDs.cpp:443
Gaudi::Decays::Nodes::Positive::clone
Positive * clone() const override
MANDATORY: clone method ("virtual constructor")
Definition: NodePIDs.cpp:185
GaudiPartProp.Nodes.Negative
Negative
Definition: Nodes.py:262
Gaudi::Decays::Nodes::ShortLived_::ShortLived_
ShortLived_(const double high, const Gaudi::Interfaces::IParticlePropertySvc *svc=0)
constructor with high edge and service
Definition: NodePIDs.cpp:354
Gaudi::Decays::Nodes::Nucleus::clone
Nucleus * clone() const override
MANDATORY: clone method ("virtual constructor")
Definition: NodePIDs.cpp:191
Gaudi::Decays::Nodes::HasQuark
Definition: NodesPIDs.h:321
Gaudi::Decays::Nodes::Stable::Stable
Stable(const Gaudi::Interfaces::IParticlePropertySvc *svc=0)
constructor service
Definition: NodePIDs.cpp:384
Gaudi::Decays::Nodes::EllPlus::fillStream
std::ostream & fillStream(std::ostream &s) const override
MANDATORY: the specific printout.
Definition: NodePIDs.cpp:223
Gaudi::Decays::Nodes::SSpin::SSpin
SSpin(const int spin)
constructor from the 2S+1
Definition: NodePIDs.cpp:206
Gaudi::Decays::Nodes::Nu
Definition: NodesPIDs.h:134
NodesPIDs.h
Gaudi::Decays::validate
StatusCode validate(Iterator begin, Iterator end, const Gaudi::Interfaces::IParticlePropertySvc *svc)
validate trees/nodes
Definition: Nodes.h:53
Gaudi::ParticleID::down
@ down
Definition: ParticleID.h:48
Gaudi::Decays::Nodes::NegID::validate
StatusCode validate(const Gaudi::Interfaces::IParticlePropertySvc *svc) const override
MANDATORY: the proper validation of the node.
Definition: NodePIDs.cpp:447
ParticleID.pids
pids
Definition: ParticleID.py:70
Gaudi::Decays::Nodes::Pid::validate
StatusCode validate(const Gaudi::Interfaces::IParticlePropertySvc *svc) const override
MANDATORY: the proper validation of the node.
Definition: NodePIDs.cpp:151
Gaudi::Decays::Nodes::Or
Definition: Nodes.h:227
Gaudi::Decays::Nodes::Nucleus::fillStream
std::ostream & fillStream(std::ostream &s) const override
MANDATORY: the specific printout.
Definition: NodePIDs.cpp:225
GaudiPartProp.Nodes.Mass
Mass
Definition: Nodes.py:310
Gaudi::Decays::Nodes::CTau::setService
StatusCode setService(const Gaudi::Interfaces::IParticlePropertySvc *svc) const
Definition: NodePIDs.cpp:306
Gaudi::Decays::Nodes::StableCharged
Definition: NodesPIDs.h:538
Gaudi::Decays::Nodes::EllPlus::clone
EllPlus * clone() const override
MANDATORY: clone method ("virtual constructor")
Definition: NodePIDs.cpp:175
GaudiPartProp.Nodes.Pid
Pid
Definition: Nodes.py:250
Gaudi::ParticleID::strange
@ strange
Definition: ParticleID.h:48
Gaudi::Decays::Symbols
Definition: Symbols.h:45
Gaudi::Units::micrometer
constexpr double micrometer
Definition: SystemOfUnits.h:79
Gaudi::Decays::Nodes::Symbol::valid
bool valid() const override
MANDATORY: check the validity.
Definition: NodePIDs.cpp:468
Gaudi::Decays::Nodes::Light::fillStream
std::ostream & fillStream(std::ostream &s) const override
MANDATORY: the specific printout.
Definition: NodePIDs.cpp:419
Gaudi::Decays::Nodes::LongLived_::LongLived_
LongLived_(const double high, const Gaudi::Interfaces::IParticlePropertySvc *svc=0)
constructor with high edge and service
Definition: NodePIDs.cpp:370
Gaudi::Decays::Nodes::Nu::fillStream
std::ostream & fillStream(std::ostream &s) const override
MANDATORY: the specific printout.
Definition: NodePIDs.cpp:221
Gaudi::Decays::Nodes::CTau::add_
bool add_(Gaudi::ParticleID pid, bool acc) const
Definition: NodePIDs.cpp:295
Gaudi::Decays::Nodes::Symbol::m_symbol
Decays::Node m_symbol
the actual symbol
Definition: NodesPIDs.h:662
Gaudi::Decays::Nodes::CTau::CTau
CTau(const double low, const double high, const Gaudi::Interfaces::IParticlePropertySvc *svc=nullptr)
constructor from c-tau range
Definition: NodePIDs.cpp:266
Gaudi::ParticleProperty
Definition: ParticleProperty.h:37
Gaudi::Decays::Nodes::LSpin::fillStream
std::ostream & fillStream(std::ostream &s) const override
MANDATORY: the specific printout.
Definition: NodePIDs.cpp:263
Gaudi::Decays::Nodes::Nu::clone
Nu * clone() const override
MANDATORY: clone method ("virtual constructor")
Definition: NodePIDs.cpp:171
Gaudi::Decays::Nodes::Hadron
Definition: NodesPIDs.h:201
GaudiPartProp.Nodes.Nu
Nu
Definition: Nodes.py:253
Gaudi
This file provides a Grammar for the type Gaudi::Accumulators::Axis It allows to use that type from p...
Definition: __init__.py:1
Gaudi::Decays::Nodes::Negative
Definition: NodesPIDs.h:276
GaudiPartProp.Nodes.CTau
CTau
Definition: Nodes.py:303
std::numeric_limits::epsilon
T epsilon(T... args)
Gaudi::Decays::Nodes::LSpin::LSpin
LSpin(const int spin)
constructor from the 2L+1
Definition: NodePIDs.cpp:208
Gaudi::Decays::Nodes::Positive::fillStream
std::ostream & fillStream(std::ostream &s) const override
MANDATORY: the specific printout.
Definition: NodePIDs.cpp:219
Gaudi::Decays::Nodes::Baryon::clone
Baryon * clone() const override
MANDATORY: clone method ("virtual constructor")
Definition: NodePIDs.cpp:179
Gaudi::Decays::Nodes::Lepton
Definition: NodesPIDs.h:119
StatusCode::ignore
const StatusCode & ignore() const
Allow discarding a StatusCode without warning.
Definition: StatusCode.h:139
std::min
T min(T... args)
GaudiPartProp.decorators.Decays
Decays
Definition: decorators.py:33
Gaudi::Decays::Nodes::Neutral
Definition: NodesPIDs.h:291
Gaudi::Decays::Nodes::CTau
Definition: NodesPIDs.h:406
Gaudi::Decays::Nodes::Negative::clone
Negative * clone() const override
MANDATORY: clone method ("virtual constructor")
Definition: NodePIDs.cpp:187
Gaudi::Decays
Definition: CC.h:17
Gaudi::Decays::Nodes::StableCharged::clone
StableCharged * clone() const override
MANDATORY: clone method ("virtual constructor")
Definition: NodePIDs.cpp:395
Gaudi::Decays::Nodes::EllMinus::clone
EllMinus * clone() const override
MANDATORY: clone method ("virtual constructor")
Definition: NodePIDs.cpp:177
Gaudi::Decays::Nodes::SSpin
Definition: NodesPIDs.h:372
Gaudi::Decays::Nodes::SSpin::clone
SSpin * clone() const override
MANDATORY: clone method ("virtual constructor")
Definition: NodePIDs.cpp:197
GaudiPartProp.Nodes.Meson
Meson
Definition: Nodes.py:258
GaudiPartProp.Nodes.Positive
Positive
Definition: Nodes.py:261
GaudiPartProp.Nodes.Nucleus
Nucleus
Definition: Nodes.py:268
GaudiPartProp.Nodes.Symbol
Symbol
Definition: Nodes.py:313
Gaudi::Decays::Nodes::Light::clone
Light * clone() const override
MANDATORY: clone method ("virtual constructor")
Definition: NodePIDs.cpp:417
std::lower_bound
T lower_bound(T... args)
Gaudi::Decays::Nodes::NegID::valid
bool valid() const override
MANDATORY: check the validity.
Definition: NodePIDs.cpp:445
StatusCode::SUCCESS
constexpr static const auto SUCCESS
Definition: StatusCode.h:100
Gaudi::Decays::Nodes::Hadron::clone
Hadron * clone() const override
MANDATORY: clone method ("virtual constructor")
Definition: NodePIDs.cpp:181
Gaudi::ParticleID::pid
int pid() const
Retrieve the PDG ID.
Definition: ParticleID.h:54
GaudiPartProp.Nodes.Any
Any
Definition: Nodes.py:249
GaudiPartProp.Nodes.StableCharged
StableCharged
Definition: Nodes.py:309
GaudiPartProp.Nodes.LSpin
LSpin
Definition: Nodes.py:267
Gaudi::Decays::Nodes::Heavy::fillStream
std::ostream & fillStream(std::ostream &s) const override
MANDATORY: the specific printout.
Definition: NodePIDs.cpp:427
Gaudi::Decays::Nodes::CC
Definition: NodesPIDs.h:94
GaudiPartProp.Nodes.HasQuark
HasQuark
Definition: Nodes.py:264
Gaudi::Decays::Nodes::Neutral::clone
Neutral * clone() const override
MANDATORY: clone method ("virtual constructor")
Definition: NodePIDs.cpp:189
Gaudi::Decays::Nodes::StableCharged::fillStream
std::ostream & fillStream(std::ostream &s) const override
MANDATORY: the specific printout.
Definition: NodePIDs.cpp:399
Gaudi::Decays::valid
bool valid(Iterator begin, Iterator end)
check the validness of the trees or nodes
Definition: Nodes.h:36
Gaudi::Decays::Nodes::Mass::clone
Mass * clone() const override
MANDATORY: clone method ("virtual constructor")
Definition: NodePIDs.cpp:327
Gaudi::ParticleID::charm
@ charm
Definition: ParticleID.h:48
Gaudi::Decays::Nodes::Nucleus
Definition: NodesPIDs.h:306
Gaudi::Decays::Nodes::Heavy::Heavy
Heavy(const double low, const Gaudi::Interfaces::IParticlePropertySvc *svc=0)
constructor from mass-range
Definition: NodePIDs.cpp:422
Gaudi::Decays::Nodes::Baryon::fillStream
std::ostream & fillStream(std::ostream &s) const override
MANDATORY: the specific printout.
Definition: NodePIDs.cpp:215
Gaudi::ParticleID
Definition: ParticleID.h:43
Gaudi::Decays::Nodes::Pid
Definition: NodesPIDs.h:54
Gaudi::Decays::Nodes::Meson::fillStream
std::ostream & fillStream(std::ostream &s) const override
MANDATORY: the specific printout.
Definition: NodePIDs.cpp:213
Gaudi::Units::km
constexpr double km
Definition: SystemOfUnits.h:112
Gaudi::Decays::Nodes::NegID
Definition: NodesPIDs.h:630
Gaudi::Decays::Nodes::JSpin::fillStream
std::ostream & fillStream(std::ostream &s) const override
MANDATORY: the specific printout.
Definition: NodePIDs.cpp:244
GaudiPartProp.Nodes.Neutral
Neutral
Definition: Nodes.py:263
Gaudi::Decays::Nodes::Positive
Definition: NodesPIDs.h:261
Gaudi::Decays::Decay::Item
Definition: Decay.h:39
Gaudi::Decays::Nodes::LongLived_::fillStream
std::ostream & fillStream(std::ostream &s) const override
MANDATORY: the specific printout.
Definition: NodePIDs.cpp:378
Gaudi::Decays::Nodes::NegID::operator()
bool operator()(const Gaudi::ParticleID &) const override
MANDATORY: the only one essential method.
Definition: NodePIDs.cpp:451
Gaudi::Decays::iNode
Definition: iNode.h:35
Gaudi::Decays::Nodes::CTau::fillStream
std::ostream & fillStream(std::ostream &s) const override
MANDATORY: the specific printout.
Definition: NodePIDs.cpp:273
GaudiPartProp.Nodes.Lepton
Lepton
Definition: Nodes.py:252
Gaudi::Decays::Nodes::LongLived_
Definition: NodesPIDs.h:507
GaudiPartProp.Nodes.CC
CC
Definition: Nodes.py:251
Gaudi::Decays::Nodes::Stable::clone
Stable * clone() const override
MANDATORY: clone method ("virtual constructor")
Definition: NodePIDs.cpp:387
Gaudi::Decays::Nodes::JSpin::JSpin
JSpin(const int spin)
constructor from the 2J+1
Definition: NodePIDs.cpp:204
GaudiPartProp.Nodes.Light
Light
Definition: Nodes.py:311
Gaudi::Decays::Nodes::CC::CC
CC(const Decays::Decay::Item &item)
constructor from the decay item
Definition: NodePIDs.cpp:156
Gaudi::Decays::Nodes::Charged
Definition: NodesPIDs.h:246
Gaudi::Decays::Nodes::Any::fillStream
std::ostream & fillStream(std::ostream &s) const override
MANDATORY: the specific printout.
Definition: NodePIDs.cpp:210
Gaudi::Decays::Nodes::CTau::m_ppSvc
Service m_ppSvc
the service :
Definition: NodesPIDs.h:468
StatusCode::FAILURE
constexpr static const auto FAILURE
Definition: StatusCode.h:101
std::numeric_limits::max
T max(T... args)
Gaudi::Decays::Nodes::LongLived_::clone
LongLived_ * clone() const override
MANDATORY: clone method ("virtual constructor")
Definition: NodePIDs.cpp:376
compareOutputFiles.pp
pp
Definition: compareOutputFiles.py:507
Gaudi::Decays::Nodes::Ell
Definition: NodesPIDs.h:151
Gaudi::Decays::Nodes::PosID::validate
StatusCode validate(const Gaudi::Interfaces::IParticlePropertySvc *svc) const override
MANDATORY: the proper validation of the node.
Definition: NodePIDs.cpp:434
Gaudi::Decays::Nodes::Ell::clone
Ell * clone() const override
MANDATORY: clone method ("virtual constructor")
Definition: NodePIDs.cpp:173
GaudiPartProp.Nodes.Charged
Charged
Definition: Nodes.py:260
Gaudi::Decays::Nodes::HasQuark::HasQuark
HasQuark(Gaudi::ParticleID::Quark quark)
constructor from the quark
Definition: NodePIDs.cpp:202
Gaudi::Decays::Symbols::symbol
const std::string & symbol(std::string sym) const
help for the basic primitive special symbol
Definition: Symbols.cpp:163
Gaudi::Decays::Nodes::CTau::clone
CTau * clone() const override
MANDATORY: clone method ("virtual constructor")
Definition: NodePIDs.cpp:271
Gaudi::Decays::Nodes::Lepton::clone
Lepton * clone() const override
MANDATORY: clone method ("virtual constructor")
Definition: NodePIDs.cpp:169
Gaudi::ParticleID::top
@ top
Definition: ParticleID.h:48
ParticleProperty.h
Gaudi::Decays::Nodes::Light
Definition: NodesPIDs.h:573
GaudiPartProp.Nodes.Stable
Stable
Definition: Nodes.py:308
Gaudi::Decays::Nodes::HasQuark::clone
HasQuark * clone() const override
MANDATORY: clone method ("virtual constructor")
Definition: NodePIDs.cpp:193
Gaudi::Decays::Nodes::Heavy
Definition: NodesPIDs.h:589
Gaudi::Decays::Nodes::Mass::fillStream
std::ostream & fillStream(std::ostream &s) const override
MANDATORY: the specific printout.
Definition: NodePIDs.cpp:329
Gaudi::Decays::Nodes::Mass::Mass
Mass(const double low, const double high, const Gaudi::Interfaces::IParticlePropertySvc *svc=0)
constructor from mass-range
Definition: NodePIDs.cpp:324
Gaudi::Decays::Nodes::And
Definition: Nodes.h:270
Gaudi::Decays::Nodes::PosID::clone
PosID * clone() const override
MANDATORY: clone method ("virtual constructor")
Definition: NodePIDs.cpp:430
Gaudi::Decays::Nodes::NegID::fillStream
std::ostream & fillStream(std::ostream &s) const override
MANDATORY: the specific printout.
Definition: NodePIDs.cpp:453
Gaudi::Decays::Nodes::PosID
Definition: NodesPIDs.h:608
Gaudi::Decays::Nodes::ShortLived_
Definition: NodesPIDs.h:490
Gaudi::Decays::Nodes::SSpin::fillStream
std::ostream & fillStream(std::ostream &s) const override
MANDATORY: the specific printout.
Definition: NodePIDs.cpp:262