Commit f1c567ecefeb98f9cf8332c0c1d6d4a45c8d9fe6

Authored by Jürgen Knödlseder
2 parents 1c81f76b 2940dac5

Merge branch '2712_HESSDR1_tutorials' into integration

cscripts/csbkgmodel.par
@@ -29,7 +29,7 @@ spectral, s, a, NODES,PLAW|NODES,, "Spectral model component" @@ -29,7 +29,7 @@ spectral, s, a, NODES,PLAW|NODES,, "Spectral model component"
29 ebinalg, s, a, LOG,FILE|LIN|LOG,, "Algorithm for defining energy nodes" 29 ebinalg, s, a, LOG,FILE|LIN|LOG,, "Algorithm for defining energy nodes"
30 emin, r, a, 0.1,,, "Lower energy limit (TeV)" 30 emin, r, a, 0.1,,, "Lower energy limit (TeV)"
31 emax, r, a, 100.0,,, "Upper energy limit (TeV)" 31 emax, r, a, 100.0,,, "Upper energy limit (TeV)"
32 -enumbins, i, a, 10,1,200, "Number of energy nodes" 32 +enumbins, i, a, 8,1,200, "Number of energy nodes"
33 ebinfile, f, a, NONE,,, "Name of the file containing the energy node definition" 33 ebinfile, f, a, NONE,,, "Name of the file containing the energy node definition"
34 runwise, b, a, yes,,, "Generate runwise background model?" 34 runwise, b, a, yes,,, "Generate runwise background model?"
35 rad, r, h, 2.0,,, "Radius for event selection (degrees)" 35 rad, r, h, 2.0,,, "Radius for event selection (degrees)"
cscripts/csresspec.py
@@ -102,7 +102,7 @@ class csresspec(ctools.csobservation): @@ -102,7 +102,7 @@ class csresspec(ctools.csobservation):
102 # If there is more than one observation, and observations are all 102 # If there is more than one observation, and observations are all
103 # unbinned or all onoff query user to know if they wish stacked results 103 # unbinned or all onoff query user to know if they wish stacked results
104 if self.obs().size() > 1 and \ 104 if self.obs().size() > 1 and \
105 - (n_unbinned == self.obs().size() or n_onoff == self.obs().size()): 105 + (n_unbinned == self.obs().size() or n_onoff == self.obs().size()):
106 self._stack = self['stack'].boolean() 106 self._stack = self['stack'].boolean()
107 # If we are to stack event lists query parameters for cube creation 107 # If we are to stack event lists query parameters for cube creation
108 if self._stack and n_unbinned == self.obs().size(): 108 if self._stack and n_unbinned == self.obs().size():
@@ -162,11 +162,11 @@ class csresspec(ctools.csobservation): @@ -162,11 +162,11 @@ class csresspec(ctools.csobservation):
162 162
163 # Log for unbinned observations 163 # Log for unbinned observations
164 if n_unbinned != 0: 164 if n_unbinned != 0:
165 - msg = ' User defined energy binning will be used for %d unbinned '\ 165 + msg = ' User defined energy binning will be used for %d unbinned ' \
166 'observations.' % (n_unbinned) 166 'observations.' % (n_unbinned)
167 self._log_string(gammalib.TERSE, msg) 167 self._log_string(gammalib.TERSE, msg)
168 if n_cta > n_unbinned: 168 if n_cta > n_unbinned:
169 - msg = ' The intrinsic binning will be used for the remaining '\ 169 + msg = ' The intrinsic binning will be used for the remaining ' \
170 '%d CTA observations.' % (n_notunbin) 170 '%d CTA observations.' % (n_notunbin)
171 self._log_string(gammalib.TERSE, msg) 171 self._log_string(gammalib.TERSE, msg)
172 172
@@ -179,51 +179,20 @@ class csresspec(ctools.csobservation): @@ -179,51 +179,20 @@ class csresspec(ctools.csobservation):
179 # Return 179 # Return
180 return 180 return
181 181
182 - def _stack_observations(self):  
183 - """  
184 - Stack multiple observations and replace observation container  
185 - with single stacked observation  
186 -  
187 - Returns  
188 - -------  
189 - obs : `~gammalib.GObservations'  
190 - Observation container with a single stacked observation  
191 - """  
192 - # Use first observation to determine the type and apply the  
193 - # appropriate stacking method  
194 -  
195 - # If On/Off use the GCTAOnOffObservation constructor  
196 - if self.obs()[0].classname() == 'GCTAOnOffObservation':  
197 - msg = 'Stacking %d On/Off observations.' % (self.obs().size())  
198 - self._log_string(gammalib.NORMAL, msg)  
199 - stacked = gammalib.GCTAOnOffObservation(self.obs())  
200 - stacked_obs = gammalib.GObservations()  
201 - stacked_obs.append(stacked)  
202 - stacked_obs.models(self.obs().models())  
203 -  
204 - # If event list then bin observations  
205 - elif self.obs()[0].classname() == 'GCTAObservation':  
206 - msg = 'Stacking %d event lists.' % (self.obs().size())  
207 - self._log_string(gammalib.NORMAL, msg)  
208 - stacked_obs = obsutils.get_stacked_obs(self, self.obs())  
209 -  
210 - # Return  
211 - return stacked_obs  
212 -  
213 def _bin_evlist(self, obs): 182 def _bin_evlist(self, obs):
214 """ 183 """
215 Turn single event list into counts cube 184 Turn single event list into counts cube
216 185
217 Parameters 186 Parameters
218 ---------- 187 ----------
219 - obs : `~gammalib.GObservations()` 188 + obs : `~gammalib.GObservations`
220 Observation container with single event list 189 Observation container with single event list
221 190
222 Returns 191 Returns
223 ------- 192 -------
224 - obs : `~gammalib.GObservations()`  
225 - Binned observation container dict with event list ROI and energy  
226 - range information 193 + obs, info : `~gammalib.GObservations`, dict
  194 + Binned observation container and dictionary with event list ROI
  195 + and energy range information
227 """ 196 """
228 # Retrieve information about ROI in event list 197 # Retrieve information about ROI in event list
229 roi = obs[0].roi() 198 roi = obs[0].roi()
@@ -287,7 +256,7 @@ class csresspec(ctools.csobservation): @@ -287,7 +256,7 @@ class csresspec(ctools.csobservation):
287 256
288 Parameters 257 Parameters
289 ---------- 258 ----------
290 - cube : `~gammalib.GCTAEventCube()` 259 + cube : `~gammalib.GCTAEventCube`
291 Event cube 260 Event cube
292 ra : float (str 'INDEF' for no selection on direction) 261 ra : float (str 'INDEF' for no selection on direction)
293 Right Ascension (deg) 262 Right Ascension (deg)
@@ -302,7 +271,7 @@ class csresspec(ctools.csobservation): @@ -302,7 +271,7 @@ class csresspec(ctools.csobservation):
302 271
303 Returns 272 Returns
304 ------- 273 -------
305 - cube : `~gammalib.GCTAEventCube()` 274 + cube : `~gammalib.GCTAEventCube`
306 Event cube 275 Event cube
307 """ 276 """
308 # Turn cube into observation container to feed to ctcubemask 277 # Turn cube into observation container to feed to ctcubemask
@@ -337,14 +306,14 @@ class csresspec(ctools.csobservation): @@ -337,14 +306,14 @@ class csresspec(ctools.csobservation):
337 306
338 Parameters 307 Parameters
339 ---------- 308 ----------
340 - cube : `~gammalib.GCTAEventCube()` 309 + cube : `~gammalib.GCTAEventCube`
341 Event cube 310 Event cube
342 evlist_info : dict 311 evlist_info : dict
343 Dictionary with information on original event list 312 Dictionary with information on original event list
344 313
345 Returns 314 Returns
346 ------- 315 -------
347 - array : `~gammalib.GNdarray()' 316 + array : `~gammalib.GNdarray'
348 Counts spectrum 317 Counts spectrum
349 """ 318 """
350 # If we started from event list mask the ROI only 319 # If we started from event list mask the ROI only
@@ -388,13 +357,13 @@ class csresspec(ctools.csobservation): @@ -388,13 +357,13 @@ class csresspec(ctools.csobservation):
388 ---------- 357 ----------
389 obs_id : str 358 obs_id : str
390 Observation id 359 Observation id
391 - ebounds : `~gammalib.GEbounds()' 360 + ebounds : `~gammalib.GEbounds'
392 Energy boundaries 361 Energy boundaries
393 - counts : `~gammalib.GNdarray()' 362 + counts : `~gammalib.GNdarray'
394 Counts spectrum 363 Counts spectrum
395 - model : `~gammalib.GNdarray()' 364 + model : `~gammalib.GNdarray'
396 Model spectrum 365 Model spectrum
397 - residuals : `~gammalib.GNdarray()' 366 + residuals : `~gammalib.GNdarray'
398 Residual spectrum 367 Residual spectrum
399 368
400 Returns 369 Returns
@@ -403,7 +372,7 @@ class csresspec(ctools.csobservation): @@ -403,7 +372,7 @@ class csresspec(ctools.csobservation):
403 Residual spectrum as FITS binary table 372 Residual spectrum as FITS binary table
404 """ 373 """
405 # Create FITS table columns 374 # Create FITS table columns
406 - nrows = ebounds.size() 375 + nrows = ebounds.size()
407 energy_low = gammalib.GFitsTableDoubleCol('Emin', nrows) 376 energy_low = gammalib.GFitsTableDoubleCol('Emin', nrows)
408 energy_high = gammalib.GFitsTableDoubleCol('Emax', nrows) 377 energy_high = gammalib.GFitsTableDoubleCol('Emax', nrows)
409 counts_col = gammalib.GFitsTableDoubleCol('Counts', nrows) 378 counts_col = gammalib.GFitsTableDoubleCol('Counts', nrows)
@@ -444,16 +413,16 @@ class csresspec(ctools.csobservation): @@ -444,16 +413,16 @@ class csresspec(ctools.csobservation):
444 413
445 Parameters 414 Parameters
446 ---------- 415 ----------
447 - table : `~gammalib.GFitsBinTable()' 416 + table : `~gammalib.GFitsBinTable'
448 FITS binary table 417 FITS binary table
449 name : str 418 name : str
450 Column name 419 Column name
451 - data : `~gammalib.GEbounds()' 420 + data : `~gammalib.GEbounds'
452 Data to be filled into new column 421 Data to be filled into new column
453 422
454 Returns 423 Returns
455 ------- 424 -------
456 - table : `~gammalib.GFitsBinTable()' 425 + table : `~gammalib.GFitsBinTable'
457 FITS binary table 426 FITS binary table
458 """ 427 """
459 # Check size compatibility 428 # Check size compatibility
@@ -478,6 +447,202 @@ class csresspec(ctools.csobservation): @@ -478,6 +447,202 @@ class csresspec(ctools.csobservation):
478 # Return modified table 447 # Return modified table
479 return table 448 return table
480 449
  450 + def _residuals_3D(self, obs, obs_id, ccube='NONE'):
  451 + """
  452 + Calculate residuals for 3D observation
  453 +
  454 + Parameters
  455 + ----------
  456 + obs : `~gammalib.GObservations`
  457 + Observation container with a single observations of type GCTAObservation
  458 + obs_id : str
  459 + Observation ID
  460 + ccube : `~gammalib.GCTAEventCube'
  461 + Count cube with stacked events lists
  462 +
  463 + Returns
  464 + -------
  465 + table : `~gammalib.GFitsBinTable()'
  466 + Residual spectrum as FITS binary table
  467 + """
  468 +
  469 + # If binned data already exist set the evlist_info dictionary to have
  470 + # attribute was_list False
  471 + if obs[0].eventtype() == 'CountsCube' or ccube!='NONE':
  472 + evlist_info = {'was_list': False}
  473 +
  474 + # ... otherwise bin now
  475 + else:
  476 + # we remember if we binned an event list so that we can
  477 + # mask only the ROI for residual calculation
  478 + msg = 'Setting up binned observation'
  479 + self._log_string(gammalib.NORMAL, msg)
  480 + obs, evlist_info = self._bin_evlist(obs)
  481 +
  482 + # Calculate Model and residuals. If model cube is provided load
  483 + # it
  484 + if self._use_maps:
  485 + modcube = gammalib.GCTAEventCube(self['modcube'].filename())
  486 +
  487 + # ... otherwise calculate it now
  488 + else:
  489 + msg = 'Computing model cube'
  490 + self._log_string(gammalib.NORMAL, msg)
  491 + modelcube = ctools.ctmodel(obs)
  492 + if ccube != 'NONE':
  493 + modelcube.cube(ccube)
  494 + modelcube['edisp'] = self['edisp'].boolean()
  495 + modelcube.run()
  496 + modcube = modelcube.cube().copy()
  497 +
  498 + # Extract cntcube for residual computation
  499 + if ccube != 'NONE':
  500 + cntcube = ccube
  501 + else:
  502 + cntcube = obs[0].events().copy()
  503 +
  504 + # Derive count spectra from cubes
  505 + msg = 'Computing counts, model, and residual spectra'
  506 + self._log_string(gammalib.NORMAL, msg)
  507 + counts = self._cube_to_spectrum(cntcube, evlist_info)
  508 + model = self._cube_to_spectrum(modcube, evlist_info)
  509 +
  510 + # Calculate residuals
  511 + residuals = obsutils.residuals(self, counts, model)
  512 +
  513 + # Extract energy bounds
  514 + ebounds = cntcube.ebounds()
  515 +
  516 + # Fill results table
  517 + msg = 'Filling residual table'
  518 + self._log_string(gammalib.NORMAL, msg)
  519 + table = self._residuals_table(obs_id, ebounds, counts, model,
  520 + residuals)
  521 +
  522 + # Calculate models of individual components if requested
  523 + if self['components'].boolean():
  524 + for component in obs.models():
  525 + # Log component
  526 + self._log_value(gammalib.NORMAL,
  527 + 'Computing model component',
  528 + component.name())
  529 +
  530 + # Set model cube models to individual component
  531 + model_cont = gammalib.GModels()
  532 + model_cont.append(component)
  533 + modelcube.obs().models(model_cont)
  534 +
  535 + # Reset base cube that was modified internally by ctmodel
  536 + if ccube != 'NONE':
  537 + modelcube.cube(ccube)
  538 +
  539 + # Run model cube
  540 + modelcube['edisp'] = self['edisp'].boolean()
  541 + modelcube.run()
  542 +
  543 + # Extract spectrum of individual component
  544 + modcube = modelcube.cube().copy()
  545 + model = self._cube_to_spectrum(modcube, evlist_info)
  546 +
  547 + # append component to table
  548 + table = self._append_column(table, component.name(),
  549 + model)
  550 +
  551 + return table
  552 +
  553 + def _residuals_OnOff(self,obs,obs_id):
  554 + """
  555 + Calculate residual for OnOff observation
  556 +
  557 + Parameters
  558 + ----------
  559 + obs : `~gammalib.GObservations`
  560 + Observation container with a single observations of type GCTAOnOffObservation
  561 + obs_id : str
  562 + Observation ID
  563 +
  564 + Returns
  565 + -------
  566 + table : `~gammalib.GFitsBinTable'
  567 + Residual spectrum as FITS binary table
  568 + """
  569 +
  570 + # Calculate Counts, Model and residuals
  571 + msg = 'Computing counts, model, and residual spectra'
  572 + self._log_string(gammalib.NORMAL, msg)
  573 +
  574 + onoff = obs[0]
  575 +
  576 + # On spectrum
  577 + counts = onoff.on_spec().counts_spectrum()
  578 +
  579 + # Model for On region
  580 + background = onoff.model_background(obs.models()).counts_spectrum()
  581 + alpha = onoff.on_spec().backscal_spectrum()
  582 + model = background.copy()
  583 + model *= alpha
  584 + model += onoff.model_gamma(obs.models()).counts_spectrum()
  585 +
  586 + # On Residuals
  587 + residuals = obsutils.residuals(self, counts, model)
  588 +
  589 + # Extract energy bounds
  590 + ebounds = onoff.on_spec().ebounds()
  591 +
  592 + # Fill results table
  593 + msg = 'Filling residual table'
  594 + self._log_string(gammalib.NORMAL, msg)
  595 + table = self._residuals_table(obs_id, ebounds, counts, model,
  596 + residuals)
  597 +
  598 + # Get Off spectrum and add to table
  599 + msg = 'Computing counts, model, and residual spectra for Off regions'
  600 + self._log_string(gammalib.NORMAL, msg)
  601 + counts_off = onoff.off_spec().counts_spectrum()
  602 + table = self._append_column(table, 'Counts_Off',
  603 + counts_off)
  604 +
  605 + # Add background/Off model to table
  606 + table = self._append_column(table, 'Model_Off',
  607 + background)
  608 +
  609 + # Calculate Off residuals and add to table
  610 + residuals_off = obsutils.residuals(self, counts_off, background)
  611 + table = self._append_column(table, 'Residuals_Off',
  612 + residuals_off)
  613 +
  614 + # Calculate models of individual components if requested
  615 + if self['components'].boolean():
  616 + for component in obs.models():
  617 + # If background pass
  618 + # We always add the background at the end so that
  619 + # we accommodate WSTAT for which the background is not
  620 + # mandatory in the model
  621 + if component.classname() == 'GCTAModelIrfBackground':
  622 + pass
  623 + # Otherwise calculate gamma component and append to Table
  624 + else:
  625 + self._log_value(gammalib.NORMAL,
  626 + 'Computing model for component',
  627 + component.name())
  628 + # Create observation container for individual components
  629 + model_cont = gammalib.GModels()
  630 + model_cont.append(component)
  631 + # Calculate gamma model
  632 + model = onoff.model_gamma(model_cont)
  633 + model = model.counts_spectrum()
  634 + # Append to table
  635 + table = self._append_column(table, component.name(),
  636 + model)
  637 + # Add background already calculated
  638 + self._log_value(gammalib.NORMAL,
  639 + 'Computing model for component',
  640 + 'Background')
  641 + background *= onoff.on_spec().backscal_spectrum()
  642 + table = self._append_column(table, 'Background',
  643 + background)
  644 +
  645 + return table
481 646
482 # Public methods 647 # Public methods
483 def run(self): 648 def run(self):
@@ -494,192 +659,84 @@ class csresspec(ctools.csobservation): @@ -494,192 +659,84 @@ class csresspec(ctools.csobservation):
494 # Write observation into logger 659 # Write observation into logger
495 self._log_observations(gammalib.NORMAL, self.obs(), 'Observation') 660 self._log_observations(gammalib.NORMAL, self.obs(), 'Observation')
496 661
497 - # Stack observations if requested  
498 - if self._stack:  
499 - self._log_header1(gammalib.TERSE, 'Stacking Observations')  
500 - self.obs(self._stack_observations()) 662 + # Stack On/Off observations if requested
  663 + if self._stack and self.obs()[0].classname() == 'GCTAOnOffObservation':
  664 + msg = 'Stacking %d On/Off observations.' % (self.obs().size())
  665 + self._log_string(gammalib.NORMAL, msg)
  666 + stacked = gammalib.GCTAOnOffObservation(self.obs())
  667 + stacked_obs = gammalib.GObservations()
  668 + stacked_obs.append(stacked)
  669 + stacked_obs.models(self.obs().models())
  670 + self.obs(stacked_obs)
501 671
502 # Log processing header 672 # Log processing header
503 self._log_header1(gammalib.TERSE, 'Processing Observations') 673 self._log_header1(gammalib.TERSE, 'Processing Observations')
504 674
505 - # Loop over observations and calculate residuals  
506 - for s, observation in enumerate(self.obs()): 675 + #If observations are unbinned and we stack
  676 + if self._stack and self.obs()[0].classname() == 'GCTAObservation':
507 677
508 - # Retrieve and store obs id  
509 - obs_id = observation.id() 678 + msg = 'Computing count cube from multiple unbinned observations'
  679 + self._log_string(gammalib.NORMAL, msg)
510 680
511 - # If observation id is empty and there is more than one observation  
512 - # replace with incremental number  
513 - if obs_id == '' and self.obs().size() > 1:  
514 - obs_id = str(s) 681 + # Build count cube
  682 + binning = ctools.ctbin(self.obs())
  683 + binning['xref'] = self['xref'].real()
  684 + binning['yref'] = self['yref'].real()
  685 + binning['proj'] = self['proj'].string()
  686 + binning['coordsys'] = self['coordsys'].string()
  687 + binning['ebinalg'] = self['ebinalg'].string()
  688 + binning['nxpix'] = self['nxpix'].integer()
  689 + binning['nypix'] = self['nypix'].integer()
  690 + binning['binsz'] = self['binsz'].real()
  691 + if self['ebinalg'].string() == 'FILE':
  692 + binning['ebinfile'] = self['ebinfile'].filename().file()
  693 + else:
  694 + binning['enumbins'] = self['enumbins'].integer()
  695 + binning['emin'] = self['emin'].real()
  696 + binning['emax'] = self['emax'].real()
  697 + binning['chatter'] = self['chatter'].integer()
  698 + binning['clobber'] = self['clobber'].boolean()
  699 + binning['debug'] = self['debug'].boolean()
  700 + binning.run()
515 701
516 - # Log processing of observation  
517 - if self.obs().size() > 1:  
518 - self._log_header2(gammalib.NORMAL,  
519 - 'Processing observation %s' % obs_id) 702 + #compute residuals using cube
  703 + table = self._residuals_3D(self.obs(),'',binning.cube())
520 704
521 - # Turn into observation container and assign models  
522 - obs = gammalib.GObservations()  
523 - obs.append(observation)  
524 - obs.models(self.obs().models()) 705 + # Append results table to output file
  706 + self._fits.append(table)
525 707
526 - # If 3D observation  
527 - if obs[0].classname() == 'GCTAObservation': 708 + # Otherwise, loop over observations and calculate residuals
  709 + else:
  710 + for s, observation in enumerate(self.obs()):
528 711
529 - # If already binned set the evlist_info dictionary to have  
530 - # attribute was_list False  
531 - if obs[0].eventtype() == 'CountsCube':  
532 - evlist_info = {'was_list': False} 712 + # Retrieve and store obs id
  713 + obs_id = observation.id()
