예제 #1
0
def GaussianSource(emin, emax, ra, dec, major_axis, minor_axis, position_angle,
                   **spectrumargs):
    """Observation Simulation GaussianSource flux definition"""
    xmldoc_out = minidom.getDOMImplementation().createDocument(
        None, None, None)

    try:
        flux = spectrumargs['flux']
    except KeyError:
        try:
            flux = Tools.getFlux("PowerLaw", emin, emax, **spectrumargs)
        except GetFluxError as e:
            raise SpectrumError(e)

    try:
        pli = spectrumargs['pl_index']
    except KeyError:
        raise SpectrumError(
            "GaussianSourceError: GaussianSource source must include power law index (pl_index)"
        )

    spectrumClass = xmldoc_out.createElement('SpectrumClass')
    spectrumClass.setAttribute('name', "GaussianSource")
    spectrumClass.setAttribute(
        'params',
        "{0},{1},{2},{3},{4},{5},{6},{7},{8}".format(flux, pli, ra, dec,
                                                     major_axis, minor_axis,
                                                     position_angle, emin,
                                                     emax))

    use_spectrum = xmldoc_out.createElement("use_spectrum")
    use_spectrum.setAttribute('frame', "galaxy")

    return spectrumClass, use_spectrum
예제 #2
0
def MapSource(emin, emax, fitsfile, **spectrumargs):
    """Observation Simulation Map Source flux definition"""
    xmldoc_out = minidom.getDOMImplementation().createDocument(
        None, None, None)

    try:
        flux = spectrumargs['flux']
    except KeyError:
        try:
            flux = Tools.getFlux('PowerLaw', emin, emax, **spectrumargs)
        except GetFluxError as e:
            raise SpectrumError(e)

    try:
        pli = spectrumargs['pl_index']
    except KeyError:
        raise SpectrumError(
            "MapSourceError: Cannot create MapSource without power law index (pl_index)."
        )

    spectrumClass = xmldoc_out.createElement('SpectrumClass')
    spectrumClass.setAttribute('name', 'MapSource')
    spectrumClass.setAttribute(
        'params', "{0},{1},{2},{3},{4}".format(flux, pli, fitsfile, emin,
                                               emax))

    use_spectrum = xmldoc_out.createElement('use_spectrum')
    use_spectrum.setAttribute('frame', "galaxy")

    return spectrumClass, use_spectrum
예제 #3
0
def FileSpectrum(name,
                 spectype,
                 emin,
                 emax,
                 directory,
                 frame='galactic',
                 ra=None,
                 dec=None,
                 glon=None,
                 glat=None,
                 specfile=None,
                 **spectrumargs):
    """Observation Simulation FileSpectrum flux definition"""
    xmldoc_out = minidom.getDOMImplementation().createDocument(
        None, None, None)

    try:
        flux = spectrumargs['flux']
    except KeyError:
        try:
            flux = Tools.getFlux(spectype, emin, emax, **spectrumargs)
        except GetFluxError as e:
            raise SpectrumError(e)

    if specfile is None:
        try:
            filename = Tools.writeSpectrum(name, spectype, emin, emax,
                                           directory, **spectrumargs)
        except WriteSpectrumError as e:
            raise SpectrumError(e)
    else:
        filename = specfile

    spectrumClass = xmldoc_out.createElement("SpectrumClass")
    spectrumClass.setAttribute("name", "FileSpectrum")
    spectrumClass.setAttribute("params",
                               "flux={0},specFile={1}".format(flux, filename))

    if frame == 'galactic':
        direction = xmldoc_out.createElement("galactic_dir")
        direction.setAttribute("l", "{}".format(glon))
        direction.setAttribute("b", "{}".format(glat))
    elif frame in ['icrs', 'fk5']:
        direction = xmldoc_out.createElement("celestial_dir")
        direction.setAttribute("ra", "{}".format(ra))
        direction.setAttribute("dec", "{}".format(dec))
    else:
        raise SpectrumError(
            "FileSpectrumError: Cannot create a direction with the frame {}".
            format(frame))

    return spectrumClass, direction
예제 #4
0
def FileSpectrumMap(name,
                    spectype,
                    emin,
                    emax,
                    fitsfile,
                    directory,
                    specfile=None,
                    **spectrumargs):
    """Observation Simulation FileSpectrumMap flux definition

    This flux definition takes all FileSpectrum parameters as well as the MapSource parameters
    """
    xmldoc_out = minidom.getDOMImplementation().createDocument(
        None, None, None)

    if specfile is None:
        try:
            filename = Tools.writeSpectrum(name, spectype, emin, emax,
                                           directory, **spectrumargs)
        except WriteSpectrumError as e:
            raise SpectrumError(e)
    else:
        filename = specfile

    try:
        flux = spectrumargs['flux']
    except KeyError:
        try:
            flux = Tools.getFlux(spectype, emin, emax, **spectrumargs)
        except GetFluxError as e:
            raise SpectrumError(e)

    spectrumClass = xmldoc_out.createElement('SpectrumClass')
    spectrumClass.setAttribute('name', 'FileSpectrumMap')
    spectrumClass.setAttribute(
        'params',
        "flux={0},fitsFile={1},specFile={2},emin={3},emax={4}".format(
            flux, fitsfile, filename, emin, emax))

    use_spectrum = xmldoc_out.createElement('use_spectrum')
    use_spectrum.setAttribute('frame', "galaxy")

    return spectrumClass, use_spectrum
