Index: trunk/Cosmo/SimLSS/planckspectra.cc
===================================================================
--- trunk/Cosmo/SimLSS/planckspectra.cc	(revision 3325)
+++ trunk/Cosmo/SimLSS/planckspectra.cc	(revision 3347)
@@ -105,11 +105,12 @@
 //************************************************************************
 PlanckSpectra::PlanckSpectra(double T)
-  : T_(T) , approx_(0) , deriv_(0) , typvar_(0) , typspec_(0) , unitout_(0)
+  : T_(T) , spectraapprox_(PLANCK) , spectrafunc_(VALUE) , spectravar_(NU)
+  , spectraunit_(ANGSFLUX) , spectrapower_(POWER)
 {
 }
 
 PlanckSpectra::PlanckSpectra(PlanckSpectra& s)
-  : T_(s.T_) , approx_(s.approx_) , deriv_(s.deriv_) , typvar_(s.typvar_) , typspec_(s.typspec_)
-  , unitout_(s.unitout_)
+  : T_(s.T_) , spectraapprox_(s.spectraapprox_) , spectrafunc_(s.spectrafunc_) , spectravar_(s.spectravar_)
+  , spectraunit_(s.spectraunit_), spectrapower_(s.spectrapower_)
 {
 }
@@ -120,60 +121,40 @@
 
 //************************************************************************
