From 9b64cc3b0850d5917da4791c99b73f7e66b0cd67 Mon Sep 17 00:00:00 2001
From: Aaron LI <aly@aaronly.me>
Date: Wed, 13 Dec 2017 19:20:47 +0800
Subject: astro/crosstalk_deprojection.py: do not use sys.stderr

---
 astro/spectrum/crosstalk_deprojection.py | 110 ++++++++++++++-----------------
 1 file changed, 50 insertions(+), 60 deletions(-)

(limited to 'astro/spectrum')

diff --git a/astro/spectrum/crosstalk_deprojection.py b/astro/spectrum/crosstalk_deprojection.py
index e027663..6e1f271 100755
--- a/astro/spectrum/crosstalk_deprojection.py
+++ b/astro/spectrum/crosstalk_deprojection.py
@@ -298,7 +298,7 @@ class ARF:  # {{{
             arf = self.get_data(copy=False)
             if verbose:
                 print("INFO: Interpolating ARF '%s' (may take a while) ..." %
-                      self.filename, file=sys.stderr)
+                      self.filename)
             f_interp = scipy.interpolate.interp1d(
                 self.energy, arf, kind="quadratic", bounds_error=False,
                 fill_value=0.0, assume_sorted=True)
@@ -323,8 +323,7 @@ class ARF:  # {{{
         if self.groupped:
             return
         if verbose:
-            print("INFO: Grouping ARF '%s' ..." % self.filename,
-                  file=sys.stderr)
+            print("INFO: Grouping ARF '%s' ..." % self.filename)
         self.energy_channel = energy_channel
         self.grouping = grouping
         # interpolate the ARF w.r.t the spectral channel energies
@@ -952,7 +951,7 @@ class SpectrumSet(Spectrum):  # {{{
         operation = ("  SUBTRACT_BACKGROUND: %s - %s * %s" %
                      (self.filename, ratio, self.bkg.filename))
         if verbose:
-            print(operation, file=sys.stderr)
+            print(operation)
         energy = self.energy
         eidx = ((energy >= CONFIGS["info_emin"]) &
                 (energy <= CONFIGS["info_emax"]))
@@ -999,7 +998,7 @@ class SpectrumSet(Spectrum):  # {{{
             self.filename, cross_arf.filename, spectrumset.arf.filename,
             spectrumset.filename)
         if verbose:
-            print(operation, file=sys.stderr)
+            print(operation)
         energy = self.energy
         if groupped:
             spectrumset.arf.apply_grouping(energy_channel=energy,
@@ -1050,7 +1049,7 @@ class SpectrumSet(Spectrum):  # {{{
             self.filename, cross_arf.filename, self.arf.filename,
             self.filename)
         if verbose:
-            print(operation, file=sys.stderr)
+            print(operation)
         energy = self.energy
         if groupped:
             cross_arf.apply_grouping(energy_channel=energy,
@@ -1093,16 +1092,16 @@ class SpectrumSet(Spectrum):  # {{{
         neg_channels = np.arange(N, dtype=int)[neg_counts]
         if len(neg_channels) > 0:
             print("WARNING: %d channels have NEGATIVE counts" %
-                  len(neg_channels), file=sys.stderr)
+                  len(neg_channels))
         i = 0
         while len(neg_channels) > 0:
             i += 1
             if verbose:
                 if i == 1:
                     print("*** Fixing negative channels: iter %d..." % i,
-                          end="", file=sys.stderr)
+                          end="")
                 else:
-                    print("%d..." % i, end="", file=sys.stderr)
+                    print("%d..." % i, end="")
             for ch in neg_channels:
                 neg_val = self.spec_data[ch]
                 if ch < N-2:
@@ -1115,7 +1114,7 @@ class SpectrumSet(Spectrum):  # {{{
             neg_counts = self.spec_data < 0
             neg_channels = np.arange(N, dtype=int)[neg_counts]
         if i > 0:
-            print("FIXED!", file=sys.stderr)
+            print("FIXED!")
             # record history
             if add_history:
                 self.header.add_history("  FIXED NEGATIVE CHANNELS")
@@ -1242,7 +1241,7 @@ class Crosstalk:  # {{{
         # background subtraction
         if subtract_bkg:
             if verbose:
-                print("INFO: subtract background ...", file=sys.stderr)
+                print("INFO: subtract background ...")
             self.spectrumset.subtract_bkg(inplace=True,
                                           add_history=add_history,
                                           verbose=verbose)
@@ -1253,7 +1252,7 @@ class Crosstalk:  # {{{
                                      verbose=verbose)
         # subtractions
         if verbose:
-            print("INFO: apply subtractions ...", file=sys.stderr)
+            print("INFO: apply subtractions ...")
         for specset, cross_arf in zip(self.cross_in_specset,
                                       self.cross_in_arf):
             self.spectrumset.subtract(
@@ -1262,7 +1261,7 @@ class Crosstalk:  # {{{
                 add_history=add_history, verbose=verbose)
         # compensations
         if verbose:
