22"""Plugins for use in DiaSource summary statistics.
25as defined in the schema of the Apdb both in name and units.
31from astropy.stats
import median_absolute_deviation
34from scipy.optimize
import lsq_linear
40from .diaCalculation
import (
41 DiaObjectCalculationPluginConfig,
42 DiaObjectCalculationPlugin)
43from .pluginRegistry
import register
45__all__ = (
"MeanDiaPositionConfig",
"MeanDiaPosition",
46 "HTMIndexDiaPosition",
"HTMIndexDiaPositionConfig",
47 "NumDiaSourcesDiaPlugin",
"NumDiaSourcesDiaPluginConfig",
48 "SimpleSourceFlagDiaPlugin",
"SimpleSourceFlagDiaPluginConfig",
49 "WeightedMeanDiaPsFluxConfig",
"WeightedMeanDiaPsFlux",
50 "PercentileDiaPsFlux",
"PercentileDiaPsFluxConfig",
51 "SigmaDiaPsFlux",
"SigmaDiaPsFluxConfig",
52 "Chi2DiaPsFlux",
"Chi2DiaPsFluxConfig",
53 "MadDiaPsFlux",
"MadDiaPsFluxConfig",
54 "SkewDiaPsFlux",
"SkewDiaPsFluxConfig",
55 "MinMaxDiaPsFlux",
"MinMaxDiaPsFluxConfig",
56 "MaxSlopeDiaPsFlux",
"MaxSlopeDiaPsFluxConfig",
57 "ErrMeanDiaPsFlux",
"ErrMeanDiaPsFluxConfig",
58 "LinearFitDiaPsFlux",
"LinearFitDiaPsFluxConfig",
59 "StetsonJDiaPsFlux",
"StetsonJDiaPsFluxConfig",
60 "WeightedMeanDiaTotFlux",
"WeightedMeanDiaTotFluxConfig",
61 "SigmaDiaTotFlux",
"SigmaDiaTotFluxConfig")
65 """Decorator for generically catching numpy warnings.
67 def decoratorCatchWarnings(func):
68 @functools.wraps(func)
69 def wrapperCatchWarnings(*args, **kwargs):
70 with warnings.catch_warnings():
72 warnings.filterwarnings(
"ignore", val)
73 return func(*args, **kwargs)
74 return wrapperCatchWarnings
77 return decoratorCatchWarnings
79 return decoratorCatchWarnings(_func)
86@register(
"ap_meanPosition")
88 """Compute the mean position of a DiaObject given a set of DiaSources.
91 ConfigClass = MeanDiaPositionConfig
95 outputCols = [
"ra",
"decl",
"radecTai"]
103 """Compute the mean ra/dec position of the diaObject given the
108 diaObjects : `pandas.DataFrame`
109 Summary objects to store values in.
110 diaSources : `pandas.DataFrame`
or `pandas.DataFrameGroupBy`
111 Catalog of DiaSources summarized by this DiaObject.
113 Any additional keyword arguments that may be passed to the plugin.
116 if outCol
not in diaObjects.columns:
117 diaObjects[outCol] = np.nan
119 def _computeMeanPos(df):
122 for idx, src
in df.iterrows()))
123 ra = aveCoord.getRa().asDegrees()
124 decl = aveCoord.getDec().asDegrees()
125 if np.isnan(ra)
or np.isnan(decl):
128 radecTai = df[
"midPointTai"].
max()
130 return pd.Series({
"ra": aveCoord.getRa().asDegrees(),
131 "decl": aveCoord.getDec().asDegrees(),
132 "radecTai": radecTai})
134 ans = diaSources.apply(_computeMeanPos)
135 diaObjects.loc[:, [
"ra",
"decl",
"radecTai"]] = ans
140 htmLevel = pexConfig.Field(
142 doc=
"Level of the HTM pixelization.",
147@register("ap_HTMIndex")
149 """Compute the mean position of a DiaObject given a set of DiaSources.
153 This plugin was implemented to satisfy requirements of old APDB interface
154 which required ``pixelId`` column in DiaObject
with HTM20 index. APDB
155 interface had migrated to
not need that information, but we keep this
156 plugin
in case it may be useful
for something
else.
158 ConfigClass = HTMIndexDiaPositionConfig
162 inputCols = [
"ra",
"decl"]
163 outputCols = [
"pixelId"]
167 DiaObjectCalculationPlugin.__init__(self, config, name, metadata)
175 """Compute the mean position of a DiaObject given a set of DiaSources
179 diaObjects : `pandas.dataFrame`
180 Summary objects to store values in and read ra/decl
from.
182 Id of the diaObject to update.
184 Any additional keyword arguments that may be passed to the plugin.
187 diaObjects.at[diaObjectId, "ra"] * geom.degrees,
188 diaObjects.at[diaObjectId,
"decl"] * geom.degrees)
189 diaObjects.at[diaObjectId,
"pixelId"] = self.
pixelator.index(
190 sphPoint.getVector())
197@register(
"ap_nDiaSources")
199 """Compute the total number of DiaSources associated with this DiaObject.
202 ConfigClass = NumDiaSourcesDiaPluginConfig
203 outputCols = ["nDiaSources"]
212 """Compute the total number of DiaSources associated with this DiaObject.
217 Summary object to store values in and read ra/decl
from.
219 Any additional keyword arguments that may be passed to the plugin.
221 diaObjects.loc[:, "nDiaSources"] = diaSources.diaObjectId.count()
228@register(
"ap_diaObjectFlag")
230 """Find if any DiaSource is flagged.
232 Set the DiaObject flag if any DiaSource
is flagged.
235 ConfigClass = NumDiaSourcesDiaPluginConfig
236 outputCols = ["flags"]
245 """Find if any DiaSource is flagged.
247 Set the DiaObject flag if any DiaSource
is flagged.
252 Summary object to store values
in and read ra/decl
from.
254 Any additional keyword arguments that may be passed to the plugin.
256 diaObjects.loc[:, "flags"] = diaSources.flags.any().astype(np.uint64)
263@register(
"ap_meanFlux")
265 """Compute the weighted mean and mean error on the point source fluxes
266 of the DiaSource measured on the difference image.
268 Additionally store number of usable data points.
271 ConfigClass = WeightedMeanDiaPsFluxConfig
272 outputCols = ["PSFluxMean",
"PSFluxMeanErr",
"PSFluxNdata"]
280 @catchWarnings(warns=[
"invalid value encountered",
288 """Compute the weighted mean and mean error of the point source flux.
293 Summary object to store values in.
294 diaSources : `pandas.DataFrame`
295 DataFrame representing all diaSources associated
with this
297 filterDiaSources : `pandas.DataFrame`
298 DataFrame representing diaSources associated
with this
299 diaObject that are observed
in the band
pass ``filterName``.
301 Simple, string name of the filter
for the flux being calculated.
303 Any additional keyword arguments that may be passed to the plugin.
305 meanName = "{}PSFluxMean".format(filterName)
306 errName =
"{}PSFluxMeanErr".format(filterName)
307 nDataName =
"{}PSFluxNdata".format(filterName)
308 if meanName
not in diaObjects.columns:
309 diaObjects[meanName] = np.nan
310 if errName
not in diaObjects.columns:
311 diaObjects[errName] = np.nan
312 if nDataName
not in diaObjects.columns:
313 diaObjects[nDataName] = 0
315 def _weightedMean(df):
316 tmpDf = df[~np.logical_or(np.isnan(df[
"psFlux"]),
317 np.isnan(df[
"psFluxErr"]))]
318 tot_weight = np.nansum(1 / tmpDf[
"psFluxErr"] ** 2)
319 fluxMean = np.nansum(tmpDf[
"psFlux"]
320 / tmpDf[
"psFluxErr"] ** 2)
321 fluxMean /= tot_weight
323 fluxMeanErr = np.sqrt(1 / tot_weight)
326 nFluxData = len(tmpDf)
328 return pd.Series({meanName: fluxMean,
329 errName: fluxMeanErr,
330 nDataName: nFluxData},
333 diaObjects.loc[:, [meanName, errName, nDataName]] = \
334 filterDiaSources.apply(_weightedMean)
338 percentiles = pexConfig.ListField(
340 default=[5, 25, 50, 75, 95],
341 doc=
"Percentiles to calculate to compute values for. Should be "
346@register("ap_percentileFlux")
348 """Compute percentiles of diaSource fluxes.
351 ConfigClass = PercentileDiaPsFluxConfig
357 def __init__(self, config, name, metadata, **kwargs):
358 DiaObjectCalculationPlugin.__init__(self,
364 for percent
in self.
config.percentiles]
370 @catchWarnings(warns=["All-NaN slice encountered"])
377 """Compute the percentile fluxes of the point source flux.
382 Summary object to store values in.
383 diaSources : `pandas.DataFrame`
384 DataFrame representing all diaSources associated
with this
386 filterDiaSources : `pandas.DataFrame`
387 DataFrame representing diaSources associated
with this
388 diaObject that are observed
in the band
pass ``filterName``.
390 Simple, string name of the filter
for the flux being calculated.
392 Any additional keyword arguments that may be passed to the plugin.
395 for tilePercent
in self.
config.percentiles:
396 pTileName =
"{}PSFluxPercentile{:02d}".format(filterName,
398 pTileNames.append(pTileName)
399 if pTileName
not in diaObjects.columns:
400 diaObjects[pTileName] = np.nan
402 def _fluxPercentiles(df):
403 pTiles = np.nanpercentile(df[
"psFlux"], self.
config.percentiles)
405 dict((tileName, pTile)
406 for tileName, pTile
in zip(pTileNames, pTiles)))
408 diaObjects.loc[:, pTileNames] = filterDiaSources.apply(_fluxPercentiles)
415@register(
"ap_sigmaFlux")
417 """Compute scatter of diaSource fluxes.
420 ConfigClass = SigmaDiaPsFluxConfig
422 outputCols = [
"PSFluxSigma"]
436 """Compute the sigma fluxes of the point source flux.
441 Summary object to store values in.
442 diaSources : `pandas.DataFrame`
443 DataFrame representing all diaSources associated
with this
445 filterDiaSources : `pandas.DataFrame`
446 DataFrame representing diaSources associated
with this
447 diaObject that are observed
in the band
pass ``filterName``.
449 Simple, string name of the filter
for the flux being calculated.
451 Any additional keyword arguments that may be passed to the plugin.
455 diaObjects.loc[:,
"{}PSFluxSigma".format(filterName)] = \
456 filterDiaSources.psFlux.std()
463@register(
"ap_chi2Flux")
465 """Compute chi2 of diaSource fluxes.
468 ConfigClass = Chi2DiaPsFluxConfig
471 inputCols = [
"PSFluxMean"]
473 outputCols = [
"PSFluxChi2"]
481 @catchWarnings(warns=["All-NaN slice encountered"])
488 """Compute the chi2 of the point source fluxes.
493 Summary object to store values in.
494 diaSources : `pandas.DataFrame`
495 DataFrame representing all diaSources associated
with this
497 filterDiaSources : `pandas.DataFrame`
498 DataFrame representing diaSources associated
with this
499 diaObject that are observed
in the band
pass ``filterName``.
501 Simple, string name of the filter
for the flux being calculated.
503 Any additional keyword arguments that may be passed to the plugin.
505 meanName = "{}PSFluxMean".format(filterName)
508 delta = (df[
"psFlux"]
509 - diaObjects.at[df.diaObjectId.iat[0], meanName])
510 return np.nansum((delta / df[
"psFluxErr"]) ** 2)
512 diaObjects.loc[:,
"{}PSFluxChi2".format(filterName)] = \
513 filterDiaSources.apply(_chi2)
520@register(
"ap_madFlux")
522 """Compute median absolute deviation of diaSource fluxes.
525 ConfigClass = MadDiaPsFluxConfig
529 outputCols = [
"PSFluxMAD"]
537 @catchWarnings(warns=["All-NaN slice encountered"])
544 """Compute the median absolute deviation of the point source fluxes.
549 Summary object to store values in.
550 diaSources : `pandas.DataFrame`
551 DataFrame representing all diaSources associated
with this
553 filterDiaSources : `pandas.DataFrame`
554 DataFrame representing diaSources associated
with this
555 diaObject that are observed
in the band
pass ``filterName``.
557 Simple, string name of the filter
for the flux being calculated.
559 Any additional keyword arguments that may be passed to the plugin.
561 diaObjects.loc[:, "{}PSFluxMAD".format(filterName)] = \
562 filterDiaSources.psFlux.apply(median_absolute_deviation,
570@register(
"ap_skewFlux")
572 """Compute the skew of diaSource fluxes.
575 ConfigClass = SkewDiaPsFluxConfig
579 outputCols = [
"PSFluxSkew"]
593 """Compute the skew of the point source fluxes.
598 Summary object to store values in.
599 diaSources : `pandas.DataFrame`
600 DataFrame representing all diaSources associated
with this
602 filterDiaSources : `pandas.DataFrame`
603 DataFrame representing diaSources associated
with this
604 diaObject that are observed
in the band
pass ``filterName``.
606 Simple, string name of the filter
for the flux being calculated.
608 Any additional keyword arguments that may be passed to the plugin.
610 diaObjects.loc[:, "{}PSFluxSkew".format(filterName)] = \
611 filterDiaSources.psFlux.skew()
618@register(
"ap_minMaxFlux")
620 """Compute min/max of diaSource fluxes.
623 ConfigClass = MinMaxDiaPsFluxConfig
627 outputCols = [
"PSFluxMin",
"PSFluxMax"]
641 """Compute min/max of the point source fluxes.
646 Summary object to store values in.
647 diaSources : `pandas.DataFrame`
648 DataFrame representing all diaSources associated
with this
650 filterDiaSources : `pandas.DataFrame`
651 DataFrame representing diaSources associated
with this
652 diaObject that are observed
in the band
pass ``filterName``.
654 Simple, string name of the filter
for the flux being calculated.
656 Any additional keyword arguments that may be passed to the plugin.
658 minName = "{}PSFluxMin".format(filterName)
659 if minName
not in diaObjects.columns:
660 diaObjects[minName] = np.nan
661 maxName =
"{}PSFluxMax".format(filterName)
662 if maxName
not in diaObjects.columns:
663 diaObjects[maxName] = np.nan
665 diaObjects.loc[:, minName] = filterDiaSources.psFlux.min()
666 diaObjects.loc[:, maxName] = filterDiaSources.psFlux.max()
673@register(
"ap_maxSlopeFlux")
675 """Compute the maximum ratio time ordered deltaFlux / deltaTime.
678 ConfigClass = MinMaxDiaPsFluxConfig
682 outputCols = [
"PSFluxMaxSlope"]
696 """Compute the maximum ratio time ordered deltaFlux / deltaTime.
701 Summary object to store values in.
702 diaSources : `pandas.DataFrame`
703 DataFrame representing all diaSources associated
with this
705 filterDiaSources : `pandas.DataFrame`
706 DataFrame representing diaSources associated
with this
707 diaObject that are observed
in the band
pass ``filterName``.
709 Simple, string name of the filter
for the flux being calculated.
711 Any additional keyword arguments that may be passed to the plugin.
715 tmpDf = df[~np.logical_or(np.isnan(df[
"psFlux"]),
716 np.isnan(df[
"midPointTai"]))]
719 times = tmpDf[
"midPointTai"].to_numpy()
720 timeArgs = times.argsort()
721 times = times[timeArgs]
722 fluxes = tmpDf[
"psFlux"].to_numpy()[timeArgs]
723 return (np.diff(fluxes) / np.diff(times)).
max()
725 diaObjects.loc[:,
"{}PSFluxMaxSlope".format(filterName)] = \
726 filterDiaSources.apply(_maxSlope)
733@register(
"ap_meanErrFlux")
735 """Compute the mean of the dia source errors.
738 ConfigClass = ErrMeanDiaPsFluxConfig
742 outputCols = [
"PSFluxErrMean"]
756 """Compute the mean of the dia source errors.
761 Summary object to store values in.
762 diaSources : `pandas.DataFrame`
763 DataFrame representing all diaSources associated
with this
765 filterDiaSources : `pandas.DataFrame`
766 DataFrame representing diaSources associated
with this
767 diaObject that are observed
in the band
pass ``filterName``.
769 Simple, string name of the filter
for the flux being calculated.
771 Any additional keyword arguments that may be passed to the plugin.
773 diaObjects.loc[:, "{}PSFluxErrMean".format(filterName)] = \
774 filterDiaSources.psFluxErr.mean()
781@register(
"ap_linearFit")
783 """Compute fit a linear model to flux vs time.
786 ConfigClass = LinearFitDiaPsFluxConfig
790 outputCols = [
"PSFluxLinearSlope",
"PSFluxLinearIntercept"]
804 """Compute fit a linear model to flux vs time.
809 Summary object to store values in.
810 diaSources : `pandas.DataFrame`
811 DataFrame representing all diaSources associated
with this
813 filterDiaSources : `pandas.DataFrame`
814 DataFrame representing diaSources associated
with this
815 diaObject that are observed
in the band
pass ``filterName``.
817 Simple, string name of the filter
for the flux being calculated.
819 Any additional keyword arguments that may be passed to the plugin.
822 mName = "{}PSFluxLinearSlope".format(filterName)
823 if mName
not in diaObjects.columns:
824 diaObjects[mName] = np.nan
825 bName =
"{}PSFluxLinearIntercept".format(filterName)
826 if bName
not in diaObjects.columns:
827 diaObjects[bName] = np.nan
830 tmpDf = df[~np.logical_or(
831 np.isnan(df[
"psFlux"]),
832 np.logical_or(np.isnan(df[
"psFluxErr"]),
833 np.isnan(df[
"midPointTai"])))]
835 return pd.Series({mName: np.nan, bName: np.nan})
836 fluxes = tmpDf[
"psFlux"].to_numpy()
837 errors = tmpDf[
"psFluxErr"].to_numpy()
838 times = tmpDf[
"midPointTai"].to_numpy()
839 A = np.array([times / errors, 1 / errors]).transpose()
840 m, b = lsq_linear(A, fluxes / errors).x
841 return pd.Series({mName: m, bName: b})
843 diaObjects.loc[:, [mName, bName]] = filterDiaSources.apply(_linearFit)
850@register(
"ap_stetsonJ")
852 """Compute the StetsonJ statistic on the DIA point source fluxes.
855 ConfigClass = LinearFitDiaPsFluxConfig
858 inputCols = [
"PSFluxMean"]
860 outputCols = [
"PSFluxStetsonJ"]
874 """Compute the StetsonJ statistic on the DIA point source fluxes.
879 Summary object to store values in.
880 diaSources : `pandas.DataFrame`
881 DataFrame representing all diaSources associated
with this
883 filterDiaSources : `pandas.DataFrame`
884 DataFrame representing diaSources associated
with this
885 diaObject that are observed
in the band
pass ``filterName``.
887 Simple, string name of the filter
for the flux being calculated.
889 Any additional keyword arguments that may be passed to the plugin.
891 meanName = "{}PSFluxMean".format(filterName)
894 tmpDf = df[~np.logical_or(np.isnan(df[
"psFlux"]),
895 np.isnan(df[
"psFluxErr"]))]
898 fluxes = tmpDf[
"psFlux"].to_numpy()
899 errors = tmpDf[
"psFluxErr"].to_numpy()
904 diaObjects.at[tmpDf.diaObjectId.iat[0], meanName])
906 diaObjects.loc[:,
"{}PSFluxStetsonJ".format(filterName)] = \
907 filterDiaSources.apply(_stetsonJ)
909 def _stetson_J(self, fluxes, errors, mean=None):
910 """Compute the single band stetsonJ statistic.
914 fluxes : `numpy.ndarray` (N,)
915 Calibrated lightcurve flux values.
916 errors : `numpy.ndarray` (N,)
917 Errors on the calibrated lightcurve fluxes.
919 Starting mean from previous plugin.
924 stetsonJ statistic
for the input fluxes
and errors.
928 .. [1] Stetson, P. B.,
"On the Automatic Determination of Light-Curve
929 Parameters for Cepheid Variables
", PASP, 108, 851S, 1996
931 n_points = len(fluxes)
934 np.sqrt(n_points / (n_points - 1)) * (fluxes - flux_mean) / errors)
935 p_k = delta_val ** 2 - 1
937 return np.mean(np.sign(p_k) * np.sqrt(np.fabs(p_k)))
939 def _stetson_mean(self,
947 """Compute the stetson mean of the fluxes which down-weights outliers.
949 Weighted biased on an error weighted difference scaled by a constant
950 (1/``a``) and raised to the power beta. Higher betas more harshly
951 penalize outliers
and ``a`` sets the number of sigma where a weighted
952 difference of 1 occurs.
956 values : `numpy.dnarray`, (N,)
957 Input values to compute the mean of.
958 errors : `numpy.ndarray`, (N,)
959 Errors on the input values.
961 Starting mean value
or None.
963 Scalar down-weighting of the fractional difference. lower->more
964 clipping. (Default value
is 2.)
966 Power law slope of the used to down-weight outliers. higher->more
967 clipping. (Default value
is 2.)
969 Number of iterations of clipping.
971 Fractional
and absolute tolerance goal on the change
in the mean
972 before exiting early. (Default value
is 1e-6)
977 Weighted stetson mean result.
981 .. [1] Stetson, P. B.,
"On the Automatic Determination of Light-Curve
982 Parameters for Cepheid Variables
", PASP, 108, 851S, 1996
984 n_points = len(values)
985 n_factor = np.sqrt(n_points / (n_points - 1))
986 inv_var = 1 / errors ** 2
989 mean = np.average(values, weights=inv_var)
990 for iter_idx
in range(n_iter):
991 chi = np.fabs(n_factor * (values - mean) / errors)
992 tmp_mean = np.average(
994 weights=inv_var / (1 + (chi / alpha) ** beta))
995 diff = np.fabs(tmp_mean - mean)
997 if diff / mean < tol
and diff < tol:
1006@register(
"ap_meanTotFlux")
1008 """Compute the weighted mean and mean error on the point source fluxes
1009 forced photometered at the DiaSource location in the calibrated image.
1011 Additionally store number of usable data points.
1014 ConfigClass = WeightedMeanDiaPsFluxConfig
1015 outputCols = ["TOTFluxMean",
"TOTFluxMeanErr"]
1023 @catchWarnings(warns=[
"invalid value encountered",
1031 """Compute the weighted mean and mean error of the point source flux.
1036 Summary object to store values in.
1037 diaSources : `pandas.DataFrame`
1038 DataFrame representing all diaSources associated
with this
1040 filterDiaSources : `pandas.DataFrame`
1041 DataFrame representing diaSources associated
with this
1042 diaObject that are observed
in the band
pass ``filterName``.
1044 Simple, string name of the filter
for the flux being calculated.
1046 Any additional keyword arguments that may be passed to the plugin.
1048 totMeanName = "{}TOTFluxMean".format(filterName)
1049 if totMeanName
not in diaObjects.columns:
1050 diaObjects[totMeanName] = np.nan
1051 totErrName =
"{}TOTFluxMeanErr".format(filterName)
1052 if totErrName
not in diaObjects.columns:
1053 diaObjects[totErrName] = np.nan
1056 tmpDf = df[~np.logical_or(np.isnan(df[
"totFlux"]),
1057 np.isnan(df[
"totFluxErr"]))]
1058 tot_weight = np.nansum(1 / tmpDf[
"totFluxErr"] ** 2)
1059 fluxMean = np.nansum(tmpDf[
"totFlux"]
1060 / tmpDf[
"totFluxErr"] ** 2)
1061 fluxMean /= tot_weight
1062 fluxMeanErr = np.sqrt(1 / tot_weight)
1064 return pd.Series({totMeanName: fluxMean,
1065 totErrName: fluxMeanErr})
1067 diaObjects.loc[:, [totMeanName, totErrName]] = \
1068 filterDiaSources.apply(_meanFlux)
1075@register(
"ap_sigmaTotFlux")
1077 """Compute scatter of diaSource fluxes.
1080 ConfigClass = SigmaDiaPsFluxConfig
1082 outputCols = [
"TOTFluxSigma"]
1096 """Compute the sigma fluxes of the point source flux measured on the
1102 Summary object to store values in.
1103 diaSources : `pandas.DataFrame`
1104 DataFrame representing all diaSources associated
with this
1106 filterDiaSources : `pandas.DataFrame`
1107 DataFrame representing diaSources associated
with this
1108 diaObject that are observed
in the band
pass ``filterName``.
1110 Simple, string name of the filter
for the flux being calculated.
1112 Any additional keyword arguments that may be passed to the plugin.
1116 diaObjects.loc[:,
"{}TOTFluxSigma".format(filterName)] = \
1117 filterDiaSources.totFlux.std()
Point in an unspecified spherical coordinate system.
float FLUX_MOMENTS_CALCULATED
def getExecutionOrder(cls)
def calculate(self, diaObjects, diaSources, filterDiaSources, filterName, **kwargs)
def calculate(self, diaObjects, diaSources, filterDiaSources, filterName, **kwargs)
def getExecutionOrder(cls)
def calculate(self, diaObjects, diaObjectId, **kwargs)
def getExecutionOrder(cls)
def __init__(self, config, name, metadata)
def calculate(self, diaObjects, diaSources, filterDiaSources, filterName, **kwargs)
def getExecutionOrder(cls)
def getExecutionOrder(cls)
def calculate(self, diaObjects, diaSources, filterDiaSources, filterName, **kwargs)
def calculate(self, diaObjects, diaSources, filterDiaSources, filterName, **kwargs)
def getExecutionOrder(cls)
def getExecutionOrder(cls)
def calculate(self, diaObjects, diaSources, **kwargs)
def getExecutionOrder(cls)
def calculate(self, diaObjects, diaSources, filterDiaSources, filterName, **kwargs)
def calculate(self, diaObjects, diaSources, **kwargs)
def getExecutionOrder(cls)
def getExecutionOrder(cls)
def calculate(self, diaObjects, diaSources, filterDiaSources, filterName, **kwargs)
def __init__(self, config, name, metadata, **kwargs)
def calculate(self, diaObjects, diaSources, filterDiaSources, filterName, **kwargs)
def getExecutionOrder(cls)
def getExecutionOrder(cls)
def calculate(self, diaObjects, diaSources, filterDiaSources, filterName, **kwargs)
def getExecutionOrder(cls)
def calculate(self, diaObjects, diaSources, **kwargs)
def getExecutionOrder(cls)
def calculate(self, diaObjects, diaSources, filterDiaSources, filterName, **kwargs)
def _stetson_J(self, fluxes, errors, mean=None)
def _stetson_mean(self, values, errors, mean=None, alpha=2., beta=2., n_iter=20, tol=1e-6)
def getExecutionOrder(cls)
def calculate(self, diaObjects, diaSources, filterDiaSources, filterName, **kwargs)
def getExecutionOrder(cls)
def calculate(self, diaObjects, diaSources, filterDiaSources, filterName, **kwargs)
def getExecutionOrder(cls)
def calculate(self, diaObjects, diaSources, filterDiaSources, filterName, **kwargs)
float DEFAULT_CATALOGCALCULATION
HtmPixelization provides HTM indexing of points and regions.
daf::base::PropertyList * list
SpherePoint averageSpherePoint(std::vector< SpherePoint > const &coords)
Return the average of a list of coordinates.
def catchWarnings(_func=None, *warns=[])