Commit b7aca2b49942baa0393d4dfeefaf8de7634f4933
1 parent
5b47c172
write DS keywords
Showing
2 changed files
with
45 additions
and
56 deletions
src/ctselect/ctselect.cpp
| 1 | 1 | /*************************************************************************** |
| 2 | 2 | * ctselect - CTA data selection tool * |
| 3 | 3 | * ----------------------------------------------------------------------- * |
| 4 | - * copyright (C) 2010 by Jurgen Knodlseder * | |
| 4 | + * copyright (C) 2010-2011 by Jurgen Knodlseder * | |
| 5 | 5 | * ----------------------------------------------------------------------- * |
| 6 | 6 | * * |
| 7 | 7 | * This program is free software; you can redistribute it and/or modify * |
| ... | ... | @@ -29,7 +29,7 @@ |
| 29 | 29 | #define STRING_COLUMN_TEST 1 |
| 30 | 30 | |
| 31 | 31 | /* __ Coding definitions _________________________________________________ */ |
| 32 | -#define SELECT_TIME 0 | |
| 32 | +#define SELECT_TIME 1 | |
| 33 | 33 | #define SELECT_ENERGY 1 |
| 34 | 34 | #define SELECT_ROI 1 |
| 35 | 35 | |
| ... | ... | @@ -124,6 +124,9 @@ void ctselect::run(void) |
| 124 | 124 | // Append GTI to FITS file |
| 125 | 125 | append_gti(); |
| 126 | 126 | |
| 127 | + // Set data selection keywords | |
| 128 | + write_ds_keys(); | |
| 129 | + | |
| 127 | 130 | // Save output FITS file |
| 128 | 131 | m_file.saveto(m_outfile, clobber()); |
| 129 | 132 | |
| ... | ... | @@ -263,61 +266,47 @@ void ctselect::append_gti(void) |
| 263 | 266 | |
| 264 | 267 | |
| 265 | 268 | /***********************************************************************//** |
| 266 | - * @brief Copy events | |
| 269 | + * @brief Write data selection keywords | |
| 267 | 270 | * |
| 268 | - * This is some old code that is not used but that is kept for the moment | |
| 269 | - * for debugging purposes. | |
| 271 | + * @todo This is a very dumb data selection keyword writing routine that does | |
| 272 | + * not take into account any existing keywords. We definitely want a | |
| 273 | + * more secure logic that checks for existing keywords and possible | |
| 274 | + * conflicts. But for this prototype software, this code does the job. | |
| 270 | 275 | ***************************************************************************/ |
| 271 | -void ctselect::copy(void) | |
| 276 | +void ctselect::write_ds_keys(void) | |
| 272 | 277 | { |
| 273 | - // Open FITS file | |
| 274 | - GFits file(m_infile); | |
| 275 | - //std::cout << file << std::endl; | |
| 276 | - | |
| 277 | - // Optional perform Bit column testing | |
| 278 | - #if BIT_COLUMN_TEST | |
| 279 | - GFitsTableBitCol* ptr = (GFitsTableBitCol*)file.table("EVENTS")->column("TELMASK"); | |
| 280 | - for (int i = 0; i < ptr->length(); ++i) { | |
| 281 | - std::cout << i << ": "; | |
| 282 | - for (int k = 0; k < ptr->number(); ++k) | |
| 283 | - std::cout << (int)(*(ptr))(i, k) << " "; | |
| 284 | - std::cout << std::endl; | |
| 285 | - } | |
| 286 | - (*(ptr))(8507, 1) = true; | |
| 287 | - (*(ptr))(8508, 0) = false; | |
| 288 | - (*(ptr))(8509, 1) = false; | |
| 289 | - (*(ptr))(8509, 2) = false; | |
| 290 | - std::cout << "change now:" << std::endl; | |
| 291 | - for (int i = 8507; i < 8510; ++i) { | |
| 292 | - std::cout << i << ": "; | |
| 293 | - for (int k = 0; k < ptr->number(); ++k) | |
| 294 | - std::cout << (int)(*(ptr))(i, k) << " "; | |
| 295 | - std::cout << std::endl; | |
| 296 | - } | |
| 297 | - #endif | |
| 298 | - | |
| 299 | - // Optional perform String column testing | |
| 300 | - #if STRING_COLUMN_TEST | |
| 301 | - GFitsTableStringCol* ptr = (GFitsTableStringCol*)file.table("ANALYSIS")->column("UNIT"); | |
| 302 | - std::cout << "Anynul: " << ptr->anynul() << std::endl; | |
| 303 | - for (int i = 0; i < ptr->length(); ++i) { | |
| 304 | - std::cout << "\"" << ptr->string(i) << "\"" << std::endl; | |
| 305 | - } | |
| 306 | - #endif | |
| 307 | - | |
| 308 | - // Save file | |
| 309 | - file.saveto(m_outfile, true); | |
| 310 | - //std::cout << file << std::endl; | |
| 311 | - | |
| 312 | - // Optional perform String column testing | |
| 313 | - #if STRING_COLUMN_TEST | |
| 314 | - GFits file2(m_outfile); | |
| 315 | - GFitsTableStringCol* ptr2 = (GFitsTableStringCol*)file2.table("ANALYSIS")->column("UNIT"); | |
| 316 | - std::cout << "Anynul: " << ptr2->anynul() << std::endl; | |
| 317 | - for (int i = 0; i < ptr2->length(); ++i) { | |
| 318 | - std::cout << "\"" << ptr2->string(i) << "\"" << std::endl; | |
| 319 | - } | |
| 320 | - #endif | |
| 278 | + // Get event list header | |
| 279 | + GFitsHDU* hdu = m_file.hdu("EVENTS"); | |
| 280 | + | |
| 281 | + // Continue only if HDU is valid | |
| 282 | + if (hdu != NULL) { | |
| 283 | + | |
| 284 | + // Set cone selection string | |
| 285 | + std::string dsval2 = "CIRCLE("+str(m_ra)+","+str(m_dec)+","+str(m_rad)+")"; | |
| 286 | + | |
| 287 | + // Set energy selection string | |
| 288 | + std::string dsval3 = str(m_emin)+":"+str(m_emax); | |
| 289 | + | |
| 290 | + // Add time selection keywords | |
| 291 | + hdu->card("DSTYP1", "TIME", "Data selection type"); | |
| 292 | + hdu->card("DSUNI1", "s", "Data selection unit"); | |
| 293 | + hdu->card("DSVAL1", "TABLE", "Data selection value"); | |
| 294 | + hdu->card("DSREF1", ":GTI", "Data selection reference"); | |
| 295 | + | |
| 296 | + // Add acceptance cone selection | |
| 297 | + hdu->card("DSTYP2", "POS(RA,DEC)", "Data selection type"); | |
| 298 | + hdu->card("DSUNI2", "deg", "Data selection unit"); | |
| 299 | + hdu->card("DSVAL2", dsval2, "Data selection value"); | |
| 300 | + | |
| 301 | + // Add energy range selection | |
| 302 | + hdu->card("DSTYP3", "ENERGY", "Data selection type"); | |
| 303 | + hdu->card("DSUNI3", "TeV", "Data selection unit"); | |
| 304 | + hdu->card("DSVAL3", dsval3, "Data selection value"); | |
| 305 | + | |
| 306 | + // Set number of data selection keys | |
| 307 | + hdu->card("NDSKEYS", 3, "Number of data selections"); | |
| 308 | + | |
| 309 | + } // endif: HDU was valid | |
| 321 | 310 | |
| 322 | 311 | // Return |
| 323 | 312 | return; | ... | ... |
src/ctselect/ctselect.hpp
| 1 | 1 | /*************************************************************************** |
| 2 | 2 | * ctselect - CTA data selection tool * |
| 3 | 3 | * ----------------------------------------------------------------------- * |
| 4 | - * copyright (C) 2010 by Jurgen Knodlseder * | |
| 4 | + * copyright (C) 2010-2011 by Jurgen Knodlseder * | |
| 5 | 5 | * ----------------------------------------------------------------------- * |
| 6 | 6 | * * |
| 7 | 7 | * This program is free software; you can redistribute it and/or modify * |
| ... | ... | @@ -44,7 +44,7 @@ public: |
| 44 | 44 | void get_parameters(void); |
| 45 | 45 | void select(void); |
| 46 | 46 | void append_gti(void); |
| 47 | - void copy(void); | |
| 47 | + void write_ds_keys(void); | |
| 48 | 48 | |
| 49 | 49 | protected: |
| 50 | 50 | // Protected methods | ... | ... |