\documentclass[11pt]{article}
%\documentstyle[11pt,epsfig,url]{article}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[english]{babel}
\usepackage{url}
\usepackage{graphicx}

% package a mettre pour faire du pdf
\usepackage{palatino}

%  Definition pour Docs Sophya
\usepackage{defsophya}



\setlength{\parskip}{\smallskipamount} %\documentclass[a4paper,10pt]{article}
\newenvironment{maliste}%
{ \begin{list}%
        {$\ast$}%
        {\setlength{\labelwidth}{20pt}%
         \setlength{\leftmargin}{25pt}%
         \setlength{\itemsep}{\parsep}}}%
{ \end{list} }
\newcommand {\ddate}    {April~12,~2000}

\begin{document}
%  The title page - top of the page with the title of the paper
\begin{titlepage}
\titrehp{The SkyMixer \\ (SkyT and PMixer modules)}
%  Authors list
\auteurs{
R. Ansari            &  ansari@lal.in2p3.fr       \\
S. Henrot-Versille   &  versille@in2p3.fr     
}
%  The title page - bottom of the page with the paper number
\titrebp{2}
\end{titlepage}

%--------------------------------------- Abstract ---------------------
\begin{abstract}
This note gives a description of the SkyMixer which makes
use of the PMixer and the SkyT
modules of the Sophya library.
In a first part, we provide a user-guide on how to use the
skymixer and the extractRS program, and how to
fill the corresponding datacards.
In a second part, we describe more technically
the different classes
of the SkyT module. 
\end{abstract}
\newpage
\tableofcontents
\newpage


\section{Skymixer and its datacard}
The skymixer program adds several sky component maps
simulated or measured at several frequencies, such as,
for example, foregrounds (synchrotron radiation, dust, radio-sources...)
and the microwave background.
It takes into account the corresponding radiation spectra
$F_\nu$ (the one of a black-body for microwave background,
a power law spectrum for synchrotron...),
and integrates them over a given detector filter frequency-re\-sponse
$W_\nu$ according to:
\begin{eqnarray}
S &=& \sum_{sky\  components} \int_0^\infty F_\nu W_\nu d\nu \ .
\end{eqnarray}
The output maps\footnote{$F_\nu$ is in $\hbox{W}/\hbox{m}^2/\hbox{sr}/\hbox{Hz}$
and $d\nu$ is in $\hbox{GHz}$, while $W_\nu$ is dimensionless.} are in $10^{-9}\hbox{W}/\hbox{m}^2/\hbox{sr}$.

The interaction between the user and the skymixer is done
using ASCII cards. The keywords one may use are described below.

The way to call the skymixer program is the following one:
\begin{verbatim}
 Usage: skymixer paramFile outputfits [outppfname]
\end{verbatim}
where paramFile
is the name of the datacard (described below) and	
outputfits is the name of the Fits file in which the
final map will be saved\footnote{PPFName stands for Planck Persistent File (which can be read using piapp or spiapp).}.
When asking ``skymixer -h'', the previous usage line will appear on the
screen.

In the datacards, the lines are activated with the $@$ symbol
at the start of line. All other lines are treated as comments.
However for clarity, we use  
$\#$ to mark commented lines.

\subsection{Input maps}
	One has to define the number of components one wants to add
	and the characteristics	
	of the input maps (namely the NSide of HealPix maps):
	\begin{verbatim}
	#  SKYMIX  NbComponents  NSide_HealPix
	@SKYMIX  1 2048
	\end{verbatim}
	Note that, within this scheme, only maps with the same NSide can
	be added.

 	In the case the user wants to perform a check on the PDMTYPE
 	keyword for the different inputs files, he can use the 
 	above CHECKPDMTYPE command (note that by default, no check
 	is performed).
	\begin{verbatim}
 	@CHECKPDMTYPE
 	\end{verbatim}


	In the case the files containing the 
	maps  are not in the
	working directory, it is possible to precise the path to
	their location:
	\begin{verbatim}
	 #  MAPPATH  PathForFITS   
	 #  path for input Sky Component FITS files , 
	 #   and EmissionSpectra files 
	 MAPPATH /exp/planck/data/
	\end{verbatim}

	To have access to different printout, one can play with the
	DEBUGLEVEL and PRINTLEVEL keywords:
	\begin{verbatim}
	 #  Define the Debug level
	 @DEBUGLEVEL  0
	 #  Define the Print level
	 @PRINTLEVEL  5
	\end{verbatim}
	when set to 0, almost no printout will be given.

