Esempio n. 1
0
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;

}
Esempio n. 2
0
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;
}
Esempio n. 3
0
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;

}
Esempio n. 4
0
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;

}