Commit d75e51d0fd1b61d2fb3b16a6e5c6086dec2a3e71

Authored by Jürgen Knödlseder
1 parent e47a5b50

Properly implement usage of cterror in cspull.

cspull now loops over all model components and call cterror for each model component.
pyext/ctools/obsutils.py
@@ -172,12 +172,13 @@ def fit(obs, log=False, debug=False, chatter=2, edisp=False): @@ -172,12 +172,13 @@ def fit(obs, log=False, debug=False, chatter=2, edisp=False):
172 # ============================================================== # 172 # ============================================================== #
173 # Fit observations and determine errors using likelihood profile # 173 # Fit observations and determine errors using likelihood profile #
174 # ============================================================== # 174 # ============================================================== #
175 -def cterror(obs, log=False, debug=False, chatter=2): 175 +def cterror(obs, srcname, log=False, debug=False, chatter=2):
176 """ 176 """
177 Perform maximum likelihood fitting of observations in the container. 177 Perform maximum likelihood fitting of observations in the container.
178 178
179 Parameters: 179 Parameters:
180 - obs - Observation container 180 + obs - Observation container
  181 + srcname - Source name
181 Keywords: 182 Keywords:
182 log - Create log file(s) 183 log - Create log file(s)
183 debug - Create screen dump 184 debug - Create screen dump
@@ -186,6 +187,9 @@ def cterror(obs, log=False, debug=False, chatter=2): @@ -186,6 +187,9 @@ def cterror(obs, log=False, debug=False, chatter=2):
186 """ 187 """
187 # Allocate cterror application 188 # Allocate cterror application
188 error = ctools.cterror(obs) 189 error = ctools.cterror(obs)
  190 +
  191 + # Set cterror parameters
  192 + error["srcname"].string(srcname)
189 193
190 # Optionally open the log file 194 # Optionally open the log file
191 if log: 195 if log:
scripts/cspull.py
@@ -276,7 +276,7 @@ class cspull(ctools.cscript): @@ -276,7 +276,7 @@ class cspull(ctools.cscript):
276 seed - Random number generator seed 276 seed - Random number generator seed
277 """ 277 """
278 # Write header 278 # Write header
279 - if self.logExplicit(): 279 + if self.logNormal():
280 self.log.header2("Trial "+str(seed+1)) 280 self.log.header2("Trial "+str(seed+1))
281 281
282 # Simulate events 282 # Simulate events
@@ -294,7 +294,7 @@ class cspull(ctools.cscript): @@ -294,7 +294,7 @@ class cspull(ctools.cscript):
294 nevents += run.events().number() 294 nevents += run.events().number()
295 295
296 # Write simulation results 296 # Write simulation results
297 - if self.logExplicit(): 297 + if self.logNormal():
298 self.log.header3("Simulation") 298 self.log.header3("Simulation")
299 self.log.parformat("Number of simulated events") 299 self.log.parformat("Number of simulated events")
300 self.log(nevents) 300 self.log(nevents)
@@ -302,8 +302,12 @@ class cspull(ctools.cscript): @@ -302,8 +302,12 @@ class cspull(ctools.cscript):
302 302
303 # Fit model 303 # Fit model
304 if self.m_profile: 304 if self.m_profile:
305 - like = obsutils.cterror(obs, \  
306 - log=self.m_log, debug=self.m_debug) 305 + models = obs.models()
  306 + for i in range(models.size()):
  307 + model_name = models[i].name()
  308 + like = obsutils.cterror(obs, model_name, \
  309 + log=self.m_log, \
  310 + debug=self.m_debug)
307 else: 311 else:
308 like = obsutils.fit(obs, edisp=self.m_edisp, \ 312 like = obsutils.fit(obs, edisp=self.m_edisp, \
309 log=self.m_log, debug=self.m_debug) 313 log=self.m_log, debug=self.m_debug)
@@ -314,7 +318,7 @@ class cspull(ctools.cscript): @@ -314,7 +318,7 @@ class cspull(ctools.cscript):
314 models = like.obs().models() 318 models = like.obs().models()
315 319
316 # Write result header 320 # Write result header
317 - if self.logExplicit(): 321 + if self.logNormal():
318 self.log.header3("Pulls") 322 self.log.header3("Pulls")
319 323
320 # Gather results 324 # Gather results
@@ -356,7 +360,7 @@ class cspull(ctools.cscript): @@ -356,7 +360,7 @@ class cspull(ctools.cscript):
356 values["Unc_"+name] = error 360 values["Unc_"+name] = error
357 361
358 # Write result 362 # Write result
359 - if self.logExplicit(): 363 + if self.logNormal():
360 self.log.parformat(name) 364 self.log.parformat(name)
361 self.log(pull) 365 self.log(pull)
362 self.log(" (") 366 self.log(" (")