533 714
534 - # ... otherwise bin now  
535 - else:  
536 - # we remember if we binned an event list so that we can  
537 - # mask only the ROI for residual calculation  
538 - msg = 'Setting up binned observation'  
539 - self._log_string(gammalib.NORMAL, msg)  
540 - obs, evlist_info = self._bin_evlist(obs)  
541 -  
542 - # Calculate Model and residuals. If model cube is provided load  
543 - # it  
544 - if self._use_maps:  
545 - modcube = gammalib.GCTAEventCube(self['modcube'].filename())  
546 -  
547 - # ... otherwise calculate it now  
548 - else:  
549 - msg = 'Computing model cube'  
550 - self._log_string(gammalib.NORMAL, msg)  
551 - modelcube = ctools.ctmodel(obs)  
552 - modelcube['edisp'] = self['edisp'].boolean()  
553 - modelcube.run()  
554 - modcube = modelcube.cube().copy()  
555 -  
556 - # Extract cntcube for residual computation  
557 - cntcube = obs[0].events().copy()  
558 -  
559 - # Derive count spectra from cubes  
560 - msg = 'Computing counts, model, and residual spectra'  
561 - self._log_string(gammalib.NORMAL, msg)  
562 - counts = self._cube_to_spectrum(cntcube, evlist_info)  
563 - model = self._cube_to_spectrum(modcube, evlist_info)  
564 -  
565 - # Calculate residuals  
566 - residuals = obsutils.residuals(self, counts, model)  
567 -  
568 - # Extract energy bounds  
569 - ebounds = cntcube.ebounds()  
570 -  
571 - # Fill results table  
572 - msg = 'Filling residual table'  
573 - self._log_string(gammalib.NORMAL, msg)  
574 - table = self._residuals_table(obs_id, ebounds, counts, model,  
575 - residuals)  
576 -  
577 - # Calculate models of individual components if requested  
578 - if self['components'].boolean():  
579 - for component in obs.models():  
580 -  
581 - # Log component  
582 - self._log_value(gammalib.NORMAL,  
583 - 'Computing model component',  
584 - component.name())  
585 -  
586 - # Set model cube models to individual component  
587 - model_cont = gammalib.GModels()  
588 - model_cont.append(component)  
589 - modelcube.obs().models(model_cont)  
590 -  
591 - # Run model cube  
592 - modelcube['edisp'] = self['edisp'].boolean()  
593 - modelcube.run()  
594 -  
595 - # Extract spectrum of individual component  
596 - modcube = modelcube.cube().copy()  
597 - model = self._cube_to_spectrum(modcube, evlist_info)  
598 -  
599 - # append component to table  
600 - table = self._append_column(table, component.name(),  
601 - model)  
602 -  
603 - # otherwise, if On/Off  
604 - elif obs[0].classname() == 'GCTAOnOffObservation':  
605 -  
606 - onoff = obs[0]  
607 -  
608 - # Calculate Counts, Model and residuals  
609 - msg = 'Computing counts, model, and residual spectra'  
610 - self._log_string(gammalib.NORMAL, msg)  
611 -  
612 - # On spectrum  
613 - counts = onoff.on_spec().counts_spectrum()  
614 -  
615 - # Model for On region  
616 - background = onoff.model_background(obs.models()).counts_spectrum()  
617 - alpha = onoff.on_spec().backscal_spectrum()  
618 - model = background.copy()  
619 - model *= alpha  
620 - model += onoff.model_gamma(obs.models()).counts_spectrum()  
621 -  
622 - # On Residuals  
623 - residuals = obsutils.residuals(self, counts, model)  
624 -  
625 - # Extract energy bounds  
626 - ebounds = onoff.on_spec().ebounds()  
627 -  
628 - # Fill results table  
629 - msg = 'Filling residual table'  
630 - self._log_string(gammalib.NORMAL, msg)  
631 - table = self._residuals_table(obs_id, ebounds, counts, model,  
632 - residuals)  
633 -  
634 - # Get Off spectrum and add to table  
635 - msg = 'Computing counts, model, and residual spectra for Off regions'  
636 - self._log_string(gammalib.NORMAL, msg)  
637 - counts_off = onoff.off_spec().counts_spectrum()  
638 - table = self._append_column(table, 'Counts_Off',  
639 - counts_off)  
640 -  
641 - # Add background/Off model to table  
642 - table = self._append_column(table, 'Model_Off',  
643 - background)  
644 -  
645 - # Calculate Off residuals and add to table  
646 - residuals_off = obsutils.residuals(self, counts_off, background)  
647 - table = self._append_column(table, 'Residuals_Off',  
648 - residuals_off)  
649 -  
650 - # Calculate models of individual components if requested  
651 - if self['components'].boolean():  
652 - for component in obs.models():  
653 - # If background pass  
654 - # We always add the background at the end so that  
655 - # we accommodate WSTAT for which the background is not  
656 - # mandatory in the model  
657 - if component.classname() == 'GCTAModelIrfBackground':  
658 - pass  
659 - # Otherwise calculate gamma component and append to Table  
660 - else:  
661 - self._log_value(gammalib.NORMAL,  
662 - 'Computing model for component',  
663 - component.name())  
664 - # Create observation container for individual components  
665 - model_cont = gammalib.GModels()  
666 - model_cont.append(component)  
667 - # Calculate gamma model  
668 - model = onoff.model_gamma(model_cont)  
669 - model = model.counts_spectrum()  
670 - # Append to table  
671 - table = self._append_column(table, component.name(),  
672 - model)  
673 - # Add background already calculated  
674 - self._log_value(gammalib.NORMAL,  
675 - 'Computing model for component',  
676 - 'Background')  
677 - background *= onoff.on_spec().backscal_spectrum()  
678 - table = self._append_column(table, 'Background',  
679 - background) 715 + # If observation id is empty and there is more than one observation
  716 + # replace with incremental number
  717 + if obs_id == '' and self.obs().size() > 1:
  718 + obs_id = str(s)
680 719
681 - # Append results table to output file  
682 - self._fits.append(table) 720 + # Log processing of observation
  721 + if self.obs().size() > 1:
  722 + self._log_header2(gammalib.NORMAL,
  723 + 'Processing observation %s' % obs_id)
  724 +
  725 + # Turn into observation container and assign models
  726 + obs = gammalib.GObservations()
  727 + obs.append(observation)
  728 + obs.models(self.obs().models())
  729 +
  730 + # If 3D observation
  731 + if obs[0].classname() == 'GCTAObservation':
  732 + table = self._residuals_3D(obs,obs_id)
  733 +
  734 + # otherwise, if On/Off
  735 + elif obs[0].classname() == 'GCTAOnOffObservation':
  736 + table = self._residuals_OnOff(obs,obs_id)
  737 +
  738 + # Append results table to output file
  739 + self._fits.append(table)
683 740
684 # Return 741 # Return
685 return 742 return
cscripts/cssrcdetect.py
@@ -38,12 +38,6 @@ class cssrcdetect(ctools.cscript): @@ -38,12 +38,6 @@ class cssrcdetect(ctools.cscript):
38 """ 38 """
39 Constructor 39 Constructor
40 """ 40 """
41 - # Initialise application by calling the base class constructor  
42 - self._init_cscript(self.__class__.__name__, ctools.__version__, argv)  
43 -  
44 - # Set protected members  
45 - self._models = gammalib.GModels()  
46 -  
47 # Initialise sky map from constructor arguments 41 # Initialise sky map from constructor arguments
48 if len(argv) > 0 and isinstance(argv[0], gammalib.GSkyMap): 42 if len(argv) > 0 and isinstance(argv[0], gammalib.GSkyMap):
49 self._map = argv[0] 43 self._map = argv[0]
@@ -51,6 +45,12 @@ class cssrcdetect(ctools.cscript): @@ -51,6 +45,12 @@ class cssrcdetect(ctools.cscript):
51 else: 45 else:
52 self._map = gammalib.GSkyMap() 46 self._map = gammalib.GSkyMap()
53 47
  48 + # Initialise application by calling the base class constructor
  49 + self._init_cscript(self.__class__.__name__, ctools.__version__, argv)
  50 +
  51 + # Set protected members
  52 + self._models = gammalib.GModels()
  53 +
54 # Initialise other members 54 # Initialise other members
55 self._map_dirs = [] 55 self._map_dirs = []
56 56
doc/source/users/reference_manual/csbkgmodel.rst
@@ -37,10 +37,9 @@ General parameters @@ -37,10 +37,9 @@ General parameters
37 Allow for a spatial gradient in the background event distribution? 37 Allow for a spatial gradient in the background event distribution?
38 This option only applies to the ``GAUSS`` spatial model component. 38 This option only applies to the ``GAUSS`` spatial model component.
39 39
40 -``spectral <PLAW|HESS> [string]`` 40 +``spectral <PLAW|NODES> [string]``
41 Spectral model component. ``PLAW`` specifies a simple power law model, 41 Spectral model component. ``PLAW`` specifies a simple power law model,
42 - ``HESS`` specifies a piecewise broken power-law using 8 energy nodes  
43 - spread over the energy range from 100 GeV to 12.8 TeV. 42 + ``NODES`` specifies a piecewise broken power-law.
44 43
45 ``ebinalg <FILE|LIN|LOG> [string]`` 44 ``ebinalg <FILE|LIN|LOG> [string]``
46 Algorithm for defining energy nodes. For ``FILE``, the energy nodes are 45 Algorithm for defining energy nodes. For ``FILE``, the energy nodes are
doc/source/users/reference_manual/csresmap.rst
@@ -18,10 +18,14 @@ binning and used for residual computation. Before residual computation, @@ -18,10 +18,14 @@ binning and used for residual computation. Before residual computation,
18 the counts and model cubes are collapsed into maps by summing over all 18 the counts and model cubes are collapsed into maps by summing over all
19 energies. Four options exist then for residual computation: 19 energies. Four options exist then for residual computation:
20 20
21 -- the subtraction of the model from the counts (SUB)  
22 -- the subtraction and division by the model (SUBDIV)  
23 -- the subtraction and division by the square root of the model (SUBDIVSQRT)  
24 -- the computation of the significance using Li & Ma (SIGNIFICANCE) 21 +- the subtraction of the model from the counts (``SUB``)
  22 +- the subtraction and division by the model (``SUBDIV``)
  23 +- the subtraction and division by the square root of the model (``SUBDIVSQRT``)
  24 +- the computation of the significance based on the likelihood-ratio
  25 + test for Poisson statistics (``SIGNIFICANCE``)
  26 +
  27 +The ``SUBDIVSQRT`` and ``SIGNIFICANCE`` algorithms approximate the residual
  28 +significance and may become inaccurate in the low-counting regime.
25 29
26 The residual map is written into a FITS file. 30 The residual map is written into a FITS file.
27 31
@@ -108,7 +112,9 @@ General parameters @@ -108,7 +112,9 @@ General parameters
108 112
109 ``SUBDIVSQRT``: :math:`(DATA - MODEL) / \sqrt{MODEL}` 113 ``SUBDIVSQRT``: :math:`(DATA - MODEL) / \sqrt{MODEL}`
110 114
111 - ``SIGNIFICANCE``: :math:`{\rm sign}(DATA-MODEL) \times \sqrt{ 2 \times ( DATA \times \ln \left(\frac{DATA}{MODEL} \right) + MODEL - DATA ) }` 115 + ``SIGNIFICANCE``: :math:`{\rm sign}(DATA-MODEL) \times \sqrt{ 2
  116 + \times ( DATA \times \ln \left(\frac{DATA}{MODEL} \right) +
  117 + MODEL - DATA ) }`
112 118
113 119
114 Standard parameters 120 Standard parameters
doc/source/users/reference_manual/csresspec.rst
@@ -32,10 +32,14 @@ residuals are calculated separately for each observation. @@ -32,10 +32,14 @@ residuals are calculated separately for each observation.
32 32
33 Four options exist then for residual computation: 33 Four options exist then for residual computation:
34 34
35 -- the subtraction of the model from the counts (SUB)  
36 -- the subtraction and division by the model (SUBDIV)  
37 -- the subtraction and division by the square root of the model (SUBDIVSQRT)  
38 -- the computation of the significance using Li & Ma (SIGNIFICANCE) 35 +- the subtraction of the model from the counts (``SUB``)
  36 +- the subtraction and division by the model (``SUBDIV``)
  37 +- the subtraction and division by the square root of the model (``SUBDIVSQRT``)
  38 +- the computation of the significance based on the likelihood-ratio
  39 + test for Poisson statistics (``SIGNIFICANCE``)
  40 +
  41 +The ``SUBDIVSQRT`` and ``SIGNIFICANCE`` algorithms approximate the residual
  42 +significance and may become inaccurate in the low-counting regime.
39 43
40 The counts, model, and residual spectra are written into a FITS file. 44 The counts, model, and residual spectra are written into a FITS file.
41 45
@@ -162,7 +166,9 @@ General parameters @@ -162,7 +166,9 @@ General parameters
162 166
163 ``SUBDIVSQRT``: :math:`(DATA - MODEL) / \sqrt{MODEL}` 167 ``SUBDIVSQRT``: :math:`(DATA - MODEL) / \sqrt{MODEL}`
164 168
165 - ``SIGNIFICANCE``: :math:`{\rm sign}(DATA-MODEL) \times \sqrt{ 2 \times ( DATA \times \ln \left(\frac{DATA}{MODEL} \right) + MODEL - DATA ) }` 169 + ``SIGNIFICANCE``: :math:`{\rm sign}(DATA-MODEL) \times \sqrt{ 2
  170 + \times ( DATA \times \ln \left(\frac{DATA}{MODEL} \right) +
  171 + MODEL - DATA ) }`
