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

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

Ajout calcul nb total d'operations , Reza 18/05/2010

File size: 7.8 KB
RevLine 
[3683]1#ifndef BRPROC_H_SEEN
2#define BRPROC_H_SEEN
[3635]3
4//----------------------------------------------------------------
[3683]5// Projet BAORadio - (C) LAL/IRFU 2008-2010
6// Classes de threads de traitememt donnees BAORadio
[3635]7//----------------------------------------------------------------
8
9
10#include <string>
11#include <vector>
12#include <iostream>
[3683]13
14#include "racqumem.h"
15#include "brbaseproc.h"
[3724]16#include "parlex.h"
[3635]17#include "sopnamsp.h"
[3683]18#include "tvector.h"
19#include "ntuple.h"
20#include "datatable.h"
[3635]21
22using namespace std;
23
24
25//---------------------------------------------------------------------
[3683]26// Classe de traitement - calcul de visibilite pour n fibres
[3635]27//---------------------------------------------------------------------
[3724]28class BRVisibilityCalculator : public BRBaseProcessor, ParallelTaskInterface {
[3683]29public:
[3776]30 BRVisibilityCalculator(RAcqMemZoneMgr& memgr, string outpath, uint_4 nmean=1000, size_t nthr=1);
[3683]31 virtual ~BRVisibilityCalculator(); // Fait le nettoyage final , sauvegarde des objets ...
[3652]32
[3776]33 // Pour definir le rang de l'objet lors d'un traitement avec plusieurs BRVisibilityCalculator en //
34 void DefineRank(uint_4 nbc, uint_4 cid);
35
36 // Pour limiter le calcul des visibilites a certaines fibres
37 uint_4 SelectPairs(uint_4 pair1=0, uint_4 nbpairs=99999999);
38 // pour definir le binning en frequence pour la VisibDataTable
39 int SelectFreqBinning(uint_4 freq1=0, uint_4 freq2=0, uint_4 nbfreq=1);
40
[3705]41 // Pour activer la verification des timetag
42 // Creation / sauvegarde d'une matrice de TimeTag / FrameCounter avec NCols=maxnpaq (nb de paquets/trigger)
43 int ActivateTimeTagCheck(uint_8 maxnpaq);
[3776]44
45 // Methode d'execution standard du thread (on redefinit la methode de BRBaseProcessor)
46 virtual void run();
[3724]47 // Methode de la classe ParallelTaskInterface
48 virtual int execute(int tid);
[3705]49
[3777]50 // Le nombre total d'operations effectuees
51 inline r_8 TotNbFLOP() { return nb_flop_; }
52
[3703]53protected:
[3683]54 virtual int Process();
[3692]55 virtual int FillVisibTable(double fcm, double ttm);
[3705]56 virtual int CheckTimeTag();
[3692]57
[3724]58 ParallelExecutor paralex_; // Pour l'execution en parallele
59 size_t nparthr_;
60
[3683]61 uint_4 nmean_; // Nombre de spectres pour le calcul des moyennes
62 string outpath_; // directory pour fichiers de sortie
[3776]63 uint_4 nbcalc_, calcid_; // Nombre total de threads/objets BRVisibilityCalculator parallèles, l'identificateur de l'objet
[3689]64
[3776]65 uint_4 pairst_, nbpairs_; // Numero de la premiere paire, nombre de paires
66 uint_4 jf1_,jf2_,djf_; // binning en frequence pour la datatable
67
[3694]68 vector<TwoByteComplex*> vpdata_;
[3726]69 bool* fgallfibok;
[3694]70
[3692]71 double moyfc_, moytt_;
72 TMatrix< complex<r_4> > vismtx_;
73 TVector< uint_4 > chanum_;
74 // FitsInOutFile dtfos_;
75 DataTable visdt_;
76
[3694]77 uint_4 numfile_;
[3705]78 uint_8 totnbpaq_;
79
[3777]80 r_8 nb_flop_; // Nombre total d'operations effectuees
81
[3705]82 // Variables/objets pour la verifications des timetag
83 bool fgcktt_; // true -> checktimetag
[3711]84 int_8 mindeltatt_; // difference minimum de deux timetag successifs
[3705]85 TMatrix< uint_8 > fcmtx_; // matrices des framecounters
86 TMatrix< uint_8 > ttmtx_; // matrices des timetag
87 vector< uint_8 > vlasttt_; // dernieres valeurs de TimeTag / fibre
88 vector< uint_8 > vbadtt_; // Number of bad TimeTag paquets per fiber
89 vector< uint_8 > vnsamett_; // Number of paquets having TimeTag <> TT_Fiber1 per fiber
[3709]90 vector< uint_8 > vndiff5tt_; // Number of paquets having |TimeTag-TT_Fiber1|>5 per fiber
91
[3683]92};
93
94
[3776]95//-------------------------------------------------------------------------------
96// Classe Groupe (ensemble) de Calculateur de Visibilites, tourant en parallele
97//-------------------------------------------------------------------------------
98
99class BRVisCalcGroup {
100public:
101 BRVisCalcGroup(size_t nbcalc, RAcqMemZoneMgr& memgr, string outpath, uint_4 nmean=1000, size_t nthr=1);
102 ~BRVisCalcGroup();
103 int SelectFreqBinning(uint_4 freq1=0, uint_4 freq2=0, uint_4 nbfreq=1);
104 inline int ActivateTimeTagCheck(uint_8 maxnpaq)
105 { return viscalcp_[0]->ActivateTimeTagCheck(maxnpaq); }
106
107 void start();
108 void join();
109protected:
110 vector<BRVisibilityCalculator *> viscalcp_;
[3777]111 Timer tm_;
[3776]112};
113
[3774]114//---------------------------------------------------------------------
115// Classe de traitement simple - calcul de spectres moyennes / voie
116//---------------------------------------------------------------------
117class BRMeanSpecCalculator : public BRBaseProcessor
118{
119public:
120 BRMeanSpecCalculator(RAcqMemZoneMgr& memgr, string outpath, uint_4 nmean=1000);
121 virtual ~BRMeanSpecCalculator(); // Fait le nettoyage final , sauvegarde des objets ...
122
123protected:
124 virtual int Process();
125
126 uint_4 nmean_; // Nombre de spectres pour le calcul des moyennes
127 string outpath_; // directory pour fichiers de sortie
128 uint_4 numfile_;
129
130 uint_8 totnbpaq_;
131 TMatrix< r_4 > mspecmtx_; // Matrice des spectres moyennees
132};
133
[3683]134//-------------------------------------------------------------------------
135// **** OBSOLETE : BRProcA2C et BRProcB4C
136// Anciennes classes de traitement (Avant Nov2009) utilises par mcrd.cc
137//-------------------------------------------------------------------------
138//---------------------------------------------------------------------
139// Classe thread de traitement avec 2 voies par frame (donnees raw/FFT
140//---------------------------------------------------------------------
141
[3652]142/*-- Arguments du constructeur :
143 o mem : gestionnaire zones memoires avec contenant les "frames" avec 2 voies/frame
144 o path : Chemin et nom des fichiers PPF produits (on ajoute _numero.ppf )
145 o nmean : Nombre de frame (paquets) moyennes
146 o nmax : Nombre maxi de frames traites
147 o fghist = true -> fait aussi l'histo des valeurs des echantillons temps
[3656]148 o nfsmap>0 : fabrication de cartes (image 2D) des spectres,
149 avec nfsmap=nombre de frequences sommes
[3652]150 o fgnotrl = true -> fichiers fits / paquets sans trailer
151 o card : numero de carte , juste pour les impressions
152*/
[3683]153class BRProcA2C : public ZThread {
[3635]154public:
[3683]155 BRProcA2C(RAcqMemZoneMgr& mem, string& path, bool fgraw,
156 uint_4 nmean=10, uint_4 nmax=100, bool fgtshist=false,
157 uint_4 nfsmap=0, bool fgnotrl=false, int card=1);
[3635]158 virtual void run();
159 void Stop();
160 inline void STOP() { stop_ = true; }
161protected:
162 RAcqMemZoneMgr& memgr;
163 bool stop_;
[3683]164 bool fgraw_; // true -> raw data
[3635]165 uint_4 nmax_; // Nombre maxi de blocs MemZone traites
[3656]166 uint_4 nmean_; // Nombre de spectres pour le calcul des moyennes
167 uint_4 nfsmap_; // Binning en frequence pour les cartes 2D temps-freq
[3635]168 string path_;
[3652]169 bool fghist_; // if true, fill and save histogram with time sample values
[3640]170 bool fgnotrl_; // if true, don't check packet trailer - when using pre-june fits files
[3645]171 int card_; // Numeros de voies 2*card_-1, 2*card_
[3635]172};
173
[3645]174//---------------------------------------------------------------------
[3683]175// Classe thread de traitement 2 x 2 voies/paquet (Apres BRProcA2C)
[3645]176//---------------------------------------------------------------------
[3652]177/*-- Arguments du constructeur :
178 o mem1,mem2 : gestionnairea zones memoires avec contenant les donnees des 4 voies (2 voies/frame)
179 o path : Chemin et nom des fichiers PPF produits (on ajoute _numero.ppf )
180 o nmean : Nombre de frame (paquets) moyennes
181 o nmax : Nombre maxi de frames traites
182 o fgnotrl = true -> fichiers fits / paquets sans trailer
183 o card : numero de carte , juste pour les impressions
184*/
185
[3683]186class BRProcB4C : public ZThread {
[3645]187public:
[3683]188 BRProcB4C(RAcqMemZoneMgr& mem1, RAcqMemZoneMgr& mem2, string& path,
189 bool fgraw, uint_4 nmean=10, uint_4 nmax=100, bool fgnotrl=false);
[3645]190 virtual void run();
191 void Stop();
192 inline void STOP() { stop_ = true; }
193protected:
194 RAcqMemZoneMgr& memgr1;
195 RAcqMemZoneMgr& memgr2;
196 bool stop_;
[3683]197 bool fgraw_; // true -> raw data
[3645]198 uint_4 nmax_; // Nombre maxi de blocs MemZone traites
199 uint_4 nmean_; // Nombre de blocs pour le calcul des moyennes
200 string path_;
201 bool fgnotrl_; // if true, don't check packet trailer - when using pre-june fits files
202};
[3635]203
[3645]204
205
[3635]206#endif
Note: See TracBrowser for help on using the repository browser.