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

Last change on this file since 3993 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
RevLine 
[3683]1#ifndef BRBASEPROC_H_SEEN
2#define BRBASEPROC_H_SEEN
3
4//----------------------------------------------------------------
[3939]5// Projet BAORadio - (C) LAL/IRFU 2008-2011
[3683]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"
[3909]16#include "timestamp.h" // include SOPHYA
[3683]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:
[3774]27 BRBaseProcessor(RAcqMemZoneMgr& memgr, MemZaction mmact=MemZA_ProcA);
28
29 MemZStatus SetMemZAction(MemZaction mmact=MemZA_ProcA);
[3703]30
[3683]31 virtual void run();
[3938]32
33 inline void Stop() { stop_ = true; }
[3683]34 inline void STOP() { stop_ = true; }
[3703]35
[3778]36 inline void setNameId(const char* nom, int id)
37 { bpnom_=nom; bpid_=id; }
[3955]38 inline void setNameId(string const& nom, int id)
[3778]39 { bpnom_=nom; bpid_=id; }
40
[3979]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
[3938]50 // get Observation Time ( obtained from MemZoneMgr )
51 inline SOPHYA::TimeStamp& getObsTime() { return cts_; }
[3993]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
[3939]56 // Attention : les methodes suivantes ne sont pas protegees pour le numero de fibre
[3938]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
[3683]73protected:
[3703]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
[3683]77 RAcqMemZoneMgr& memgr_;
[3774]78 MemZaction mmact_; // Definition de l'action sur les paquets (defaut=MemZA_ProcA)
79 MemZStatus mmsta_; // Statut associe a mmact_ (defaut=MemZS_ProcA)
[3979]80 int mid_; // Identificateur zone memoire courant
[3696]81 bool stop_;
82 vector<Byte*> fbuff_; // Vecteur de pointeur de zone memoire pour chaque fibre
[3872]83 vector<Byte*> fprocbuff_; // Vecteur de pointeur de proc_zone_mem pour chaque fibre
[3683]84 vector<BRPaquet> vpaq_; // Vecteur de BRPaquet pour chaque fibre
[3872]85 vector<Byte*> vprocpaq_; // Vecteur de pointeur de zone memoire pour donnees traitees de chaque paquet/fibre
[3694]86 vector<BRPaqChecker> vpchk_;
[3683]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
[3938]89 vector<uint_8> fcfirst_; // numero du FrameCounter pour le premier paquet
90 vector<uint_8> ttfirst_; // TimeTag pour le premier paquet
[3683]91 bool fgokallfibers_; // true -> paquets for all fibers OK
[3938]92
[3683]93 uint_8 totprocnpaq_;
[3909]94 SOPHYA::TimeStamp cts_; // current time stamp, get from MemZoneMgr
[3993]95 int_8 startdate_; // Temps de depart cts_.DaysPart()
[3778]96
97 string bpnom_; // nom du processeur
98 int bpid_; // numero d'identificateur
[3938]99
[3979]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
[3938]103 int prtlev_; // print level
104 uint_8 prtmodulo_; // print periodicity (modulo)
[3683]105};
106
107
108
109#endif
Note: See TracBrowser for help on using the repository browser.