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

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

Ajout classes / modification pour permettre le calcul des visibilites ave plusieurs objets BRVisibilityCalculator s'executant en parallele, Reza 18/05/2010

File size: 7.7 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
[3703]50protected:
[3683]51 virtual int Process();
[3692]52 virtual int FillVisibTable(double fcm, double ttm);
[3705]53 virtual int CheckTimeTag();
[3692]54
[3724]55 ParallelExecutor paralex_; // Pour l'execution en parallele
56 size_t nparthr_;
57
[3683]58 uint_4 nmean_; // Nombre de spectres pour le calcul des moyennes
59 string outpath_; // directory pour fichiers de sortie
[3776]60 uint_4 nbcalc_, calcid_; // Nombre total de threads/objets BRVisibilityCalculator parallèles, l'identificateur de l'objet
[3689]61
[3776]62 uint_4 pairst_, nbpairs_; // Numero de la premiere paire, nombre de paires
63 uint_4 jf1_,jf2_,djf_; // binning en frequence pour la datatable
64
[3694]65 vector<TwoByteComplex*> vpdata_;
[3726]66 bool* fgallfibok;
[3694]67
[3692]68 double moyfc_, moytt_;
69 TMatrix< complex<r_4> > vismtx_;
70 TVector< uint_4 > chanum_;
71 // FitsInOutFile dtfos_;
72 DataTable visdt_;
73
[3694]74 uint_4 numfile_;
[3705]75 uint_8 totnbpaq_;
76
77 // Variables/objets pour la verifications des timetag
78 bool fgcktt_; // true -> checktimetag
[3711]79 int_8 mindeltatt_; // difference minimum de deux timetag successifs
[3705]80 TMatrix< uint_8 > fcmtx_; // matrices des framecounters
81 TMatrix< uint_8 > ttmtx_; // matrices des timetag
82 vector< uint_8 > vlasttt_; // dernieres valeurs de TimeTag / fibre
83 vector< uint_8 > vbadtt_; // Number of bad TimeTag paquets per fiber
84 vector< uint_8 > vnsamett_; // Number of paquets having TimeTag <> TT_Fiber1 per fiber
[3709]85 vector< uint_8 > vndiff5tt_; // Number of paquets having |TimeTag-TT_Fiber1|>5 per fiber
86
[3683]87};
88
89
[3776]90//-------------------------------------------------------------------------------
91// Classe Groupe (ensemble) de Calculateur de Visibilites, tourant en parallele
92//-------------------------------------------------------------------------------
93
94class BRVisCalcGroup {
95public:
96 BRVisCalcGroup(size_t nbcalc, RAcqMemZoneMgr& memgr, string outpath, uint_4 nmean=1000, size_t nthr=1);
97 ~BRVisCalcGroup();
98 int SelectFreqBinning(uint_4 freq1=0, uint_4 freq2=0, uint_4 nbfreq=1);
99 inline int ActivateTimeTagCheck(uint_8 maxnpaq)
100 { return viscalcp_[0]->ActivateTimeTagCheck(maxnpaq); }
101
102 void start();
103 void join();
104protected:
105 vector<BRVisibilityCalculator *> viscalcp_;
106};
107
[3774]108//---------------------------------------------------------------------
109// Classe de traitement simple - calcul de spectres moyennes / voie
110//---------------------------------------------------------------------
111class BRMeanSpecCalculator : public BRBaseProcessor
112{
113public:
114 BRMeanSpecCalculator(RAcqMemZoneMgr& memgr, string outpath, uint_4 nmean=1000);
115 virtual ~BRMeanSpecCalculator(); // Fait le nettoyage final , sauvegarde des objets ...
116
117protected:
118 virtual int Process();
119
120 uint_4 nmean_; // Nombre de spectres pour le calcul des moyennes
121 string outpath_; // directory pour fichiers de sortie
122 uint_4 numfile_;
123
124 uint_8 totnbpaq_;
125 TMatrix< r_4 > mspecmtx_; // Matrice des spectres moyennees
126};
127
[3683]128//-------------------------------------------------------------------------
129// **** OBSOLETE : BRProcA2C et BRProcB4C
130// Anciennes classes de traitement (Avant Nov2009) utilises par mcrd.cc
131//-------------------------------------------------------------------------
132//---------------------------------------------------------------------
133// Classe thread de traitement avec 2 voies par frame (donnees raw/FFT
134//---------------------------------------------------------------------
135
[3652]136/*-- Arguments du constructeur :
137 o mem : gestionnaire zones memoires avec contenant les "frames" avec 2 voies/frame
138 o path : Chemin et nom des fichiers PPF produits (on ajoute _numero.ppf )
139 o nmean : Nombre de frame (paquets) moyennes
140 o nmax : Nombre maxi de frames traites
141 o fghist = true -> fait aussi l'histo des valeurs des echantillons temps
[3656]142 o nfsmap>0 : fabrication de cartes (image 2D) des spectres,
143 avec nfsmap=nombre de frequences sommes
[3652]144 o fgnotrl = true -> fichiers fits / paquets sans trailer
145 o card : numero de carte , juste pour les impressions
146*/
[3683]147class BRProcA2C : public ZThread {
[3635]148public:
[3683]149 BRProcA2C(RAcqMemZoneMgr& mem, string& path, bool fgraw,
150 uint_4 nmean=10, uint_4 nmax=100, bool fgtshist=false,
151 uint_4 nfsmap=0, bool fgnotrl=false, int card=1);
[3635]152 virtual void run();
153 void Stop();
154 inline void STOP() { stop_ = true; }
155protected:
156 RAcqMemZoneMgr& memgr;
157 bool stop_;
[3683]158 bool fgraw_; // true -> raw data
[3635]159 uint_4 nmax_; // Nombre maxi de blocs MemZone traites
[3656]160 uint_4 nmean_; // Nombre de spectres pour le calcul des moyennes
161 uint_4 nfsmap_; // Binning en frequence pour les cartes 2D temps-freq
[3635]162 string path_;
[3652]163 bool fghist_; // if true, fill and save histogram with time sample values
[3640]164 bool fgnotrl_; // if true, don't check packet trailer - when using pre-june fits files
[3645]165 int card_; // Numeros de voies 2*card_-1, 2*card_
[3635]166};
167
[3645]168//---------------------------------------------------------------------
[3683]169// Classe thread de traitement 2 x 2 voies/paquet (Apres BRProcA2C)
[3645]170//---------------------------------------------------------------------
[3652]171/*-- Arguments du constructeur :
172 o mem1,mem2 : gestionnairea zones memoires avec contenant les donnees des 4 voies (2 voies/frame)
173 o path : Chemin et nom des fichiers PPF produits (on ajoute _numero.ppf )
174 o nmean : Nombre de frame (paquets) moyennes
175 o nmax : Nombre maxi de frames traites
176 o fgnotrl = true -> fichiers fits / paquets sans trailer
177 o card : numero de carte , juste pour les impressions
178*/
179
[3683]180class BRProcB4C : public ZThread {
[3645]181public:
[3683]182 BRProcB4C(RAcqMemZoneMgr& mem1, RAcqMemZoneMgr& mem2, string& path,
183 bool fgraw, uint_4 nmean=10, uint_4 nmax=100, bool fgnotrl=false);
[3645]184 virtual void run();
185 void Stop();
186 inline void STOP() { stop_ = true; }
187protected:
188 RAcqMemZoneMgr& memgr1;
189 RAcqMemZoneMgr& memgr2;
190 bool stop_;
[3683]191 bool fgraw_; // true -> raw data
[3645]192 uint_4 nmax_; // Nombre maxi de blocs MemZone traites
193 uint_4 nmean_; // Nombre de blocs pour le calcul des moyennes
194 string path_;
195 bool fgnotrl_; // if true, don't check packet trailer - when using pre-june fits files
196};
[3635]197
[3645]198
199
[3635]200#endif
Note: See TracBrowser for help on using the repository browser.