Commit f1c567ecefeb98f9cf8332c0c1d6d4a45c8d9fe6
Merge branch '2712_HESSDR1_tutorials' into integration
Showing
21 changed files
with
1996 additions
and
916 deletions
cscripts/csbkgmodel.par
| ... | ... | @@ -29,7 +29,7 @@ spectral, s, a, NODES,PLAW|NODES,, "Spectral model component" |
| 29 | 29 | ebinalg, s, a, LOG,FILE|LIN|LOG,, "Algorithm for defining energy nodes" |
| 30 | 30 | emin, r, a, 0.1,,, "Lower energy limit (TeV)" |
| 31 | 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 | 33 | ebinfile, f, a, NONE,,, "Name of the file containing the energy node definition" |
| 34 | 34 | runwise, b, a, yes,,, "Generate runwise background model?" |
| 35 | 35 | rad, r, h, 2.0,,, "Radius for event selection (degrees)" | ... | ... |
cscripts/csresspec.py
| ... | ... | @@ -102,7 +102,7 @@ class csresspec(ctools.csobservation): |
| 102 | 102 | # If there is more than one observation, and observations are all |
| 103 | 103 | # unbinned or all onoff query user to know if they wish stacked results |
| 104 | 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 | 106 | self._stack = self['stack'].boolean() |
| 107 | 107 | # If we are to stack event lists query parameters for cube creation |
| 108 | 108 | if self._stack and n_unbinned == self.obs().size(): |
| ... | ... | @@ -162,11 +162,11 @@ class csresspec(ctools.csobservation): |
| 162 | 162 | |
| 163 | 163 | # Log for unbinned observations |
| 164 | 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 | 166 | 'observations.' % (n_unbinned) |
| 167 | 167 | self._log_string(gammalib.TERSE, msg) |
| 168 | 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 | 170 | '%d CTA observations.' % (n_notunbin) |
| 171 | 171 | self._log_string(gammalib.TERSE, msg) |
| 172 | 172 | |
| ... | ... | @@ -179,51 +179,20 @@ class csresspec(ctools.csobservation): |
| 179 | 179 | # Return |
| 180 | 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 | 182 | def _bin_evlist(self, obs): |
| 214 | 183 | """ |
| 215 | 184 | Turn single event list into counts cube |
| 216 | 185 | |
| 217 | 186 | Parameters |
| 218 | 187 | ---------- |
| 219 | - obs : `~gammalib.GObservations()` | |
| 188 | + obs : `~gammalib.GObservations` | |
| 220 | 189 | Observation container with single event list |
| 221 | 190 | |
| 222 | 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 | 197 | # Retrieve information about ROI in event list |
| 229 | 198 | roi = obs[0].roi() |
| ... | ... | @@ -287,7 +256,7 @@ class csresspec(ctools.csobservation): |
| 287 | 256 | |
| 288 | 257 | Parameters |
| 289 | 258 | ---------- |
| 290 | - cube : `~gammalib.GCTAEventCube()` | |
| 259 | + cube : `~gammalib.GCTAEventCube` | |
| 291 | 260 | Event cube |
| 292 | 261 | ra : float (str 'INDEF' for no selection on direction) |
| 293 | 262 | Right Ascension (deg) |
| ... | ... | @@ -302,7 +271,7 @@ class csresspec(ctools.csobservation): |
| 302 | 271 | |
| 303 | 272 | Returns |
| 304 | 273 | ------- |
| 305 | - cube : `~gammalib.GCTAEventCube()` | |
| 274 | + cube : `~gammalib.GCTAEventCube` | |
| 306 | 275 | Event cube |
| 307 | 276 | """ |
| 308 | 277 | # Turn cube into observation container to feed to ctcubemask |
| ... | ... | @@ -337,14 +306,14 @@ class csresspec(ctools.csobservation): |
| 337 | 306 | |
| 338 | 307 | Parameters |
| 339 | 308 | ---------- |
| 340 | - cube : `~gammalib.GCTAEventCube()` | |
| 309 | + cube : `~gammalib.GCTAEventCube` | |
| 341 | 310 | Event cube |
| 342 | 311 | evlist_info : dict |
| 343 | 312 | Dictionary with information on original event list |
| 344 | 313 | |
| 345 | 314 | Returns |
| 346 | 315 | ------- |
| 347 | - array : `~gammalib.GNdarray()' | |
| 316 | + array : `~gammalib.GNdarray' | |
| 348 | 317 | Counts spectrum |
| 349 | 318 | """ |
| 350 | 319 | # If we started from event list mask the ROI only |
| ... | ... | @@ -388,13 +357,13 @@ class csresspec(ctools.csobservation): |
| 388 | 357 | ---------- |
| 389 | 358 | obs_id : str |
| 390 | 359 | Observation id |
| 391 | - ebounds : `~gammalib.GEbounds()' | |
| 360 | + ebounds : `~gammalib.GEbounds' | |
| 392 | 361 | Energy boundaries |
| 393 | - counts : `~gammalib.GNdarray()' | |
| 362 | + counts : `~gammalib.GNdarray' | |
| 394 | 363 | Counts spectrum |
| 395 | - model : `~gammalib.GNdarray()' | |
| 364 | + model : `~gammalib.GNdarray' | |
| 396 | 365 | Model spectrum |
| 397 | - residuals : `~gammalib.GNdarray()' | |
| 366 | + residuals : `~gammalib.GNdarray' | |
| 398 | 367 | Residual spectrum |
| 399 | 368 | |
| 400 | 369 | Returns |
| ... | ... | @@ -403,7 +372,7 @@ class csresspec(ctools.csobservation): |
| 403 | 372 | Residual spectrum as FITS binary table |
| 404 | 373 | """ |
| 405 | 374 | # Create FITS table columns |
| 406 | - nrows = ebounds.size() | |
| 375 | + nrows = ebounds.size() | |
| 407 | 376 | energy_low = gammalib.GFitsTableDoubleCol('Emin', nrows) |
| 408 | 377 | energy_high = gammalib.GFitsTableDoubleCol('Emax', nrows) |
| 409 | 378 | counts_col = gammalib.GFitsTableDoubleCol('Counts', nrows) |
| ... | ... | @@ -444,16 +413,16 @@ class csresspec(ctools.csobservation): |
| 444 | 413 | |
| 445 | 414 | Parameters |
| 446 | 415 | ---------- |
| 447 | - table : `~gammalib.GFitsBinTable()' | |
| 416 | + table : `~gammalib.GFitsBinTable' | |
| 448 | 417 | FITS binary table |
| 449 | 418 | name : str |
| 450 | 419 | Column name |
| 451 | - data : `~gammalib.GEbounds()' | |
| 420 | + data : `~gammalib.GEbounds' | |
| 452 | 421 | Data to be filled into new column |
| 453 | 422 | |
| 454 | 423 | Returns |
| 455 | 424 | ------- |
| 456 | - table : `~gammalib.GFitsBinTable()' | |
| 425 | + table : `~gammalib.GFitsBinTable' | |
| 457 | 426 | FITS binary table |
| 458 | 427 | """ |
| 459 | 428 | # Check size compatibility |
| ... | ... | @@ -478,6 +447,202 @@ class csresspec(ctools.csobservation): |
| 478 | 447 | # Return modified table |
| 479 | 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 | 647 | # Public methods |
| 483 | 648 | def run(self): |
| ... | ... | @@ -494,192 +659,84 @@ class csresspec(ctools.csobservation): |
| 494 | 659 | # Write observation into logger |
| 495 | 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 | 672 | # Log processing header |
| 503 | 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 | 741 | # Return |
| 685 | 742 | return | ... | ... |
cscripts/cssrcdetect.py
| ... | ... | @@ -38,12 +38,6 @@ class cssrcdetect(ctools.cscript): |
| 38 | 38 | """ |
| 39 | 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 | 41 | # Initialise sky map from constructor arguments |
| 48 | 42 | if len(argv) > 0 and isinstance(argv[0], gammalib.GSkyMap): |
| 49 | 43 | self._map = argv[0] |
| ... | ... | @@ -51,6 +45,12 @@ class cssrcdetect(ctools.cscript): |
| 51 | 45 | else: |
| 52 | 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 | 54 | # Initialise other members |
| 55 | 55 | self._map_dirs = [] |
| 56 | 56 | ... | ... |
doc/source/users/reference_manual/csbkgmodel.rst
| ... | ... | @@ -37,10 +37,9 @@ General parameters |
| 37 | 37 | Allow for a spatial gradient in the background event distribution? |
| 38 | 38 | This option only applies to the ``GAUSS`` spatial model component. |
| 39 | 39 | |
| 40 | -``spectral <PLAW|HESS> [string]`` | |
| 40 | +``spectral <PLAW|NODES> [string]`` | |
| 41 | 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 | 44 | ``ebinalg <FILE|LIN|LOG> [string]`` |
| 46 | 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 | 18 | the counts and model cubes are collapsed into maps by summing over all |
| 19 | 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 | 30 | The residual map is written into a FITS file. |
| 27 | 31 | |
| ... | ... | @@ -108,7 +112,9 @@ General parameters |
| 108 | 112 | |
| 109 | 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 | 120 | Standard parameters | ... | ... |
doc/source/users/reference_manual/csresspec.rst
| ... | ... | @@ -32,10 +32,14 @@ residuals are calculated separately for each observation. |
| 32 | 32 | |
| 33 | 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 | 44 | The counts, model, and residual spectra are written into a FITS file. |
| 41 | 45 | |
| ... | ... | @@ -162,7 +166,9 @@ General parameters |
| 162 | 166 | |
| 163 | 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 | 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
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": "iVBORw0KGgoAAAANSUhEUgAAAUYAAAEKCAYAAABuTfznAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAIABJREFUeJztvXn8JUV1Nv6cWdgGZGcWQAZlB1mvimAUBzVEQY2Ixi1GURwhBoyiCEQuKsZIQn5GE8lEEY1IIou+OoJgWAReFb0ssjgas4g/wsC44AYKwTnvH933Urdu1alTS9/lO/18Pvdz7+0+dep0d/VTT1VXVxEzo0WLFi1aPI55kw6gRYsWLaYNLTG2aNGihYWWGFu0aNHCQkuMLVq0aGGhJcYWLVq0sNASY4sWLVpYaIwYiWhnIrqOiNYQ0d1EdLKx761E9P16+4eaiqFFixazCSK6gIjWEdFd1vaxcMeCphwDeAzA25n5ViLaAsAtRPRVAIsBvBjA/sz8CBHt0GAMLVq0mE1cCOCjAD7d30BEz8GYuKMxYmTmtQDW1r9/RURrAOwI4E0APsjMj9T71jUVQ4sWLWYTzHwDES23Nr8FY+KOJhXjAPUBHgTgZgDnAvg9IjoHwG8BvIOZvy2n34yBrfKCWLqs+l57X56fEli6TBeH1s60B5o/Rjuu2Dg1Pl3Yfwlwx/15+YwTrmMKHWfONcy6Dj8H88OUmBgAsBsRP6y0XQvcjer+72MVM68KJNsDkdyRisaJkYg2B3AZgFOY+ZdEtADA1gAOBfBUAJ8joiex9W4iEZ0A4ITq35aP/9Sg260+5u+1OUcRyMfMT4qlD00srnTmMbnQxDHa0ByPdD586PuQ0t4R4c/nJ3QOc2Hmu9aRn+8alSinWdc/xElhPAzgzUrbLvBbZu5EZqHijhKgJt+VJqKFAFYDuIqZz6u3fQWVHL6+/v+fAA5l5h/7/SxjNTGO64aIvflTyKIJaMh81uC6tvbxaY435pxMy3ksUa67XaC7DMz3ZSnGHYn4RKXtmcAtIWKsW5qrmXm/+n80d6SiMWIkIgLwKQA/Y+ZTjO0rASxj5vcQ0R4ArgHwRIn1RWIsWTCbKuS133n3n4r15y+aXkIah5oq7X/SxGSiRCzFiC42/apsYtyZiN+mtH17GjFGc0cqmhzHeDiA1wJYQUS3158XALgAwJPqx/D/AuB1TRxYtJqLTROLbhfrl5yrUy2TQqxi0mz3qbZCxzlv5UN646Yr0Vi1GbtPiwmVIQKwUPkJ+iK6GMA3AOxJRPcS0fEYF3eg4aZ0KUQ1pU3YN+U0wEcMTSifcRC+nV/T3QuTVojSOW06ttKEOpQmXzHuQsSnKW1PVCjGSaLxhy8tWrTYMNBXjHMBc/uVwFKd4zGd+KEnyXZz0vg97/5TnWnn3X9qXJ6pscbuT7UPqa4SeaRA0zQuqdpKnt+U81L4XBIqpaX5TDtmgxj7Y7tcKHhxvQRkE1kqMdrpLV/rl5zrdBnsm0ztMgg1tUs/JPHl6zkfSb5jYzD/5/QZ2r+lY/Idv+Q3B+O4vijbxzhpzL0+xlyFGEN8OTe0Jk2M30n3vZmQ+lFd22P9aPMKKP2+QndWSEIFVhw5FUKxGPP7GHcjYu3Ly8dOeR/jbChGE6WaWjnNT5fyC/m3b0rN09QUkvb91/iIhU8N1Z+hrgGf2s4lHN858ik3S6H7VLqTcLTKPHZfaplOaSk0SPJzSTHOPWLU2GhvJp9P303jK6iOm2v9+YvkGDUIHYfWR27+nnMwdIzSuQn5z4GkGrWqXfodq1QDec67/1RnhTLS/5wKVwVVkCgXKD8h+GbXqfe9g4iYiLYrFridx8w1pUvdLD4Fk+Kj/9+1P5S+xrz7T/WrlxZxiL2uMfZS5ZmalzZ/bQtC639oe35Teg8i/gel7fMCTWkiehaAXwP4dH+Ad719ZwAfB7AXgEOY+Sc5MfswNxWj1oemieLb7muqafOwMESKJZqbDTWXZgKxx+4jK61tTBw5TemQykupEPqQHnAqUfKpNDPfAOBnjl1/C+CdABpVdLNHjDY0BS31RgmRnU2KgXxGmkhS3vY2LXIVTaqvcZC3Ri2lokRlZKcvpVq1xJgTR4EZmeYB2FT5AbAdEfWMT/DpKhG9CMD/MPN3soMN5TVzTenS8PQBiU8sI/3PW/nQqB9HniPbE/KaiFKcVL4hpMQ1rcfSOPKb0vsQ8WeUtodEvitNRJsBuA7A85n5F0T0QwCdDbsprZX5oeatJm0N5xPLRPISh4OkxOqLIUZxlMS0kUmoS6NJ5dn3EdNv2AS0zfOCaHiA95MB7ArgOzUp7gTgViJakhm2E7NBjC6ZLzU5fTdDiExChVm6yUL+Q+QUS3SWshXtY2MJISZW7f6ScF2T2GaoMl7n+be7YlKIOLeymUBF1eRwHWa+k5l3YOblzLwcwL0ADmbmRmYung1ibNGixdSjpGL0zK4zNrR9jONEbAe7gKHhPanqonQT2KfiQ4ppmprhwEhMqqFUvq4Rn4osGav5nYz8Psb9ifiLSttdp/zNl7lPjHZBTCmYgWay8+FKir+Y9K7fIXv7Zu8PwPbdsJMmrRI3fYljkM5NSvfLtGAo9nxiPICIr1baLplyYpz7TemU/h2fneu7280nxcJqzzlLj2U/MjGF5Wve/afGTQLri9HhOyp9CVJMPb+u3/a2UL9tycqlNLkWJm0CsHCB7jPtmPvEaCNWbbnSdgOvaMWScWH1qJoUwU5vxTB4Ki/dPCXUkuLYV2iEhURIIfJKjMvrW+tfUxYtG7vcjbxCGMqzQRABCxboPtOOud+UHjekG2PSTVMtNITXhHpxfSYNXxzK+AbjYe21fgLpo/o1iyC/KX3wfOL/u6nOdrOH2qZ0WYQKQkThCxJYirLIUVCl1aTtR6uYfEpGSK9S0Jpzmtq8K0mipeLtdv3KO9D0VnXPaMpe4eayhLmkGBsjRiLamYiuI6I1RHQ3EZ1cb+8S0f9YC2TpESKVUPOk3ibOip2iWJQkHN0ElxRLDDQVhmu7klDFGzm36Ro6/ibUa8ivkuC86WCUwRTy0paJMRPjwo11n2lHk8unLgWwlJlvJaItANwC4CUAXg7g18z812pfyzqMN/fkmly7Tdov2U+qaRdbsEucB41NifMR4yPn2rjIR1spas/LOMtHaqUtVib5TenORsS97XW2dF9wdp0LABwNYJ2xfOq5AI4B8CiA/wTwemb+eU7M3vzH1cdIRP8HwEdRLasaR4yhPkapcDZBChrb2FgaUqgjMdUYGq5j26cghRiaVDMliSrVl02wAZUu9iuWrohGzn0BYtyYuKd8QY9+FD/tGBE9H8C1zPwYEf0VADDzu3Ji9uY/DmKsXwa/AcB+AP4cwJ8A+CWAHoC3M/ODjjQnYMCGWx4CnBKXaaAmHymE2oI3boWgza+JeEJE7vod4zci5gGR5xJU0/CQ/Qru4FrqjdqmlKXYClZVARUixp10tvRfcZNIOPb9IYCXMfOr4yMNo/GHL0S0OYDLAJzCzL8E8DFUL4QfCGAtgL9xpWPmVczcqU7eZvEZW4XBHtYwMoN2qtoJ5BvtO6lQK/Nw2DiHwpRoMmtuXk+F5ToHoXGXI/5d/3MVqqW4TQz+e1oJ11LVFTQ43y71FhmDarudV5MgAPOVn4Rpxyy8AcCVhSIfwYKmHAMAES1ERYoXMfPlAMDMDxj7/wnA6iZjaNGixZjQf1lah5+kDtchojMAPAbgopT0qjwafPhCAD4F4GfMfIqxfSkzr61/vw3A05n5j2RfkeMYm+y7agI5NXpuWvN7XJDy1fbRapqh42xCazDpeMT8CzSlNyPu7amzpdvTmtJE9DoAKwEcycwPJwcbQJNN6cMBvBbACmtozoeI6E4iugPAcwC8rZHcXc3BmGZITv9abrPc5T+mie1rorrsrOah6i0K7fHZ51DTfJSIz5W+RBeDy7aJ/lqNja/chbZJZSgmhhw0PCEjER0F4F0AXtQkKQJz4c0XbS3suqE0SkO6uQti8DAo1n/T9r500jnKQWkVGyLY0shRsL5zLFWOMf5EFFCMmxP3nqKzpW8Gn0pfDOAIANsBeADAWQDeDWBjAD+tzb7JzCszQvZi9t98yVEv9m9NMy2VVHx51TCnECuq2mr0fQ4mhkhR0KmxxF6j0qTo+h3jw/U71kaTr9QqCMU/CYXogv7hiwhmfiUzL2Xmhcy8EzN/gpl3Y+admfnA+tMIKQJzgRib8p1Kitomj+BL/TpYxA3SV6MjU42VQEliLGFj2oYqw5BfbQsj5CeULsZeU4Hn5JOKhpvS48TsEWMT0N7YMU2xJkknoGid047ZviRiiCWoEMnEnKuUyimktEJ5SjFI2zR+Y+xSyC21LDZBlnOIGGe/jzGEuuCkznKizsP+7VIrKfloVYGUR+4xappysXmlxppzHqX/peEj9ZL5FvVXoI9xS+LeM3W2dEU7u04+7FUCY2vlrmOWkxJwNWnM/y7bnDy0tsL2pLn7tDG4KgPf7xj17YtLE5tW7ZcmylJ5xKrImHJX+pjnkGKcDWLsrxIYQxJ9O40C0fgJbZfIcFxNma7nwU2d19CTb4Uv57ZUEtOQpJRvKA+Hz2AloMl7kkg53y0xFsHcbErHFKhStj71GPJXY97Kh4YfjLi+fXH4/lvpR9Z5keKKiT9UQdj2rrQBRaeauDUHISUZuiaSX9fvWPjKV6jyVedZoCm9DXHvuTpbumS6m9JzkxhdiCnQmgJlF06FX+fEFa4YtQjFEFJfMQQYcz6kPD1xjax66LFz5uk7dheZjEsV5p6zHNskFCDGbYl7v6+zpYunmxhnQNS2aNFiJkCohl/PAcxGH2MJ+PqTSjVvFHZetZgSi1YdhhRlSFXWCK48GNs0t/5HTwEXaqJqY4vJL7GbJGijuQYprQlN2v4++wFnCgr2MRLRBUS0jojuMrZtQ0RfJaIf1N9b5wftxtwkxpibVdPclPKIjGNoOnsfWZvx+fKS0sc0qV1pHNtG+vdC5y+miajAEDFrCUo6v5Kdy15LjNL19Nm5YkmtsJXXcwT9B5w5KPvw5UIAR1nbTgNwDTPvDuCa+n8j2HD6GCMxGPfoUnkhokkhDI+qmrfyofiHDrH5mPuk75B9LFLjDNlqrkUoL2tb1sTG5rfWxnVMqedZhQJ9jDsQ916hs6WPxs+uQ0TfB3AEM6+tl065npmV8/nEYW4qRiBNPRkYjHu07Xz+bIXnUxuuPAVyEGet7nZHJ3bNVRuauExbH6HEkEYoDsk+ZKshX4VaHHowJJWDUP6hY7D9SwowhNzrEIvmJ6pd3J+ysP7eoUzgo9gwFGMTtW2CYvAOObGVYUq8mpvLZ+/bF1AtQ6o6ReFo00iVjm1nfmvz9e3X5iVVwrHnXrINVcyh9CIKKMYlxL3X6Gzpb5IU48+ZeStj/4PM3Eg/4+wQY9ca5D1pxBZuM42QTj1erxTZS6pPk9b1u8bIa5ipRB0bl9aHVpWWiiWGKB0xjgxp0pC7en8BYlxK3HuDzpY+MN1N6dkhxpBi1CggrX0IqWl9N2WoALvSpqiO2BvTShOcM9KVj/G/P+VZ9KJWTVw/89vlV3t9pDwkwtPGIW3TxDhOxbiMuPcmnS29N4kYzwXwU2b+IBGdBmAbZn5nTszevGeOGGOVRYqyc/3W5GmnC8Wm2V7DuZDXOIm963gQ5CN567/6AZLvxi+hjFORE1OTqt6C1NLQtUIKEOOOxD3lDIn0nqSJar8A4HMAngjgRwCOY+af5cTszX/miLEPzU0poemmUCosXyP9eKZNV+i3dPk1v33bhFh8PlXE51O8vgqsxLnWVpCaeCw4l3PNPZ8hlCxnIyhAjDsR907S2dLp0/3mS5OLYe0M4NMAlgBYD2AVM3/Y2P8OAOcC2J6ZfyL7qolRuolSUMqHppln33TGt5PcNDey5N+RNut9Y+1NqW0CllJShr+iTXV7n484Q+c5VIGXVMVZwqAQMf6ZzpbeteES41IAS5n5ViLaAsAtAF7CzN+tSfPjAPYCcIiaGCU0WZv6bnbfbw1RuvKQ/sfElmJj55mj1kIk7SIb7flNiScAabSAGItWjZo2JctoboUzZF+AGHcm7imXtqO3TzcxNjaOkZnXMvOt9e9fAVgDYMd6998CeCeA6W/Ht2jRQof+u9Kaz5RjLH2M9dOlGwDsh6pD9UhmPpmIfgig41KM9YDPWiZueQhQL01dstaN6FNKsi+F2Kaxr3kWozAMH+qn0TnIaAZmD3GSlKvG3zi6DwIx5k/LVkAx7kLcO11nSys3UMXYBxFtDuAyVMz2GIAzALwnlI6ZVzFzpzp5mzUcJeJvTPM7Jk2Ez8GTaE8zc6gvzXUTSh/TzhdP/RnpL3PlA4y+z+yJZ4XrfugKE8sGmrTByXdD16vreIPIgGZN7mBeKWXGlZcnvYsUvdejKbQT1SqdEy0EsBrAVcx8HhE9BdXL3/3FsncCcB+ApzHz/V4/yzqMtUfHZT7Ovh3XvtQ8XTeB5UdSByu4g2vPPlq8yZ3DfSTVk3lM3odL9u/S5zVF4frOSWb5sVW3d7C2Nj8F2cedrwKKcVfi3lk6W3r9BqoYiYgAfALAGmY+DwCY+U5m3oGZlzPzcgD3AjhYIsUkuJRRaf+avGMVqMf3QGGZCs6lcrpdXEs9N9H0VabUJLZjcFQuQ7MDCTE78zS391Vmf53rEGKvpcYuRJzSdfQpQs82mwTFLhDJf6gSiSXWkmgVo8Ix0TMB3AjgTlTDdQDgdGa+wrD5ITx9jEO+lnUYb+65L3quKmsyrUYBSfty4oxFbl4+xemzteAcF6jJQ0qbckxaQvQpy1Q0ea1VirSAYnwyce+vdLZ03AaqGJn5JmYmZt6fmQ+sP1dYNstDpDiAqyBqVI9ru1YFxPi14O2zcik9028smRr/1SsAuuKx/WvVi4bIfGTjUlTKmE0MqWBtpRkibc/+eSsfqj5W/928+08d7RP2kPjIvqYrwHFVrnGz60w1ZmPasZRJNK3CsII7VZNUKvjaG0m6AevfzuZj/T3o47P9+/xKRG6SS+hVQY8P58MLXxx2rPW2oSZxSD36jssm6UDcI/99JBwgO5VtbbP+/EXVx3oTaWiaOqEcOUk8hbhCxy+l01ZssSjclCaitxHR3UR0FxFdTESblAs2kPfMvBLYvS98EZuueV151R/nxLamrfnt86XJS/KTghiVaGwzH+IkTaYr+E6y12zTnEfXcfr6ZbvGe+C+ysNln/uuu4TYsjKwLdCU3p2493c6W3pB8F3pHQHcBGAfZv4NEX0OwBXMfGFOjFrMhmJcukx3oWOJI6dgWnnZE9s610hJzcenBjS/7XgkJde3XfmQV0ENdQP0VZQweYEEb0xahJSP73xpylCNEOEPkZwvL0tZihWBppJ0xKne77MvgfJN6QUANiWiBajG7BVYf0GH2VGM9bvSgxpXoxgk+JoU2punJEG70rp8ScdsqheXL5dy8uWdGreGnOztWvWn3efyb/wXB8Vr1FUovxjEpNHa+sp1aF8Jxbgnce9jOls6EvcAMJ8vrGLmVUM2RCcDOAfAbwBczcyvzokvBrNFjGhgIlftDREgpWz1GXuTufJv4kaT8jS3W7DH6QVnKDe2iU+oU8+1I/bBpBOewdEjA+hjyDqG8GO3a2KIPk8FiHEv4t4ndLb0zGBTemtUL4a8AsDPAVwC4FJm/kxOjFrMRlPagLovK3DjAnCPyZN8SQpMG4Ok1Pq/XYRn/3eRlOV76EmplKcvLk0aTwy2ch3qZrAf1Fg+vU+ZY+KUrk+9v/8gxWXnGpAuvtnjikGKyWWrOL/BZWylmHzIqdRNlH348lwA/83MP2bm/wVwOYDDygQahi7EFi1atAihT4xl8CMAhxLRZqia0kcC6BXzHsDMKcYRpCidGtLTwRG11e3639LQNGO1TSWXeoxUiqZqcy756Tpex3Ab8/id6zq7/kvH2Vdqvn5Q+3/Ir+Bj5Fr51HvIr2Eb/bZKIEbxv73dpcTNGDWtFt/+KVSMzHwzgEsB3IrqJZF5AFaJiQpibhBj4OaJagIJ+YgPNnwkJ93omkLZb0KFbnTNjS/kNdKk7HaHKg5xogYNgSmPU0WEUlqTQGIrI9d58x2btM2Xj2Sv+S9Be6zatKko+FSamc9i5r2YeT9mfi0zP1IuUBkz8/Bl3v0/iJ+ZORbam7JELRtJrM4F3+3f1rd3WYSIGKOXdZWI37XP4XNodUFNzJoKSAvpOmiP33euNequRLkKVdBOFHj4sh9x71KdLe29gb4SWBp5c81ZCBVcRD640OzTEoonHmeT2E5n3QCDpnQKKRo+nPnYcXpiMNF/nW7IzmE7FLdPSWqUcAzRSOdIc/58qtM+ztBvjaK194XORZNiwkQ7Ue14MdalDRSkGbTNiUtSO5obQMhLPYbP919zg9t+E2N1prfSOIfU2PmlnH8zncaXltRCsXj2BycKVvqRr1kBxbg/ce/LOlt64nQrxtkhxm496D2pmZCJlBu/Rs64y2BazQ2ggYv0AvDFFj2AWrvdV0nEHr+WkEOkr4lLqtRCRBr6L9klVcQFiPEA4t5XdLa0rCXGbGT1MfoKn/Ymk/xo8s0h7pB6dBFpU+/hxhJRAjkN9S2mxB9SjCWuSSpiz4dLHad0J4WIuiQxHkjc+6rOlnZoiTEbqqa0C5paVKNMNIQpKQJX4YwlE03s9j77d5OEoFVi5rdvm+Q7QtWq/Ln+p+QbuLb9Sss76URMvMa2kclLfOUwiDLE+O1rdbbztm2JMRtD60o3oYRSmiWC+shfmMjhRyrwIZJ12TcQbzB/1z47jSO+4H9Nek3lIClKSY1q/U8C2oq9ADEecjDx12/S2W6yaLqJcWaeSgPQqSOfXajAu37X/72LIXnySm7OWvbBgdCS6ghtM9KuX3Ju3JIFIb8OP74FsEQyctiFXif05e+0t9LaY0XFQe0uv6Hz5aqomiZRDTEWAhPw2Px5qs+0Y3YUY9eacUggsWBTJfHGMfd7FzOy/WlVjL3PF4O936MKk1SgT2HW27zzLvpIw6WmXPm48jfgfCrrSqu91iECbgoR/rNVfEyZ7naB7rJsxXhQZx5/7eaFKtstFzy6YSpGItqZiK4jojX1LLwn19vfR0R3ENHtRHQ1ES1rKoYWLVqMF7+bP1/1mXY0uRjWUgBLmflWItoCwC0AXgLgXmb+ZW3zZ6hm6F0p+5L7GJ1vhWhqZpcCEdI6+/x8abQKJhSPz85OE1JF0n9t/JpmmVZxaY9V48f89uXju9Y+f5KvlP2px6hRfkWQ38d4YGc+/1tPtwb89vTrDVMxMvNaZr61/v0rAGsA7NgnxRqLAOiZ2VM4nGQVSOPd5yFKcX4+RXNQTGPv00DyVWNkgSZFmpF9MURQ/1Yt9O7JQ/W2UQzB+SoOl30ssYX+a/dJiCFwzbluEAzCY5iv+mhARFsR0aVE9L265fmMhg9hgLH0ghLRcgAHAbi5/n8OEf3/AF4N4D2eNCcQUY+IesDDOmXg+h+jYITtwT4ujW/r5vS+dhhzEwo3yMh8gz5/EkkLdoNX/Kzt3hlgHLBXTBRffbRj0hBRiDwD19E7wxAi1sQOxafZHyprIVIfAxiER7Gx6qPEhwF8hZn3AnAAKnE1FjROjES0OaqZeE/pq0VmPoOZdwZwEYA/daVj5lXM3Knk9mb6JpPvfw2VmpHgI8aEZtSAuDS+fPslW9856JNZTOWhJaEaK7gzpFadJNLtjj4oc8QcvTZMjnKzjsUkapvwVRWARtH64jBsgtesCbUaCQbhd5iv+oRARE8A8CwAnwAAZn6UmX/e8CEM0CgxEtFCVKR4ETNf7jD5LIBjo5zG1IoOMomaAdx1o8YoRSk+DRFG3sQaBQR4uh58aYUbWFKk11JvSGWrV090XTPPLNtBxFyrANG4lPGIbai8KK/PiG3/HNS/591/6uPDnzQVXL09ad3xSJQiRgBPAvBjAJ8kotuI6ONE5Gn+lEeTD18IwKcA/IyZTzG2787MP6h/vxXAs5n5ZbIv480Xq2CphjVoSUarBm0iMRSR2N8ZG6Ov0KeQaIzdGNMO9d3GVgZ2mphrHJtHKUiVkMZWk15Tmds+/7EDvq+X9fBlv87GfGlvqcp2b7pHXAyLiDoAvgngcGa+mYg+DOCXzPwXOTFqESRGIpqHqn2/DNUU43cz8wNBx0TPBHAjqtl319ebTwdwPIA96233AFjJzP8j+xImkXDBRSK+m6dUwZeIKyaNFc8K7uBaCszo7iKHGJLV3Ei+fG0fjhs3akyelQ5InHIuRrmVIEBf+tA5jyE3248mfzXyn0rv29mEP9fbSWW7H/1naDGsJQC+yczL6/+/B+A0Zn5hToxaeImRiJ4M4F2oFqX5ASpZuwmAPQA8DOAfAXyKmdc7HZQMclmHsfZonXGsUjPgfQVP8hdTuEP2vvTSzeWyVfg3j1Uc7uQjTvtbqhik8yCpImX8IZiTa4xMvGvFYg4mN99r9g5ut44nuhJwxZGDZB/5xLhPZ1O+qLeryvZgWhMcrkNENwJ4IzN/n4i6ABYxc/P9AZCJ8WIAHwNwI1tGRLQDgFcBeJCZP9V4kK5JJBRqKwoSsUhqIKTUbHuNTSkF6yN3H/GFzqOt5BzLIYiqyfiv7gJxpbcwUNU+e5P4DIIbmeFcIm/JrwLikrC2T1detq+IJ/8jvp3+84lx786m/Onebirbp9FdGmI8EMDHAWwE4L8AvJ6ZH8yJUYvZeCVQqxi1qsOntsYNsaAa20NKMPV4fIrNjsmyMWeKARzrq/iI1ucfgVcsQ8dg+RLJRSA5URUqSVplq6lQDZukfnQtUQ5sShDjZvzJ3p4q22fQ7VM9wFvTx/hSx+ZfALiTmdc1EtVIDHUfo0/xmN8+hG5SyT4ER4Ecml7KRxq+G9faL94YDj/i++IxxxXKS1JmdgxSni6CDsUcQ/5S3j5/oZhsm1Ae2cQl2Nh5hypR2x5ACWLcq7OIP9HbW2X7TLplqolxgcLmeADPAHBd/f8IVE+L9iCi9zLzPzcUW4sWLWYMyqE4Uw/NOMb1APZm5mOZ+VgA+wB4BMDTUT2cGQuC003Zv6XaPVZBnp25AAAgAElEQVQtGSpIzNOw9T7EcaUR/AAYGSs48qqfhSGl6lLW0vnzxepTch7F5F3Myo7F2me+CTM4zhjl5MojkH7o7Rvp26fKPOdGvRa3L/6QAtXu63bd4x4Lo+QA70lD05S+k5mfYvwnVM3o/YjoNmY+qPEg7YcvDV5csckUk0ayNb9T49IQXqy/Ek07A+p+Q885UQ/XiWlWlyw3oWPSNrNd/lLLXEr5BVCiKb1HZwv+u56udfwHdP1UN6U1ivFGIlpNRK8jotcB+CKAG+pR6GN7RWcIUk0b2i7t96kAY5v4bnOM8grtC6k6n1oJ3ag+G8c27wQUDozYYvihjO+VwJHYDH8jy7+60seQiQYhFadNnxtLSvn12TUpJAxMs2Ikoq2JaH+1vUIxEoCXAngmqpVjbwJwmT2Ep0kkr/kiIVJxncmP4v200YgP7fi2od8h8otVcilwEb9rP4ThIS5fVtrgf+H4gsNpfMhVz7n+YtKVUn4ee+9DwBHkK8bdOlvyeb1DVbYvpqsbV4xEdD2AF6F6lnI7qrHYX2PmPw+lDSrGmgB7AL5cv9p3BYDNcwIuAg/BaCYccCqhQAF+P23ktIkiRXu7la/zfVzr2OzZaIIkZPpw5auw9050YfwWZ5oxCHbe/af6ba1zNfQutuPce/vNSqgpjT9fBedL58nH2RdZohLoKvq6C6PktGMFsGU9cc1LAXySmQ9B9cJKEBrF+CZUcm0bZn4yEe0O4HxmPjIzaDVGJqqNqWXNfea3FjZ5aZZOkGLS3EwxSiGUzviOnlPS9u0iWMN+xVmrce3ZR4/mXX9G3ie3/KvWpNZeY995jlV/sfYpCOURW65TYl66Ovtd6Sd3tuIP9p6lsn05fWkcivFOAM9HNWfDGcz8bSK6g5mDTWoNMd4O4GkAbu4/aLEfyDSNYFO6VA2bki6FpB22Q6TST5/iywPvgxANwYcqJCMPAG7yzbm5tcefU/nZ+RYmQxXpSzAr55UPjSrpnJi7XeDyg8HfuTWLGJ/U2Zo/0DtCZftK+sI4iPFlqOZ7vYmZTySiJwE4tx5dI0Lz8OURZn7UyGwBYmbdLoUYhVUir5Sbsd8scqnEgBIcvNImKb9Q/q599XbvioOBY7WHstgTt5r/15+/SB6mI8XuOmfWb9ewmn5zeuShmMKfiaH5Du1rKcWvJCbx/IdgxSUuqVtj5FxJcXa7wB33h+MIgEF4BBupPmPCWmben5lPBABm/i8A52kSahTjh1A9ff5jAG8FcCKA7zLzGVkhRyD64UuoEGjT2z4k8vGpHo0Pl78a2kkJYleVc06W4IhlZNIFx3GsOGv1gNj7ambQbHbN12gSHRQTvrrylQjdIDbVWkA+3x6/we0S8QUqSBEaO9f50aQr0JRe3tmW39M7SmV7PH12HIrxVmY+OLTNmVY57djxqNrqBOAqAB+fyFPp0AUWyMd5E8bcAEIhS37PV4tYn6bigf8BUfSUZor8+mtUrz9/EVactRoAcP0Dz8Eli4/DsWdf4fXpJOdQJROLVALKITOtfaDseisnqQKJyi//qfTyzrZ8Rk83K9gJ9M+NEWO9NsxhAE4B8LfGricA+ENmPiDoYyYmkUgZruMjMqkWTVR1xWxd9j71UzoercoxVaS5zZhYwlSMfTjHIxrKcUCokdN8OY8hcC6C6lqrAFNJukTlGatqg8gnxl062/G7e8eobN9CFzZJjM9G9erySgDnG7t+BeBL/YmyJSwQnN8JoS9R82SnRYsWGw76A7wnDWb+GoCvEdGFzHxPig/p4cvRAI4B8JX68+r6cwWAS1Myy0ZAEajGg3l8qN/JdeWf2ERS5VF/ezvvfXlomqGGYnP6q/ededbpg+2uPscz+dFBX+Lpi88ZpL178b44ffE5OGLxdUM+V5y1erSpb8bSDawR49rmu96OtEm+XTY5ilHKM6fFEmoNNIjq4cvGqs+YsDERrSKiq4no2v5Hk1DTx/h/mfnw0LYmMTIfo6+pIxWWUCEXMDR2MbbJ6uv3kZquQhyAu580dnylpmkuHffQ0+i6GXzJ4uPw9zgRAHDNumNw+Q5/AAC4DQfi6zgM1z/wnMretcaLq8vAOpaoCVp959lhO9TXqilL8PSJ+mLo24fWtkkhWm15DvrOb0rv1FnMJ/deobJ9J31kHA9fvoOqKX0LgN/1tzPzLaG0muE6i+r1W/qZHQYguFoXEe1MRNfVC2XfTUQn19vPrRfQvoOIPk9EWwUjWHvf8H+p5pYKXMjOBZ96UaQTt2nisbY53x02FWXopjN92WMNLdikuMIsw93u4K2Uvp9LFh+HffBdXLPuGFzzwmPwvR12wXM3uRIvXXclvo7DcM26x/ueBv2PDmKUllN1qmZJzdn/PduGSFEqF0Y8Up+pC87jstM5tnnf5Ar5csUesz0RJd+VJqL59QqBqxPDeYyZP8bM32LmW/ofVd4KxXgIgAsAbImqz/EXAN7AzLcG0i0FsJSZbyWiLVCx9ksA7ATgWmZ+jIj+CgCYWZy+TP3wJUXR9X/b+3LyEG7CqLjM/1J6S20lPagJbe92h1VPfx8qortk8XEAgJeuuxJ4NtD9Xm1yDYA1wF+c9G584IFqhJfzwY1r/KPv5jdjk76ltC5Y59HpK5A2Kk9PBRD04TtHrv1q5CvGHTtL+C2916hs/4L+RrO0wZ8D6AB4AjMrF30aSt8FsA7A51FNlQgAYOafhdJq3pW+pX68vT+AA5n5wBAp1unW9u2Y+VcA1gDYkZmvZubHarNvoiLKfPjII1SY7bShG9ORx0j/ZKjghuKQbHy+uo8r26G3ImKURyBP30w3ZhP6ezvsUq0IDKB7Mgak+P6zP4DTF58z6IM0B1Sb8Q69/+yK0T4eH2zytgame9N0u86uClVlaMWovuZaWzsmV3wxFYGJpcvi01ioHr4sUH1CIKKdALwQ1ZovqXgdgFMBfB2VMLsF1bwP4fyFxbBeA+CzvlUA61UElzLzTcFMiJYDuAHAfvVL3f3tXwLwr8z8GUeaEzCQiVseUg1JquEhJ7H/KakWLQChoHpnj9GoRNt/MeUQgKGq+uiPWTwJ/4B98F0s2+QerHkE2JJ3AQDs+8DdI+MYzX69YP+or8KLVYaS8uwrRbsfUDq/paE5zlQ/5j7zu48CA7yXdZbyG3tvUNm+jz4QWlf6UgB/CWALAO9IUYw5kBTjtgBuI6ILiOgkIno5Ef0xEb2XiL4G4EMANOtLbw7gMgCnWKR4BoDHAFzkSsfMq5i5U8ntzYZ3Oi66cwU2340Tql21qtPYbr8eJ6FvO+gzdMWivSFiSdQRizNPB8Gar5mtP38Rjlh8HY5YfB3OPOt0HIav49izr8BFeBWecAXw9I8Ce627BxfhVbh78b74e5yIeSsfGijF/nvh4kgC63/fNviqnu+4fde9f0yhPkzleVbPYxlSidry6UsjVAIjsPvxE8AgPIqNVB8AP+nf3/XHJMWjAazT9gf6UPPVyEeVVupjJKL5AFYAOBzAUgC/QdUkvpKZf6QIbCGA1QCuYubzjO2vQzX48khmfjjsR1gMy4dYYtEitamSipAalOxT94WOsU9U9UOUIxZXywFds+4YzOdf4/TF5+DV+CxOwkedE2PELtalfvNDildDQr4YAkpTjMl3jBpFpznWGCUrnof8PsYlnR35Nb23qGz/hv7C28dIRH8J4LWohNMmqN5YuZyZdR2Yj/v5iPF3EwBHAriVmV8WSiv2MTLz75j5q8zcZeY3M/MpzPyPSlIkAJ8AsMYixaNQrRXzIg0pDiCRQqgg2ra2AoqpWX0F32UXgkR6FvkMbdfcIK5zpL2xhJt4BXec8ylee/bRoI8xLll8HA7C7QNS7I+BNNOsX3Lu0FPuFdwRCcBFiqJqtBRm8Hppz1Uonc/Gdz41ZTUUk4ucpVgaRKk+RmZ+NzPvxMzLAfwRqoe1UaRY+3mr8XkTgIMA3QwWmuE6qTgcFeuvIKLb688LAHwUVb/BV+tt54tebPgKsY8she3rz1/kvsFiClgoHqlwuxSBlS5qMLKkWmLJ3/ruE9m1Zx89eFjS7wq4/oHn4MyzTseKs1bj2LOvwG04cODq/Wd/AMDwwO++n8Hv/sxCEqxYg6/0AdFDarz7tdsC/p0z3mivlcu3poIeM6Z1aYMaDwPYXWM4N96V1tbwLvv6d9Ig7kSoZ5WxISnjmBs6dDN23e9De0nfUxH055gczL5To/gC8lq1JFRK0gxD4jkLnU/hGFZwp6ogYmJ35WXnk4T8pvQOnZ35uN7bVLb/QG8fxwDvL+Hx15rnA9gbwOeY+bRQWlnTtmjRooUSDBrnsgUa/LXx+zEA9zDzvZqEmgHeHwDwIWb+ef1/awBvZ+YzE4ONhksxDpp25gSvPmhqc9f+EFJtU1SpVhWZ3yX820rSmlrMTGvOQm6qRKcyciktX+yGnXqORc3x+ZRvjlrV2Hquk+ucRpcZbRkYsctXjNt1duFjeu9W2V5IbxnL8qlEtBjAU+u/32LmdZp0mj7GP+iTIgAw84MAXhAfYiasgnEt9UZJ0WwaWcNABkNFTDv7t+UjWMhitvtuOim9EKd3xurQjRkLK4138HO3W70LXf82m87eV+4059jc13W8nimRbYiwYoin3reCOyOvR4rlSYrTgrcrJ5b8UyuKTEzb8qlE9HIA3wJwHICXA7i5Xu4gnFahGO8A8FRmfqT+vymAHjPvmxV1BFR9jK7fLhtXLR3qW4whNVcaKS57n0YpaMk1oL40222FeOZZpz++jKwnxpEZeOpv1WTBjvOVNH9i6HxL9hoCT1V0kYidmd2LYHz5inHbznI+qvcele1n6fhxTSLxvL5KJKLtAfxbkYlqieidqNZm/SSqjsw3APgiM38oN3At1DN4x8BHphJx2LYh+5ibVePTjgWOWV5cJB573nzpuv73iEce1thpXJNWpBB3auXkSDvUHdM/jhwi0l7zmIotVLFqKl5VnvnEuE1nV35eLxBHjc/Rn4xllUBz0b56NYLvaBbyUz2VrscePhfV0gZXM/NVGfFGI2kG7z4KkKl5Yw9eZWtKPZr2ru0+fxrCDt2kwv6RQdmSPR4nyqQJGXzwKTfbZ6hCsLadedbp1bCiVBLLsYejb9Hn1/6OPYdimnxi3LrzJD6y9z6V7WX0mnEQ47mo5ni4uN70CgB3hCatAfTjGNcA+Aozvx3AjfVsOZNBSmHISY/h8XBDa6SECrH9P1YpWLZD/aSQBzCPDML2kalL4Tj8SdNmjbzWh8eby87FsCzbPvGaCE4cHCBZ14qCvuPvj7UM5qOBLy7PeQUCfYtWrGJcMfs12yMR+UpgYyCi3YjocGY+FcA/oiLHAwB8A8AqMXHfh6Ip/SZUcm0bZn4yEe0O4HxmPjIr+giMKMaQWrKRSUimTXDVPKlwA6PNSl+MoZi1KjEAr6IzfUox+tLF2KcqSd81S1FTHt/q/k1NWQj5yIGy/DapGLfs7MaH93Q9bFfSsU2u+bIawOnMfIe1vQPgLGYOLkyjIcbbATwNwM3MfFC97U5NO70UsprSgL9AaLdLRKxRh5Jy0UBDkvW3uo9MoRyj5nV0+YuI20bRvj5F/s4VE0MqLiXf1AotYKNa8VH0vawIMR7aUy3bjKvpxU0S413MvJ9nn4q7NE3pR5j5UcPxAgiLZDUC7VxxoZpS0xzR5KEgAfEdZ4k8fXkqY1K/BmekcTa74ZltxoGhZm+3Gs848v6zL27PfnFYTggh5Wtuq7fbD2Ds/cG8YvK098WQuAeqZXATfWsxRcN1NhH2bapxoCHGrxHR6QA2JaLnAbgEwJc0zotBMyVSSKXE7FMQS2jqK9X6K5KqdNlqt/sI23Mz2iRkE50zPjO9NSh5MMY0hFCMPnvHMajyUtqIa4S7YtBUuj4/seo21ybFVokpIsZv112AQyCi41FNVhuEpik9D8DxAJ6P6qn0VQA+zmN8yXpouA4QdVHFCWy1hdKVNrTN3m6osyLrQ8fG4osphYi0CjZ0zFYsqgWmQjFKdua3tC2lbFj2drlzvrHj+i359l1v20aIy+8/vym9RWcPPrD39yrbm+j5TTalF6NazuBRPE6EHVQz6/whM98f8rEgZMDM64noCwC+wMw/zoi3RYsWcxjrMQ+Pjm9pVC+Y+QEAhxHRcwD0+xq/zMyqpVMBoSlNFbpE9BMA3wPwfSL6MRHphrY3BamJUv82X9nqj6UbSaNUA941l301vvS7O7xuSv/1MufQFK0KCp0PSR2Gmn6m6tPOmm2rm27XvVyAI/+RoT3SdUpoPXiVoctOq7RMe2O7rXydx2bH5PIVsg2lK90ED2BKmtIAAGa+jpk/Un/UpAjIfYynoJpT8anMvC0zbwPg6QAOJyLd3EKloWyu2v1b6uaZowBGN39czWdzSn4rzmupV03cepa1QqR0E9h51R/nolzCzeMafzjyv/7WjkfUNk81E826iHSFr/WlrVRChCo1W0O+fOQvEXAsfHml+C9IiMBU9TFmQ1oM6zZU7xn+xNq+Paq3Xw4aQ3x1nsJwndiaUiINB8Rp9V3pfMQkFeKQSggpGx98xycQj73dO+5Sysv132cfUj0hHwH74JAj128pP6V91HCjUMVi2xYmtAr54xg37ezNu/U+rbK9i542ltl1UiEpxoU2KQJA3c+4sLmQIiHVlAqVFSpk4pAVidB8v7XxKm+AoOqLUUaOG9P7GqCVfrAcqhSLKwZfrNZv50Jjtc2I+jR+R5GiZpuPvKzji5qI1zx/imumXjrWEVezKLd86qQhKcZbmfng2H1NIGkxrBg7DTQkk+LT/C6BlFhSlVqfmBxPk71KO+ArSzH6fFh2qqV2pUo1JibXfl+8moox4lpJqnV0X75i3KSzL+/SuzhsCODf6YCpVowSdR9ARL90bCfIAygrI6KdAXwawBIA61GtG/thIjoOQBfVNONPY2bdcP2YWtCnhkL2vv+a9DEoUOiz4jCUh7fvMKISGHrXt680z/fbe6d668cUWvLBp6ykmH3xCsclxpCKkHJOSe+BtF7Q+iUReSrBIDzS8HvQ40Jja74Q0VIAS5n51nrSiVsAvATVWzPrUb3c/Q4NMY4oRhdSVU9q+li4yNrcZ393w/17Z/Kj1dyIPrWjVWFa5eWzF3wMrfci+Q2pSimeEpCujyad+d/81qRpEmZZEpv3+Ypxo85TeHHv8yrbe2n3qVaMja0SyMxrmfnW+vevUM3QsyMzr2Hm70c7zG3C+Pyl3nRW0yw6P3ufg9icr/cZafqkODQzuRmXscB9FGw/viFLoW2wVgC0iGfe/af6nzK74km5VgYxeP3aeeSq9pKti1w/ZlkaA+bKU+kml08dgIiWo1rT9eYiDiXFFWpe+Qqur6nmUgOWn5GmmabQhlRjhP1grKajyRgzh6Lv/Imz70ixBo5p/fmL3MseSETm8yep8e7ouELAUXE4iNuLBJIWx6uGyq2Uf6jca9R4AWwQw3WKZUC0OYCvATiHmS83tl8PoSlNRCegP0Znyycegl+8XpehR32JdrHQpBVuUtHeF3+A3Mymkji1mcPXvJUP6YbkxCJEAtrKQCIPQxFGzQSkuTYa9RdTWcSUxZCCTfFnfo8gvym9oHMAb/WtK1S2P52/01Q3pRslRiJaCGA1gKuY+Txr3/WI6WNMXdpAU0Mn1P4hOOc5jLjRnTd9DJFIRBp7w2sqG60SioFWIfr2K/Mv/j69md73X0pnfucgKvZ8Ypx/8IG82U3/prL99aLtRWL0PbzNiS8GC5pyTEQE4BMA1tik2KJFi7kHZsLvHivWTH4M1TLNg4e3RPRVZv5uqQwkNNnHeDiA1wJYQUS3158XENEfEtG9AJ4B4MtEpF8/JrUGltRPjC9XDJ58vAtU2elccVj/g+MBQ4pKsFP15QV89LePzGPoOb/OZQxc+0LNRQkalVvDOWRJq9y0TVapeSv5jokjFEvBFpETDPzusfmqT9CV5+FtswfwOBrvYywB9Qzekc0X9eLtPr8+klVANV5PgmErNtuFdOa2pCm/JN/apqjmvGnOt0m8sccSe90NBKcXi0Fqs13r2/weQX5Tmg44mOddfaPKdv2Sze8BYL5Zt4qZneux1A9vbwCwHzO7xlYXx+wQY2gcI6ArWJobNVY9uhSVT61oSajETRKjXiR7Y78zdokEfaonZK9RqRK0ZUGKxWcbk19MHjH5xSJI/iWI8RDGlV/XGe+4ierhi+/hbdOYHWIsva40EK0wnWmlNKGbPnTzuxRYShyhvGOhPU+peYVizSkHdVp1a8HeJxGddL2E/1Hr9DSlKJeuBt/XyyPG/Q9hrFaOyNtlYZAYpYe3TWO2iLEENGQYU+A929Sry2n897c7fktN8n5/Xc5Np17V0I7LVpY+FagkWFGpejAUuxRvaHvgmqvOkaZS1BBpTAUXRaQFFON+HcblygW59qTQU2kC8CkAP2PmU3LiSsHcIMbUmlRSW7FqR7LPVU6+7SG1KKkbX36uOPsEYC8da6cL+bW3FVBAWX16NnzK0Laxt5vErVWUvjybUoRB34WI8XNKYtw3SIzPBHAjgDtRDdcBqiVRdQMlMzE7xNitF8RSKgyxQAuFpNEbrVShNxThkCIy9yf6jLJJJXwpzybJIRRHbN4R1zepXEk+6339VyoHr16mnrsSTel9O4yLlcR4gEyMk8bsEGOppnQfpW/KkGI0m12hhxchklPcMMGYfLFo8tDCiqX/TvdQszNF1TpszJmC7GZ31AgAjcoz95nfmjSuuJt6jznqGhZQjPt0GJ9REuMhLTFmI/rhS8pNrVFDBYgz9PqdasbpnHMQeQxJDwbspqVUCTWt3EuVhRIq3FT6GqLOLW+hymZoXwFi3LvDuFBJjIe2xJiNZMUYKliugtgEJJKqv6U5CkdiS2nClmwGl2ru5vrxNWU11z2G+DQqXCBBQLnOeC6yzmcBYtyrw1ilJMZnt8SYjSRiNGrL4LjBUNNVm58vvXQzufKfNOn41Iv57dtWArbSkZRPjNKKqRxKqUYXYkhcyj+mYhfOSXV/7J5PjHt2GB9TEuOR002MCyYdQIsWLeYIGNUbznMAc1cx9pGiyjQKsoTKlPJ3Nd9C9hEosvpfjGLsWg9fIPS3hlR+jsqK9ZHiOzXvUJM9JWa10i7QlN69w/iwUjG+cLoV41gmqi2GEEnFNLU0edkfV34+m1Bskq21zTfRwwruDPIdmQk7cIzi7OC2H+k8RNyo689fNDS8aIQUjXPl7G+17TzwTmYRQuz5cKWTmshWWQhOmBFIH4zR9dvnuwT6ilHzmXLMpmKMLeyuAqat7XOVRUx+kQosKq7E4/A+QfXlUTJ/zY0sEZRBQElvIflsUmPVQKpItZWSZOstYwUU424dxoeUivHY6VaMs0mMGoQKjvmdYpNDmKkkkaLwUuC7sTSq1+XLti0Ro+nHg6j3oQvDS8YhEg4QfXNjTwsQ45M6jPcrifHV002Ms9WUDkFSXapa02MfsnWllbanKLf+glfavGOJR2oOhv77/Lj+C/mu4A5WcEe/oHzg+pivL7rWxAmeI82xGKrU3D+0Dk/s+RMqIpXyHRP5j6BtSo8Xjbz5kgOJ4CS15fpINqEYQuTf5A3iy0vId2RSC+kc+PI0v337JRvomtbehz+aGALk5k0j+W+c8AooxuUdxnuUivH46VaMs0OM9nyMroKUW3BifQRu5qi3NzLUpPpmDfkwbIq/2xtKE6tuBfXm/e/zEapkXD5dZKaBlS5qUt2MMh7uVihAjLt0GGcoifHNLTFmo/ibLxqFI9Xg2hvQQ97qoSiTUg8atSPs877F48vHt83OL0GlmhiZ6TxWlccQqM+Xwz7qtUvX71CeKhQixncpifGklhiz4SRGq5Cox+W5kEA04s2vvens36EbUSIKDSzCcaoIl2/ptyu2EmjSd0lIqtE4VyryK1ThpT10KkCMT+ww3qEkxpM3UGL0LX9IRNsA+FcAywH8EMDLmflB2ZdyaYMcaFWkj7gklePykaM+YmGrVNexho45k4S9fl3/U9Scdr/reOxtodgtX43OkGPGoa1sk9RkAWLcqcN4q5IYT5tuYmzyqXR/+cO9ARwK4CQi2gfAaQCuYebdAVxT/x8/QjdVpN28lQ/pnhxr87W3SWRqYeSpbrc7vBJeSIXa+dr7XPYuRBJM8LfD99Bgblfemv+hYw1UkvbkveJT9ZSKT3ndoyqUJipgBvA75WfK0RgxCssfvhjVlOWov1/SVAwtWrQYM9rhOhGZGMsfAvgRM29l7HuQmbd2pDkBg47FLQ8BrGUfYpoNk4LUnJP+h9Ln7LNtNE3LUnmatnY+IbtYaM+BKx5tGul8Sb5j8gvF4lPxmus5hAJN6WUdxhuVTen3TXdTunFitJc/JKKfa4hx2MeYxjHG3tyxN1RpEh93DKGmZqz/btoiVz6bkbkPtXFpCF/TnA0116WKMrVpLMFH1k4UIMalHcbrlcT4l9NNjI2++VIvf3gZgIuMNWEfIKKl9f6lANY1GUMUNAXIZaO1jySNKBttPNL+Okax367bHX6jQ8pXcQxDfZ81Bn21GjVp+Rr408QSIivNf+k8aM9H7HYD8+4/1f1Wj+1HU0ZzsR7Ab5WfKUeTT6Wdyx8S0bkAfsrMHySi0wBsw8zvlH0pFaNUIEurNU0sktJoQiE0DUmFlYo9R9357M1vlx9VU1MZR0p8KedNpQIjUGIxrMUdxiuUivEjG65iPBzAawGsIKLb688LAHwQwPOI6AcAnlf/j8LIO6h9aGv/EGLUl88+VSn6/MamSVFBLvuQIsxQO9ExpZxLjZrTkoymImiiZZCTVut/7X3pcfTRvis9XhTpY/TdEIGCEzVllbAveaxbipqx44pUYaqZYfr/Hd8j/YYB4ik2+FlTKcScE58vNLy6n4TGWhUF+hi37zBeolSMH59uxTg7xBizrnQsSo8Js9cAABFiSURBVDShfLbmt2J/9CqBGtUWsreJVyJzH0lHxLCCO9U6yFL8ElmXIAdHxeE63sEDHV/f5TggVY6aMqaKuQAxbtdhvEhJjJ9siTEb2UsbSESgVWOSn1CaHLUTqxhjjqUkyWvyiWmyas51yfOvgUstl4DvHDWRhxcFiHHbDuOFSmL855YYsxFFjC6l4ZpC31FInO8/h1SU5maXSM+3PZY8HGlGpvmKySOVzD3nTXOTi0vIaohVey0iCCe6yeyKPRRTU4iqTJflE+M2HcaRSmK8tCXGbDTWxyjZKojU6d/3P9a/Rj24KgHtLC2SYk5RLhpfJdJoUErZCRWk1zaFeFMnP/HFkIQCinHrDuM5SmL8fEuM2Sg67VjpJkpOntqbTWOvISABgxtUikfyJ23TVkqx9naaWDIPQD1LTWp+CjId27yYJYhxqw7jWUpi/FJLjNmY6AzesTdcilpJVTixzTZH/KJiCR2vT03lKExNPiUwrgqyVOw58arSFiDGLTuMw5XEeOV0E+OCSQfQokWLOQIG8L+TDqIM5q5iTOzzCfrTbDfy9S4qL0A9rs/8Dtn6VG+oHy2jv24wLEcTq5R3E03wUN6mX/u3NpYmVGLMOdHYDVBAMT6hw+goFeN1060Y5y4xapDSPyXdRK7tofxj05hpPQTX2GzRMU33GP8p3RWCTXCAeqAyE//HIpbcpe1NdCkMUIAYN+8w9lcS4zdaYszGVKwS2GSfVF9dSp39GcpNyjOZwLS+tCTk8imliYnVRW6J51AcAmXnNQ1Qn7MCxLiow9hHSYy96SbGubWudAxKFlzXTRu62Y3f/dlk7JmgVSQj5aGxi/HXNWbeccWlVZM+/0K+TlvhfJuzqc9b+VBY+SkrnvVLzo17RbTJClXjf5wEPYdm8J5dxZhDHiHb2O2x/jXpzO9SCKk3VzOygRvLVMYjg7q1eUp2keRU/HXDCeUxQJL/Aopxsw5jN6VivLNVjOVR6qbVKJEYO5//WOQqw5AK85D+YG4/TR79/QnHOCBCeFRySN0Z8aoQKC9RbzIllj1nHrZfDbSVxiTQzq4zXgwUo6R4JNg3m/kdwNhnUclRa7lKz6UYUxF7XVL8aUk0Jb9xIiX24sdSQDFu3GHsqFSM/90qxnLQ1rRSAQrd9Nb2pkjRtZKf89veFlKKqYTq8wXEqcgYu4wbe2TW6tzmtyatZlvMfo1dTEUeez5Ko1WM48VQH2NTtf641ESqsikVX6RiFv2EYpQUbK5a9NmZ34H0wSfMOYi9XuM4R6JNAcW4UYexnVIxrp1uxTh7xFgKTdyYhaCeHFdSwik3pv3bQWzRYySbOHclfDZd+YRaACn5NFoOCxDjwg5jKyUx/qQlxmxMxThGE6GmeGwTKrUJnJqvL53r29c8C+SV1TdbQm3F2pZS0lpo8tOqcnt70rkoQIwLOownKInxwekmxsb6GInoAiJaR0R3GdsOIKJvENGdRPQlInpCU/m3aNFizJhDfYxNPny5EMBR1raPAziNmZ8C4PMAlOMtMuCrcWOVgUIheQc/e+yjannXcUTE5/UpNfG0586xbWRZ1Jh4PYpOPTxHgibfCGVcPI5QmZDOve/axMaQivUAfqP8TDkabUoT0XIAq5l5v/r/LwFsycxMRDsDuIqZ9wn7EYbrhBBKMy1Nq3Ej9uYfRz+rNo+Uazbufj2pySv4Vr1ymNvlYscBoEhTmjoMUjaleQNtSntwF4AX1b+PA7Czz5CITiCiHhH1gIerjdqbxvet7WxXqsoVKde1BLnUPlwLrUcNenZ9h+xj9zWBFLWVenypx6Ypaw7fzlcONZWYRl364igJVn6mHOMmxjcAOImIbgGwBYBHfYbMvIqZO1WtspnfY6AGjmpmxDRhgMdXuhPicY5XzCEhY79rfZSoKc60N1xuvFqUIqFJ+UBExRQDTUU9LcQ4RzDWprS1bw8An2Hmp4X9RLwr7cMkmsaeppJXEcTENhcKeInjjjkPJsH4FF2M/xLN2pjKuVEUakpD2ZRG25QegIh2qL/nATgTwPnJzpTN3RF7ab/rt2SnydNCcMW+mDhSm9HTglRilP677DXdBikkl1JOQtfZRcyhGGa9gpxCNDlc52IA3wCwJxHdS0THA3glEf07gO8BuA/AJ1XOli7z7yvZjNPcqLkEGtMsjbwpnEpU0cSaKKHm9pm59rmIRnttY4lX6cfbpRK6RiFSDylaLaR7TI2581h69gZ4S82g0LZS6NZLFpRaX9pn2wTpp8YTm18Jv+NsVsY20WOb2IlNcnGgfNEyXqIpfRADX1Nab9k2pYtCqyS05JOSf7cbfmXPky7YnEuNTUqrbbbF5iPZaI4lZBPyk6LYU5CjXlPta0SXs4li7ozwnj3FmIpctVZagUb6S1rHJXTMEz6miaLpWEuq3VCzuwhKKMYDGLhaab1kqhXj3CfG3MJkq7xcxRWbZwTENaJLwqV+J0GKOXlKFUiDXTDTW3GUIMb9GbhCab3zVBPjgkkH0KJFi7kCxiw8WNFgdvoYU5+8afrbJMWg6OMaee85Fyl9jf1+z5J9sEJeqj7TpuG6btp+SN8xJJSz/hNn15tIWh/F0ESfsRptH+NYQbSM0b2v+lOyzya0LcWXcZMVe6IYsJ3Y8gvjzi/1YVGI7CzfwXWpQ34NjLz7XKqcFU9Xoim9LwMXK60PmOqm9OwQY+okEqnIfVhTCOMbrpHgv7RaHMf1lSpFDfFNSiE33r9dghj3YeAzSutDWmLMBS3rMNYePekwyqC06kn1W/rGSlBTY4e2+S+RotTtkhJLrk0xlCDGvbmabVCDQ6eaGGejj3HtfWnpYomilC8pXTdhXkFNv1dsf1/KudH2nzV1M+f61RJ3zPmO6ZMMnSOXks3FWCuoudPHOBvE2DS0tXdKWse+Iv2BknppQg2a39OE1MqvFAmlEmOMrxyMVXXOnVcC5x4xllYuOc2dJptKRrp5Kx+Kzzsjv0b9xiq5kv2b40RqRVs6r6JgAP+r/Ew3ZqOPsfRiWIHCp37KO619aTZKxTkrxysh1H84Teq45PkO+irRx7g7A+cprV/U9jFOHQKFTZxB2d6e0lcVg5QHNU3FofWTkt+kFamrG6Jhcgz2NTfRHdIo5o5inJvEmFvTum6m0FNKjZ8SsZS0n7Str9uj5DktWQ40NhH5jW3s6djUb0uMU4eh9VdSidGnFHxPIGM705tSUiUeHOTePCmEJVU4vm3T0pyPIX9tzONSzY3lN3eeSi+YdAAtWrSYK+g/lZ59zObDl6ZVg+2/qSeF06B8YjHJuEvk7VP+iX4HD+rGUWZKYiS+Eg9fdmHgNKX1ie3Dl6IYR4HzNIFHJgko2VxPxbQMM5H2lepCaKrPNqNMDb0DHetzksTZSN5zpynd5JovFxDROiK6y9h2IBF9k4hur9eMDq4QOIIJFraR2WtC/Y6pN3fsg45pUSazQIyl8ku9jiX7dacOZR++ENFRRPR9IvoPItJK0SJoUjFeCOAoa9uHAJzNzAcCeE/9vyym4YaS9jXRCT+uGyyHKMbxhN580GFWGKnE3MR5bfoh10TJtpxiJKL5AP4ewB8A2AfVQnr7NBK2K/9xritNRFcBuICZ/5WIXgngGGZ+VdhP4QHeTWOaVJwGhfvdZg4b0rF6UaKPcRkDb1Zad8U+RiJ6BoAuM/9+/f/dAMDMf5kToxbjJsa9AVwFgFCp1cOY+R5P2hPwOBvuCeD7jQVaHtsB+Mmkg2gIc/XYNvTj2oWZt8/JiIi+UuenwSYAfmv8X8XMqwxfLwNwFDO/sf7/WgBPZ+Y/zYlRi3EP13kLgLcx82VE9HIAnwDwXJdhfZJWufZNO4ioN81P3HIwV4+tPa58MLPddZYDl3od2xCacT+Vfh2Ay+vflwCIf/jSokWLDQH3AtjZ+L8TgMT5B+MxbmK8D8Cz698rAPxgzPm3aNFiNvBtALsT0a5EtBGAPwLwxXFl3lhTmoguBnAEgO2I6F4AZwF4E4APE9ECVP0LM/REJQoz2QWgxFw9tva4pgjM/BgR/SmqZxLzUT20vXtc+c/Emy8tWrRoMU7M3psvLVq0aNEwWmJs0aJFCwstMRYAEb2NiO4moruI6GIi2oQqnENE/05Ea4jozyYdZyxcx2Xs+wgR/XqS8aXCc70uql8/u6t+nXXhpONMgefYdiWim4noB0T0r/XDjBYCWmLMBBHtCODPAHTqgezzUT1B+xNUww32Yua9AfzLxIJMgHBcIKIOgK0mGF4yhOO6CMBeAJ4CYFMAb5xYkIkQju2vAPwtM+8O4EEAx08uytlAS4xlsADApvXT9s1QDUt6C4D3MvN6AGDmdROMLxUjx1W/w3ougHdONLI8jBwXM1/BNQB8C9W4uVmEfWxrUQ2Nu7Te/ykAL5lQbDODlhgzwcz/A+CvAfwIVSH8BTNfDeDJAF5RzyJ0JRHtPsk4YyEc158C+CIzr51kfKkQjgsAUDehXwvgK5OJMB2uYwNwC4CfM3N/5oZ7Aew4mQhnBy0xZoKItgbwYgC7AlgGYBERvQbAxgB+W7+O9U8ALphclPHwHNcfAzgOwEcmGVsOhOvVxz8AuIGZb5xEfDlwHRuq2WlstGP0AmiJMR/PBfDfzPxjZv5fVK88HoaqZr6stvk8gP0nFF8qXMd1NoDdAPwHEf0QwGZE9B8TjDEFvusFIjoLwPYA/nyC8eXAd2xb1U1rYMyv1s0qWmLMx48AHEpEmxERATgSwBoAX0DVtwNUr0H++4TiS4XruM5j5iXMvJyZlwN4mJl3m2iU8XBeLyJ6I4DfB/DKfr/wDMJ1bN8FcB2Al9U2rwPwfyYU38ygffOlAIjobACvQDUD522onmhuiupJ5xMB/BrASmb+zsSCTIDruJj5EWP/r5l580nFlwrP9XoIwD0AflWbXc7M751MhOnwHNuOqEZFbFNve415HVuMoiXGFi1atLDQNqVbtGjRwkJLjC1atGhhoSXGFi1atLDQEmOLFi1aWGiJsUWLFi0stMS4gYKIfkdEt9ezsHyJiLyTQhDRQUTERPT7Ef7/PyJ6lmP7EUS0OiPuf6vf8GjRojG0xLjh4jfMfGA9C8vPAJwk2L4SwE31dxBEtA2AQ5n5hvwwR/DPAE5swG+LFgO0xNgCAL4Bz8QC9RsUL0M1jdrzzTkZBbwMxiQMRHQUEX2PiG4C8FJj+6J67sNvE9FtRPTievtmRPQ5Irqjnj/w5nqqM6BaEElF0C1apKIlxg0c9TRiR8K/AtvhqN6//U8A1wN4gcLt4ahmdUFNpP8E4BgAvwdgiWF3BoBrmfmpAJ4D4FwiWoRKET7IzPsDeB+AQ/oJmPlBABsT0bbaY2zRIhYtMW642JSIbgfwU1Svin3VY/dKPD7J7r9Ap9aWAvhx/XsvVMT6g3quw88Yds8HcFodx/UANkH1CuUz+3ky810A7rD8r0M1e0yLFo2gseVTW0w9fsPMBxLRlgBWo+pj/DvToFaTxwJ4ERGdAYAAbEtEWzDzr0Y8Gr5RkVwfvvdOCcCxzPx9K18KxL5JnUeLFo2gVYwbOJj5F6imw3+HY52T5wL4DjPvXM+oswuqqdRCM0CvQTU9GQB8D8CuRPTk+r+pOK8C8NY+ERLRQfX2mwC8vN62D6rlBlD/J1TN8R+qD7JFi0i0xNgCzHwbgO/g8TVdbq93vRLVXJImLgPwqtruCiJyNWm/DOCI2vdvAZwA4Mv1w5d7DLv3AVgI4A4iuqv+D1STxW5PRHcAeBeqpvQv6n2HAPimMSN1ixbF0c6u06IR1CR4NDP/PCHtfAALmfm3tdK8BsAezPwoEX0Y1dIK1xQOuUWLAdo+xhZN4e2oHqREEyOqRZyuq5v2BOAtzPxove+ulhRbNI1WMbZo0aKFhbaPsUWLFi0stMTYokWLFhZaYmzRokULCy0xtmjRooWFlhhbtGjRwsL/AyoiII0p2/R+AAAAAElFTkSuQmCC\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+WiV69eTPXpBXTddddx4MABhgwZwgcffMDzzz/PwIEDycrKol+/fvXW45e//CW333473bt3JzExkalTp5KSksI555xDhw4d6N69O6eeeiqnn954S+Szzz7L8OHDefbZZ7nmmmsa3DcjI4Pf//739O3rXmPkD3/4AxkZGRQWFpKfn0+XLl2857zrrru49dZbee655/jkk09ISkqiVatW3qalLz7/NyOuepxEVyIJLhePPPEM+yqTWfP1t+Tn5/OzTp05tYf7vR55Sx43jLyJ/CefYfGi+SQlJpGR0cpyM1UkZVdsoqrsEKXr9ja+sx/pnEDzA5XB5zoiNMeW9siKThLImysinYHxQC4+wcYYc1HIamZDnz59zLJly2psW7t2Laec4n9QlxM8S8eeeOKJlo/dt20PAK3a2VtY6ODBg7Ro0QJjDHfeeSedOnWqkWiMF0UHj9gasV5aXkmzJFe9vb9Cfa0EY5+nmStIiyrPoSwJbuk/x/rBO1fB8d1hzPtBnz8YEyZMsDUrry6Va42ILDfG9Alk30CT428BLwIvAZXBVizUYinHEQqTJ09m2rRplJWV0atXL8aOHRvpKoWEndHuEJsTO9pp5gIou+kljiQdz8TvgmjKKSvhxIQ1WO9HZk+nTp1s9cjSxHroBBo4KowxL4S0Jg6IpRxHKPzmN7+JijuMVatWceONN9bYlpKSwn//+98I1UidUL6BHQCkWT425dCJ/LDH6Ro1rr67hZNOOsnv4MNJkyZ5cxy6VG5oBRo45orIL4HZwBHPRmNMcA2uKq51797d74juaNLQjMC7Dxzh0b8vqffYK3tmM/yM6FyeuD7dEnbws9XzaVbZxfKxnyScw6EqOyvGOEsHH0ZeoIFjdPW/9/psM0BHP/sqFdXsLHy1Zsd+gJgLHHbGnySXGcBEVWI92B5Z4M59eJLoOTk5GnSCEFDgMMbUHV4bJtXTmzyEe6LFqOsCrGJPYzmSsj0pvDG2p9/XbmjgTiSa2cmRlN1UwJGkE5m4Zqj1g00lJ+5ayaiAUq7Oq91k5Vln3UPXWQ9OoNOq+82LGWOsT9jjLm8KcAWwyxhzqs/2gcCzuAcXvmSMmWiM2QTcIiLOLkaglArICeUb2UECJDdvfOdaUn5K54c94R8rHOga66DrrAcj0Kaqvj4/NwMGAP8DggocwFTgOd/jRcQFTAIuAQqBpSIyxxizJshzKBUSa3bsD/rOI1bzI90qd5CTb/2/+8R7J4egRo3TNdZDK9CmqhrDVUUkHXi1nt0DKW+RiOTW2twP+K76DgMReR24EoibwBGP63HU1qJFCw4erL+767Rp03jssccA9wjv0aNHh209DoA333zTu5rdaaedZnl1uit7Zlt9S7xiNT8CBD2xY+uEcziUGpn8iL8xak6sI6L5keDXHD8EOD1fQzawzed5IXCGiGQC+UAvEXnAGPO4v4NFJA/IA2jfPjr/Y8bbehxW7d27lwkTJrBs2TJEhN69ezNkyJCwrcexYcMGHn/8cRYvXkyrVq3YtWuX5d9h+Bntg/7gj9X8iK3EejlAkD2yHJ4KHqyvs+4bQDQ/clSgOY65HF0JwAWcArzpcF38XV3GGFME3N7YwcaYAhHZAQxOTk7u3dC+T3z5BOv2rguymv61TWnLHScHPmlevKzHsXnz5hrrcTTk448/5pJLLvHOt3XJJZeEdT2OyZMnc+edd3rf9zZt2jTyV1JgN7H+EmXJJzB775+sH7x3FZ0T1tItqDP757k7aOyuIdAcSVPNjwT61fMpn58rgK3GmEKH61IItPN53hZofK7yGKLrcdRcj6Nt27Zs3769xj6BrKHhYXU9Ds/veM4551BZWcmjjz7aaLBT9hxzaAXFppJv99Yd6d2Y1ENZ7P4xh24ON3MF0pU3FDmSeGrmCjTHsVBEjuNokjwUY/mXAp1EpAOwHfgFYOleL9CR47/rV/+aEcH6QdfjsLQeh4fUWo8j0DU0TjjhBMvrcVRUVLBhwwYWLFhAYWEh5513Ht988w3HHntsg7+7k5paYr1j1UaK9nzJF8Os3ze0++xs0kyQzaoONHPVvl7t5Ec8M/p6xPqMvoE2VV0PPAkswN2k9P9E5F5jTFBdZEVkJtAfyBKRQuARY8w/ROQu3EvUuoApxpjVFsuNmbmqmvp6HACFhYX079/f+9zKGhopKSmkpLjHYgS6Hkfbtm0588wzSUpKokOHDpx88sls2LDBO1tvqDXFxHrr1Na0Tm3NywNftnzsxH9Xd1wIZnLFEKx46PQ66/5m9IXYmNU30HD+ENDXGLMLQERaA58AQQUOY8ywerZ/AHwQTJmxRtfjsLcex+7du8nIyLC0HsfQoUOZOXMmN910E3v27GH9+vU17mxCrSkm1uNJoPkRu2JhudxAA0eCJ2hUKwKCX44sRKJ9kkNdj8O59TgWLVrEH/7wBxITE3G5XLz44ouNlnXZZZcxb948unbtisvl4sknnyQzM7PR31HZE3RXXtf5HE49Mag12tl5PZ2TPgk+PwJ+cyQjRozwBg7f5ilf/mb1DXRGX4iNWX0DXY/jSaAHMLN60w3ASmOM88kCG3yaqm6r/ebrehwqUNG4HscNf1/Cmh376XqC9fXKPSKRI7GzjsiaH5tReEJvitoe0/jOtaQWH0tq6k7yur4T1LmdXoOk9qqF4G7mKigo8Ltc7iOPPOLIea1wbD0OETkJOM4Yc6+IXA2cizvHsQRouF0iAqL9jiMuW8vRAAAgAElEQVTUmsp6HE2RnfwIRC5HYqcr7+5rB5GwZ0VwifX555KWmBr8B7/DOZJwNXOFS2NNVX8FHgQwxswCZgGISJ/q1waHtHbKEl2PI37ZyY9AbOZIHEmsR5FAmrliRWOBI9cYs7L2RmPMMj9ThkRcLPWqimexsB6HUo3auSpiU8nbWYgqHM1cjQWOZg28lupkRZzQ1JuqlFJHpRZnBJdYBzhwJ51TF9GNVdaPbWAMSWM55U6dOsVEcryxwLFURG4zxtSY4lJEbgGWh65aSimnNaXBh0XttpBacZjDe4NbpDS1OIPdx19ItzETG9+5Nhv5kWjvhuvRWOC4G5gtIiM4Gij6AMnAVaGsWDC0qUop/5ra4MN+F3Xig03BDwlrN/9c0g5HXaNK1GgwcBhjfgTOFpELAc+CS+8bYz5r4LCIifamKp1WPfTTqgP079+fHTt2eKdYmTdvHm3atGHr1q3cfPPN3sGD06dPp23btqF8O6JGrA4+DHYMSD/g4iuuCLpHl+3kegTzI+EQ6FxV84H5Ia5L3NNp1cMzrTq4+817ph/xGD9+PKNGjWL06NF89tlnPPDAA3VmG1bRw8507qXr3LNfBxs4bOlu4wtdCKaSD4XIfIIonVad0Eyr3pA1a9bwzDPPAHDhhRcydGgQa2g3UZHIj9gZAxLMXUptwSfXT6Nzv0vpdl4QzYMhmGMrFOIqcASa49j5f//HkbXOrsdR0a4dqXfd2eA+Oq16+KZVHzNmDC6Xi2uuuYaHH37Yu+LfO++8w7hx45g9ezYHDhygqKhIpx1pRFPLj4C95HpqcQa7D+8OLnCAvWau47vDoCAS+hbFVeCI9hyHTqsenmnVZ8yYQXZ2NgcOHOCaa67h1VdfZdSoUTz11FPcddddTJ06lfPPP5/s7OyINdvFkljNj9hhJ7luK7Fup5krjJrk/5rjH3zQ8TIDWY/Dl06rHrpp1bOz3d/0jjnmGIYPH86XX37JqFGjOPHEE70rtR08eJB33nmH9PT0gOqumpbrOl/HdZ2vC+pYW4n1PmOiPr8BTTRwRAOdVj0006pXVFTw008/kZWVRXl5Oe+99x4XX3wxAHv27CEjI4OEhAQef/xxbr755kZ/P2VfUxo/0lREfeAQkebA80AZsMAYE3WTKwZKp1UP/bTqJSUlXHbZZZSXl1NZWcnFF1/Mbbe5Wy4XLFjAAw88gIhw/vnnN5qTUfZFMj8SbFdej5Y2uvPaGbXeud9xwedHwiSgadUdP6nIFOAKYJcx5lSf7QOBZ3GvAPiSMWaiiNwI/GSMmSsibxhjbmis/D59+phly5bV2KbTqqtAReO06k2R5y7ljbFnWT7WznTu4A46zbp0IefVVywfe++L/0fq5uPcs/NalFqcQerxQt7Dl1k+1i7HplUPoanAc4D3ryIiLmAScAlQiHu6kzlAW/BOGFMZ3mrGFp1WXSk3O115wV533ogl1sMoIoHDGLPIz+y6/YDvjDGbAETkdeBK3EGkLbCCKFx1MJrotOpKRV7EEuthFE05jmxgm8/zQuAM4G/AcyJyOTC3voNFJA/IA2jfXpNpkaTTqiunaGI9OkVT4PDXp9MYY0qARvunGWMKRGQHMDg5Obm347VTSoVVUxx4CPYS61ntWnDe9Z0drlFd0RQ4CoF2Ps/bAtYGRyil4kZTHHhY1G4L7nkM2kS4Jg2LpsCxFOgkIh2A7cAvAEuT00f7yHGlVOyw05032K68e3I3sLjle5yccXJQ5+2S0YXzqH/2BqdEJHCIyEygP5AlIoXAI8aYf4jIXcDHuLvjTjHGrLZYrq7HoZSyLVIz8/6848+DPm84RapX1bB6tn8ABL/6SpTT9TjCsx7HG2+8QX5+PpWVlVx++eX8+c9/BuDpp5/mpZdeIjExkdatWzNlyhRycnJC+XaoCLKTWId2XHnXY0E1ldnpymunR1Y4xVX3VmPMXGNMXrTOP+SZ5PDrr7/m8ccf54EHHgh7HXznmAo3z3oc//3vf/nyyy+ZMGGCd/qR8ePHs27dOr766isWL17Mhx9+CLiX0ly1ahUrVqzgvvvu45577vGW51mPY8WKFd6gUVRUxL333sunn37K6tWr+fHHH/n0008B6NWrF8uWLWPlypVce+213HfffWF+B1S4XNkzm64ntGx8x3qs2bGff67Y3viOTVQ05Thsi6WmKl2PIzTrcWzatInOnTvTunVrAC6++GLeeecdBgwY4D0HuO9Qpk+f3vAfScUsO4l1iN3kerjEVeAINDn+7zfXs2db/c0pwUjNEHpcdlyD++h6HKFfj+Okk05i3bp1bNmyhbZt2/Luu+9SVlZWpy7/+Mc/GDRoUIP1VUr5F1dNVdHO01S1bt06PvroI0aNGoUxxrseR48ePbj44osDXo/jp59+4u9//zsi4nc9Dl+11+PwjOwOdj2OLVu2AO71ODznqj1avDY763Fs3LiRJ554wpsf8azH8dVXX/H0008zfPhw713cCy+8wA033MB5551Hbm5unTU3pk+fzrJly7j33nsbrK9Syr+4uuMItKkqFANkdD2OxoVrPY7BgwczePBgAAoKCnC5XN4yPvnkE/Lz81m4cKH3eKX8CTa5ftOO/bTdWxj2rrzhFFd3HNGeHPcV6Hocb775JkVFRQA1mqoGDhzI/fffz+WXX86BAwdqrMcBBLQeB1BjPY7c3FxWrFhBVVUV27Zts7QeBxDQehzz5s1j37597Nu3j3nz5nHZZe5ZQD3rcfz1r3+tccyGDRu8P9dej6Oy0j3npe96HAC7du0CYN++fTz//PPceuutAHz11VeMHTuWOXPm0KZNdA+wUpFlJ7n+8fGnUZjRNqhjS9etszWrb7jE1R1HtNP1OEK/HgfAuHHj+Prrr73n6NzZfYd57733cvDgQa67zt3dsX379syZM6fR31E1PbZGrQNTGRjUdPB2uvKGU0TW4wgVn6aq23y/qYKux6ECp+txKDvsrCPiCRzBrANil5X1OLSpKo5MnjyZnj170q1bN4qLi3U9DqVUSGhTVRzR9TiUUuGggUM5TtfjUE2dnR5ZmS1SiPaJcOIqcMTSyHGlVHyys45IyZHITQlkRVwFDp1WXSkVaXZ6ZH34ViLH7/4+6N5VKad04fgHHwzqWCviKnAopVQsW3XyGQBkNLJfpGngaIBnRLRTXZY906qXl5eTmJjI6NGj6x0l7bFlyxa++OILhg+3tKaVUioGLe/Rn1dbnx704MOuJ7bkEYfr5E/UBw4R6Qg8BKQbY6JvAQoLPHNVgXt08/DhwykuLubuW39V7zFbtmzhtdde08ChVBNgJz8SVp5J9kLxAKYAu4Bvam0fCHwLfAfcH2BZbwd63t69e5va1qxZU2dbQ6ZPn24AA5icnBwzffr0Bvffvn272b59e4P7NG/evMbzjRs3moyMDFO0dZdZsXi5Offcc02vXr1Mr169zOLFi40xxpxxxhmmZcuW5rTTTjNPP/202bx5s9/9lHOsXitKxQNgmQn0sz3QHYN5AOcDp/sGDtzLwm4EOgLJwNdAV6A78F6tRxuf48IWOKZPn27S0tK8gQMwaWlpDQaPYAKHMcYce+yxZt3y1abw263m8OHDxhhj1q9fbzy/w/z5883ll1/u3b+kpMTvfso5GjhUU2QlcIS0qcoYs0hEcmtt7gd8Z4zZBCAirwNXGmMeB4Jf6NcBDc3yeujQIUaOHMnIkSMdy3nA0fxJRXkFt912GytWrMDlctU7zXl5eTl33XVXo/sppVSoRCLHkQ1s83leCJxR384ikgnkA71E5IHqAONvvzwgD9yT18WCTZs24XK5aJ3VmieeeZLjjjuOr7/+mqqqKpo1a+b3mGeeeSag/ZRSKlRCPslh9R3He8aYU6ufXwdcZoy5tfr5jUA/Y0z9GeLAzzUYGJyZmXlbbm6u3eKUUqrJWL58uTHGBDR/YSTuOAqBdj7P2wLWVkGqh/EZALhs2TInilRKqSZBRP4X6L6RmB13KdBJRDqISDLwC0AXRVBKqRgR0sAhIjOBJcDJIlIoIrcYYyqAu4CPgbXAm8aY1aGsh1JKKeeEulfVsHq2fwB8EMpzK6WUCo24WsgpXolIg12FlVIqnDRwKKWUskQDh1JKKUs0cCillLJEA4dSSilLNHAopZSyRAOHUkopSzRwqHppN2CllD8aOJRSSlmigUMppZQlGjiUUkpZooEjys2YMcP7c25ubo3nSikVCRo4otiMGTPIy8vzPt+6dSt5eXkaPJRSERXyFQAjoU+fPibWFnKy23spFH9HT50icY1E8txKNUUistwY0yeQfaP+jkNE2onIfBFZKyKrRWRcpOuklFJNWdQHDqAC+K0x5hTgTOBOEeka4To5zhhT55GTk+N335ycnDr7KqVUuER94DDG7DDG/K/65wO4Vw3MjmytwiM/P5+0tLQa29LS0sjPz49QjZRSKgYChy8RyQV6Af+NbE3CY8SIERQUFHif5+TkUFBQwIgRIyJYK6Wco7MTxCZHk+Mi0hwoNcZUOlbo0bJbAAuBfGPMLD+v5wF5AO3bt++9detWp6sQMZFKFGty3JpYrHOk6XsWPcKWHBeRBBEZLiLvi8guYB2wozqJ/aSIdLJTvs95koB3gBn+ggaAMabAGNPHGNOndevWTpy2SdPxI0qp+thtqpoP/Ax4ADjeGNPOGNMGOA/4DzBRREbaOYG4v5L8A1hrjHnaZn1VAHT8iFKqIbaaqkQkyRhTbnefRo4/F/g3sAqoqt78oDHmg/qOicVxHA0J9e28nTbmUNcplpowYrHOkabvWfSw0lSVaOdEnoAgIo8YYyY0tI+Nc3wOaPZMKaWihFO9qh4RkSdEZLKI3CEirRwqV9kUSK8VHT+ilLLCqcBhgFLgY6Ad8IWInOZQ2SrMmvL4Ee0eqlTjnAoc64wxjxhj3jbGPAhcCTzjUNkqzCI9fkR7dKlAaJCPHEfGcYjIQuAeY8xyn22rjDHdbRceBE2OR/7YYHl6dB06dMi7LS0tLWyBK9ber1in73f0sJIcdypwnAa8DizH3fupB3CMMWaI7cKDoIEj8sdaKT8Y0dibSz/IrNP3O3qEcwCgABhjvgZ6AjOrX5oPDPPdRymlfGmTZOyyPQBQRH4lIu2NMUeMMe8bY54AXgHOEJFpwGj71Wza4rUHk50ZgaONfghao4NMY5y//7yBPoBmwC+BxcAPwBpgE7AVmAz0tFN+sI/evXsb5Ya7x1vYjw3W9OnTTVpamvfcgElLSzPTp08PuIxw/85O1DlWBfJ++b4vVh92zx1tornOwDIT4GesY5McVs8nlQUcNsb85EihQYq3HIcdsdiGPGPGDEaOdM9Uk5OTQ35+vqXEeKh/52jMzURKJN+vWMxxRHOdw54cjzahChzR/EevTywGDrvn1sARPsG+17m5ufibwTonJ4ctW7aE9NyRFM11jqulY1Xsitd+9rVv23WkvXVNeZBpPNDAEcc0YRse+iFoXaQHmSqbAk2GxNIjVMlxojixVVukk8x2j4+1Y6dPn+49Nicnp0kkxo2J3WvEjliscyCwkBx35I5DRK4TkWOqf35YRGaJyOlOlK0C42kW8jxGjhxZY/Q1wKFDhxg5cmSdfevjuUiaCjt3aL7flLds2RLUN+d4bdpT8ceppqrfG2MOVK+dcRkwDXjBobKVCrlYH1dgJ+jEYsCy2wwbi79zNHEqcHjWGL8ceMEY808g2aGyVQBq30pqwrZhobhDU+ER60E+HjgVOLaLyN+B64EPRCTFwbJVEDRhq+JB7aBtJcir0HHqw/163GtxDDTuwX8ZwL0Ola2CoL1WGqZ3aEoFz5HAYYw5ZIyZZYzZUP18hzFmnhNlx4tIfAtyImHbVOgdmnXh6O7tr0ePzmcWBQLtfuXvARwA9vt5HAD22ym71nkGAt8C3wH3N7Z/NHbHtXOsHZE6b6TObadbrN0utXZ/30hdX8Ec69T8XJE6d6y+X6GEhe64IRlH4eQDcAEbgY64E+5fA10bOiYUgSPSHyrBakqBIxY/UKLh3IEc6/ueWn2Eot6R/P8YyfcrlCISOIBWQD/gfM/DoXLPAj72ef4A8EBDxzgdOCL9gWRHpM4b6gFxdv5jNvR+aOBoeJ9oCRzRfmy8B45EHCAitwLjgLbACuBMYAlwkQPFZwPbfJ4XAmc0dEBRURFTp06tsa1bt2707duX8vJyv22LPXv2pGfPnjRv3pzrr7++xmtvvfWW314cY8eO5ZNPPgHgiy++4Ntvv2XPnj289957dcrv2LEjmzZtYufOnXz00Ud1Xh8wYADt2rVj27ZtfPrpp3VeHzhwIMcffzybNm1i0aJFdV6/4ooryMrK4ttvv2XJkiXe7TfddBMAxcXFpKen88033+BvAsjrr7+etLQ0VqxYwYoVK+q8PmLECJKSkli6dCmrV6+u87rnPF988QXTpk2r8f57uksCtG3bls2bN9c4Ni0tzfuef/LJJxQWFtZ4vWXLllx99dUAfPTRR+zcudN7PnD/vefOnVunTv5cffXVtGzZskb92rZty8UXX1zjffB9vUOHDlxwwQWAu526vLy8RpmdO3fm7LPP9r4PwV57nveh9vF9+vTh1FNPpbi4mNmzZ9c5/qyzzgIgMzOzzrEA559/Ph07dqz32vNcdw1de8aYGtfe+PHjKSoqqrNvZmYmTz31VI1tDV17L7/8svdvb/Xa870GwH3trV+/vsa2pKQkb25v4cKF3mvPc+ybb74Z9LU3depUMjMzGTx4MABz5871vicvv/wyAMcffzwDBw6sd1LHNm3a8OOPP3rrcujQoaCvPX9/+0Cvvdqfb41xJHDgDhp9gf8YYy4UkS7ABIfK9pdRNnV2EskD8gCys7MdOrVbSUmJpe1NycKFCwEYM2YMAGeffTZff/01ZWVlNfbzdJf0fIgB3v8QwfA9NjMzkzlz5gT0n3PWrFns378/6PM2xBjj9z9vPLrmmmuYOnVqjb9zs2bNuOaaayJYq9BbsmQJb731FiUlJcydO5fRo0d7A0dD8vPzueWWWzhy5Ih3W3JyMjfffHMoqxs6gd6aNPQAllb/uwJI8fzsUNkRb6rKycnxe0uZk5MTcBlE6DY01Of1974E+nBaLDcpRnubvT+Rnp8r3L+z3esr0u9XYwh3jgOYDRwLPAosAv4JfOBQ2Ym4VxXswNHkeLeGjtEcR2TP60SgDVYsdmKI5PUVi++XE+cO5NhQfCmK5PvVmLAHjhoFwgXAECDJwTJ/DqzH3bvqocb2115VkT1vpLseRuLbt9XynfwwCvbajOUvRHbOHej7pYEj9Hccf/D3cKLsYB46jiPy543kbXk0/52c/jCy8uEfbx+EwZzbTrCM5SbrQFgJHI4sHSsiv/V52gy4AlhrjIlI5ical46N1JKRsbr8a6TOG4k6B7qMaiTnX6rv/Yjm68vu+1W7XM/kir49kNLS0ixN5aNLx/owxvzF55EP9MfdjVZFmOcbgope4ZrupPa3Rp2fyxqd/+2oUM1gm4Z7pLcizuaoiXOR+KAM9APJX5OBnQ//eJ+fy+n3C3T+N69A27QaegCrgJXVj9XALuBXTpQdzCOachyRThRHUjDvVyyf165IXF+x2ukjWJHuEBDN7xcRSI7n+DyygUQnyg32EanA4XsxWn3EIw0c1gRb71gcAxJJ+n75ZyVw2EqOi8g9Db1ujHk66MJtiFRy3E4yzs7fIVrFYnI8kiKV1I+1zgRO0PerrnAmx4+pfvQB7sB9t5EN3A50tVl2zPEXmWN17QCllKqPrcBhjJlgjJkAZAGnG2N+a4z5LdAb94SHTV68JyCVUoGLly+KTvWqag/4zmpXBuQ6VHZM0y584Rcv/zljgb7XTZNTAwAfwr3u+GzcyZ+rgDeMMY/bLjwIocpx2BHNbZuh0hR/Zzu03T189P2qy0qOw5Fp1Y0x+SLyEXBu9aYxxpivnChbxa54+4+llHJzaj0OjDHLgeVOlaeUUio62QocIvK5MeZcETmAu4nK+xLuvsotbdVOKaVU1LEVOIwx51b/e4wz1VGq6dKmvdigfyeHelWJyHUickz1zw+LyCwR6eVE2UoppaKLU91xf2+MOSAi5wKXAdOAFx0qWynVCDvdYptil9qm+Ds7yanAUVn97+XAC8aYf+Je5lUppVSccSpwbBeRv+Mey/GBiKQ4WLZSSqko4tSH+/XAx8BAY8xPQAZwr0NlK6WUiiJODQA8BMzyeb4D2OFE2fFC21OVUvHCqV5VIiIjReQP1c/bi0g/B8p9UkTWichKEZktIsfar61SSsUmEYno2vMeTjVVPQ+cBQyrfn4AmORAuf8CTjXG9ADWAw84UKZSSikbnAocZxhj7gRKAYwx+3CgV5UxZp4xpqL66X/QqdqVUirinAoc5SLionraERFpDVQ5VLbHzcCHDpeplFLKIqcmOfwb7inV24hIPnAt8HAgB4rIJ8Dxfl56qHo8iGfa9gpgRgPl5AF5AO3bt7dUeaWUUoFzZD0OABHpAgyofvpvoLsxpt4Pegvljsa9FO2A6t5bjYrG9TiUUsquUK4FErY1x0WkpYg8ICLP4V4F8PnqMufiHtthi4gMBH4HDAk0aCillAotu01VrwL7gCXArbgH/SUDVxpjVtgsG+A5IAX4V3Wk/Y8x5nYHylVKKRUku4GjozGmO4CIvATsAdobYw7YrhlgjDnJiXKUUko5x26vqnLPD8aYSmCzU0FDKaVUdLJ7x3GaiOyv/lmA1OrnugKgUkrFKVt3HMYYlzGmZfXjGGNMos/PGjSUUsohM2Yc7aSam5tb43m46dTnSikV5WbMmEFeXp73+datW8nLy4tY8HBsHEc00XEcSqlYZWcSQzuf52Ebx6GUUqrp0cChlFJRxLMeuu8jJyfH7745OTk19gsXDRxKKRXl8vPzSUtLq7EtLS2N/Pz8iNRHA4dSSkW5ESNGUFBQ4H2ek5NDQUEBI0aMiEh9NDmulFIxIi4mOVRKKdX0aOBQSilliQYOpZRSlmjgUEopZYkGDqWUUpZo4FBKKWWJBg6llFKWaOBQSilliQYOpZRSlsRE4BCR8SJiRCQr0nVRSqlICfdkhvWJ+sAhIu2AS4DvI10XpZRSMRA4gGeA+4DIh1mllFLRHThEZAiw3RjzdaTropRSyi0x0hUQkU+A4/289BDwIHBpgOXkAXkA7du3d6x+SimlaoraadVFpDvwKXCoelNb4AegnzFmZyPH7ga2NnKKdKA4xPvU91oWsKeRcqNBIL9/NJwj2DKsHOfE9RLMtQJ6vThdfjDlOH2tBLJfuD9bcowxrQPa098yhdH4ALYAWQ6WVxDqfep7DVgW6ffTqfcoGs4RbBlWjnPiegnmWql+Ta8XB8sPphynr5VA9ovmz5aoznGE2Nww7BPI8dEsHPV34hzBlmHlOCeul3i+ViD0v4NT5QdTjtPXSiD7Re31ErVNVfFMRJaZAFfaUkqvFxWocF0rTfmOI5IKGt9FKS+9XlSgwnKt6B2HUkopS/SOQymllCUaOJRSSlmigUMppZQlGjiigIg0F5FpIjJZREZEuj4qeolIRxH5h4i8Hem6qOgnIkOrP1f+KSIBzcIRCA0cISIiU0Rkl4h8U2v7QBH5VkS+E5H7qzdfDbxtjLkNGBL2yqqIsnKtGGM2GWNuiUxNVTSweL28W/25chNwg1N10MAROlOBgb4bRMQFTAIGAV2BYSLSFfd0Ktuqd6sMYx1VdJhK4NeKUlOxfr08XP26IzRwhIgxZhGwt9bmfsB31d8ay4DXgSuBQtzBA/Rv0uRYvFZUE2flehG3J4APjTH/c6oO+iEVXtkcvbMAd8DIBmYB14jIC8TH1BPKPr/XiohkisiLQC8ReSAyVVNRqL7Pll8BFwPXisjtTp0s4tOqNzHiZ5sxxpQAY8JdGRXV6rtWigDHPgBU3Kjvevkb8DenT6Z3HOFVCLTzee6ZKl6p2vRaUVaE9XrRwBFeS4FOItJBRJKBXwBzIlwnFZ30WlFWhPV60cARIiIyE1gCnCwihSJyizGmArgL+BhYC7xpjFkdyXqqyNNrRVkRDdeLTnKolFLKEr3jUEopZYkGDqWUUpZo4FBKKWWJBg6llFKWaOBQSilliQYOpZRSlmjgUE2OiFSKyAqfx/2NHxUeIvJ29Zob/62u2/cistunrrn1HPeYiPyp1rY+IrKy+udPRSQ99L+Bagp0HIdqckTkoDGmhcNlJlYPwrJTRjfgMWPMVT7bbgL6GGPuCuDY2caYzj7bngKKjDGPi8gtQJYx5gk7dVQK9I5DKS8R2SIiE0TkfyKySkS6VG9vXr14zlIR+UpErqzefpOIvCUic4F5IpIgIs+LyGoReU9EPhCRa0VkgIjM9jnPJSIyy08VRgD/DKCeg0RkSXU93xCR5tWjhEtFpHf1PgJch3t6barLHW7n/VHKQwOHaopSazVV+a6MtscYczrwAjC+ettDwGfGmL7AhcCTItK8+rWzgNHGmItwr+SYC3QHbq1+DeAz4BQRaV39fAzwsp96nQMsb6jiItIGuB8YUF3PlcC46pdn4p6jyFPWD8aYzQDGmD3AMSJybEPlKxUInVZdNUWHjTE963nNcyewHHcgALgUGCIinkDSDGhf/fO/jDGeRXXOBd4yxlQBO0VkPrjnthaRV4GRIvIy7oAyys+5TwB2N1L3s3Gv8PaF+6aCZODz6tdmAgtF5D7cAWRmrWN3V5/jp0bOoVSDNHAoVdOR6n8rOfr/Q4BrjDHf+u4oImcAJb6bGij3ZdyLdJXiDi7+8iGHcQelhgjwkTHmxtovGGO2iMgPwHnAVUDvWrs0qz6HUrZoU5VSjfsY+FV13gAR6VXPfp/jXskxQUSOA/p7XjDG/IB7fYSHca8Z7c9a4KRG6vIFcIGIdKyuS3MR6eTz+kzcC/esNcbs9GwUkQQgi5qrxCkVFPIjgiwAAADlSURBVA0cqimqneOY2Mj+fwKSgJUi8k31c3/ewb2gzjfA34H/AsU+r88Athlj1tRz/Pv4BBt/jDE/ArcAb4jI17gDSWefXd4ETuVoUtyjH/C5MaayofKVCoR2x1XKQSLSwhhzUEQygS+Bczzf/EXkOeArY8w/6jk2FZhffYyjH/AiMgn3Gg0LnSxXNU2a41DKWe9V91xKBv7kEzSW486H/La+A40xh0XkESAb+N7hen2lQUM5Re84lFJKWaI5DqWUUpZo4FBKKWWJBg6llFKWaOBQSilliQYOpZRSlmjgUEopZcn/Bz35Cs3jvjJ+AAAAAElFTkSuQmCC\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 | 19 | * :download:`How to connect observations to specific models? <howto/howto_connect_models.ipynb>` |
| 20 | 20 | * :download:`How to perform a stacked analysis? <howto/howto_stacked_analysis.ipynb>` |
| 21 | 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
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> | ... | ... |