Commit 4fb7bcac02c4f50e577b9fbbba2941423039d9f2

Authored by Jürgen Knödlseder
1 parent d78abf9b

Add "response" parameter to comobsbin

doc/source/users/reference_manual/comobsbin.rst
@@ -24,6 +24,10 @@ General parameters @@ -24,6 +24,10 @@ General parameters
24 ``outfolder [string]`` 24 ``outfolder [string]``
25 Output folder for files. Put here the location of your COMPTEL data store. 25 Output folder for files. Put here the location of your COMPTEL data store.
26 26
  27 +``response <MODEL|SIM2|SIM3> [string]``
  28 + Response type specifying whether ``MODEL`` IAQs or simulated IAQs provided
  29 + in the COMPTEL calibration database should be used.
  30 +
27 ``ebinalg <FILE|LIN|LOG> [string]`` 31 ``ebinalg <FILE|LIN|LOG> [string]``
28 Algorithm for defining energy bins. 32 Algorithm for defining energy bins.
29 33
modules/comscripts/comobsbin.par
@@ -23,6 +23,7 @@ outfolder, s, a, $COMDATASTORE,,, &quot;Output folder for files&quot; @@ -23,6 +23,7 @@ outfolder, s, a, $COMDATASTORE,,, &quot;Output folder for files&quot;
23 # 23 #
24 # Script parameters 24 # Script parameters
25 #================== 25 #==================
  26 +response, s, a, MODEL,MODEL|SIM2|SIM3,, "Response type"
26 ebinalg, s, a, FILE,FILE|LIN|LOG,, "Algorithm for defining energy bins" 27 ebinalg, s, a, FILE,FILE|LIN|LOG,, "Algorithm for defining energy bins"
27 emin, r, a, 0.75,0.05,50.0, "Minimum energy (MeV)" 28 emin, r, a, 0.75,0.05,50.0, "Minimum energy (MeV)"
28 emax, r, a, 30.0,0.05,50.0, "Maximum energy (MeV)" 29 emax, r, a, 30.0,0.05,50.0, "Maximum energy (MeV)"
modules/comscripts/comobsbin.py
@@ -60,6 +60,7 @@ class comobsbin(ctools.csobservation): @@ -60,6 +60,7 @@ class comobsbin(ctools.csobservation):
60 self.obs().load(self['inobs'].filename()) 60 self.obs().load(self['inobs'].filename())
61 61
62 # Query parameters 62 # Query parameters
  63 + self['response'].string()
63 self._get_ebounds() 64 self._get_ebounds()
64 self._get_phases() 65 self._get_phases()
65 if not self._phases.is_empty(): 66 if not self._phases.is_empty():
@@ -582,63 +583,99 @@ class comobsbin(ctools.csobservation): @@ -582,63 +583,99 @@ class comobsbin(ctools.csobservation):
582 dpsi = self['dpsi'].real() 583 dpsi = self['dpsi'].real()
583 dphibar = self['dphibar'].real() 584 dphibar = self['dphibar'].real()
584 585
  586 + # Get calibration database and response type
  587 + caldb = gammalib.GCaldb('cgro', 'comptel')
  588 + response = gammalib.toupper(self['response'].string())
  589 +
585 # Initialse list of IAQ names 590 # Initialse list of IAQ names
586 iaqnames = [] 591 iaqnames = []
587 592
588 # Generate one IAQ for each energy boundary 593 # Generate one IAQ for each energy boundary
589 for i in range(ebounds.size()): 594 for i in range(ebounds.size()):
590 595
591 - # Set IAQ filename  
592 - iaqname = '%s/iaq_%6.6d-%6.6dkeV.fits' % \  
593 - (self['outfolder'].string(),  
594 - ebounds.emin(i).keV(), ebounds.emax(i).keV())  
595 - iaqfile = gammalib.GFilename(iaqname) 596 + # Handle simulated response
  597 + if response == 'SIM2' or response == 'SIM3':
