Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2025-04-19 09:10:08

0001 #ifndef _SAL_H
0002 #define _SAL_H
0003 
0004 #include <iostream>
0005 #include <cstdlib>
0006 #include <cmath>
0007 
0008 using namespace std;
0009 
0010 #define HEADER_SIZE 16
0011 
0012 #define MIN_FAC 0.99999
0013 #define MAX_FAC 1.00001
0014 
0015 class SAL {
0016   private:
0017     char last_iq;
0018     double Lambda4sq;
0019     double ipol2(double x, double t, int pn);
0020     double ipol2d(double x, double t, int pn);
0021     double** fi[7];
0022     double** dfi[7];
0023     double** fi2[7];  //--- second derivatives of fi
0024     double** dfi2[7]; //--- second derivatives of dfi
0025     double* X;
0026     double* T;
0027 
0028     double BetheHeitler(double x, double QQ, double msq);
0029     double PSSuppr(double x, double QQ, double msq);
0030     int InLoc(double X[], int n, double x);
0031     void TriDiagSolve(double diag[], double above[], double below[], double b[], int n);
0032     double* InitSpline(double x[], double y[], int n, double yp0);
0033     double SplineValue(double x[], double y[], double M[], int npt, double xi);
0034     
0035     //==========================================
0036     void Aloc(double** a[7]) {
0037       int pn,iq;
0038       try {
0039         for(pn=0; pn<=Nf; pn++){
0040           a[pn] = new double*[nq];
0041           for(iq = 0; iq < nq; iq++) a[pn][iq] = new double[nx];
0042         }
0043       }
0044       catch(...) { cerr << "Could not allocate. Bye ..." <<endl; exit(1); }
0045     }
0046 
0047     //==========================================
0048     void Dealloc(double** a[7]) {
0049       int pn,iq;
0050       for(pn=0; pn<=Nf; pn++){
0051         for(iq = 0; iq < nq; iq++) delete[] a[pn][iq];
0052         delete[] a[pn];
0053       }
0054     }
0055 
0056     //==========================================
0057     double evSuppr(double QQ, int flav) {
0058       if(QQ <= m2[flav]) return 1;
0059       double tau = log(log(QQ/Lambda4sq)/
0060              log(m2[flav]/Lambda4sq));
0061       return tau > 1 ? 0 : 1 - tau;
0062     }
0063 
0064   public:
0065     unsigned char ver,nx,nq, Nf;
0066     unsigned char* Flav;
0067     double x_min, x_max;
0068     double QQ_min, QQ_max;
0069     double eq2[7];
0070     double m2[7];
0071 
0072     SAL(char* iname = NULL);
0073     
0074     ~SAL() {
0075       Dealloc(fi);
0076       Dealloc(dfi);
0077       Dealloc(fi2);
0078       Dealloc(dfi2);
0079     }
0080     
0081     
0082     void PDF(double x, double QQ, double f[]);
0083     double F2(double x, double QQ, int hflav=0);
0084 
0085 };
0086 
0087 class TxGrid {
0088   private:
0089     int Nx;
0090     double aNx, xlo, dx2;
0091   public:
0092     TxGrid(int nx) {
0093       Nx = nx;
0094       aNx = 22;
0095       xlo = 1e-5;
0096       double dx1 = exp(0.5*aNx);
0097       dx2 = (1-xlo)*(dx1+1)/(dx1-1);
0098     }
0099     double x(int ix) {
0100       return dx2/(1+exp(0.5*aNx*(1-(2.0*ix)/Nx))) + (1+xlo - dx2)/2;
0101     }
0102 };
0103 
0104 //-------  non-class functions  ---------------------
0105 //---  defined in sal.cpp
0106 
0107 void SALPDF(double x, double QQ, double f[]);
0108 double SALF2(double x, double QQ);
0109 
0110 #endif