12using timestream::TCDataKind;
47 template <
class K
idsProc,
class RawObs>
51 template <
class K
idsProc>
58 template <mapmaking::MapType map_type>
79 {
"x_t_err", pos_units},
81 {
"y_t_err", pos_units},
83 {
"a_fwhm_err",
"arcsec"},
85 {
"b_fwhm_err",
"arcsec"},
117 ppt_meta[
"array_order"].push_back(std::to_string(arr_index) +
": " + arr_name);
122 ppt_meta[param].push_back(
"units: " + unit);
125 ppt_meta[param].push_back(description);
130 std::size_t found = val.first.find(
"PointModel");
131 if (found!=std::string::npos) {
132 ppt_meta[val.first] = val.second(0);
146template <
class K
idsProc,
class RawObs>
148 using tuple_t = std::tuple<TCData<TCDataKind::RTC, Eigen::MatrixXd>,
149 std::vector<kids::KidsData<kids::KidsDataKind::RawTimeStream>>>;
154 boost::random::mt19937 eng;
157 boost::random::uniform_int_distribution<> rands{0,1};
160 tula::logging::progressbar pb(
161 [&](
const auto &msg) {
logger->info(
"{}", msg); }, 100,
"citlali progress ");
165 [&]() -> std::optional<tuple_t> {
171 pb.count(telescope.scan_indices.cols(), 1);
174 TCData<TCDataKind::RTC, Eigen::MatrixXd> rtcdata;
176 rtcdata.scan_indices.data = telescope.scan_indices.col(scan);
178 rtcdata.index.data = scan;
182 if (omb.randomize_dets) {
183 rtcdata.noise.data = Eigen::Matrix<int, Eigen::Dynamic, Eigen::Dynamic>::Zero(omb.n_noise, calib.n_dets)
184 .unaryExpr([&](int dummy){ return 2 * rands(eng) - 1; });
186 rtcdata.noise.data = Eigen::Matrix<int, Eigen::Dynamic, 1>::Zero(omb.n_noise)
187 .unaryExpr([&](int dummy){ return 2 * rands(eng) - 1; });
192 std::vector<kids::KidsData<kids::KidsDataKind::RawTimeStream>> scan_rawobs;
199 return tuple_t(rtcdata,scan_rawobs);
209 logger->info(
"normalizing maps");
210 omb.normalize_maps();
212 logger->info(
"calculating map psd");
215 logger->info(
"calculating map histogram");
218 omb.calc_median_err();
220 omb.calc_median_rms();
227template <
class K
idsProc>
229 auto farm = grppi::farm(
n_threads,[&](
auto &input_tuple) {
231 auto& rtcdata = std::get<0>(input_tuple);
233 auto& scan_rawobs = std::get<1>(input_tuple);
236 Eigen::Index si = rtcdata.scan_indices.data(2);
239 Eigen::Index sl = rtcdata.scan_indices.data(3) - rtcdata.scan_indices.data(2) + 1;
248 rtcdata.pointing_offsets_arcsec.data[axis] = offset.segment(si,sl);
260 std::vector<kids::KidsData<kids::KidsDataKind::RawTimeStream>>().swap(scan_rawobs);
265 logger->info(
"starting scan {}. {}/{} scans completed", rtcdata.index.data + 1,
n_scans_done,
269 logger->info(
"raw time chunk processing for scan {}", rtcdata.index.data + 1);
286 logger->info(
"writing raw time chunk");
288 ptcdata.pointing_offsets_arcsec.data,
calib);
294 logger->info(
"subtracting map from tod");
302 logger->info(
"processed time chunk processing for scan {}", ptcdata.index.data + 1);
308 logger->info(
"calculating weights");
316 bool run_omb =
false;
317 logger->info(
"populating noise maps");
327 logger->info(
"adding map to tod");
338 logger->info(
"calculating weights");
347 logger->info(
"writing processed time chunk");
349 ptcdata.pointing_offsets_arcsec.data,
calib);
359 logger->debug(
"calculating stats");
365 bool run_noise_fruit;
371 run_noise_fruit =
false;
376 logger->info(
"populating maps");
397 logger->info(
"fitting maps");
399 std::vector<int> map_in_vec, map_out_vec;
401 map_in_vec.resize(
n_maps);
402 std::iota(map_in_vec.begin(), map_in_vec.end(), 0);
403 map_out_vec.resize(
n_maps);
405 double init_row = -99;
406 double init_col = -99;
409 grppi::map(tula::grppi_utils::dyn_ex(
parallel_policy), map_in_vec, map_out_vec, [&](
auto i) {
413 auto [map_params, map_perror, good_fit] =
415 params.row(i) = map_params;
433 Eigen::VectorXd lat(1), lon(1);
450template <mapmaking::MapType map_type>
455 std::vector<fitsIO<file_type_enum::write_fits, CCfits::ExtHDU*>>* f_io =
nullptr;
457 std::vector<fitsIO<file_type_enum::write_fits, CCfits::ExtHDU*>>* n_io =
nullptr;
460 std::string dir_name;
478 for (Eigen::Index i = 0; i <
n_maps; ++i) {
487 ppt_table.col(i) =
params.col(j).cast<
float>();
488 ppt_table.col(i + 1) =
perrors.col(j).cast<
float>();
511 if (!f_io->empty()) {
514 tula::logging::progressbar pb(
515 [&](
const auto &msg) {
logger->info(
"{}", msg); }, 100,
"output progress ");
517 for (Eigen::Index i=0; i<f_io->size(); i++) {
521 if (!mb->
noise.empty()) {
528 for (Eigen::Index i=0; i<
n_maps; i++) {
543 std::string extname = f_io->at(map_index).hdus.at(k)->name();
545 std::size_t found = extname.find(
"signal");
548 while (found==std::string::npos && k<f_io->at(map_index).hdus.size()) {
551 extname = f_io->at(map_index).hdus.at(k)->name();
553 found = extname.find(
"signal");
557 for (Eigen::Index j = 0; j <
ppt_header.size(); ++j) {
560 f_io->at(map_index).hdus.at(k)->addKey(
"POINTING." + key, ppt_table(i, j), key +
" (" +
ppt_header_units[key] +
")");
562 f_io->at(map_index).hdus.at(k)->addKey(
"POINTING." + key, 0, key +
" (" +
ppt_header_units[key] +
")");
569 logger->info(
"maps have been written to:");
570 for (
const auto& file: *f_io) {
571 logger->info(
"{}.fits", file.filepath);
580 logger->debug(
"writing psds");
581 write_psd<map_type>(mb, dir_name);
582 logger->debug(
"writing histograms");
583 write_hist<map_type>(mb, dir_name);
587 logger->debug(
"writing source table");
588 write_sources<map_type>(mb, dir_name);
Eigen::Index hwpr_start_indices
Definition engine.h:201
void obsnum_setup()
Definition engine.h:346
std::string obsnum_dir_name
Definition engine.h:177
void write_stats()
Definition engine.h:2239
std::string parallel_policy
Definition engine.h:189
std::map< std::string, Eigen::VectorXd > pointing_offsets_arcsec
Definition engine.h:234
std::vector< fitsIO< file_type_enum::write_fits, CCfits::ExtHDU * > > filtered_coadd_fits_io_vec
Definition engine.h:244
std::vector< Eigen::Index > start_indices
Definition engine.h:198
std::vector< fitsIO< file_type_enum::write_fits, CCfits::ExtHDU * > > noise_fits_io_vec
Definition engine.h:239
std::vector< fitsIO< file_type_enum::write_fits, CCfits::ExtHDU * > > coadd_noise_fits_io_vec
Definition engine.h:243
std::string tod_output_type
Definition engine.h:216
std::string coadd_dir_name
Definition engine.h:177
std::vector< fitsIO< file_type_enum::write_fits, CCfits::ExtHDU * > > filtered_noise_fits_io_vec
Definition engine.h:240
Eigen::VectorXI maps_to_arrays
Definition engine.h:225
bool verbose_mode
Definition engine.h:165
int n_maps
Definition engine.h:222
Eigen::VectorXI arrays_to_maps
Definition engine.h:225
std::vector< fitsIO< file_type_enum::write_fits, CCfits::ExtHDU * > > filtered_fits_io_vec
Definition engine.h:240
int n_scans_done
Definition engine.h:192
void add_tod_header()
Definition engine.h:1044
std::vector< Eigen::Index > end_indices
Definition engine.h:198
std::vector< fitsIO< file_type_enum::write_fits, CCfits::ExtHDU * > > filtered_coadd_noise_fits_io_vec
Definition engine.h:244
void add_phdu(fits_io_type &, map_buffer_t &, Eigen::Index)
Definition engine.h:1727
std::string redu_type
Definition engine.h:207
std::string map_grouping
Definition engine.h:219
std::shared_ptr< spdlog::logger > logger
Definition engine.h:159
std::map< std::string, std::string > tod_filename
Definition engine.h:180
std::string tod_type
Definition engine.h:204
std::string obsnum
Definition engine.h:210
std::vector< fitsIO< file_type_enum::write_fits, CCfits::ExtHDU * > > coadd_fits_io_vec
Definition engine.h:243
std::vector< std::string > date_obs
Definition engine.h:162
void write_chunk_summary(TCData< tc_t, Eigen::MatrixXd > &)
Definition engine.h:1519
std::vector< fitsIO< file_type_enum::write_fits, CCfits::ExtHDU * > > fits_io_vec
Definition engine.h:239
int n_threads
Definition engine.h:186
std::string map_method
Definition engine.h:219
void write_maps(fits_io_type &, fits_io_type &, map_buffer_t &, Eigen::Index)
Definition engine.h:2018
void pipeline(KidsProc &, RawObs &)
Definition pointing.h:147
Eigen::MatrixXd perrors
Definition pointing.h:17
Eigen::MatrixXd params
Definition pointing.h:17
YAML::Node ppt_meta
Definition pointing.h:20
void fit_maps()
Definition pointing.h:395
auto run(KidsProc &)
Definition pointing.h:228
void setup()
Definition pointing.h:62
std::vector< std::string > ppt_header
Definition pointing.h:23
std::map< std::string, std::string > ppt_header_units
Definition pointing.h:41
void output()
Definition pointing.h:451
bool run_hwpr
Definition calib.h:41
std::map< std::string, Eigen::VectorXd > apt
Definition calib.h:22
std::map< std::string, std::string > apt_header_description
Definition calib.h:151
Eigen::VectorXd hwpr_angle
Definition calib.h:24
Eigen::Index n_dets
Definition calib.h:47
void calc_stats(timestream::TCData< tcdata_kind, Eigen::MatrixXd > &)
Definition diagnostics.h:61
bool sim_obs
Definition telescope.h:20
std::map< std::string, Eigen::VectorXd > tel_data
Definition telescope.h:54
std::string source_name
Definition telescope.h:23
double d_fsmp
Definition telescope.h:42
Eigen::MatrixXI scan_indices
Definition telescope.h:51
std::string project_id
Definition telescope.h:23
std::string pixel_axes
Definition telescope.h:59
std::map< std::string, Eigen::VectorXd > tel_header
Definition telescope.h:56
auto fit_to_gaussian(Eigen::DenseBase< Derived > &, Eigen::DenseBase< Derived > &, double, double, double)
Definition fitting.h:172
int n_params
Definition fitting.h:23
@ pointing
Definition fitting.h:18
@ map
Definition toltec_io.h:22
std::map< Eigen::Index, std::string > array_name_map
Definition toltec_io.h:54
@ ppt
Definition toltec_io.h:16
@ filtered
Definition toltec_io.h:34
@ raw
Definition toltec_io.h:33
std::string create_filename(const std::string, const std::string, std::string, std::string, const bool)
Definition toltec_io.h:86
std::map< Eigen::Index, double > array_fwhm_arcsec
Definition toltec_io.h:75
void populate_maps_jinc(TCData< TCDataKind::PTC, Eigen::MatrixXd > &, map_buffer_t &, map_buffer_t &, Eigen::DenseBase< Derived > &, std::string &, apt_t &, double, bool, bool)
Definition jinc_mm.h:211
WCS wcs
Definition map.h:48
std::string sig_unit
Definition map.h:73
Eigen::Index n_rows
Definition map.h:65
Eigen::Index n_cols
Definition map.h:65
std::vector< Eigen::MatrixXd > signal
Definition map.h:78
std::vector< Eigen::MatrixXd > weight
Definition map.h:78
std::vector< Eigen::Tensor< double, 3 > > noise
Definition map.h:81
double pixel_size_rad
Definition map.h:69
void populate_maps_naive(TCData< TCDataKind::PTC, Eigen::MatrixXd > &, map_buffer_t &, map_buffer_t &, Eigen::DenseBase< Derived > &, std::string &, apt_t &, double, bool, bool)
Definition naive_mm.h:95
void append_to_netcdf(TCData< TCDataKind::PTC, Eigen::MatrixXd > &, std::string, std::string, std::string &, pointing_offset_t &, calib_t &)
Definition ptcproc.h:499
void calc_weights(TCData< TCDataKind::PTC, Eigen::MatrixXd > &, apt_type &, tel_type &)
Definition ptcproc.h:301
void run(TCData< TCDataKind::PTC, Eigen::MatrixXd > &, TCData< TCDataKind::PTC, Eigen::MatrixXd > &, calib_type &, std::string, std::string)
Definition ptcproc.h:173
auto reset_weights(TCData< TCDataKind::PTC, Eigen::MatrixXd > &, calib_t &, std::string)
Definition ptcproc.h:384
void remove_flagged_dets(TCData< TCDataKind::PTC, Eigen::MatrixXd > &, apt_t &)
Definition rtcproc.h:497
bool run_polarization
Definition rtcproc.h:23
auto remove_nearby_tones(TCData< TCDataKind::PTC, Eigen::MatrixXd > &, calib_t &, std::string)
Definition rtcproc.h:520
void append_to_netcdf(TCData< TCDataKind::PTC, Eigen::MatrixXd > &, std::string, std::string, std::string &, pointing_offset_t &, calib_t &)
Definition rtcproc.h:557
auto run(TCData< TCDataKind::RTC, Eigen::MatrixXd > &, TCData< TCDataKind::PTC, Eigen::MatrixXd > &, calib_t &, telescope_t &, double, std::string)
Definition rtcproc.h:261
void map_to_tod(mb_t &, TCData< tcdata_t, Eigen::MatrixXd > &, calib_t &, Eigen::DenseBase< Derived > &, std::string, std::string)
Definition timestream.h:624
auto remove_bad_dets(TCData< tcdata_t, Eigen::MatrixXd > &, calib_t &, std::string)
Definition timestream.h:703
@ NegativeMap
Definition timestream.h:272
@ Map
Definition timestream.h:271
bool run_fruit_loops
Definition timestream.h:279
mapmaking::MapBuffer tod_mb
Definition timestream.h:296
#define DEG_TO_RAD
Definition constants.h:27
#define STD_TO_FWHM
Definition constants.h:45
#define RAD_TO_ASEC
Definition constants.h:36
#define ASEC_TO_RAD
Definition constants.h:33
#define RAD_TO_DEG
Definition constants.h:30
#define ASEC_TO_DEG
Definition constants.h:24
void to_ecsv_from_matrix(std::string filepath, Eigen::DenseBase< Derived > &table, std::vector< std::string > header, YAML::Node meta)
Definition ecsv_io.h:50
static double unix_to_modified_julian_date(double unix_time)
Definition utils.h:170
auto tangent_to_abs(Eigen::DenseBase< Derived > &lat, Eigen::DenseBase< Derived > &lon, const double cra, const double cdec)
Definition pointing.h:88
static const std::string current_date_time()
Definition utils.h:91
auto calc_std_dev(Eigen::DenseBase< DerivedA > &data)
Definition utils.h:336
@ FilteredObs
Definition map.h:19
@ FilteredCoadd
Definition map.h:21
@ RawObs
Definition map.h:18
@ RawCoadd
Definition map.h:20
int run(const rc_t &rc)
Definition main.cpp:104
The raw obs struct This represents a single observation that contains a set of data items and calibra...
Definition io.h:50
std::vector< float > crval
Definition map.h:36
mapmaking::NaiveMapmaker naive_mm
Definition engine.h:107
engine::Telescope telescope
Definition engine.h:94
engine_utils::mapFitter map_fitter
Definition engine.h:97
engine::Diagnostics diagnostics
Definition engine.h:96
engine_utils::toltecIO toltec_io
Definition engine.h:95
timestream::PTCProc ptcproc
Definition engine.h:103
mapmaking::JincMapmaker jinc_mm
Definition engine.h:108
mapmaking::MapBuffer omb
Definition engine.h:106
mapmaking::MapBuffer cmb
Definition engine.h:106
timestream::RTCProc rtcproc
Definition engine.h:100
engine::Calib calib
Definition engine.h:93
bool run_noise
Definition engine.h:84
bool run_source_finder
Definition engine.h:88
bool run_tod_output
Definition engine.h:79
bool run_mapmaking
Definition engine.h:82
TC data class.
Definition timestream.h:55