Index: /branches/eam_branches/ipp-20140904/Ohana/src/fakeastro/Makefile
===================================================================
--- /branches/eam_branches/ipp-20140904/Ohana/src/fakeastro/Makefile	(revision 37480)
+++ /branches/eam_branches/ipp-20140904/Ohana/src/fakeastro/Makefile	(revision 37481)
@@ -32,4 +32,5 @@
 $(SRC)/StarOps.$(ARCH).o    \
 $(SRC)/make_fakestars.$(ARCH).o \
+$(SRC)/make_fakeqsos.$(ARCH).o \
 $(SRC)/make_subset.$(ARCH).o \
 $(SRC)/save_fakestars.$(ARCH).o \
Index: /branches/eam_branches/ipp-20140904/Ohana/src/fakeastro/include/fakeastro.h
===================================================================
--- /branches/eam_branches/ipp-20140904/Ohana/src/fakeastro/include/fakeastro.h	(revision 37480)
+++ /branches/eam_branches/ipp-20140904/Ohana/src/fakeastro/include/fakeastro.h	(revision 37481)
@@ -89,4 +89,6 @@
 int FAKEASTRO_NLOOP;
 int FAKEASTRO_NSTARS;
+int FAKEASTRO_NQSO_ICRF;
+int FAKEASTRO_NQSO_ZERO;
 float FAKEASTRO_ZGAL; // parsec
 float FAKEASTRO_RGAL; // parsec
@@ -183,2 +185,5 @@
 int save_astrom_table ();
 AstromOffsetTable *get_astrom_table ();
+
+FakeAstro_Stars *make_fakeqsos (int Nstars, int ICRF);
+
Index: /branches/eam_branches/ipp-20140904/Ohana/src/fakeastro/src/ConfigInit.c
===================================================================
--- /branches/eam_branches/ipp-20140904/Ohana/src/fakeastro/src/ConfigInit.c	(revision 37480)
+++ /branches/eam_branches/ipp-20140904/Ohana/src/fakeastro/src/ConfigInit.c	(revision 37481)
@@ -41,4 +41,10 @@
   if (!ScanConfig (config, "FAKEASTRO_NSTARS", "%d", 0, &FAKEASTRO_NSTARS)) {
     FAKEASTRO_NSTARS = 5000000;
+  }
+  if (!ScanConfig (config, "FAKEASTRO_NQSO_ICRF", "%d", 0, &FAKEASTRO_NQSO_ICRF)) {
+    FAKEASTRO_NQSO_ICRF = 5000;
+  }
+  if (!ScanConfig (config, "FAKEASTRO_NQSO_ZERO", "%d", 0, &FAKEASTRO_NQSO_ZERO)) {
+    FAKEASTRO_NQSO_ZERO = 200000;
   }
   if (!ScanConfig (config, "FAKEASTRO_ZGAL", "%f", 0, &FAKEASTRO_ZGAL)) {
Index: /branches/eam_branches/ipp-20140904/Ohana/src/fakeastro/src/StarOps.c
===================================================================
--- /branches/eam_branches/ipp-20140904/Ohana/src/fakeastro/src/StarOps.c	(revision 37480)
+++ /branches/eam_branches/ipp-20140904/Ohana/src/fakeastro/src/StarOps.c	(revision 37481)
@@ -7,6 +7,4 @@
     dvo_average_init (&star[0].average);
     star[0].found = -1; // found == -1 -> not yet found (use enums?)
-
-    star[0].lensing = NULL; // we only populate this if needed
     return TRUE;
 }
Index: /branches/eam_branches/ipp-20140904/Ohana/src/fakeastro/src/fakeastro_galaxy.c
===================================================================
--- /branches/eam_branches/ipp-20140904/Ohana/src/fakeastro/src/fakeastro_galaxy.c	(revision 37480)
+++ /branches/eam_branches/ipp-20140904/Ohana/src/fakeastro/src/fakeastro_galaxy.c	(revision 37481)
@@ -36,5 +36,19 @@
     FakeAstro_Stars *stars = make_fakestars (Nstars);
 
-    FakeAstro_Stars *qso_icrf = make_fakeqsos (Nstars);
+    // only generate the QSOs 1x:
+    if (n == 0) {
+      FakeAstro_Stars *qso_icrf = make_fakeqsos (FAKEASTRO_NQSO_ICRF, TRUE); // quasars with known positions
+      REALLOCATE (stars, FakeAstro_Stars, Nstars + FAKEASTRO_NQSO_ICRF);
+      for (i = 0; i < FAKEASTRO_NQSO_ICRF; i++) {
+	stars[Nstars+i] = qso_icrf[i];
+      }
+      Nstars += FAKEASTRO_NQSO_ICRF;
+      FakeAstro_Stars *qso_zero = make_fakeqsos (FAKEASTRO_NQSO_ZERO, FALSE); // quasars with unknown positions, but zero velocity
+      REALLOCATE (stars, FakeAstro_Stars, Nstars + FAKEASTRO_NQSO_ZERO);
+      for (i = 0; i < FAKEASTRO_NQSO_ZERO; i++) {
+	stars[Nstars+i] = qso_zero[i];
+      }
+      Nstars += FAKEASTRO_NQSO_ZERO;
+    }
 
     MARKTIME ("generate %d fake stars in %f sec\n", Nstars, dtime);
