double dGreens(double rp, void * params ){ std::vector<double> greenParam = *(std::vector<double> *)params; double ri = greenParam[0]; double r = greenParam[1]; double root_dv = greenParam[2]; // double dGreens = pow(root_dv , -1) * rp/ri * (exp( - pow( (rp-ri)/(2*root_dv) , 2)) - exp( - pow( ( rp + ri)/(2*root_dv) , 2)) ) * pow( c.DM_profile(rp),2)/pow( c.DM_profile(r),2); return dGreens; }
double dssyn( double r, void * params ){ double dist_z = Dist() / (1+c.z); double ssynIntegrand = 4 *pi /pow(dist_z , 2) *pow(r,2) * pow(c.DM_profile(r) , 2)*gslInt_jsyn(r); return ssynIntegrand; }
double dGreens(double rp, void * params){ std::vector<double> greenParam = *(std::vector<double> *)params; double ri = greenParam[0] ; double root_dv = greenParam[1]; //std::cout << "rdv = " << root_dv/mpc2cm*1000 << std::endl; double dGreens = rp/ri* pow( c.DM_profile(rp) , 2.0) *(exp( - pow( (rp-ri)/( 2*root_dv ) , 2)) - exp( - pow( ( rp + ri)/(2*root_dv) , 2)) ) ;// //std::cout << "root_dv = " << root_dv << std::endl; return dGreens; }
double ddiffusion(double Ep, void * params){ std::vector<double> diffusionParams = *(std::vector<double> *)params; double E = diffusionParams[0]; double ri = diffusionParams[1] ; double vE = diffusionParams[2]; double r = diffusionParams[3]; double Ep_scaled = (int)(Ep/c.scale) ; double rootdv = sqrt( std::abs(vE - c.vlookup[Ep_scaled]) ); // 0.035*mpc2cm ; // // if (c.vlookup[Ep_scaled] > vE) { std::cout << "v(E = "<<E<<", E_scaled = "<< (int)(E/c.scale)<<") = "<< vE << ", v(Ep = "; std::cout<<Ep <<" Ep_scaled = " << Ep_scaled<<") = " ; std::cout << c.vlookup[Ep_scaled] << ", Dv = " << vE - c.vlookup[Ep_scaled] <<" rootdv = "<< rootdv/mpc2cm *1000<<std::endl;; }; //else // rootdv = sqrt( abs(vE - c.vlookup[Ep_scaled]) ); //if (rootdv < 0.005*mpc2cm) //std::cout << "v(E = "<<E<<") = "<< vE << ", v(Ep = "<<Ep<<") = " <<c.vlookup[Ep*c.n/p.mx] << ", rootdv = "<< rootdv/mpc2cm *1000<<std::endl; //std::cout << " rootdv = "<< rootdv/mpc2cm *1000<<std::endl; //std::cout << "root _dv(E = "<<E<<", Ep = "<<Ep<<"): " << rootdv/mpc2cm *1000<<std::endl; double a = gslInt_Green(ri, rootdv); double ddiffusion; if (rootdv == 0) ddiffusion = darksusy(Ep)/9;//divide by imNum to cancel out sum * (1.0/rootdv) * gslInt_Green(ri, rootdv); else ddiffusion = pow(4*pi , -1.0/2.0)*darksusy(Ep) * (1.0/rootdv) * pow(c.DM_profile(r) , -2.0)*a; //std::cout << "ddiffusion(E = "<<E << ", Ep = "<< Ep <<") = " << ddiffusion <<" rdv = "<< rootdv/mpc2cm*1000<<std::endl; //std::cout << "Greens(E = "<<E << ", Ep = "<< Ep <<") = " << a <<" rdv = "<< rootdv/mpc2cm*1000<<std::endl; if(isnan(a) == 1){ std::cout << "v(E = "<<E<<") = "<< vE << ", v(Ep = "; std::cout<<Ep <<" Ep_scaled = " << Ep_scaled<<") = " ; std::cout << c.vlookup[Ep_scaled] << ", Dv = " << std::abs(vE - c.vlookup[Ep_scaled]) <<" rootdv = "<< rootdv/mpc2cm *1000<<std::endl;; }; return ddiffusion; }