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

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

Ajout/modif classes (brproc.h,.cc) pour analyse de donnees BAORadio, Reza 17/05/2010

File size: 4.6 KB
RevLine 
[3683]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-- */
[3774]19BRBaseProcessor::BRBaseProcessor(RAcqMemZoneMgr& memgr, MemZaction mmact)
[3694]20 : memgr_(memgr), vpaq_(memgr.NbFibres()), vpchk_(memgr.NbFibres()), vfgok_(memgr.NbFibres()),
[3696]21 curfc_(memgr.NbFibres()), fcfirst_(memgr.NbFibres()), ttfirst_(memgr.NbFibres())
[3683]22{
[3774]23 SetMemZAction(mmact);
[3686]24 stop_ = false;
[3683]25 for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++) {
[3696]26 fbuff_.push_back(NULL);
[3694]27 vpaq_[fib]=BRPaquet(NULL,memgr_.PaqSize());
28 vpchk_[fib]=BRPaqChecker(true,0);
29 vfgok_[fib]=true;
30 curfc_[fib]=0;
[3696]31 fcfirst_[fib]=0;
32 ttfirst_[fib]=0;
[3683]33 }
[3696]34 fgokallfibers_=true;
[3683]35 totprocnpaq_=0;
36}
37
38/* --Methode-- */
[3774]39MemZStatus BRBaseProcessor::SetMemZAction(MemZaction mmact)
40{
41 mmact_=mmact;
42 mmsta_=MemZS_ProcA;
43 switch (mmact) {
44 case MemZA_ProcA:
45 mmsta_=MemZS_ProcA;
46 break;
47 case MemZA_ProcB:
48 mmsta_=MemZS_ProcB;
49 break;
50 case MemZA_ProcC:
51 mmsta_=MemZS_ProcC;
52 break;
53 case MemZA_ProcD:
54 mmsta_=MemZS_ProcD;
55 break;
56 case MemZA_ProcE:
57 mmsta_=MemZS_ProcE;
58 break;
59 case MemZA_ProcF:
60 mmsta_=MemZS_ProcF;
61 break;
62 default:
63 mmact_=MemZA_ProcA;
64 mmsta_=MemZS_ProcA;
65 break;
66 }
67 return mmsta_;
68}
69
70/* --Methode-- */
[3683]71void BRBaseProcessor::run()
72{
73 setRC(1);
74 int rc=0;
75 try {
76 cout << " BRBaseProcessor::run() - Starting " << " NFibers=" << memgr_.NbFibres()
77 << " NChan=" << 2*memgr_.NbFibres() << endl;
78
79 size_t paqsz=memgr_.PaqSize();
80 bool fgrun=true;
81 while (fgrun) {
82 if (stop_) break;
83 if (memgr_.GetRunState() == MemZR_Stopped) break;
[3774]84 int mid = memgr_.FindMemZoneId(mmact_); // (MemZA_ProcA);
[3683]85 Byte* buffg = memgr_.GetMemZone(mid);
86 if (buffg == NULL) {
87 cout << "BRBaseProcessor::run()/ERROR memgr.GetMemZone(" << mid << ") -> NULL" << endl;
88 setRC(7); fgrun=false;
89 break;
90 }
[3696]91 for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++) {
92 fbuff_[fib] = memgr_.GetMemZone(mid,fib);
93 if (fbuff_[fib] == NULL) { // cela ne devrait pas arriver
94 cout << "BRBaseProcessor::run()/ERROR memgr.GetMemZone(" << mid << "," << fib << ") -> NULL" << endl;
95 setRC(9); fgrun=false;
96 break;
97 }
98 }
[3683]99 for(size_t jp=0; jp<memgr_.NbPaquets(); jp++) { // boucle sur les paquets d'une zone
100 fgokallfibers_=true;
101 for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++) {
[3696]102 vpaq_[fib].Set(fbuff_[fib]+jp*paqsz);
[3683]103 vfgok_[fib] = vpchk_[fib].Check(vpaq_[fib],curfc_[fib]);
104 if (!vfgok_[fib]) fgokallfibers_=false;
105 }
106 //--- Traitement
[3696]107 int rcp=0;
108 if (fgokallfibers_) {
109 if (totprocnpaq_==0) {
110 for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++) {
111 fcfirst_[fib]=curfc_[fib];
112 ttfirst_[fib]=vpaq_[fib].TimeTag();
113 }
114 }
115 rcp=Process();
116 totprocnpaq_++;
117 }
[3686]118 // if (rcp != 0) { fgrun=false; break; }
[3683]119 } // Fin de boucle sur les paquets
[3774]120 memgr_.FreeMemZone(mid, mmsta_); // (MemZS_ProcA);
[3683]121 } // Fin de boucle sur les zones a traiter
122 //------------------------------------
123 cout << " --------- END BRBaseProcessor::run() , TotNbProcPaq=" << totprocnpaq_ << endl;
[3686]124 /*
125 for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++) vpchk_[fib].Print();
126 cout << " ------------------------------------ " << endl;
127 */
[3683]128 }
129 catch (std::exception& exc) {
130 cout << " BRBaseProcessor::run()/catched std::exception " << exc.what() << endl;
131 setRC(98);
132 return;
133 }
134 catch(...) {
135 cout << " BRBaseProcessor::run()/catched unknown ... exception " << endl;
136 setRC(99);
137 return;
138 }
139
140}
141
142
143/* --Methode-- */
144int BRBaseProcessor::Process()
145{
146 // la methode par defaut ne fait rien
147 // if (fgokallfibers_) { faire le traitement }
[3696]148 // return 0;
149 /* Exemple de code test */
[3686]150 if ( totprocnpaq_ % 1000 == 0 ) {
151 cout << " BRVisibilityCalculator::Process() " << totprocnpaq_ << " FrameCnt=" ;
152 for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++)
153 cout << curfc_[fib] << "," ;
154 cout << endl;
155 cout << " TimeTag : " ;
156 for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++)
157 cout << vpaq_[fib].TimeTag()/125000000 << "," ;
158 cout << " seconds" << endl;
159 }
[3696]160 return 0;
[3683]161}
162
Note: See TracBrowser for help on using the repository browser.