Commit 48524efbe910771c7bd6326e68ab88e4a11c73ba

Authored by Michael Mayer
1 parent c2657fcb

Added improvements, bug fixes and flexibility to some iact cscripts

cscripts/csiactdata.py
... ... @@ -40,9 +40,10 @@ class csiactdata(ctools.cscript):
40 40 Constructor.
41 41 """
42 42 # Set name
43   - self.name = "csiactdata"
44   - self.version = "1.0.0"
45   - self.datapath = os.getenv("VHEFITS","")
  43 + self.name = "csiactdata"
  44 + self.version = "1.0.0"
  45 + self.datapath = os.getenv("VHEFITS","")
  46 + self.prodnames = []
46 47  
47 48 # Make sure that parfile exists
48 49 file = self.parfile()
... ... @@ -156,6 +157,9 @@ class csiactdata(ctools.cscript):
156 157 data = json.loads(json_data)
157 158 configs = data["datasets"]
158 159  
  160 + # Initialise array for available names
  161 + self.prodnames = []
  162 +
159 163 # Loop over configs and display unavailable storage first
160 164 for config in configs:
161 165  
... ... @@ -204,6 +208,9 @@ class csiactdata(ctools.cscript):
204 208 self.log(str(config["hduindx"]))
205 209 self.log("\n")
206 210  
  211 + # Append to available names
  212 + self.prodnames.append(str(config["name"]))
  213 +
207 214 # Print additional information
208 215 for key in config:
209 216 if key in ["name","hduindx","obsindx"]:
... ... @@ -215,6 +222,14 @@ class csiactdata(ctools.cscript):
215 222 # Return
216 223 return
217 224  
  225 + def names(self):
  226 + """
  227 + Return available FITS production names
  228 + """
  229 +
  230 + # Return
  231 + return self.prodnames
  232 +
218 233 # ======================== #
219 234 # Main routine entry point #
220 235 # ======================== #
... ...
cscripts/csiactobs.py
... ... @@ -51,6 +51,7 @@ class csiactobs(ctools.cscript):
51 51 self.inmodels = None
52 52 self.xml = gammalib.GXml()
53 53 self.models = gammalib.GModels()
  54 + self.m_runlist = []
54 55  
55 56 # Make sure that parfile exists
56 57 file = self.parfile()
... ... @@ -136,9 +137,27 @@ class csiactobs(ctools.cscript):
136 137 # Expand environment
137 138 self.datapath = gammalib.expand_env(self.datapath)
138 139  
139   - # Read user parameters
  140 + # Read FITS production
140 141 self.m_prodname = self["prodname"].string()
141   - self.m_runlistfile = self["infile"].filename()
  142 +
  143 + # Read runlist file if list not already filled
  144 + if len(self.m_runlist) == 0:
  145 +
  146 + # Get file name
  147 + self.m_runlistfile = self["infile"].filename()
  148 +
  149 + # Read runlist from file
  150 + runfile = open(self.m_runlistfile.url())
  151 + for line in runfile.readlines():
  152 + if len(line) == 0:
  153 + continue
  154 + if line[0] == '#':
  155 + continue
  156 + if len(line.split()) > 0:
  157 + self.m_runlist.append(line.split()[0])
  158 + runfile.close()
  159 +
  160 + # Read number of background parameters
142 161 self.m_bkgpars = self["bkgpars"].integer()
143 162  
144 163 # Output model file
... ... @@ -225,13 +244,13 @@ class csiactobs(ctools.cscript):
225 244 Set observation list
226 245 """
227 246  
228   - # Type check
229   - if isinstance(runlist, list):
  247 + # Check if convertable to a python list
  248 + try:
230 249  
231 250 # Store a copy of input argument
232   - self.runlist = list(runlist)
  251 + self.m_runlist = list(runlist)
233 252  
234   - else:
  253 + except:
235 254  
236 255 # raise error if wrong type detected
237 256 raise RuntimeError("Argument of csiactobs.runlist() must be of type 'list'")
... ... @@ -409,30 +428,16 @@ class csiactobs(ctools.cscript):
409 428 self.xml.append(gammalib.GXmlElement("observation_list title=\"observation list\""))
410 429 lib = self.xml.element("observation_list", 0)
411 430  
412   - # Read runlist from file
413   - runlist = []
414   - runfile = open(self.m_runlistfile.url())
415   - for line in runfile.readlines():
416   - if len(line) == 0:
417   - continue
418   - if line[0] == '#':
419   - continue
420   - if len(line.split()) > 0:
421   - runlist.append(line.split()[0])
422   - else:
423   - runlist.append('')
424   - runfile.close()
425   -
426 431 # Log output
427 432 if self.logTerse():
428 433 self.log("\n")
429   - self.log.header1("Looping over "+str(len(runlist))+" runs")
  434 + self.log.header1("Looping over "+str(len(self.m_runlist))+" runs")
430 435  
431 436 # Initialise energy range values for logging
432 437 self.m_ebounds.clear()
433 438  
434 439 # Loop over runs
435   - for obs_id in runlist:
  440 + for obs_id in self.m_runlist:
436 441  
437 442 # Create selection string
438 443 obs_selection = "[OBS_ID=="+str(obs_id)+"]"
... ...
cscripts/csobsinfo.py
... ... @@ -40,6 +40,14 @@ class csobsinfo(ctools.cscript):
40 40 self.name = "csobsinfo"
41 41 self.version = "1.1.0"
42 42  
  43 + # Initialise some members
  44 + if len(argv) > 0 and isinstance(argv[0],gammalib.GObservations):
  45 + self.obs = argv[0]
  46 + argv = argv[1:]
  47 + else:
  48 + self.obs = gammalib.GObservations()
  49 + self.obs.clear()
  50 +
43 51 # Make sure that parfile exists
44 52 file = self.parfile()
45 53  
... ... @@ -99,9 +107,10 @@ class csobsinfo(ctools.cscript):
99 107 """
100 108 Get parameters from parfile and setup the observation.
101 109 """
102   - # Get parameters
103   - self.require_inobs("csobsinfo::get_parameters")
104   - self.obs = self.get_observations(False)
  110 + # Get parameters
  111 + if self.obs.size() == 0:
  112 + self.require_inobs("csobsinfo::get_parameters")
  113 + self.obs = self.get_observations(False)
105 114  
106 115 # Initialise object position
107 116 self.obj_dir = gammalib.GSkyDir()
... ...