LSSTApplications  21.0.0+1b62c9342b,21.0.0+45a059f35e,21.0.0-1-ga51b5d4+ceb9cf20a3,21.0.0-19-g7c7630f+a88ebbf2d9,21.0.0-2-g103fe59+3522cf3bc7,21.0.0-2-g1367e85+571a348718,21.0.0-2-g2909d54+45a059f35e,21.0.0-2-g45278ab+1b62c9342b,21.0.0-2-g4bc9b9f+35a70d5868,21.0.0-2-g5242d73+571a348718,21.0.0-2-g54e2caa+aa129c4686,21.0.0-2-g66bcc37+3caef57c29,21.0.0-2-g7f82c8f+6f9059e2fe,21.0.0-2-g8dde007+5d1b9cb3f5,21.0.0-2-g8f08a60+73884b2cf5,21.0.0-2-g973f35b+1d054a08b9,21.0.0-2-ga326454+6f9059e2fe,21.0.0-2-ga63a54e+3d2c655db6,21.0.0-2-gc738bc1+a567cb0f17,21.0.0-2-gde069b7+5a8f2956b8,21.0.0-2-ge17e5af+571a348718,21.0.0-2-ge712728+834f2a3ece,21.0.0-2-gecfae73+dfe6e80958,21.0.0-2-gfc62afb+571a348718,21.0.0-21-g006371a9+88174a2081,21.0.0-3-g4c5b185+7fd31a6834,21.0.0-3-g6d51c4a+3caef57c29,21.0.0-3-gaa929c8+55f5a6a5c9,21.0.0-3-gd222c45+afc8332dbe,21.0.0-3-gd5de2f2+3caef57c29,21.0.0-4-g3300ddd+1b62c9342b,21.0.0-4-g5873dc9+9a92674037,21.0.0-4-g8a80011+5955f0fd15,21.0.0-5-gb7080ec+8658c79ec4,21.0.0-5-gcff38f6+89f2a0074d,21.0.0-6-gd3283ba+55f5a6a5c9,21.0.0-8-g19111d86+2c4b0a9f47,21.0.0-9-g7bed000b9+c7d3cce47e,w.2021.03
LSSTDataManagementBasePackage
Classes | Functions
lsst.cp.pipe.astierCovPtcFit Namespace Reference

Classes

class  CovFit
 
class  Pol2d
 

Functions

def computeApproximateAcoeffs (covModel, muEl, gain)
 
def makeCovArray (inputTuple, maxRangeFromTuple=8)
 
def symmetrize (inputArray)
 

Function Documentation

◆ computeApproximateAcoeffs()

def lsst.cp.pipe.astierCovPtcFit.computeApproximateAcoeffs (   covModel,
  muEl,
  gain 
)
Compute the "a" coefficients of the Antilogus+14 (1402.0725) model as in
Guyonnet+15 (1501.01577, eq. 16, the slope of cov/var at a given flux mu in electrons).

Eq. 16 of 1501.01577 is an approximation to the more complete model in Astier+19 (1905.08677).

Parameters
---------
covModel : `list`
    Covariance model from Eq. 20 in Astier+19.

muEl : `np.array`
    Mean signal in electrons

gain : `float`
    Gain in e-/ADU.

Returns
-------
aCoeffsOld: `numpy.array`
    Slope of cov/var at a given flux mu in electrons.

Notes
-----
Returns the "a" array, computed this way, to be compared to the actual a_array from the full model
(fit.geA()).

Definition at line 34 of file astierCovPtcFit.py.

