//McParent.cpp #include "McParent.hpp" using std::set; //Methods //Default constructor McParent::McParent() { _parentword = 0; } // Constructor from Parent word McParent::McParent( int parentword ):_parentword(parentword) {} // Destructor McParent::~McParent(){} // Set the parentage, given the PDG ID of a parent // We currently support: // // PDG Id // Z 23 // W+ 24 // W- -24 // t 6 // tbar -6 // b 5 // bbar -5 // c 4 // cbar -4 // uds 1,2,3 // psi 443 // upsilon 553 // tau+ -15 // tau- 15 // // void McParent::set_parent(int pdgid){ switch(pdgid) { case 1: // u _parentword = _parentword | UDS; break; case -1: // ubar _parentword = _parentword | UDS; break; case 2: // d _parentword = _parentword | UDS; break; case -2: // dbar _parentword = _parentword | UDS; break; case 3: // s _parentword = _parentword | UDS; break; case -3: // sbar _parentword = _parentword | UDS; break; case 4: // c _parentword = _parentword | CHARM; break; case -4: // cbar _parentword = _parentword | CBAR; break; case 5: // b _parentword = _parentword | BOTTOM; break; case -5: // bbar _parentword = _parentword | BBAR; break; case 6: // t _parentword = _parentword | TOP; break; case -6: // tbar _parentword = _parentword | TBAR; break; case 23: // Z _parentword = _parentword | ZZERO; break; case 24: // W+ _parentword = _parentword | WPLUS; break; case -24: // W- _parentword = _parentword | WMINUS; break; case 443: // psi _parentword = _parentword | PSI; break; case 553: // upsilon _parentword = _parentword | UPSILON; break; case 15: // tau- _parentword = _parentword | TAUMINUS; break; case -15: // tau+ _parentword = _parentword | TAUPLUS; break; } } // Return the parentword of this particle int McParent::get_parentword() const{ return _parentword; } // Return the list of parents for this track const McParent::ParentList McParent::parents() const{ set s; if(_parentword & UDS) s.insert(1); if(_parentword & CHARM) s.insert(4); if(_parentword & CBAR) s.insert(-4); if(_parentword & BOTTOM) s.insert(5); if(_parentword & BBAR) s.insert(-5); if(_parentword & TOP) s.insert(6); if(_parentword & TBAR) s.insert(-6); if(_parentword & ZZERO) s.insert(23); if(_parentword & WMINUS) s.insert(24); if(_parentword & WPLUS) s.insert(-24); if(_parentword & PSI) s.insert(443); if(_parentword & UPSILON) s.insert(553); if(_parentword & TAUMINUS) s.insert(15); if(_parentword & TAUPLUS) s.insert(-15); return s; } // Is particle from Z? bool McParent::from_z() const{ return _parentword & ZZERO; } // Is particle from W+? bool McParent::from_w_plus() const{ return _parentword & WPLUS; } // Is particle from W-? bool McParent::from_w_minus() const{ return _parentword & WMINUS; } // Is particle from tau+? bool McParent::from_tau_plus() const{ return _parentword & TAUPLUS; } // Is particle from tau-? bool McParent::from_tau_minus() const{ return _parentword & TAUMINUS; } // Is particle from psi? bool McParent::from_psi() const{ return _parentword & PSI; } // Is particle from upsilon? bool McParent::from_upsilon() const{ return _parentword & UPSILON; } // Is particle from top quark? bool McParent::from_t() const{ return _parentword & TOP; } // Is particle from anti-top quark? bool McParent::from_t_bar() const{ return _parentword & TBAR; } // Is particle from bottom quark? bool McParent::from_b() const{ return _parentword & BOTTOM; } // Is particle from anti-bottom quark? bool McParent::from_b_bar() const{ return _parentword & BBAR; } // Is particle from charm quark? bool McParent::from_c() const{ return _parentword & CHARM; } // Is particle from anti-charm quark? bool McParent::from_c_bar() const{ return _parentword & CBAR; } // Is particle from u,d or s quark? bool McParent::from_uds() const{ return _parentword & UDS; }