Back to home page

EIC code displayed by LXR

 
 

    


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

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 EVT_TWO_BODY_VERTEX_HH
0022 #define EVT_TWO_BODY_VERTEX_HH
0023 
0024 #include "EvtGenBase/EvtBlattWeisskopf.hh"
0025 #include "EvtGenBase/EvtTwoBodyKine.hh"
0026 
0027 #include <iostream>
0028 #include <memory>
0029 
0030 // Two-body propagator vertex AB->A,B with an attached Blatt-Weisskopf form factor.
0031 
0032 class EvtTwoBodyVertex {
0033   public:
0034     EvtTwoBodyVertex();
0035     EvtTwoBodyVertex( double mA, double mB, double mAB, int L );
0036     EvtTwoBodyVertex( const EvtTwoBodyVertex& other );
0037     EvtTwoBodyVertex& operator=( const EvtTwoBodyVertex& other );
0038 
0039     double widthFactor( EvtTwoBodyKine x ) const;
0040     double formFactor( EvtTwoBodyKine x ) const;
0041     double phaseSpaceFactor( EvtTwoBodyKine x, EvtTwoBodyKine::Index ) const;
0042 
0043     inline int L() const { return _LL; }
0044     inline double mA() const { return _kine.mA(); }
0045     inline double mB() const { return _kine.mB(); }
0046     inline double mAB() const { return _kine.mAB(); }
0047     inline double pD() const { return _p0; }
0048     void print( std::ostream& os ) const;
0049 
0050     void set_f( double R );
0051 
0052   private:
0053     EvtTwoBodyKine _kine;
0054     int _LL;
0055     double _p0;
0056     std::unique_ptr<EvtBlattWeisskopf> _f;    // optional Blatt-Weisskopf form factor
0057 };
0058 
0059 std::ostream& operator<<( std::ostream& os, const EvtTwoBodyVertex& v );
0060 
0061 #endif