source: Sophya/trunk/AddOn/TAcq/brfitsrd.h@ 3939

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

1/ La description s'applique a la revision precedente qui a ete committee
avec un commentaire errone
2/ Mise en place des methodes et mecanismes permettant de traiter et transmettre correctement
le temps d'acquisition et le temps des paquets depuis la lecture fits aux fichiers de
traitement
3/ Ameliorations diverses ds BRMeanSpecCalculator et specmfib.cc

Reza 13/01/2011

File size: 3.8 KB
RevLine 
[3635]1#ifndef RARDFITS_H_SEEN
2#define RARDFITS_H_SEEN
3
4//----------------------------------------------------------------
[3939]5// Projet BAORadio - (C) LAL/IRFU 2008-2011
[3683]6// Classes de threads pour lecture fichiers fits BAORadio
[3635]7//----------------------------------------------------------------
8
9#include "racqumem.h"
10#include <string>
11#include <vector>
12#include <iostream>
13
14#include "brpaqu.h"
[3683]15#include "minifits.h"
[3909]16#include "timestamp.h"
[3635]17
18using namespace std;
19
[3688]20// ATTENTION cette definition (MAXANAFIB) se trouve dans plusieurs fichiers
[3683]21#ifndef MAXANAFIB
22#define MAXANAFIB 32
23#endif
[3635]24
25//-------------------------------------------------------
[3683]26// Classe thread de lecture des fichiers data BAORadio
27// BRMultiFitsReader : Lecture multi-fibres
28//-------------------------------------------------------
29
30class BRMultiFitsReader : public SOPHYA::ZThread {
31public:
32 BRMultiFitsReader(RAcqMemZoneMgr& mem, vector<string>& dirs,
33 bool rdsamefc=true, uint_4 imin=0, uint_4 imax=0, uint_4 istep=1);
34
35 virtual void run();
36 inline void Stop() { stop_ = true; }
37 inline void STOP() { stop_ = true; }
38
[3883]39 inline int SetPrintLevel(int lev=0, uint_8 prtmodulo=50000)
40 { prtlev_=lev; prtmodulo_=prtmodulo; return 0; }
41
[3683]42protected:
43 bool ReadNextAllFibers(); // Renvoie true si probleme
44 bool ReadNext(int fib); // Renvoie true si probleme
45 // Permet d'avancer d'un paquet dans la zone - renvoie true si probleme
46 inline bool MoveToNextTarget() {
47 if ((mmbuf_ == NULL )||(targ_npaq_ >= max_targ_npaq))
48 if (MZoneManage()) return true;
49 targ_npaq_++;
50 return false;
51 }
52 inline Byte* GetPaquetTarget(int numfib) {
53 if ((mmbufib_[numfib] == NULL )||(targ_npaq_ > max_targ_npaq)||(targ_npaq_ == 0)) return NULL;
54 Byte* rb=mmbufib_[numfib]+(targ_npaq_-1)*packsize_;
55 return rb;
56 }
57 bool MZoneManage(bool clean=false); // Renvoie true si probleme
58
59 RAcqMemZoneMgr& memgr_;
60 vector<string> dirs_; // repertoires donnees chaque fibre
61 bool stop_;
62 bool rdsamefc_; // if true, read paquets with same value of FrameCounter on different fibers
63 uint_4 imin_, imax_, istep_;
[3705]64 uint_8 totnbytesrd_;
[3683]65 uint_8 totsamefc_; // nombre total de paquets avec meme framecounter
66 MiniFITSFile mff_[MAXANAFIB];
67 vector<uint_4> vfilenum_;
68 vector<uint_4> vfpos_;
69 vector<BRPaquet> vpaq_;
70 vector<BRPaqChecker> vpchk_;
71 vector<uint_8> curfc_; // Numeros des FrameCounter des paquets courants
72 vector<uint_8> totnpqrd_; // nombre total de paquets lus / fibre
73 vector<uint_8> totnpqok_; // nombre total de paquets OK / fibre
74
75 uint_4 packsize_;
76 int mid_; // Identificateur zone memoire
77 uint_4 targ_npaq_; // Numero de paquet dans une seule zone memoire
78 uint_4 max_targ_npaq; // = mmgr.NbPaquets() = Max de targ_npaq_
79 Byte* mmbuf_; // Pointeur zone memoire rendu par RAcqMemZoneMgr
80 Byte* mmbufib_[MAXANAFIB]; // Pointeurs zone memoire de chaque fibre rendu par RAcqMemZoneMgr
81
[3938]82 SOPHYA::TimeStamp cdateobs_; // current file time/date (from DATEOBS keyword in fits file)
83 SOPHYA::TimeStamp ctmstart_; // current time/date read from file (from TMSTART keyword in fits file)
84 double cpaqdeltatime_; // current time laps between two paquets in file = (TMEND-TMSTART)/NAXIS2
[3909]85
[3883]86 int prtlev_; // print level
87 uint_8 prtmodulo_; // print periodicity (modulo)
[3683]88};
89
90//-------------------------------------------------------
[3635]91// Classe thread de lecture des fichiers (mini)fits
92//-------------------------------------------------------
93
[3683]94class BRFitsReader : public SOPHYA::ZThread {
[3635]95public:
96 BRFitsReader(RAcqMemZoneMgr& mem, vector<string>& infiles, bool fgnotrl=false);
97
98 virtual void run();
[3683]99 inline void Stop() { stop_ = true; }
[3635]100 inline void STOP() { stop_ = true; }
101
102protected:
103 RAcqMemZoneMgr& memgr;
104 vector<string> infiles_;
105 bool fgnotrl_;
106 bool stop_;
107};
108
[3646]109#endif
Note: See TracBrowser for help on using the repository browser.