lsst.jointcal
g29ae962dfc+7e0e65d7b2
Toggle main menu visibility
Loading...
Searching...
No Matches
src
PhotometryMapping.cc
Go to the documentation of this file.
1
// -*- LSST-C++ -*-
2
/*
3
* This file is part of jointcal.
4
*
5
* Developed for the LSST Data Management System.
6
* This product includes software developed by the LSST Project
7
* (https://www.lsst.org).
8
* See the COPYRIGHT file at the top-level directory of this distribution
9
* for details of code ownership.
10
*
11
* This program is free software: you can redistribute it and/or modify
12
* it under the terms of the GNU General Public License as published by
13
* the Free Software Foundation, either version 3 of the License, or
14
* (at your option) any later version.
15
*
16
* This program is distributed in the hope that it will be useful,
17
* but WITHOUT ANY WARRANTY; without even the implied warranty of
18
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19
* GNU General Public License for more details.
20
*
21
* You should have received a copy of the GNU General Public License
22
* along with this program. If not, see <https://www.gnu.org/licenses/>.
23
*/
24
25
#include <cmath>
26
27
#include "
lsst/log/Log.h
"
28
29
#include "
lsst/jointcal/MeasuredStar.h
"
30
#include "
lsst/jointcal/PhotometryMapping.h
"
31
32
namespace
{
33
LOG_LOGGER _log =
LOG_GET
(
"lsst.jointcal.PhotometryMapping"
);
34
}
35
36
namespace
lsst
{
37
namespace
jointcal
{
38
39
void
ChipVisitPhotometryMapping::getMappingIndices
(
IndexVector
&indices)
const
{
40
if
(indices.
size
() <
getNpar
()) indices.
resize
(
getNpar
());
41
// If we're fitting the chip mapping, fill those indices.
42
if
(
_nParChip
> 0) {
43
_chipMapping
->getMappingIndices(indices);
44
}
45
// If we're fitting the visit mapping, fill those indices.
46
if
(
_nParVisit
> 0) {
47
// TODO DM-12169: there is probably a better way to feed a subpart of a std::vector
48
// (maybe a view or iterators?)
49
IndexVector
tempIndices(
_visitMapping
->getNpar());
50
_visitMapping
->getMappingIndices(tempIndices);
51
// We have to insert the visit indices starting after the chip indices.
52
for
(
std::size_t
k = 0; k <
_visitMapping
->getNpar(); ++k) {
53
indices.
at
(k +
_nParChip
) = tempIndices.
at
(k);
54
}
55
}
56
}
57
58
void
ChipVisitPhotometryMapping::setWhatToFit
(
bool
const
fittingChips,
bool
const
fittingVisits) {
59
if
(fittingChips) {
60
_nParChip
=
_chipMapping
->getNpar();
61
}
else
{
62
_nParChip
= 0;
63
}
64
if
(fittingVisits) {
65
_nParVisit
=
_visitMapping
->getNpar();
66
}
else
{
67
_nParVisit
= 0;
68
}
69
}
70
71
// ChipVisitFluxMapping methods
72
73
double
ChipVisitFluxMapping::transformError
(
MeasuredStar
const
&measuredStar,
double
instFlux,
74
double
instFluxErr)
const
{
75
// The transformed error is s_m = dM(f,x,y)/df + s_f.
76
double
tempFlux =
77
_chipMapping
->getTransformErrors()->transform(measuredStar.
x
, measuredStar.
y
, instFluxErr);
78
return
_visitMapping
->getTransformErrors()->transform(measuredStar.
getXFocal
(), measuredStar.
getYFocal
(),
79
tempFlux);
80
}
81
82
void
ChipVisitFluxMapping::computeParameterDerivatives
(
MeasuredStar
const
&measuredStar,
double
instFlux,
83
Eigen::Ref<Eigen::VectorXd> derivatives)
const
{
84
// TODO DM-12161: possible optimization is to merge transform and computeDerivatives,
85
// and/or save these intermediate calculations when transforming flux to use in derivatives.
86
// Like what AstrometryMappings do with `computeTransformAndDerivatives` vs. `transformPosAndErrors`.
87
88
double
chipScale =
_chipMapping
->getTransform()->transform(measuredStar.
x
, measuredStar.
y
, 1);
89
double
visitScale =
90
_visitMapping
->getTransform()->transform(measuredStar.
getXFocal
(), measuredStar.
getYFocal
(), 1);
91
92
// NOTE: chipBlock is the product of the chip derivatives and the visit transforms, and vice versa.
93
// NOTE: See DMTN-036 for the math behind this.
94
if
(
getNParChip
() > 0 && !
_chipMapping
->isFixed()) {
95
// The chip derivatives start at 0, independent of the full-fit indices.
96
Eigen::Ref<Eigen::VectorXd> chipBlock = derivatives.segment(0,
getNParChip
());
97
_chipMapping
->getTransform()->computeParameterDerivatives(measuredStar.
x
, measuredStar.
y
, instFlux,
98
chipBlock);
99
chipBlock *= visitScale;
100
}
101
if
(
getNParVisit
() > 0) {
102
// The visit derivatives start at the last chip derivative, independent of the full-fit indices.
103
Eigen::Ref<Eigen::VectorXd> visitBlock = derivatives.segment(
getNParChip
(),
getNParVisit
());
104
_visitMapping
->getTransform()->computeParameterDerivatives(
105
measuredStar.
getXFocal
(), measuredStar.
getYFocal
(), instFlux, visitBlock);
106
visitBlock *= chipScale;
107
}
108
}
109
110
// ChipVisitMagnitudeMapping methods
111
112
double
ChipVisitMagnitudeMapping::transformError
(
MeasuredStar
const
&measuredStar,
double
instFlux,
113
double
instFluxErr)
const
{
114
// The transformed error is s_mout = 2.5/ln(10) * instFluxErr / instFlux
115
// because the other components of the mapping (f0, the polynomials) disappear in the partial derivative.
116
return
2.5 /
std::log
(10.0) * instFluxErr / instFlux;
117
}
118
119
void
ChipVisitMagnitudeMapping::computeParameterDerivatives
(
MeasuredStar
const
&measuredStar,
double
instFlux,
120
Eigen::Ref<Eigen::VectorXd> derivatives)
const
{
121
// TODO DM-12161: possible optimization is to merge transform and computeDerivatives,
122
// and/or save these intermediate calculations when transforming flux to use in derivatives.
123
// Like what AstrometryMappings do with `computeTransformAndDerivatives` vs. `transformPosAndErrors`.
124
125
// NOTE: See DMTN-036 for the math behind this.
126
if
(
getNParChip
() > 0 && !
_chipMapping
->isFixed()) {
127
// The chip derivatives start at 0, independent of the full-fit indices.
128
Eigen::Ref<Eigen::VectorXd> chipBlock = derivatives.segment(0,
getNParChip
());
129
_chipMapping
->getTransform()->computeParameterDerivatives(measuredStar.
x
, measuredStar.
y
, instFlux,
130
chipBlock);
131
}
132
if
(
getNParVisit
() > 0) {
133
// The visit derivatives start at the last chip derivative, independent of the full-fit indices.
134
Eigen::Ref<Eigen::VectorXd> visitBlock = derivatives.segment(
getNParChip
(),
getNParVisit
());
135
_visitMapping
->getTransform()->computeParameterDerivatives(
136
measuredStar.
getXFocal
(), measuredStar.
getYFocal
(), instFlux, visitBlock);
137
}
138
}
139
140
}
// namespace jointcal
141
}
// namespace lsst
Log.h
LOG_GET
#define LOG_GET(logger)
IndexVector
std::vector< std::ptrdiff_t > IndexVector
Definition
Eigenstuff.h:38
MeasuredStar.h
PhotometryMapping.h
std::vector::at
T at(T... args)
lsst::jointcal::ChipVisitFluxMapping::computeParameterDerivatives
void computeParameterDerivatives(MeasuredStar const &measuredStar, double value, Eigen::Ref< Eigen::VectorXd > derivatives) const override
Compute the derivatives with respect to the parameters (i.e.
Definition
PhotometryMapping.cc:82
lsst::jointcal::ChipVisitFluxMapping::transformError
double transformError(MeasuredStar const &measuredStar, double value, double valueErr) const override
Return the on-sky transformed flux uncertainty for measuredStar on ccdImage.
Definition
PhotometryMapping.cc:73
lsst::jointcal::ChipVisitMagnitudeMapping::computeParameterDerivatives
void computeParameterDerivatives(MeasuredStar const &measuredStar, double value, Eigen::Ref< Eigen::VectorXd > derivatives) const override
Compute the derivatives with respect to the parameters (i.e.
Definition
PhotometryMapping.cc:119
lsst::jointcal::ChipVisitMagnitudeMapping::transformError
double transformError(MeasuredStar const &measuredStar, double value, double valueErr) const override
Return the on-sky transformed flux uncertainty for measuredStar on ccdImage.
Definition
PhotometryMapping.cc:112
lsst::jointcal::ChipVisitPhotometryMapping::_visitMapping
std::shared_ptr< PhotometryMapping > _visitMapping
Definition
PhotometryMapping.h:287
lsst::jointcal::ChipVisitPhotometryMapping::_chipMapping
std::shared_ptr< PhotometryMapping > _chipMapping
Definition
PhotometryMapping.h:286
lsst::jointcal::ChipVisitPhotometryMapping::_nParChip
std::size_t _nParChip
Definition
PhotometryMapping.h:283
lsst::jointcal::ChipVisitPhotometryMapping::getNpar
std::size_t getNpar() const override
Number of total parameters in this mapping.
Definition
PhotometryMapping.h:230
lsst::jointcal::ChipVisitPhotometryMapping::setWhatToFit
void setWhatToFit(bool fittingChips, bool fittingVisits)
Set whether to fit chips or visits.
Definition
PhotometryMapping.cc:58
lsst::jointcal::ChipVisitPhotometryMapping::getMappingIndices
void getMappingIndices(IndexVector &indices) const override
Gets how this set of parameters (of length getNpar()) map into the "grand" fit.
Definition
PhotometryMapping.cc:39
lsst::jointcal::ChipVisitPhotometryMapping::_nParVisit
std::size_t _nParVisit
Definition
PhotometryMapping.h:283
lsst::jointcal::ChipVisitPhotometryMapping::getNParChip
std::size_t getNParChip() const
Definition
PhotometryMapping.h:278
lsst::jointcal::ChipVisitPhotometryMapping::getNParVisit
std::size_t getNParVisit() const
Definition
PhotometryMapping.h:279
lsst::jointcal::MeasuredStar
Sources measured on images.
Definition
MeasuredStar.h:51
lsst::jointcal::MeasuredStar::getXFocal
double getXFocal() const
Definition
MeasuredStar.h:113
lsst::jointcal::MeasuredStar::getYFocal
double getYFocal() const
Definition
MeasuredStar.h:115
lsst::jointcal::Point::x
double x
coordinate
Definition
Point.h:42
lsst::jointcal::Point::y
double y
Definition
Point.h:42
std::log
T log(T... args)
lsst::jointcal
Definition
Associations.h:50
lsst
std::vector::resize
T resize(T... args)
std::vector::size
T size(T... args)
std::size_t
Generated on
for lsst.jointcal by
1.17.0