Back to home page

EIC code displayed by LXR

 
 

    


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

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 EVTVUBHYBRID_HH
0022 #define EVTVUBHYBRID_HH
0023 
0024 #include "EvtGenBase/EvtDecayIncoherent.hh"
0025 
0026 #include "EvtGenModels/EvtVubdGamma.hh"
0027 
0028 #include <memory>
0029 #include <vector>
0030 
0031 class EvtParticle;
0032 class RandGeneral;
0033 
0034 // Description:
0035 // Class to generate inclusive B to X_u l nu decays.
0036 // This class is based on EvtVub by Sven Menke with an update to
0037 // generate the inclusive decays in such a way that the right
0038 // mix of inclusive and exclusive decays is obtained:
0039 // "Hybrid Model" by Dominique Fortin.
0040 // NOTE:
0041 // - A set of weights (for bins in the kinematic variables mX, q2, El)
0042 //   is read from DECAY.DEC. This set of weights must be consistent
0043 //   with the other parameters specified (excl. BF, non-res BF, mb, a).
0044 // - If no binning/weights are specified in DECAY.DEC the hybrid
0045 //   reweighting is not activated
0046 
0047 class EvtVubHybrid : public EvtDecayIncoherent {
0048   public:
0049     std::string getName() override;
0050 
0051     EvtDecayBase* clone() override;
0052 
0053     void initProbMax() override;
0054 
0055     void init() override;
0056 
0057     void decay( EvtParticle* p ) override;
0058 
0059     void readWeights( int startArg = 0 );
0060 
0061     double getWeight( double mX, double q2, double El );
0062 
0063   private:
0064     double findPFermi();
0065 
0066     enum
0067     {
0068         nParameters = 3,
0069         nVariables = 3
0070     };
0071 
0072     bool _noHybrid =
0073         false;    // _noHybrid will be set TRUE if the DECAY.DEC file has no binning or weights
0074     bool _storeQplus =
0075         true;    // _storeQplus should alwasy be TRUE: writes out Fermi motion parameter
0076 
0077     double _mb = 4.62;        // the b-quark pole mass in GeV (try 4.65 to 4.9)
0078     double _a = 2.27;         // Parameter for the Fermi Motion (1.29 is good)
0079     double _alphas = 0.22;    // Strong Coupling at m_b (around 0.24)
0080     double _dGMax = 3.;       // max dGamma*p2 value;
0081     int _nbins = 0;
0082     double _masscut = 0.28;
0083     std::vector<double> _bins_mX;
0084     std::vector<double> _bins_q2;
0085     std::vector<double> _bins_El;
0086     std::vector<double> _weights;
0087     std::unique_ptr<EvtVubdGamma> _dGamma;    // calculates the decay rate
0088     std::vector<double> _pf;
0089 };
0090 
0091 #endif