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

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

Ajout definition de fenetre en temps de traitement (appel a Process()) ds BRBaseProcessor et BRAnaParam, FileSequenceNumber (numero signalXXX.fits) pour chaque zone memoire dans RAcqMZAuxData / RAcqMemZoneMgr, Reza 04/05/2011

File size: 7.3 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 BRBaseProcessor : classe de base pour l'analyse des donnees
16// BAORadio - Les classes de traitement heritent de cette classe et
17// redefinissent la mathode Process() qui est appele paquet par paquet
18//---------------------------------------------------------------------
19
20/* --Methode-- */
21BRBaseProcessor::BRBaseProcessor(RAcqMemZoneMgr& memgr, MemZaction mmact)
22 : memgr_(memgr), fbuff_(memgr.NbFibres()), fprocbuff_(memgr.NbFibres()),
23 vpaq_(memgr.NbFibres()), vprocpaq_(memgr.NbFibres()),
24 vpchk_(memgr.NbFibres()), vfgok_(memgr.NbFibres()),
25 curfc_(memgr.NbFibres()), fcfirst_(memgr.NbFibres()), ttfirst_(memgr.NbFibres())
26{
27 SetMemZAction(mmact);
28 stop_ = false;
29 for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++) {
30 fbuff_[fib]=NULL;
31 fprocbuff_[fib]=NULL;
32 vpaq_[fib]=BRPaquet(NULL,memgr_.PaqSize());
33 vprocpaq_[fib]=NULL;
34 vpchk_[fib]=BRPaqChecker(true,0);
35 vfgok_[fib]=true;
36 curfc_[fib]=0;
37 fcfirst_[fib]=0;
38 ttfirst_[fib]=0;
39 }
40 fgokallfibers_=true;
41 totprocnpaq_=0;
42 setNameId("baseproc",0);
43 SetPrintLevel();
44}
45
46/* --Methode-- */
47MemZStatus BRBaseProcessor::SetMemZAction(MemZaction mmact)
48{
49 mmact_=mmact;
50 mmsta_=MemZS_ProcA;
51 switch (mmact) {
52 case MemZA_ProcA:
53 mmsta_=MemZS_ProcA;
54 break;
55 case MemZA_ProcB:
56 mmsta_=MemZS_ProcB;
57 break;
58 case MemZA_ProcC:
59 mmsta_=MemZS_ProcC;
60 break;
61 case MemZA_ProcD:
62 mmsta_=MemZS_ProcD;
63 break;
64 case MemZA_ProcE:
65 mmsta_=MemZS_ProcE;
66 break;
67 case MemZA_ProcF:
68 mmsta_=MemZS_ProcF;
69 break;
70 case MemZA_ProcG:
71 mmsta_=MemZS_ProcG;
72 break;
73 case MemZA_ProcH:
74 mmsta_=MemZS_ProcH;
75 break;
76 case MemZA_ProcI:
77 mmsta_=MemZS_ProcI;
78 break;
79 case MemZA_ProcJ:
80 mmsta_=MemZS_ProcI;
81 break;
82 default:
83 mmact_=MemZA_ProcA;
84 mmsta_=MemZS_ProcA;
85 break;
86 }
87 return mmsta_;
88}
89
90/* --Methode-- */
91void BRBaseProcessor::run()
92{
93 setRC(1);
94 int rc=0;
95 try {
96 cout << "BRBaseProcessor[" << bpnom_ << "," << bpid_ << "]::run() - Starting " << " NFibers="
97 << memgr_.NbFibres() << endl;
98 if (fgproctimewin_) cout << " BRBaseProcessor...TimeWindow Start=" << tmstart_ << " End=" << tmend_ << endl;
99
100 size_t paqsz=memgr_.PaqSize();
101 size_t procpaqsz=memgr_.ProcPaqSize();
102
103 double tstartdays = tmstart_.ToDays();
104 double tenddays = tmend_.ToDays();
105
106 bool fgrun=true;
107 while (fgrun) {
108 if (stop_) break;
109 if (memgr_.GetRunState() == MemZR_Stopped) break;
110 mid_ = memgr_.FindMemZoneId(mmact_); // (MemZA_ProcA);
111 // Byte* buffg = memgr_.GetMemZone(mid_);
112 // if (buffg == NULL) {
113 if (mid_ < 0) {
114 cout << "BRBaseProcessor[" << bpnom_ << "," << bpid_ << "]::run()/ERROR FindMemZoneId("
115 << (int)mmact_ << ") ->" << mid_ << ") -> NULL" << endl;
116 setRC(7); fgrun=false;
117 break;
118 }
119 cts_=memgr_.GetAuxData(mid_)->FillTime(); // get associated date/time (DATEOBS)
120 for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++) {
121 fbuff_[fib] = memgr_.GetMemZone(mid_,fib);
122 if (fbuff_[fib] == NULL) { // cela ne devrait pas arriver
123 cout << "BRBaseProcessor[" << bpnom_ << "," << bpid_ << "]::run()/ERROR memgr.GetMemZone("
124 << mid_ << "," << fib << ") -> NULL" << endl;
125 setRC(9); fgrun=false;
126 break;
127 }
128 if ((procpaqsz>0)&&((fprocbuff_[fib]=memgr_.GetProcMemZone(mid_,fib))==NULL)) { // cela ne devrait pas arriver non plus
129 cout << "BRBaseProcessor[" << bpnom_ << "," << bpid_ << "]::run()/ERROR memgr.GetProcMemZone("
130 << mid_ << "," << fib << ") -> NULL" << endl;
131 setRC(9); fgrun=false;
132 break;
133 }
134 }
135
136 // On ne traite les paquets que si pas de fenetre en temps ou tmstart_ <= FillTime() <= tmend_
137 double ftmdays = memgr_.GetAuxData(mid_)->FillTime().ToDays();
138 if ((!fgproctimewin_) || ( (ftmdays<=tenddays)&&(ftmdays>=tstartdays) ) ) {
139
140 for(size_t jp=0; jp<memgr_.NbPaquets(); jp++) { // boucle sur les paquets d'une zone
141 fgokallfibers_=true;
142 for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++) {
143 vpaq_[fib].Set(fbuff_[fib]+jp*paqsz);
144 vfgok_[fib]=vpchk_[fib].Check(vpaq_[fib],curfc_[fib]);
145 if (!vfgok_[fib]) fgokallfibers_=false;
146 if (procpaqsz>0) vprocpaq_[fib] = fprocbuff_[fib]+jp*procpaqsz;
147 }
148 //--- Traitement
149 int rcp=0;
150 if (fgokallfibers_) {
151 if (totprocnpaq_==0) {
152 for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++) {
153 fcfirst_[fib]=curfc_[fib];
154 ttfirst_[fib]=vpaq_[fib].TimeTag();
155 }
156 }
157 rcp=Process();
158 totprocnpaq_++;
159 }
160 // if (rcp != 0) { fgrun=false; break; }
161 } // Fin de boucle sur les paquets
162 } // Fin de test pour fenetre en temps de traitement des paquets
163
164 memgr_.FreeMemZone(mid_, mmsta_); // (MemZS_ProcA);
165 } // Fin de boucle sur les zones a traiter
166 //------------------------------------
167 cout << " ---- END BRBaseProcessor[" << bpnom_ << "," << bpid_ << "]::run() , TotNbProcPaq="
168 << totprocnpaq_ << endl;
169 /*
170 for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++) vpchk_[fib].Print();
171 cout << " ------------------------------------ " << endl;
172 */
173 }
174 catch (std::exception& exc) {
175 cout << "BRBaseProcessor[" << bpnom_ << "," << bpid_ << "]::run()/catched std::exception " << exc.what() << endl;
176 setRC(98);
177 return;
178 }
179 catch(...) {
180 cout << "BRBaseProcessor[" << bpnom_ << "," << bpid_ << "]::run()/catched unknown ... exception " << endl;
181 setRC(99);
182 return;
183 }
184
185}
186
187
188/* --Methode-- */
189int BRBaseProcessor::Process()
190{
191 // Cette methode est appele pour chaque "trigger', cad la serie de paquets pour toutes les fibres
192 // la methode par defaut ne fait rien
193 // if (fgokallfibers_) { faire le traitement }
194 // return 0;
195 /* Exemple de code test */
196 if ((prtlev_>0)&&(totprocnpaq_ %prtmodulo_==0)) {
197 cout << " BRBaseProcessor::Process(totnpaq=" << totprocnpaq_ << ") ObsTime=" << getObsTime()
198 << " TimeTag=" << getCurTimeTagSeconds() << " s. FrameCounter=" << getCurFrameCounter() << endl;
199 if (prtlev_<2) return 0;
200 cout << " ... FrameCnt[0..." << memgr_.NbFibres()-1 << "]=" ;
201 for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++)
202 cout << getCurFrameCounter(fib) << "," ;
203 cout << endl;
204 cout << " ... TimeTag[0..." << memgr_.NbFibres()-1 << "]=" ;
205 for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++)
206 cout << getCurTimeTag(fib) << "," ;
207 cout << endl;
208 if (prtlev_<3) return 0;
209 cout << " ... TimeTagSeconds[0..." << memgr_.NbFibres()-1 << "]=" ;
210 for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++)
211 cout << getCurTimeTagSeconds(fib) << "," ;
212 if (prtlev_<4) return 0;
213 cout << " ... FileSequenceNumber[0..." << memgr_.NbFibres()-1 << "]=" ;
214 for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++)
215 cout << memgr_.GetAuxData(mid_)->FileSequenceNumber(fib) << ",";
216 cout << endl;
217 }
218 return 0;
219}
220
Note: See TracBrowser for help on using the repository browser.