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

Last change on this file since 3944 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: 6.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 default:
71 mmact_=MemZA_ProcA;
72 mmsta_=MemZS_ProcA;
73 break;
74 }
75 return mmsta_;
76}
77
78/* --Methode-- */
79void BRBaseProcessor::run()
80{
81 setRC(1);
82 int rc=0;
83 try {
84 cout << "BRBaseProcessor[" << bpnom_ << "," << bpid_ << "]::run() - Starting " << " NFibers="
85 << memgr_.NbFibres() << endl;
86
87 size_t paqsz=memgr_.PaqSize();
88 size_t procpaqsz=memgr_.ProcPaqSize();
89 bool fgrun=true;
90 while (fgrun) {
91 if (stop_) break;
92 if (memgr_.GetRunState() == MemZR_Stopped) break;
93 int mid = memgr_.FindMemZoneId(mmact_); // (MemZA_ProcA);
94 // Byte* buffg = memgr_.GetMemZone(mid);
95 // if (buffg == NULL) {
96 if (mid < 0) {
97 cout << "BRBaseProcessor[" << bpnom_ << "," << bpid_ << "]::run()/ERROR FindMemZoneId("
98 << (int)mmact_ << ") ->" << mid << ") -> NULL" << endl;
99 setRC(7); fgrun=false;
100 break;
101 }
102 cts_=memgr_.GetAuxData(mid)->FillTime(); // get associated date/time (DATEOBS)
103 for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++) {
104 fbuff_[fib] = memgr_.GetMemZone(mid,fib);
105 if (fbuff_[fib] == NULL) { // cela ne devrait pas arriver
106 cout << "BRBaseProcessor[" << bpnom_ << "," << bpid_ << "]::run()/ERROR memgr.GetMemZone("
107 << mid << "," << fib << ") -> NULL" << endl;
108 setRC(9); fgrun=false;
109 break;
110 }
111 if ((procpaqsz>0)&&((fprocbuff_[fib]=memgr_.GetProcMemZone(mid,fib))==NULL)) { // cela ne devrait pas arriver non plus
112 cout << "BRBaseProcessor[" << bpnom_ << "," << bpid_ << "]::run()/ERROR memgr.GetProcMemZone("
113 << mid << "," << fib << ") -> NULL" << endl;
114 setRC(9); fgrun=false;
115 break;
116 }
117 }
118 for(size_t jp=0; jp<memgr_.NbPaquets(); jp++) { // boucle sur les paquets d'une zone
119 fgokallfibers_=true;
120 for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++) {
121 vpaq_[fib].Set(fbuff_[fib]+jp*paqsz);
122 vfgok_[fib]=vpchk_[fib].Check(vpaq_[fib],curfc_[fib]);
123 if (!vfgok_[fib]) fgokallfibers_=false;
124 if (procpaqsz>0) vprocpaq_[fib] = fprocbuff_[fib]+jp*procpaqsz;
125 }
126 //--- Traitement
127 int rcp=0;
128 if (fgokallfibers_) {
129 if (totprocnpaq_==0) {
130 for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++) {
131 fcfirst_[fib]=curfc_[fib];
132 ttfirst_[fib]=vpaq_[fib].TimeTag();
133 }
134 }
135 rcp=Process();
136 totprocnpaq_++;
137 }
138 // if (rcp != 0) { fgrun=false; break; }
139 } // Fin de boucle sur les paquets
140 memgr_.FreeMemZone(mid, mmsta_); // (MemZS_ProcA);
141 } // Fin de boucle sur les zones a traiter
142 //------------------------------------
143 cout << " ---- END BRBaseProcessor[" << bpnom_ << "," << bpid_ << "]::run() , TotNbProcPaq="
144 << totprocnpaq_ << endl;
145 /*
146 for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++) vpchk_[fib].Print();
147 cout << " ------------------------------------ " << endl;
148 */
149 }
150 catch (std::exception& exc) {
151 cout << "BRBaseProcessor[" << bpnom_ << "," << bpid_ << "]::run()/catched std::exception " << exc.what() << endl;
152 setRC(98);
153 return;
154 }
155 catch(...) {
156 cout << "BRBaseProcessor[" << bpnom_ << "," << bpid_ << "]::run()/catched unknown ... exception " << endl;
157 setRC(99);
158 return;
159 }
160
161}
162
163
164/* --Methode-- */
165int BRBaseProcessor::Process()
166{
167 // Cette methode est appele pour chaque "trigger', cad la serie de paquets pour toutes les fibres
168 // la methode par defaut ne fait rien
169 // if (fgokallfibers_) { faire le traitement }
170 // return 0;
171 /* Exemple de code test */
172 if ((prtlev_>0)&&(totprocnpaq_ %prtmodulo_==0)) {
173 cout << " BRBaseProcessor::Process(totnpaq=" << totprocnpaq_ << ") ObsTime=" << getObsTime()
174 << " TimeTag=" << getCurTimeTagSeconds() << " s. FrameCounter=" << getCurFrameCounter() << endl;
175 if (prtlev_<2) return 0;
176 cout << " ... FrameCnt[0..." << memgr_.NbFibres()-1 << "]=" ;
177 for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++)
178 cout << getCurFrameCounter(fib) << "," ;
179 cout << endl;
180 cout << " ... TimeTag[0..." << memgr_.NbFibres()-1 << "]=" ;
181 for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++)
182 cout << getCurTimeTag(fib) << "," ;
183 cout << endl;
184 if (prtlev_<3) return 0;
185 cout << " ... TimeTagSeconds[0..." << memgr_.NbFibres()-1 << "]=" ;
186 for(size_t fib=0; fib<(size_t)memgr_.NbFibres(); fib++)
187 cout << getCurTimeTagSeconds(fib) << "," ;
188 cout << endl;
189 }
190 return 0;
191}
192
Note: See TracBrowser for help on using the repository browser.