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;
203 Eigen::Index sl = rtcdata.scan_indices.data(3) - rtcdata.scan_indices.data(2) + 1;
217 return tuple_t(rtcdata,scan_rawobs);
227 logger->info(
"normalizing maps");
228 omb.normalize_maps();
230 logger->info(
"calculating map psd");
233 logger->info(
"calculating map histogram");
236 omb.calc_median_err();
238 omb.calc_median_rms();
245template <
class K
idsProc>
247 auto farm = grppi::farm(
n_threads,[&](
auto &input_tuple) {
249 auto& rtcdata = std::get<0>(input_tuple);
251 auto& scan_rawobs = std::get<1>(input_tuple);
254 Eigen::Index si = rtcdata.scan_indices.data(2);
257 Eigen::Index sl = rtcdata.scan_indices.data(3) - rtcdata.scan_indices.data(2) + 1;
266 rtcdata.pointing_offsets_arcsec.data[axis] = offset.segment(si,sl);
277 rtcdata.flags.data.resize(rtcdata.scans.data.rows(), rtcdata.scans.data.cols());
278 rtcdata.flags.data.setConstant(0);
283 auto& mask =
masks[i];
288 for (
int j = 0; j < rtcdata.flags.data.rows(); ++j) {
294 size = end_index - start_index + 1;
296 if (mask(j + si) == 0) {
297 rtcdata.flags.data.block(start_index, start, size, end - start + 1).setOnes();
300 logger->debug(
"{}/{} gaps flagged", rtcdata.flags.data.col(start).template cast<int>().sum(), rtcdata.flags.data.rows());
308 logger->info(
"starting scan {}. {}/{} scans completed", rtcdata.index.data + 1,
n_scans_done,
312 logger->info(
"raw time chunk processing for scan {}", rtcdata.index.data + 1);
329 logger->info(
"writing raw time chunk");
331 ptcdata.pointing_offsets_arcsec.data,
calib);
337 logger->info(
"subtracting map from tod");
345 logger->info(
"processed time chunk processing for scan {}", ptcdata.index.data + 1);
351 logger->info(
"calculating weights");
359 bool run_omb =
false;
360 logger->info(
"populating noise maps");
370 logger->info(
"adding map to tod");
381 logger->info(
"calculating weights");
390 logger->info(
"writing processed time chunk");
392 ptcdata.pointing_offsets_arcsec.data,
calib);
402 logger->debug(
"calculating stats");
408 bool run_noise_fruit;
414 run_noise_fruit =
false;
419 logger->info(
"populating maps");
440 logger->info(
"fitting maps");
442 std::vector<int> map_in_vec, map_out_vec;
444 map_in_vec.resize(
n_maps);
445 std::iota(map_in_vec.begin(), map_in_vec.end(), 0);
446 map_out_vec.resize(
n_maps);
448 double init_row = -99;
449 double init_col = -99;
452 grppi::map(tula::grppi_utils::dyn_ex(
parallel_policy), map_in_vec, map_out_vec, [&](
auto i) {
456 auto [map_params, map_perror, good_fit] =
458 params.row(i) = map_params;
476 Eigen::VectorXd lat(1), lon(1);
493template <mapmaking::MapType map_type>
498 std::vector<fitsIO<file_type_enum::write_fits, CCfits::ExtHDU*>>* f_io =
nullptr;
500 std::vector<fitsIO<file_type_enum::write_fits, CCfits::ExtHDU*>>* n_io =
nullptr;
503 std::string dir_name;
521 for (Eigen::Index i = 0; i <
n_maps; ++i) {
530 ppt_table.col(i) =
params.col(j).cast<
float>();
531 ppt_table.col(i + 1) =
perrors.col(j).cast<
float>();
554 if (!f_io->empty()) {
557 tula::logging::progressbar pb(
558 [&](
const auto &msg) {
logger->info(
"{}", msg); }, 100,
"output progress ");
560 for (Eigen::Index i=0; i<f_io->size(); i++) {
564 if (!mb->
noise.empty()) {
571 for (Eigen::Index i=0; i<
n_maps; i++) {
586 std::string extname = f_io->at(map_index).hdus.at(k)->name();
588 std::size_t found = extname.find(
"signal");
591 while (found==std::string::npos && k<f_io->at(map_index).hdus.size()) {
594 extname = f_io->at(map_index).hdus.at(k)->name();
596 found = extname.find(
"signal");
600 for (Eigen::Index j = 0; j <
ppt_header.size(); ++j) {
603 f_io->at(map_index).hdus.at(k)->addKey(
"POINTING." + key, ppt_table(i, j), key +
" (" +
ppt_header_units[key] +
")");
605 f_io->at(map_index).hdus.at(k)->addKey(
"POINTING." + key, 0, key +
" (" +
ppt_header_units[key] +
")");
612 logger->info(
"maps have been written to:");
613 for (
const auto& file: *f_io) {
614 logger->info(
"{}.fits", file.filepath);
623 logger->debug(
"writing psds");
624 write_psd<map_type>(mb, dir_name);
625 logger->debug(
"writing histograms");
626 write_hist<map_type>(mb, dir_name);
630 logger->debug(
"writing source table");
631 write_sources<map_type>(mb, dir_name);
Eigen::Index hwpr_start_indices
Definition engine.h:208
void obsnum_setup()
Definition engine.h:353
std::string obsnum_dir_name
Definition engine.h:184
void write_stats()
Definition engine.h:2251
std::string parallel_policy
Definition engine.h:196
std::map< std::string, Eigen::VectorXd > pointing_offsets_arcsec
Definition engine.h:241
std::vector< fitsIO< file_type_enum::write_fits, CCfits::ExtHDU * > > filtered_coadd_fits_io_vec
Definition engine.h:251
std::vector< Eigen::Index > start_indices
Definition engine.h:205
std::vector< Eigen::VectorXd > nw_times
Definition engine.h:166
std::vector< fitsIO< file_type_enum::write_fits, CCfits::ExtHDU * > > noise_fits_io_vec
Definition engine.h:246
std::vector< fitsIO< file_type_enum::write_fits, CCfits::ExtHDU * > > coadd_noise_fits_io_vec
Definition engine.h:250
std::string tod_output_type
Definition engine.h:223
std::string coadd_dir_name
Definition engine.h:184
std::vector< fitsIO< file_type_enum::write_fits, CCfits::ExtHDU * > > filtered_noise_fits_io_vec
Definition engine.h:247
Eigen::VectorXI maps_to_arrays
Definition engine.h:232
bool verbose_mode
Definition engine.h:172
int n_maps
Definition engine.h:229
Eigen::VectorXI arrays_to_maps
Definition engine.h:232
std::vector< fitsIO< file_type_enum::write_fits, CCfits::ExtHDU * > > filtered_fits_io_vec
Definition engine.h:247
int n_scans_done
Definition engine.h:199
void add_tod_header()
Definition engine.h:1054
std::vector< Eigen::Index > end_indices
Definition engine.h:205
Eigen::VectorXd t_common
Definition engine.h:164
std::vector< fitsIO< file_type_enum::write_fits, CCfits::ExtHDU * > > filtered_coadd_noise_fits_io_vec
Definition engine.h:251
void add_phdu(fits_io_type &, map_buffer_t &, Eigen::Index)
Definition engine.h:1737
std::string redu_type
Definition engine.h:214
std::vector< Eigen::VectorXi > masks
Definition engine.h:165
std::string map_grouping
Definition engine.h:226
std::shared_ptr< spdlog::logger > logger
Definition engine.h:161
std::map< std::string, std::string > tod_filename
Definition engine.h:187
std::string tod_type
Definition engine.h:211
std::string obsnum
Definition engine.h:217
std::vector< fitsIO< file_type_enum::write_fits, CCfits::ExtHDU * > > coadd_fits_io_vec
Definition engine.h:250
std::vector< std::string > date_obs
Definition engine.h:169
void write_chunk_summary(TCData< tc_t, Eigen::MatrixXd > &)
Definition engine.h:1529
std::vector< fitsIO< file_type_enum::write_fits, CCfits::ExtHDU * > > fits_io_vec
Definition engine.h:246
int n_threads
Definition engine.h:193
std::string map_method
Definition engine.h:226
void write_maps(fits_io_type &, fits_io_type &, map_buffer_t &, Eigen::Index)
Definition engine.h:2030
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:438
auto run(KidsProc &)
Definition pointing.h:246
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:494
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
std::map< Eigen::Index, std::tuple< Eigen::Index, Eigen::Index > > nw_limits
Definition calib.h:56
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
double fsmp
Definition telescope.h:42
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
Eigen::Index n_terms
Definition filter.h:19
void append_to_netcdf(TCData< TCDataKind::PTC, Eigen::MatrixXd > &, std::string, std::string, std::string &, pointing_offset_t &, calib_t &)
Definition ptcproc.h:498
void calc_weights(TCData< TCDataKind::PTC, Eigen::MatrixXd > &, apt_type &, tel_type &)
Definition ptcproc.h:300
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:383
void remove_flagged_dets(TCData< TCDataKind::PTC, Eigen::MatrixXd > &, apt_t &)
Definition rtcproc.h:493
bool run_polarization
Definition rtcproc.h:23
timestream::Filter filter
Definition rtcproc.h:35
bool run_tod_filter
Definition rtcproc.h:26
auto remove_nearby_tones(TCData< TCDataKind::PTC, Eigen::MatrixXd > &, calib_t &, std::string)
Definition rtcproc.h:516
void append_to_netcdf(TCData< TCDataKind::PTC, Eigen::MatrixXd > &, std::string, std::string, std::string &, pointing_offset_t &, calib_t &)
Definition rtcproc.h:553
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:109
engine::Telescope telescope
Definition engine.h:96
engine_utils::mapFitter map_fitter
Definition engine.h:99
engine::Diagnostics diagnostics
Definition engine.h:98
engine_utils::toltecIO toltec_io
Definition engine.h:97
timestream::PTCProc ptcproc
Definition engine.h:105
mapmaking::JincMapmaker jinc_mm
Definition engine.h:110
mapmaking::MapBuffer omb
Definition engine.h:108
mapmaking::MapBuffer cmb
Definition engine.h:108
timestream::RTCProc rtcproc
Definition engine.h:102
engine::Calib calib
Definition engine.h:95
bool run_noise
Definition engine.h:86
bool interp_over_gaps
Definition engine.h:73
bool run_source_finder
Definition engine.h:90
bool run_tod_output
Definition engine.h:81
bool run_mapmaking
Definition engine.h:84
TC data class.
Definition timestream.h:55