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

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

correction bugs divers ds calcul visibilites avec plusieurs threads en execution parallele et amelioration prints, Reza 28/09/2010

File size: 4.9 KB
Line 
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//---------------------------------------------------------------------
34class BRVisibilityCalculator : public BRBaseProcessor, ParallelTaskInterface {
35public:
36 BRVisibilityCalculator(RAcqMemZoneMgr& memgr, string outpath, uint_4 nmean=1000, size_t nthr=1);
37 virtual ~BRVisibilityCalculator(); // Fait le nettoyage final , sauvegarde des objets ...
38
39 // Pour definir le rang de l'objet lors d'un traitement avec plusieurs BRVisibilityCalculator en //
40 void DefineRank(uint_4 nbc, uint_4 cid);
41
42 // Pour limiter le calcul des visibilites a certaines voies, determine par les numeros de sequences des paires
43 // Exemple pour 2 fibres et 4 voies
44 // kpair=numero sequentiel de la paire: 0->(0,0), 1->(0,1), 2->(0,2), 3->(0,3), 4->(1,1), 5->(1,2) ...
45 uint_4 SelectPairs(uint_4 pair1=0, uint_4 nbpairs=99999999);
46 // pour definir le binning en frequence pour la VisibDataTable
47 // par defaut, toutes les frequences avec un pas de 1
48 int SelectFreqBinning(uint_4 freq1=0, uint_4 freq2=0, uint_4 nbfreq=0);
49
50 // Pour activer la verification des timetag
51 // Creation / sauvegarde d'une matrice de TimeTag / FrameCounter avec NCols=maxnpaq (nb de paquets/trigger)
52 int ActivateTimeTagCheck(uint_8 maxnpaq);
53
54 // Methode d'execution standard du thread (on redefinit la methode de BRBaseProcessor)
55 virtual void run();
56 // Methode de la classe ParallelTaskInterface
57 virtual int execute(int tid);
58
59 // Le nombre total d'operations effectuees
60 inline r_8 TotNbFLOP() { return nb_flop_; }
61 inline r_8 TotNbMegaFLOP() { return nb_flop_/(1024.e3); }
62
63protected:
64 virtual int Process();
65 virtual void UpdateVisMtxInfo();
66 virtual int FillVisibTable(double fcm, double ttm);
67 virtual int CheckTimeTag();
68
69 ParallelExecutor paralex_; // Pour l'execution en parallele
70 size_t nparthr_;
71
72 uint_4 nmean_; // Nombre de spectres pour le calcul des moyennes
73 string outpath_; // directory pour fichiers de sortie
74 uint_4 nbcalc_, calcid_; // Nombre total de threads/objets BRVisibilityCalculator parallèles, l'identificateur de l'objet
75
76 uint_4 pairst_, nbpairs_; // Numero de la premiere paire, nombre de paires
77 uint_4 jf1_,jf2_,djf_; // binning en frequence pour la datatable
78
79 vector<TwoByteComplex*> vpdata_;
80 bool* fgallfibok;
81
82 double moyfc_, moytt_; // moyenne des FrameCounter / TimeTag pour chaque matrice de visibilite
83 uint_8 first_fc_,first_tt_; // Valeurs premier FrameCounter / TimeTag pour chaque matrice de visibilite
84 TimeStamp first_tmstamp_; // Date-Heure pour premier FrameCounter / TimeTag pour chaque matrice de visibilite
85
86 TMatrix< complex<r_4> > vismtx_;
87 TVector< uint_4 > chanum_;
88 // FitsInOutFile dtfos_;
89 DataTable visdt_;
90 uint_4 numfile_;
91 uint_8 totnbpaq_;
92
93 r_8 nb_flop_; // Nombre total d'operations effectuees
94
95 // Variables/objets pour la verifications des timetag
96 bool fgcktt_; // true -> checktimetag
97 int_8 mindeltatt_; // difference minimum de deux timetag successifs
98 TMatrix< uint_8 > fcmtx_; // matrices des framecounters
99 TMatrix< uint_8 > ttmtx_; // matrices des timetag
100 vector< uint_8 > vlasttt_; // dernieres valeurs de TimeTag / fibre
101 vector< uint_8 > vbadtt_; // Number of bad TimeTag paquets per fiber
102 vector< uint_8 > vnsamett_; // Number of paquets having TimeTag <> TT_Fiber1 per fiber
103 vector< uint_8 > vndiff5tt_; // Number of paquets having |TimeTag-TT_Fiber1|>5 per fiber
104
105};
106
107
108//-------------------------------------------------------------------------------
109// Classe Groupe (ensemble) de Calculateur de Visibilites, tournant en parallele
110//-------------------------------------------------------------------------------
111
112class BRVisCalcGroup {
113public:
114 BRVisCalcGroup(size_t nbcalc, RAcqMemZoneMgr& memgr, string outpath, uint_4 nmean=1000, size_t nthr=1);
115 ~BRVisCalcGroup();
116 int SelectFreqBinning(uint_4 freq1=0, uint_4 freq2=0, uint_4 nbfreq=1);
117 inline int ActivateTimeTagCheck(uint_8 maxnpaq)
118 { return viscalcp_[0]->ActivateTimeTagCheck(maxnpaq); }
119
120 void start();
121 void join();
122protected:
123 vector<BRVisibilityCalculator *> viscalcp_;
124 Timer tm_;
125};
126
127
128#endif
Note: See TracBrowser for help on using the repository browser.