\subsection{Detection filter}
	Then one has to define the detection frequency 
	filter response (cf. section
	\ref{specresp}). 
	For the example, for a gaussian filter (cf. section \ref{gaussFilt}), 
	one should use:
	\begin{verbatim}
	 #  Defining the Detection filter pass - band
	 #  GAUSSFILTER -> Gaussian filter
	 #  GAUSSFILTER  Nu0 Sigma_Nu A NuMin NuMax
	 @GAUSSFILTER 143 12 0.84 50. 300.
	\end{verbatim}
	Note that the frequencies have to be given 
	in $\hbox{GHz}$.
	In the case of a detection filter defined in a Fits file
	with 2$\times$n arrays (one for the frequencies and the other for
	the transmission values), the syntax would be:
	\begin{verbatim}
	 #  Defining the Detection filter pass - band
	 #  FILTERFITSFILE -> Filter (nu, T(nu)) from FITS 
	 #  FILTERFITSFILE FileName NuMin NuMax
	 @FILTERFITSFILE filterfile.fits 50. 230.
	\end{verbatim}

\subsection{Sky components}
	Once the detector filter has been defined, one has to 
	define the different sky components one wants to add
	and
	their corresponding radiation spectra. The maps are
	given the MAPFITSFILEi keyword where i corresponds
	to a given component (synchrotron radiation,
	dust...): i has to match between the map
	and the radiation spectrum. One also has to specify
	a normalization factor corresponding to each component.
	\begin{verbatim}
	#  ----        Sky components  ---------
	#  MAPFITSFILEi FITSfilename Normalisation
	@MAPFITSFILE4  dust.fits  1.0  
	\end{verbatim}	 
	Here the number 4 (i=4) means that we are refering to
	the fourth sky components. And the normalization factor
	of the map is set to 1.
	
\subsection{Radiation Spectrum}
The radiation spectra corresponding to the sky component
maps can either be defined in a fits files, or by the instanciation
of the RadSpectra class (cf. \ref{radspec}), or they can depend
on the position in the map. The different cases are treated differently
as explained below. There is also the possibility of adding
a dipole component without the use of a map, as described below.

\subsubsection{A Fits file}
The user can provide the skymixer program with his own 
Fits file containing 2 $\times$ n arrays (one for the frequencies and
one for the corresponding flux values), and a frequency range.
It will be done for example using:
 \begin{verbatim}
 #      ---   Emission Spectra definition -----
 #   SPECTRAFITSFILEi  FITSfilename  NuMin NuMax 
 @SPECTRAFITSFILE4  pl.fits 100 600  
\end{verbatim}
The flux function will returns 0 outside of the 
$[ \hbox{Numin,Numax} ]$ range.

\subsubsection{The RadSpectra class}
For well-known spectra, the user does not have to provide
a Fits file, nor the function, but rather use already coded
functions, filling the desired parameter values.
For example, for a black body emission spectrum:
\begin{verbatim}
 #   Other possible definition of emission spectra
 #   BLACKBODYi  temperature
 #  The blackbody object returns flux in units of 
 #    watt/m2/sr 
 #   We thus scale the map (x 1.e17) 
 @MAPFITSFILE2  cossin.fits  1.e17 
 @BLACKBODY2 2.726
\end{verbatim}
The user has to give the temperature (here 2.726K).

Another example is given below where one wants to use a
power law spectrum for the radiation:
\begin{verbatim}
 #   For power-law spectrum  f = a ((nu-nu0)/dnu)^b)
 #   POWERLAWSPECTRAi  a nu0 dnu b Fmin Fmax
 @MAPFITSFILE3  noise.fits    0.1 
 @POWERLAWSPECTRA3 1. 150. 50. -0.5 100. 500.
\end{verbatim}

