source: Sophya/branches/Reza/AddOn/TAcq/racquproc.cc

Last change on this file was 3537, checked in by ansari, 17 years ago

Ajout du module AddOn/TAcq (programmes test pour acquisition BAORadio) ds cvs sophya (sous-repertoire AddOn/) , Reza 22/10/2008

File size: 3.0 KB
Line 
1#include "racquproc.h"
2
3#include <stdlib.h>
4#include <unistd.h>
5#include <fstream>
6
7#include "pexceptions.h"
8#include "tvector.h"
9#include "fioarr.h"
10#include "timestamp.h"
11#include "fftpserver.h"
12#include "fftwserver.h"
13
14#include "FFTW/fftw3.h"
15
16
17#include "pciewrap.h"
18#include "brpaqu.h"
19#include "minifits.h"
20
21
22//-------------------------------------------------------
23// Classe thread de traitement
24//-------------------------------------------------------
25
26DataProc::DataProc(RAcqMemZoneMgr& mem, string& path, uint_4 nmean, uint_4 nmax)
27 : memgr(mem)
28{
29 nmax_ = nmax;
30 nmean_ = nmean;
31 stop_ = false;
32 path_ = path;
33}
34
35inline r_4 Zmod2(complex<r_4> z)
36{ return (z.real()*z.real()+z.imag()*z.imag()); }
37
38void DataProc::run()
39{
40
41 setRC(1);
42 try {
43 TimeStamp ts;
44 cout << " DataProc::run() - Starting " << ts << " NMaxMemZones=" << nmax_ << endl;
45 char fname[512];
46 sprintf(fname,"%s/proc.log",path_.c_str());
47 ofstream filog(fname);
48 filog << " DataProc::run() - starting log file " << ts << endl;
49
50// Initialisation pour clcul FFT
51 TVector< complex<r_4> > cfour; // composant TF
52 uint_4 paqsz = memgr.PaqSize();
53 BRPaquet pq(NULL, NULL, paqsz);
54 TVector<r_4> vx(pq.DataSize());
55 vx = (r_4)(0.);
56 FFTPackServer ffts;
57 ffts.FFTForward(vx, cfour);
58 TVector<r_4> spectre;
59 spectre.ReSize(cfour.Size());
60
61 fftwf_plan plan = fftwf_plan_dft_r2c_1d(pq.DataSize(), vx.Data(),
62 (fftwf_complex *)cfour.Data(), FFTW_ESTIMATE);
63
64 uint_4 ifile = 0;
65 for (uint_4 kmz=0; kmz<nmax_; kmz++) {
66 int mid = memgr.FindMemZoneId(MemZA_Proc);
67 Byte* buff = memgr.GetMemZone(mid);
68 if (buff == NULL) {
69 cout << " DataProc::run()/ERROR memgr.GetMemZone(" << mid << ") -> NULL" << endl;
70 setRC(2);
71 return;
72 }
73 BRPaquet paq0(NULL, buff, paqsz);
74 uint_4 nzm = 0;
75 for(uint_4 i=0; i<memgr.NbPaquets(); i++) {
76 BRPaquet paq(NULL, buff+i*paqsz, paqsz);
77 Byte min = 255;
78 Byte max = 0;
79
80 for(sa_size_t j=0; j<vx.Size(); j++)
81 vx(j) = (r_4)(*(paq.Data()+j));
82 fftwf_execute(plan);
83 // ffts_.FFTForward(vx, cfour_);
84 for(sa_size_t j=0; j<spectre.Size(); j++)
85 spectre(j) += Zmod2(cfour(j));
86 nzm++;
87 }
88 if (nzm >= nmean_) {
89 spectre /= (r_4)(nzm);
90 sprintf(fname,"%s/spectre%d.ppf",path_.c_str(),(int)ifile);
91 POutPersist po(fname);
92 po << spectre;
93 spectre = (r_4)(0.);
94 nzm = 0; ifile++;
95 ts.SetNow();
96 filog << ts << " : proc file " << fname << endl;
97 cout << " DataProc::run() " << ts << " : created file " << fname << endl;
98 }
99
100 memgr.FreeMemZone(mid, MemZS_Proc);
101 }
102 }
103 catch (PException& exc) {
104 cout << " DataProc::run()/catched PException " << exc.Msg() << endl;
105 setRC(3);
106 return;
107 }
108 catch(...) {
109 cout << " DataProc::run()/catched unknown ... exception " << endl;
110 setRC(4);
111 return;
112 }
113 setRC(0);
114 return;
115}
Note: See TracBrowser for help on using the repository browser.