Commit eecf0c9d29d43b24ecfd3dba3e5251710c42a7ce

Authored by Jürgen Knödlseder
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  
... ...