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

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

Correction bug calcul du numero de paires (V1,V2) lors de la boucle sur le calcul de visibilites, Rz+cmv, 28/09/2010

File size: 4.8 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
62protected:
63 virtual int Process();
64 virtual void UpdateVisMtxInfo();
65 virtual int FillVisibTable(double fcm, double ttm);
66 virtual int CheckTimeTag();
67
68 ParallelExecutor paralex_; // Pour l'execution en parallele
69 size_t nparthr_;
70
71 uint_4 nmean_; // Nombre de spectres pour le calcul des moyennes
72 string outpath_; // directory pour fichiers de sortie
73 uint_4 nbcalc_, calcid_; // Nombre total de threads/objets BRVisibilityCalculator parallèles, l'identificateur de l'objet
74
75 uint_4 pairst_, nbpairs_; // Numero de la premiere paire, nombre de paires
76 uint_4 jf1_,jf2_,djf_; // binning en frequence pour la datatable
77
78 vector<TwoByteComplex*> vpdata_;
79 bool* fgallfibok;
80
81 double moyfc_, moytt_; // moyenne des FrameCounter / TimeTag pour chaque matrice de visibilite
82 uint_8 first_fc_,first_tt_; // Valeurs premier FrameCounter / TimeTag pour chaque matrice de visibilite
83 TimeStamp first_tmstamp_; // Date-Heure pour premier FrameCounter / TimeTag pour chaque matrice de visibilite
84
85 TMatrix< complex<r_4> > vismtx_;
86 TVector< uint_4 > chanum_;
87 // FitsInOutFile dtfos_;
88 DataTable visdt_;
89 uint_4 numfile_;
90 uint_8 totnbpaq_;
91
92 r_8 nb_flop_; // Nombre total d'operations effectuees
93
94 // Variables/objets pour la verifications des timetag
95 bool fgcktt_; // true -> checktimetag
96 int_8 mindeltatt_; // difference minimum de deux timetag successifs
97 TMatrix< uint_8 > fcmtx_; // matrices des framecounters
98 TMatrix< uint_8 > ttmtx_; // matrices des timetag
99 vector< uint_8 > vlasttt_; // dernieres valeurs de TimeTag / fibre
100 vector< uint_8 > vbadtt_; // Number of bad TimeTag paquets per fiber
101 vector< uint_8 > vnsamett_; // Number of paquets having TimeTag <> TT_Fiber1 per fiber
102 vector< uint_8 > vndiff5tt_; // Number of paquets having |TimeTag-TT_Fiber1|>5 per fiber
103
104};
105
106
107//-------------------------------------------------------------------------------
108// Classe Groupe (ensemble) de Calculateur de Visibilites, tournant en parallele
109//-------------------------------------------------------------------------------
110
111class BRVisCalcGroup {
112public:
113 BRVisCalcGroup(size_t nbcalc, RAcqMemZoneMgr& memgr, string outpath, uint_4 nmean=1000, size_t nthr=1);
114 ~BRVisCalcGroup();
115 int SelectFreqBinning(uint_4 freq1=0, uint_4 freq2=0, uint_4 nbfreq=1);
116 inline int ActivateTimeTagCheck(uint_8 maxnpaq)
117 { return viscalcp_[0]->ActivateTimeTagCheck(maxnpaq); }
118
119 void start();
120 void join();
121protected:
122 vector<BRVisibilityCalculator *> viscalcp_;
123 Timer tm_;
124};
125
126
127#endif
Note: See TracBrowser for help on using the repository browser.