Commit bb9398a3941fba1a094b4fe2780113ddecace447

Authored by L. Tibaldo
1 parent 0b326d4d

On/Off

Showing 1 changed file with 58 additions and 5 deletions
cscripts/csresspec.py
@@ -375,7 +375,7 @@ class csresspec(ctools.csobservation): @@ -375,7 +375,7 @@ class csresspec(ctools.csobservation):
375 # If name not empty add leading blank 375 # If name not empty add leading blank
376 if obs_id != '': 376 if obs_id != '':
377 obs_id = ' ' + obs_id 377 obs_id = ' ' + obs_id
378 - table.extname('RESIDUALS ' + obs_id) 378 + table.extname('RESIDUALS' + obs_id)
379 379
380 # Add Header card to specify algorithm used for residual computation 380 # Add Header card to specify algorithm used for residual computation
381 table.card('ALGORITHM', self['algorithm'].string(), 381 table.card('ALGORITHM', self['algorithm'].string(),
@@ -395,7 +395,7 @@ class csresspec(ctools.csobservation): @@ -395,7 +395,7 @@ class csresspec(ctools.csobservation):
395 Append optional column to residual table 395 Append optional column to residual table
396 :param table: `~gammalib.GFitsBinTable' 396 :param table: `~gammalib.GFitsBinTable'
397 :param name: str column name 397 :param name: str column name
398 - :param data: `gammalib.GNdarray' table to be filled into new column 398 + :param data: `gammalib.GNdarray' data to be filled into new column
399 :return: `~gammalib.GFitsBinTable' 399 :return: `~gammalib.GFitsBinTable'
400 """ 400 """
401 # Check size compatibility 401 # Check size compatibility
@@ -519,11 +519,64 @@ class csresspec(ctools.csobservation): @@ -519,11 +519,64 @@ class csresspec(ctools.csobservation):
519 # otherwise, if On/Off 519 # otherwise, if On/Off
520 elif obs[0].classname() == 'GCTAOnOffObservation': 520 elif obs[0].classname() == 'GCTAOnOffObservation':
521 521
522 - ## Calculate Model and residuals 522 + onoff = obs[0]
523 523
524 - ## Calculate models of individual components if requested 524 + ## Calculate Counts, Model and residuals
  525 +
  526 + # On spectrum
  527 + counts = onoff.on_spec().counts_spectrum()
  528 +
  529 + # Model for On region
  530 + background = onoff.model_background(
  531 + obs.models()).counts_spectrum()
  532 + alpha = onoff.on_spec().backscal_spectrum()
  533 + model = background.copy()
  534 + model *= alpha
  535 + model += onoff.model_gamma(obs.models()).counts_spectrum()
  536 +
  537 + # On Residuals
  538 + residuals = obsutils.residuals(self, counts, model)
  539 +
  540 + # Extract energy bounds
  541 + ebounds = onoff.on_spec().ebounds()
  542 +
  543 + # Fill results table
  544 + table = self._residuals_table(obs_id, ebounds, counts, model,
  545 + residuals)
  546 +
  547 + # Get Off spectrum and add to table
  548 + counts_off = onoff.off_spec().counts_spectrum()
  549 + table = self._append_column(table, 'Counts_Off',
  550 + counts_off)
  551 +
  552 + # Add background/Off model to table
  553 + table = self._append_column(table, 'Model_Off',
  554 + background)
525 555
526 - pass 556 + # Calculate Off residuals and add to table
  557 + residuals_off = obsutils.residuals(self, counts_off, background)
  558 + table = self._append_column(table, 'Residuals_Off',
  559 + residuals_off)
  560 +
  561 + ## Calculate models of individual components if requested
  562 + if self['components'].boolean():
  563 + for component in obs.models():
  564 + # If background, append the values already calculated
  565 + if component.classname() == 'GCTAModelIrfBackground':
  566 + background *= onoff.on_spec().backscal_spectrum()
  567 + table = self._append_column(table, 'Background',
  568 + background)
  569 + # Otherwise calculate gamma component and append to Table
  570 + else:
  571 + # Create observation container for individual components
  572 + model_cont = gammalib.GModels()
  573 + model_cont.append(component)
  574 + # Calculate gamma model
  575 + model = onoff.model_gamma(model_cont)
  576 + model = model.counts_spectrum()
  577 + # Append to table
  578 + table = self._append_column(table, component.name(),
  579 + model)
527 580
528 ## Append results table to output file 581 ## Append results table to output file
529 self._fits.append(table) 582 self._fits.append(table)