-            print("INFO: apply compensations ...", file=sys.stderr)
+            print("INFO: apply compensations ...")
         for cross_arf in self.cross_out_arf:
             self.spectrumset.compensate(
                 cross_arf=cross_arf, groupped=self.groupped,
@@ -1271,7 +1270,7 @@ class Crosstalk:  # {{{
         # fix negative values in channels
         if fix_negative:
             if verbose:
-                print("INFO: fix negative channel values ...", file=sys.stderr)
+                print("INFO: fix negative channel values ...")
             self.spectrumset.fix_negative(add_history=add_history,
                                           verbose=verbose)
         if add_history:
@@ -1350,7 +1349,7 @@ class Deprojection:  # {{{
             spec.set_radius_inner(rin)
             if verbose:
                 print("Deprojection: loaded spectrum: radius: (%s, %s)" %
-                      (spec.radius_inner, spec.radius_outer), file=sys.stderr)
+                      (spec.radius_inner, spec.radius_outer))
         # Check EXPOSURE validity, the set of spectra from one detector
         # must have the (almost) same exposure times.
         # NOTE: different CCD chips may have a minor different exposure times.
@@ -1396,8 +1395,7 @@ class Deprojection:  # {{{
         #
         for shellnum in reversed(range(num_spec)):
             if verbose:
-                print("DEPROJECTION: deprojecting shell %d ..." % shellnum,
-                      file=sys.stderr)
+                print("DEPROJECTION: deprojecting shell %d ..." % shellnum)
             spec = self.spectra[shellnum]
             # calculate projected spectrum of outlying shells
             proj_spec = np.zeros(spec_shape, spec_dtype)
