source: Sophya/trunk/AddOn/TAcq/brviscalc.h@ 4012

Last change on this file since 4012 was 4012, checked in by ansari, 14 years ago

Codage du mode de calcul de visibilites par intervalle de temps (BRVisibiliyCalculator) et propagation des modifs (ajouts de parametres) ds mfacq.cc et vismfib.cc, Reza 02/08/2011

File size: 9.0 KB
RevLine 
[3872]1#ifndef BRVISCALC_H_SEEN
2#define BRVISCALC_H_SEEN
3
4//----------------------------------------------------------------
5// Projet BAORadio - (C) LAL/IRFU 2008-2010
6// Classes de threads de calcul de visibilites pour BAORadio
7// Principales classes utilisables
8// - BRVisibilityCalculator (donnees FFT)
9// - BRVisCalcGroup
10//----------------------------------------------------------------
11
12#include <string>
13#include <vector>
14#include <iostream>
15
16// --- include SOPHYA
17#include "machdefs.h"
18#include "sopnamsp.h"
19#include "tvector.h"
20#include "parlex.h"
21#include "datatable.h"
22#include "ctimer.h"
23
24//--- include BAORadio
25#include "racqumem.h"
26#include "brpaqu.h"
27#include "brbaseproc.h"
28
29using namespace std;
30
31//---------------------------------------------------------------------
32// Classe de traitement - calcul de visibilite pour n fibres
33//---------------------------------------------------------------------
[3909]34// Pour convertir une paire de numeros de canaux en un seul entier C1*CHANPAIRCONVFAC+C2
35#define CHANPAIRCONVFAC 1000
36
[3872]37class BRVisibilityCalculator : public BRBaseProcessor, ParallelTaskInterface {
38public:
39 BRVisibilityCalculator(RAcqMemZoneMgr& memgr, string outpath, uint_4 nmean=1000, size_t nthr=1);
40 virtual ~BRVisibilityCalculator(); // Fait le nettoyage final , sauvegarde des objets ...
41
[3956]42 // configuration avec donnees firmware FFT (defaut)
[3967]43 inline void SetFFTData() { fgdataraw_=false; }
44 // configuration avec donnees firmware RAW
[3956]45 inline void SetRawData() { fgdataraw_=true; }
46
[3872]47 // Pour definir le rang de l'objet lors d'un traitement avec plusieurs BRVisibilityCalculator en //
[3915]48 void DefineRank(uint_4 nbc, uint_4 cid, uint_4 pair1=0, uint_4 nbpairs=999999999, bool fgpimp=false);
[3872]49
[3893]50 // Pour limiter le calcul des visibilites a certaines voies, determine par les numeros de sequences des paires
51 // Exemple pour 2 fibres et 4 voies
52 // kpair=numero sequentiel de la paire: 0->(0,0), 1->(0,1), 2->(0,2), 3->(0,3), 4->(1,1), 5->(1,2) ...
[3915]53 // fgpimp=true : on calcule uniquement les visib avec un numero de voie paire, un numero de voie impair
54 // fgpimp=true est utile pour le calcul des visib entre deux cylindres (E-W)
55 uint_4 SelectPairs(uint_4 pair1=0, uint_4 nbpairs=999999999, bool fgpimp=false);
[3872]56 // pour definir le binning en frequence pour la VisibDataTable
[3876]57 // par defaut, toutes les frequences avec un pas de 1
58 int SelectFreqBinning(uint_4 freq1=0, uint_4 freq2=0, uint_4 nbfreq=0);
[3872]59
60 // Pour activer la verification des timetag
61 // Creation / sauvegarde d'une matrice de TimeTag / FrameCounter avec NCols=maxnpaq (nb de paquets/trigger)
62 int ActivateTimeTagCheck(uint_8 maxnpaq);
[3920]63 // Pour activer le remplissage du DataTable des visibilites
64 inline void ActivateVisDTable(bool fgfdt=false) { fgvisdt_=fgfdt; return; }
[3956]65 // Pour ecrire les fichiers de sortie au format fits (format PPF sinon)
66 inline void SetFitsOutput() { fgfitsout_=true; }
67 // Pour ecrire les fichiers de sortie au format PPF (defaut)
68 inline void SetPPFOutput() { fgfitsout_=false; }
[4012]69 // Pour passer en mode nombre de paquet pour sauvegarde matrices visibilites (defaut)
70 inline void SetNPaqIntervalMode(uint_4 nmean=1000)
71 { fgnpaq_time=true; nmean_=(nmean>0)?nmean:1000; }
72 // Pour passer en mode intervalle en temps pour sauvegarde matrices visibilites - intervalle de temps en secondes
73 inline void SetTimeIntervalMode(double dtime=1.)
74 { fgnpaq_time=false; dtimemean_=(dtime>1e-6)?dtime:1.; }
[3872]75
76 // Methode d'execution standard du thread (on redefinit la methode de BRBaseProcessor)
77 virtual void run();
78 // Methode de la classe ParallelTaskInterface
[3956]79 virtual int execute(int tid);
[3872]80
81 // Le nombre total d'operations effectuees
82 inline r_8 TotNbFLOP() { return nb_flop_; }
[3895]83 inline r_8 TotNbMegaFLOP() { return nb_flop_/(1024.e3); }
[3872]84
[3923]85 //---- niveau d'impression
86 inline void SetPrintLevel(int lev=0, uint_8 prtmodulo=10)
87 { prtlev_=lev; prtmodulo_=prtmodulo;}
88
[3872]89protected:
[3909]90 virtual void UpdateChanIds();
[3872]91 virtual int Process();
[4012]92 virtual void SaveVisibilityMatrix();
[3878]93 virtual void UpdateVisMtxInfo();
[3872]94 virtual int FillVisibTable(double fcm, double ttm);
[4012]95 inline bool CheckInterval4Save();
[3872]96 virtual int CheckTimeTag();
[3956]97 inline const char* OutFileExtension() { return ((fgfitsout_)?"fits":"ppf"); }
[4012]98 // return true if npaq or time interval elasped to save visibility matrix
99 inline bool CheckInterval4VisMtxSave()
100 {
101 if (npaqcumul_<1) return false;
102 if (fgnpaq_time)
103 return ((npaqcumul_>=nmean_)?true:false);
104 else {
105 return (((vpaq_[0].TimeTag()-first_tt_)/1.25e8>=dtimemean_)?true:false);
106 }
107 }
[3872]108
109 ParallelExecutor paralex_; // Pour l'execution en parallele
110 size_t nparthr_;
111
[3956]112 bool fgdataraw_; // true -> donnees provenant du firmware RAW
[3872]113 string outpath_; // directory pour fichiers de sortie
114 uint_4 nbcalc_, calcid_; // Nombre total de threads/objets BRVisibilityCalculator parallèles, l'identificateur de l'objet
115
[4012]116 // Definition du mode (type d'intervalle) pour calcul des moyennes
117 uint_4 nmean_; // Nombre de spectres pour le calcul des moyennes
118 double dtimemean_; // Intervalle en temps pour le calcul des moyennes - exprimes en secondes
119 bool fgnpaq_time; // true -> utilisation nmean_ comme nb de paquet/spectre, false -> dtimemean_
120
[3915]121 uint_4 pairst_, nbpairs_; // Numero de la premiere paire, nombre de paires ( 1 paire= 1 visibilites)
122 bool fgpimp_; // true -> calculer uniquement visibilities avec no voie pair-impair
123
[3872]124 uint_4 jf1_,jf2_,djf_; // binning en frequence pour la datatable
125
[3956]126 vector<TwoByteComplex*> vpdata_; // donnees du fimrware FFT
127 vector< complex<r_4>* > vpdatar_; // donnees du fimrware RAW apres FFT soft
128
[3872]129 bool* fgallfibok;
130
[4012]131 uint_8 npaqcumul_; // Nb de paquets cumules/moyennes ds la matrice de visibilite
[3878]132 double moyfc_, moytt_; // moyenne des FrameCounter / TimeTag pour chaque matrice de visibilite
133 uint_8 first_fc_,first_tt_; // Valeurs premier FrameCounter / TimeTag pour chaque matrice de visibilite
134 TimeStamp first_tmstamp_; // Date-Heure pour premier FrameCounter / TimeTag pour chaque matrice de visibilite
135
[3872]136 TMatrix< complex<r_4> > vismtx_;
[3956]137 TVector< int_4 > chanids_; // Numero de chaque canal=FiberId*2-1, FiberId*2
138 TVector< int_4 > chanpairnumall_; // Liste de tous les numeros de paires de canaux (forme 1000*C1+C2=IIIJJJ)
139 TMatrix< int_4 > chanpairsall_ ; // Liste de toutes paires de canaux (forme (C1,C2) )
140 TVector< int_4 > chanpairnum_; // Liste des paires de canaux calcules par ce BRVisibilityCalculator
141 TMatrix< int_4 > chanpairs_ ; // Liste des paires de canaux (forme (C1,C2) ) pour ce BRVisibilityCalculator
[3909]142
[3956]143 bool fgfitsout_; // if true -> write visibility matrices in fits format
144
[3872]145 // FitsInOutFile dtfos_;
146 DataTable visdt_;
[3920]147 bool fgvisdt_; // true -> fill datatable
[3872]148 uint_4 numfile_;
149 uint_8 totnbpaq_;
150
151 r_8 nb_flop_; // Nombre total d'operations effectuees
152
153 // Variables/objets pour la verifications des timetag
154 bool fgcktt_; // true -> checktimetag
155 int_8 mindeltatt_; // difference minimum de deux timetag successifs
156 TMatrix< uint_8 > fcmtx_; // matrices des framecounters
157 TMatrix< uint_8 > ttmtx_; // matrices des timetag
158 vector< uint_8 > vlasttt_; // dernieres valeurs de TimeTag / fibre
159 vector< uint_8 > vbadtt_; // Number of bad TimeTag paquets per fiber
160 vector< uint_8 > vnsamett_; // Number of paquets having TimeTag <> TT_Fiber1 per fiber
161 vector< uint_8 > vndiff5tt_; // Number of paquets having |TimeTag-TT_Fiber1|>5 per fiber
162
[3923]163 int prtlev_; // print level
164 uint_8 prtmodulo_; // print periodicity (modulo)
[3872]165};
166
167
168//-------------------------------------------------------------------------------
[3878]169// Classe Groupe (ensemble) de Calculateur de Visibilites, tournant en parallele
[3872]170//-------------------------------------------------------------------------------
171
172class BRVisCalcGroup {
173public:
[3915]174 BRVisCalcGroup(size_t nbcalc, RAcqMemZoneMgr& memgr, string outpath, uint_4 nmean=1000,
175 uint_4 pair1=0, uint_4 nbpairs=999999999, bool fgpimp=false, size_t nthr=1);
[3872]176 ~BRVisCalcGroup();
[3956]177
178 MemZStatus SetMemZAction(MemZaction mmact=MemZA_ProcA);
179
[3872]180 int SelectFreqBinning(uint_4 freq1=0, uint_4 freq2=0, uint_4 nbfreq=1);
181 inline int ActivateTimeTagCheck(uint_8 maxnpaq)
182 { return viscalcp_[0]->ActivateTimeTagCheck(maxnpaq); }
[3920]183 void ActivateVisDTable(bool fgfdt=false);
[3956]184 // Pour ecrire les fichiers de sortie au format fits (format PPF sinon)
185 void SetFitsOutput();
186 // Pour ecrire les fichiers de sortie au format PPF (defaut)
187 void SetPPFOutput();
[3967]188 // configuration avec donnees firmware FFT (defaut)
189 void SetFFTData();
190 // configuration avec donnees firmware RAW
191 void SetRawData();
[4012]192 // Pour passer en mode nombre de paquet pour sauvegarde matrices visibilites (defaut)
193 void SetNPaqIntervalMode(uint_4 nmean=1000);
194 // Pour passer en mode intervalle en temps pour sauvegarde matrices visibilites
195 void SetTimeIntervalMode(double dtime=1.);
[3967]196
[3923]197 void SetPrintLevel(int lev=0, uint_8 prtmodulo=10);
[3872]198
199 void start();
200 void join();
201protected:
202 vector<BRVisibilityCalculator *> viscalcp_;
203 Timer tm_;
204};
205
206
207#endif
Note: See TracBrowser for help on using the repository browser.