\subsubsection{Map position dependence}
In the case the emission spectrum depends on the position
in the map (for example for the case of synchrotron radiation),
one should use the BETAFITSFILE key word as follows:
\begin{verbatim}
 #  For an emission spectrum which depends  
 #  on the position in the map -> synchrotron 
 #  for instance (nu/nu0)^(-beta(theta,phi))
 #  408e-3 is the normalisation frequency of the map
 @MAPFITSFILE1 Sync/Template408MHz.fits 0.2
 #  BETAFITSFILE BetaMap NormFreq NsideRePixelization
 @BETAFITSFILE1 Sync/SpectralIndex.fits  408e-3 16 
\end{verbatim}
In this case, a second argument is needed for BETAFITSFILEi
which corresponds to the  normalization frequency value.
It is possible to perform the computation using a $\beta$ map
which has a different number of pixels than the sky map. 
It is also possible to change the NSideHealpix of the
$\beta$ map for example to low down the resolution for faster
computation. This is done using the third argument
(NsideRePixelization, here taken to be 16). For negative values
of NsideRePixelization, the original $\beta$ map resolution
is used.

One can refer to Eq.~\ref{pls} for the formula of the
radiation spectrum built from the $\beta$ map. In this equation, 
$\nu_0$ is set to 0 and $\delta \nu$ is given the value of
the normalisation
frequency of the map. 

\subsubsection{The dipole}	
The dipole can be treated in a different manner than the other
sky components,
using the DIPOLE card, as follows:
\begin{verbatim}	
# For a dipole sky map and emission spectrum
# use: DIPOLE theta phi amplitude delta_temperature
# theta and phi are in radian, delta_temp in K
@DIPOLE1 1.2  0.3  1. 3E-3
\end{verbatim}
In that case no MAPFITSFILEi is needed: the DIPOLE
card will create the sky map according to the
$(\theta,\phi)$ user requirement and integrate
the dipole radiation spectrum (DerivBlackBody - cf.~Eq.\ref{derivBB})
over the filter response.
Note that if the user prefers to give his own map, he
can do it as well.

\section{Treating point sources}
The extractRS code builds a full sky map from two data sets:
\begin{itemize}
\item{} a list of point sources with emission spectra described at a
set of discrete frequencies
\item{} maps of a small patch of the sky with emission spectrum described
at a set of discrete frequencies.
\end{itemize}

It treats the  case when one has made a simulation of a patch of the sky
producing a set of maps corresponding to the sky emission and the 
point sources emission at 
discrete frequencies,
and wants to build a random map on the basis of these
two informations.
The map produced by 
extractRS can then be given to the skymixer program to be
added to other sky components. 

As for skymixer, the user interacts with extractRS through
the use of a datacard (described below).  The way to call
it is the following one:
\begin{verbatim}
   Usage: extractRS parameterFile outputfits  [outppf]
\end{verbatim}
where parameterFile is the datacard, and outputfits
corresponds to the Fits file in which the final map will be
saved.

An example of the datacard is shown below:
\begin{verbatim}
#  EXT_RS  NbComponents  NSide_HealPix
@EXT_RS  1 256

#  RD_EXT_PATH  PathForFITS   
#  path for input Sky Component FITS files , 
#  from which the RadSpec files will be read
@RS_EXT_PATH /exp/planck/CartesRT/

#  Sky ``map'' for different frequencies 
#  From which the radspectra will be read
#  RADSPECMAPi FITSfilename 
@RADSPECMAP1 	eran102_441_00015000mhz.fits

# Source point ``map'' for different freq
# From which the radspectra will be read
#  SOURCEPTMAPi FITSfilename freq(MHz)
@SOURCEPTMAP1 	eran102_441_00015000mhz.s_rare

# Filter definition now !!
# define the detector (only one)
@GAUSSFILTER 143 12 0.84 50. 300.
\end{verbatim}
We first indicate in the datacard (after the EXT$\_$RS keyword):
\begin{maliste}
\item the number of frequency components we are going to
process: in the example the code will only process
one frequency component. 
\item and the NSideHealpix corresponding to the healpix output maps
\end{maliste}