166 172
167 173
168 Standard parameters 174 Standard parameters
doc/source/users/tutorials/hess_dr1/bkgmodel.ipynb 0 → 100644
  1 +{
  2 + "cells": [
  3 + {
  4 + "cell_type": "markdown",
  5 + "metadata": {},
  6 + "source": [
  7 + "# Generating a background model from the data"
  8 + ]
  9 + },
  10 + {
  11 + "cell_type": "raw",
  12 + "metadata": {},
  13 + "source": [
  14 + "<div align=\"right\"><a href=\"../../../_downloads/bkgmodel.ipynb\" download=\"bkgmodel.ipynb\"><img src=\"../../../_static/download-notebook.jpg\" alt=\"Download Notebook\" height=\"40\"></a></div>"
  15 + ]
  16 + },
  17 + {
  18 + "cell_type": "markdown",
  19 + "metadata": {},
  20 + "source": [
  21 + "**In this tutorial you will learn to generate a background model from the data**\n",
  22 + "\n",
  23 + "The public H.E.S.S. data do not contain a model for the instrumental background. We can generate one from the data using the csbkgmodel script.\n",
  24 + "\n",
  25 + "We start with the usual imports."
  26 + ]
  27 + },
  28 + {
  29 + "cell_type": "code",
  30 + "execution_count": 15,
  31 + "metadata": {},
  32 + "outputs": [],
  33 + "source": [
  34 + "import gammalib\n",
  35 + "import ctools\n",
  36 + "import cscripts"
  37 + ]
  38 + },
  39 + {
  40 + "cell_type": "markdown",
  41 + "metadata": {},
  42 + "source": [
  43 + "We will use the same events selected in a previous tutorial. For the spatial part we will model the background as a radial Gaussian modified by a bi-linear gradient. For the spectral part we will use a piece-wise power law with 8 nodes between 0.7 TeV and 30 TeV. Note that for a reasonable background fit the nodes should be within the energy range covered by the observations and where there are enough photon counts to constrain the model, hence the upper energy bound at 30 TeV."
  44 + ]
  45 + },
  46 + {
  47 + "cell_type": "code",
  48 + "execution_count": 16,
  49 + "metadata": {},
  50 + "outputs": [],
  51 + "source": [
  52 + "obsfile = \"obs_crab_selected.xml\"\n",
  53 + "outmodel = 'bkgmodel.xml'\n",
  54 + "\n",
  55 + "bkgmodel = cscripts.csbkgmodel()\n",
  56 + "bkgmodel['inobs'] = obsfile\n",
  57 + "bkgmodel['outmodel'] = outmodel\n",
  58 + "bkgmodel['instrument'] = 'HESS'\n",
  59 + "bkgmodel['spatial'] = 'GAUSS'\n",
  60 + "bkgmodel['gradient'] = True\n",
  61 + "bkgmodel['ebinalg'] = 'LOG'\n",
  62 + "bkgmodel['emin'] = 0.7\n",
  63 + "bkgmodel['emax'] = 30.\n",
  64 + "bkgmodel['enumbins'] = 8\n",
  65 + "bkgmodel['runwise'] = True\n",
  66 + "\n",
  67 + "bkgmodel.execute()"
  68 + ]
  69 + },
  70 + {
  71 + "cell_type": "markdown",
  72 + "metadata": {},
  73 + "source": [
  74 + "Let's look at the resulting background model."
  75 + ]
  76 + },
  77 + {
  78 + "cell_type": "code",
  79 + "execution_count": 17,
  80 + "metadata": {},
  81 + "outputs": [
  82 + {
  83 + "name": "stdout",
  84 + "output_type": "stream",
  85 + "text": [
  86 + "=== GModels ===\n",
  87 + " Number of models ..........: 4\n",
  88 + " Number of parameters ......: 80\n",
  89 + "=== GCTAModelBackground ===\n",
  90 + " Name ......................: Background_023523\n",
  91 + " Instruments ...............: HESS\n",
  92 + " Instrument scale factors ..: unity\n",
  93 + " Observation identifiers ...: 023523\n",
  94 + " Model type ................: CTABackground\n",
  95 + " Model components ..........: \"Multiplicative\" * \"NodeFunction\" * \"Constant\"\n",
  96 + " Number of parameters ......: 20\n",
  97 + " Number of spatial par's ...: 3\n",
  98 + " 1:Sigma ..................: 3.19679118852325 +/- 0.148784221714502 [7.71728e-08,infty[ deg2 (free,scale=1,gradient)\n",
  99 + " 2:Grad_DETX ..............: 0.0882131070561384 +/- 0.0223563997131535 deg^-1 (free,scale=1,gradient)\n",
  100 + " 2:Grad_DETY ..............: -0.000692481271743188 +/- 0.0227254581791992 deg^-1 (free,scale=1,gradient)\n",
  101 + " Number of spectral par's ..: 16\n",
  102 + " Energy0 ..................: 700000 [7e-05,infty[ MeV (fixed,scale=700000)\n",
  103 + " Intensity0 ...............: 0.00149714476600658 +/- 0.000185798282794166 [9.46696076103918e-14,infty[ ph/cm2/s/MeV (free,scale=0.000946696076103918,gradient)\n",
  104 + " Energy1 ..................: 1197413.67463685 [0.000119741367463685,infty[ MeV (fixed,scale=1197413.67463685)\n",
  105 + " Intensity1 ...............: 0.000275025454049597 +/- 1.50407490107521e-05 [3.11144874586726e-14,infty[ ph/cm2/s/MeV (free,scale=0.000311144874586726,gradient)\n",
  106 + " Energy2 ..................: 2048285.01172474 [0.000204828501172474,infty[ MeV (fixed,scale=2048285.01172474)\n",
  107 + " Intensity2 ...............: 9.68931866899334e-05 +/- 5.86314382972939e-06 [1.02262104412654e-14,infty[ ph/cm2/s/MeV (free,scale=0.000102262104412654,gradient)\n",
  108 + " Energy3 ..................: 3503777.83227556 [0.000350377783227556,infty[ MeV (fixed,scale=3503777.83227556)\n",
  109 + " Intensity3 ...............: 3.42414862721453e-05 +/- 2.61283857499118e-06 [3.36098674702412e-15,infty[ ph/cm2/s/MeV (free,scale=3.36098674702412e-05,gradient)\n",
  110 + " Energy4 ..................: 5993530.69893743 [0.000599353069893743,infty[ MeV (fixed,scale=5993530.69893743)\n",
  111 + " Intensity4 ...............: 1.2134598847599e-05 +/- 1.19969987797427e-06 [1.10463518999066e-15,infty[ ph/cm2/s/MeV (free,scale=1.10463518999066e-05,gradient)\n",
  112 + " Energy5 ..................: 10252479.454662 [0.0010252479454662,infty[ MeV (fixed,scale=10252479.454662)\n",
  113 + " Intensity5 ...............: 4.80035386464156e-06 +/- 6.14208278785316e-07 [3.63053768077518e-16,infty[ ph/cm2/s/MeV (free,scale=3.63053768077518e-06,gradient)\n",
  114 + " Energy6 ..................: 17537798.7113509 [0.00175377987113509,infty[ MeV (fixed,scale=17537798.7113509)\n",
  115 + " Intensity6 ...............: 8.5455367005893e-07 +/- 1.75301261074233e-07 [1.19322686539072e-16,infty[ ph/cm2/s/MeV (free,scale=1.19322686539072e-06,gradient)\n",
  116 + " Energy7 ..................: 30000000 [0.003,infty[ MeV (fixed,scale=30000000)\n",
  117 + " Intensity7 ...............: 2.8110106615004e-07 +/- 1.02501352381156e-07 [3.92170658310361e-17,infty[ ph/cm2/s/MeV (free,scale=3.92170658310361e-07,gradient)\n",
  118 + " Number of temporal par's ..: 1\n",
  119 + " Normalization ............: 1 (relative value) (fixed,scale=1,gradient)\n",
  120 + "=== GCTAModelBackground ===\n",
  121 + " Name ......................: Background_023526\n",
  122 + " Instruments ...............: HESS\n",
  123 + " Instrument scale factors ..: unity\n",
  124 + " Observation identifiers ...: 023526\n",
  125 + " Model type ................: CTABackground\n",
  126 + " Model components ..........: \"Multiplicative\" * \"NodeFunction\" * \"Constant\"\n",
  127 + " Number of parameters ......: 20\n",
  128 + " Number of spatial par's ...: 3\n",
  129 + " 1:Sigma ..................: 3.30082205953218 +/- 0.156912956620767 [7.71728e-08,infty[ deg2 (free,scale=1,gradient)\n",
  130 + " 2:Grad_DETX ..............: 0.0153115422362867 +/- 0.0215680816698383 deg^-1 (free,scale=1,gradient)\n",
  131 + " 2:Grad_DETY ..............: -0.00906905077562078 +/- 0.0213184759257543 deg^-1 (free,scale=1,gradient)\n",
  132 + " Number of spectral par's ..: 16\n",
  133 + " Energy0 ..................: 700000 [7e-05,infty[ MeV (fixed,scale=700000)\n",
  134 + " Intensity0 ...............: 0.00115207913907334 +/- 6.11872558313686e-05 [8.950257713407e-14,infty[ ph/cm2/s/MeV (free,scale=0.0008950257713407,gradient)\n",
  135 + " Energy1 ..................: 1197413.67463685 [0.000119741367463685,infty[ MeV (fixed,scale=1197413.67463685)\n",
  136 + " Intensity1 ...............: 0.000216074985117796 +/- 1.14346974881101e-05 [2.82228203274059e-14,infty[ ph/cm2/s/MeV (free,scale=0.000282228203274059,gradient)\n",
  137 + " Energy2 ..................: 2048285.01172474 [0.000204828501172474,infty[ MeV (fixed,scale=2048285.01172474)\n",
  138 + " Intensity2 ...............: 9.80980717622882e-05 +/- 6.14243331439364e-06 [8.8994933189452e-15,infty[ ph/cm2/s/MeV (free,scale=8.8994933189452e-05,gradient)\n",
  139 + " Energy3 ..................: 3503777.83227556 [0.000350377783227556,infty[ MeV (fixed,scale=3503777.83227556)\n",
  140 + " Intensity3 ...............: 2.64302082334315e-05 +/- 2.27978082923659e-06 [2.80627451173057e-15,infty[ ph/cm2/s/MeV (free,scale=2.80627451173057e-05,gradient)\n",
  141 + " Energy4 ..................: 5993530.69893743 [0.000599353069893743,infty[ MeV (fixed,scale=5993530.69893743)\n",
  142 + " Intensity4 ...............: 1.03353701064884e-05 +/- 1.13230244143927e-06 [8.84901685180661e-16,infty[ ph/cm2/s/MeV (free,scale=8.84901685180661e-06,gradient)\n",
  143 + " Energy5 ..................: 10252479.454662 [0.0010252479454662,infty[ MeV (fixed,scale=10252479.454662)\n",
  144 + " Intensity5 ...............: 3.57899467682822e-06 +/- 5.03727665165389e-07 [2.79035778275547e-16,infty[ ph/cm2/s/MeV (free,scale=2.79035778275547e-06,gradient)\n",
  145 + " Energy6 ..................: 17537798.7113509 [0.00175377987113509,infty[ MeV (fixed,scale=17537798.7113509)\n",
  146 + " Intensity6 ...............: 5.95101204005172e-07 +/- 1.41251129058325e-07 [8.79882667891458e-17,infty[ ph/cm2/s/MeV (free,scale=8.79882667891458e-07,gradient)\n",
  147 + " Energy7 ..................: 30000000 [0.003,infty[ MeV (fixed,scale=30000000)\n",
  148 + " Intensity7 ...............: 2.81714577113613e-07 +/- 1.0384120888285e-07 [2.77453133085778e-17,infty[ ph/cm2/s/MeV (free,scale=2.77453133085778e-07,gradient)\n",
  149 + " Number of temporal par's ..: 1\n",
  150 + " Normalization ............: 1 (relative value) (fixed,scale=1,gradient)\n",
  151 + "=== GCTAModelBackground ===\n",
  152 + " Name ......................: Background_023559\n",
  153 + " Instruments ...............: HESS\n",
  154 + " Instrument scale factors ..: unity\n",
  155 + " Observation identifiers ...: 023559\n",
  156 + " Model type ................: CTABackground\n",
  157 + " Model components ..........: \"Multiplicative\" * \"NodeFunction\" * \"Constant\"\n",
  158 + " Number of parameters ......: 20\n",
  159 + " Number of spatial par's ...: 3\n",
  160 + " 1:Sigma ..................: 4.32704862685447 +/- 0.368685355107103 [7.71728e-08,infty[ deg2 (free,scale=1,gradient)\n",
  161 + " 2:Grad_DETX ..............: 0.018772378083067 +/- 0.0217106872366865 deg^-1 (free,scale=1,gradient)\n",
  162 + " 2:Grad_DETY ..............: -0.126627961668458 +/- 0.0204738085196433 deg^-1 (free,scale=1,gradient)\n",
  163 + " Number of spectral par's ..: 16\n",
  164 + " Energy0 ..................: 700000 [7e-05,infty[ MeV (fixed,scale=700000)\n",
  165 + " Intensity0 ...............: 0.000915773345685034 +/- 4.89989530347851e-05 [7.43957604504927e-14,infty[ ph/cm2/s/MeV (free,scale=0.000743957604504927,gradient)\n",
  166 + " Energy1 ..................: 1197413.67463685 [0.000119741367463685,infty[ MeV (fixed,scale=1197413.67463685)\n",
  167 + " Intensity1 ...............: 0.000197398656687683 +/- 1.07759903733823e-05 [2.35277778278335e-14,infty[ ph/cm2/s/MeV (free,scale=0.000235277778278335,gradient)\n",
  168 + " Energy2 ..................: 2048285.01172474 [0.000204828501172474,infty[ MeV (fixed,scale=2048285.01172474)\n",
  169 + " Intensity2 ...............: 6.93704083542102e-05 +/- 4.77505196699795e-06 [7.44069724086306e-15,infty[ ph/cm2/s/MeV (free,scale=7.44069724086306e-05,gradient)\n",
  170 + " Energy3 ..................: 3503777.83227556 [0.000350377783227556,infty[ MeV (fixed,scale=3503777.83227556)\n",
  171 + " Intensity3 ...............: 2.57663537500693e-05 +/- 2.20136814658691e-06 [2.35313236274662e-15,infty[ ph/cm2/s/MeV (free,scale=2.35313236274662e-05,gradient)\n",
  172 + " Energy4 ..................: 5993530.69893743 [0.000599353069893743,infty[ MeV (fixed,scale=5993530.69893743)\n",
  173 + " Intensity4 ...............: 6.82483279973139e-06 +/- 7.86680350899204e-07 [7.44181860564889e-16,infty[ ph/cm2/s/MeV (free,scale=7.44181860564889e-06,gradient)\n",
  174 + " Energy5 ..................: 10252479.454662 [0.0010252479454662,infty[ MeV (fixed,scale=10252479.454662)\n",
  175 + " Intensity5 ...............: 3.3292540797357e-06 +/- 4.68826132796518e-07 [2.35348699614757e-16,infty[ ph/cm2/s/MeV (free,scale=2.35348699614757e-06,gradient)\n",
  176 + " Energy6 ..................: 17537798.7113509 [0.00175377987113509,infty[ MeV (fixed,scale=17537798.7113509)\n",
  177 + " Intensity6 ...............: 8.19437245391855e-07 +/- 1.82363529352901e-07 [7.44294013943215e-17,infty[ ph/cm2/s/MeV (free,scale=7.44294013943215e-07,gradient)\n",
  178 + " Energy7 ..................: 30000000 [0.003,infty[ MeV (fixed,scale=30000000)\n",
  179 + " Intensity7 ...............: 1.44457348642334e-07 +/- 7.0968299684809e-08 [2.35384168299424e-17,infty[ ph/cm2/s/MeV (free,scale=2.35384168299424e-07,gradient)\n",
  180 + " Number of temporal par's ..: 1\n",
  181 + " Normalization ............: 1 (relative value) (fixed,scale=1,gradient)\n",
  182 + "=== GCTAModelBackground ===\n",
  183 + " Name ......................: Background_023592\n",
  184 + " Instruments ...............: HESS\n",
  185 + " Instrument scale factors ..: unity\n",
  186 + " Observation identifiers ...: 023592\n",
  187 + " Model type ................: CTABackground\n",
  188 + " Model components ..........: \"Multiplicative\" * \"NodeFunction\" * \"Constant\"\n",
  189 + " Number of parameters ......: 20\n",
  190 + " Number of spatial par's ...: 3\n",
  191 + " 1:Sigma ..................: 3.6479543205698 +/- 0.238749563358304 [7.71728e-08,infty[ deg2 (free,scale=1,gradient)\n",
  192 + " 2:Grad_DETX ..............: 0.0290086310507671 +/- 0.0231654281693484 deg^-1 (free,scale=1,gradient)\n",
  193 + " 2:Grad_DETY ..............: 0.165462911909218 +/- 0.0212932684624286 deg^-1 (free,scale=1,gradient)\n",
  194 + " Number of spectral par's ..: 16\n",
  195 + " Energy0 ..................: 700000 [7e-05,infty[ MeV (fixed,scale=700000)\n",
  196 + " Intensity0 ...............: 0.00147439433272687 +/- 0.000191693450881709 [8.6655214667889e-14,infty[ ph/cm2/s/MeV (free,scale=0.00086655214667889,gradient)\n",
  197 + " Energy1 ..................: 1197413.67463685 [0.000119741367463685,infty[ MeV (fixed,scale=1197413.67463685)\n",
  198 + " Intensity1 ...............: 0.000235250773930648 +/- 1.37598369145017e-05 [2.81551973223247e-14,infty[ ph/cm2/s/MeV (free,scale=0.000281551973223247,gradient)\n",
  199 + " Energy2 ..................: 2048285.01172474 [0.000204828501172474,infty[ MeV (fixed,scale=2048285.01172474)\n",
  200 + " Intensity2 ...............: 9.20623251759662e-05 +/- 5.75965738880592e-06 [9.1479219028787e-15,infty[ ph/cm2/s/MeV (free,scale=9.1479219028787e-05,gradient)\n",
  201 + " Energy3 ..................: 3503777.83227556 [0.000350377783227556,infty[ MeV (fixed,scale=3503777.83227556)\n",
  202 + " Intensity3 ...............: 3.22022945215284e-05 +/- 2.53414761162924e-06 [2.97225674475431e-15,infty[ ph/cm2/s/MeV (free,scale=2.97225674475431e-05,gradient)\n",
  203 + " Energy4 ..................: 5993530.69893743 [0.000599353069893743,infty[ MeV (fixed,scale=5993530.69893743)\n",
  204 + " Intensity4 ...............: 1.00701723302328e-05 +/- 1.04797408736245e-06 [9.65717706221071e-16,infty[ ph/cm2/s/MeV (free,scale=9.65717706221071e-06,gradient)\n",
  205 + " Energy5 ..................: 10252479.454662 [0.0010252479454662,infty[ MeV (fixed,scale=10252479.454662)\n",
  206 + " Intensity5 ...............: 3.29354066928594e-06 +/- 4.58158358563221e-07 [3.1377191413724e-16,infty[ ph/cm2/s/MeV (free,scale=3.1377191413724e-06,gradient)\n",
  207 + " Energy6 ..................: 17537798.7113509 [0.00175377987113509,infty[ MeV (fixed,scale=17537798.7113509)\n",
  208 + " Intensity6 ...............: 8.71669675678694e-07 +/- 1.76346292129154e-07 [1.01947819188903e-16,infty[ ph/cm2/s/MeV (free,scale=1.01947819188903e-06,gradient)\n",
  209 + " Energy7 ..................: 30000000 [0.003,infty[ MeV (fixed,scale=30000000)\n",
  210 + " Intensity7 ...............: 3.12067435753287e-07 +/- 1.11366909796179e-07 [3.31239265501224e-17,infty[ ph/cm2/s/MeV (free,scale=3.31239265501224e-07,gradient)\n",
  211 + " Number of temporal par's ..: 1\n",
  212 + " Normalization ............: 1 (relative value) (fixed,scale=1,gradient)\n"
  213 + ]
  214 + }
  215 + ],
  216 + "source": [
  217 + "print(gammalib.GModels(outmodel))"
  218 + ]
  219 + }
  220 + ],
  221 + "metadata": {
  222 + "kernelspec": {
  223 + "display_name": "Python 3",
  224 + "language": "python",
  225 + "name": "python3"
  226 + },
  227 + "language_info": {
  228 + "codemirror_mode": {
  229 + "name": "ipython",
  230 + "version": 3
  231 + },
  232 + "file_extension": ".py",
  233 + "mimetype": "text/x-python",
  234 + "name": "python",
  235 + "nbconvert_exporter": "python",
  236 + "pygments_lexer": "ipython3",
  237 + "version": "3.5.4"
  238 + }
  239 + },
  240 + "nbformat": 4,
  241 + "nbformat_minor": 2
  242 +}
doc/source/users/tutorials/hess_dr1/classical.ipynb 0 → 100644
  1 +{
  2 + "cells": [
  3 + {
  4 + "cell_type": "markdown",
  5 + "metadata": {},
  6 + "source": [
  7 + "# Performing a classical On/Off analysis"
  8 + ]
  9 + },
  10 + {
  11 + "cell_type": "raw",
  12 + "metadata": {},
  13 + "source": [
  14 + "<div align=\"right\"><a href=\"../../../_downloads/classical.ipynb\" download=\"classical.ipynb\"><img src=\"../../../_static/download-notebook.jpg\" alt=\"Download Notebook\" height=\"40\"></a></div>"
  15 + ]
  16 + },
  17 + {
  18 + "cell_type": "markdown",
  19 + "metadata": {},
  20 + "source": [
  21 + "**In this tutorial you will learn to perform a classical On/Off analysis of the data.**\n",
  22 + "\n",
  23 + "We start by importing the gammalib, ctools, and cscripts Python modules."
  24 + ]
  25 + },
  26 + {
  27 + "cell_type": "code",
  28 + "execution_count": 4,
  29 + "metadata": {},
  30 + "outputs": [],
  31 + "source": [
  32 + "import gammalib\n",
  33 + "import ctools\n",
  34 + "import cscripts"
  35 + ]
  36 + },
  37 + {
  38 + "cell_type": "markdown",
  39 + "metadata": {},
  40 + "source": [
  41 + "We will also use matplotlib to display the results."
  42 + ]
  43 + },
  44 + {
  45 + "cell_type": "code",
  46 + "execution_count": 5,
  47 + "metadata": {},
  48 + "outputs": [],
  49 + "source": [
  50 + "%matplotlib inline\n",
  51 + "import matplotlib.pyplot as plt"
  52 + ]
  53 + },
  54 + {
  55 + "cell_type": "markdown",
  56 + "metadata": {},
  57 + "source": [
  58 + "And finally we add to our path the directory containing the example plotting scripts provided with the ctools installation."
  59 + ]
  60 + },
  61 + {
  62 + "cell_type": "code",
  63 + "execution_count": 6,
  64 + "metadata": {},
  65 + "outputs": [],
  66 + "source": [
  67 + "import sys\n",
  68 + "import os\n",
  69 + "sys.path.append(os.environ['CTOOLS']+'/share/examples/python/')"
  70 + ]
  71 + },
  72 + {
  73 + "cell_type": "markdown",
  74 + "metadata": {},
  75 + "source": [
  76 + "## Preparing the binned observations\n",
  77 + "\n",
  78 + "The first step for a classical analysis is to bin the events in bins of energy for an On (signal) region, and one or several Off (background regions).\n",
  79 + "\n",
  80 + "We will use the event selection performed in the previous tutorial."
  81 + ]
  82 + },
  83 + {
  84 + "cell_type": "code",
  85 + "execution_count": 21,
  86 + "metadata": {},
  87 + "outputs": [],
  88 + "source": [
  89 + "obsfile = \"obs_crab_selected.xml\"\n",
  90 + "\n",
  91 + "phagen = cscripts.csphagen()\n",
  92 + "phagen['inobs'] = obsfile\n",
  93 + "phagen['inmodel'] = 'NONE' # assume that the source is pointlike\n",
  94 + "phagen['ebinalg'] = 'LOG'\n",
  95 + "phagen['emin'] = 0.66\n",
  96 + "phagen['emax'] = 30.\n",
  97 + "phagen['enumbins'] = 20\n",
  98 + "phagen['coordsys'] = 'CEL'\n",
  99 + "phagen['ra'] = 83.63\n",
  100 + "phagen['dec'] = 22.01\n",
  101 + "phagen['rad'] = 0.2\n",
  102 + "phagen['bkgmethod'] = 'REFLECTED'\n",
  103 + "phagen['use_irf_bkg'] = False\n",
  104 + "phagen['maxoffset'] = 2.0\n",
  105 + "phagen['stack'] = True # treat observations separately in joint likelihood fit\n",
  106 + "\n",
  107 + "phagen.run()"
  108 + ]
  109 + },
  110 + {
  111 + "cell_type": "markdown",
  112 + "metadata": {},
  113 + "source": [
  114 + "Note that we have used the hidden parameter *use_irf_bkg* to specify that no background model should be used in the computation of the background normalisation factor, which is simply assumed to be the ratio of the solid angles of On/Off regions.\n",
  115 + "\n",
  116 + "## Likelihood fit\n",
  117 + "\n",
  118 + "The next step will be to fit a model for the source to the On data (along with a model for the background derived directly from the On/Off data). The model for the source is"
  119 + ]
  120 + },
  121 + {
  122 + "cell_type": "code",
  123 + "execution_count": 22,
  124 + "metadata": {},
  125 + "outputs": [
  126 + {
  127 + "name": "stdout",
  128 + "output_type": "stream",
  129 + "text": [
  130 + "=== GModels ===\n",
  131 + " Number of models ..........: 1\n",
  132 + " Number of parameters ......: 6\n",
  133 + "=== GModelSky ===\n",
  134 + " Name ......................: Crab\n",
  135 + " Instruments ...............: all\n",
  136 + " Instrument scale factors ..: unity\n",
  137 + " Observation identifiers ...: all\n",
  138 + " Model type ................: PointSource\n",
  139 + " Model components ..........: \"PointSource\" * \"PowerLaw\" * \"Constant\"\n",
  140 + " Number of parameters ......: 6\n",
  141 + " Number of spatial par's ...: 2\n",
  142 + " RA .......................: 83.6331 [-360,360] deg (fixed,scale=1)\n",
  143 + " DEC ......................: 22.0145 [-90,90] deg (fixed,scale=1)\n",
  144 + " Number of spectral par's ..: 3\n",
  145 + " Prefactor ................: 5.7e-17 +/- 0 [1e-24,1e-14] ph/cm2/s/MeV (free,scale=1e-17,gradient)\n",
  146 + " Index ....................: -2.48 +/- 0 [-0,-5] (free,scale=-1,gradient)\n",
  147 + " PivotEnergy ..............: 1000000 [10000,1000000000] MeV (fixed,scale=1000000,gradient)\n",
  148 + " Number of temporal par's ..: 1\n",
  149 + " Normalization ............: 1 (relative value) (fixed,scale=1,gradient)\n"
  150 + ]
  151 + }
  152 + ],
  153 + "source": [
  154 + "srcmodel = os.environ['CTOOLS']+'/share/models/crab_nobkg.xml'\n",
  155 + "\n",
  156 + "print(gammalib.GModels(srcmodel))"
  157 + ]
  158 + },
  159 + {
  160 + "cell_type": "markdown",
  161 + "metadata": {},
  162 + "source": [
  163 + "We can now fit this model to the data. Note that we have to specify WSTAT as statistic to derive the background model from the data without prior information."
  164 + ]
  165 + },
  166 + {
  167 + "cell_type": "code",
  168 + "execution_count": 23,
  169 + "metadata": {},
  170 + "outputs": [],
  171 + "source": [
  172 + "like = ctools.ctlike(phagen.obs())\n",
  173 + "\n",
  174 + "like['statistic'] = 'WSTAT'\n",
  175 + "like['inmodel'] = srcmodel\n",
  176 + "\n",
  177 + "like.run()"
  178 + ]
  179 + },
  180 + {
  181 + "cell_type": "markdown",
  182 + "metadata": {},
  183 + "source": [
  184 + "We can now look at the results from the optimisation and the fitted model."
  185 + ]
  186 + },
  187 + {
  188 + "cell_type": "code",
  189 + "execution_count": 24,
  190 + "metadata": {},
  191 + "outputs": [
  192 + {
  193 + "name": "stdout",
  194 + "output_type": "stream",
  195 + "text": [
  196 + "=== GOptimizerLM ===\n",
  197 + " Optimized function value ..: 16.457\n",
  198 + " Absolute precision ........: 0.005\n",
  199 + " Acceptable value decrease .: 2\n",
  200 + " Optimization status .......: converged\n",
  201 + " Number of parameters ......: 6\n",
  202 + " Number of free parameters .: 2\n",
  203 + " Number of iterations ......: 4\n",
  204 + " Lambda ....................: 1e-07\n",
  205 + "=== GModels ===\n",
  206 + " Number of models ..........: 1\n",
  207 + " Number of parameters ......: 6\n",
  208 + "=== GModelSky ===\n",
  209 + " Name ......................: Crab\n",
  210 + " Instruments ...............: all\n",
  211 + " Instrument scale factors ..: unity\n",
  212 + " Observation identifiers ...: all\n",
  213 + " Model type ................: PointSource\n",
  214 + " Model components ..........: \"PointSource\" * \"PowerLaw\" * \"Constant\"\n",
  215 + " Number of parameters ......: 6\n",
  216 + " Number of spatial par's ...: 2\n",
  217 + " RA .......................: 83.6331 [-360,360] deg (fixed,scale=1)\n",
  218 + " DEC ......................: 22.0145 [-90,90] deg (fixed,scale=1)\n",
  219 + " Number of spectral par's ..: 3\n",
  220 + " Prefactor ................: 4.58230817013557e-17 +/- 3.14037370499303e-18 [1e-24,1e-14] ph/cm2/s/MeV (free,scale=1e-17,gradient)\n",
  221 + " Index ....................: -2.6252889331251 +/- 0.0832081186871608 [-0,-5] (free,scale=-1,gradient)\n",
  222 + " PivotEnergy ..............: 1000000 [10000,1000000000] MeV (fixed,scale=1000000,gradient)\n",
  223 + " Number of temporal par's ..: 1\n",
  224 + " Normalization ............: 1 (relative value) (fixed,scale=1,gradient)\n"
  225 + ]
  226 + }
  227 + ],
  228 + "source": [
  229 + "print(like.opt())\n",
  230 + "print(like.obs().models())"
  231 + ]
  232 + },
  233 + {
  234 + "cell_type": "markdown",
  235 + "metadata": {},
  236 + "source": [
  237 + "The fit has properly converged and the results are consistent with those obtained with the unbinned analysis.\n",
  238 + "\n",
  239 + "We will also check the spectral residuals."
  240 + ]
  241 + },
  242 + {
  243 + "cell_type": "code",
  244 + "execution_count": 26,
  245 + "metadata": {},
  246 + "outputs": [
  247 + {
  248 + "data": {
  249 + "image/png": "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UuDuvZZIJJLyuEgk0us4KX9quZas5VLCT0REwk/jZLYJqjyv/g9KTyiT61IpxSeqMiIiIgIqzyvbhDK5LqVSfJUs1yoj+ZpuXUREwqVcW1sbGxsTybUahipXKJNrKQ3ZVhn5jyv+lLfp1qF8H9IiIiISPkqupegG66sdT5TfeeedfvvUVzv8qqqqmDhxIu5OVVUVV111FUcccUTG1znnnHOYNWsWp556agGizM1OO+2UKBkoIlKq1DBVOKoWIiUl09HUfWtjJ69L6dlxxx1ZtmwZzz//PN///vf5xje+UfQYPvroo6LfU0REKoeSawmtgWpjK8EOh40bN7LrrrsC0clhZsyYwdSpU5k4cSJ333134rhf/vKXTJo0iYMPPpgvfvGL/a7z7W9/m3POOYePP/6Ye++9lwMOOIAjjzySr3zlK8yaNQuIDqBtbm7m2GOP5ayzzmLz5s3MnTuXiRMnMmXKFBYvXgzA/PnzueiiixLXnjVrFo899hgQbZG+/PLLOfjggznssMN48803AfjLX/7C4YcfziGHHMK3v/3tgvysREQkPNQtRAKRS5WR5Alq+tJsWGm67zJYuyK/19xzIhx3xaCHvP/++0yePJnNmzfzxhtv8OijjwIwfPhw7rrrLkaOHMn69es57LDDOOGEE3jppZdoa2vjD3/4A6NGjeLtt9/udb2vf/3rdHd3c+ONN/LBBx9w/vnn88QTTzBu3DjOPPPMXscuXbqUJ598kh133JEf//jHAKxYsYJXXnmFY489lldffXXQ2N977z0OO+ww2tra+PrXv87111/Pt771LS6++GL+9V//lbPOOourr74605+aiIiUGbVcS9GdOHlvJuw1MugwJADxbiGvvPIK999/P2eddVaiK9A3v/lNJk2axDHHHMPf/vY33nzzTR599FFOPfVURo2KTli02267Ja71ve99j3feeYfrrrsOM+OVV15h3333Zdy4cQD9kusTTjiBHXfcEYAnn3wy0Qp+wAEHEIlEhkyud9hhh0RL+LRp0xKVAP7whz8k7pWqZV1ERCpLKFuuVec63LKtMtLa+mCv+tiqjZ2DIVqYi+Hwww9n/fr1rFu3jnvvvZd169axdOlSqqurqaurY/Pmzbj7gDNzHnLIISxdupS3336b3XbbbchPKEaMGJH4eqBjt99+ez7++OPE+ubNmxNfV1dXJ2Kpqqrq1Xdbs4eKiEhcKFuu3X2RuzfX1tYGHYoEoLW1ldbWVqZNm0Z1dXWvfcm1sePLggULAopUBvPKK6+wdetWdt99d7q7u9ljjz2orq5m8eLFiT+aZsyYwe23386GDRsAenULmTlzJpdddhnHH388mzZt4oADDmDVqlWJP6xuu+22Ae991FFHJfrmv/rqq/z1r39l//33p66ujmXLlvHxxx+zevVqnn322SG/j0996lPceuutAOrvL6GkgeEi+RXKlmupTJuGjepVHzuX2tgSjHifa4i2Ht90001UVVXR2NjI7NmzaWhoYPLkyRxwwAEAHHjggVx++eUcffTRVFVVMWXKFObPn5+43he+8AU2bdrECSecwL333svPfvYzZs6cyahRozj00EMHjOPCCy/kggsuYOLEiWy//fbMnz+fYcOG8alPfYpx48YxceJEDjroIKZOnTrk9/STn/yEOXPm8JOf/IRTTjkltx+QSJENNDAc0MyCIlmyMA/2amho8CVLlhTlXvEay8lTdktxxQdA9q2PPVitTv2/bfPyyy/zyU9+MugwCurdd99lp512wt35t3/7N+rr67n00kuDDivlz97Mlrp7Q0AhBaKYz+xSkk094WxrEA91XrZdmIa6Xr7jDLNif2/6PyiedJ/barmWUElVZeS0a58CSFl9ZEJRopJScf3113PTTTfx4YcfMmXKFM4///ygQxIRkQqj5FpC48TJewcdgpS4Sy+9tCRaqiuFmd0AzALecveDgo5Hhta3lVIDw0XyT8m1hEY2VUZaWx8sUDQiAswHrgJ+GXAcJavvYMG2traS6svc1tZGc3MzPT09iW01NTW0tbUFGJVIuIWyWoiIiATP3Z8A3h7ywAqV7Syyxaze0djYSHt7e2I9EonQ3t5eUn8AiISNWq6lIsQHNmaivr6eOXPmFCAakcphZs1AM8DYsZnXtx/i2kDpDMhKZ7Bg31lk+8aeS/WObFvJGxsbE/GoK4hI7tRyLWVt07BRA+4baip1lfCLJguaIEVy4e7t7t7g7g2jR48OOpySE3+PxZempqZeXTRgW0KefFxf2baSi0j+qeVaytrqXaN1ivuW7wMSiXWqMn3ZtHTL0Kqqqpg4cSJbtmxh++235+yzz+aSSy5hu+0G/ju/s7OTp556Sp8iSMnLZrBgtn+8ZtNKnipGEck/JddS9lKV70uW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\n",
  250 + "text/plain": [
  251 + "<matplotlib.figure.Figure at 0x110a33908>"
  252 + ]
  253 + },
  254 + "metadata": {},
  255 + "output_type": "display_data"
  256 + }
  257 + ],
  258 + "source": [
  259 + "residuals = 'residuals_classical.fits'\n",
  260 + "res = cscripts.csresspec(like.obs())\n",
  261 + "\n",
  262 + "res['statistic'] = 'WSTAT'\n",
  263 + "res['components'] = True\n",
  264 + "res['algorithm'] = 'SIGNIFICANCE'\n",
  265 + "res['outfile'] = residuals\n",
  266 + "\n",
  267 + "res.execute()\n",
  268 + "\n",
  269 + "from show_residuals import plot_residuals\n",
  270 + "plot_residuals(residuals,'',0)"
  271 + ]
  272 + }
  273 + ],
  274 + "metadata": {
  275 + "kernelspec": {
  276 + "display_name": "Python 3",
  277 + "language": "python",
  278 + "name": "python3"
  279 + },
  280 + "language_info": {
  281 + "codemirror_mode": {
  282 + "name": "ipython",
  283 + "version": 3
  284 + },
  285 + "file_extension": ".py",
  286 + "mimetype": "text/x-python",
  287 + "name": "python",
  288 + "nbconvert_exporter": "python",
  289 + "pygments_lexer": "ipython3",
  290 + "version": "3.5.4"
  291 + }
  292 + },
  293 + "nbformat": 4,
  294 + "nbformat_minor": 2
  295 +}