34 def computeApproximateAcoeffs(covModel, muEl, gain):
35  """Compute the "a" coefficients of the Antilogus+14 (1402.0725) model as in
36  Guyonnet+15 (1501.01577, eq. 16, the slope of cov/var at a given flux mu in electrons).
37 
38  Eq. 16 of 1501.01577 is an approximation to the more complete model in Astier+19 (1905.08677).
39 
40  Parameters
41  ---------
42  covModel : `list`
43  Covariance model from Eq. 20 in Astier+19.
44 
45  muEl : `np.array`
46  Mean signal in electrons
47 
48  gain : `float`
49  Gain in e-/ADU.
50 
51  Returns
52  -------
53  aCoeffsOld: `numpy.array`
54  Slope of cov/var at a given flux mu in electrons.
55 
56  Notes
57  -----
58  Returns the "a" array, computed this way, to be compared to the actual a_array from the full model
59  (fit.geA()).
60  """
61  covModel = np.array(covModel)
62  var = covModel[0, 0, 0] # ADU^2
63  # For a result in electrons^-1, we have to use mu in electrons.
64  return covModel[0, :, :]/(var*muEl)
65 
66 

◆ makeCovArray()

def lsst.cp.pipe.astierCovPtcFit.makeCovArray (   inputTuple,
  maxRangeFromTuple = 8 
)
Make covariances array from tuple.

Parameters
----------
inputTuple: `numpy.recarray`
    Recarray with rows with at least (mu, cov, var, i, j, npix), where:
    mu : 0.5*(m1 + m2), where:
        mu1: mean value of flat1
        mu2: mean value of flat2
    cov: covariance value at lag(i, j)
    var: variance(covariance value at lag(0, 0))
    i: lag dimension
    j: lag dimension
    npix: number of pixels used for covariance calculation.

maxRangeFromTuple: `int`
    Maximum range to select from tuple.

Returns
-------
cov: `numpy.array`
    Covariance arrays, indexed by mean signal mu.

vCov: `numpy.array`
    Variance arrays, indexed by mean signal mu.

muVals: `numpy.array`
    List of mean signal values.

Notes
-----

The input tuple should contain  the following rows:
(mu, cov, var, i, j, npix), with one entry per lag, and image pair.
Different lags(i.e. different i and j) from the same
image pair have the same values of mu1 and mu2. When i==j==0, cov
= var.

If the input tuple contains several video channels, one should
select the data of a given channel *before* entering this
routine, as well as apply(e.g.) saturation cuts.

The routine returns cov[k_mu, j, i], vcov[(same indices)], and mu[k]
where the first index of cov matches the one in mu.

This routine implements the loss of variance due to
clipping cuts when measuring variances and covariance, but this should happen inside
the measurement code, where the cuts are readily available.

Definition at line 67 of file astierCovPtcFit.py.

