Skip to content

Commit

Permalink
Use C++ switch/case to replace if else blocks
Browse files Browse the repository at this point in the history
  • Loading branch information
parejkoj committed Feb 15, 2024
1 parent 7e939b0 commit 630a14b
Showing 1 changed file with 142 additions and 114 deletions.
256 changes: 142 additions & 114 deletions src/KernelCandidate.cc
Original file line number Diff line number Diff line change
Expand Up @@ -218,98 +218,114 @@ void KernelCandidate<PixelT>::_buildKernelSolution(lsst::afw::math::KernelList c

template <typename PixelT>
std::shared_ptr<lsst::afw::math::Kernel> KernelCandidate<PixelT>::getKernel(CandidateSwitch cand) const {
if (cand == KernelCandidate::ORIG) {
if (_kernelSolutionOrig)
return _kernelSolutionOrig->getKernel();
else
throw LSST_EXCEPT(pexExcept::RuntimeError, "Original kernel does not exist");
} else if (cand == KernelCandidate::PCA) {
if (_kernelSolutionPca)
return _kernelSolutionPca->getKernel();
else
throw LSST_EXCEPT(pexExcept::RuntimeError, "Pca kernel does not exist");
} else if (cand == KernelCandidate::RECENT) {
if (_kernelSolutionPca)
return _kernelSolutionPca->getKernel();
else if (_kernelSolutionOrig)
return _kernelSolutionOrig->getKernel();
else
throw LSST_EXCEPT(pexExcept::RuntimeError, "No kernels exist");
} else {
throw std::logic_error("Invalid CandidateSwitch, cannot get kernel");
switch (cand) {
case (KernelCandidate::ORIG):
if (_kernelSolutionOrig)
return _kernelSolutionOrig->getKernel();
else
throw LSST_EXCEPT(pexExcept::RuntimeError, "Original kernel does not exist");
break;
case (KernelCandidate::PCA):
if (_kernelSolutionPca)
return _kernelSolutionPca->getKernel();
else
throw LSST_EXCEPT(pexExcept::RuntimeError, "Pca kernel does not exist");
break;
case (KernelCandidate::RECENT):
if (_kernelSolutionPca)
return _kernelSolutionPca->getKernel();
else if (_kernelSolutionOrig)
return _kernelSolutionOrig->getKernel();
else
throw LSST_EXCEPT(pexExcept::RuntimeError, "No kernels exist");
break;
default:
throw std::logic_error("Invalid CandidateSwitch, cannot get kernel");
}
}

template <typename PixelT>
double KernelCandidate<PixelT>::getBackground(CandidateSwitch cand) const {
if (cand == KernelCandidate::ORIG) {
if (_kernelSolutionOrig)
return _kernelSolutionOrig->getBackground();
else
throw LSST_EXCEPT(pexExcept::RuntimeError, "Original kernel does not exist");
} else if (cand == KernelCandidate::PCA) {
if (_kernelSolutionPca)
return _kernelSolutionPca->getBackground();
else
throw LSST_EXCEPT(pexExcept::RuntimeError, "Pca kernel does not exist");
} else if (cand == KernelCandidate::RECENT) {
if (_kernelSolutionPca)
return _kernelSolutionPca->getBackground();
else if (_kernelSolutionOrig)
return _kernelSolutionOrig->getBackground();
else
throw LSST_EXCEPT(pexExcept::RuntimeError, "No kernels exist");
} else {
throw std::logic_error("Invalid CandidateSwitch, cannot get background");
switch (cand) {
case (KernelCandidate::ORIG):
if (_kernelSolutionOrig)
return _kernelSolutionOrig->getBackground();
else
throw LSST_EXCEPT(pexExcept::RuntimeError, "Original kernel does not exist");
break;
case (KernelCandidate::PCA):
if (_kernelSolutionPca)
return _kernelSolutionPca->getBackground();
else
throw LSST_EXCEPT(pexExcept::RuntimeError, "Pca kernel does not exist");
break;
case (KernelCandidate::RECENT):
if (_kernelSolutionPca)
return _kernelSolutionPca->getBackground();
else if (_kernelSolutionOrig)
return _kernelSolutionOrig->getBackground();
else
throw LSST_EXCEPT(pexExcept::RuntimeError, "No kernels exist");
break;
default:
throw std::logic_error("Invalid CandidateSwitch, cannot get background");
}
}

template <typename PixelT>
double KernelCandidate<PixelT>::getKsum(CandidateSwitch cand) const {
if (cand == KernelCandidate::ORIG) {
if (_kernelSolutionOrig)
return _kernelSolutionOrig->getKsum();
else
throw LSST_EXCEPT(pexExcept::RuntimeError, "Original kernel does not exist");
} else if (cand == KernelCandidate::PCA) {
if (_kernelSolutionPca)
return _kernelSolutionPca->getKsum();
else
throw LSST_EXCEPT(pexExcept::RuntimeError, "Pca kernel does not exist");
} else if (cand == KernelCandidate::RECENT) {
if (_kernelSolutionPca)
return _kernelSolutionPca->getKsum();
else if (_kernelSolutionOrig)
return _kernelSolutionOrig->getKsum();
else
throw LSST_EXCEPT(pexExcept::RuntimeError, "No kernels exist");
} else {
throw std::logic_error("Invalid CandidateSwitch, cannot get kSum");
switch (cand) {
case (KernelCandidate::ORIG):
if (_kernelSolutionOrig)
return _kernelSolutionOrig->getKsum();
else
throw LSST_EXCEPT(pexExcept::RuntimeError, "Original kernel does not exist");
break;
case (KernelCandidate::PCA):
if (_kernelSolutionPca)
return _kernelSolutionPca->getKsum();
else
throw LSST_EXCEPT(pexExcept::RuntimeError, "Pca kernel does not exist");
break;
case (KernelCandidate::RECENT):
if (_kernelSolutionPca)
return _kernelSolutionPca->getKsum();
else if (_kernelSolutionOrig)
return _kernelSolutionOrig->getKsum();
else
throw LSST_EXCEPT(pexExcept::RuntimeError, "No kernels exist");
break;
default:
throw std::logic_error("Invalid CandidateSwitch, cannot get kSum");
}
}

template <typename PixelT>
std::shared_ptr<typename KernelCandidate<PixelT>::ImageT> KernelCandidate<PixelT>::getKernelImage(
CandidateSwitch cand) const {
if (cand == KernelCandidate::ORIG) {
if (_kernelSolutionOrig)
return _kernelSolutionOrig->makeKernelImage();
else
throw LSST_EXCEPT(pexExcept::RuntimeError, "Original kernel does not exist");
} else if (cand == KernelCandidate::PCA) {
if (_kernelSolutionPca)
return _kernelSolutionPca->makeKernelImage();
else
throw LSST_EXCEPT(pexExcept::RuntimeError, "Pca kernel does not exist");
} else if (cand == KernelCandidate::RECENT) {
if (_kernelSolutionPca)
return _kernelSolutionPca->makeKernelImage();
else if (_kernelSolutionOrig)
return _kernelSolutionOrig->makeKernelImage();
else
throw LSST_EXCEPT(pexExcept::RuntimeError, "No kernels exist");
} else {
throw std::logic_error("Invalid CandidateSwitch, cannot get kernel image");
switch (cand) {
case (KernelCandidate::ORIG):
if (_kernelSolutionOrig)
return _kernelSolutionOrig->makeKernelImage();
else
throw LSST_EXCEPT(pexExcept::RuntimeError, "Original kernel does not exist");
break;
case (KernelCandidate::PCA):
if (_kernelSolutionPca)
return _kernelSolutionPca->makeKernelImage();
else
throw LSST_EXCEPT(pexExcept::RuntimeError, "Pca kernel does not exist");
break;
case (KernelCandidate::RECENT):
if (_kernelSolutionPca)
return _kernelSolutionPca->makeKernelImage();
else if (_kernelSolutionOrig)
return _kernelSolutionOrig->makeKernelImage();
else
throw LSST_EXCEPT(pexExcept::RuntimeError, "No kernels exist");
break;
default:
throw std::logic_error("Invalid CandidateSwitch, cannot get kernel image");
}
}

Expand All @@ -321,49 +337,61 @@ std::shared_ptr<typename KernelCandidate<PixelT>::ImageT const> KernelCandidate<
template <typename PixelT>
std::shared_ptr<StaticKernelSolution<PixelT> > KernelCandidate<PixelT>::getKernelSolution(
CandidateSwitch cand) const {
if (cand == KernelCandidate::ORIG) {
if (_kernelSolutionOrig)
return _kernelSolutionOrig;
else
throw LSST_EXCEPT(pexExcept::RuntimeError, "Original kernel does not exist");
} else if (cand == KernelCandidate::PCA) {
if (_kernelSolutionPca)
return _kernelSolutionPca;
else
throw LSST_EXCEPT(pexExcept::RuntimeError, "Pca kernel does not exist");
} else if (cand == KernelCandidate::RECENT) {
if (_kernelSolutionPca)
return _kernelSolutionPca;
else if (_kernelSolutionOrig)
return _kernelSolutionOrig;
else
throw LSST_EXCEPT(pexExcept::RuntimeError, "No kernels exist");
} else {
throw std::logic_error("Invalid CandidateSwitch, cannot get solution");
switch (cand) {
case (KernelCandidate::ORIG):
if (_kernelSolutionOrig)
return _kernelSolutionOrig;
else
throw LSST_EXCEPT(pexExcept::RuntimeError, "Original kernel does not exist");
break;
case (KernelCandidate::PCA):
if (_kernelSolutionPca)
return _kernelSolutionPca;
else
throw LSST_EXCEPT(pexExcept::RuntimeError, "Pca kernel does not exist");
break;
case (KernelCandidate::RECENT):
if (_kernelSolutionPca)
return _kernelSolutionPca;
else if (_kernelSolutionOrig)
return _kernelSolutionOrig;
else
throw LSST_EXCEPT(pexExcept::RuntimeError, "No kernels exist");
break;
default:
throw std::logic_error("Invalid CandidateSwitch, cannot get solution");
}
}

template <typename PixelT>
lsst::afw::image::MaskedImage<PixelT> KernelCandidate<PixelT>::getDifferenceImage(CandidateSwitch cand) {
if (cand == KernelCandidate::ORIG) {
if (_kernelSolutionOrig)
return getDifferenceImage(_kernelSolutionOrig->getKernel(), _kernelSolutionOrig->getBackground());
else
throw LSST_EXCEPT(pexExcept::RuntimeError, "Original kernel does not exist");
} else if (cand == KernelCandidate::PCA) {
if (_kernelSolutionPca)
return getDifferenceImage(_kernelSolutionPca->getKernel(), _kernelSolutionPca->getBackground());
else
throw LSST_EXCEPT(pexExcept::RuntimeError, "Pca kernel does not exist");
} else if (cand == KernelCandidate::RECENT) {
if (_kernelSolutionPca)
return getDifferenceImage(_kernelSolutionPca->getKernel(), _kernelSolutionPca->getBackground());
else if (_kernelSolutionOrig)
return getDifferenceImage(_kernelSolutionOrig->getKernel(), _kernelSolutionOrig->getBackground());
else
throw LSST_EXCEPT(pexExcept::RuntimeError, "No kernels exist");
} else {
throw std::logic_error("Invalid CandidateSwitch, cannot get diffim");
switch (cand) {
case (KernelCandidate::ORIG):
if (_kernelSolutionOrig)
return getDifferenceImage(_kernelSolutionOrig->getKernel(),
_kernelSolutionOrig->getBackground());
else
throw LSST_EXCEPT(pexExcept::RuntimeError, "Original kernel does not exist");
break;
case (KernelCandidate::PCA):
if (_kernelSolutionPca)
return getDifferenceImage(_kernelSolutionPca->getKernel(),
_kernelSolutionPca->getBackground());
else
throw LSST_EXCEPT(pexExcept::RuntimeError, "Pca kernel does not exist");
break;
case (KernelCandidate::RECENT):
if (_kernelSolutionPca)
return getDifferenceImage(_kernelSolutionPca->getKernel(),
_kernelSolutionPca->getBackground());
else if (_kernelSolutionOrig)
return getDifferenceImage(_kernelSolutionOrig->getKernel(),
_kernelSolutionOrig->getBackground());
else
throw LSST_EXCEPT(pexExcept::RuntimeError, "No kernels exist");
break;
default:
throw std::logic_error("Invalid CandidateSwitch, cannot get diffim");
}
}

Expand Down

0 comments on commit 630a14b

Please sign in to comment.