source: Sophya/trunk/AddOn/TAcq/brparam.h@ 4001

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

amelioration mineures au niveau de l'impression, Reza 03/12/2010

File size: 13.2 KB
Line 
1#ifndef BRPARAM_H
2#define BRPARAM_H
3
4//---------------------------------------------------------------
5// Logiciels d'acquisition BAORadio
6// LAL - 2009 - 2010 , R. Ansari, M.Taurigna
7//---------------------------------------------------------------
8
9//---------------------------------------------------------------
10// Classes ADCBoardDesc , BRParList , BRConfList , BRAcqConfig
11// + ADCBoardDesc : Description d'une carte ADC
12// + BRParList : Liste de parametres pour un run d'acquisition
13// + BRConfList : Liste des parametres caracterisant une configuration
14// (nombre de cartes, versions firwares ...)
15// + BRAcqConfig : Classe donnant acces a un objet global BRParList et
16// un objet global BRConfList
17//---------------------------------------------------------------
18
19#include "machdefs.h"
20#include <string>
21#include <vector>
22#include <map>
23#include <iostream>
24#include "brpaqu.h"
25#include "datacards.h"
26#include "bracqvers.h"
27
28using namespace std;
29using namespace SOPHYA;
30
31//-----------------------------------------------------------------------------
32//---- Classe Caracterisant un board ADC
33class ADCBoardDesc {
34public:
35 ADCBoardDesc(int id, string sbid, string cyc_firmw, string str1_firmw, string str2_firmw);
36 ADCBoardDesc(ADCBoardDesc const& bdes);
37
38 inline int& getId() { return id_; }
39 inline string& getSId() { return sbid_; }
40 inline string& CycloneFirmwareId() { return cyclone_firmware_; }
41 inline string& Stratix1FirmwareId() { return stratix1_firmware_; }
42 inline string& Stratix2FirmwareId() { return stratix2_firmware_; }
43 ostream& Print(ostream& os);
44
45 ADCBoardDesc& Set(ADCBoardDesc const & bdes);
46 inline ADCBoardDesc& operator = (ADCBoardDesc const & bdes) { return Set(bdes); }
47protected:
48 int id_;
49 string sbid_;
50 string cyclone_firmware_;
51 string stratix1_firmware_;
52 string stratix2_firmware_;
53};
54
55//-----------------------------------------------------------------------------
56//---- Classe de liste des parametres de configuration BAORadio
57class BRConfList {
58public:
59 BRConfList();
60 BRConfList(string basedir);
61 BRConfList(string basedir, vector<ADCBoardDesc> boards);
62 BRConfList(BRConfList const & cf);
63
64 void SetBaseDirectory(string& basedir);
65 BRConfList& Set(BRConfList const & cf);
66 inline BRConfList& operator = (BRConfList const & cf) { return Set(cf); }
67
68 int SetFiberIds(string& sfids); // Identification absolue des fibres sous forme de 3,5,8
69
70 ostream& Print(ostream& os) ;
71 void ReadDCFile(string file);
72 inline const string& BaseDirectory() const { return basedir_; }
73 inline const string& TmpDirectory() const { return tmpdir_; }
74
75 inline int FiberId(int numfib)
76 { size_t ff=numfib-1; if (ff<fiberIds_.size()) return fiberIds_[ff]; else return 0; }
77
78 void InitFromEnv(); // initialisation a partir de variables d'environnement
79//.......................................
80 string basedir_;
81 vector<ADCBoardDesc> boards_;
82 string fiberIdsS_; // String_liste des numeros 'absolu' des fibres 12,13,14,15 par exemple
83 vector<int> fiberIds_; // liste des numero d'identification 'absolu' des fibres {12,13,14,15} par ex.
84 string tmpdir_; // repertoire pour fichiers temporaires
85};
86
87
88//-----------------------------------------------------------------------------
89//---- Classe de liste des parametres d'acquisition BAORadio
90class BRParList {
91public:
92 BRParList (string acqmode="fft2c", string fibres="1", unsigned int paqsz= 16424,
93 unsigned int dmaszkb = 32, int nfiles=1, int nblocfile=10, string outpath="TstAcq",
94 uint_4 nzon = 4, uint_4 npaqzon = 128);
95
96 BRParList(BRParList const & p);
97
98 void Set(BRParList const & p);
99 ostream& Print(ostream& os) ;
100 void ReadDCFile(string file);
101
102 // Nombre de fibres pour acquisition
103 inline size_t NFibers() { return fiberNum_.size(); }
104 inline size_t NbFibers() { return fiberNum_.size(); }
105 // Numeros des fibres pour acquisition
106 inline int FiberNum(size_t fib)
107 { if (fib<fiberNum_.size()) return fiberNum_[fib]; else return 0; }
108 // Taille des operations DMA (en octets)
109 inline uint_4 DMASizeBytes() { return dmasizekb*1024; }
110 // Taille des operations DMA (en KB=1024 bytes)
111 inline uint_4 DMASizeKB() { return dmasizekb; }
112 // Taille des paquets recus sur PCIExpress
113 inline uint_4 RecvPaquetSize() { return PaqSize; }
114 // Taille des paquets apres reduction eventuelle (donc ds memory manager)
115 inline uint_4 MMgrPaquetSize() { return (fgreducpsize)?redpqsize:PaqSize; }
116 // Nombre de paquets dans chaque bloc de MMgr
117 inline uint_4 MMgrNbPaquet() { return nPaqZone; }
118 // Operation de conversion/mise en ordre des donnees a la reception
119 inline BRDataFmtConv GetDataConvFg() { return swapall; };
120
121 // Nombre maximum de fichiers enregistres
122 inline uint_4 MaxNbFiles() { return NbFiles; }
123 // Nombre de blocs MMgr dans chaque fichiers
124 inline uint_4 BlocPerFile() { return NBlocPerFile; }
125 // Nombre maximum de blocs MMgr traites
126 inline uint_8 MaxNbBlocs() { return (uint_8)NbFiles*(uint_8)NBlocPerFile; }
127 // Nombre maximum paquets traites
128 inline uint_8 MaxNbPaquets() { return MaxNbBlocs()*(uint_8)nPaqZone; }
129
130 // Taille des paquets recus sur PCIExpress
131 inline uint_4 PatternSize() { return ((PaqSize-(BRHDRSIZE+BRTRLSIZE))/4); }
132
133 inline vector< vector<string> >& GetEthTargets() { return eths_targets; }
134 // Nombre de liens ethernet comme source de donnees (paquets)
135 inline int NbEthLinks() { return ethr_nlink; }
136
137 // Identification source ciel
138 inline string& SkySource() { return skysource; }
139
140 //..........................................
141 void Decode();
142
143 string AcqMode; // Mode d'acquisition (conditionne la mise en ordre/conversion des donnees lues par DMA
144 bool fgdatafft; // true -> donnee FFT (provenant du firmware FFT)
145 bool fgfftshrink; // true -> donnee FFT tronquee [NumFreq=2048...3072] (provenant du firmware FFT)
146 bool fgsinglechannel; // true -> un seul canal par fibre (par defaut=2 canaux/fibres)
147
148 string FiberListS ; // String_liste des numeros de fibres a utiliser 1,3,4 par exemple
149 vector<int> fiberNum_; // liste des numeros fibres a utiliser {1,3,4} par exemple
150
151 string OutPathName; // directory de base
152 string ProcPathName;
153 uint_4 PaqSize ; // taille des paquets ou sizeFrame
154
155 // Controle/gestion du DMA
156 uint_4 dmasizekb ; // taille du dma en multiple de 2 (2 a 56)
157 unsigned int maxkwedma_; // Nombre d'iterations de la boucle d'attente de fin de DMA (en unite de 1000)
158 unsigned int nretrydma_; // nombre maxi de tentatives pour terminer le DMA
159 unsigned int first_maxkwedma_; // Nombre d'iterations de la boucle d'attente de fin du PREMIER DMA (u 1000)
160 unsigned int first_nretrydma_; // nombre maxi de tentatives pour terminer le PREMIER DMA
161
162 int NbFiles; // nombre de fichier produits
163 int NBlocPerFile; // nombre de bloc par fichier
164 // Gestionnaire zones memoire
165 uint_4 nZones; // Nombre de zones memoires
166 uint_4 nPaqZone; // 128 Paquets / zone memoire - valeur par defaut
167
168 bool fg_hard_ctrlc ; // autorise le CtrlC si true
169
170 bool savesigfits ; // si true on prduit de sfichier fits
171 bool fgnulldev4fits ;
172
173 BRDataFmtConv swapall ; // type de l'acquisition voir brpaqu.h
174
175 // ---- Pour gerer la reduction des tailles de paquets
176 bool fgreducpsize; // true -> reduction taille des paquets
177 bool reducneedcopy; // true -> besoin de copie intermediaire pour la reduction de taille de paquets
178 BRPaqReducAction pqreducmode;
179 uint_4 redpqsize;
180 uint_4 reducoffset;
181
182 // ---- Variables specifiques em mode transfert DMA vers Ethernet
183 int tcpportid; // No de port TCP/IP
184 // Cote Send DMA -> Ethernet
185 bool pci2eth_fgdirect; // true -> direct transfer DMA to Ethernet
186 vector< vector<string> > eths_targets; // Liste des machines cibles pour les transferts DMA -> ethernet pour chaque fibre
187 vector<string> eths_stargs; // cibles communes pour toutes les fibres
188 map< int, vector<string> > eths_fibtargs; // Cibles specifiees pour les differentes fibres ds les datacards
189 // Cote reception
190 int ethr_nlink; // Nombre total de source d'envoi (= nb total de fibres = nb total liens ethernet)
191 bool ethr_forcesamefc_; // true -> on force receptions de paquets avec SAME FrameCounter sur tous les liens
192 uint_4 ethr_sfc_maxdpc_; // valeur maximum de difference tolere entre compteurs de paquets de differentes fibres
193 uint_4 ethr_sfc_maxresync_; // Nombre maximum de tentative de resynchronisation avant echec
194 bool ethr_waitendmsg_; // true -> EthernetReader attend le message END avant de s'arreter
195
196 // Identification source observee dans le ciel
197 string skysource;
198
199 // Variables pour le traitement/monitoring
200 bool fgdoProc; // false -> pas de thread de monitoring
201 uint_4 nmeanProc; // nombre de paquets moyennes par le thread de traitement/monitoring
202 uint_4 stepProc; // 1/stepProc zones traite - si =0 -> fraction de paquets traites depend de la puissance disponible
203 uint_4 nmaxProc; // Nombre de blocs traites par le thread de traitement/monitoring (0-> MaxNbBlocs())
204
205 // Variables pour le calcul de visibilites
206 bool fgdoVisiC; // true -> calcul des visibilites
207 uint_4 nmeanVisiC; // nombre de paquets moyennes pour les calculs de visibilites
208 uint_4 nbcalgrpVisiC; // Nb d'objets/threads dans BRVisCalcGroup
209 uint_4 nthrVisiC; // Nb de threads pour l'execution parallele ds BRVisibilityCalculator
210 bool fgfdtVisiC; // true -> fill visibility data tables
211 uint_4 firstpairVisiC, nbpairsVisiC; // Numero premiere visibilites, nombre de visibilites a calculer
212 bool fgpimpVisiC; // true -> calcul visibilite pair-impair + autocorrel
213 uint_4 freqminVisiC, freqmaxVisiC, nbinfreqVisiC; // si zone de frequence/rebinning pour visibilites
214
215
216 // Pour des tests de performances ou sans carte ADC (pattern)
217 bool monothr ; // pour les test mono thread
218 bool activate_pattern; // true -> on active le pattern du firmware au lieu de la fibre
219
220 double nopciLossRate; // Utilise avec pour les tests sans carte pciexpress TestPCIWrapperNODMA
221
222 // Niveau d'impression/debug ...
223 int prtlevel_;
224 long int prtmodulo_;
225 long int prtmodulo2_;
226};
227
228//-----------------------------------------------------------------------------
229//---- Classe de gestion des parametres d'acquisition -
230//---- Utilise l'instance global de BRParList
231//-----------------------------------------------------------------------------
232
233class BRAcqConfig {
234 public:
235
236 BRAcqConfig();
237
238 inline void ReadParamFile(string file)
239 { param_->ReadDCFile(file); }
240 inline void Set(BRParList& par)
241 { param_->Set(par); }
242 inline void ReadConfigFile(string file)
243 { config_->ReadDCFile(file); }
244 inline void Set(BRConfList& conf)
245 { config_->Set(conf); }
246
247 ostream& Print(ostream& os);
248
249 int CreateOutputDirectories();
250
251 static inline double AcqVersion() { return BAOR_ACQ_VER ; }
252 static inline const char* AcqVersionS() { return BAOR_ACQ_VER_STR ; }
253
254 inline BRParList& GetParams() { return (*param_) ;};
255 inline BRConfList& GetConfig() { return (*config_) ;};
256
257 inline BRDataFmtConv GetSwapall() { return param_->swapall; };
258 inline bool GetPattern() { return param_->activate_pattern; };
259 inline bool GetMonothr() { return param_->monothr; };
260 inline bool GetSaveFits() { return param_->savesigfits; };
261 inline bool GetFileDevNull() { return param_->fgnulldev4fits; };
262
263 // Nombre de fibres pour l'acquisition
264 inline int NFibers() { return param_->NbFibers(); }
265 inline int NbFibers() { return param_->NbFibers(); }
266 // Numeros des fibres pour l'acquisition
267 inline int FiberNum(size_t fib) { return param_->FiberNum(fib); }
268 // Identificateurs des fibres
269 inline int FiberId(size_t fib) { return config_->FiberId( param_->FiberNum(fib) ); }
270
271 // Taille des operations DMA (en octets)
272 inline uint_4 DMASizeBytes() { return param_->DMASizeBytes(); }
273 // Taille des operations DMA (en KB=1024 bytes)
274 inline uint_4 DMASizeKB() { return param_->DMASizeKB(); }
275 // Taille des paquets recus sur PCIExpress
276 inline uint_4 RecvPaquetSize() { return param_->RecvPaquetSize(); }
277 // Taille des paquets apres reduction eventuelle (donc ds memory manager)
278 inline uint_4 MMgrPaquetSize() { return param_->MMgrPaquetSize(); }
279 // Nombre de paquets dans chaque bloc de MMgr
280 inline uint_4 MMgrNbPaquet() { return param_->MMgrNbPaquet(); }
281 // Operation de conversion/mise en ordre des donnees a la reception
282 inline BRDataFmtConv GetDataConvFg() { return param_->GetDataConvFg(); };
283
284 // Nombre maximum de fichiers enregistres
285 inline uint_4 MaxNbFiles() { return param_->MaxNbFiles(); }
286 // Nombre de blocs MMgr dans chaque fichiers
287 inline uint_4 BlocPerFile() { return param_->BlocPerFile(); }
288 // Nombre maximum de blocs MMgr traites
289 inline uint_8 MaxNbBlocs() { return param_->MaxNbBlocs(); }
290 // Nombre maximum paquets traites
291 inline uint_8 MaxNbPaquets() { return param_->MaxNbPaquets(); }
292
293 // Identification source ciel
294 inline string& SkySource() { return param_->SkySource(); }
295
296 // repertoire d'acquisition
297 inline string OutputDirectory() { return (config_->BaseDirectory()+param_->OutPathName); }
298 string OutputDirectoryFib(int fib);
299 // repertoire temporaire
300 inline const string& TmpDirectory() const { return config_->TmpDirectory(); }
301
302 protected:
303 static BRParList* param_;
304 static BRConfList* config_;
305};
306
307
308#endif
Note: See TracBrowser for help on using the repository browser.