void StarCatalog::writeAscii(std::string file, std::string delim) const 
{
    Assert(int(_id.size()) == size());
    Assert(int(_pos.size()) == size());
    Assert(int(_sky.size()) == size());
    Assert(int(_noise.size()) == size());
    Assert(int(_flags.size()) == size());
    Assert(int(_mag.size()) == size());
    Assert(int(_sg.size()) == size());
    Assert(int(_objsize.size()) == size());
    Assert(int(_is_star.size()) == size());

    std::ofstream fout(file.c_str());
    if (!fout) {
        throw WriteException("Error opening stars file"+file);
    }

    Form sci8; sci8.sci().trail(0).prec(8);
    Form fix3; fix3.fix().trail(0).prec(3);
    Form fix6; fix6.fix().trail(0).prec(6);

    const int ntot = size();
    for (int i=0; i<ntot; ++i) {
        fout 
            << _id[i] << delim
            << fix3(_pos[i].getX()) << delim
            << fix3(_pos[i].getY()) << delim
            << fix3(_sky[i]) << delim
            << sci8(_noise[i]) << delim
            << _flags[i] << delim
            << fix3(_mag[i]) << delim
            << fix3(_sg[i]) << delim
            << fix6(_objsize[i]) << delim
            << _is_star[i] << delim 
            << std::endl;
    }

}
void PsfCatalog::writeAscii(std::string file, std::string delim) const
{
    Assert(int(_id.size()) == size());
    Assert(int(_pos.size()) == size());
    Assert(int(_sky.size()) == size());
    Assert(int(_noise.size()) == size());
    Assert(int(_flags.size()) == size());
    Assert(int(_nu.size()) == size());
    Assert(int(_psf.size()) == size());
    const int npsf = size();

    std::ofstream fout(file.c_str());
    if (!fout) {
        throw WriteException("Error opening psf file"+file);
    }

    Form sci8; sci8.sci().trail(0).prec(8);
    Form fix3; fix3.fix().trail(0).prec(3);
    Form fix6; fix6.fix().trail(0).prec(3);

    for(int i=0;i<npsf;++i) {
        fout
            << _id[i] << delim
            << fix3(_pos[i].getX()) << delim
            << fix3(_pos[i].getY()) << delim
            << fix3(_sky[i]) << delim
            << sci8(_noise[i]) << delim
            << _flags[i] << delim
            << fix3(_nu[i]) << delim
            << _psf[i].getOrder() << delim
            << fix6(_psf[i].getSigma());
        const int ncoeff = _psf[i].size();
        for(int j=0;j<ncoeff;++j) {
            fout << delim << sci8(_psf[i](j));
        }
        fout << std::endl;
    }
}
Exemple #3
0
int main()
{
  cout << setiosflags(ios::uppercase);

  //ofstream dout("RegE2_MP.out");
  //dout  << setiosflags(ios::uppercase);

  mp_init();
  
  double s_in, h_in, b1_in, b2_in, db, dfactor, dpi, x1_in, x2_in, dxi;
  int N, m, Nb;

  dpi = 4.0 * atan(1.0);
  
  mp_real pi = mppic; // pi aus der Bibliothek !!!
  mp_real pi2 = pi * pi;
  static mp_real factor;
  
  mp_real b, b1, b2, bstep, x0, s, h, x1, x2, xi;

  /* Parameter als doubles einlesen */
  cin >> b1_in >> b2_in >> Nb;
  cin >> s_in >> h_in >> N;
  cin >> x1_in >> x2_in >> m >> dxi;

  /* Konversion: double -> mp_real */
  b1  = mp_real(b1_in);
  b2  = mp_real(b2_in);
  s  = mp_real(s_in);
  h  = mp_real(h_in);
  x1 = mp_real(x1_in);
  x2 = mp_real(x2_in);
  xi = mp_real(dxi);

  mp_real step = (x2 - x1)/m;
  bstep = (b2 -b1)/mp_real(Nb);


  cout << "+++ Precision = " << mpipl << " +++" << endl;
  cout << "b1  = " << b1 ;
  cout << "b2  = " << b2 ;
  cout << "hb  = " << bstep;
  cout << "s   = " << s;
  cout << "h   = " << h;
  cout << "N   = " << N << endl;
  cout << '\v' ;
  cout << "x1  = " << x1;
  cout << "x2  = " << x2;
  cout << "m   = " << m << endl;
  cout << "xi  = " << dxi << endl;
  cout << "xh  = " << step;
  cout << "xmax = " << h * N << endl;
  
  //cout << "dfaktor = " <<dfactor << endl;
  //cout << "Faktor = " <<factor << endl;
  
  String data = "Data-N" ;
  data = data + strdup(fix3(N)) + "-xb" +strdup(fix3(h_in*N))  + ".out"; 
  ofstream fout(data());
      

  cout << "*** Begin: Write Data ***" << endl;
  for(int j = 0; j <= m; j++)
    {
       
      x0 = (j * h) - (h*N);
      mp_real datamp = mpe2(x0,xi);
      mp_real fexaktmp = mpe2exakt(x0);
      mp_real Errormp = datamp - fexaktmp;
      mp_real Errorrelmp = 100.0 * (abs(Errormp)/abs(fexaktmp));
      double data = dble(datamp);
      double fexakt = dble(fexaktmp);
      double Error = dble(Errormp);
      double Errorrel = dble(Errorrelmp);
      double xd0 = dble(x0);
      
      (ostream&) fout << xd0 << '\t' << fexakt << '\t' << data << '\t' << Error << '\t' << Errorrel << endl;
    }




  cout << "*** End  : Write Data ***" << endl;

  mp_real Regtheo_mp;
  mp_real RegSol_mp, RelError_mp;

  
  double xod, RegSol, Regtheo, RelError;

  /*
  if(Control == 1) 
    {
      cout << " *** Beginn Testrechnung *** " << endl;
      x0 = x1;
      s  = x0; 
      Regpure_mp  = mptrapez(mpkernpurereg,x0,b,s,h,N);
      Regpure_mp *= factor;
      
      Regtheo_mp  = mpRegexakt(x0,b);

      RelNumerror_mp = abs(Regpure_mp - Regtheo_mp)/abs(Regtheo_mp);
      RelNumerror_mp *= 100.0;
      
      cout << "x0 = " << x0;
      cout << Regpure_mp << Regtheo_mp << RelNumerror_mp;
      
      x0 = mp_real(0.0);
      s  = x0; 
      Regpure_mp  = mptrapez(mpkernpurereg,x0,b,s,h,N);
      Regpure_mp *= factor;
      
      Regtheo_mp  = mpRegexakt(x0,b);

      RelNumerror_mp = abs(Regpure_mp - Regtheo_mp)/abs(Regtheo_mp);
      RelNumerror_mp *= 100.0;
      
      cout << "x0 = " << x0;
      cout << Regpure_mp << Regtheo_mp << RelNumerror_mp;

      x0 = x2;
      s  = x0; 
      Regpure_mp  = mptrapez(mpkernpurereg,x0,b,s,h,N);
      Regpure_mp *= factor;
      
      Regtheo_mp  = mpRegexakt(x0,b);

      RelNumerror_mp = abs(Regpure_mp - Regtheo_mp)/abs(Regtheo_mp);
      RelNumerror_mp *= 100.0;
      
      cout << "x0 = " << x0;
      cout << Regpure_mp << Regtheo_mp << RelNumerror_mp;

      cout << " *** End Testrechnung *** " << endl;

    }
  */
  cout << '\v' ;

  cout << " *** Beginn PureRegularisation *** " << endl;
  
  for(int jj=0; jj <=Nb; jj++)
  {
      b = b1 + jj * bstep;
      db = dble(b);
      
      String reg = "RegGaussE2_MP-N" ;
      reg = reg + strdup(fix3(N)) + "-xb" + strdup(fix3(x2_in)) + "-b" + strdup(fix3(db)) + ".out"; 
      ofstream out(reg());
      
      /* Vorfaktor */
      factor = mp_real(2.0)*b/power(pi,mp_real(1.5));
      factor *= exp(mp_real(0.25) * pi2 * b * b);
      dfactor = 2.0 * (db/pow(dpi,1.5)) * exp(db*db*dpi*dpi*.25);
      
      cout << " +++ b = " << db << " ;  j = " << jj << " +++" << endl;
      cout << '\v' ;
      
  for(int j = 0; j <= m; j++)
    {
      x0 = x1 + j * step;
      s = x0;
      
      RegSol_mp   = mptrapezxi(mpkern,x0,b,xi,s,h,N);
      RegSol_mp  *= factor;

      Regtheo_mp  = mpRegexakt(x0,b);
      
      RelError_mp = abs(RegSol_mp - Regtheo_mp)/abs(Regtheo_mp);
      RelError_mp *= 100.0;

      /* Konversion mp_real -> double */
      xod      = dble(x0);
      RegSol   = dble(RegSol_mp);
      Regtheo  = dble(Regtheo_mp);
      RelError = dble(RelError_mp);
      
      cout <<  x0 << Regtheo_mp << RegSol_mp << RelError_mp << endl;
(ostream&) out << xod << '\t' << Regtheo << '\t' << RegSol << '\t' << RelError << endl;
    }

  }

  return 0;
}
void ShearCatalog::writeAscii(std::string file, std::string delim) const
{
    Assert(int(_id.size()) == size());
    Assert(int(_pos.size()) == size());
    Assert(int(_sky.size()) == size());
    Assert(int(_noise.size()) == size());
    Assert(int(_flags.size()) == size());
    Assert(int(_skypos.size()) == size());
    Assert(int(_shear.size()) == size());
    Assert(int(_nu.size()) == size());
    Assert(int(_cov.size()) == size());
    Assert(int(_meas_galorder.size()) == size());
    Assert(int(_shape.size()) == size());

    std::ofstream fout(file.c_str());
    if (!fout) {
        throw WriteException("Error opening shear file"+file);
    }

    bool output_psf = _params.read("shear_output_psf",false);

    Form sci8; sci8.sci().trail(0).prec(8);
    Form fix3; fix3.fix().trail(0).prec(3);
    Form fix8; fix8.fix().trail(0).prec(8);
    Form fix6; fix6.fix().trail(0).prec(6);

    const int ngals = size();
    for(int i=0;i<ngals;++i) {
        fout
            << _id[i] << delim
            << fix3(_pos[i].getX()) << delim
            << fix3(_pos[i].getY()) << delim
            << fix3(_sky[i]) << delim
            << sci8(_noise[i]) << delim
            << _flags[i] << delim
            << fix8(_skypos[i].getX()/3600.) << delim 
            << fix8(_skypos[i].getY()/3600.) << delim
            << sci8(real(_shear[i])) << delim
            << sci8(imag(_shear[i])) << delim
            << fix3(_nu[i]) << delim
            << sci8(_cov[i](0,0)) << delim
            << sci8(_cov[i](0,1)) << delim
            << sci8(_cov[i](1,1)) << delim
            //<< _shape[i].getOrder() << delim
            << _meas_galorder[i] << delim
            << fix6(_shape[i].getSigma());
        const int ncoeff = _shape[i].size();
        for(int j=0;j<ncoeff;++j)
            fout << delim << sci8(_shape[i](j));
        if (output_psf) {
            Assert(_fitpsf);
            BVec interp_psf(_fitpsf->getPsfOrder(),_fitpsf->getSigma());
            interp_psf = (*_fitpsf)(_pos[i]);
            fout
                << delim << interp_psf.getOrder()
                << delim << fix6(interp_psf.getSigma());
            const int npsf_coeff = interp_psf.size();
            for(int j=0;j<npsf_coeff;++j)
                fout << delim << sci8(interp_psf(j));
        }
        fout << std::endl;
    }
}
int main()
{
   
  cout  << setiosflags(ios::uppercase);
  /*
  ofstream out("GAUSS.out");
  out   << setiosflags(ios::uppercase);
  ofstream dout("GAUSSMOD.out");
  dout  << setiosflags(ios::uppercase);
  */

  mp_init();
  cout << "+++ Precision = " << mpipl << " +++" << endl;
 

  double s_in, h_in , b1_in, b2_in, db, g_in, dpi, x1_in, x2_in;
  int N, Nb, m, Control;

  dpi = 4.0 * atan(1.0);
  
  mp_real pi = mppic; // pi aus der Bibliothek !!!
  mp_real pi2 = pi * pi;
  static mp_real factor;
  
  mp_real b, b1, b2, bstep, g, x0, s, h, x1, x2;

  /* Parameter als doubles einlesen */
  cin >> b1_in >> b2_in >> Nb;
  cin >> g_in >> Control;
  cin >> s_in >> h_in >> N;
  cin >> x1_in >> x2_in >> m;

  /* Konversion: double -> mp_real */
  b1  = mp_real(b1_in);
  b2  = mp_real(b2_in);
  g  = mp_real(g_in);
  s  = mp_real(s_in);
  h  = mp_real(h_in);
  x1 = mp_real(x1_in);
  x2 = mp_real(x2_in);
//  a  = 1/(mp_real(2.0)*b1);

  bstep = (b2 - b1)/mp_real(Nb);


  /* Vorfaktor */
//  factor = mp_real(2.0)*b/power(pi,mp_real(1.5));
//  factor *= exp(mp_real(0.25) * pi2 * b * b);
  
  //dfactor = 2.0 * (b_in/pow(dpi,1.5)) * exp(b_in*b_in*dpi*dpi*.25);

  cout << "*** Parameter ***" << endl; 
  cout << "b1     = " << b1 ;
  cout << "b2     = " << b2 ;
  cout << "bstep  = " << bstep ;
  //cout << "a      = " << a;
  cout << "g      = " << g;
  cout << "h      = " << h;
  cout << "N      = " << N << endl;
  cout << '\v' ;
  cout << "x1     = " << x1;
  cout << "x2     = " << x2;
  cout << "m      = " << m << endl;
  
  cout << "xmax   = " << h * N << endl;
  
//  cout << "dfaktor = " <<dfactor << endl;
//  cout << "Faktor = " <<factor << endl;


  /* Datendatei */

  String data = "GAUSSMOD-N" ;
  data = data + N + "-xb" + x2_in + "-beta" + strdup(fix3(g_in)) + ".out"; 
  ofstream dout(data());
  
  
  
  mp_real mp_E2_Gauss, mp_E2_Gausstheo, mp_Reg, mp_Regtheo, mp_ModGauss, step;
  mp_real mp_diffrel, mp_diffrelreg;
  double E2, E2_Gauss, E2_Gausstheo, Reg, Reg_theod, ModGauss, diffrel, x0d;
  double diffrelreg;
  
  step = (x2 -x1)/mp_real(m);


  if(Control == 1)
    {
	cout << "*** Begin: Read Data ***" << endl; 
      for(int j = 0; j <= m; j++)
	{
	  x0 = x1 + j * step; 
	  mp_E2_Gauss = mpe2gauss(x0,g);
	  mp_E2_Gausstheo = mpe2gausstheo(x0,g);
	  mp_real mpdeltarel = abs(mp_E2_Gauss - mp_E2_Gausstheo)/abs(mp_E2_Gausstheo);
	  mpdeltarel *= mp_real(100.0);
	  
	  x0d = dble(x0);
	  E2 = e2(x0d);
	  E2_Gauss        = dble(mp_E2_Gauss);
	  E2_Gausstheo    = dble(mp_E2_Gausstheo);
	  double deltarel = dble(mpdeltarel);
	  cout << x0 << mp_E2_Gausstheo << mp_E2_Gauss << mpdeltarel << endl;;

	  (ostream&) dout << x0d << '\t' << E2 << '\t' << E2_Gausstheo <<'\t' << E2_Gauss << '\t' << deltarel << endl;
      	}
      cout << "*** End: Read Data ***" << endl; 
    }



  cout << "*** Begin: Regularisation Scan ***" << endl;
  for(int i = 0; i <= Nb; i++)
  {
      b = b1 + i * bstep;
      db = dble(b);
      factor = mp_real(2.0)*b/power(pi,mp_real(1.5));
      factor *= exp(mp_real(0.25) * pi2 * b * b);

      /* RegDatei */
      String reg = "GAUSSREG-N" ;
      reg = reg + N + "-xb" + x2_in + "-beta" + strdup(fix3(g_in)) + "-b" + strdup(fix3(db)) + ".out"; 
      ofstream out(reg());
      
      cout << " +++ i = " << i << ",  " << " b = " << db << " +++ " << endl;
      cout << '\v' ;
      
  for(int jj = 0; jj <= m; jj++)
    {
      x0 = x1 + jj * step;
      s = x0;
      mp_Reg = mptrapez(mpkern,x0,b,g,s,h,N);
      mp_Reg *= factor;
  
      mp_Regtheo  = Regtheo(x0,b,g); //reine Regularisierte
      mp_ModGauss = GaussDichte(x0,g); //Gaussdichte als Modell
      
      
      mp_diffrel = abs(mp_Reg - mp_Regtheo)/abs(mp_Regtheo);
      mp_diffrel *= mp_real(100.0);
      
      mp_diffrelreg  = abs(mp_Reg - mp_ModGauss)/abs(mp_ModGauss);
      mp_diffrelreg *= mp_real(100.0);

      Reg_theod  = dble(mp_Regtheo);
      Reg        = dble(mp_Reg);
      ModGauss   = dble(mp_ModGauss);
      diffrel    = dble(mp_diffrel);
      diffrelreg = dble(mp_diffrelreg);
      x0d        = dble(x0);

      cout << x0 << mp_Reg << mp_Regtheo << mp_ModGauss << mp_diffrel << mp_diffrelreg<< endl;


      (ostream&) out << x0d << '\t' << ModGauss << '\t' << Reg << '\t' << Reg_theod<< '\t' << diffrel <<'\t' << diffrelreg << endl;
      
    }
  }
  cout << "*** End: Regularisation Scan ***" << endl;
  return 0;
}