Then comes the path (if any) to the maps, followed by the
name of the fits files containing the ``maps''
(these maps are not Healpix spheres but matrices). The keyword for
the frequency
components is RADSPECMAPi (with i being the sky component number)
and for the sources: SOURCEPTMAPi. 

The names of the fits
file should contain the frequency of the map in units of  $\hbox{MHz}$.
For example: 
\begin{verbatim}
@RADSPECMAP1 	eran102_441_00015000mhz.fits
\end{verbatim}
corresponds to a frequency of 15000 $\hbox{Mhz}$.
The sky maps definition is followed by the point source
fits file, with the keyword SOURCEPTMAPi. 

Then comes the definition of the filter (here it is a
gaussian filter at 143 $\hbox{GHz}$).

\section{Simulating components and adding them}
For quick simulations, one can use two codes to generate maps,
detector filter responses and radiation spectra:
\begin{itemize}
\item{} {{\bf tgsky:}}\\
	this code generates a sky map in a Fits file.	
\item{} {{\bf tgrsr:}}\\
	this code writes in a Fits file the
	definition of a RadSpectraVec or of a SpecRespVec	
	(i.e. one frequency vector and the corresponding
	transmission or flux vector.)
\end{itemize}
\noindent The way to use these two functions is the following one:
\begin{itemize}
\item{} {{\bf tgsky:}}
\begin{verbatim}
  Usage: tgsky NSide TypSky Params FitsFile [PPF] 
\end{verbatim}
where PPF stands for Planck Persistent File (which can be read using piapp or spiapp),
NSide is the Healpix map parameter and TypSky and Params are described here:
\begin{maliste}
\item  if TypSky = 0, the map will be filled with a gaussian noise,
	the parameters (Params) are therefore the mean value and the sigma
	of the gaussian.
\item  if TypSky = 1, the map will be filled with a $1/\hbox{f}$ noise using
	the OOFNoise generator. The parameters to give are the
	sigma of the noise and a constant offset.
\item  if TypSky = 2, the map is filled with an analytical function of the
	form:	
	\begin{eqnarray}
	f &=& K \cos(a\theta)\sin(b\phi)+m
	\end{eqnarray}
	and the corresponding parameters are (in this order): K,a,b,m.
\item  if TypSky = 3, the map is filled with a dipole,
	the corresponding parameters are (in this order): theta,phi
	corresponding to the dipole orientation
\end{maliste}
\item{}{{\bf tgrsr:}}
\begin{verbatim}
 Usage: tgrsr choice Params NPoints FitsFileName 
                      [ImageR4FITSName] [ppfname]
\end{verbatim}
where choice, and Params are described below, and NPoints corresponds
to the number of elements in the generated vectors.
\begin{maliste}
\item if choice = 0, the code will generate a gaussian spectrum in a Fits file.
	Params are therefore the parameters of the gaussian plus the
	minimum and the maximum frequency.
 	In the order:  A,Nu0,DNu,MinFreq,MaxFreq.
\item if choice = 1, the code will generate a power law spectrum in a 
        Fits file. Params are therefore, in the order:\\
        A, Nu0, dnu, b, MinFreq, MaxFreq
\end{maliste}
\end{itemize}



\section{The SkyT module}
The SkyT module is composed of two types of classes:
\begin{itemize}
\item{} one which corresponds to an emission spectrum of
radiation, which is called RadSpectra
\item{} one which corresponds to the spectral response
of a given detector (i.e. corresponding to a detector
filter in a given frequency domain), which is called
SpectralResponse.
\end{itemize}
In the coming sub-sections, we summarize the different functions
of these two classes and the corresponding subclasses.
For more informations about the classes, and the functions
the user may want to use (to have access or reset some
parameter values for example), we refer the reader to 
\cite{DOX-Sophya}.

All frequencies are expressed in $\hbox{GHz}$, which enables
us to represent wavelengths from the radio up to the optical 
range at a reasonnable accuracy using double values.