67 def makeCovArray(inputTuple, maxRangeFromTuple=8):
68  """Make covariances array from tuple.
69 
70  Parameters
71  ----------
72  inputTuple: `numpy.recarray`
73  Recarray with rows with at least (mu, cov, var, i, j, npix), where:
74  mu : 0.5*(m1 + m2), where:
75  mu1: mean value of flat1
76  mu2: mean value of flat2
77  cov: covariance value at lag(i, j)
78  var: variance(covariance value at lag(0, 0))
79  i: lag dimension
80  j: lag dimension
81  npix: number of pixels used for covariance calculation.
82 
83  maxRangeFromTuple: `int`
84  Maximum range to select from tuple.
85 
86  Returns
87  -------
88  cov: `numpy.array`
89  Covariance arrays, indexed by mean signal mu.
90 
91  vCov: `numpy.array`
92  Variance arrays, indexed by mean signal mu.
93 
94  muVals: `numpy.array`
95  List of mean signal values.
96 
97  Notes
98  -----
99 
100  The input tuple should contain the following rows:
101  (mu, cov, var, i, j, npix), with one entry per lag, and image pair.
102  Different lags(i.e. different i and j) from the same
103  image pair have the same values of mu1 and mu2. When i==j==0, cov
104  = var.
105 
106  If the input tuple contains several video channels, one should
107  select the data of a given channel *before* entering this
108  routine, as well as apply(e.g.) saturation cuts.
109 
110  The routine returns cov[k_mu, j, i], vcov[(same indices)], and mu[k]
111  where the first index of cov matches the one in mu.
112 
113  This routine implements the loss of variance due to
114  clipping cuts when measuring variances and covariance, but this should happen inside
115  the measurement code, where the cuts are readily available.
116 
117  """
118  if maxRangeFromTuple is not None:
119  cut = (inputTuple['i'] < maxRangeFromTuple) & (inputTuple['j'] < maxRangeFromTuple)
120  cutTuple = inputTuple[cut]
121  else:
122  cutTuple = inputTuple
123  # increasing mu order, so that we can group measurements with the same mu
124  muTemp = cutTuple['mu']
125  ind = np.argsort(muTemp)
126 
127  cutTuple = cutTuple[ind]
128  # should group measurements on the same image pairs(same average)
129  mu = cutTuple['mu']
130  xx = np.hstack(([mu[0]], mu))
131  delta = xx[1:] - xx[:-1]
132  steps, = np.where(delta > 0)
133  ind = np.zeros_like(mu, dtype=int)
134  ind[steps] = 1
135  ind = np.cumsum(ind) # this acts as an image pair index.
136  # now fill the 3-d cov array(and variance)
137  muVals = np.array(np.unique(mu))
138  i = cutTuple['i'].astype(int)
139  j = cutTuple['j'].astype(int)
140  c = 0.5*cutTuple['cov']
141  n = cutTuple['npix']
142  v = 0.5*cutTuple['var']
143  # book and fill
144  cov = np.ndarray((len(muVals), np.max(i)+1, np.max(j)+1))
145  var = np.zeros_like(cov)
146  cov[ind, i, j] = c
147  var[ind, i, j] = v**2/n
148  var[:, 0, 0] *= 2 # var(v) = 2*v**2/N
149  # compensate for loss of variance and covariance due to outlier elimination(sigma clipping)
150  # when computing variances(cut to 4 sigma): 1 per mill for variances and twice as
151  # much for covariances:
152  fact = 1.0 # 1.00107
153  cov *= fact*fact
154  cov[:, 0, 0] /= fact
155 
156  return cov, var, muVals
157 
158 

◆ symmetrize()

def lsst.cp.pipe.astierCovPtcFit.symmetrize (   inputArray)
 Copy array over 4 quadrants prior to convolution.

Parameters
----------
inputarray: `numpy.array`
    Input array to symmetrize.

Returns
-------
aSym: `numpy.array`
    Symmetrized array.

Definition at line 159 of file astierCovPtcFit.py.

159 def symmetrize(inputArray):
160  """ Copy array over 4 quadrants prior to convolution.
161 
162  Parameters
163  ----------
164  inputarray: `numpy.array`
165  Input array to symmetrize.
166 
167  Returns
168  -------
169  aSym: `numpy.array`
170  Symmetrized array.
171  """
172 
173  targetShape = list(inputArray.shape)
174  r1, r2 = inputArray.shape[-1], inputArray.shape[-2]
175  targetShape[-1] = 2*r1-1
176  targetShape[-2] = 2*r2-1
177  aSym = np.ndarray(tuple(targetShape))
178  aSym[..., r2-1:, r1-1:] = inputArray
179  aSym[..., r2-1:, r1-1::-1] = inputArray
180  aSym[..., r2-1::-1, r1-1::-1] = inputArray
181  aSym[..., r2-1::-1, r1-1:] = inputArray
182 
183  return aSym
184 
185 
lsst.cp.pipe.astierCovPtcFit.makeCovArray
def makeCovArray(inputTuple, maxRangeFromTuple=8)
Definition: astierCovPtcFit.py:67
lsst.cp.pipe.astierCovPtcFit.computeApproximateAcoeffs
def computeApproximateAcoeffs(covModel, muEl, gain)
Definition: astierCovPtcFit.py:34
list
daf::base::PropertyList * list
Definition: fits.cc:913
lsst.cp.pipe.astierCovPtcFit.symmetrize
def symmetrize(inputArray)
Definition: astierCovPtcFit.py:159