source: Sophya/trunk/AddOn/TAcq/brbaseproc.cc@ 3683

Last change on this file since 3683 was 3683, checked in by ansari, 16 years ago

Mise a jour et ajout de fichier pour taritement multifibres apres

prise de donnees de Nov2009 a Pittsburgh

  • Introduction des classes BRMultiFitsReader et BRBaseProcessor Reza, 27/11/2009
File size: 3.0 KB
Line 
1//----------------------------------------------------------------
2// Projet BAORadio - (C) LAL/IRFU 2008-2010
3// Classes de base pour les threads de traitememt donnees BAORadio
4//----------------------------------------------------------------
5
6#include <stdlib.h>
7#include <string.h>
8#include <unistd.h>
9#include <fstream>
10#include "brbaseproc.h"
11
12
13using namespace SOPHYA;
14//---------------------------------------------------------------------
15// Classe de traitement - calcul de visibilite pour n fibres
16//---------------------------------------------------------------------
17
18/* --Methode-- */
19BRBaseProcessor::BRBaseProcessor(RAcqMemZoneMgr& memgr)
20 : memgr_(memgr)
21{
22 for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++) {
23 vpaq_.push_back(BRPaquet(NULL,memgr_.PaqSize()));
24 vpchk_.push_back(BRPaqChecker(true,0));
25 curfc_.push_back(0);
26 }
27 totprocnpaq_=0;
28}
29
30/* --Methode-- */
31void BRBaseProcessor::run()
32{
33 setRC(1);
34 int rc=0;
35 try {
36 cout << " BRBaseProcessor::run() - Starting " << " NFibers=" << memgr_.NbFibres()
37 << " NChan=" << 2*memgr_.NbFibres() << endl;
38
39 size_t paqsz=memgr_.PaqSize();
40 vector<Byte*> fbuff;
41 for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++) fbuff.push_back(NULL);
42 bool fgrun=true;
43 while (fgrun) {
44 if (stop_) break;
45 if (memgr_.GetRunState() == MemZR_Stopped) break;
46 int mid = memgr_.FindMemZoneId(MemZA_ProcA);
47 Byte* buffg = memgr_.GetMemZone(mid);
48 if (buffg == NULL) {
49 cout << "BRBaseProcessor::run()/ERROR memgr.GetMemZone(" << mid << ") -> NULL" << endl;
50 setRC(7); fgrun=false;
51 break;
52 }
53 for(size_t jp=0; jp<memgr_.NbPaquets(); jp++) { // boucle sur les paquets d'une zone
54 fgokallfibers_=true;
55 for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++) {
56 fbuff[fib] = memgr_.GetMemZone(mid,fib);
57 if (fbuff[fib] == NULL) { // cela ne devrait pas arriver
58 cout << "BRBaseProcessor::run()/ERROR memgr.GetMemZone(" << mid << "," << fib << ") -> NULL" << endl;
59 setRC(9); fgrun=false;
60 break;
61 }
62 vpaq_[fib].Set(fbuff[fib]+jp*paqsz);
63 vfgok_[fib] = vpchk_[fib].Check(vpaq_[fib],curfc_[fib]);
64 if (!vfgok_[fib]) fgokallfibers_=false;
65 }
66 //--- Traitement
67 int rcp = Process();
68 totprocnpaq_++;
69 if (rcp != 0) { fgrun=false; break; }
70 } // Fin de boucle sur les paquets
71 memgr_.FreeMemZone(mid, MemZS_ProcA);
72 } // Fin de boucle sur les zones a traiter
73 //------------------------------------
74 cout << " --------- END BRBaseProcessor::run() , TotNbProcPaq=" << totprocnpaq_ << endl;
75 }
76 catch (std::exception& exc) {
77 cout << " BRBaseProcessor::run()/catched std::exception " << exc.what() << endl;
78 setRC(98);
79 return;
80 }
81 catch(...) {
82 cout << " BRBaseProcessor::run()/catched unknown ... exception " << endl;
83 setRC(99);
84 return;
85 }
86
87}
88
89
90/* --Methode-- */
91int BRBaseProcessor::Process()
92{
93 // la methode par defaut ne fait rien
94 // if (fgokallfibers_) { faire le traitement }
95 return 0;
96}
97
Note: See TracBrowser for help on using the repository browser.