IPP Software Navigation Tools IPP Links Communication Pan-STARRS Links

Ignore:
Timestamp:
Aug 26, 2010, 9:18:39 AM (16 years ago)
Author:
Serge CHASTEL
Message:

Merging trunk in branch

Location:
branches/sc_branches/trunkTest
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/sc_branches/trunkTest

  • branches/sc_branches/trunkTest/ppSim/src/ppSimMakeGalaxies.c

    r18011 r29060  
    1818    int galaxyGridDX      = psMetadataLookupS32(&mdok, recipe, "GALAXY.GRID.DX"); // Density of fakes
    1919    int galaxyGridDY      = psMetadataLookupS32(&mdok, recipe, "GALAXY.GRID.DY"); // Density of fakes
     20    bool galaxyGridRandom = psMetadataLookupBool(&mdok, recipe, "GALAXY.GRID.RANDOM"); // Density of fakes
    2021   
    2122    float galaxyRmajorMax = psMetadataLookupF32(&mdok, recipe, "GALAXY.RMAJOR.MAX"); // Density of fakes
     
    4344
    4445    if (galaxyDensity <= 0) return true;
     46
     47    if (galaxyGridRandom) {
     48        long A, B;
     49        A = time(NULL);
     50        for (B = 0; A == time(NULL); B++);
     51        srand48(B);
     52    }
    4553
    4654    // Size of FPA
     
    8189        psLogMsg("ppSim", PS_LOG_INFO, "Adding grid of %ld galaxies\n", num);
    8290
    83         float galaxyIndexSlope = (galaxyIndexMax - galaxyIndexMin) / num;
    84         float galaxyThetaSlope = (galaxyThetaMax - galaxyThetaMin) / num;
    85         float galaxyARatioSlope = (galaxyARatioMax - galaxyARatioMin) / num;
    86         float galaxyRmajorSlope = (galaxyRmajorMax - galaxyRmajorMin) / num;
     91        float galaxyIndexSlope = (galaxyIndexMax - galaxyIndexMin);
     92        float galaxyThetaSlope = (galaxyThetaMax - galaxyThetaMin);
     93        float galaxyARatioSlope = (galaxyARatioMax - galaxyARatioMin);
     94        float galaxyRmajorSlope = (galaxyRmajorMax - galaxyRmajorMin);
    8795
    8896        int i = 0;
     
    96104                galaxy->y    = iy;
    97105
    98                 galaxy->peak = 20000;
     106                galaxy->peak = 1000;
    99107
    100                 galaxy->index = (galaxyIndexMin  + i * galaxyIndexSlope);
    101                 galaxy->Rmaj  = (galaxyRmajorMin + i * galaxyRmajorSlope);
    102                 galaxy->Rmin  = (galaxyARatioMin + i * galaxyARatioSlope) * galaxy->Rmaj;
    103                 galaxy->theta = (galaxyThetaMin  + i * galaxyThetaSlope);
     108                // galaxyIndex from user should be for function of this form: exp(-r^(1/n))
     109                // galaxy->index = (1/2n)
     110
     111                float rndValue;
     112
     113                rndValue = galaxyGridRandom ? drand48() : i / num;
     114                float index = (galaxyIndexMin  + rndValue * galaxyIndexSlope);
     115                galaxy->index = 0.5/index; // factor of 0.5 because the Sersic model creates exp(-z^n), not exp(-r^n)
     116
     117                rndValue = galaxyGridRandom ? drand48() : i / num;
     118                float scale = (galaxyRmajorMin + rndValue * galaxyRmajorSlope);
     119
     120                // for a sersic model,
     121                float bn = 1.9992*index - 0.3271;
     122                float fR = 1.0 / (sqrt(2.0) * pow (bn, index));
     123                float Io = exp(bn);
     124
     125                galaxy->Rmaj  = scale;
     126
     127                rndValue = galaxyGridRandom ? drand48() : i / num;
     128                galaxy->Rmin  = (galaxyARatioMin + rndValue * galaxyARatioSlope) * galaxy->Rmaj;
     129
     130                rndValue = galaxyGridRandom ? drand48() : i / num;
     131                galaxy->theta = (galaxyThetaMin  + rndValue * galaxyThetaSlope);
     132
     133                // galaxy->peak *= Io;
     134
     135                if (0) {
     136                    fprintf (stderr, "Rmaj: %f, scale: %f, index: %f, bn: %f, Ro: %f, Io: %f\n", galaxy->Rmaj, scale, index, bn, fR, Io);
     137                }
    104138
    105139                psArrayAdd (galaxies, 100, galaxy);
     
    124158            galaxy->y    = psRandomUniform(rng) * ySize; // y position
    125159
    126             galaxy->flux = pow ((double)((i + 1) / norm), (double) (1.0 / galaxyLum));
     160            float index = (sqrt(psRandomUniform(rng)) * galaxyIndexSlope  + galaxyIndexMin);
     161            galaxy->index = 0.5/index; // factor of 0.5 because the Sersic model creates exp(-z^n), not exp(-r^n)
    127162
    128             galaxy->index = (psRandomUniform(rng) * galaxyIndexSlope  + galaxyIndexMin);
     163            float scale = (psRandomUniform(rng) * galaxyRmajorSlope + galaxyRmajorMin);
     164
     165            // for a sersic model,
     166            float bn = 1.9992*index - 0.3271;
     167            float fR = 1.0 / (sqrt(2.0) * pow (bn, index));
     168            float Io = exp(bn);
     169
     170            galaxy->Rmaj  = scale;
     171
     172            galaxy->Rmin  = (PS_SQR(psRandomUniform(rng)) * galaxyARatioSlope + galaxyARatioMin) * galaxy->Rmaj;
     173
    129174            galaxy->theta = (psRandomUniform(rng) * galaxyThetaSlope  + galaxyThetaMin);
    130             galaxy->Rmaj  = (psRandomUniform(rng) * galaxyRmajorSlope + galaxyRmajorMin);
    131             galaxy->Rmin  = (psRandomUniform(rng) * galaxyARatioSlope + galaxyARatioMin) * galaxy->Rmaj;
    132175
     176            // the flux is only approximately correct (scaling of the peak is wrong)
     177            // elsewhere (ppSimInsertGalaxies.c) we calculate the true galaxy flux
    133178            galaxy->flux = expf((logf(i + 1) - logf(norm)) / galaxyLum); // Peak flux
    134179            galaxy->peak = galaxy->flux / (2.0*M_PI*PS_SQR(seeing));
    135             // galaxy->peak = 5000;
     180
     181            if (0) {
     182              fprintf (stderr, "Rmaj: %f, scale: %f, index: %f, bn: %f, Ro: %f, Io: %f\n", galaxy->Rmaj, scale, index, bn, fR, Io);
     183            }
    136184
    137185            psArrayAdd (galaxies, 100, galaxy);
Note: See TracChangeset for help on using the changeset viewer.