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

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

modification provisoire pour lecture fichiers visibilites 2010, Reza 13/01/2011

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