source: Sophya/trunk/AddOn/TAcq/brproc.h@ 3941

Last change on this file since 3941 was 3939, checked in by ansari, 15 years ago

1/ La description s'applique a la revision precedente qui a ete committee
avec un commentaire errone
2/ Mise en place des methodes et mecanismes permettant de traiter et transmettre correctement
le temps d'acquisition et le temps des paquets depuis la lecture fits aux fichiers de
traitement
3/ Ameliorations diverses ds BRMeanSpecCalculator et specmfib.cc

Reza 13/01/2011

File size: 9.3 KB
RevLine 
[3683]1#ifndef BRPROC_H_SEEN
2#define BRPROC_H_SEEN
[3635]3
4//----------------------------------------------------------------
[3939]5// Projet BAORadio - (C) LAL/IRFU 2008-2011
[3683]6// Classes de threads de traitememt donnees BAORadio
[3872]7// Principales classes utilisables
[3905]8// - BRMeanSpecCalculator (donnees FFT ou RAW apres BRFFTCalculator)
[3872]9// - BRFFTCalculator (donnees RAW)
[3635]10//----------------------------------------------------------------
11
12
13#include <string>
14#include <vector>
15#include <iostream>
[3683]16
17#include "racqumem.h"
18#include "brbaseproc.h"
[3724]19#include "parlex.h"
[3635]20#include "sopnamsp.h"
[3683]21#include "tvector.h"
22#include "ntuple.h"
23#include "datatable.h"
[3886]24#include "swfitsdtable.h"
[3872]25#include "FFTW/fftw3.h"
[3635]26
27using namespace std;
28
[3938]29
[3872]30
[3635]31//---------------------------------------------------------------------
[3872]32// Classe de traitement simple - calcul de spectres moyennes / voie
[3939]33// a partir de donnees de type FFT (firmware FFT ou firmware RAW
34// apres traitement par BRFFTCalculator)
35// Peut servir egalement comme classe de base, apres heritage et
36// redefinition des methodes ProcSpecWin() et/ou FlagBadPackets()
[3635]37//---------------------------------------------------------------------
[3939]38
[3872]39class BRMeanSpecCalculator : public BRBaseProcessor
40{
41public:
42 BRMeanSpecCalculator(RAcqMemZoneMgr& memgr, string outpath, uint_4 nmean=1000,
43 bool fgdatafft=true, bool fgsinglechan=false);
44 virtual ~BRMeanSpecCalculator(); // Fait le nettoyage final , sauvegarde des objets ...
[3652]45
[3905]46// Definit la taille de la fenetre temporelle (winsz = nb de paquets) des spectres a traiter
47// Cette zone est etendu de wszext paquet en debut et en fin de paquet
48 void SetSpectraWindowSize(uint_4 winsz=15, uint_4 wszext=3);
49// Taille de la fenetre en temps (nb de paquets a traiter en bloc
50 inline sa_size_t GetSpectraWindowSize() { return spec_window_.SizeZ()-2*spwin_ext_sz_; }
51// Taille de la zone d'extension de la fenetre de chaque cote
52 inline sa_size_t GetSpecWinExtensionSize() { return spwin_ext_sz_; }
53// La taille de recouvrement est le double de la taille de la zone d'extension
54 inline sa_size_t GetSpecWinOverlapSize() { return 2*spwin_ext_sz_; }
55// Retourne l'index (selon Z) dans le tableau des spectres en fonction du numero de paquet
56 inline sa_size_t PaqNumToArrayIndex(uint_8 numpaq) { return numpaq%spec_window_.SizeZ() ; }
57
[3938]58// Pour definir le nombre maximum de fichiers de fenetres de spectres a sauver sur fichiers
[3905]59 inline void SetMaxNbSepcWinFiles(uint_4 nmax=0) { nmaxfiles_specw_=nmax; }
60
[3938]61// Pour definir le datatable a remplir - pas de DataTable rempli si pas appele
62 virtual void DefineDataTable();
63
[3886]64 inline void SetVarianceLimits(double vmin=0., double vmax=9.e99)
[3905]65 { varmin_=vmin; varmax_=vmax; }
[3886]66
[3905]67// lecture des gains en fonction de la frequence depuis un fichier FITS
68// flag fgapp: Active ou desactive la renormalisation de coefficients de Fourier par les gains=f(frequence)
69 void ReadGainFitsFile(string filename, bool fgapp=true);
[3888]70
[3703]71protected:
[3905]72 virtual int Process(); // appele paquet par paquet
73// appele par Process() pour traiter un groupe de paquets correspondant a une fenetre en temps
74 virtual void ProcSpecWin(uint_8 numpaqstart, uint_8 numpaqend); // appele fenetre par fenetre
75 virtual void FlagBadPackets(uint_8 numpaqstart, uint_8 numpaqend);
76 virtual void SaveMeanSpectra(); // Pour sauver les spectres moyennes ( + sigma ) dans un fichier
77 virtual void SaveSpectraWindow(); // Pour sauver les spectres de la fenetre temporel ds un fichier
[3692]78
[3886]79
[3683]80 uint_4 nmean_; // Nombre de spectres pour le calcul des moyennes
81 string outpath_; // directory pour fichiers de sortie
[3872]82 bool fgdatafft_;
83 bool fgsinglechannel_;
84 uint_4 numfile_;
[3905]85 vector<uint_8> nbpaq4mean_;
86 uint_8 totnbpaq_;
[3689]87
[3872]88 TMatrix< r_4 > mspecmtx_; // Matrice des spectres moyennees
[3881]89 TMatrix< r_4 > sigspecmtx_; // Matrice des sigmas des spectres
90
[3905]91 TArray< r_4 > spec_window_; // fenetre en temps sur les spectres
92 uint_4 spwin_ext_sz_; // Taille de la zone d'extension en debut et en fin
93 TArray< uint_2 > clnflg_; // flag de nettoyage resultant de la routine FlagBadPackets()
94 uint_8 paqnum_w_start; // numero de paquet du debut de la fenetre en temps (inclusif)
95 uint_8 paqnum_w_end; // numero de paquet final de la fenetre en temps (non inclusif)
96
97 uint_4 nbtot_specwin_; // nombre total de fenetre de spectres traites
98 uint_4 nmaxfiles_specw_; // nombre maximum de fichier de fenetre_spectre
99
[3888]100 TMatrix< r_4 > sgain_; // gain en fonction de la frequence
[3905]101 bool fg_apply_gains_;
[3888]102
[3886]103 double varmin_, varmax_; // limites pour la coupure sur la variance
104 vector<uint_8> nbadpaq_;
105
106 FitsInOutFile* ofsdtp_; // Output fits stream for datatable
107 SwFitsDataTable* dtp_; // DataTable
108 double* xnt_;
[3872]109};
[3705]110
[3872]111//-------------------------------------------------------------------------
112// Classe WBRFFT : Calcul de TF sur donnees brutes (firmware RAW)
113// en utilisant FFTW et en effectuant une copie ds tableau local
114//-------------------------------------------------------------------------
115typedef unsigned char IDT ; // definition type de donnees en entree de WBRFFT
116typedef int_2 IIDT ; // definition type de donnees intermediaire
117typedef float ODT; // type de donnees en sortie (complex < ODT > )
118//----Classe WBRFFT----
119class WBRFFT {
120public:
121 WBRFFT(uint_4 sz=0);
122 virtual ~WBRFFT();
[3777]123
[3872]124 void SetInDataSize(uint_4 sz);
125 void DoFFT(IDT *indata, complex<ODT> * ofc);
126 static void PrintData(IDT *indata, complex<ODT> * ofc, uint_4 sz);
[3709]127
[3872]128 uint_4 sz_; // Taille tableau d'entree
129 TVector< ODT > inp;
130 TVector< complex<ODT> > outfc;
131 fftwf_plan myplan_;
132 static ZMutex* mtx_fftwp_; // Mutex de protection pour la creation du plan fftw
[3683]133};
[3872]134//--------------------
[3683]135
[3774]136//---------------------------------------------------------------------
[3872]137// Classe de thread de calcul de FFT sur donnees RAW
[3774]138//---------------------------------------------------------------------
[3872]139class BRFFTCalculator : public BRBaseProcessor
[3774]140{
141public:
[3872]142 BRFFTCalculator(RAcqMemZoneMgr& memgr, bool fgsinglechannel=false);
143 virtual ~BRFFTCalculator(); // Fait le nettoyage final , sauvegarde des objets ...
[3774]144
145protected:
146 virtual int Process();
[3872]147
148 bool fgsinglechannel_;
149 uint_8 totnbfftpaq_;
150 WBRFFT ffts_;
151};
[3774]152
153
[3683]154//-------------------------------------------------------------------------
155// **** OBSOLETE : BRProcA2C et BRProcB4C
156// Anciennes classes de traitement (Avant Nov2009) utilises par mcrd.cc
157//-------------------------------------------------------------------------
158//---------------------------------------------------------------------
159// Classe thread de traitement avec 2 voies par frame (donnees raw/FFT
160//---------------------------------------------------------------------
161
[3652]162/*-- Arguments du constructeur :
163 o mem : gestionnaire zones memoires avec contenant les "frames" avec 2 voies/frame
164 o path : Chemin et nom des fichiers PPF produits (on ajoute _numero.ppf )
165 o nmean : Nombre de frame (paquets) moyennes
166 o nmax : Nombre maxi de frames traites
167 o fghist = true -> fait aussi l'histo des valeurs des echantillons temps
[3656]168 o nfsmap>0 : fabrication de cartes (image 2D) des spectres,
169 avec nfsmap=nombre de frequences sommes
[3652]170 o fgnotrl = true -> fichiers fits / paquets sans trailer
171 o card : numero de carte , juste pour les impressions
172*/
[3872]173class BRProcA2C : public ZThread { // !!!! OBSOLETE !!!!
[3635]174public:
[3683]175 BRProcA2C(RAcqMemZoneMgr& mem, string& path, bool fgraw,
176 uint_4 nmean=10, uint_4 nmax=100, bool fgtshist=false,
177 uint_4 nfsmap=0, bool fgnotrl=false, int card=1);
[3635]178 virtual void run();
179 void Stop();
180 inline void STOP() { stop_ = true; }
181protected:
182 RAcqMemZoneMgr& memgr;
183 bool stop_;
[3683]184 bool fgraw_; // true -> raw data
[3635]185 uint_4 nmax_; // Nombre maxi de blocs MemZone traites
[3656]186 uint_4 nmean_; // Nombre de spectres pour le calcul des moyennes
187 uint_4 nfsmap_; // Binning en frequence pour les cartes 2D temps-freq
[3635]188 string path_;
[3652]189 bool fghist_; // if true, fill and save histogram with time sample values
[3640]190 bool fgnotrl_; // if true, don't check packet trailer - when using pre-june fits files
[3645]191 int card_; // Numeros de voies 2*card_-1, 2*card_
[3635]192};
193
[3645]194//---------------------------------------------------------------------
[3683]195// Classe thread de traitement 2 x 2 voies/paquet (Apres BRProcA2C)
[3872]196// !!!! OBSOLETE !!!!
[3645]197//---------------------------------------------------------------------
[3652]198/*-- Arguments du constructeur :
199 o mem1,mem2 : gestionnairea zones memoires avec contenant les donnees des 4 voies (2 voies/frame)
200 o path : Chemin et nom des fichiers PPF produits (on ajoute _numero.ppf )
201 o nmean : Nombre de frame (paquets) moyennes
202 o nmax : Nombre maxi de frames traites
203 o fgnotrl = true -> fichiers fits / paquets sans trailer
204 o card : numero de carte , juste pour les impressions
205*/
206
[3872]207class BRProcB4C : public ZThread { // !!!! OBSOLETE !!!!
208
[3645]209public:
[3683]210 BRProcB4C(RAcqMemZoneMgr& mem1, RAcqMemZoneMgr& mem2, string& path,
211 bool fgraw, uint_4 nmean=10, uint_4 nmax=100, bool fgnotrl=false);
[3645]212 virtual void run();
213 void Stop();
214 inline void STOP() { stop_ = true; }
215protected:
216 RAcqMemZoneMgr& memgr1;
217 RAcqMemZoneMgr& memgr2;
218 bool stop_;
[3683]219 bool fgraw_; // true -> raw data
[3645]220 uint_4 nmax_; // Nombre maxi de blocs MemZone traites
221 uint_4 nmean_; // Nombre de blocs pour le calcul des moyennes
222 string path_;
223 bool fgnotrl_; // if true, don't check packet trailer - when using pre-june fits files
224};
[3635]225
[3645]226
227
[3635]228#endif
Note: See TracBrowser for help on using the repository browser.