596 598
597 - # Set global IAQ filename  
598 - iaqname_global = '%s/iaq_%6.6d-%6.6dkeV.fits' % \  
599 - (self._global_datastore,  
600 - ebounds.emin(i).keV(), ebounds.emax(i).keV())  
601 - iaqfile_global = gammalib.GFilename(iaqname_global) 599 + # Write header
  600 + self._log_header3(gammalib.NORMAL,
  601 + 'Use CALDB IAQ for %.3f - %.3f MeV' %
  602 + (ebounds.emin(i).MeV(), ebounds.emax(i).MeV()))
602 603
603 - # Write header  
604 - self._log_header3(gammalib.NORMAL, 'Compute IAQ for %.3f - %.3f MeV' % \  
605 - (ebounds.emin(i).MeV(), ebounds.emax(i).MeV())) 604 + # Build response name
  605 + iaqname = '%s(%.2f-%.2f)MeV(%.0f)deg' % \
  606 + (response, ebounds.emin(i).MeV(), ebounds.emax(i).MeV(),
  607 + dphibar)
606 608
607 - # If IAQ file exists in global datastore then do nothing  
608 - if iaqfile_global.exists():  
609 - iaqname = iaqname_global  
610 - self._log_value(gammalib.NORMAL, 'Global IAQ file exists', iaqfile_global.url()) 609 + # Raise an exception if response does not exist
  610 + filename = caldb.filename('', '', 'IAQ', '', '', iaqname)
  611 + if filename.is_empty():
  612 + msg = ('Could not find IAQ "'+iaqname+'" in calibration database. '
  613 + 'Please select a different response type.')
  614 + raise RuntimeError(msg)
611 615
612 - # If IAQ file exists then do nothing  
613 - elif iaqfile.exists():  
614 - self._log_value(gammalib.NORMAL, 'Local IAQ file exists', iaqfile.url()) 616 + # Log IAQ usage
  617 + self._log_value(gammalib.NORMAL, 'Use CALDB IAQ', iaqname)
615 618
616 - # ... otherwise compute and save it 619 + # Append IAQ name
  620 + iaqnames.append(iaqname)
  621 +
  622 + # ... otherwise handle modeled response
617 else: 623 else:
618 624
619 - # Initialise IAQ  
620 - iaq = gammalib.GCOMIaq(55.0, dchi, 50.0, dphibar) 625 + # Set IAQ filename
  626 + iaqname = '%s/iaq_%6.6d-%6.6dkeV.fits' % \
  627 + (self['outfolder'].string(),
  628 + ebounds.emin(i).keV(), ebounds.emax(i).keV())
  629 + iaqfile = gammalib.GFilename(iaqname)
  630 +
  631 + # Set global IAQ filename
  632 + iaqname_global = '%s/iaq_%6.6d-%6.6dkeV.fits' % \
  633 + (self._global_datastore,
  634 + ebounds.emin(i).keV(), ebounds.emax(i).keV())
  635 + iaqfile_global = gammalib.GFilename(iaqname_global)
  636 +
  637 + # Write header
  638 + self._log_header3(gammalib.NORMAL,
  639 + 'Compute IAQ for %.3f - %.3f MeV' %
  640 + (ebounds.emin(i).MeV(), ebounds.emax(i).MeV()))
  641 +
  642 + # If IAQ file exists in global datastore then do nothing
  643 + if iaqfile_global.exists():
  644 + iaqname = iaqname_global
  645 + self._log_value(gammalib.NORMAL,
  646 + 'Global IAQ file exists', iaqfile_global.url())
  647 +
  648 + # If IAQ file exists then do nothing
  649 + elif iaqfile.exists():
  650 + self._log_value(gammalib.NORMAL,
  651 + 'Local IAQ file exists', iaqfile.url())
  652 +
  653 + # ... otherwise compute and save it
  654 + else:
621 655
622 - # Set IAQ energy range  
623 - ebds = gammalib.GEbounds(ebounds.emin(i), ebounds.emax(i)) 656 + # Initialise IAQ
  657 + iaq = gammalib.GCOMIaq(55.0, dchi, 50.0, dphibar)
624 658
625 - # Generate continuum IAQ  
626 - spectrum = gammalib.GModelSpectralPlaw(1.0,-2.0,gammalib.GEnergy(1.0,'MeV')) 659 + # Set IAQ energy range
  660 + ebds = gammalib.GEbounds(ebounds.emin(i), ebounds.emax(i))