Index: /branches/eam_branches/ipp-20140904/Ohana/src/fakeastro/src/insert_fakestar.c
===================================================================
--- /branches/eam_branches/ipp-20140904/Ohana/src/fakeastro/src/insert_fakestar.c	(revision 37480)
+++ /branches/eam_branches/ipp-20140904/Ohana/src/fakeastro/src/insert_fakestar.c	(revision 37481)
@@ -52,14 +52,34 @@
     }
 
-    // Mr vs r-i, Mr vs r-z: linear fit from Bochanski et al 2010 Fig 7 & Fig 9 
-    // http://iopscience.iop.org/1538-3881/139/6/2679/pdf/aj_139_6_2679.pdf
-    // gr, zy relations from Magnier et al 2012 Fig 3
+    double m_r, gr, ri, rz, zy;
 
-    double M_r = stars[i].starpar.M_r;
-    double m_r = M_r + stars[i].starpar.DistMag;
-    double ri = 0.215*M_r - 1.05;
-    double rz = 0.350*M_r - 1.82;
-    double gr = 2.27*ri + 0.09;
-    double zy = 0.37*(rz - ri) + 0.03; // zy vs iz
+    // valid stars do not have crazy FeH values
+    if (fabs(stars[i].starpar.FeH) < 50.0) {
+      // Mr vs r-i, Mr vs r-z: linear fit from Bochanski et al 2010 Fig 7 & Fig 9 
+      // http://iopscience.iop.org/1538-3881/139/6/2679/pdf/aj_139_6_2679.pdf
+      // gr, zy relations from Magnier et al 2012 Fig 3
+      double M_r = stars[i].starpar.M_r;
+      m_r = M_r + stars[i].starpar.DistMag;
+      ri = 0.215*M_r - 1.05;
+      rz = 0.350*M_r - 1.82;
+      gr = 2.27*ri + 0.09;
+      zy = 0.37*(rz - ri) + 0.03; // zy vs iz
+    }
+    // ICRF QSOs have FeH = -100
+    if (stars[i].starpar.FeH < -50.0) {
+      m_r = stars[i].starpar.M_r;
+      ri = 0.0;
+      rz = 0.0;
+      gr = 0.0;
+      zy = 0.0;
+    }
+    // ICRF QSOs have FeH = -100
+    if (stars[i].starpar.FeH > +50.0) {
+      m_r = stars[i].starpar.M_r;
+      ri = 0.0;
+      rz = 0.0;
+      gr = 0.0;
+      zy = 0.0;
+    }
 
     double m_g = m_r + gr;
Index: /branches/eam_branches/ipp-20140904/Ohana/src/fakeastro/src/make_fakeqsos.c
===================================================================
--- /branches/eam_branches/ipp-20140904/Ohana/src/fakeastro/src/make_fakeqsos.c	(revision 37480)
+++ /branches/eam_branches/ipp-20140904/Ohana/src/fakeastro/src/make_fakeqsos.c	(revision 37481)
@@ -1,5 +1,5 @@
 # include "fakeastro.h"
 
-FakeAstro_Stars *make_fakeqsos (int Nstars) {
+FakeAstro_Stars *make_fakeqsos (int Nstars, int ICRF) {
 
   FakeAstro_Stars *stars;
@@ -28,10 +28,7 @@
     }
 
-    double Mr = rnd_gauss (11.25, 1.0);
+    // Mr will be interpretted as m_r
+    double Mr = rnd_gauss (17.0, 1.0);
     
-    // C1, C2 are from http://arxiv.org/pdf/1306.2945v2.pdf
-    double Rrad = R*RAD_DEG;
-    double Drad = D*RAD_DEG;
-
     stars[i].R = R;
     stars[i].D = D;
@@ -42,5 +39,5 @@
     stars[i].starpar.galLat = NAN;
 
-    // how shall I ma
+    // how shall I distinguish ICRF and ZERO quasars
     stars[i].starpar.Ebv      = 0.0;
     stars[i].starpar.dEbv     = 0.0;
@@ -49,25 +46,17 @@
     stars[i].starpar.M_r      = Mr;
     stars[i].starpar.dM_r     = 0.0;
-    stars[i].starpar.FeH      = 0.0;
+
+    // overload FeH to identify the ICRF vs ZERO QSOs
+    if (ICRF) {
+      stars[i].starpar.FeH      = -100.0;
+    } else {
+      stars[i].starpar.FeH      = +100.0;
+    }
     stars[i].starpar.dFeH     = 0.0;
 
-    stars[i].starpar.uRA  = uR;
-    stars[i].starpar.uDEC = uD;
+    stars[i].starpar.uRA  = 0.0;
+    stars[i].starpar.uDEC = 0.0;
   }
   fprintf (stderr, "\n");
   return stars;
 }
-
-int sortStars (FakeAstro_Stars *stars, int Nstars) {
-
-# define SWAPFUNC(A,B){ FakeAstro_Stars temp = stars[A]; stars[A] = stars[B]; stars[B] = temp; }
-# define COMPARE(A,B)(stars[A].R < stars[B].R)
-
-  OHANA_SORT (Nstars, COMPARE, SWAPFUNC);
-
-# undef SWAPFUNC
-# undef COMPARE
-  
-  return TRUE;
-}
-
