Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-03 08:20:08

0001 /*******************************************************************************
0002  * Copyright (c) The JETSCAPE Collaboration, 2018
0003  *
0004  * Modular, task-based framework for simulating all aspects of heavy-ion collisions
0005  * 
0006  * For the list of contributors see AUTHORS.
0007  *
0008  * Report issues at https://github.com/JETSCAPE/JETSCAPE/issues
0009  *
0010  * or via email to bugs.jetscape@gmail.com
0011  *
0012  * Distributed under the GNU General Public License 3.0 (GPLv3 or later).
0013  * See COPYING for details.
0014  ******************************************************************************/
0015 
0016 #ifndef MATTER_H
0017 #define MATTER_H
0018 
0019 #include "JetEnergyLossModule.h"
0020 #include "Pythia8/Pythia.h"
0021 
0022 using namespace Jetscape;
0023 
0024 class Matter : public JetEnergyLossModule<
0025                    Matter> //, public std::enable_shared_from_this<Matter>
0026 {
0027 public:
0028   Matter();
0029   virtual ~Matter();
0030 
0031   void Init();
0032   //void Exec();
0033   //void DoEnergyLoss(double deltaT, double Q2, const vector<Parton>& pIn, vector<Parton>& pOut);
0034   void DoEnergyLoss(double deltaT, double time, double Q2, vector<Parton> &pIn,
0035                     vector<Parton> &pOut);
0036   void WriteTask(weak_ptr<JetScapeWriter> w);
0037   void Dump_pIn_info(int i, vector<Parton> &pIn);
0038 
0039   double generate_L(double form_time);
0040   double sudakov_Pgg(double g0, double g1, double loc_c, double E);
0041   double sud_val_GG(double h0, double h1, double h2, double loc_d, double E1);
0042   double sud_z_GG(double cg, double cg1, double loc_e, double l_fac, double E2);
0043   double P_z_gg_int(double cg, double cg1, double loc_e, double cg3,
0044                     double l_fac, double E2);
0045   double sudakov_Pqg(double g0, double g1, double loc_c, double E);
0046   double sud_val_QG(double h0, double h1, double h2, double loc_d, double E1);
0047   double sud_z_QG(double cg, double cg1, double loc_e, double l_fac, double E2);
0048   double P_z_qg_int(double cg, double cg1, double loc_e, double cg3,
0049                     double l_fac, double E2);
0050   double sudakov_Pqg_w_M(double M, double g0, double g1, double loc_c,
0051                          double E);
0052   double sud_val_QG_w_M(double M, double h0, double h1, double h2, double loc_d,
0053                         double E1);
0054   double sud_z_QG_w_M(double M, double cg, double cg1, double loc_e,
0055                       double l_fac, double E2);
0056   double P_z_qg_int_w_M(double M, double cg, double cg1, double loc_e,
0057                         double cg3, double l_fac, double E2);
0058   double sudakov_Pqq(double q0, double q1, double loc_c, double E);
0059 
0060   double sud_val_QQ(double h0, double h1, double h2, double loc_d, double E1);
0061   double sud_z_QQ(double cg, double cg1, double loc_e, double l_fac, double E2);
0062   double P_z_qq_int(double cg, double cg1, double loc_e, double cg3,
0063                     double l_fac, double E2);
0064   double P_z_qp_int(double cg, double cg1, double loc_e, double cg3,
0065                     double l_fac, double E2);
0066   double sud_z_QP(double cg, double cg1, double loc_e, double l_fac, double E2);
0067   double sud_val_QP(double h0, double h1, double h2, double loc_d, double E1);
0068   double sudakov_Pqp(double g0, double g1, double loc_c, double E);
0069 
0070   double sudakov_Pqq_w_M_vac_only(double M, double q0, double q1, double loc_c,
0071                                   double E);
0072   double sud_val_QQ_w_M_vac_only(double M, double h0, double h1, double h2,
0073                                  double loc_d, double E1);
0074   double sud_z_QQ_w_M_vac_only(double M, double cg, double cg1, double loc_e,
0075                                double l_fac, double E2);
0076   double P_z_qq_int_w_M_vac_only(double M, double cg, double cg1, double loc_e,
0077                                  double cg3, double l_fac, double E2);
0078 
0079   //  void shower_vac( int line, int pid, double nu_in, double t0_in, double t_in, double kx, double ky, double loc, bool is_lead);
0080   double generate_vac_t(int p_id, double nu, double t0, double t, double loc_a,
0081                         int isp);
0082   double generate_vac_t_w_M(int p_id, double M, double nu, double t0, double t,
0083                             double loc_a, int is);
0084   double generate_vac_z(int p_id, double t0, double t, double loc_b, double nu,
0085                         int is);
0086   double generate_vac_z_w_M(int p_id, double M, double t0, double t,
0087                             double loc_b, double nu, int is);
0088   double alpha_s(double q2);
0089   double profile(double zeta);
0090 
0091   double generate_angle();
0092   double generate_kt(double local_qhat, double dzeta);
0093 
0094   double qhat = 0.0;
0095   double ehat = 0.0;
0096   double e2hat = 0.0;
0097   double length = 0.0;
0098 
0099   unsigned int MaxColor = 0;
0100 
0101   //SC: for interface with hydro
0102   double fillQhatTab(double y);
0103   double fncQhat(double zeta);
0104   double fncAvrQhat(double zeta, double tau);
0105 
0106   bool matter_on, in_vac, brick_med, recoil_on, broadening_on;
0107   double hydro_Tc, qhat0, alphas, brick_length, vir_factor;
0108   double initR0, initRx, initRy, initRz, initVx, initVy, initVz, initRdotV,
0109       initVdotV, initEner;
0110   double Q00, Q0, T0;
0111 
0112   static const int dimQhatTab = 151;
0113   double qhatTab1D[dimQhatTab] = {0.0};
0114   double qhatTab2D[dimQhatTab][dimQhatTab] = {{0.0}};
0115 
0116   double tStart;// = 0.6;
0117   int iEvent;
0118   bool debug_flag = 0;
0119   long NUM1;
0120 
0121   // Variables for HQ 2->2
0122   static const int N_p1 = 500;
0123   static const int N_T = 60;
0124   static const int N_e2 = 75;
0125   static double distFncB[N_T][N_p1][N_e2], distFncF[N_T][N_p1][N_e2],
0126       distMaxB[N_T][N_p1][N_e2], distMaxF[N_T][N_p1][N_e2];
0127   static double distFncBM[N_T][N_p1], distFncFM[N_T][N_p1];
0128   double min_p1 = 0.0;
0129   double max_p1 = 1000.0;
0130   double bin_p1 = (max_p1 - min_p1) / N_p1;
0131   double min_T = 0.1;
0132   double max_T = 0.7;
0133   double bin_T = (max_T - min_T) / N_T;
0134   double min_e2 = 0.0;
0135   double max_e2 = 15.0;
0136   double bin_e2 = (max_e2 - min_e2) / N_e2;
0137 
0138   static double RHQ[60][20];    //total scattering rate for heavy quark
0139   static double RHQ11[60][20];  //Qq->Qq
0140   static double RHQ12[60][20];  //Qg->Qg
0141   static double qhatHQ[60][20]; //qhat of heavy quark
0142 
0143   // flag to make sure initialize only once
0144   static bool flag_init;
0145 
0146 
0147   //qhat related functions
0148   int QhatParametrizationType;
0149   double GeneralQhatFunction(int QhatParametrization, double Temperature, double EntropyDensity, double FixAlphas, double Qhat0, double E, double muSquare);
0150   double RunningAlphaS(double muSquare);
0151   double VirtualityQhatFunction(int QhatParametrization,  double enerLoc, double muSquare);
0152   double ModifiedProbability(int QhatParametrization, double tempLoc, double sdLoc, double enerLoc, double muSquare);  
0153   double IntegralPDF(double xB, double a, double b);
0154   double qhatA, qhatB, qhatC, qhatD;
0155   
0156   //SC: for elastic scattering
0157   void flavor(int &CT, int &KATT0, int &KATT2, int &KATT3,
0158               unsigned int &max_color, unsigned int &color0,
0159               unsigned int &anti_color0, unsigned int &color2,
0160               unsigned int &anti_color2, unsigned int &color3,
0161               unsigned int &anti_color3);
0162   void colljet22(int CT, double temp, double qhat0ud, double v0[4],
0163                  double p0[4], double p2[4], double p3[4], double p4[4],
0164                  double &qt);
0165   void trans(double v[4], double p[4]);
0166   void transback(double v[4], double p[4]);
0167   void rotate(double px, double py, double pz, double pr[4], int icc);
0168   float ran0(long *idum);
0169   double solve_alphas(double var_qhat, double var_ener, double var_temp);
0170   double fnc0_alphas(double var_alphas, double var_qhat, double var_ener,
0171                      double var_temp);
0172   double fnc0_derivative_alphas(double var_alphas, double var_qhat,
0173                                 double var_ener, double var_temp);
0174 
0175   void read_tables();
0176   double Mgc2gc(double s, double t, double M);
0177   double Mqc2qc(double s, double t, double M);
0178   void collHQ22(int CT, double temp, double qhat0ud, double v0[4], double p0[4],
0179                 double p2[4], double p3[4], double p4[4], double &qt);
0180 
0181 protected:
0182   uniform_real_distribution<double> ZeroOneDistribution;
0183 
0184 private:
0185   // Allows the registration of the module so that it is available to be used by the Jetscape framework.
0186   static RegisterJetScapeModule<Matter> reg;
0187   double tscale;
0188 };
0189 
0190 #endif // MATTER_H