Skip to content
Snippets Groups Projects
X6900.cpp 3.86 KiB
Newer Older
  • Learn to ignore specific revisions
  • Daniel Winney's avatar
    Daniel Winney committed
    // ---------------------------------------------------------------------------
    
    // Prediction for X(6900) photoproduction near threshold based on hypothetical
    // omega exchange amplitudes.
    // 
    // Reproduces the plot in FIG 4 of [1].
    // 
    // USAGE:
    // make X6900 && ./X6900
    //
    // OUTPUT:
    // omega_exchange.pdf
    
    Daniel Winney's avatar
    Daniel Winney committed
    //
    // Author:       Daniel Winney (2020)
    // Affiliation:  Joint Physics Analysis Center (JPAC)
    // Email:        dwinney@iu.edu
    // ---------------------------------------------------------------------------
    
    // REFERENCES:
    // [1] arXiv:2008.01001 [hep-ph]
    // ---------------------------------------------------------------------------
    
    Daniel Winney's avatar
    Daniel Winney committed
    
    #include "constants.hpp"
    #include "reaction_kinematics.hpp"
    #include "regge_trajectory.hpp"
    #include "amplitudes/vector_exchange.hpp"
    #include "amplitudes/amplitude_sum.hpp"
    
    #include "jpacGraph1D.hpp"
    #include "jpacUtils.hpp"
    
    #include <cstring>
    
    using namespace jpacPhoto;
    
    int main( int argc, char** argv )
    {
    
        // ---------------------------------------------------------------------------
        // Amplitude
        // ---------------------------------------------------------------------------
    
        // X(6900)
    
    Daniel Winney's avatar
    Daniel Winney committed
        reaction_kinematics * kX = new reaction_kinematics(6.900);
    
        kX->set_JP(0, 1);
    
    Daniel Winney's avatar
    Daniel Winney committed
    
        double gV_psi = 1.6E-3, gT_psi = 0.;
    
    Daniel Winney's avatar
    Daniel Winney committed
        double gGam_psi = gX_psi * E * F_JPSI / M_JPSI;
    
    Daniel Winney's avatar
    Daniel Winney committed
    
        double gV_omega = 16., gT_omega = 0.;
    
    Daniel Winney's avatar
    Daniel Winney committed
        double gGam_omega = gX_omega * E * F_JPSI / M_JPSI;
    
    Daniel Winney's avatar
    Daniel Winney committed
        double bOmega = 0.68; // Cuttoff of LamOmega = 1.2 GeV
    
    
    Daniel Winney's avatar
    Daniel Winney committed
        vector_exchange X_psi(kX, M_JPSI, "J/#psi exchange, BR = 100%");
    
    Daniel Winney's avatar
    Daniel Winney committed
        X_psi.set_params({gGam_psi, gV_psi, gT_psi});
    
    
    Daniel Winney's avatar
    Daniel Winney committed
        vector_exchange X_omega(kX, M_OMEGA, "#it{X}(6900) with BR(#it{X #rightarrow #psi#omega}) = 1%");
    
    Daniel Winney's avatar
    Daniel Winney committed
        X_omega.set_params({gGam_omega, gV_omega, gT_omega});
        X_omega.set_formfactor(true, bOmega);
       
        // ---------------------------------------------------------------------------
        // Plotting options
        // ---------------------------------------------------------------------------
    
        // which amps to plot
        std::vector<amplitude*> amps;
        amps.push_back(&X_omega);
    
    
    Daniel Winney's avatar
    Daniel Winney committed
    
        double  xmin = 7.5;
        double  xmax = 15.;
    
    
    Daniel Winney's avatar
    Daniel Winney committed
    
        std::string filename = "omega_exchange.pdf";
    
        std::string ylabel  = "#it{#sigma(#gamma p #rightarrow X p)}   [nb]";
    
    Daniel Winney's avatar
    Daniel Winney committed
    
        // ---------------------------------------------------------------------------
        // You shouldnt need to change anything below this line
        // ---------------------------------------------------------------------------
    
        // Plotter object
        jpacGraph1D* plotter = new jpacGraph1D();
    
        // ---------------------------------------------------------------------------
        // Print the desired observable for each amplitude
        for (int n = 0; n < amps.size(); n++)
        {
    
    Daniel Winney's avatar
    Daniel Winney committed
            std::cout << std::endl << "Printing amplitude: " << amps[n]->_identifier << "\n";
    
    Daniel Winney's avatar
    Daniel Winney committed
    
            auto F = [&](double x)
            {
                return amps[n]->integrated_xsection(x*x);
            };
    
    
            std::array<std::vector<double>, 2> x_fx; 
    
    Daniel Winney's avatar
    Daniel Winney committed
            if (xmin < amps[n]->_kinematics->Wth())
    
    Daniel Winney's avatar
    Daniel Winney committed
                x_fx = vec_fill(N, F, amps[n]->_kinematics->Wth() + EPS, 9., true);
    
                    double Wi = 9. + double(j) * (xmax - 9.) / 10.;
                    x_fx[0].push_back(Wi);
                    x_fx[1].push_back(F(Wi));
    
    Daniel Winney's avatar
    Daniel Winney committed
                }
            }
            else
            {
                x_fx = vec_fill(N, F, xmin, xmax, true);
            }
    
    
    Daniel Winney's avatar
    Daniel Winney committed
            plotter->AddEntry(x_fx[0], x_fx[1], amps[n]->_identifier);
    
    Daniel Winney's avatar
    Daniel Winney committed
        }
    
        plotter->SetXaxis(ROOT_italics("W_{#gammap}") + "  [GeV]", xmin, xmax);
    
        plotter->SetYaxis(ylabel, ymin, ymax);
        plotter->SetYlogscale(true);
        
        plotter->SetLegend(0.2, 0.75);
    
        // Output to file
        plotter->Plot(filename);
    
        delete plotter;
        delete kX;
    
        return 1.;
    };