627 661
628 - # Compute IAQ  
629 - iaq.set(spectrum, ebds) 662 + # Generate continuum IAQ
  663 + spectrum = gammalib.GModelSpectralPlaw(1.0,-2.0,gammalib.GEnergy(1.0,'MeV'))
630 664
631 - # Save IAQ  
632 - iaq.save(iaqfile, True) 665 + # Compute IAQ
  666 + iaq.set(spectrum, ebds)
633 667
634 - # Log creation  
635 - self._log_value(gammalib.NORMAL, 'Local IAQ file created', iaqfile.url()) 668 + # Save IAQ
  669 + iaq.save(iaqfile, True)
  670 +
  671 + # Log creation
  672 + self._log_value(gammalib.NORMAL, 'Local IAQ file created', iaqfile.url())
636 673
637 - # Log IAQ  
638 - self._log_string(gammalib.NORMAL, str(iaq)) 674 + # Log IAQ
  675 + self._log_string(gammalib.NORMAL, str(iaq))
639 676
640 - # Append IAQ filename  
641 - iaqnames.append(iaqname) 677 + # Append IAQ filename
  678 + iaqnames.append(iaqname)
642 679
643 # Return 680 # Return
644 return iaqnames 681 return iaqnames
test/test_comobsbin.py
@@ -79,7 +79,7 @@ class Test(test): @@ -79,7 +79,7 @@ class Test(test):
79 comobsbin = self._comscript('comobsbin') 79 comobsbin = self._comscript('comobsbin')
80 80
81 # Setup command 81 # Setup command
82 - cmd = comobsbin+' inobs="'+self._obs+'" ebinalg="FILE" '+ \ 82 + cmd = comobsbin+' inobs="'+self._obs+'" response="MODEL" ebinalg="FILE" '+ \
83 'ebinfile="'+self._ebounds+'" phase="NONE" '+ \ 83 'ebinfile="'+self._ebounds+'" phase="NONE" '+ \
84 'coordsys="GAL" proj="TAN" '+ \ 84 'coordsys="GAL" proj="TAN" '+ \
85 'outfolder="comobsbin_cmd1" outobs="comobsbin_cmd1.xml" '+ \ 85 'outfolder="comobsbin_cmd1" outobs="comobsbin_cmd1.xml" '+ \
@@ -93,7 +93,7 @@ class Test(test): @@ -93,7 +93,7 @@ class Test(test):
93 self._check_result('comobsbin_cmd1.xml', 'comobsbin_cmd1') 93 self._check_result('comobsbin_cmd1.xml', 'comobsbin_cmd1')
94 94
95 # Setup command 95 # Setup command
96 - cmd = comobsbin+' inobs="file_that_does_not_exist.xml" ebinalg="FILE" '+ \ 96 + cmd = comobsbin+' inobs="file_that_does_not_exist.xml" response="MODEL" ebinalg="FILE" '+ \
97 'ebinfile="'+self._ebounds+'" phase="NONE" '+ \ 97 'ebinfile="'+self._ebounds+'" phase="NONE" '+ \
98 'coordsys="GAL" proj="TAN" '+ \ 98 'coordsys="GAL" proj="TAN" '+ \
99 'outfolder="comobsbin_cmd2" outobs="comobsbin_cmd2.xml" '+ \ 99 'outfolder="comobsbin_cmd2" outobs="comobsbin_cmd2.xml" '+ \
@@ -117,6 +117,7 @@ class Test(test): @@ -117,6 +117,7 @@ class Test(test):
117 # Set-up script 117 # Set-up script
118 bin = comscripts.comobsbin() 118 bin = comscripts.comobsbin()
119 bin['inobs'] = self._obs 119 bin['inobs'] = self._obs
  120 + bin['response'] = 'MODEL'
120 bin['ebinalg'] = 'FILE' 121 bin['ebinalg'] = 'FILE'
121 bin['ebinfile'] = self._ebounds 122 bin['ebinfile'] = self._ebounds
122 bin['phase'] = 'NONE' 123 bin['phase'] = 'NONE'