p4autils.h 2.83 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
/* ---------------------------------------------------------- 
   Projet BAORadio/PAON4 - (C) LAL/IRFU  2008-2017

   Classes et fonctions utilitaires pour les programmes d'analyse PAON4
   R. Ansari    Fevrier 2017 
   ---------------------------------------------------------- */

#ifndef P4AUTILS_SEEN
#define P4AUTILS_SEEN

#include <iostream>
#include <fstream>
#include <string>

#include <vector>

//----- sophya includes 
#include "machdefs.h"
#include "sopnamsp.h"
#include "pexceptions.h"

//---- Classe definition de bande de frequence, frequence centrale et largeur
class P4FreqBand {
public:
  // definition de la bande de frequence, specification frequence centrale f0 et largeur df en MHz  
  P4FreqBand(double f0=1420., double df=1.)
    : f0_(f0), df_(df) 
  {
    double deltanufft=250./4096;    // 250 MHz en 4096 frequences 
    double freqstart=1250.;   // Bande de 1250-1500 MHz 
    sa_size_t jfmin_=(f0_-freqstart-0.5*df_)/deltanufft;
    sa_size_t jfmax_=(f0_-freqstart+0.5*df_)/deltanufft;
    if ((jfmin_<0)||(jfmin_>4095)||(jfmax_<0)||(jfmax_>4095)) {
      cout<<"P4FreqBand(f0="<<f0<<" ,df="<<df<<") ERROR -> Out of range (0...4095) jfmin="<<jfmin_<<" jfmax="<<jfmax_<<endl;
      throw ParmError("P4FreqBand(f0,df) Out of range (0...4095) jfmin,jfmax");
    }
  }
  P4FreqBand(P4FreqBand const& a)
    : f0_(a.f0_), df_(a.df_), jfmin_(a.jfmin_), jfmax_(a.jfmax_)
  { }
  P4FreqBand& operator = (P4FreqBand const& a)
  { f0_=a.f0_; df_=a.df_; jfmin_=a.jfmin_; jfmax_=a.jfmax_;  return *this; }
  
  double f0_, df_;  // frequence centrale et largeur en MHz , f0_-df_/2 <= f <= f0_+df_/2 
  sa_size_t jfmin_, jfmax_;   // numero de colonne de frequence dans la matrice de visibilite
};

inline ostream& operator << (ostream& os, P4FreqBand const& a)
{ os<<a.f0_<<" +/- "<<a.df_<<" MHz (jf="<<a.jfmin_<<"-"<<a.jfmax_<<")"; return os; }

class P4AnaParams {
public:
  P4AnaParams();
  P4AnaParams(P4AnaParams const & a);
  P4AnaParams& operator = (P4AnaParams const & a);
  //
  int DecodeArgs(int narg, const char* arg[]);
  static int UsageOptions();
  ostream& Print(ostream& os) const;

  //--- definition des fichiers de visibilite en entree 
  string inpath5_, inpath6_;
  int Imin_,Imax_,Istep_; 
  bool fgreorderfreq_;
  //--- nom de fichier de gain
  string gain_gnu_file_;
  //--- nom du fichier de sortie
  string outfile_;
  //--- nombre de matrices de visibilites pour les calculs de moyenne, sigma ...
  int Nmean_;
  //--- print level
  int prtlev_;
  //--- definition pour les cartes temps-frequence 
  bool fgTFM_;
  sa_size_t TFMtimebin_;
  sa_size_t TFMfreqbin_;
  //  definition des bandes de frequences pour les DataTables 
  bool fgdtable_;
  vector<P4FreqBand> fbands_;
  // les arguments en fin de ligne de commande 
  vector<string> lastargs_;
};

inline ostream& operator << (ostream& os, P4AnaParams const& a)
{ return a.Print(os); }

#endif