int
main (int argc, char **argv)
{

  VERBOSE = 1;

  struct params p;
  processArgsAnalyze (argc, argv, p);
  gsl_matrix *atomsNonCrop = ReadFitsImg_gsl_matrix (p.atomsfile);
  //gsl_matrix *noatoms = ReadFitsImg_gsl_matrix (p.noatomsfile);


  gsl_matrix *atoms = cropImage (p.reportfile, atomsNonCrop);
  //gsl_matrix *cnoatoms = cropImage (p.reportfile, noatoms);

  double com[2];
  COM (atoms, com);

  cout << "COM_X = " << com[0] << endl;
  cout << "COM_Y = " << com[1] << endl;

  setINI_num (p.reportfile, "CPP", "COM_X", com[0]);
  setINI_num (p.reportfile, "CPP", "COM_Y", com[1]);

  gsl_matrix_free (atomsNonCrop);
  gsl_matrix_free (atoms);

}
Example #2
0
int
main (int argc, char **argv)
{
    struct params p;
    processArgsBasler (argc, argv, p);
    VERBOSE = p.verbose;

    Basler *b = new Basler (&p);
    b->LoadFLUOR ();
    b->ComputeColumnDensity ();

    b->Fit2DGauss ();

    setINI_num (p.reportfile, "FLUORCPP", "offset",
                b->gaus2dfit[5] * b->GetNPixels ());

    double nfit = b->gaus2dfit[4] * 3.14159 * b->gaus2dfit[1] * b->gaus2dfit[3];
    double peakd = b->gaus2dfit[4] / (pow (M_PI * b->gaus2dfit[1] * b->gaus2dfit[3], 0.5)) / pow (p.magnif, 3);	// cm^-3

    setINI_num (p.reportfile, "FLUORCPP", "nfit", nfit);
    setINI_num (p.reportfile, "FLUORCPP", "peakd", peakd);
    setINI_num (p.reportfile, "FLUORCPP", "ax0w", b->gaus2dfit[1] * p.magnif);
    setINI_num (p.reportfile, "FLUORCPP", "ax1w", b->gaus2dfit[3] * p.magnif);
    setINI_num (p.reportfile, "FLUORCPP", "ax0w_err",
                b->gaus2dfit_err[1] * p.magnif);
    setINI_num (p.reportfile, "FLUORCPP", "ax1w_err",
                b->gaus2dfit_err[3] * p.magnif);
    setINI_num (p.reportfile, "FLUORCPP", "ax0c", b->abs_ci);
    setINI_num (p.reportfile, "FLUORCPP", "ax1c", b->abs_cj);
    cout << p.
         shotnum << "  nfit = " << nfit << setprecision (3) << " , peakd = " <<
         peakd << " , sizes = (" << b->gaus2dfit[1] *
         p.
         magnif << " +/- " << b->gaus2dfit_err[1] *
         p.magnif << "," << b->gaus2dfit[3] *
         p.magnif << " +/- " << b->gaus2dfit_err[3] *
         p.
         magnif << ") , center = (" << setiosflags (ios::
                 fixed) << setprecision (0) <<
         b->abs_ci << "," << b->abs_cj << ")" << endl;
    cout << resetiosflags (ios::fixed) << setprecision (6);

//  f->ComputeRadialAxialDensity ();

    return EXIT_SUCCESS;
}
int
main (int argc, char **argv)
{
  struct params p;
  processArgsAnalyze (argc, argv, p);
  VERBOSE = p.verbose;
  init_params (&p);
  setINI_num (p.reportfile, p.andor2 ? "CPP2" : "CPP", "phcdet", p.det);


  Fermions *f = new Fermions (&p);
  f->LoadFITS ();		// LoadFITS already computes the column density

  setINI_num (p.reportfile, p.andor2 ? "CPP2" : "CPP", "maxOD", f->maxOD);
  setINI_num (p.reportfile, p.andor2 ? "CPP2" : "CPP", "maxPHI", f->maxPHI);
  setINI_num (p.reportfile, p.andor2 ? "CPP2" : "CPP", "maxPHCSIG",
	      f->maxPHCSIG);
  setINI_num (p.reportfile, p.andor2 ? "CPP2" : "CPP", "maxCD", f->maxCD);
  setINI_num (p.reportfile, p.andor2 ? "CPP2" : "CPP", "maxI", f->maxI);

  if (p.onlyCD)
    {
      f->SaveColumnDensity ();
      return EXIT_SUCCESS;
    }
//  f->FindMoments ();
  if (!p.keeproi)
    {
      f->MinimalCrop (5.0);
    }
  f->Fit2DGauss (p.gaus2d_mott);
  f->SaveColumnDensity ();
  if (!p.keeproi)
    {
      f->MinimalCrop (3.5);
      f->Fit2DGauss ();
      f->SaveColumnDensity ();
    }
//  f->FitScatt2DGauss ();
//  f->FitProbe2DGauss ();

  //Get center of cloud with respect to the Andor full frame
  f->abs_ci += f->gaus2dfit[0];
  f->abs_cj += f->gaus2dfit[2];

  setINI_num (p.reportfile, p.andor2 ? "CPP2" : "CPP", "offset",
	      f->gaus2dfit[5] * f->GetNPixels ());

  if (p.gaus2d_mott)
    {
      setINI_num (p.reportfile, p.andor2 ? "CPP2" : "CPP", "nfit_mott",
		  f->nfit_mott);
      setINI_num (p.reportfile, p.andor2 ? "CPP2" : "CPP", "r0_mott",
		  f->gaus2dfit_mott[5]);
      setINI_num (p.reportfile, p.andor2 ? "CPP2" : "CPP", "peakd_mott",
		  f->peakd_mott);
      setINI_num (p.reportfile, p.andor2 ? "CPP2" : "CPP", "ax0w_mott",
		  f->gaus2dfit_mott[1] * p.magnif);
      setINI_num (p.reportfile, p.andor2 ? "CPP2" : "CPP", "ax1w_mott",
		  f->gaus2dfit_mott[3] * p.magnif);
      setINI_num (p.reportfile, p.andor2 ? "CPP2" : "CPP", "ax0c_mott",
		  f->abs_ci - f->gaus2dfit[0] + f->gaus2dfit_mott[0]);
      setINI_num (p.reportfile, p.andor2 ? "CPP2" : "CPP", "ax1c_mott",
		  f->abs_cj - f->gaus2dfit[2] + f->gaus2dfit_mott[2]);
    }
  setINI_num (p.reportfile, p.andor2 ? "CPP2" : "CPP", "nfit", f->nfit);
  setINI_num (p.reportfile, p.andor2 ? "CPP2" : "CPP", "nfit_err",
	      f->nfit_err);
  setINI_num (p.reportfile, p.andor2 ? "CPP2" : "CPP", "peakd", f->peakd);
  setINI_num (p.reportfile, p.andor2 ? "CPP2" : "CPP", "peakd_sph",
	      f->peakd_sph);
  setINI_num (p.reportfile, p.andor2 ? "CPP2" : "CPP", "ax0w",
	      f->gaus2dfit[1] * p.magnif);
  setINI_num (p.reportfile, p.andor2 ? "CPP2" : "CPP", "ax1w",
	      f->gaus2dfit[3] * p.magnif);
  setINI_num (p.reportfile, p.andor2 ? "CPP2" : "CPP", "ax0c", f->abs_ci);
  setINI_num (p.reportfile, p.andor2 ? "CPP2" : "CPP", "ax1c", f->abs_cj);
  setINI_num (p.reportfile, p.andor2 ? "CPP2" : "CPP", "TF", f->TF);
  setINI_num (p.reportfile, p.andor2 ? "CPP2" : "CPP", "ph_per_at",
	      f->Tsp / f->nfit);
  setINI_num (p.reportfile, p.andor2 ? "CPP2" : "CPP", "peak_cd",
	      f->gaus2dfit[4]);
  setINI_num (p.reportfile, p.andor2 ? "CPP2" : "CPP", "photons_in_pulse",
	      f->Tp0);
  setINI_num (p.reportfile, p.andor2 ? "CPP2" : "CPP", "alphastar",
	      p.alphastar);

  f->GetAzimuthalAverageEllipse ();

  if (p.fermiazimuth)
    {
      //f->GetAzimuthalAverage ();
      f->FitAzimuthalFermi ();
      setINI_num (p.reportfile, p.andor2 ? "CPP2" : "CPP", "n0_az", f->n0_az);
      setINI_num (p.reportfile, p.andor2 ? "CPP2" : "CPP", "BetaMu_az",
		  f->BetaMu_az);
      setINI_num (p.reportfile, p.andor2 ? "CPP2" : "CPP", "r_az", f->r_az);
      setINI_num (p.reportfile, p.andor2 ? "CPP2" : "CPP", "B_az", f->B_az);
      setINI_num (p.reportfile, p.andor2 ? "CPP2" : "CPP", "mx_az", f->mx_az);
      setINI_num (p.reportfile, p.andor2 ? "CPP2" : "CPP", "TF_az", f->TF_az);
      setINI_num (p.reportfile, p.andor2 ? "CPP2" : "CPP", "T_az", f->T_az);
    }

  if (p.fermi2d)
    {
      f->Fit2DFermi ();
      setINI_num (p.reportfile, p.andor2 ? "CPP2" : "CPP", "n0_Fermi", f->n0);
      setINI_num (p.reportfile, p.andor2 ? "CPP2" : "CPP", "BetaMU_Fermi",
		  f->BetaMu);
      setINI_num (p.reportfile, p.andor2 ? "CPP2" : "CPP", "ri_Fermi",
		  f->ri_Fermi);
      setINI_num (p.reportfile, p.andor2 ? "CPP2" : "CPP", "rj_Fermi",
		  f->rj_Fermi);
      setINI_num (p.reportfile, p.andor2 ? "CPP2" : "CPP", "ci_Fermi",
		  f->ci_Fermi);
      setINI_num (p.reportfile, p.andor2 ? "CPP2" : "CPP", "cj_Fermi",
		  f->cj_Fermi);
      setINI_num (p.reportfile, p.andor2 ? "CPP2" : "CPP", "B_Fermi",
		  f->B_Fermi);
      setINI_num (p.reportfile, p.andor2 ? "CPP2" : "CPP", "TF_2d", f->TF_2d);
      setINI_num (p.reportfile, p.andor2 ? "CPP2" : "CPP", "T_2d_rd",
		  f->T_2d_rd);
      setINI_num (p.reportfile, p.andor2 ? "CPP2" : "CPP", "T_2d_ax",
		  f->T_2d_ax);
    }


  if (p.fitfermi1D || p.fermiazimuth || p.fermi2d || true)
    {
      f->ComputeIntegrated1DDensity ();
      f->MakePlots ();
    }

  printf ("%s  %sN = %.2e%s", p.shotnum.c_str (), KCYN, f->nfit, KNRM);

  //Print number
  if (f->nfit_err * 50. > f->nfit)
    {
      printf
	("\nNumber determination uncertainty might be too high: N = %.2e +/- %.0e\n",
	 f->nfit, f->nfit_err);
    }



  if (!p.phc && !p.fluor)
    {
      //Print number from scattered photons
      //printf (", Nsp = %.2e", f->Nsp);

      //Print total number of photons in probe pulse
      //printf (", Ph = %.2e", f->Tp0);

      //Print average number of photons scattered per atom
      printf (", Ph/At = %.0f", f->Tsp / f->nfit);

      //Print peak density
      printf (", n = %.2e", f->peakd);

      //Print peak density
      printf (", %sn_sph = %.2e%s", KMAG, f->peakd_sph, KNRM);

      //Print axial size
      printf (", ax0w = %.1f +/- %.1f", f->gaus2dfit[1] * p.magnif,
	      f->gaus2dfit_err[1] * p.magnif);

      //Print center
      printf (", %sc = (%.0f,%.0f)%s", KGRN, f->abs_ci, f->abs_cj, KNRM);

      //Print max intensity
      //printf (", Imax = %.2f", f->maxI);

      //Print max intensity smoothed
      //printf (", Imax(smoothed) = %.2f", f->maxIsmooth);

      //Print average intensity
      //printf (", Iave = %.2f", f->aveI);

      //Print average intensity
      printf (", I/Isat = %.2f", f->aveIweighted);

      //Print max optical density
      printf (", ODmax = %.1f", f->maxOD);
      //Print max column density
      printf (", CDmax = %.1f", f->maxCD);

    }

  else if (p.fluor || p.Nframes == 2)
    {
      printf (", MAX Counts/Px = %.1f", f->maxCD);

      //Print axial size
      printf (", ax0w = %.1f +/- %.1f", f->gaus2dfit[1] * p.magnif,
	      f->gaus2dfit_err[1] * p.magnif);

      //Print center
      printf (", c = (%.0f,%.0f)", f->abs_ci, f->abs_cj);

      //Print range of counts in atoms and noatoms frames
      printf (", atoms:(%d to %d),  noatoms:(%d to %d)", (int) f->minCA,
	      (int) f->maxCA, (int) f->minCN, (int) f->maxCN);
    }

  else
    {
      //Print total number of photons in probe pulse
      printf (", Ph = %.2e", f->Tp0);
      //Print peak density
      printf (", n = %.2e", f->peakd);
      //Print peak density
      printf (", %sn_sph = %.2e%s", KMAG, f->peakd_sph, KNRM);
      //Print axial size
      printf (", ax0w = %.1f +/- %.1f", f->gaus2dfit[1] * p.magnif,
	      f->gaus2dfit_err[1] * p.magnif);
      //Print center
      printf (", %sc = (%.0f,%.0f)%s", KGRN, f->abs_ci, f->abs_cj, KNRM);
      //Print max intensity
      //printf (", Imax = %.2f", f->maxI);
      //Print average intensity
      printf (", I/Isat = %.2f", f->aveIweighted);
      //Print max phase shift
      printf (", PHImax = %.3f", f->maxPHI);
      //Print max phase-contrast signal
      printf (", SIGmax = %.3f", f->maxPHCSIG);
      //Print max column density
      printf (", CDmax = %.1f", f->maxCD);

      //Print sqrt(N)/n parameter
      printf (", %ssqrt(N)/n = %.2e%s", KYEL, sqrt (f->nfit) / f->peakd_sph,
	      KNRM);

    }
//  printf
//    ("%s  N = %.2e +/- %.0e, n =  %.2e , ax0w = %.1f +/- %.1f, c = (%.0f,%.0f), I_max = %.2f, OD_max = %.1f",
//     p.shotnum.c_str (), f->nfit, f->nfit_err, f->peakd,
//     f->wi_1e * p.magnif, f->gaus2dfit_err[1] * p.magnif, f->abs_ci,
//     f->abs_cj, f->maxI, f->maxOD);

  if (p.fermi2d)
    printf (", T/TF_2d = %.2f, z = %.2f, f(z) = %.2f", f->TF_2d,
	    f->Fugacity_Fermi, f->f_Fermi);
  if (p.fermiazimuth)
    printf (", T/TF_az = %.2f, z = %.2f, f(z) = %.2f", f->TF_az,
	    f->Fugacity_az, f->f_az);
  printf ("\n");
/*

  double pos[2];

  double cts = img_counts (signal);
  double peak = img_peak (signal, pos);

  setINI_num (p.reportfile, p.andor2?"CPP2":"CPP", "peak", peak);
  setINI_num (p.reportfile, p.andor2?"CPP2":"CPP", "ipeak", pos[0]);
  setINI_num (p.reportfile, p.andor2?"CPP2":"CPP", "jpeak", pos[1]);
  cout << "#" << p.
    shotnum << " Counts=" << img_counts (signal) << " Peak=" << peak << endl;
*/
  return EXIT_SUCCESS;
}