source: Sophya/trunk/AddOn/TAcq/brbaseproc.h@ 4016

Last change on this file since 4016 was 3993, checked in by ansari, 14 years ago

Ajout possibilite de faire un DataTable (NTuple) avec la puissance spectrale dans plusieurs bandes en fonction du temps, Reza 13/05/2011

File size: 4.8 KB
Line 
1#ifndef BRBASEPROC_H_SEEN
2#define BRBASEPROC_H_SEEN
3
4//----------------------------------------------------------------
5// Projet BAORadio - (C) LAL/IRFU 2008-2011
6// Classes de threads de traitememt donnees BAORadio
7//----------------------------------------------------------------
8
9
10#include "racqumem.h"
11#include <string>
12#include <vector>
13#include <iostream>
14
15#include "brpaqu.h"
16#include "timestamp.h" // include SOPHYA
17
18using namespace std;
19
20//---------------------------------------------------------------------
21// Classe de base pour l'analyse donnees (paquets acquisition) BAORadio
22// Les classes de traitement des paquets BAORadio peuvent heriter de
23// cette classe de base BRBaseProcessor en redefinissant la methode Process()
24//---------------------------------------------------------------------
25class BRBaseProcessor : public SOPHYA::ZThread {
26public:
27 BRBaseProcessor(RAcqMemZoneMgr& memgr, MemZaction mmact=MemZA_ProcA);
28
29 MemZStatus SetMemZAction(MemZaction mmact=MemZA_ProcA);
30
31 virtual void run();
32
33 inline void Stop() { stop_ = true; }
34 inline void STOP() { stop_ = true; }
35
36 inline void setNameId(const char* nom, int id)
37 { bpnom_=nom; bpid_=id; }
38 inline void setNameId(string const& nom, int id)
39 { bpnom_=nom; bpid_=id; }
40
41 // Definition de la fentre en temps des paquets a traiter - par defaut, traitement de tous les paquets
42 // Process() est alors appele pour les paquets des zones MemZoneMgr
43 // avec TimeStart <= getObsTime() <= TimeEnd
44 inline void SetProcTimeWindow(SOPHYA::TimeStamp tmstart, SOPHYA::TimeStamp tmend)
45 { tmstart_=tmstart; tmend_=tmend; fgproctimewin_=true; }
46 // Annulation de la definition de la fenetre de traitement en temps
47 inline void ClearProcTimeWindow()
48 { fgproctimewin_=false; }
49
50 // get Observation Time ( obtained from MemZoneMgr )
51 inline SOPHYA::TimeStamp& getObsTime() { return cts_; }
52 // get Obsservation time in seconds since the start date
53 // Temps ecoule en seconde a partir de 0h00 de la date du premier fichier
54 inline double getObsTimeSeconds() { return ((cts_.DaysPart()-startdate_)*86400.+cts_.SecondsPart()); }
55
56 // Attention : les methodes suivantes ne sont pas protegees pour le numero de fibre
57 // Renvoie le numero de frame-counter courant - si fgz=true, soustrait le FC du premier paquet
58 inline uint_8 getCurFrameCounter(size_t fib=0, bool fgz=true)
59 { if (fgz) return (curfc_[fib]-fcfirst_[fib]) ; else return curfc_[fib]; }
60 // Renvoie le TimeTag courant (unite coups d'horloge) - si fgz=true, soustrait le TT du premier paquet
61 inline uint_8 getCurTimeTag(size_t fib=0, bool fgz=true)
62 { if (fgz) return (vpaq_[fib].TimeTag()-ttfirst_[fib]) ; else return vpaq_[fib].TimeTag(); }
63 // Renvoie le TimeTag courant converti en secondes - si fgz=true, soustrait le TT du premier paquet
64 inline double getCurTimeTagSeconds(size_t fib=0, bool fgz=true)
65 {
66 if (fgz) return ((double)(vpaq_[fib].TimeTag()-ttfirst_[fib])/1.25e8) ;
67 else return ((double)vpaq_[fib].TimeTag()/1.25e8);
68 }
69 //---- niveau d'impression
70 inline void SetPrintLevel(int lev=0, uint_8 prtmodulo=10)
71 { prtlev_=lev; prtmodulo_=prtmodulo;}
72
73protected:
74 // Methode devant etre redefinie pour effectuer le traitement - appele pour chaque trigger
75 virtual int Process(); // renvoie 0 si OK, sinon, arret traitement
76
77 RAcqMemZoneMgr& memgr_;
78 MemZaction mmact_; // Definition de l'action sur les paquets (defaut=MemZA_ProcA)
79 MemZStatus mmsta_; // Statut associe a mmact_ (defaut=MemZS_ProcA)
80 int mid_; // Identificateur zone memoire courant
81 bool stop_;
82 vector<Byte*> fbuff_; // Vecteur de pointeur de zone memoire pour chaque fibre
83 vector<Byte*> fprocbuff_; // Vecteur de pointeur de proc_zone_mem pour chaque fibre
84 vector<BRPaquet> vpaq_; // Vecteur de BRPaquet pour chaque fibre
85 vector<Byte*> vprocpaq_; // Vecteur de pointeur de zone memoire pour donnees traitees de chaque paquet/fibre
86 vector<BRPaqChecker> vpchk_;
87 vector<uint_8> vfgok_; // Vecteur de flag si paquet OK pour chaque fibre
88 vector<uint_8> curfc_; // Vecteur de numero de FrameCounter pour chaque fibre
89 vector<uint_8> fcfirst_; // numero du FrameCounter pour le premier paquet
90 vector<uint_8> ttfirst_; // TimeTag pour le premier paquet
91 bool fgokallfibers_; // true -> paquets for all fibers OK
92
93 uint_8 totprocnpaq_;
94 SOPHYA::TimeStamp cts_; // current time stamp, get from MemZoneMgr
95 int_8 startdate_; // Temps de depart cts_.DaysPart()
96
97 string bpnom_; // nom du processeur
98 int bpid_; // numero d'identificateur
99
100 SOPHYA::TimeStamp tmstart_, tmend_; // definition de la fenetre en temps pour appel de Process()
101 bool fgproctimewin_; // false -> pas de fenetre en temps, Process() appele pour tous les paquets
102
103 int prtlev_; // print level
104 uint_8 prtmodulo_; // print periodicity (modulo)
105};
106
107
108
109#endif
Note: See TracBrowser for help on using the repository browser.