-void PlanckSpectra::SetApprox(unsigned short approx)
-// approx = 0 : Planck spectra
-//        = 1 : Rayleigh spectra
-//        = 2 : Wien spectra
-{
-  if(approx>2) {
-    cout<<"PlanckSpectra::SetApprox : unknown approximation"<<endl;
-    throw ParmError("PlanckSpectra::SetApprox : unknown approximation");
-  }
-  approx_ = approx;
-}
-
-void PlanckSpectra::SetDeriv(unsigned short deriv)
-// deriv = 0 : spectra
-//       = 1 : derivative of spectra relative to temperature
-{
-  if(deriv>1) {
-    cout<<"PlanckSpectra::SetDeriv : parameter out of range"<<endl;
-    throw ParmError("PlanckSpectra::SetDeriv : parameter out of range");
-  }
-  deriv_ = deriv;
-}
-
-void PlanckSpectra::SetVar(unsigned short typvar)
-// typvar = 0 : variable is frequency (Hz)
-//        = 1 : variable is wavelength (m)
-{
-  if(typvar>1) {
-    cout<<"PlanckSpectra::SetVar : parameter out of range"<<endl;
-    throw ParmError("PlanckSpectra::SetVar : parameter out of range");
-  }
-  typvar_ = typvar;
-}
-
-void PlanckSpectra::SetUnitOut(unsigned short unitout)
-// unitout = 0 : in W/...
-//         = 1 : in photon/s/...
-{
-  if(unitout>1) {
-    cout<<"PlanckSpectra::SetUnitOut : parameter out of range"<<endl;
-    throw ParmError("PlanckSpectra::SetUnitOut : parameter out of range");
-  }
-  unitout_ = unitout;
-}
-
-void PlanckSpectra::SetTypSpectra(unsigned short typspec)
-// typspec = 0 : radiance   W/m^2/Sr/Hz  or ...
-//         = 1 : emittance  W/m^2/Hz     or ... 
-//         = 2 : density    J/m^3/Hz     or ...
-//         = 3 : just the function exp() or equivalent for Rayleigh
-{
-  if(typspec>3) {
-    cout<<"PlanckSpectra::SetTypSpectra : parameter out of range"<<endl;
-    throw ParmError("PlanckSpectra::SetTypSpectra : parameter out of range");
-  }
-  typspec_ = typspec;
+void PlanckSpectra::SetSpectraApprox(SpectraApprox spectraapprox)
+// spectraapprox = PLANCK   : Planck spectra
+//               = RAYLEIGH : Rayleigh spectra
+//               = WIEN     : Wien spectra
+{
+  spectraapprox_ = spectraapprox;
+}
+
+void PlanckSpectra::SetSpectraFunc(SpectraFunc spectrafunc)
+// spectrafunc = VALUE : spectra
+//             = DERIV : derivative of spectra relative to temperature
+{
+  spectrafunc_ = spectrafunc;
+}
+
+void PlanckSpectra::SetSpectraVar(SpectraVar spectravar)
+// spectravar = NU     : variable is frequency (Hz)
+//            = LAMBDA : variable is wavelength (m)
+{
+  spectravar_ = spectravar;
+}
+
+void PlanckSpectra::SetSpectraPower(SpectraPower spectrapower)
+// spectrapower = POWER : in W/...
+//              = PHOTON : in photon/s/...
+{
+  spectrapower_ = spectrapower;
+}
+
+void PlanckSpectra::SetSpectraUnit(SpectraUnit spectraunit)
+// spectraunit = ANGSFLUX  : radiance   W/m^2/Sr/Hz  or ...
+//             = SFLUX     : emittance  W/m^2/Hz     or ... 
+//             = DENSENERG : density    J/m^3/Hz     or ...
+//             = EXPON     : just the function exp() or equivalent for Rayleigh
+{
+  spectraunit_ = spectraunit;
 }
 
@@ -190,11 +171,11 @@
 double PlanckSpectra::PlanckExp(double fl)
 {
-  double x = (typvar_) ? HCsK_/(fl*T_) : HsK_*fl/T_;
-
-  if(approx_ == 1) return 1./x;  // Rayleigh
+  double x = (spectravar_==LAMBDA) ? HCsK_/(fl*T_) : HsK_*fl/T_;
+
+  if(spectraapprox_ == RAYLEIGH) return 1./x;  // Rayleigh
 
   if(x>MAXARGEXP) return 0.;
 
-  if(approx_ == 2) return exp(-x);  // Wien
+  if(spectraapprox_ == WIEN) return exp(-x);  // Wien
 
   if(x<MINARGEXP) return 1./(x*(1.+x/2.));
@@ -204,11 +185,12 @@
 double PlanckSpectra::DPlanckExp_DT(double fl)
 {
-  if(approx_ == 1) return (typvar_) ? fl/HCsK_: 1. / (HsK_*fl);  // Rayleigh
-
-  double x = (typvar_) ? HCsK_/(fl*T_) : HsK_*fl/T_;
+  if(spectraapprox_ == RAYLEIGH)
+    return (spectravar_==LAMBDA) ? fl/HCsK_: 1. / (HsK_*fl);  // Rayleigh
+
+  double x = (spectravar_==LAMBDA) ? HCsK_/(fl*T_) : HsK_*fl/T_;
 
   if(x>MAXARGEXP) return 0.;
 
-  if(approx_ == 2) return x/T_ * exp(-x);  // Wien
+  if(spectraapprox_ == WIEN) return x/T_ * exp(-x);  // Wien
 
   double v;
@@ -225,17 +207,18 @@
 {
   // --- type de spectre et d'approximation selon choix variable
-  double fex = (deriv_) ? DPlanckExp_DT(x): PlanckExp(x);
+  double fex = (spectrafunc_==DERIV) ? DPlanckExp_DT(x): PlanckExp(x);
 
   // --- le coefficient multiplicateur devant l'expo
-  if(typspec_ == 3) return fex;  // expo seule
-
-  // radiance en ph/...       longeur d'onde         frequency
-  double coeff = (typvar_) ? 2.*CinM_/(x*x*x*x): 2.*x*x/(CinM_*CinM_);
-
-  if(typspec_ == 1)      coeff *= M_PI;  // emittance en ph/...
-  else if(typspec_ == 2) coeff *= 4.*M_PI/CinM_;  // densite en ph/...
-
-  // unite en W/...                       longeur d'onde         frequency
-  if(unitout_ == 0) coeff *= (typvar_) ? h_Planck_Cst*CinM_/x: h_Planck_Cst*x;
+  if(spectraunit_ == EXPON) return fex;  // expo seule
+
+  // radiance en ph/...               longeur d'onde         frequency
+  double coeff = (spectravar_==LAMBDA) ? 2.*CinM_/(x*x*x*x): 2.*x*x/(CinM_*CinM_);
+
+  if(spectraunit_ == SFLUX)      coeff *= M_PI;  // emittance en ph/...
+  else if(spectraunit_ == DENSENERG) coeff *= 4.*M_PI/CinM_;  // densite en ph/...
+
+  // unite en W/...                longeur d'onde         frequency
+  if(spectrapower_ == POWER)
+    coeff *= (spectravar_==LAMBDA) ? h_Planck_Cst*CinM_/x: h_Planck_Cst*x;
 
   return coeff * fex;
@@ -274,32 +257,32 @@
 {
   double x=-1.;
-  if(typvar_ == 0) { // Frequence
-    if(deriv_ == 0) {  // Le spectre
-      if(unitout_ == 0) //  W/...
-        {if(approx_==0) x=2.82143938074; else if(approx_==2) x=3.;}
-      else if(unitout_ == 1) //  Ph/s/...
-        {if(approx_==0) x=1.59362426; else if(approx_==2) x=2.;}
-    } else if(deriv_ == 1) {  // La derivee du spectre
-      if(unitout_ == 0) //  W/... 
-        {if(approx_==0) x=3.830016095; else if(approx_==2) x=4.;}
-      else if(unitout_ == 1) //  Ph/s/...
-        {if(approx_==0) x=2.575678888; else if(approx_==2) x=3.;}
+  if(spectravar_ == NU) { // Frequence
+    if(spectrafunc_ == VALUE) {  // Le spectre
+      if(spectrapower_ == POWER) //  W/...
+        {if(spectraapprox_==PLANCK) x=2.82143938074; else if(spectraapprox_==WIEN) x=3.;}
+      else if(spectrapower_ == PHOTON) //  Ph/s/...
+        {if(spectraapprox_==PLANCK) x=1.59362426; else if(spectraapprox_==WIEN) x=2.;}
+    } else if(spectrafunc_ == DERIV) {  // La derivee du spectre
+      if(spectrapower_ == POWER) //  W/... 
+        {if(spectraapprox_==PLANCK) x=3.830016095; else if(spectraapprox_==WIEN) x=4.;}
+      else if(spectrapower_ == PHOTON) //  Ph/s/...
+        {if(spectraapprox_==PLANCK) x=2.575678888; else if(spectraapprox_==WIEN) x=3.;}
     }
   } else { // Longeur d'onde
-    if(deriv_ == 0) {  // Le spectre
-      if(unitout_ == 0) //  W/...
-        {if(approx_==0) x=4.96511420; else if(approx_==2) x=5.;}
-      else if(unitout_ == 1) //  Ph/s/...
-        {if(approx_==0) x=3.9206904099; else if(approx_==2) x=4.;}
-    } else if(deriv_ == 1) {  // La derivee du spectre
-      if(unitout_ == 0) //  W/...
-        {if(approx_==0) x=5.969409190; else if(approx_==2) x=6.;}
-     else if(unitout_ == 1) //  Ph/s/...
-        {if(approx_==0) x=4.928119345; else if(approx_==2) x=5.;}
+    if(spectrafunc_ == VALUE) {  // Le spectre
+      if(spectrapower_ == POWER) //  W/...
+        {if(spectraapprox_==PLANCK) x=4.96511420; else if(spectraapprox_==WIEN) x=5.;}
+      else if(spectrapower_ == PHOTON) //  Ph/s/...
+        {if(spectraapprox_==PLANCK) x=3.9206904099; else if(spectraapprox_==WIEN) x=4.;}
+    } else if(spectrafunc_ == DERIV) {  // La derivee du spectre
+      if(spectrapower_ == POWER) //  W/...
+        {if(spectraapprox_==PLANCK) x=5.969409190; else if(spectraapprox_==WIEN) x=6.;}
+     else if(spectrapower_ == PHOTON) //  Ph/s/...
+        {if(spectraapprox_==PLANCK) x=4.928119345; else if(spectraapprox_==WIEN) x=5.;}
     }
   }
 
   if(x<0.) return x;  // Rayleigh n'a pas de maximum
-  if(typvar_ == 0) return x / HsK_ *T_; // Frequence
+  if(spectravar_ == NU) return x / HsK_ *T_; // Frequence
   return HCsK_ / x /T_; // Longeur d'onde
 }
@@ -308,5 +291,5 @@
 // Retourne le maximum des spectres (a la precicion eps)
 {
-  if(approx_ == 1) {  // Pas de maximum pour les spectres de Raleigh
+  if(spectraapprox_ == RAYLEIGH) {  // Pas de maximum pour les spectres de Raleigh
     cout<<"PlanckSpectra::FindMaximum : no maximum for Raleigh spectra"<<endl;
     throw ParmError("PlanckSpectra::FindMaximum : no maximum for Raleigh spectra");
