Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-08-06 09:20:02

0001 
0002 /***********************************************************************
0003 * Copyright 1998-2020 CERN for the benefit of the EvtGen authors       *
0004 *                                                                      *
0005 * This file is part of EvtGen.                                         *
0006 *                                                                      *
0007 * EvtGen is free software: you can redistribute it and/or modify       *
0008 * it under the terms of the GNU General Public License as published by *
0009 * the Free Software Foundation, either version 3 of the License, or    *
0010 * (at your option) any later version.                                  *
0011 *                                                                      *
0012 * EvtGen is distributed in the hope that it will be useful,            *
0013 * but WITHOUT ANY WARRANTY; without even the implied warranty of       *
0014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the        *
0015 * GNU General Public License for more details.                         *
0016 *                                                                      *
0017 * You should have received a copy of the GNU General Public License    *
0018 * along with EvtGen.  If not, see <https://www.gnu.org/licenses/>.     *
0019 ***********************************************************************/
0020 
0021 #ifndef __EVTMNODE_HH__
0022 #define __EVTMNODE_HH__
0023 
0024 #include "EvtGenBase/EvtComplex.hh"
0025 #include "EvtGenBase/EvtPDL.hh"
0026 #include "EvtGenBase/EvtSpinAmp.hh"
0027 #include "EvtGenBase/EvtSymTable.hh"
0028 #include "EvtGenBase/EvtVector4R.hh"
0029 
0030 #include <vector>
0031 using std::vector;
0032 
0033 #include <string>
0034 using std::string;
0035 
0036 class EvtMNode {
0037   public:
0038     EvtMNode() {}
0039     virtual ~EvtMNode(){};
0040 
0041     // calculate the amplitude associated event this->children return a
0042     // vector of the form A_{\lambda this} and sum over allowed angular
0043     // momenta of the children
0044     virtual EvtSpinAmp amplitude( const vector<EvtVector4R>& product ) const = 0;
0045 
0046     // get the 4 vector associated with this node
0047     EvtVector4R get4vector( const vector<EvtVector4R>& product ) const;
0048 
0049     // get twice the spin of the particle
0050     int getspin() const { return _twospin; }
0051     EvtSpinType::spintype getspintype() const
0052     {
0053         return EvtPDL::getSpinType( _id );
0054     }
0055 
0056     // get the id of this node
0057     EvtId getid() const { return _id; }
0058 
0059     // return which particles this is a combination of
0060     const vector<int>& getresonance() const { return _resonance; }
0061 
0062     void setparent( EvtMNode* parent ) { _parent = parent; }
0063     EvtMNode* getparent() const { return _parent; }
0064 
0065     // get the number of children that this node has
0066     virtual int getnchild() const = 0;
0067 
0068     // return the value of the resonance shape
0069     virtual EvtComplex line( const vector<EvtVector4R>& product ) const = 0;
0070 
0071     // return a pointer node
0072     virtual EvtMNode* duplicate() const = 0;
0073 
0074   protected:
0075     // store the EvtId of the particle (just in case we need it to access
0076     // further informatoin about it)
0077     EvtId _id;
0078 
0079     // store TWICE the spin of this resonance (this is to deal with spin 1/2
0080     int _twospin;
0081 
0082     // store the particles that form this resonance, this should match up
0083     // with the child nodes from below, and is calculated internally
0084     vector<int> _resonance;
0085 
0086     // store the parent node of this one
0087     EvtMNode* _parent;
0088 };
0089 
0090 #endif