@@ -1540,8 +1538,8 @@ def main(config, subtract_bkg, fix_negative, mc_times,
         if "cross_out" in config_reg.sections:
             for arf in config_reg["cross_out"].as_list("cross_arf"):
                 arf_files.add((arf, None))
-    print("INFO: arf_files:", arf_files, file=sys.stderr)
-    print("INFO: rmf_files:", rmf_files, file=sys.stderr)
+    print("INFO: arf_files:", arf_files)
+    print("INFO: rmf_files:", rmf_files)
     arf_dict = {arf: ARF(arf, regid=reg)
                 for arf, reg in arf_files if arf is not None}
     rmf_dict = {rmf: RMF(rmf, regid=reg)
@@ -1562,7 +1560,7 @@ def main(config, subtract_bkg, fix_negative, mc_times,
     # correct crosstalk effects for each region first
     for region in config.sections:
         if verbose:
-            print("INFO: processing '%s' ..." % region, file=sys.stderr)
+            print("INFO: processing '%s' ..." % region)
         crosstalk = Crosstalk(config.get(region), regid=region,
                               arf_dict=arf_dict, rmf_dict=rmf_dict,
                               grouping=grouping, quality=quality)
@@ -1571,7 +1569,7 @@ def main(config, subtract_bkg, fix_negative, mc_times,
         # keep a (almost) clean copy of the crosstalk object
         crosstalks_cleancopy.append(crosstalk.copy())
         if verbose:
-            print("INFO: doing crosstalk correction ...", file=sys.stderr)
+            print("INFO: doing crosstalk correction ...")
         crosstalk.do_correction(subtract_bkg=subtract_bkg,
                                 fix_negative=fix_negative,
                                 group_squeeze=group_squeeze,
@@ -1580,26 +1578,24 @@ def main(config, subtract_bkg, fix_negative, mc_times,
 
     # load back the crosstalk-corrected spectra for deprojection
     if verbose:
-        print("INFO: preparing spectra for deprojection ...", file=sys.stderr)
+        print("INFO: preparing spectra for deprojection ...")
     deprojection = Deprojection(spectra=cc_spectra, grouping=grouping,
                                 quality=quality, verbose=verbose)
     if verbose:
-        print("INFO: scaling spectra according the region angular size...",
-              file=sys.stderr)
+        print("INFO: scaling spectra according the region angular size...")
     deprojection.scale(verbose=verbose)
     if verbose:
-        print("INFO: doing deprojection ...", file=sys.stderr)
+        print("INFO: doing deprojection ...")
     deprojection.do_deprojection(add_history=True, verbose=verbose)
     deproj_results = []
     deproj_results.append(deprojection.get_spec_data(
         group_squeeze=group_squeeze))
 
     # Monte Carlo for spectral group error estimation
-    print("INFO: Monte Carlo to estimate spectral errors (%d times) ..." %
-          mc_times, file=sys.stderr)
+    print("INFO: Monte Carlo to estimate errors (%d times) ..." % mc_times)
     for i in range(mc_times):
         if i % 50 == 0:
-            print("%d..." % i, end="", flush=True, file=sys.stderr)
+            print("%d..." % i, end="", flush=True)
         # correct crosstalk effects
         cc_spectra_copy = []
         for crosstalk in crosstalks_cleancopy:
@@ -1618,17 +1614,16 @@ def main(config, subtract_bkg, fix_negative, mc_times,
         deprojection_copy.do_deprojection(add_history=False, verbose=False)
         deproj_results.append(deprojection_copy.get_spec_data(
                 group_squeeze=group_squeeze))
-    print("DONE!", flush=True, file=sys.stderr)
+    print("DONE!", flush=True)
 
     if verbose:
-        print("INFO: Calculating the median and errors for each spectrum ...",
-              file=sys.stderr)
+        print("INFO: Calculating the median and errors for each spectrum ...")
     medians, errors = calc_median_errors(deproj_results)
     deprojection.set_spec_data(medians, group_squeeze=group_squeeze)
     deprojection.add_stat_err(errors, group_squeeze=group_squeeze)
     if verbose:
         print("INFO: Writing the crosstalk-corrected and deprojected " +
-              "spectra with estimated statistical errors ...", file=sys.stderr)
+              "spectra with estimated statistical errors ...")
     deprojection.fix_header()
     deprojection.write(clobber=clobber)
 # main routine }}}
@@ -1647,8 +1642,8 @@ def main_deprojection(config, mc_times, verbose=False, clobber=False,
         config_reg = config[region]
         arf_files.add((config_reg["arf"], region))
         rmf_files.add((config_reg["rmf"], region))
-    print("INFO: arf_files:", arf_files, file=sys.stderr)
-    print("INFO: rmf_files:", rmf_files, file=sys.stderr)
+    print("INFO: arf_files:", arf_files)
+    print("INFO: rmf_files:", rmf_files)
     arf_dict = {arf: ARF(arf, regid=reg)
                 for arf, reg in arf_files if arf is not None}
     rmf_dict = {rmf: RMF(rmf, regid=reg)
@@ -1663,7 +1658,7 @@ def main_deprojection(config, mc_times, verbose=False, clobber=False,
 
     # load spectra for deprojection
     if verbose:
-        print("INFO: preparing spectra for deprojection ...", file=sys.stderr)
+        print("INFO: preparing spectra for deprojection ...")
     proj_spectra = []
     for region in config.sections:
         config_reg = config[region]
@@ -1680,29 +1675,27 @@ def main_deprojection(config, mc_times, verbose=False, clobber=False,
     deprojection.apply_grouping(verbose=verbose)
     deprojection.estimate_errors()
     if verbose:
-        print("INFO: scaling spectra according the region angular size ...",
-              file=sys.stderr)
+        print("INFO: scaling spectra according the region angular size ...")
     deprojection.scale(verbose=verbose)
 
     # keep a (almost) clean copy of the input projected spectra
     proj_spectra_cleancopy = [spec.copy() for spec in proj_spectra]
 
     if verbose:
-        print("INFO: subtract the background ...", file=sys.stderr)
+        print("INFO: subtract the background ...")
     deprojection.subtract_bkg(verbose=verbose)
     if verbose:
-        print("INFO: doing deprojection ...", file=sys.stderr)
+        print("INFO: doing deprojection ...")
     deprojection.do_deprojection(add_history=True, verbose=verbose)
     deproj_results = []
     deproj_results.append(deprojection.get_spec_data(
             group_squeeze=group_squeeze))
 
     # Monte Carlo for spectral group error estimation
-    print("INFO: Monte Carlo to estimate spectral errors (%d times) ..." %
-          mc_times, file=sys.stderr)
+    print("INFO: Monte Carlo to estimate errors (%d times) ..." % mc_times)
     for i in range(mc_times):
         if i % 50 == 0:
-            print("%d..." % i, end="", flush=True, file=sys.stderr)
+            print("%d..." % i, end="", flush=True)
         # copy and randomize the input projected spectra
         proj_spectra_copy = [spec.copy().randomize()
                              for spec in proj_spectra_cleancopy]
@@ -1714,17 +1707,16 @@ def main_deprojection(config, mc_times, verbose=False, clobber=False,
         deprojection_copy.do_deprojection(add_history=False, verbose=False)
         deproj_results.append(deprojection_copy.get_spec_data(
                 group_squeeze=group_squeeze))
-    print("DONE!", flush=True, file=sys.stderr)
+    print("DONE!", flush=True)
 
     if verbose:
-        print("INFO: Calculating the median and errors for each spectrum ...",
-              file=sys.stderr)
+        print("INFO: Calculating the median and errors for each spectrum ...")
     medians, errors = calc_median_errors(deproj_results)
     deprojection.set_spec_data(medians, group_squeeze=group_squeeze)
     deprojection.add_stat_err(errors, group_squeeze=group_squeeze)
     if verbose:
         print("INFO: Writing the deprojected spectra " +
-              "with estimated statistical errors ...", file=sys.stderr)
+              "with estimated statistical errors ...")
     deprojection.fix_header()
     deprojection.write(clobber=clobber)
 # main_deprojection routine }}}
@@ -1749,8 +1741,8 @@ def main_crosstalk(config, subtract_bkg, fix_negative, mc_times,
         if "cross_out" in config_reg.sections:
             for arf in config_reg["cross_out"].as_list("cross_arf"):
                 arf_files.add((arf, None))
-    print("INFO: arf_files:", arf_files, file=sys.stderr)
-    print("INFO: rmf_files:", rmf_files, file=sys.stderr)
+    print("INFO: arf_files:", arf_files)
+    print("INFO: rmf_files:", rmf_files)
     arf_dict = {arf: ARF(arf, regid=reg)
                 for arf, reg in arf_files if arf is not None}
     rmf_dict = {rmf: RMF(rmf, regid=reg)
@@ -1775,7 +1767,7 @@ def main_crosstalk(config, subtract_bkg, fix_negative, mc_times,
     # correct crosstalk effects for each region first
     for region in config.sections:
         if verbose:
-            print("INFO: processing '%s' ..." % region, file=sys.stderr)
+            print("INFO: processing '%s' ..." % region)
         crosstalk = Crosstalk(config.get(region), regid=region,
                               arf_dict=arf_dict, rmf_dict=rmf_dict,
                               grouping=grouping, quality=quality)
@@ -1785,7 +1777,7 @@ def main_crosstalk(config, subtract_bkg, fix_negative, mc_times,
         # keep a (almost) clean copy of the crosstalk object
         crosstalks_cleancopy.append(crosstalk.copy())
         if verbose:
-            print("INFO: doing crosstalk correction ...", file=sys.stderr)
+            print("INFO: doing crosstalk correction ...")
         crosstalk.do_correction(subtract_bkg=subtract_bkg,
                                 fix_negative=fix_negative,
                                 group_squeeze=group_squeeze,
@@ -1799,11 +1791,10 @@ def main_crosstalk(config, subtract_bkg, fix_negative, mc_times,
                        for spec in cc_spectra])
 
     # Monte Carlo for spectral group error estimation
-    print("INFO: Monte Carlo to estimate spectral errors (%d times) ..." %
-          mc_times, file=sys.stderr)
+    print("INFO: Monte Carlo to estimate errors (%d times) ..." % mc_times)
     for i in range(mc_times):
         if i % 50 == 0:
-            print("%d..." % i, end="", flush=True, file=sys.stderr)
+            print("%d..." % i, end="", flush=True)
         # correct crosstalk effects
         cc_spectra_copy = []
         for crosstalk in crosstalks_cleancopy:
@@ -1816,15 +1807,14 @@ def main_crosstalk(config, subtract_bkg, fix_negative, mc_times,
             cc_spectra_copy.append(crosstalk_copy.get_spectrum(copy=True))
         cc_results.append([spec.get_data(group_squeeze=group_squeeze)
                            for spec in cc_spectra_copy])
-    print("DONE!", flush=True, file=sys.stderr)
+    print("DONE!", flush=True)
 
     if verbose:
-        print("INFO: Calculating the median and errors for each spectrum ...",
-              file=sys.stderr)
+        print("INFO: Calculating the median and errors for each spectrum ...")
     medians, errors = calc_median_errors(cc_results)
     if verbose:
         print("INFO: Writing the crosstalk-corrected spectra " +
-              "with estimated statistical errors ...", file=sys.stderr)
+              "with estimated statistical errors ...")
     for spec, data, err in zip(cc_spectra, medians, errors):
         spec.set_data(data, group_squeeze=group_squeeze)
         spec.add_stat_err(err, group_squeeze=group_squeeze)
@@ -1887,13 +1877,13 @@ if __name__ == "__main__":
         print("* %s: %s" % (k, v))
 
     if mode.lower() == "both":
-        print("MODE: CROSSTALK + DEPROJECTION", file=sys.stderr)
+        print("MODE: CROSSTALK + DEPROJECTION")
         main(configs, **CONFIGS)
     elif mode.lower() == "deprojection":
-        print("MODE: DEPROJECTION", file=sys.stderr)
+        print("MODE: DEPROJECTION")
         main_deprojection(configs, **CONFIGS)
     elif mode.lower() == "crosstalk":
-        print("MODE: CROSSTALK", file=sys.stderr)
+        print("MODE: CROSSTALK")
         main_crosstalk(configs, **CONFIGS)
     else:
         raise ValueError("Invalid operation mode: %s" % mode)
-- 
cgit v1.2.2