doc/source/users/tutorials/hess_dr1/classical.rst deleted
1 -.. _hess_dr1_classical:  
2 -  
3 -Performing a classical On/Off analysis  
4 ---------------------------------------  
5 -  
6 - .. admonition:: What you will learn  
7 -  
8 - You will learn **how to perform a classical On/Off analysis of the  
9 - data**.  
10 -  
11 -  
12 -.. code-block:: bash  
13 -  
14 - $ csphagen use_irf_bkg=no  
15 - Input event list or observation definition XML file [obs.xml] obs_crab_selected.xml  
16 - Input model definition XML file (if NONE, use point source) [NONE] crab_models.xml  
17 - Source name [Crab]  
18 - Algorithm for defining energy bins (FILE|LIN|LOG) [LOG]  
19 - Start value for first energy bin in TeV [0.1] 0.66  
20 - Stop value for last energy bin in TeV [100.0]  
21 - Number of energy bins [120] 40  
22 - Stack multiple observations into single PHA, ARF and RMF files? [no]  
23 - Output observation definition XML file [onoff_obs.xml] onoff_obs_crab.xml  
24 - Method for background estimation (REFLECTED|CUSTOM) [REFLECTED]  
25 - Coordinate system (CEL - celestial, GAL - galactic) (CEL|GAL) [CEL]  
26 - Right Ascension of source region centre (deg) (0-360) [83.63]  
27 - Declination of source region centre (deg) (-90-90) [22.01]  
28 - Radius of source region circle (deg) (0-180) [0.2]  
29 -  
30 -.. code-block:: xml  
31 -  
32 - <?xml version="1.0" encoding="UTF-8" standalone="no"?>  
33 - <source_library title="source library">  
34 - <source name="Crab" type="PointSource">  
35 - <spectrum type="PowerLaw">  
36 - <parameter name="Prefactor" value="1" scale="5.7e-18" min="0" free="1" />  
37 - <parameter name="Index" value="1" scale="-2.48" min="-4" max="4" free="1" />  
38 - <parameter name="PivotEnergy" value="1" scale="1000000" free="0" />  
39 - </spectrum>  
40 - <spatialModel type="PointSource">  
41 - <parameter name="RA" value="83.633" scale="1" free="0" />  
42 - <parameter name="DEC" value="22.015" scale="1" free="0" />  
43 - </spatialModel>  
44 - </source>  
45 - </source_library>  
46 -  
47 -.. code-block:: bash  
48 -  
49 - $ ctlike statistic=wstat  
50 - Input event list, counts cube or observation definition XML file [events.fits] onoff_obs_crab.xml  
51 - Input model definition XML file [$CTOOLS/share/models/crab.xml] crab_models_onoff.xml  
52 - Output model definition XML file [crab_results.xml]  
53 -  
54 -.. code-block:: none  
55 -  
56 - 2018-09-13T11:49:06: +=========================================+  
57 - 2018-09-13T11:49:06: | Maximum likelihood optimisation results |  
58 - 2018-09-13T11:49:06: +=========================================+  
59 - 2018-09-13T11:49:06: === GOptimizerLM ===  
60 - 2018-09-13T11:49:06: Optimized function value ..: 60.048  
61 - 2018-09-13T11:49:06: Absolute precision ........: 0.005  
62 - 2018-09-13T11:49:06: Acceptable value decrease .: 2  
63 - 2018-09-13T11:49:06: Optimization status .......: converged  
64 - 2018-09-13T11:49:06: Number of parameters ......: 6  
65 - 2018-09-13T11:49:06: Number of free parameters .: 2  
66 - 2018-09-13T11:49:06: Number of iterations ......: 5  
67 - 2018-09-13T11:49:06: Lambda ....................: 1e-08  
68 - 2018-09-13T11:49:06: Maximum log likelihood ....: -60.048  
69 - 2018-09-13T11:49:06: Observed events (Nobs) ...: 605.000  
70 - 2018-09-13T11:49:06: Predicted events (Npred) ..: 604.191 (Nobs - Npred = 0.808986318662733)  
71 - 2018-09-13T11:49:06: === GModels ===  
72 - 2018-09-13T11:49:06: Number of models ..........: 1  
73 - 2018-09-13T11:49:06: Number of parameters ......: 6  
74 - 2018-09-13T11:49:06: === GModelSky ===  
75 - 2018-09-13T11:49:06: Name ......................: Crab  
76 - 2018-09-13T11:49:06: Instruments ...............: all  
77 - 2018-09-13T11:49:06: Instrument scale factors ..: unity  
78 - 2018-09-13T11:49:06: Observation identifiers ...: all  
79 - 2018-09-13T11:49:06: Model type ................: PointSource  
80 - 2018-09-13T11:49:06: Model components ..........: "PointSource" * "PowerLaw" * "Constant"  
81 - 2018-09-13T11:49:06: Number of parameters ......: 6  
82 - 2018-09-13T11:49:06: Number of spatial par's ...: 2  
83 - 2018-09-13T11:49:06: RA .......................: 83.633 deg (fixed,scale=1)  
84 - 2018-09-13T11:49:06: DEC ......................: 22.015 deg (fixed,scale=1)  
85 - 2018-09-13T11:49:06: Number of spectral par's ..: 3  
86 - 2018-09-13T11:49:06: Prefactor ................: 4.77687464316323e-17 +/- 3.12433509735449e-18 [0,infty[ ph/cm2/s/MeV (free,scale=5.7e-18,gradient)  
87 - 2018-09-13T11:49:06: Index ....................: -2.60709757251519 +/- 0.0767624316833204 [9.92,-9.92] (free,scale=-2.48,gradient)  
88 - 2018-09-13T11:49:06: PivotEnergy ..............: 1000000 MeV (fixed,scale=1000000,gradient)  
89 - 2018-09-13T11:49:06: Number of temporal par's ..: 1  
90 - 2018-09-13T11:49:06: Normalization ............: 1 (relative value) (fixed,scale=1,gradient)  
91 -  
92 -The intensity at 1 TeV of the Crab was fitted to  
93 -:math:`(4.78 \pm 0.31) \times 10^{-11}\,{\rm photons}\,{\rm cm}^{-2}\,{\rm s}^{-1}\,{\rm TeV}^{-1}`  
94 -the spectral index of the power law is  
95 -:math:`-2.61 \pm 0.08`.  
96 -This can be compared to the values  
97 -:math:`(4.64 \pm 0.26) \times 10^{-11}\,{\rm photons}\,{\rm cm}^{-2}\,{\rm s}^{-1}\,{\rm TeV}^{-1}`  
98 -and  
99 -:math:`-2.61 \pm 0.07`  
100 -that were obtained before with the unbinned maximum likelihood fit using the  
101 -energy dispersion.  
102 -  
103 -.. code-block:: bash  
104 -  
105 - $ csresspec components=yes  
106 - Input event list, counts cube, or observation definition XML file [events.fits] onoff_obs_crab.xml  
107 - Stack observations? [no] yes  
108 - Input model definition XML file [$CTOOLS/share/models/crab.xml] crab_results_onoff.xml  
109 - Residuals computation algorithm (SUB|SUBDIV|SUBDIVSQRT|SIGNIFICANCE) [SIGNIFICANCE]  
110 - Output residual spectrum file [resspec.fits] resspec_onoff.fits  
111 -  
112 -The script will produce the FITS file ``resspec.fits`` that contains the  
113 -spectral residuals for each of the model components.  
114 -To display the residuals you can use the ``show_residuals.py`` script in the  
115 -example folder as follows:  
116 -  
117 -.. code-block:: bash  
118 -  
119 - $CTOOLS/share/examples/python/show_residuals.py resspec.fits  
120 -  
121 -The figure below shows the resulting residual spectrum.  
122 -Although the model provides a reasonable first order approximation of the  
123 -spectral distribution of the data, there are still significant spectral  
124 -residuals that cannot be explained by the model.  
125 -  
126 -.. figure:: classical_resspec.png  
127 - :width: 600px  
128 - :align: center  
129 -  
130 - *Residual counts spectrum after model fitting*  
doc/source/users/tutorials/hess_dr1/fitting.rst deleted
1 -.. _hess_dr1_fitting:  
2 -  
3 -Fitting a model to the data and inspecting fit residuals  
4 ---------------------------------------------------------  
5 -  
6 - .. admonition:: What you will learn  
7 -  
8 - You will learn **how to fit a parametric model to the data** and  
9 - **how to inspect the fit residuals**.  
10 -  
11 -Now you are ready to fit the model to the data.  
12 -Since the :ref:`cssrcdetect` script sets some default spectral parameters,  
13 -we suggest that you slightly adjust the  
14 -:ref:`model definition file <glossary_moddef>`  
15 -so that the model fit runs seamlessly.  
16 -For example, the pivot energy of a power law model should be comprised  
17 -within the energy interval of the data, hence you should set  
18 -``PivotEnergy`` for example to 1 TeV.  
19 -The ``error`` attributes are also not needed (although they do not harm),  
20 -so we remove them.  
21 -And finally we rename ``Src001`` to ``Crab``.  
22 -After these little adjustments, your  
23 -:ref:`model definition file <glossary_moddef>`  
24 -should look like this:  
25 -  
26 -.. code-block:: xml  
27 -  
28 - <?xml version="1.0" encoding="UTF-8" standalone="no"?>  
29 - <source_library title="source library">  
30 - <source name="Crab" type="PointSource">  
31 - <spectrum type="PowerLaw">  
32 - <parameter name="Prefactor" value="1" scale="5.7e-18" min="0" free="1" />  
33 - <parameter name="Index" value="1" scale="-2.48" min="-4" max="4" free="1" />  
34 - <parameter name="PivotEnergy" value="1" scale="1000000" free="0" />  
35 - </spectrum>  
36 - <spatialModel type="PointSource">  
37 - <parameter name="RA" value="83.6192131308071" scale="1" free="1" />  
38 - <parameter name="DEC" value="22.0199996472185" scale="1" free="1" />  
39 - </spatialModel>  
40 - </source>  
41 - <source name="Background" type="CTAAeffBackground">  
42 - <spectrum type="PowerLaw">  
43 - <parameter name="Prefactor" value="1" scale="1e-13" min="0" free="1" />  
44 - <parameter name="Index" value="1" scale="-2.5" min="-4" max="4" free="1" />  
45 - <parameter name="PivotEnergy" value="1" scale="1000000" free="0" />  
46 - </spectrum>  
47 - </source>  
48 - </source_library>  
49 -  
50 -Now you are ready to do the model fit.  
51 -For this you will use :ref:`ctlike` that you will run as follows:  
52 -  
53 -.. code-block:: bash  
54 -  
55 - $ ctlike  
56 - Input event list, counts cube or observation definition XML file [events.fits] obs_crab_selected.xml  
57 - Input model definition XML file [$CTOOLS/share/models/crab.xml] crab_models.xml  
58 - Output model definition XML file [crab_results.xml]  
59 -  
60 -After a few seconds the tool will have terminated and you can inspect the fit  
61 -results.  
62 -They can for example be found in the ``ctlike.log`` file for which an excerpt  
63 -is shown below.  
64 -  
65 -.. code-block:: none  
66 -  
67 - 2018-09-11T21:17:31: +=========================================+  
68 - 2018-09-11T21:17:31: | Maximum likelihood optimisation results |  
69 - 2018-09-11T21:17:31: +=========================================+  
70 - 2018-09-11T21:17:31: === GOptimizerLM ===  
71 - 2018-09-11T21:17:31: Optimized function value ..: 98422.688  
72 - 2018-09-11T21:17:31: Absolute precision ........: 0.005  
73 - 2018-09-11T21:17:31: Acceptable value decrease .: 2  
74 - 2018-09-11T21:17:31: Optimization status .......: converged  
75 - 2018-09-11T21:17:31: Number of parameters ......: 10  
76 - 2018-09-11T21:17:31: Number of free parameters .: 6  
77 - 2018-09-11T21:17:31: Number of iterations ......: 24  
78 - 2018-09-11T21:17:31: Lambda ....................: 0.1  
79 - 2018-09-11T21:17:31: Maximum log likelihood ....: -98422.688  
80 - 2018-09-11T21:17:31: Observed events (Nobs) ...: 9675.000  
81 - 2018-09-11T21:17:31: Predicted events (Npred) ..: 9674.870 (Nobs - Npred = 0.129601074213497)  
82 - 2018-09-11T21:17:31: === GModels ===  
83 - 2018-09-11T21:17:31: Number of models ..........: 2  
84 - 2018-09-11T21:17:31: Number of parameters ......: 10  
85 - 2018-09-11T21:17:31: === GModelSky ===  
86 - 2018-09-11T21:17:31: Name ......................: Crab  
87 - 2018-09-11T21:17:31: Instruments ...............: all  
88 - 2018-09-11T21:17:31: Instrument scale factors ..: unity  
89 - 2018-09-11T21:17:31: Observation identifiers ...: all  
90 - 2018-09-11T21:17:31: Model type ................: PointSource  
91 - 2018-09-11T21:17:31: Model components ..........: "PointSource" * "PowerLaw" * "Constant"  
92 - 2018-09-11T21:17:31: Number of parameters ......: 6  
93 - 2018-09-11T21:17:31: Number of spatial par's ...: 2  
94 - 2018-09-11T21:17:31: RA .......................: 83.6230374464172 +/- 0.00241074887155303 deg (free,scale=1)  
95 - 2018-09-11T21:17:31: DEC ......................: 22.0249049416179 +/- 0.0022137104783551 deg (free,scale=1)  
96 - 2018-09-11T21:17:31: Number of spectral par's ..: 3  
97 - 2018-09-11T21:17:31: Prefactor ................: 4.81375364083447e-17 +/- 2.62970930530696e-18 [0,infty[ ph/cm2/s/MeV (free,scale=5.7e-18,gradient)  
98 - 2018-09-11T21:17:31: Index ....................: -2.71079050853091 +/- 0.0652734279744327 [9.92,-9.92] (free,scale=-2.48,gradient)  
99 - 2018-09-11T21:17:31: PivotEnergy ..............: 1000000 MeV (fixed,scale=1000000,gradient)  
100 - 2018-09-11T21:17:31: Number of temporal par's ..: 1  
101 - 2018-09-11T21:17:31: Normalization ............: 1 (relative value) (fixed,scale=1,gradient)  
102 - 2018-09-11T21:17:31: === GCTAModelAeffBackground ===  
103 - 2018-09-11T21:17:31: Name ......................: Background  
104 - 2018-09-11T21:17:31: Instruments ...............: all  
105 - 2018-09-11T21:17:31: Instrument scale factors ..: unity  
106 - 2018-09-11T21:17:31: Observation identifiers ...: all  
107 - 2018-09-11T21:17:31: Model type ................: "PowerLaw" * "Constant"  
108 - 2018-09-11T21:17:31: Number of parameters ......: 4  
109 - 2018-09-11T21:17:31: Number of spectral par's ..: 3  
110 - 2018-09-11T21:17:31: Prefactor ................: 1.80502240642969e-13 +/- 2.34991048262393e-15 [0,infty[ ph/cm2/s/MeV (free,scale=1e-13,gradient)  
111 - 2018-09-11T21:17:31: Index ....................: -2.58303579414564 +/- 0.0128891124984818 [10,-10] (free,scale=-2.5,gradient)  
112 - 2018-09-11T21:17:31: PivotEnergy ..............: 1000000 MeV (fixed,scale=1000000,gradient)  
113 - 2018-09-11T21:17:31: Number of temporal par's ..: 1  
114 - 2018-09-11T21:17:31: Normalization ............: 1 (relative value) (fixed,scale=1,gradient)  
115 -  
116 -The fit has converged and the source was fitted at a position of  
117 -:math:`83.623 \pm 0.002` degrees in Right Ascension and  
118 -:math:`22.025 \pm 0.002` degrees in Declination.  
119 -The statistical :math:`1\sigma` positional uncertainty corresponds to 0.12 arcmin.  
120 -Systematic uncertainties are not computed.  
121 -This can be compared to the values of  
122 -:math:`83.629 \pm 0.005` degrees in Right Ascension and  
123 -:math:`22.012 \pm 0.001` degrees in Declination reported in  
124 -`Holler et al. (2017) <https://arxiv.org/pdf/1707.04196.pdf>`_.  
125 -  
126 -According to  
127 -`SIMBAD <http://cdsportal.u-strasbg.fr/?target=Crab%20nebula>`_,  
128 -the Crab nebula is situated at a Right Ascension of 83.633 degrees and a  
129 -Declination of 22.015 degrees, which is 0.013 degrees (0.82 arcmin) away  
130 -from the fitted position.  
131 -  
132 -The intensity at 1 TeV of the Crab was fitted to  
133 -:math:`(4.81 \pm 0.26) \times 10^{-11}\,{\rm photons}\,{\rm cm}^{-2}\,{\rm s}^{-1}\,{\rm TeV}^{-1}`  
134 -the spectral index of the power law is  
135 -:math:`-2.71 \pm 0.07`.  
136 -This can be compared to the values of  
137 -:math:`(3.45 \pm 0.05) \times 10^{-11}\,{\rm photons}\,{\rm cm}^{-2}\,{\rm s}^{-1}\,{\rm TeV}^{-1}`  
138 -and  
139 -:math:`-2.63 \pm 0.01`  
140 -reported in  
141 -`Aharonian et al. (2006), A&A, 457, 899 <https://www.aanda.org/articles/aa/abs/2006/39/aa5351-06/aa5351-06.html>`_.  
142 -  
143 -.. note::  
144 - In the :ref:`ctlike` run above the energy dispersion, which relates the  
145 - true photon energies to the energies of the reconstructed events, was  
146 - not taken into account.  
147 - **By default energy dispersion usage is disabled** since it involves an  
148 - extra dimension in the data analysis which slows down the computations.  
149 - To enable energy dispersion you have to run :ref:`ctlike` with the  
150 - ``edisp=yes`` argument:  
151 -  
152 - .. code-block:: bash  
153 -  
154 - $ ctlike edisp=yes  
155 - Input event list, counts cube or observation definition XML file [events.fits] obs_crab_selected.xml  
156 - Input model definition XML file [$CTOOLS/share/models/crab.xml] crab_models.xml  
157 - Output model definition XML file [crab_results.xml]  
158 -  
159 - Taking into account the energy dispersion, the fitted source position is  
160 - :math:`83.621 \pm 0.003` degrees in Right Ascension and  
161 - :math:`22.024 \pm 0.002` degrees in Declination,  
162 - the fitted source intensity at 1 TeV is  
163 - :math:`(4.64 \pm 0.26) \times 10^{-11}\,{\rm photons}\,{\rm cm}^{-2}\,{\rm s}^{-1}\,{\rm TeV}^{-1}`  
164 - and the fitted spectral index is  
165 - :math:`-2.61 \pm 0.07`.  
166 -  
167 -Following a model fit, **you should always inspect the fit residuals.**  
168 -First let's inspect the spectral residuals.  
169 -You can do this using the :ref:`csresspec` script as follows:  
170 -  
171 -.. code-block:: bash  
172 -  
173 - $ csresspec components=yes  
174 - Input event list, counts cube, or observation definition XML file [events.fits] obs_crab_selected.xml  
175 - Algorithm for defining energy bins (FILE|LIN|LOG) [LOG]  
176 - Start value for first energy bin in TeV [0.1] 0.66  
177 - Stop value for last energy bin in TeV [100.0]  
178 - Number of energy bins (1-200) [20]  
179 - Stack observations? [no] yes  
180 - Coordinate System (CEL|GAL) [CEL]  
181 - Projection method (AIT|AZP|CAR|GLS|MER|MOL|SFL|SIN|STG|TAN) [CAR]  
182 - First coordinate of image/source region center in degrees (RA or galactic l) (0-360) [83.63]  
183 - Second coordinate of image/source region center in degrees (DEC or galactic b) (-90-90) [22.51] 22.01  
184 - Size of the X axis in pixels [200]  
185 - Size of the Y axis in pixels [200]  
186 - Pixel size (deg/pixel) [0.02]  
187 - Input model definition XML file [$CTOOLS/share/models/crab.xml] crab_results.xml  
188 - Mask data to calculate residuals in ROI? [no]  
189 - Residuals computation algorithm (SUB|SUBDIV|SUBDIVSQRT|SIGNIFICANCE) [SIGNIFICANCE]  
190 - Output residual spectrum file [resspec.fits]  
191 -  
192 -The script will produce the FITS file ``resspec.fits`` that contains the  
193 -spectral residuals for each of the model components.  
194 -To display the residuals you can use the ``show_residuals.py`` script in the  
195 -example folder as follows:  
196 -  
197 -.. code-block:: bash  
198 -  
199 - $CTOOLS/share/examples/python/show_residuals.py resspec.fits  
200 -  
201 -The figure below shows the resulting residual spectrum.  
202 -Although the model provides a reasonable first order approximation of the  
203 -spectral distribution of the data, there are still significant spectral  
204 -residuals that cannot be explained by the model.  
205 -  
206 -.. figure:: fitting_resspec.png  
207 - :width: 600px  
208 - :align: center  
209 -  
210 - *Residual counts spectrum after model fitting*  
211 -  
212 -  
213 -Finally you should also inspect the spatial residuals.  
214 -You do this using the :ref:`csresmap` script as follows:  
215 -  
216 -.. code-block:: bash  
217 -  
218 - $ csresmap  
219 - Input event list, counts cube, or observation definition XML file [events.fits] obs_crab_selected.xml  
220 - Input model definition XML file [$CTOOLS/share/models/crab.xml] crab_results.xml  
221 - First coordinate of image center in degrees (RA or galactic l) (0-360) [83.63]  
222 - Second coordinate of image center in degrees (DEC or galactic b) (-90-90) [22.51] 22.01  
223 - Coordinate System (CEL|GAL) [CEL]  
224 - Projection method (AIT|AZP|CAR|GLS|MER|MOL|SFL|SIN|STG|TAN) [CAR]  
225 - Size of the X axis in pixels [200]  
226 - Size of the Y axis in pixels [200]  
227 - Pixel size (deg/pixel) [0.02]  
228 - Lower energy limit (TeV) [0.1] 0.66  
229 - Upper energy limit (TeV) [100.0]  
230 - Residual map computation algorithm (SUB|SUBDIV|SUBDIVSQRT|SIGNIFICANCE) [SIGNIFICANCE]  
231 - Output residual map file [resmap.fits]  
232 -  
233 -The script will produce the FITS file ``resmap.fits`` that contains a map of  
234 -the spatial residuals.  
235 -You can display this map using  
236 -`ds9 <http://ds9.si.edu>`_.  
237 -The resulting residual map with a linear color scaling and a slight Gaussian  
238 -smoothing applied is shown below.  
239 -The map is relatively clean, although there are some small residuals  
240 -south-east of the fitted Crab nebula position.  
241 -  
242 -.. figure:: fitting_resmap.png  
243 - :width: 400px  
244 - :align: center  
245 -  
246 - *Residual map with a slight Gaussian smoothing applied*  
247 -  
248 -.. note::  
249 - If the energy dispersion should be taken into account you also have to  
250 - specify the ``edisp=yes`` argument in the residual computations:  
251 -  
252 - .. code-block:: bash  
253 -  
254 - $ csresspec components=yes edisp=yes  
255 - $ csresmap edisp=yes  
doc/source/users/tutorials/hess_dr1/fitting_resmap.png deleted

210 KB

doc/source/users/tutorials/hess_dr1/fitting_resspec.png deleted

35.5 KB

doc/source/users/tutorials/hess_dr1/index.rst
@@ -7,7 +7,8 @@ Analysing public H.E.S.S. data @@ -7,7 +7,8 @@ Analysing public H.E.S.S. data
7 :maxdepth: 1 7 :maxdepth: 1
8 8
9 data 9 data
10 - select_events 10 + selecting_events
11 skymap 11 skymap
12 - fitting 12 + bkgmodel
  13 + unbinned
13 classical 14 classical
doc/source/users/tutorials/hess_dr1/select_events.rst deleted
1 -.. _hess_dr1_select_events:  
2 -  
3 -Selecting the relevant events  
4 ------------------------------  
5 -  
6 - .. admonition:: What you will learn  
7 -  
8 - You will learn **how to select the relevant events for a target**  
9 - and **how to determine the useful energy range** for a set of  
10 - observations.  
11 -  
12 -Now you are ready for your first H.E.S.S. data analysis.  
13 -As first step you should create a folder that will contain your analysis  
14 -results and any intermediate data products.  
15 -Let's call this folder ``crab`` since we explain in this example how you  
16 -can analyse the data from the Crab nebula.  
17 -Create and step into the folder using  
18 -  
19 -.. code-block:: bash  
20 -  
21 - $ mkdir crab  
22 - $ cd crab  
23 -  
24 -The first step of your analysis consists in selecting the relevant events  
25 -from the observations.  
26 -In this step you can select a specific energy range, time range or region  
27 -of interest.  
28 -In the example below you will select events according to the save energy  
29 -thresholds that are defined in the effective area component of the  
30 -:ref:`instrument response functions <glossary_irf>`.  
31 -You do this by setting the hidden parameter ``usethres=DEFAULT``.  
32 -In addition, you will select all events within 2 degrees of the pointing  
33 -direction:  
34 -  
35 -.. code-block:: bash  
36 -  
37 - $ ctselect usethres=DEFAULT  
38 - Input event list or observation definition XML file [events.fits] $HESSDATA/obs/obs_crab.xml  
39 - Lower energy limit (TeV) [0.1] NONE  
40 - Radius of ROI around pointing or specified RA/DEC (degrees) (0-180) [3.0] 2.0  
41 - Start time (UTC string, JD, MJD or MET in seconds) [NONE]  
42 - Output event list or observation definition XML file [selected_events.fits] obs_crab_selected.xml  
43 -  
44 -.. warning::  
45 - If you encounter the error  
46 -  
47 - .. code-block:: none  
48 -  
49 - *** ERROR encounterted in the execution of ctselect. Run aborted ...  
50 - *** ERROR in ctselect::run(): Invalid value. Invalid RoI selection: the new RoI must be enclosed in the original RoI  
51 -  
52 - then run the :ref:`ctselect` tool with the ``forcesel=yes`` option:  
53 -  
54 - .. code-block:: bash  
55 -  
56 - $ ctselect usethres=DEFAULT forcesel=yes  
57 -  
58 -  
59 -Below is an excerpt of the log file that was created by :ref:`ctselect`.  
60 -You will find that the following energy ranges were applied for the  
61 -observations:  
62 -  
63 -* ``id=023523``: 0.871 - 100 TeV  
64 -* ``id=023526``: 0.708 - 100 TeV  
65 -* ``id=023559``: 0.661 - 100 TeV  
66 -* ``id=023592``: 0.871 - 100 TeV  
67 -  
68 -.. code-block:: none  
69 -  
70 - 2018-09-11T14:05:15: +=================+  
71 - 2018-09-11T14:05:15: | Event selection |  
72 - 2018-09-11T14:05:15: +=================+  
73 - 2018-09-11T14:05:15: === HESS observation "Crab" (id=023523) ===  
74 - 2018-09-11T14:05:15: Input filename ............: /project-data/hess/hess_dl3_dr1/data/hess_dl3_dr1_obs_id_023523.fits.gz  
75 - 2018-09-11T14:05:15: Event extension name ......: EVENTS  
76 - 2018-09-11T14:05:15: GTI extension name ........: GTI  
77 - 2018-09-11T14:05:16: === Event selection ===  
78 - 2018-09-11T14:05:16: Selected energy range .....: 0.870964 - 100 TeV  
79 - 2018-09-11T14:05:16: Requested RoI .............: Centre(RA,DEC)=(83.633333333333, 21.514444444444) deg, Radius=2 deg  
80 - 2018-09-11T14:05:16: RoI of data ...............: Centre(RA,DEC)=(83.633333333333, 21.514444444444) deg, Radius=2 deg  
81 - 2018-09-11T14:05:16: Selected RoI ..............: Centre(RA,DEC)=(83.633333333333, 21.514444444444) deg, Radius=2 deg  
82 - 2018-09-11T14:05:16: cfitsio selection .........: ENERGY >= 0.87096359 && ENERGY <= 100.00000000 && ANGSEP(83.633333,21.514444,RA,DEC) <= 2.000000  
83 - 2018-09-11T14:05:16: FITS filename .............: /var/tmp/tmp.0.QX6f0L[EVENTS][ENERGY >= 0.87096359 && ENERGY <= 100.00000000 && ANGSEP(83.633333,21.514444,RA,DEC) <= 2.000000]  
84 - 2018-09-11T14:05:16: === HESS observation "Crab" (id=023526) ===  
85 - 2018-09-11T14:05:16: Input filename ............: /project-data/hess/hess_dl3_dr1/data/hess_dl3_dr1_obs_id_023526.fits.gz  
86 - 2018-09-11T14:05:16: Event extension name ......: EVENTS  
87 - 2018-09-11T14:05:16: GTI extension name ........: GTI  
88 - 2018-09-11T14:05:16: === Event selection ===  
89 - 2018-09-11T14:05:16: Selected energy range .....: 0.707946 - 100 TeV  
90 - 2018-09-11T14:05:16: Requested RoI .............: Centre(RA,DEC)=(83.633333333333, 22.514444444444) deg, Radius=2 deg  
91 - 2018-09-11T14:05:16: RoI of data ...............: Centre(RA,DEC)=(83.633333333333, 22.514444444444) deg, Radius=2 deg  
92 - 2018-09-11T14:05:16: Selected RoI ..............: Centre(RA,DEC)=(83.633333333333, 22.514444444444) deg, Radius=2 deg  
93 - 2018-09-11T14:05:16: cfitsio selection .........: ENERGY >= 0.70794578 && ENERGY <= 100.00000000 && ANGSEP(83.633333,22.514444,RA,DEC) <= 2.000000  
94 - 2018-09-11T14:05:16: FITS filename .............: /var/tmp/tmp.1.IoZj2b[EVENTS][ENERGY >= 0.70794578 && ENERGY <= 100.00000000 && ANGSEP(83.633333,22.514444,RA,DEC) <= 2.000000]  
95 - 2018-09-11T14:05:16: === HESS observation "Crab" (id=023559) ===  
96 - 2018-09-11T14:05:16: Input filename ............: /project-data/hess/hess_dl3_dr1/data/hess_dl3_dr1_obs_id_023559.fits.gz  
97 - 2018-09-11T14:05:16: Event extension name ......: EVENTS  
98 - 2018-09-11T14:05:16: GTI extension name ........: GTI  
99 - 2018-09-11T14:05:16: === Event selection ===  
100 - 2018-09-11T14:05:16: Selected energy range .....: 0.660693 - 100 TeV  
101 - 2018-09-11T14:05:16: Requested RoI .............: Centre(RA,DEC)=(85.2533333381014, 22.014444444444) deg, Radius=2 deg  
102 - 2018-09-11T14:05:16: RoI of data ...............: Centre(RA,DEC)=(85.2533333381014, 22.014444444444) deg, Radius=2 deg  
103 - 2018-09-11T14:05:16: Selected RoI ..............: Centre(RA,DEC)=(85.2533333381014, 22.014444444444) deg, Radius=2 deg  
104 - 2018-09-11T14:05:16: cfitsio selection .........: ENERGY >= 0.66069345 && ENERGY <= 100.00000000 && ANGSEP(85.253333,22.014444,RA,DEC) <= 2.000000  
105 - 2018-09-11T14:05:16: FITS filename .............: /var/tmp/tmp.2.IAwBNH[EVENTS][ENERGY >= 0.66069345 && ENERGY <= 100.00000000 && ANGSEP(85.253333,22.014444,RA,DEC) <= 2.000000]  
106 - 2018-09-11T14:05:16: === HESS observation "Crab" (id=023592) ===  
107 - 2018-09-11T14:05:16: Input filename ............: /project-data/hess/hess_dl3_dr1/data/hess_dl3_dr1_obs_id_023592.fits.gz  
108 - 2018-09-11T14:05:16: Event extension name ......: EVENTS  
109 - 2018-09-11T14:05:16: GTI extension name ........: GTI  
110 - 2018-09-11T14:05:16: === Event selection ===  
111 - 2018-09-11T14:05:16: Selected energy range .....: 0.870964 - 100 TeV  
112 - 2018-09-11T14:05:16: Requested RoI .............: Centre(RA,DEC)=(82.0133333285646, 22.014444444444) deg, Radius=2 deg  
113 - 2018-09-11T14:05:16: RoI of data ...............: Centre(RA,DEC)=(82.0133333285646, 22.014444444444) deg, Radius=2 deg  
114 - 2018-09-11T14:05:16: Selected RoI ..............: Centre(RA,DEC)=(82.0133333285646, 22.014444444444) deg, Radius=2 deg  
115 - 2018-09-11T14:05:16: cfitsio selection .........: ENERGY >= 0.87096359 && ENERGY <= 100.00000000 && ANGSEP(82.013333,22.014444,RA,DEC) <= 2.000000  
116 - 2018-09-11T14:05:16: FITS filename .............: /var/tmp/tmp.3.879wq4[EVENTS][ENERGY >= 0.87096359 && ENERGY <= 100.00000000 && ANGSEP(82.013333,22.014444,RA,DEC) <= 2.000000]  
117 -  
118 -You may use the :ref:`csobsinfo` script to display a summary of the selected  
119 -events into the console:  
120 -  
121 -.. code-block:: bash  
122 -  
123 - $ csobsinfo debug=yes  
124 - Input event list, counts cube, or observation definition XML file [$HESSDATA/obs/obs_crab.xml] obs_crab_selected.xml  
125 - Output DS9 region file [ds9.reg]  
126 -  
127 -.. note::  
128 - The ``debug=yes`` attribute instructs :ref:`csobsinfo` to direct the log  
129 - file output also to the console. Duplication of log file output into  
130 - the console using the ``debug=yes`` attribute works for any tool or script.  
131 -  
132 -The output of :ref:`csobsinfo` is shown below.  
133 -:ref:`ctselect` selected 9675 events within an energy interval of  
134 -0.66 - 100 TeV.  
135 -This will be the energy range that you will from now on use for the data  
136 -analysis.  
137 -  
138 -.. code-block:: none  
139 -  
140 - 2018-09-11T20:30:16: +=========+  
141 - 2018-09-11T20:30:16: | Summary |  
142 - 2018-09-11T20:30:16: +=========+  
143 - 2018-09-11T20:30:16: === Observations ===  
144 - 2018-09-11T20:30:16: Unbinned observations .....: 4  
145 - 2018-09-11T20:30:16: Binned observations .......: 0  
146 - 2018-09-11T20:30:16: === Events ===  
147 - 2018-09-11T20:30:16: Number of events ..........: 9675  
148 - 2018-09-11T20:30:16: Number of bins ............: 0  
149 - 2018-09-11T20:30:16: === Pointings ===  
150 - 2018-09-11T20:30:16: Mean offset angle .........: Unknown  
151 - 2018-09-11T20:30:16: Mean zenith angle .........: 47.04 deg  
152 - 2018-09-11T20:30:16: Mean azimuth angle ........: 13.76 deg  
153 - 2018-09-11T20:30:16: === Energy range ===  
154 - 2018-09-11T20:30:16: Minimum energy ............: 660.693448007596 GeV  
155 - 2018-09-11T20:30:16: Maximum energy ............: 100 TeV  
156 - 2018-09-11T20:30:16: === Time range ===  
157 - 2018-09-11T20:30:16: MJD (days) ................: 53343.922 - 53347.933  
158 - 2018-09-11T20:30:16: UTC .......................: 2004-12-04T22:07:06 - 2004-12-08T22:22:02  
159 - 2018-09-11T20:30:16: Total ontime ..............: 6742.00 s = 112.37 min = 1.87 h  
160 - 2018-09-11T20:30:16: Total livetime ............: 6313.81 s = 105.23 min = 1.75 h  
doc/source/users/tutorials/hess_dr1/selecting_events.ipynb 0 → 100644
  1 +{
  2 + "cells": [
  3 + {
  4 + "cell_type": "markdown",
  5 + "metadata": {},
  6 + "source": [
  7 + "# Selecting the relevant events"
  8 + ]
  9 + },
  10 + {
  11 + "cell_type": "raw",
  12 + "metadata": {},
  13 + "source": [
  14 + "<div align=\"right\"><a href=\"../../../_downloads/selecting_events.ipynb\" download=\"selecting_events.ipynb\"><img src=\"../../../_static/download-notebook.jpg\" alt=\"Download Notebook\" height=\"40\"></a></div>"
  15 + ]
  16 + },
  17 + {
  18 + "cell_type": "markdown",
  19 + "metadata": {},
  20 + "source": [
  21 + "**In this tutorial you will learn how to select the relevant events for a target and how to determine the useful energy range for a set of observations.**\n",
  22 + "\n",
  23 + "Now you are ready for your first H.E.S.S. data analysis. As an exemple you will analyse the observations of the Crab nebula. Note that all the output from this notebook will go to the folder from which the notebook is executed.\n",
  24 + "\n",
  25 + "As usual start by importing the gammalib, ctools, and cscripts Python modules."
  26 + ]
  27 + },
  28 + {
  29 + "cell_type": "code",
  30 + "execution_count": 7,
  31 + "metadata": {},
  32 + "outputs": [],
  33 + "source": [
  34 + "import gammalib\n",
  35 + "import ctools\n",
  36 + "import cscripts"
  37 + ]
  38 + },
  39 + {
  40 + "cell_type": "markdown",
  41 + "metadata": {},
  42 + "source": [
  43 + "The first step of your analysis consists in selecting the relevant events from the observations. In this step you can select a specific energy range, time range, or region of interest. In the example below you will select events according to the safe energy thresholds that are defined in the effective area component of the instrument response functions. You do this by setting the hidden parameter usethres=DEFAULT. In addition, you will select all events within 2 degrees of the pointing direction. We will write the selected observations to disk for easier use in the following steps."
  44 + ]
  45 + },
  46 + {
  47 + "cell_type": "code",
  48 + "execution_count": 9,
  49 + "metadata": {},
  50 + "outputs": [],
  51 + "source": [
  52 + "obsfile = \"obs_crab_selected.xml\"\n",
  53 + "\n",
  54 + "select = ctools.ctselect()\n",
  55 + "select['usethres'] = 'DEFAULT'\n",
  56 + "select['inobs'] = '$HESSDATA/obs/obs_crab.xml'\n",
  57 + "select['emin'] = 'INDEF' # no manual energy selection\n",
  58 + "select['rad'] = 2 # by default select around pointing direction of each observations\n",
  59 + "select['tmin'] = 'INDEF' # no temporal selection\n",
  60 + "select['outobs'] = obsfile\n",
  61 + "\n",
  62 + "select.execute()"
  63 + ]
  64 + },
  65 + {
  66 + "cell_type": "markdown",
  67 + "metadata": {},
  68 + "source": [
  69 + "Below is a summary of the selected observations."
  70 + ]
  71 + },
  72 + {
  73 + "cell_type": "code",
  74 + "execution_count": 10,
  75 + "metadata": {},
  76 + "outputs": [
  77 + {
  78 + "name": "stdout",
  79 + "output_type": "stream",
  80 + "text": [
  81 + "=== GObservations ===\n",
  82 + " Number of observations ....: 4\n",
  83 + " Number of models ..........: 0\n",
  84 + " Number of observed events .: 9675\n",
  85 + " Number of predicted events : 0\n"
  86 + ]
  87 + }
  88 + ],
  89 + "source": [
  90 + "obs_container = gammalib.GObservations(obsfile)\n",
  91 + "print(obs_container)"
  92 + ]
  93 + },
  94 + {
  95 + "cell_type": "markdown",
  96 + "metadata": {},
  97 + "source": [
  98 + "Let's look at the properties of each individual observation."
  99 + ]
  100 + },
  101 + {
  102 + "cell_type": "code",
  103 + "execution_count": 11,
  104 + "metadata": {},
  105 + "outputs": [
  106 + {
  107 + "name": "stdout",
  108 + "output_type": "stream",
  109 + "text": [
  110 + "=== GCTAObservation ===\n",
  111 + " Name ......................: Crab\n",
  112 + " Identifier ................: 023523\n",
  113 + " Instrument ................: HESS\n",
  114 + " Event file ................: selected_hess_dl3_dr1_obs_id_023523.fits\n",
  115 + " Event type ................: EventList\n",
  116 + " Statistic .................: cstat\n",
  117 + " Ontime ....................: 1687 s\n",
  118 + " Livetime ..................: 1581.7368164 s\n",
  119 + " Deadtime correction .......: 0.937603329223474\n",
  120 + " User energy range .........: undefined\n",
  121 + "=== GCTAPointing ===\n",
  122 + " Pointing direction ........: (RA,Dec)=(83.633333333,21.514444444)\n",
  123 + "=== GCTAResponseIrf ===\n",
  124 + " Caldb mission .............: \n",
  125 + " Caldb instrument ..........: \n",
  126 + " Response name .............: \n",
  127 + " Energy dispersion .........: Not used\n",
  128 + " Safe energy range .........: 0.870963589956081 - 100 TeV\n",
  129 + "=== GCTAEventList ===\n",
  130 + " Number of events ..........: 2305 (disposed in \"selected_hess_dl3_dr1_obs_id_023523.fits\")\n",
  131 + " Time interval .............: 53343.9223400926 - 53343.9418655556 days\n",
  132 + " Energy interval ...........: 0.870963589956081 - 100 TeV\n",
  133 + " Region of interest ........: RA=83.633333333333, DEC=21.514444444444 [0,0] Radius=2 deg\n",
  134 + "=== GSkyRegions ===\n",
  135 + " Number of regions .........: 0\n",
  136 + "=== GCTAObservation ===\n",
  137 + " Name ......................: Crab\n",
  138 + " Identifier ................: 023526\n",
  139 + " Instrument ................: HESS\n",
  140 + " Event file ................: selected_hess_dl3_dr1_obs_id_023526.fits\n",
  141 + " Event type ................: EventList\n",
  142 + " Statistic .................: cstat\n",
  143 + " Ontime ....................: 1683 s\n",
  144 + " Livetime ..................: 1572.6867676 s\n",
  145 + " Deadtime correction .......: 0.934454407367796\n",
  146 + " User energy range .........: undefined\n",
  147 + "=== GCTAPointing ===\n",
  148 + " Pointing direction ........: (RA,Dec)=(83.633333333,22.514444444)\n",
  149 + "=== GCTAResponseIrf ===\n",
  150 + " Caldb mission .............: \n",
  151 + " Caldb instrument ..........: \n",
  152 + " Response name .............: \n",
  153 + " Energy dispersion .........: Not used\n",
  154 + " Safe energy range .........: 0.707945784384138 - 100 TeV\n",
  155 + "=== GCTAEventList ===\n",
  156 + " Number of events ..........: 2571 (disposed in \"selected_hess_dl3_dr1_obs_id_023526.fits\")\n",
  157 + " Time interval .............: 53343.9542150926 - 53343.9736942593 days\n",
  158 + " Energy interval ...........: 0.707945784384138 - 100 TeV\n",
  159 + " Region of interest ........: RA=83.633333333333, DEC=22.514444444444 [0,0] Radius=2 deg\n",
  160 + "=== GSkyRegions ===\n",
  161 + " Number of regions .........: 0\n",
  162 + "=== GCTAObservation ===\n",
  163 + " Name ......................: Crab\n",
  164 + " Identifier ................: 023559\n",
  165 + " Instrument ................: HESS\n",
  166 + " Event file ................: selected_hess_dl3_dr1_obs_id_023559.fits\n",
  167 + " Event type ................: EventList\n",
  168 + " Statistic .................: cstat\n",
  169 + " Ontime ....................: 1686 s\n",
  170 + " Livetime ..................: 1578.1235352 s\n",
  171 + " Deadtime correction .......: 0.936016331672598\n",
  172 + " User energy range .........: undefined\n",
  173 + "=== GCTAPointing ===\n",
  174 + " Pointing direction ........: (RA,Dec)=(85.253333338,22.014444444)\n",
  175 + "=== GCTAResponseIrf ===\n",
  176 + " Caldb mission .............: \n",
  177 + " Caldb instrument ..........: \n",
  178 + " Response name .............: \n",
  179 + " Energy dispersion .........: Not used\n",
  180 + " Safe energy range .........: 0.660693448007596 - 100 TeV\n",
  181 + "=== GCTAEventList ===\n",
  182 + " Number of events ..........: 2631 (disposed in \"selected_hess_dl3_dr1_obs_id_023559.fits\")\n",
  183 + " Time interval .............: 53345.9619812963 - 53345.9814951852 days\n",
  184 + " Energy interval ...........: 0.660693448007596 - 100 TeV\n",
  185 + " Region of interest ........: RA=85.2533333381014, DEC=22.014444444444 [0,0] Radius=2 deg\n",
  186 + "=== GSkyRegions ===\n",
  187 + " Number of regions .........: 0\n",
  188 + "=== GCTAObservation ===\n",
  189 + " Name ......................: Crab\n",
  190 + " Identifier ................: 023592\n",
  191 + " Instrument ................: HESS\n",
  192 + " Event file ................: selected_hess_dl3_dr1_obs_id_023592.fits\n",
  193 + " Event type ................: EventList\n",
  194 + " Statistic .................: cstat\n",
  195 + " Ontime ....................: 1686 s\n",
  196 + " Livetime ..................: 1581.2646484 s\n",
  197 + " Deadtime correction .......: 0.937879388137604\n",
  198 + " User energy range .........: undefined\n",
  199 + "=== GCTAPointing ===\n",
  200 + " Pointing direction ........: (RA,Dec)=(82.013333329,22.014444444)\n",
  201 + "=== GCTAResponseIrf ===\n",
  202 + " Caldb mission .............: \n",
  203 + " Caldb instrument ..........: \n",
  204 + " Response name .............: \n",
  205 + " Energy dispersion .........: Not used\n",
  206 + " Safe energy range .........: 0.870963589956081 - 100 TeV\n",
  207 + "=== GCTAEventList ===\n",
  208 + " Number of events ..........: 2168 (disposed in \"selected_hess_dl3_dr1_obs_id_023592.fits\")\n",
  209 + " Time interval .............: 53347.9131965741 - 53347.932710463 days\n",
  210 + " Energy interval ...........: 0.870963589956081 - 100 TeV\n",
  211 + " Region of interest ........: RA=82.0133333285646, DEC=22.014444444444 [0,0] Radius=2 deg\n",
  212 + "=== GSkyRegions ===\n",
  213 + " Number of regions .........: 0\n"
  214 + ]
  215 + }
  216 + ],
  217 + "source": [
  218 + "for obs in obs_container:\n",
  219 + " print(obs)"
  220 + ]
  221 + },
  222 + {
  223 + "cell_type": "markdown",
  224 + "metadata": {},
  225 + "source": [
  226 + "You will find that the following energy ranges were applied for the observations:\n",
  227 + "\n",
  228 + "* id=023523: 0.871 - 100 TeV\n",
  229 + "* id=023526: 0.708 - 100 TeV\n",
  230 + "* id=023559: 0.661 - 100 TeV\n",
  231 + "* id=023592: 0.871 - 100 TeV\n",
  232 + "\n",
  233 + "The overall energy range that you will from now on use for the data analysis is 0.66 - 100 TeV. "
  234 + ]
  235 + }
  236 + ],
  237 + "metadata": {
  238 + "kernelspec": {
  239 + "display_name": "Python 3",
  240 + "language": "python",
  241 + "name": "python3"
  242 + },
  243 + "language_info": {
  244 + "codemirror_mode": {
  245 + "name": "ipython",
  246 + "version": 3
  247 + },
  248 + "file_extension": ".py",
  249 + "mimetype": "text/x-python",
  250 + "name": "python",
  251 + "nbconvert_exporter": "python",
  252 + "pygments_lexer": "ipython3",
  253 + "version": "3.5.4"
  254 + }
  255 + },
  256 + "nbformat": 4,
  257 + "nbformat_minor": 2
  258 +}
doc/source/users/tutorials/hess_dr1/skymap.ipynb 0 → 100644
  1 +{
  2 + "cells": [
  3 + {
  4 + "cell_type": "markdown",
  5 + "metadata": {},
  6 + "source": [
  7 + "# Generating a sky map and finding sources"
  8 + ]
  9 + },
  10 + {
  11 + "cell_type": "raw",
  12 + "metadata": {},
  13 + "source": [
  14 + "<div align=\"right\"><a href=\"../../../_downloads/skymap.ipynb\" download=\"skymap.ipynb\"><img src=\"../../../_static/download-notebook.jpg\" alt=\"Download Notebook\" height=\"40\"></a></div>"
  15 + ]
  16 + },
  17 + {
  18 + "cell_type": "markdown",
  19 + "metadata": {},
  20 + "source": [
  21 + "**In this tutorial you will learn how to generate a sky map from the selected events and how to find potential sources in the data.**\n",
  22 + "\n",
  23 + "As next step you will make a sky map of the selected events to inspect what’s in the data. You do this using the ctskymap tool. \n",
  24 + "\n",
  25 + "We start with the usual gammalib, ctools, and cscripts imports."
  26 + ]
  27 + },
  28 + {
  29 + "cell_type": "code",
  30 + "execution_count": 2,
  31 + "metadata": {},
  32 + "outputs": [],
  33 + "source": [
  34 + "import gammalib\n",
  35 + "import ctools\n",
  36 + "import cscripts"
  37 + ]
  38 + },
  39 + {
  40 + "cell_type": "markdown",
  41 + "metadata": {},
  42 + "source": [
  43 + "We will use the matplotlib package to display the results."
  44 + ]
  45 + },
  46 + {
  47 + "cell_type": "code",
  48 + "execution_count": 3,
  49 + "metadata": {},
  50 + "outputs": [],
  51 + "source": [
  52 + "%matplotlib inline\n",
  53 + "import matplotlib.pyplot as plt"
  54 + ]
  55 + },
  56 + {
  57 + "cell_type": "markdown",
  58 + "metadata": {},
  59 + "source": [
  60 + "We will use the events selected in the previous step. Since the data correspond to observations of the Crab nebula we should centre the sky map on this source. The energy limits of the sky map should be set to the energy interval of the data (0.66 - 100 TeV). "
  61 + ]
  62 + },
  63 + {
  64 + "cell_type": "code",
  65 + "execution_count": 29,
  66 + "metadata": {},
  67 + "outputs": [],
  68 + "source": [
  69 + "obsfile = \"obs_crab_selected.xml\"\n",
  70 + "emin = 0.66\n",
  71 + "emax = 100.\n",
  72 + "\n",
  73 + "skymap = ctools.ctskymap()\n",
  74 + "skymap['inobs'] = obsfile\n",
  75 + "skymap['proj'] = 'CAR'\n",
  76 + "skymap['coordsys'] = 'CEL'\n",
  77 + "skymap['xref'] = 83.63\n",
  78 + "skymap['yref'] = 22.01\n",
  79 + "skymap['binsz'] = 0.02\n",
  80 + "skymap['nxpix'] = 200\n",
  81 + "skymap['nypix'] = 200\n",
  82 + "skymap['emin'] = emin\n",
  83 + "skymap['emax'] = emax\n",
  84 + "skymap['bkgsubtract'] = 'NONE'\n",
  85 + "\n",
  86 + "\n",
  87 + "skymap.run()"
  88 + ]
  89 + },
  90 + {
  91 + "cell_type": "markdown",
  92 + "metadata": {},
  93 + "source": [
  94 + "We can visualise the skymap."
  95 + ]
  96 + },
  97 + {
  98 + "cell_type": "code",
  99 + "execution_count": 30,
  100 + "metadata": {},
  101 + "outputs": [
  102 + {
  103 + "data": {
  104 + "image/png": "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\n",
  105 + "text/plain": [
  106 + "<matplotlib.figure.Figure at 0x11f6265f8>"
  107 + ]
  108 + },
  109 + "metadata": {},
  110 + "output_type": "display_data"
  111 + }
  112 + ],
  113 + "source": [
  114 + "#module used to stretch the color palette\n",
  115 + "import matplotlib.colors as colors\n",
  116 + "\n",
  117 + "ax = plt.subplot()\n",
  118 + "plt.imshow(skymap.skymap().array(),origin='lower',\n",
  119 + " extent=[83.63+0.02*200,83.63-0.02*200,22.01-0.02*200,22.01+0.02*200],\n",
  120 + " # boundaries of the coord grid\n",
  121 + " norm=colors.PowerNorm(gamma=0.5),\n",
  122 + " cmap=plt.get_cmap('jet')) # square root scale \n",
  123 + "ax.set_xlabel('R.A. (deg)')\n",
  124 + "ax.set_ylabel('Dec (deg)')\n",
  125 + "cbar = plt.colorbar()\n",
  126 + "cbar.set_label('Counts')"
  127 + ]
  128 + },
  129 + {
  130 + "cell_type": "markdown",
  131 + "metadata": {},
  132 + "source": [
  133 + "Based on the sky map you can now extract a model for all potentially significant sources in the data. You do this using the cssrcdetect script, and to extract only significant sources, you should set the detection threshold for example to 5 sigma. We will make a copy of the skymap since the detection process involves smoothing and we do not want to modify the original map."
  134 + ]
  135 + },
  136 + {
  137 + "cell_type": "code",
  138 + "execution_count": 31,
  139 + "metadata": {},
  140 + "outputs": [],
  141 + "source": [
  142 + "srcmodel = 'crab.xml'\n",
  143 + "regfile = 'crab_sources.ds9'\n",
  144 + "\n",
  145 + "srcdetect = cscripts.cssrcdetect(skymap.skymap().copy())\n",
  146 + "srcdetect['srcmodel'] = 'POINT'\n",
  147 + "srcdetect['bkgmodel'] = 'NONE' # we will determine the background model in a later step\n",
  148 + "srcdetect['threshold'] = 5\n",
  149 + "srcdetect['corr_rad'] = 0.1\n",
  150 + "srcdetect['outmodel'] = srcmodel\n",
  151 + "srcdetect['outds9file'] = regfile\n",
  152 + "\n",
  153 + "srcdetect.execute()"
  154 + ]
  155 + },
  156 + {
  157 + "cell_type": "markdown",
  158 + "metadata": {},
  159 + "source": [
  160 + "Let's look at the resulting model. It contains a point source Src001 at the position of the Crab nebula."
  161 + ]
  162 + },
  163 + {
  164 + "cell_type": "code",
  165 + "execution_count": 32,
  166 + "metadata": {},
  167 + "outputs": [
  168 + {
  169 + "name": "stdout",
  170 + "output_type": "stream",
  171 + "text": [
  172 + "=== GModels ===\n",
  173 + " Number of models ..........: 1\n",
  174 + " Number of parameters ......: 6\n",
  175 + "=== GModelSky ===\n",
  176 + " Name ......................: Src001\n",
  177 + " Instruments ...............: all\n",
  178 + " Instrument scale factors ..: unity\n",
  179 + " Observation identifiers ...: all\n",
  180 + " Model type ................: PointSource\n",
  181 + " Model components ..........: \"PointSource\" * \"PowerLaw\" * \"Constant\"\n",
  182 + " Number of parameters ......: 6\n",
  183 + " Number of spatial par's ...: 2\n",
  184 + " RA .......................: 83.6192131308071 +/- 0 deg (free,scale=1)\n",
  185 + " DEC ......................: 22.0199996472185 +/- 0 deg (free,scale=1)\n",
  186 + " Number of spectral par's ..: 3\n",
  187 + " Prefactor ................: 5.7e-18 +/- 0 [0,infty[ ph/cm2/s/MeV (free,scale=5.7e-18,gradient)\n",
  188 + " Index ....................: -2.48 +/- 0 [10,-10] (free,scale=-2.48,gradient)\n",
  189 + " PivotEnergy ..............: 300000 MeV (fixed,scale=300000,gradient)\n",
  190 + " Number of temporal par's ..: 1\n",
  191 + " Normalization ............: 1 (relative value) (fixed,scale=1,gradient)\n"
  192 + ]
  193 + }
  194 + ],
  195 + "source": [
  196 + "models = gammalib.GModels(srcmodel)\n",
  197 + "print(models)"
  198 + ]
  199 + },
  200 + {
  201 + "cell_type": "markdown",
  202 + "metadata": {},
  203 + "source": [
  204 + "We can overlay the position of the source we found to the smoothed skymap to make sure everything worked smoothly."
  205 + ]
  206 + },
  207 + {
  208 + "cell_type": "code",
  209 + "execution_count": 45,
  210 + "metadata": {},
  211 + "outputs": [
  212 + {
  213 + "name": "stderr",
  214 + "output_type": "stream",
  215 + "text": [
  216 + "/Users/ltibaldo/anaconda3/envs/ctools/lib/python3.5/site-packages/matplotlib/colors.py:1238: UserWarning: Power-law scaling on negative values is ill-defined, clamping to 0.\n",
  217 + " warnings.warn(\"Power-law scaling on negative values is \"\n"
  218 + ]
  219 + },
  220 + {
  221 + "data": {
  222 + "text/plain": [
  223 + "<matplotlib.collections.PathCollection at 0x121307c88>"
  224 + ]
  225 + },
  226 + "execution_count": 45,
  227 + "metadata": {},
  228 + "output_type": "execute_result"
  229 + },
  230 + {
  231 + "name": "stderr",
  232 + "output_type": "stream",
  233 + "text": [
  234 + "/Users/ltibaldo/anaconda3/envs/ctools/lib/python3.5/site-packages/matplotlib/colors.py:1199: RuntimeWarning: invalid value encountered in power\n",
  235 + " np.power(resdat, gamma, resdat)\n"
  236 + ]
  237 + },
  238 + {
  239 + "data": {
  240 + "image/png": "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\n",
  241 + "text/plain": [
  242 + "<matplotlib.figure.Figure at 0x120d52278>"
  243 + ]
  244 + },
  245 + "metadata": {},
  246 + "output_type": "display_data"
  247 + }
  248 + ],
  249 + "source": [
  250 + "ax1 = plt.subplot()\n",
  251 + "plt.imshow(srcdetect._map.array(),origin='lower',\n",
  252 + " extent=[83.63+0.02*200,83.63-0.02*200,22.01-0.02*200,22.01+0.02*200],\n",
  253 + " # boundaries of the coord grid\n",
  254 + " norm=colors.PowerNorm(gamma=0.5),\n",
  255 + " cmap=plt.get_cmap('jet')) # square root scale \n",
  256 + "ax1.set_xlabel('R.A. (deg)')\n",
  257 + "ax1.set_ylabel('Dec (deg)')\n",
  258 + "cbar = plt.colorbar()\n",
  259 + "cbar.set_label('Counts')\n",
  260 + "\n",
  261 + "crab = models['Src001']\n",
  262 + "\n",
  263 + "ax1.scatter(crab['RA'].value(),crab['DEC'].value(),\n",
  264 + " marker='x',c='white')"
  265 + ]
  266 + }
  267 + ],
  268 + "metadata": {
  269 + "kernelspec": {
  270 + "display_name": "Python 3",
  271 + "language": "python",
  272 + "name": "python3"
  273 + },
  274 + "language_info": {
  275 + "codemirror_mode": {
  276 + "name": "ipython",
  277 + "version": 3
  278 + },
  279 + "file_extension": ".py",
  280 + "mimetype": "text/x-python",
  281 + "name": "python",
  282 + "nbconvert_exporter": "python",
  283 + "pygments_lexer": "ipython3",
  284 + "version": "3.5.4"
  285 + }
  286 + },
  287 + "nbformat": 4,
  288 + "nbformat_minor": 2
  289 +}
doc/source/users/tutorials/hess_dr1/skymap.rst deleted
1 -.. _hess_dr1_sky_map:  
2 -  
3 -Generating a sky map and finding sources  
4 -----------------------------------------  
5 -  
6 - .. admonition:: What you will learn  
7 -  
8 - You will learn **how to generate a sky map from the selected events**  
9 - and **how to find potential sources in the data**.  
10 -  
11 -As next step you will make a sky map of the selected events to inspect what's  
12 -in the data.  
13 -You do this using the :ref:`ctskymap` tool.  
14 -Since the data correspond to observations of the Crab nebula you should centre  
15 -the sky map on this source.  
16 -The energy limits of the sky map should be set to the energy interval of the  
17 -data (0.66 - 100 TeV).  
18 -To create the sky map, type:  
19 -  
20 -.. code-block:: bash  
21 -  
22 - $ ctskymap  
23 - Input event list or observation definition XML file [events.fits] obs_crab_selected.xml  
24 - Coordinate system (CEL - celestial, GAL - galactic) (CEL|GAL) [CEL]  
25 - Projection method (AIT|AZP|CAR|GLS|MER|MOL|SFL|SIN|STG|TAN) [CAR]  
26 - First coordinate of image center in degrees (RA or galactic l) (0-360) [83.63]  
27 - Second coordinate of image center in degrees (DEC or galactic b) (-90-90) [22.01]  
28 - Image scale (in degrees/pixel) [0.02]  
29 - Size of the X axis in pixels [200]  
30 - Size of the Y axis in pixels [200]  
31 - Lower energy limit (TeV) [0.1] 0.66  
32 - Upper energy limit (TeV) [100.0]  
33 - Background subtraction method (NONE|IRF|RING) [NONE]  
34 - Output skymap file [skymap.fits]  
35 -  
36 -The resulting sky map, displayed using  
37 -`ds9 <http://ds9.si.edu>`_ with a square-root color scaling, is shown below:  
38 -  
39 -.. figure:: skymap.png  
40 - :width: 400px  
41 - :align: center  
42 -  
43 - *Sky map of the selected events centred on the Crab nebula*  
44 -  
45 -Based on the sky map you can now extract a model for all potentially significant  
46 -sources in the data.  
47 -You do this using the :ref:`cssrcdetect` script, and to extract only significant  
48 -sources, you should set the detection threshold for example to 5 sigma.  
49 -For convenience, the :ref:`cssrcdetect` script can also add a background model  
50 -component to the output  
51 -:ref:`model definition XML file <glossary_moddef>`.  
52 -Since the H.E.S.S. Instrument Response Function does not include a background  
53 -template, the ``IRF`` option will not work.  
54 -While sophisticated methods for the analysis of H.E.S.S. data still need to  
55 -be developed, you may try the effective area model ``AEFF`` that uses the  
56 -effective area as spatial template for the background component.  
57 -So, now type:  
58 -  
59 -.. code-block:: bash  
60 -  
61 - $ cssrcdetect  
62 - Input sky map file [skymap.fits]  
63 - Source model type (POINT) [POINT]  
64 - Background model type (NONE|IRF|AEFF|CUBE|RACC) [NONE] AEFF  
65 - Detection threshold (Gaussian sigma) [5.0]  
66 - Correlation kernel radius (deg) [0.1]  
67 - Output model definition XML file [models.xml] crab_models.xml  
68 - Output DS9 region file [ds9.reg] crab.reg  
69 -  
70 -Below an excerpt of the ``cssrcdetect.log`` log file.  
71 -Only one significant source was found, and its position is consistent with the  
72 -Crab nebula.  
73 -This is also illustrated in the figure below where the region file  
74 -``crab.reg`` that was produced by :ref:`cssrcdetect` was overlaid with  
75 -`ds9 <http://ds9.si.edu>`_  
76 -on the sky map.  
77 -  
78 -.. code-block:: none  
79 -  
80 - 2018-09-11T20:32:20: +==================+  
81 - 2018-09-11T20:32:20: | Source detection |  
82 - 2018-09-11T20:32:20: +==================+  
83 - 2018-09-11T20:32:20: === Iteration 1 ===  
84 - 2018-09-11T20:32:20: Map maximum ...............: 11.1003120131  
85 - 2018-09-11T20:32:20: Src001 position ...........: (RA,Dec)=(83.6192131308071,22.0199996472185)  
86 - 2018-09-11T20:32:20: === Iteration 2 ===  
87 - 2018-09-11T20:32:20: Map maximum ...............: None above threshold  
88 -  
89 -.. figure:: skymap_crab.png  
90 - :width: 400px  
91 - :align: center  
92 -  
93 - *Sky map of the selected events centred on the Crab nebula*  
94 -  
95 -The  
96 -:ref:`model definition file <glossary_moddef>`  
97 -``crab_models.xml`` that was generated by :ref:`cssrcdetect` is shown below.  
98 -It contains a point source ``Src001`` at the position of the Crab nebula  
99 -and an effective area background model scaled by a spectral power law as  
100 -background component.  
101 -  
102 -.. code-block:: xml  
103 -  
104 - <?xml version="1.0" encoding="UTF-8" standalone="no"?>  
105 - <source_library title="source library">  
106 - <source name="Src001" type="PointSource">  
107 - <spectrum type="PowerLaw">  
108 - <parameter name="Prefactor" value="1" error="0" scale="5.7e-18" min="0" free="1" />  
109 - <parameter name="Index" value="1" error="-0" scale="-2.48" min="-4.03225806451613" max="4.03225806451613" free="1" />  
110 - <parameter name="PivotEnergy" value="1" scale="300000" free="0" />  
111 - </spectrum>  
112 - <spatialModel type="PointSource">  
113 - <parameter name="RA" value="83.6192131308071" error="0" scale="1" free="1" />  
114 - <parameter name="DEC" value="22.0199996472185" error="0" scale="1" free="1" />  
115 - </spatialModel>  
116 - </source>  
117 - <source name="Background" type="CTAAeffBackground">  
118 - <spectrum type="PowerLaw">  
119 - <parameter name="Prefactor" value="1" error="0" scale="1e-13" min="0" free="1" />  
120 - <parameter name="Index" value="1" error="-0" scale="-2.5" min="-4" max="4" free="1" />  
121 - <parameter name="PivotEnergy" value="1" scale="1000000" free="0" />  
122 - </spectrum>  
123 - </source>  
124 - </source_library>  
doc/source/users/tutorials/hess_dr1/unbinned.ipynb 0 → 100644
  1 +{
  2 + "cells": [
  3 + {
  4 + "cell_type": "markdown",
  5 + "metadata": {},
  6 + "source": [
  7 + "# Performing an unbinned analysis"
  8 + ]
  9 + },
  10 + {
  11 + "cell_type": "raw",
  12 + "metadata": {},
  13 + "source": [
  14 + "<div align=\"right\"><a href=\"../../../_downloads/unbinned.ipynb\" download=\"unbinned.ipynb\"><img src=\"../../../_static/download-notebook.jpg\" alt=\"Download Notebook\" height=\"40\"></a></div>"
  15 + ]
  16 + },
  17 + {
  18 + "cell_type": "markdown",
  19 + "metadata": {},
  20 + "source": [
  21 + "**In this tutorial you will learn to fit a parametric model to the event data (unbinned fit) and how to inspect the fit residuals**\n",
  22 + "\n",
  23 + "Now you are ready to fit the models for the source and the background to the data.\n",
  24 + "\n",
  25 + "We start by importing gammalib, ctools, and cscripts."
  26 + ]
  27 + },
  28 + {
  29 + "cell_type": "code",
  30 + "execution_count": 1,
  31 + "metadata": {},
  32 + "outputs": [],
  33 + "source": [
  34 + "import gammalib\n",
  35 + "import ctools\n",
  36 + "import cscripts"
  37 + ]
  38 + },
  39 + {
  40 + "cell_type": "markdown",
  41 + "metadata": {},
  42 + "source": [
  43 + "We will also use matplotlib to display the results."
  44 + ]
  45 + },
  46 + {
  47 + "cell_type": "code",
  48 + "execution_count": 2,
  49 + "metadata": {},
  50 + "outputs": [],
  51 + "source": [
  52 + "%matplotlib inline\n",
  53 + "import matplotlib.pyplot as plt"
  54 + ]
  55 + },
  56 + {
  57 + "cell_type": "markdown",
  58 + "metadata": {},
  59 + "source": [
  60 + "Finally we add to our path the directory containing the example plotting scripts provided with the ctools installation."
  61 + ]
  62 + },
  63 + {
  64 + "cell_type": "code",
  65 + "execution_count": 3,
  66 + "metadata": {},
  67 + "outputs": [],
  68 + "source": [
  69 + "import sys\n",
  70 + "import os\n",
  71 + "sys.path.append(os.environ['CTOOLS']+'/share/examples/python/')"
  72 + ]
  73 + },
  74 + {
  75 + "cell_type": "markdown",
  76 + "metadata": {},
  77 + "source": [
  78 + "## Preparing the model\n",
  79 + "\n",
  80 + "First, we will merge the two models we derived in the previous tutorials for source and background."
  81 + ]
  82 + },
  83 + {
  84 + "cell_type": "code",
  85 + "execution_count": 4,
  86 + "metadata": {},
  87 + "outputs": [
  88 + {
  89 + "name": "stdout",
  90 + "output_type": "stream",
  91 + "text": [
  92 + "=== GModels ===\n",
  93 + " Number of models ..........: 5\n",
  94 + " Number of parameters ......: 86\n",
  95 + "=== GModelSky ===\n",
  96 + " Name ......................: Src001\n",
  97 + " Instruments ...............: all\n",
  98 + " Instrument scale factors ..: unity\n",
  99 + " Observation identifiers ...: all\n",
  100 + " Model type ................: PointSource\n",
  101 + " Model components ..........: \"PointSource\" * \"PowerLaw\" * \"Constant\"\n",
  102 + " Number of parameters ......: 6\n",
  103 + " Number of spatial par's ...: 2\n",
  104 + " RA .......................: 83.6192131308071 +/- 0 deg (free,scale=1)\n",
  105 + " DEC ......................: 22.0199996472185 +/- 0 deg (free,scale=1)\n",
  106 + " Number of spectral par's ..: 3\n",
  107 + " Prefactor ................: 5.7e-18 +/- 0 [0,infty[ ph/cm2/s/MeV (free,scale=5.7e-18,gradient)\n",
  108 + " Index ....................: -2.48 +/- 0 [10,-10] (free,scale=-2.48,gradient)\n",
  109 + " PivotEnergy ..............: 300000 MeV (fixed,scale=300000,gradient)\n",
  110 + " Number of temporal par's ..: 1\n",
  111 + " Normalization ............: 1 (relative value) (fixed,scale=1,gradient)\n",
  112 + "=== GCTAModelBackground ===\n",
  113 + " Name ......................: Background_023523\n",
  114 + " Instruments ...............: HESS\n",
  115 + " Instrument scale factors ..: unity\n",
  116 + " Observation identifiers ...: 023523\n",
  117 + " Model type ................: CTABackground\n",
  118 + " Model components ..........: \"Multiplicative\" * \"NodeFunction\" * \"Constant\"\n",
  119 + " Number of parameters ......: 20\n",
  120 + " Number of spatial par's ...: 3\n",
  121 + " 1:Sigma ..................: 3.19679118852325 +/- 0.148784221714502 [7.71728e-08,infty[ deg2 (free,scale=1,gradient)\n",
  122 + " 2:Grad_DETX ..............: 0.0882131070561384 +/- 0.0223563997131535 deg^-1 (free,scale=1,gradient)\n",
  123 + " 2:Grad_DETY ..............: -0.000692481271743188 +/- 0.0227254581791992 deg^-1 (free,scale=1,gradient)\n",
  124 + " Number of spectral par's ..: 16\n",
  125 + " Energy0 ..................: 700000 [7e-05,infty[ MeV (fixed,scale=700000)\n",
  126 + " Intensity0 ...............: 0.00149714476600658 +/- 0.000185798282794166 [9.46696076103918e-14,infty[ ph/cm2/s/MeV (free,scale=0.000946696076103918,gradient)\n",
  127 + " Energy1 ..................: 1197413.67463685 [0.000119741367463685,infty[ MeV (fixed,scale=1197413.67463685)\n",
  128 + " Intensity1 ...............: 0.000275025454049597 +/- 1.50407490107521e-05 [3.11144874586726e-14,infty[ ph/cm2/s/MeV (free,scale=0.000311144874586726,gradient)\n",
  129 + " Energy2 ..................: 2048285.01172474 [0.000204828501172474,infty[ MeV (fixed,scale=2048285.01172474)\n",
  130 + " Intensity2 ...............: 9.68931866899334e-05 +/- 5.86314382972939e-06 [1.02262104412654e-14,infty[ ph/cm2/s/MeV (free,scale=0.000102262104412654,gradient)\n",
  131 + " Energy3 ..................: 3503777.83227556 [0.000350377783227556,infty[ MeV (fixed,scale=3503777.83227556)\n",
  132 + " Intensity3 ...............: 3.42414862721453e-05 +/- 2.61283857499118e-06 [3.36098674702412e-15,infty[ ph/cm2/s/MeV (free,scale=3.36098674702412e-05,gradient)\n",
  133 + " Energy4 ..................: 5993530.69893743 [0.000599353069893743,infty[ MeV (fixed,scale=5993530.69893743)\n",
  134 + " Intensity4 ...............: 1.2134598847599e-05 +/- 1.19969987797427e-06 [1.10463518999066e-15,infty[ ph/cm2/s/MeV (free,scale=1.10463518999066e-05,gradient)\n",
  135 + " Energy5 ..................: 10252479.454662 [0.0010252479454662,infty[ MeV (fixed,scale=10252479.454662)\n",
  136 + " Intensity5 ...............: 4.80035386464156e-06 +/- 6.14208278785316e-07 [3.63053768077518e-16,infty[ ph/cm2/s/MeV (free,scale=3.63053768077518e-06,gradient)\n",
  137 + " Energy6 ..................: 17537798.7113509 [0.00175377987113509,infty[ MeV (fixed,scale=17537798.7113509)\n",
  138 + " Intensity6 ...............: 8.5455367005893e-07 +/- 1.75301261074233e-07 [1.19322686539072e-16,infty[ ph/cm2/s/MeV (free,scale=1.19322686539072e-06,gradient)\n",
  139 + " Energy7 ..................: 30000000 [0.003,infty[ MeV (fixed,scale=30000000)\n",
  140 + " Intensity7 ...............: 2.8110106615004e-07 +/- 1.02501352381156e-07 [3.92170658310361e-17,infty[ ph/cm2/s/MeV (free,scale=3.92170658310361e-07,gradient)\n",
  141 + " Number of temporal par's ..: 1\n",
  142 + " Normalization ............: 1 (relative value) (fixed,scale=1,gradient)\n",
  143 + "=== GCTAModelBackground ===\n",
  144 + " Name ......................: Background_023526\n",
  145 + " Instruments ...............: HESS\n",
  146 + " Instrument scale factors ..: unity\n",
  147 + " Observation identifiers ...: 023526\n",
  148 + " Model type ................: CTABackground\n",
  149 + " Model components ..........: \"Multiplicative\" * \"NodeFunction\" * \"Constant\"\n",
  150 + " Number of parameters ......: 20\n",
  151 + " Number of spatial par's ...: 3\n",
  152 + " 1:Sigma ..................: 3.30082205953218 +/- 0.156912956620767 [7.71728e-08,infty[ deg2 (free,scale=1,gradient)\n",
  153 + " 2:Grad_DETX ..............: 0.0153115422362867 +/- 0.0215680816698383 deg^-1 (free,scale=1,gradient)\n",
  154 + " 2:Grad_DETY ..............: -0.00906905077562078 +/- 0.0213184759257543 deg^-1 (free,scale=1,gradient)\n",
  155 + " Number of spectral par's ..: 16\n",
  156 + " Energy0 ..................: 700000 [7e-05,infty[ MeV (fixed,scale=700000)\n",
  157 + " Intensity0 ...............: 0.00115207913907334 +/- 6.11872558313686e-05 [8.950257713407e-14,infty[ ph/cm2/s/MeV (free,scale=0.0008950257713407,gradient)\n",
  158 + " Energy1 ..................: 1197413.67463685 [0.000119741367463685,infty[ MeV (fixed,scale=1197413.67463685)\n",
  159 + " Intensity1 ...............: 0.000216074985117796 +/- 1.14346974881101e-05 [2.82228203274059e-14,infty[ ph/cm2/s/MeV (free,scale=0.000282228203274059,gradient)\n",
  160 + " Energy2 ..................: 2048285.01172474 [0.000204828501172474,infty[ MeV (fixed,scale=2048285.01172474)\n",
  161 + " Intensity2 ...............: 9.80980717622882e-05 +/- 6.14243331439364e-06 [8.8994933189452e-15,infty[ ph/cm2/s/MeV (free,scale=8.8994933189452e-05,gradient)\n",
  162 + " Energy3 ..................: 3503777.83227556 [0.000350377783227556,infty[ MeV (fixed,scale=3503777.83227556)\n",
  163 + " Intensity3 ...............: 2.64302082334315e-05 +/- 2.27978082923659e-06 [2.80627451173057e-15,infty[ ph/cm2/s/MeV (free,scale=2.80627451173057e-05,gradient)\n",
  164 + " Energy4 ..................: 5993530.69893743 [0.000599353069893743,infty[ MeV (fixed,scale=5993530.69893743)\n",
  165 + " Intensity4 ...............: 1.03353701064884e-05 +/- 1.13230244143927e-06 [8.84901685180661e-16,infty[ ph/cm2/s/MeV (free,scale=8.84901685180661e-06,gradient)\n",
  166 + " Energy5 ..................: 10252479.454662 [0.0010252479454662,infty[ MeV (fixed,scale=10252479.454662)\n",
  167 + " Intensity5 ...............: 3.57899467682822e-06 +/- 5.03727665165389e-07 [2.79035778275547e-16,infty[ ph/cm2/s/MeV (free,scale=2.79035778275547e-06,gradient)\n",
  168 + " Energy6 ..................: 17537798.7113509 [0.00175377987113509,infty[ MeV (fixed,scale=17537798.7113509)\n",
  169 + " Intensity6 ...............: 5.95101204005172e-07 +/- 1.41251129058325e-07 [8.79882667891458e-17,infty[ ph/cm2/s/MeV (free,scale=8.79882667891458e-07,gradient)\n",
  170 + " Energy7 ..................: 30000000 [0.003,infty[ MeV (fixed,scale=30000000)\n",
  171 + " Intensity7 ...............: 2.81714577113613e-07 +/- 1.0384120888285e-07 [2.77453133085778e-17,infty[ ph/cm2/s/MeV (free,scale=2.77453133085778e-07,gradient)\n",
  172 + " Number of temporal par's ..: 1\n",
  173 + " Normalization ............: 1 (relative value) (fixed,scale=1,gradient)\n",
  174 + "=== GCTAModelBackground ===\n",
  175 + " Name ......................: Background_023559\n",
  176 + " Instruments ...............: HESS\n",
  177 + " Instrument scale factors ..: unity\n",
  178 + " Observation identifiers ...: 023559\n",
  179 + " Model type ................: CTABackground\n",
  180 + " Model components ..........: \"Multiplicative\" * \"NodeFunction\" * \"Constant\"\n",
  181 + " Number of parameters ......: 20\n",
  182 + " Number of spatial par's ...: 3\n",
  183 + " 1:Sigma ..................: 4.32704862685447 +/- 0.368685355107103 [7.71728e-08,infty[ deg2 (free,scale=1,gradient)\n",
  184 + " 2:Grad_DETX ..............: 0.018772378083067 +/- 0.0217106872366865 deg^-1 (free,scale=1,gradient)\n",
  185 + " 2:Grad_DETY ..............: -0.126627961668458 +/- 0.0204738085196433 deg^-1 (free,scale=1,gradient)\n",
  186 + " Number of spectral par's ..: 16\n",
  187 + " Energy0 ..................: 700000 [7e-05,infty[ MeV (fixed,scale=700000)\n",
  188 + " Intensity0 ...............: 0.000915773345685034 +/- 4.89989530347851e-05 [7.43957604504927e-14,infty[ ph/cm2/s/MeV (free,scale=0.000743957604504927,gradient)\n",
  189 + " Energy1 ..................: 1197413.67463685 [0.000119741367463685,infty[ MeV (fixed,scale=1197413.67463685)\n",
  190 + " Intensity1 ...............: 0.000197398656687683 +/- 1.07759903733823e-05 [2.35277778278335e-14,infty[ ph/cm2/s/MeV (free,scale=0.000235277778278335,gradient)\n",
  191 + " Energy2 ..................: 2048285.01172474 [0.000204828501172474,infty[ MeV (fixed,scale=2048285.01172474)\n",
  192 + " Intensity2 ...............: 6.93704083542102e-05 +/- 4.77505196699795e-06 [7.44069724086306e-15,infty[ ph/cm2/s/MeV (free,scale=7.44069724086306e-05,gradient)\n",
  193 + " Energy3 ..................: 3503777.83227556 [0.000350377783227556,infty[ MeV (fixed,scale=3503777.83227556)\n",
  194 + " Intensity3 ...............: 2.57663537500693e-05 +/- 2.20136814658691e-06 [2.35313236274662e-15,infty[ ph/cm2/s/MeV (free,scale=2.35313236274662e-05,gradient)\n",
  195 + " Energy4 ..................: 5993530.69893743 [0.000599353069893743,infty[ MeV (fixed,scale=5993530.69893743)\n",
  196 + " Intensity4 ...............: 6.82483279973139e-06 +/- 7.86680350899204e-07 [7.44181860564889e-16,infty[ ph/cm2/s/MeV (free,scale=7.44181860564889e-06,gradient)\n",
  197 + " Energy5 ..................: 10252479.454662 [0.0010252479454662,infty[ MeV (fixed,scale=10252479.454662)\n",
  198 + " Intensity5 ...............: 3.3292540797357e-06 +/- 4.68826132796518e-07 [2.35348699614757e-16,infty[ ph/cm2/s/MeV (free,scale=2.35348699614757e-06,gradient)\n",
  199 + " Energy6 ..................: 17537798.7113509 [0.00175377987113509,infty[ MeV (fixed,scale=17537798.7113509)\n",
  200 + " Intensity6 ...............: 8.19437245391855e-07 +/- 1.82363529352901e-07 [7.44294013943215e-17,infty[ ph/cm2/s/MeV (free,scale=7.44294013943215e-07,gradient)\n",
  201 + " Energy7 ..................: 30000000 [0.003,infty[ MeV (fixed,scale=30000000)\n",
  202 + " Intensity7 ...............: 1.44457348642334e-07 +/- 7.0968299684809e-08 [2.35384168299424e-17,infty[ ph/cm2/s/MeV (free,scale=2.35384168299424e-07,gradient)\n",
  203 + " Number of temporal par's ..: 1\n",
  204 + " Normalization ............: 1 (relative value) (fixed,scale=1,gradient)\n",
  205 + "=== GCTAModelBackground ===\n",
  206 + " Name ......................: Background_023592\n",
  207 + " Instruments ...............: HESS\n",
  208 + " Instrument scale factors ..: unity\n",
  209 + " Observation identifiers ...: 023592\n",
  210 + " Model type ................: CTABackground\n",
  211 + " Model components ..........: \"Multiplicative\" * \"NodeFunction\" * \"Constant\"\n",
  212 + " Number of parameters ......: 20\n",
  213 + " Number of spatial par's ...: 3\n",
  214 + " 1:Sigma ..................: 3.6479543205698 +/- 0.238749563358304 [7.71728e-08,infty[ deg2 (free,scale=1,gradient)\n",
  215 + " 2:Grad_DETX ..............: 0.0290086310507671 +/- 0.0231654281693484 deg^-1 (free,scale=1,gradient)\n",
  216 + " 2:Grad_DETY ..............: 0.165462911909218 +/- 0.0212932684624286 deg^-1 (free,scale=1,gradient)\n",
  217 + " Number of spectral par's ..: 16\n",
  218 + " Energy0 ..................: 700000 [7e-05,infty[ MeV (fixed,scale=700000)\n",
  219 + " Intensity0 ...............: 0.00147439433272687 +/- 0.000191693450881709 [8.6655214667889e-14,infty[ ph/cm2/s/MeV (free,scale=0.00086655214667889,gradient)\n",
  220 + " Energy1 ..................: 1197413.67463685 [0.000119741367463685,infty[ MeV (fixed,scale=1197413.67463685)\n",
  221 + " Intensity1 ...............: 0.000235250773930648 +/- 1.37598369145017e-05 [2.81551973223247e-14,infty[ ph/cm2/s/MeV (free,scale=0.000281551973223247,gradient)\n",
  222 + " Energy2 ..................: 2048285.01172474 [0.000204828501172474,infty[ MeV (fixed,scale=2048285.01172474)\n",
  223 + " Intensity2 ...............: 9.20623251759662e-05 +/- 5.75965738880592e-06 [9.1479219028787e-15,infty[ ph/cm2/s/MeV (free,scale=9.1479219028787e-05,gradient)\n",
  224 + " Energy3 ..................: 3503777.83227556 [0.000350377783227556,infty[ MeV (fixed,scale=3503777.83227556)\n",
  225 + " Intensity3 ...............: 3.22022945215284e-05 +/- 2.53414761162924e-06 [2.97225674475431e-15,infty[ ph/cm2/s/MeV (free,scale=2.97225674475431e-05,gradient)\n",
  226 + " Energy4 ..................: 5993530.69893743 [0.000599353069893743,infty[ MeV (fixed,scale=5993530.69893743)\n",
  227 + " Intensity4 ...............: 1.00701723302328e-05 +/- 1.04797408736245e-06 [9.65717706221071e-16,infty[ ph/cm2/s/MeV (free,scale=9.65717706221071e-06,gradient)\n",
  228 + " Energy5 ..................: 10252479.454662 [0.0010252479454662,infty[ MeV (fixed,scale=10252479.454662)\n",
  229 + " Intensity5 ...............: 3.29354066928594e-06 +/- 4.58158358563221e-07 [3.1377191413724e-16,infty[ ph/cm2/s/MeV (free,scale=3.1377191413724e-06,gradient)\n",
  230 + " Energy6 ..................: 17537798.7113509 [0.00175377987113509,infty[ MeV (fixed,scale=17537798.7113509)\n",
  231 + " Intensity6 ...............: 8.71669675678694e-07 +/- 1.76346292129154e-07 [1.01947819188903e-16,infty[ ph/cm2/s/MeV (free,scale=1.01947819188903e-06,gradient)\n",
  232 + " Energy7 ..................: 30000000 [0.003,infty[ MeV (fixed,scale=30000000)\n",
  233 + " Intensity7 ...............: 3.12067435753287e-07 +/- 1.11366909796179e-07 [3.31239265501224e-17,infty[ ph/cm2/s/MeV (free,scale=3.31239265501224e-07,gradient)\n",
  234 + " Number of temporal par's ..: 1\n",
  235 + " Normalization ............: 1 (relative value) (fixed,scale=1,gradient)\n"
  236 + ]
  237 + }
  238 + ],
  239 + "source": [
  240 + "srcmodel = 'crab.xml'\n",
  241 + "bkgmodel = 'bkgmodel.xml'\n",
  242 + "\n",
  243 + "models = gammalib.GModels()\n",
  244 + "for inmodels in [srcmodel,bkgmodel]:\n",
  245 + " for model in gammalib.GModels(inmodels):\n",
  246 + " models.append(model)\n",
  247 + " \n",
  248 + "print(models)"
  249 + ]
  250 + },
  251 + {
  252 + "cell_type": "markdown",
  253 + "metadata": {},
  254 + "source": [
  255 + "Note how the source found by cssrcdetect was named *Src001*. We will call it *Crab* instead. Also, spectral parameters are set to default values, but you should make sure they are appropriate so that the model fit runs seamlessly. In this case it is best to set the value of the pivot energy for the Crab within our energy range (> 0.66 TeV). We will set it to 1 TeV."
  256 + ]
  257 + },
  258 + {
  259 + "cell_type": "code",
  260 + "execution_count": 5,
  261 + "metadata": {},
  262 + "outputs": [],
  263 + "source": [
  264 + "models['Src001'].name('Crab')\n",
  265 + "models['Crab']['PivotEnergy'].value(1.e6)"
  266 + ]
  267 + },
  268 + {
  269 + "cell_type": "markdown",
  270 + "metadata": {},
  271 + "source": [
  272 + "We will save this model to disk for later use."
  273 + ]
  274 + },
  275 + {
  276 + "cell_type": "code",
  277 + "execution_count": 6,
  278 + "metadata": {},
  279 + "outputs": [],
  280 + "source": [
  281 + "modelfile = 'crab_models.xml'\n",
  282 + "models.save(modelfile)"
  283 + ]
  284 + },
  285 + {
  286 + "cell_type": "markdown",
  287 + "metadata": {},
  288 + "source": [
  289 + "## Fitting the model to the data\n",
  290 + "\n",
  291 + "The model fit is performed by ctlike. We will use the previously selected events."
  292 + ]
  293 + },
  294 + {
  295 + "cell_type": "code",
  296 + "execution_count": 7,
  297 + "metadata": {},
  298 + "outputs": [],
  299 + "source": [
  300 + "obsfile = \"obs_crab_selected.xml\"\n",
  301 + "\n",
  302 + "like = ctools.ctlike()\n",
  303 + "like['inobs'] = obsfile\n",
  304 + "like['inmodel'] = modelfile\n",
  305 + "\n",
  306 + "like.run()"
  307 + ]
  308 + },
  309 + {
  310 + "cell_type": "markdown",
  311 + "metadata": {},
  312 + "source": [
  313 + "We can now look at the results from the optimisation and the fitted model."
  314 + ]
  315 + },
  316 + {
  317 + "cell_type": "code",
  318 + "execution_count": 8,
  319 + "metadata": {},
  320 + "outputs": [
  321 + {
  322 + "name": "stdout",
  323 + "output_type": "stream",
  324 + "text": [
  325 + "=== GOptimizerLM ===\n",
  326 + " Optimized function value ..: 98200.140\n",
  327 + " Absolute precision ........: 0.005\n",
  328 + " Acceptable value decrease .: 2\n",
  329 + " Optimization status .......: converged\n",
  330 + " Number of parameters ......: 86\n",
  331 + " Number of free parameters .: 48\n",
  332 + " Number of iterations ......: 28\n",
  333 + " Lambda ....................: 0.1\n",
  334 + "=== GModelSky ===\n",
  335 + " Name ......................: Crab\n",
  336 + " Instruments ...............: all\n",
  337 + " Instrument scale factors ..: unity\n",
  338 + " Observation identifiers ...: all\n",
  339 + " Model type ................: PointSource\n",
  340 + " Model components ..........: \"PointSource\" * \"PowerLaw\" * \"Constant\"\n",
  341 + " Number of parameters ......: 6\n",
  342 + " Number of spatial par's ...: 2\n",
  343 + " RA .......................: 83.6230528971337 +/- 0.00239926913139826 deg (free,scale=1)\n",
  344 + " DEC ......................: 22.0247811584824 +/- 0.0021892515628272 deg (free,scale=1)\n",
  345 + " Number of spectral par's ..: 3\n",
  346 + " Prefactor ................: 4.89251809524732e-17 +/- 2.67898412101055e-18 [0,infty[ ph/cm2/s/MeV (free,scale=5.7e-18,gradient)\n",
  347 + " Index ....................: -2.70266617269294 +/- 0.0657789822882349 [10,-10] (free,scale=-2.48,gradient)\n",
  348 + " PivotEnergy ..............: 999999.999999999 MeV (fixed,scale=300000,gradient)\n",
  349 + " Number of temporal par's ..: 1\n",
  350 + " Normalization ............: 1 (relative value) (fixed,scale=1,gradient)\n"
  351 + ]
  352 + }
  353 + ],
  354 + "source": [
  355 + "print(like.opt())\n",
  356 + "print(like.obs().models()['Crab'])"
  357 + ]
  358 + },
  359 + {
  360 + "cell_type": "markdown",
  361 + "metadata": {},
  362 + "source": [
  363 + "The statistical 1-sigma positional uncertainty corresponds to 0.12 arcmin. Systematic uncertainties are not computed. The fitted position can be compared to the values of 83.629±0.005 degrees in Right Ascension and 22.012±0.001 degrees in Declination reported in [Holler et al. (2017)](https://arxiv.org/pdf/1707.04196.pdf).\n",
  364 + "\n",
  365 + "According to [SIMBAD](http://cdsportal.u-strasbg.fr/?target=Crab%20nebula), the Crab nebula is situated at a Right Ascension of 83.633 degrees and a Declination of 22.015 degrees, which is 0.013 degrees (0.82 arcmin) away from the fitted position.\n",
  366 + "\n",
  367 + "The intensity at 1 TeV of the Crab was fitted to (4.89±0.27)×10−11 photons cm−2 s−1 TeV−1 the spectral index of the power law is −2.70±0.07. This can be compared to the values of (3.45±0.05)×10−11 photons cm−2 s−1 TeV−1 and −2.63±0.01 reported in [Aharonian et al. (2006), A&A, 457, 899](https://www.aanda.org/articles/aa/abs/2006/39/aa5351-06/aa5351-06.html) (note that the datasets, calibrations etc. used in our analysis are not the same as in that paper).\n",
  368 + "\n",
  369 + "In the ctlike run above the energy dispersion, which relates the true photon energies to the energies of the reconstructed events, was not taken into account. By default **energy dispersion usage is disabled** since it involves an extra dimension in the data analysis which slows down the computations. We can run accounting for energy dispersion to compare the results."
  370 + ]
  371 + },
  372 + {
  373 + "cell_type": "code",
  374 + "execution_count": 9,
  375 + "metadata": {},
  376 + "outputs": [],
  377 + "source": [
  378 + "like['edisp'] = True\n",
  379 + "\n",
  380 + "like.run()"
  381 + ]
  382 + },
  383 + {
  384 + "cell_type": "code",
  385 + "execution_count": 10,
  386 + "metadata": {},
  387 + "outputs": [
  388 + {
  389 + "name": "stdout",
  390 + "output_type": "stream",
  391 + "text": [
  392 + "=== GOptimizerLM ===\n",
  393 + " Optimized function value ..: 98197.286\n",
  394 + " Absolute precision ........: 0.005\n",
  395 + " Acceptable value decrease .: 2\n",
  396 + " Optimization status .......: converged\n",
  397 + " Number of parameters ......: 86\n",
  398 + " Number of free parameters .: 48\n",
  399 + " Number of iterations ......: 3\n",
  400 + " Lambda ....................: 1e-06\n",
  401 + "=== GModelSky ===\n",
  402 + " Name ......................: Crab\n",
  403 + " Instruments ...............: all\n",
  404 + " Instrument scale factors ..: unity\n",
  405 + " Observation identifiers ...: all\n",
  406 + " Model type ................: PointSource\n",
  407 + " Model components ..........: \"PointSource\" * \"PowerLaw\" * \"Constant\"\n",
  408 + " Number of parameters ......: 6\n",
  409 + " Number of spatial par's ...: 2\n",
  410 + " RA .......................: 83.6216748574258 +/- 0.00272066304506809 deg (free,scale=1)\n",
  411 + " DEC ......................: 22.0244889319664 +/- 0.0024860621013803 deg (free,scale=1)\n",
  412 + " Number of spectral par's ..: 3\n",
  413 + " Prefactor ................: 4.14814740728779e-17 +/- 2.00490449017781e-18 [0,infty[ ph/cm2/s/MeV (free,scale=5.7e-18,gradient)\n",
  414 + " Index ....................: -2.73454025222651 +/- 0.0699765314511747 [10,-10] (free,scale=-2.48,gradient)\n",
  415 + " PivotEnergy ..............: 999999.999999999 MeV (fixed,scale=300000,gradient)\n",
  416 + " Number of temporal par's ..: 1\n",
  417 + " Normalization ............: 1 (relative value) (fixed,scale=1,gradient)\n"
  418 + ]
  419 + }
  420 + ],
  421 + "source": [
  422 + "print(like.opt())\n",
  423 + "print(like.obs().models()['Crab'])"
  424 + ]
  425 + },
  426 + {
  427 + "cell_type": "markdown",
  428 + "metadata": {},
  429 + "source": [
  430 + "You can verify that the results are broadly consistents with those obtained ignoring the energy dispersion.\n",
  431 + "\n",
  432 + "## Inspecting the fit residuals\n",
  433 + "\n",
  434 + "Following a model fit, you should always inspect the fit residuals. First let’s inspect the spectral residuals. You can do this using the csresspec script."
  435 + ]
  436 + },
  437 + {
  438 + "cell_type": "code",
  439 + "execution_count": 11,
  440 + "metadata": {},
  441 + "outputs": [
  442 + {
  443 + "data": {
  444 + "image/png": "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LSUhIYHt27fz448/8tlnn3HttdeSleWejC/DJyH8pz/9iTPOOIOCggIA1q1bR8eOHenQwf1BOGzYMO9rAEOGDCE1NRWAzz//nF/9yt3dtEuXLuTk5DQaOJKTk7niiisA6N27N//6l7u5ZfHixbzzzjsA3Hjjjfzud7+rtwzfZodjU5NIdCWAz7f+iooK7h57M6Nuu532uUc/0G+8JY8bb8ljzjtvMunpP/OnZ14gJT2L77//nszMTJYvX87QoUNZvXq1966ioqKCYcOG8etf/5qOHTt6y7rzzju58847ee2113jssceYNm1ag793bS2r34NgtP7uM6qO60PpEesj3tMlnaR9rY8m2K2KUI6kU6dOfpPjAwYMqDHdCUBSUhIDBgyosZ/O6BudGgwcInIWcDbQWkR8e1C1xD1IL6rEUq+qs846iz179rB7927eevdt9hQVsXz5cpKSksjNzaW0tBRjTL3NKX379mX58uXs3buXjIyMRtuCmzc/uqZ4ffsmJiZSVXV0NLXvOiBJSUneurhcLioqKryvBdrk07ZtWxYsWAC4e3Md2reLfqf19zZt3XzzzZzWrQuPPew/+IzLu4lHf/cbnnzOBbjIzHQf17t3b372s5+xfv16+vRxL5mcl5dHp06duPvuu/2W9Ytf/II77rgjoHr7anXD9bS64XrLxwG0fONN9r/3HsFM6vvvynNJTg5u0CJU50iEsAeOhu4WGutVpaseRq/G7jiScWcBE4FjfLbvByLfpaeWaG+q8rVu3ToqKyvJzMxk//79tM7KIikpifnz53t7qwwYMICrrrqK3/zmN2RmZnqDBMDAgQO57LLLuPzyy5k3bx5dunRh06ZNbNmyhdzcXN544416z33++eczY8YMLrroItavX8/333/PySefzP79+3n++eepqqpi+/btfPnll43+Hueccw6vv/46I0eOZMaMGQ3ue9lll/Hggw+yb98+AObNm8fjjz8OwMMPP0xxcTEvvfRSjWM2bNjg7Q76/vvve38u2rOb3IxUXC4XmzZtYsOGDd47C6tlhYudoPPFba9RkZBR78DExny7czlFWXU7EkRSoE1dtWmPrMhrMHAYYxYCC0VkqjGmbt87ZYknxwHub/3Tpk3D5XJx3VXXMuzmkfTp04eePXvSpUsXwL1q4EMPPcQFF1yAy+WiV69eTPXpBXTddddx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\n",
  445 + "text/plain": [
  446 + "<matplotlib.figure.Figure at 0x10fee3c88>"
  447 + ]
  448 + },
  449 + "metadata": {},
  450 + "output_type": "display_data"
  451 + }
  452 + ],
  453 + "source": [
  454 + "residuals = 'residuals.fits'\n",
  455 + "\n",
  456 + "resspec = cscripts.csresspec(like.obs())\n",
  457 + "resspec['stack'] = True\n",
  458 + "resspec['components'] = True\n",
  459 + "resspec['ebinalg'] = 'LOG'\n",
  460 + "resspec['emin'] = 0.66\n",
  461 + "resspec['emax'] = 100.\n",
  462 + "resspec['enumbins'] = 20\n",
  463 + "resspec['proj'] = 'CAR'\n",
  464 + "resspec['coordsys'] = 'CEL'\n",
  465 + "resspec['xref'] = 83.63\n",
  466 + "resspec['yref'] = 22.01\n",
  467 + "resspec['binsz'] = 0.02\n",
  468 + "resspec['nxpix'] = 200\n",
  469 + "resspec['nypix'] = 200\n",
  470 + "resspec['algorithm'] = 'SIGNIFICANCE'\n",
  471 + "resspec['outfile'] = residuals\n",
  472 + "\n",
  473 + "resspec.execute()\n",
  474 + "\n",
  475 + "from show_residuals import plot_residuals\n",
  476 + "plot_residuals(residuals,'',0)"
  477 + ]
  478 + },
  479 + {
  480 + "cell_type": "markdown",
  481 + "metadata": {},
  482 + "source": [
  483 + "The spectral fit looks satisfactory. Finally you should also inspect the spatial residuals. You do this using the csresmap script."
  484 + ]
  485 + },
  486 + {
  487 + "cell_type": "code",
  488 + "execution_count": 12,
  489 + "metadata": {},
  490 + "outputs": [],
  491 + "source": [
  492 + "resmap = cscripts.csresmap(like.obs())\n",
  493 + "resmap['emin'] = 0.66\n",
  494 + "resmap['emax'] = 100.\n",
  495 + "resmap['proj'] = 'CAR'\n",
  496 + "resmap['coordsys'] = 'CEL'\n",
  497 + "resmap['xref'] = 83.63\n",
  498 + "resmap['yref'] = 22.01\n",
  499 + "resmap['binsz'] = 0.02\n",
  500 + "resmap['nxpix'] = 200\n",
  501 + "resmap['nypix'] = 200\n",
  502 + "resmap['algorithm'] = 'SUBDIV'\n",
  503 + "\n",
  504 + "resmap.run()"
  505 + ]
  506 + },
  507 + {
  508 + "cell_type": "markdown",
  509 + "metadata": {},
  510 + "source": [
  511 + "We will inspect the residual map with a slight smoothing to suppress statistical fluctuations."
  512 + ]
  513 + },
  514 + {
  515 + "cell_type": "code",
  516 + "execution_count": 13,
  517 + "metadata": {
  518 + "code_folding": []
  519 + },
  520 + "outputs": [
  521 + {
  522 + "data": {
  523 + "image/png": "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\n",
  524 + "text/plain": [
  525 + "<matplotlib.figure.Figure at 0x103e6f978>"
  526 + ]
  527 + },
  528 + "metadata": {},
  529 + "output_type": "display_data"
  530 + }
  531 + ],
  532 + "source": [
  533 + "resmap._resmap.smooth('GAUSSIAN',0.1)\n",
  534 + "\n",
  535 + "ax = plt.subplot()\n",
  536 + "plt.imshow(resmap._resmap.array(),origin='lower',\n",
  537 + " cmap='bwr',vmin=-1,vmax=1,\n",
  538 + " extent=[83.63+0.02*200,83.63-0.02*200,22.01-0.02*200,22.01+0.02*200])\n",
  539 + " # Boundaries of the coord grid\n",
  540 + "ax.set_xlabel('R.A. (deg)')\n",
  541 + "ax.set_ylabel('Dec (deg)')\n",
  542 + "cbar = plt.colorbar()\n",
  543 + "cbar.set_label('Residuals/Total Counts')"
  544 + ]
  545 + },
  546 + {
  547 + "cell_type": "markdown",
  548 + "metadata": {},
  549 + "source": [
  550 + "The residuals look flat across the field analysed."
  551 + ]
  552 + }
  553 + ],
  554 + "metadata": {
  555 + "kernelspec": {
  556 + "display_name": "Python 3",
  557 + "language": "python",
  558 + "name": "python3"
  559 + },
  560 + "language_info": {
  561 + "codemirror_mode": {
  562 + "name": "ipython",
  563 + "version": 3
  564 + },
  565 + "file_extension": ".py",
  566 + "mimetype": "text/x-python",
  567 + "name": "python",
  568 + "nbconvert_exporter": "python",
  569 + "pygments_lexer": "ipython3",
  570 + "version": "3.5.4"
  571 + }
  572 + },
  573 + "nbformat": 4,
  574 + "nbformat_minor": 2
  575 +}
doc/source/users/tutorials/notebooks.rst
@@ -19,4 +19,10 @@ this page. @@ -19,4 +19,10 @@ this page.
19 * :download:`How to connect observations to specific models? <howto/howto_connect_models.ipynb>` 19 * :download:`How to connect observations to specific models? <howto/howto_connect_models.ipynb>`
20 * :download:`How to perform a stacked analysis? <howto/howto_stacked_analysis.ipynb>` 20 * :download:`How to perform a stacked analysis? <howto/howto_stacked_analysis.ipynb>`
21 * :download:`How to do advanced model manipulation and fitting in Python? <howto/howto_advanced_python_fitting.ipynb>` 21 * :download:`How to do advanced model manipulation and fitting in Python? <howto/howto_advanced_python_fitting.ipynb>`
22 -* :download:`Data preparation for 1DC How-tos <howto/howto_prepare_1dc.ipynb>` 22 +* :download:`Data preparation for 1DC How-to <howto/howto_prepare_1dc.ipynb>`
  23 +* :download:`Selecting events for H.E.S.S. public data <hess_dr1/selecting_events.ipynb>`
  24 +* :download:`Generating a sky map and finding sources for H.E.S.S. public data <hess_dr1/skymap.ipynb>`
  25 +* :download:`Generating a background model from H.E.S.S. public data <hess_dr1/bkgmodel.ipynb>`
  26 +* :download:`Performing an unbinned analysis of H.E.S.S. public data <hess_dr1/unbinned.ipynb>`
  27 +* :download:`Classical analysis of H.E.S.S. public data <hess_dr1/classical.ipynb>`
  28 +
models/Makefile.am
@@ -31,6 +31,7 @@ models = 1dc_howto.xml \ @@ -31,6 +31,7 @@ models = 1dc_howto.xml \
31 crab.xml \ 31 crab.xml \
32 crab_beyond.xml \ 32 crab_beyond.xml \
33 crab_2bkg.xml \ 33 crab_2bkg.xml \
  34 + crab_nobkg.xml \
34 crab_poly.xml \ 35 crab_poly.xml \
35 crab_profile.xml \ 36 crab_profile.xml \
36 disk.xml \ 37 disk.xml \
models/crab_nobkg.xml 0 → 100755
  1 +<?xml version="1.0" standalone="no"?>
  2 +<source_library title="source library">
  3 + <source name="Crab" type="PointSource">
  4 + <spectrum type="PowerLaw">
  5 + <parameter name="Prefactor" scale="1e-17" value="5.7" min="1e-07" max="1000.0" free="1"/>
  6 + <parameter name="Index" scale="-1" value="2.48" min="0.0" max="+5.0" free="1"/>
  7 + <parameter name="PivotEnergy" scale="1e6" value="1." min="0.01" max="1000.0" free="0"/>
  8 + </spectrum>
  9 + <spatialModel type="PointSource">
  10 + <parameter name="RA" scale="1.0" value="83.6331" min="-360" max="360" free="0"/>
  11 + <parameter name="DEC" scale="1.0" value="22.0145" min="-90" max="90" free="0"/>
  12 + </spatialModel>
  13 + </source>
  14 +</source_library>