Commit 48524efbe910771c7bd6326e68ab88e4a11c73ba
1 parent
c2657fcb
Added improvements, bug fixes and flexibility to some iact cscripts
Showing
3 changed files
with
57 additions
and
28 deletions
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() | ... | ... |