예제 #5
0
def MapCube(spectype, emin, emax, efile, directory, **spectrumargs):
    """Observation Simulation MapCube flux definition"""
    xmldoc_out = minidom.getDOMImplementation().createDocument(
        None, None, None)
    try:
        flux = spectrumargs['flux']
    except KeyError:
        try:
            flux = Tools.getFlux(spectype, emin, emax, **spectrumargs)
        except GetFluxError as e:
            raise SpectrumError(e)

    spectrumClass = xmldoc_out.createElement('SpectrumClass')
    spectrumClass.setAttribute('name', "MapCube")
    spectrumClass.setAttribute('params', "{0},{1}".format(flux, efile))

    use_spectrum = xmldoc_out.createElement('use_spectrum')
    use_spectrum.setAttribute('frame', "galaxy")

    return spectrumClass, use_spectrum
예제 #6
0
def Isotropic(emin, emax, **spectrumargs):
    """Observation Simulation Isotropic flux definition"""
    xmldoc_out = minidom.getDOMImplementation().createDocument(
        None, None, None)
    try:
        flux = spectrumargs['flux']
    except KeyError:
        try:
            flux = Tools.getFlux("PowerLaw", emin, emax, **spectrumargs)
        except GetFluxError as e:
            raise SpectrumError(e)

    spectrumClass = xmldoc_out.createElement("SpectrumClass")
    spectrumClass.setAttribute("name", "Isotropic")
    spectrumClass.setAttribute("params",
                               "{0},{1},{2},{3}".format(flux, pli, emin, emax))

    use_spectrum = xmldoc_out.createElement("use_spectrum")
    use_spectrum.setAttribute("frame", "galaxy")

    return spectrumClass, use_spectrum
예제 #7
0
def GammaPointSource(spectype,
                     emin,
                     emax,
                     frame='galactic',
                     ra=None,
                     dec=None,
                     glon=None,
                     glat=None,
                     **spectrumargs):
    """Gamma-ray point source flux definition"""
    xmldoc_out = minidom.getDOMImplementation().createDocument(
        None, None, None)

    particle = xmldoc_out.createElement("particle")
    particle.setAttribute("name", "gamma")

    if spectype == "Monochromatic":
        try:
            e = spectrumargs['energy']
        except KeyError:
            raise SpectrumError(
                "GammaPointSourceError: Energy must be supplied in order to add a monochromatic source."
            )

        energy = xmldoc_out.createElement("energy")
        energy.setAttribute("e", "{}".format(e))
        particle.appendChild(energy)

    elif spectype == "PowerLaw":
        power_law = xmldoc_out.createElement("power_law")
        try:
            pli = spectrumargs['pl_index']
        except KeyError:
            raise SpectrumError(
                "GammaPointSourceError: PowerLaw source must include power law index (pl_index)"
            )

        power_law.setAttribute("emin", "{}".format(emin))
        power_law.setAttribute("emax", "{}".format(emax))
        power_law.setAttribute("gamma", "{}".format(pli))
        particle.appendChild(power_law)

    elif spectype == "BrokenPowerLaw":
        power_law = xmldoc_out.createElement("power_law")
        try:
            pli = spectrumargs['pl_index']
            gamma2 = spectrumargs['gamma2']
            ebreak = spectrumargs['ebreak']
        except KeyError:
            raise SpectrumError(
                "GammaPointSourceError: BrokenPowerLaw source must include low energy power law index (pl_index), high energy power law index (gamma2), and break energy (ebreak)."
            )

        power_law.setAttribute("emin", "{}".format(emin))
        power_law.setAttribute("emax", "{}".format(emax))
        power_law.setAttribute("gamma", "{}".format(pli))
        power_law.setAttribute("ebreak", "{}".format(ebreak))
        power_law.setAttribute("gamma2", "{}".format(gamma2))
        particle.appendChild(power_law)
    else:
        raise SpectrumError(
            "GammaPointSourceError: Cannot create source with spectrum type {0}"
            .format(spectype))

    if frame == 'galactic':
        direction = xmldoc_out.createElement("galactic_dir")
        direction.setAttribute("l", "{}".format(glon))
        direction.setAttribute("b", "{}".format(glat))
    elif frame in ['icrs', 'fk5']:
        direction = xmldoc_out.createElement("celestial_dir")
        direction.setAttribute("ra", "{}".format(ra))
        direction.setAttribute("dec", "{}".format(dec))
    else:
        raise SpectrumError(
            "GammaPointSourceError: Cannot create a direction with the frame {}"
            .format(frame))

    return particle, direction