Alexandria 2.31.2
SDC-CH common library for the Euclid project
Loading...
Searching...
No Matches
CatalogFromTable.cpp
Go to the documentation of this file.
1/*
2 * Copyright (C) 2012-2022 Euclid Science Ground Segment
3 *
4 * This library is free software; you can redistribute it and/or modify it under
5 * the terms of the GNU Lesser General Public License as published by the Free
6 * Software Foundation; either version 3.0 of the License, or (at your option)
7 * any later version.
8 *
9 * This library is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11 * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
12 * details.
13 *
14 * You should have received a copy of the GNU Lesser General Public License
15 * along with this library; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17 */
18
26#include "ElementsKernel/Exception.h"
29#include "Table/CastVisitor.h"
30#include "Table/ColumnInfo.h"
31#include <vector>
32
33namespace Euclid {
34namespace SourceCatalog {
35
37 const std::string& source_id_column_name,
38 std::vector<std::shared_ptr<AttributeFromRow>> attribute_from_row_ptr_vector) {
39
40 std::unique_ptr<size_t> source_id_index_ptr = column_info_ptr->find(source_id_column_name);
41 if (source_id_index_ptr == nullptr) {
42 throw Elements::Exception() << "Column info does not have the column " << source_id_column_name;
43 }
44 m_source_id_index = *source_id_index_ptr;
45
46 m_attribute_from_row_ptr_vector = std::move(attribute_from_row_ptr_vector);
47}
48
50
52
53 std::vector<Source> source_vector;
54
55 // Figure out the type of the first row, and then assume all following
56 // must be of the same
57 CastSourceIdVisitor castVisitor;
58
59 for (const auto& row : input_table) {
60
61 auto source_id = boost::apply_visitor(castVisitor, row[m_source_id_index]);
62
64 try {
66 attribute_ptr_vector.begin(),
67 [&row](const std::shared_ptr<AttributeFromRow>& attr) { return attr->createAttribute(row); });
68 } catch (const PhotometryParsingException& parsing_exception) {
69 throw Elements::Exception() << "Parsing error while parsing the source with Id = " << source_id << " : "
70 << parsing_exception.what();
71 } catch (const std::exception& e) {
72 throw Elements::Exception() << "Error while parsing the source with Id = " << source_id << " : " << e.what();
73 } catch (...) {
74 throw Elements::Exception() << "Error while parsing the source with Id = " << source_id;
75 }
76
77 source_vector.emplace_back(source_id, std::move(attribute_ptr_vector));
78 }
79
80 return Catalog{source_vector};
81}
82
83} // namespace SourceCatalog
84} // end of namespace Euclid
T begin(T... args)
const char * what() const noexcept override
This type can be used together with boost::apply_visitor to cast boost::variant with an unknown under...
Definition Source.h:105
std::vector< std::shared_ptr< AttributeFromRow > > m_attribute_from_row_ptr_vector
CatalogFromTable(std::shared_ptr< Euclid::Table::ColumnInfo > column_info_ptr, const std::string &source_id_column_name, std::vector< std::shared_ptr< AttributeFromRow > > attribute_from_row_ptr_vector)
Euclid::SourceCatalog::Catalog createCatalog(const Euclid::Table::Table &input_table)
Catalog contains a container of sources.
Definition Catalog.h:47
Represents a table.
Definition Table.h:49
T emplace_back(T... args)
T move(T... args)
T transform(T... args)