Commit 4ec635a29e4627bfecd66691706067cc40693038

Authored by Luigi Tibaldo
1 parent b621fc01

added convenience methods for Python

cscripts/csscs.par
... ... @@ -64,7 +64,6 @@ fix_bkg, b, h, no,,, "Fix background normalisation"
64 64 # Standard parameters
65 65 #====================
66 66 nthreads, i, h, 0,0,1000, "Number of parallel processes (0=use all available CPUs)"
67   -publish, b, h, no,,, "Publish output map on VO Hub?"
68 67 chatter, i, h, 2,0,4, "Chattiness of output"
69 68 clobber, b, h, yes,,, "Overwrite existing output files with new output files?"
70 69 debug, b, h, no,,, "Activate debugging mode?"
... ...
cscripts/csscs.py
... ... @@ -227,11 +227,8 @@ class csscs(ctools.csobservation):
227 227 nsources = 0
228 228 # Verify if model is of type GModelSky
229 229 for model in self.obs().models():
230   - try:
231   - gammalib.GModelSky(model)
  230 + if model.classname() == 'GModelSky':
232 231 nsources +=1
233   - except:
234   - pass
235 232 # If there are background gamma-ray sources in the model
236 233 # throw runtime error
237 234 if nsources > len(self._srcnames):
... ... @@ -286,7 +283,7 @@ class csscs(ctools.csobservation):
286 283 # Write header
287 284 self._log_header1(gammalib.TERSE, 'Adjust model parameters')
288 285  
289   - # Adjust model parameters dependent on input user parameters
  286 + # Adjust model parameters based on input user parameters
290 287 for model in self.obs().models():
291 288  
292 289 # Initialise TS flag for all models to false
... ... @@ -619,10 +616,8 @@ class csscs(ctools.csobservation):
619 616 # Create new Fits object
620 617 fits = gammalib.GFits()
621 618  
622   - # If more than one source of interest
623   - # append empty primary HDU
624   - if len(self._srcnames) > 1:
625   - fits.append(gammalib.GFitsImageDouble())
  619 + # Append empty primary HDU
  620 + fits.append(gammalib.GFitsImageDouble())
626 621  
627 622 # Prepare some header cards
628 623 # Flux units
... ... @@ -674,6 +669,45 @@ class csscs(ctools.csobservation):
674 669 # Return
675 670 return fits
676 671  
  672 + def _get_skymap(self, name, quantity):
  673 + """
  674 + Fetches skymap from FITS container
  675 +
  676 + Parameters
  677 + ----------
  678 + name : str
  679 + Source name
  680 + quantity : str
  681 + Quantity
  682 +
  683 + Returns
  684 + -------
  685 + skymap : `~gammalib.GSkyMap`
  686 + Skymap
  687 +
  688 + Raises
  689 + ------
  690 + NameError
  691 + """
  692 +
  693 + # Initialise skymap object
  694 + skymap = None
  695 +
  696 + if self._fits != None:
  697 + hduname = name + ' ' + quantity
  698 + try:
  699 + if name in self._srcnames:
  700 + hdu = self._fits[hduname]
  701 + skymap = gammalib.GSkyMap(hdu)
  702 + else:
  703 + print('ERROR: Source "' + name + '" not found in list of target sources.')
  704 + raise NameError(name)
  705 + except:
  706 + print('ERROR: HDU "' + hduname + '" not found in FITS container.')
  707 + raise NameError(hduname)
  708 +
  709 + return skymap
  710 +
677 711  
678 712 # Public methods
679 713 def run(self):
... ... @@ -690,7 +724,7 @@ class csscs(ctools.csobservation):
690 724 # Write input observation container into logger
691 725 self._log_observations(gammalib.NORMAL, self.obs(), 'Input observation')
692 726  
693   - # Adjust model parameters dependent on input user parameters
  727 + # Adjust model parameters based on input user parameters
694 728 self._adjust_model_pars()
695 729  
696 730 # Compute number of pixels of output map
... ... @@ -765,6 +799,94 @@ class csscs(ctools.csobservation):
765 799 # Return
766 800 return self._excl_reg_map
767 801  
  802 + def fits(self):
  803 + """
  804 + Return fits container
  805 +
  806 + Returns
  807 + -------
  808 + fits : `~gammalib.GFits()`
  809 + FITS file containing the maps
  810 + """
  811 + # Return
  812 + return self._fits
  813 +
  814 + def flux(self,name):
  815 + """
  816 + Return flux skymap
  817 +
  818 + Parameters
  819 + ----------
  820 + name : str
  821 + Source name
  822 +
  823 + Returns
  824 + -------
  825 + skymap : `~gammalib.GSkyMap`
  826 + Flux skymap
  827 + """
  828 +
  829 + skymap = self._get_skymap(name,'FLUX')
  830 +
  831 + return skymap
  832 +
  833 + def flux_error(self,name):
  834 + """
  835 + Return flux error skymap
  836 +
  837 + Parameters
  838 + ----------
  839 + name : str
  840 + Source name
  841 +
  842 + Returns
  843 + -------
  844 + skymap : `~gammalib.GSkyMap`
  845 + Flux error skymap
  846 + """
  847 +
  848 + skymap = self._get_skymap(name,'FLUX ERROR')
  849 +
  850 + return skymap
  851 +
  852 + def ts(self,name):
  853 + """
  854 + Return TS skymap
  855 +
  856 + Parameters
  857 + ----------
  858 + name : str
  859 + Source name
  860 +
  861 + Returns
  862 + -------
  863 + skymap : `~gammalib.GSkyMap`
  864 + TS skymap
  865 + """
  866 +
  867 + skymap = self._get_skymap(name,'TS')
  868 +
  869 + return skymap
  870 +
  871 + def ulimit(self,name):
  872 + """
  873 + Return flux upper limit skymap
  874 +
  875 + Parameters
  876 + ----------
  877 + name : str
  878 + Source name
  879 +
  880 + Returns
  881 + -------
  882 + skymap : `~gammalib.GSkyMap`
  883 + Flux upper limit skymap
  884 + """
  885 +
  886 + skymap = self._get_skymap(name,'FLUX UPPER LIMIT')
  887 +
  888 + return skymap
  889 +
768 890  
769 891 # ======================== #
770 892 # Main routine entry point #
... ...