\subsection{ConvTools}
The ConvTools class is a very simple class where are
defined some needed constants for the computation of the
spectral emission function, such as:
\begin{verbatim}
// Boltzman constant  J/K
double ConvTools::kb =  1.380662e-23;     
// Mean value of the cmb temperature (K)
double ConvTools::tcmb=2.728;
// Planck constant in Js
double ConvTools::hpl=6.626176e-34;   
// Light speed  PDG 1992 m/s
double ConvTools::c=299792458.; 
\end{verbatim}

\subsection{SpectralResponse}
\label{specresp}
SpectralResponse 
is an abstract class representing 
a detector frequency filter
response, $W_\nu$ as a function of the frequency.
Several subclasses
have been written within the SkyT module which are listed
in the following subsections.
The constructor takes as arguments the
minimum and maximum values of the frequency range on
which the detector response is defined

The main public member function is the  
transmission function which has to be implemented
in the subclasses and is purely virtual at this stage:
\begin{verbatim}
virtual double transmission(double nu) const =0 ; 
\end{verbatim}
The () operator has also been redefined so that
one can access the transmission value of the detector's
filter directly writting for example myFilter(myfrequency).

Other member functions  are implemented at this level, but still
are virtual functions that can be re-implemented in the
sub-classes: they respectively returns the minimum, the
maximum, the mean and the peak values of the frequency
range (where the peak is defined as the maximum of the transmission
spectrum), but also the value of the transmission at the so-called
peak. One can also change the range in frequency of the filter
using the {{\it setMinMaxFreq}} function.
%\begin{verbatim}
% virtual double minFreq() const; 
% virtual double maxFreq() const; 
% virtual double meanFreq() const;
% virtual double peakFreq() const;
% virtual double peakTransmission() const;
% virtual void	setMinMaxFreq(double numin, double numax);
%\end{verbatim}
For all the sub-classes, $\nu$ is given in units of $GHz$ and
$W_\nu$ is dimensionless.

Since the user may want to integrate the detector response
within a given frequency range:
\begin{eqnarray}
\int_{\nu_{min}}^{\nu_{max}} F_\nu \delta \nu\ \ \ ,
\end{eqnarray}
the following functions are
available:
\begin{verbatim}
double IntegratedSpect(double numin,double numax) 
double logIntegratedSpect(double numin,double numax)
double IntegratedSpect() 
double logIntegratedSpect() 
\end{verbatim}
When no frequency range is defined the default values are used.
As, for some spectra, the calculation is more accurate when
one performs the numerical integration using a logarithmic
frequency scale.

The following subsections are devoted to the description of the
SpectralResponse subclasses which are already implemented.
\subsubsection{SquareFilter}
\begin{center}
\dclsbb{SpectralResponse}{SquareFilter}
\end{center}
The square filter is the simplest filter one can think of:
it is defined by a minimum and a maximum frequencies. 
\begin{verbatim}
SquareFilter (double numin, double numax)
\end{verbatim}
The transmission function returns 1 when the tested frequency
is within this range and 0 outside.
For the peakFrequency and peakTransmission functions, the square
filter returns respectively the frequency and the transmission
corresponding to the middle of the frequency range.
To use the SquareFilter class, one should include the squarefilt.h file.

\subsubsection{TriangleFilter}
\begin{center}\dclsbb{SpectralResponse}{TriangleFilter}\end{center}
For the triangle filter, as it was the case for the
square filter, its name itself is sufficient to define it:
the corresponding constructor is:
\begin{verbatim}
 TriangleFilter (double numin, double numax,
		double nupeak, double valueatpeak); 
\end{verbatim}
To use the TriangleFilter class, one should include the trianglefilt.h file.

\subsubsection{GaussianFilter}
\label{gaussFilt}
\begin{center}\dclsbb{SpectralResponse}{GaussianFilter}\end{center}
The constructor of the gaussian filter defines the parameters
of the corresponding gaussian:
\begin{verbatim}
 GaussianFilter (double nu0, double s, double A=1., 
           double numin=0., double numax= 9.e49); 
