aboutsummaryrefslogtreecommitdiffstats
path: root/mass_profile/calc_lx_beta.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'mass_profile/calc_lx_beta.cpp')
-rw-r--r--mass_profile/calc_lx_beta.cpp79
1 files changed, 35 insertions, 44 deletions
diff --git a/mass_profile/calc_lx_beta.cpp b/mass_profile/calc_lx_beta.cpp
index 5bb2570..aae8b2b 100644
--- a/mass_profile/calc_lx_beta.cpp
+++ b/mass_profile/calc_lx_beta.cpp
@@ -30,20 +30,8 @@ const double Mpc=kpc*1000;
double beta_func(double r,
double n0,double rc,double beta)
{
-
- return abs(n0)*pow(1+r*r/rc/rc,-3./2.*abs(beta));
-}
-
- //calculate critical density from z, under following cosmological constants
-static double calc_critical_density(double z,
- const double H0=2.3E-18,
- const double Omega_m=.27)
-{
- const double G=6.673E-8;//cm^3 g^-1 s^2
- const double E=std::sqrt(Omega_m*(1+z)*(1+z)*(1+z)+1-Omega_m);
- const double H=H0*E;
- return 3*H*H/8/pi/G;
+ return abs(n0)*pow(1+r*r/rc/rc,-3./2.*abs(beta));
}
@@ -61,7 +49,7 @@ public:
{
return spl.get_value(x);
}
-
+
//we need this function, when this object is performing a clone of itself
spline_func_obj* do_clone()const
{
@@ -74,7 +62,7 @@ public:
{
spl.push_point(x,y);
}
-
+
//before getting the intepolated value, the spline should be initialzied by calling this function
void gen_spline()
{
@@ -93,9 +81,9 @@ int main(int argc,char* argv[])
ifstream cfg_file(argv[1]);
assert(cfg_file.is_open());
cfg_map cfg=parse_cfg_file(cfg_file);
-
+
//check the existence of following parameters
-
+
const double z=cfg.z;
//initialize the radius list, sbp list and sbp error list
@@ -151,7 +139,7 @@ int main(int argc,char* argv[])
{
rmin=cfg.rmin_kpc*kpc/cm_per_pixel;
}
-
+
cerr<<"rmin="<<rmin<<endl;
std::list<double> radii_tmp,sbps_tmp,sbpe_tmp;
radii_tmp.resize(radii.size());
@@ -184,7 +172,7 @@ int main(int argc,char* argv[])
for(ifstream ifs(cfg.cfunc_file.c_str());;)
{
assert(ifs.is_open());
- double x,y,y1,y2;
+ double x,y;
ifs>>x>>y;
if(!ifs.good())
{
@@ -199,7 +187,7 @@ int main(int argc,char* argv[])
cf.add_point(x,y);//change with source
}
cf.gen_spline();
-
+
//read temperature profile data
spline_func_obj Tprof;
int tcnt=0;
@@ -224,7 +212,7 @@ int main(int argc,char* argv[])
Tprof.gen_spline();
-
+
default_data_set<std::vector<double>,std::vector<double> > ds;
ds.add_data(data<std::vector<double>,std::vector<double> >(radii,sbps,sbpe,sbpe,radii,radii));
@@ -247,11 +235,12 @@ int main(int argc,char* argv[])
//optimization method
f.set_opt_method(powell_method<double,std::vector<double> >());
//initialize the initial values
+ /*
double n0=0;
- //double beta=atof(arg_map["beta"].c_str());
double beta=0;
double rc=0;
- double bkg=0;
+ */
+ double bkg_level=0;
for(std::map<std::string,std::vector<double> >::iterator i=cfg.param_map.begin();
i!=cfg.param_map.end();++i)
@@ -280,12 +269,14 @@ int main(int argc,char* argv[])
f.fit();
f.fit();
std::vector<double> p=f.get_all_params();
+ /*
n0=f.get_param_value("n0");
rc=f.get_param_value("rc");
beta=f.get_param_value("beta");
+ */
//output the datasets and fitting results
ofstream param_output("lx_beta_param.txt");
- for(int i=0;i<f.get_num_params();++i)
+ for(size_t i=0;i<f.get_num_params();++i)
{
if(f.get_param_info(i).get_name()=="rc")
{
@@ -322,7 +313,7 @@ int main(int argc,char* argv[])
ofs_sbp<<"color 3 on 3"<<endl;
ofs_sbp<<"color 4 on 4"<<endl;
ofs_sbp<<"color 5 on 5"<<endl;
-
+
ofs_sbp<<"win 1"<<endl;
ofs_sbp<<"yplot 1 2 3 4 5"<<endl;
ofs_sbp<<"loc 0 0 1 1"<<endl;
@@ -356,7 +347,7 @@ int main(int argc,char* argv[])
ofs_sbp<<"color 4 on 3"<<endl;
ofs_sbp<<"color 5 on 4"<<endl;
//ofs_sbp<<"ma 1 on 2"<<endl;
-
+
ofs_sbp<<"win 1"<<endl;
ofs_sbp<<"yplot 1 2 3 4"<<endl;
ofs_sbp<<"loc 0 0 1 1"<<endl;
@@ -377,7 +368,7 @@ int main(int argc,char* argv[])
}
// cout<<sbps_all.size()<<"\t"<<sbps.size()<<"\t"<<sbps_inner_cut_size<<endl;
- for(int i=1;i<sbps_all.size();++i)
+ for(size_t i=1;i<sbps_all.size();++i)
{
double x=(radii_all[i]+radii_all[i-1])/2;
double y=sbps_all[i-1];
@@ -395,7 +386,7 @@ int main(int argc,char* argv[])
}
}
ofs_sbp<<"no no no"<<endl;
- for(int i=sbps_inner_cut_size;i<sbps_all.size();++i)
+ for(size_t i=sbps_inner_cut_size;i<sbps_all.size();++i)
{
double x=(radii_all[i]+radii_all[i-1])/2;
double ym=mv[i-1];
@@ -403,8 +394,8 @@ int main(int argc,char* argv[])
}
ofs_sbp<<"no no no"<<endl;
//bkg level
- double bkg_level=abs(f.get_param_value("bkg"));
- for(int i=0;i<sbps_all.size();++i)
+ bkg_level=abs(f.get_param_value("bkg"));
+ for(size_t i=0;i<sbps_all.size();++i)
{
double x=(radii_all[i]+radii_all[i-1])/2;
ofs_sbp<<x*cm_per_pixel/kpc<<"\t"<<bkg_level<<"\t0"<<endl;
@@ -420,23 +411,23 @@ int main(int argc,char* argv[])
}
//resid
ofs_sbp<<"no no no"<<endl;
- for(int i=1;i<sbps.size();++i)
+ for(size_t i=1;i<sbps.size();++i)
{
double x=(radii[i]+radii[i-1])/2;
- double y=sbps[i-1];
- double ye=sbpe[i-1];
+ //double y=sbps[i-1];
+ //double ye=sbpe[i-1];
double ym=mv[i-1];
ofs_sbp<<x*cm_per_pixel/kpc<<"\t"<<(ym-sbps[i-1])/sbpe[i-1]<<"\t"<<1<<endl;
}
//zero level of resid
ofs_sbp<<"no no no"<<endl;
- for(int i=1;i<sbps.size();++i)
+ for(size_t i=1;i<sbps.size();++i)
{
double x=(radii[i]+radii[i-1])/2;
- double y=sbps[i-1];
- double ye=sbpe[i-1];
- double ym=mv[i-1];
+ //double y=sbps[i-1];
+ //double ye=sbpe[i-1];
+ //double ym=mv[i-1];
ofs_sbp<<x*cm_per_pixel/kpc<<"\t"<<0<<"\t"<<0<<endl;
}
@@ -457,13 +448,13 @@ int main(int argc,char* argv[])
p.back()=0;
radii.clear();
double rout=atof(argv[2])*kpc;
-
+
for(double r=0;r<rout;r+=1*kpc)//step size=1kpc
{
double r_pix=r/cm_per_pixel;
radii.push_back(r_pix);
}
-
+
double Da=cm_per_pixel/(.492/3600./180.*pi);
double Dl=Da*(1+z)*(1+z);
cout<<"dl="<<Dl/kpc<<endl;
@@ -481,19 +472,19 @@ int main(int argc,char* argv[])
break;
}
//cerr<<x<<"\t"<<y<<endl;
-
+
cf_bolo_erg.add_point(x,y);//change with source
}
cf_bolo_erg.gen_spline();
projector<double>& pj=dynamic_cast<projector<double>&>(f.get_model());
pj.attach_cfunc(cf_bolo_erg);
-
-
-
+
+
+
mv=f.eval_model_raw(radii,p);
double flux_erg=0;
- for(int i=0;i<radii.size()-1;++i)
+ for(size_t i=0;i<radii.size()-1;++i)
{
double S=pi*(radii[i+1]+radii[i])*(radii[i+1]-radii[i]);
flux_erg+=S*mv[i];