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

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

1/ Mise en place d'informations auxiliaires au niveau de RAcqMemZoneMgr ,

FillTime (DATEOBS) pour chaque zone et identificateur des fibres

2/ remplissage de FillTime(DATEOBS) Et FiberId's de MemZoneMgr par

les classes PCIEMultiReader et EthernetReader

3/ Ajout de mots-cle (ds les datacards) pour numeros d'identification des

fibres et parametres de controles du DMA (@fiberids @waitenddma)
et corrections/ameliorations des modes acq (raw1c ordfft2c ...)

4/ Parametrage des WaitEndDMA ds PCIEWrapperInterface et implementation

au niveau de DMAMgrV6 (dmamgrv6.h .cc)

5/ Gestion d'echec DMA -> arret acquisition ds PCIEMultiReader,EthernetReader

modification TimeOut DMA entre le premier DMA et les suivants pour permettre
un arret propre rapide

6/ Adaptation de la classe BRVisibilityCalculator pour utilisation

FillTime (DATEOBS) et FiberIds de MemZoneMgr - amelioration de
l'identification des numeros de canaux pour les matrices de visibilites

7/ Petites ameliorations (ecriture mot-cles) pour MultiDataSaver et

amelioration classe BRMultiFitsReader pour lecture FillTime (DATEOBS)
et FiberIds depuis les fichiers FITS et remplissage de RAcqMemZoneMgr

Reza, 21/11/2010

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