\end{verbatim}
where the transmission function returns:
\begin{eqnarray}
\label{gaussian}
W_\nu&=& A  e^{-{({\nu-\nu_0/ s})^2}};
\end{eqnarray}
%There are functions to reset or
%get back the value of the parameters (there are
%described in \cite{}. 
%using the 
%following functions:
%\begin{verbatim}
%  double giveNorm()
%  double giveNu0()
%  double giveDNu()
%\end{verbatim}
%or reset them with:
%\begin{verbatim}
%  virtual void setParams(double nu0, double s, double a=1.);
%\end{verbatim}
To use the GaussianFilter class, one should include the gaussfilt.h file.

\subsubsection{SpecRespVec}
\begin{center}\dclsbb{SpectralResponse}{SpecRespVec}\end{center}
One may also want to give the filter of a detector as a 
set of frequencies and the corresponding filter transmission values,
when there is no analytic expression to describe it.
In that case he/she should use the SpecRespVec class:
\begin{verbatim}
  SpecRespVec(Vector const & nu, Vector const & fdenu, 
              double numin, double numax)
\end{verbatim}
The first vector (called nu) is the frequency vector and the
second one (called fdenu) is the corresponding transmission:
note that the two vectors should have the same length, otherwise
an exception will be launched ({\it SzMismatchError}).

%One can access the different vectors with the use
%of appropriate functions (cf. \cite{}).
%Several functions are defined to access these vectors, either
%as a whole or element per element:
%\begin{verbatim}
%  Vector&  getNuVec()  { return _vecOfNu; } ;
%  Vector& getTNuVec()  { return _vecOfFDeNu; }
%  double getNuVec(int i) const { return _vecOfNu(i); }
%  double getTNuVec(int i) const { return _vecOfFDeNu(i); }
%  int NbElts() const { return _size;}
%\end{verbatim}
To use the SpecRespVec class, one should include the specrespvector.h file.

\subsection{RadSpectra}
\label{radspec}
The name RadSpectra stands for Radiation Spectrum.
The aims of RadSpectra is to define a base class
for the radiation emission spectra. It is therefore
abstract and contains one virtual member function 
which has to be implemented in the subclasses:
\begin{verbatim}
    virtual double flux(double nu) const =0;
\end{verbatim}
This function returns the value of the
flux (the spectral energy distribution), $F_\nu$,
as a function of the frequency $\nu$,
As in the SpectralResponse class,
the () operator has been redefined at this level, so that
the user can access the flux value, either by calling the
function or directly by using this operator.

The constructor takes as an argument the minimum
and the maximum frequency of the spectrum, if any.
In the case the user does not want to specify these
values, there are set respectively to 0. and $9.10^{49}$
by default.
For all the sub-classes, $\nu$ is given in units of $\hbox{GHz}$ and
the flux is returned in units of $\hbox{W}/\hbox{m}^2/\hbox{sr}/\hbox{Hz}$.

%We also defined functions to access the minimum, maximum,
%peak frequency values, or to change them 
%(see \cite{}). 
%And the user may change the
%values of the frequency range using the function:
%\begin{verbatim}
%virtual void	 setMinMaxFreq(double numin, double numax);
%\end{verbatim}
One may also want to  integrate the emission
spectrum: this can be done in a given frequency
range, or in the full range of definition of the spectrum,
or  taking into account the
SpectralResponse (in frequency) of a detector (see section \ref{specresp}):
\begin{verbatim}
  virtual double integratedFlux
            (double numin, double numax)
  virtual double integratedFlux()
  virtual double filteredIntegratedFlux 
            (SpectralResponse const & filter, 
             double numin, double numax)
  virtual double filteredIntegratedFlux
            (SpectralResponse const & filter)
  virtual double logIntegratedFlux
            (double numin, double numax) 
  virtual double logIntegratedFlux() 
  virtual double filteredLogIntFlux
            (SpectralResponse const & filter, 
             double numin, double numax)
  virtual double filteredLogIntFlux
            (SpectralResponse const & filter);
\end{verbatim}

Several sub-classes of RadSpectra have been defined, which are listed
below with their corresponding characteristics.
\subsubsection{BlackBody}
\begin{center}\dclsbb{RadSpectra}{BlackBody}\end{center}
This class corresponds to the emission spectrum of a 
blackbody radiation: by default the temperature of the 
blackbody is 2.728K (as defined in convtools.cc), but when
the object is instanciated the temperature 
can be given any other value.
\begin{verbatim}
  BlackBody (double temp = ConvTools::tcmb);
\end{verbatim}
The flux function is the well known formula: 
\begin{eqnarray}
F_\nu &=& {2 h_{pl} (1.10^9*\nu)^3 / c^2 (e^{{h_{pl}(1.10^9*\nu) / kT}} -1)}
\end{eqnarray}

%In addition to the flux member function, we can get or set the
%temperature of the blackbody spectrum (see \cite{}).
%\begin{verbatim}
%  double getTemperature() 
%  void setTemperature(double newtemp)
%\end{verbatim}
To use the BlackBody class, one should include the blackbody.h file.


\subsubsection{DerivBlackBody}
\begin{center}\dclsbb{RadSpectra}{DerivBlackBody}\end{center}
This class corresponds to the emission spectrum of a 
the dipole (since its emission spectrum is the derivation
of a blackbody spectrum wrt the temperature): 
by default the temperature of the 
DerivBlackBody is set 2.728K (as defined in convtools.cc), but when
the object is instanciated the temperature 
can be given any other value.
\begin{verbatim}
  DerivBlackBody (double temp = ConvTools::tcmb);
\end{verbatim}
The flux function is simply given by: 
\begin{eqnarray}
\label{derivBB}
F_\nu &=& {2 h_{pl} (1.10^9*\nu)^3  {h_{pl}1.10^9*\nu \over k T^2}
	{e^{{h_{pl}(1.10^9*\nu) \over kT}}\over c^2 (e^{{h_{pl}(1.10^9*\nu) \over kT}} -1)^2}}
\end{eqnarray}

%In addition to the flux member function, we can get or set the
%temperature as for the spectrum (see \cite{}).:
%\begin{verbatim}
%  double getTemperature() 
%  void setTemperature(double newtemp)
%\end{verbatim}
To use the DerivBlackBody class, one should include the derivblackbody.h file.

\subsubsection{PowerLawSpectra}
\begin{center}\dclsbb{RadSpectra}{DerivBlackBody}\end{center}
This class corresponds to a power law spectrum, the
flux function being defined as follows:
\begin{eqnarray}
\label{pls}
I_\nu &=& A ({\nu-\nu_0\over \delta\nu})^\beta 
\end{eqnarray}
The constructor takes as arguments the parameters of this
function and therefore reads:
\begin{verbatim}
PowerLawSpectra(double a, double beta, double nu0, 
	double dnu, double numin=0., double numax=9.e49);
\end{verbatim}
%The intrinsic member functions of this class 
%helps getting back these parameters, once an object of this class
%has been
%instanciated:
%\begin{verbatim}
%  double giveNorm()
%  double giveNu0()
%  double giveDNu()
%  double giveExp() 
%\end{verbatim}
%One can also set them using:
%\begin{verbatim}
%  void setNorm(double myvalue)
%  void setNu0(double myvalue)
%  void setDNu(double myvalue)
%  void setExp(double myvalue) 
%\end{verbatim}
%
To use the PowerLawSpectra class, one should include the nupower.h file.


\subsubsection{RadSpectraVec}
\begin{center}\dclsbb{RadSpectra}{RadSpectraVec}\end{center}
As in the case of the SpectralResponse class, one may define the radiation
spectrum with two vectors: one for the frequencies and the second for the
values of the flux function. In that case, the class to use is RadSpectraVec
and the corresponding constructor is:
\begin{verbatim}
 RadSpectraVec (Vector const nu, Vector const fdenu, 
		double numin=0., double numax=9.e49);
\end{verbatim}
%The following functions helps getting back the input vectors, or their
%number of elements:
%\begin{verbatim}
%  Vector&  getNuVec()
%  Vector& getTNuVec()
%  double getNuVec(int i)
%  double getTNuVec(int i)
%  int NbElts() 
%\end{verbatim}
To use the RadSpectraVec class, one should include the radspecvector.h file.

\begin{thebibliography}{99}
\bibitem{DOX-Sophya}
\url{http://www.sophya.org/}
\end{thebibliography}
\end{document}
