Commit eecf0c9d29d43b24ecfd3dba3e5251710c42a7ce
1 parent
9051002e
ctfindvar does not save anything if it has nothing to save
Showing
1 changed file
with
52 additions
and
36 deletions
src/ctfindvar/ctfindvar.cpp
| ... | ... | @@ -262,45 +262,70 @@ void ctfindvar::save(void) |
| 262 | 262 | // Write header |
| 263 | 263 | log_header1(TERSE, "Saving results"); |
| 264 | 264 | |
| 265 | - // Write counts cube | |
| 265 | + // Save counts cube if a valid filename is given and the counts cube is | |
| 266 | + // not empty | |
| 266 | 267 | if ((*this)["outcube"].is_valid()) { |
| 267 | 268 | |
| 268 | 269 | // Get counts cube output filename |
| 269 | 270 | GFilename outcube = (*this)["outcube"].filename(); |
| 270 | 271 | |
| 271 | - // Save counts cube | |
| 272 | - m_counts.save(outcube, (*this)["clobber"].boolean()); | |
| 272 | + // Save counts cube if it is not empty. Otherwise signal that no | |
| 273 | + // counts cube was saved. | |
| 274 | + if (!m_counts.is_empty()) { | |
| 275 | + m_counts.save(outcube, (*this)["clobber"].boolean()); | |
| 276 | + log_value(TERSE, "Counts cube file", outcube.url()); | |
| 277 | + } | |
| 278 | + else { | |
| 279 | + log_value(TERSE, "Counts cube file", | |
| 280 | + outcube.url()+" (cube is empty, no file created)"); | |
| 281 | + } | |
| 273 | 282 | |
| 274 | - // Log saving | |
| 275 | - log_value(TERSE, "Saving counts cube", outcube); | |
| 276 | 283 | } |
| 277 | 284 | |
| 278 | - // Create a FITS file for storing the output | |
| 279 | - GFits fits; | |
| 285 | + // Get output map and model filenames | |
| 286 | + GFilename outmap = (*this)["outmap"].filename(); | |
| 287 | + GFilename outmodel = (*this)["outmodel"].filename(); | |
| 280 | 288 | |
| 281 | - // Write the most significant values for each pixel | |
| 282 | - m_peaksigmap.write(fits, "PEAKSIGMAP"); | |
| 289 | + // Save output map if the significance map is not empty | |
| 290 | + if (!m_peaksigmap.is_empty()) { | |
| 283 | 291 | |
| 284 | - // Write source histograms | |
| 285 | - write_source_histograms(fits); | |
| 292 | + // Create a FITS file for storing the output | |
| 293 | + GFits fits; | |
| 286 | 294 | |
| 287 | - // Get output map filename | |
| 288 | - GFilename outmap = (*this)["outmap"].filename(); | |
| 295 | + // Write the most significant values for each pixel | |
| 296 | + m_peaksigmap.write(fits, "PEAKSIGMAP"); | |
| 289 | 297 | |
| 290 | - // Save output map | |
| 291 | - fits.saveto(outmap, (*this)["clobber"].boolean()); | |
| 298 | + // Write source histograms | |
| 299 | + write_source_histograms(fits); | |
| 292 | 300 | |
| 293 | - // Log saving | |
| 294 | - log_value(TERSE, "Saving output map", outmap); | |
| 301 | + // Save significance map | |
| 302 | + fits.saveto(outmap, (*this)["clobber"].boolean()); | |
| 295 | 303 | |
| 296 | - // Get output model definition file filename | |
| 297 | - GFilename outmodel = (*this)["outmodel"].filename(); | |
| 304 | + // Log saving | |
| 305 | + log_value(TERSE, "Output map file", outmap.url()); | |
| 298 | 306 | |
| 299 | - // Save model | |
| 300 | - m_model_above_thr.save(outmodel); | |
| 307 | + } | |
| 308 | + else { | |
| 309 | + log_value(TERSE, "Output map file", | |
| 310 | + outmap.url()+" (map is empty, no file created)"); | |
| 311 | + } | |
| 301 | 312 | |
| 302 | - // Log saving | |
| 303 | - log_value(TERSE, "Saving output model", outmodel); | |
| 313 | + // Save model definiton XML file if the significance map is not empty. | |
| 314 | + // This may store an empty model in case that none of the pixels is | |
| 315 | + // above threshold. | |
| 316 | + if (!m_peaksigmap.is_empty()) { | |
| 317 | + | |
| 318 | + // Save model | |
| 319 | + m_model_above_thr.save(outmodel); | |
| 320 | + | |
| 321 | + // Log saving | |
| 322 | + log_value(TERSE, "Model definition file", outmodel.url()); | |
| 323 | + | |
| 324 | + } | |
| 325 | + else { | |
| 326 | + log_value(TERSE, "Model definition file", | |
| 327 | + outmodel.url()+" (map is empty, no file created)"); | |
| 328 | + } | |
| 304 | 329 | |
| 305 | 330 | // Return |
| 306 | 331 | return; |
| ... | ... | @@ -415,11 +440,9 @@ void ctfindvar::get_parameters(void) |
| 415 | 440 | // Get minimum significance to set a source as variable |
| 416 | 441 | m_sig_threshold = (*this)["threshold"].real(); |
| 417 | 442 | |
| 418 | - // Query smoothing parameters | |
| 419 | - if ((*this)["smooth_kernel"].is_valid()) { | |
| 420 | - (*this)["smooth_kernel"].string(); | |
| 421 | - (*this)["smooth_rad"].real(); | |
| 422 | - } | |
| 443 | + // Query (hidden) smoothing parameters | |
| 444 | + (*this)["smooth_kernel"].string(); | |
| 445 | + (*this)["smooth_rad"].real(); | |
| 423 | 446 | |
| 424 | 447 | // If needed later, query output filenames now |
| 425 | 448 | if (read_ahead()) { |
| ... | ... | @@ -561,8 +584,7 @@ void ctfindvar::create_cube(void) |
| 561 | 584 | } // endfor: looped over observations |
| 562 | 585 | |
| 563 | 586 | // Smooth the maps if requested |
| 564 | - if ((*this)["smooth_kernel"].is_valid() && | |
| 565 | - (*this)["smooth_kernel"].string() != "NONE") { | |
| 587 | + if ((*this)["smooth_kernel"].string() != "NONE") { | |
| 566 | 588 | m_counts.smooth((*this)["smooth_kernel"].string(), |
| 567 | 589 | (*this)["smooth_rad"].real()); |
| 568 | 590 | } |
| ... | ... | @@ -717,12 +739,6 @@ void ctfindvar::analyse_cube(void) |
| 717 | 739 | #pragma omp parallel for |
| 718 | 740 | for (int ipix = 0; ipix < m_counts.npix(); ++ipix) { |
| 719 | 741 | |
| 720 | - // Compute total counts for pixel | |
| 721 | - //double total_counts = 0.0; | |
| 722 | - //for (int k = 0; k < nbins; ++k) { | |
| 723 | - // total_counts += m_counts(ipix, k); | |
| 724 | - //} | |
| 725 | - | |
| 726 | 742 | // Getting the variability significance for the current pixel |
| 727 | 743 | GNdarray pixSig = get_variability_sig(ipix); |
| 728 | 744 | ... | ... |