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

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

1/ Correction bug de lecture ds BRMultiFitsReader et EthernetReader lorsque lecture avec SameFrameCounter etait demande
2/ Amelioration des impressions ds ces deux classes et ajout possibilite de controle du flag "SameFC" avec les classes de parametres BRParList et BRAnaParam
3/ Nouveaux datacard @ethrforcesamefc et @prtlev pour acquisition

Reza, 23/09/2010

File size: 10.7 KB
RevLine 
[3671]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//---------------------------------------------------------------
[3672]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
[3671]14// (nombre de cartes, versions firwares ...)
[3672]15// + BRAcqConfig : Classe donnant acces a un objet global BRParList et
[3671]16// un objet global BRConfList
17//---------------------------------------------------------------
18
19#include "machdefs.h"
20#include <string>
[3672]21#include <vector>
22#include <iostream>
[3671]23#include "brpaqu.h"
24#include "datacards.h"
25#include "bracqvers.h"
26
27using namespace std;
28using namespace SOPHYA;
29
[3672]30//-----------------------------------------------------------------------------
31//---- Classe Caracterisant un board ADC
32class ADCBoardDesc {
33public:
34 ADCBoardDesc(int id, string sbid, string cyc_firmw, string str1_firmw, string str2_firmw);
35 ADCBoardDesc(ADCBoardDesc const& bdes);
36
37 inline int& getId() { return id_; }
38 inline string& getSId() { return sbid_; }
39 inline string& CycloneFirmwareId() { return cyclone_firmware_; }
40 inline string& Stratix1FirmwareId() { return stratix1_firmware_; }
41 inline string& Stratix2FirmwareId() { return stratix2_firmware_; }
42 ostream& Print(ostream& os);
43
44 ADCBoardDesc& Set(ADCBoardDesc const & bdes);
45 inline ADCBoardDesc& operator = (ADCBoardDesc const & bdes) { return Set(bdes); }
46protected:
47 int id_;
48 string sbid_;
49 string cyclone_firmware_;
50 string stratix1_firmware_;
51 string stratix2_firmware_;
52};
53
54//-----------------------------------------------------------------------------
55//---- Classe de liste des parametres de configuration BAORadio
56class BRConfList {
57public:
58 BRConfList();
59 BRConfList(string basedir);
60 BRConfList(string basedir, vector<ADCBoardDesc> boards);
61 BRConfList(BRConfList const & cf);
[3674]62
63 void SetBaseDirectory(string basedir);
[3672]64 void Set(BRConfList const & cf);
65 ostream& Print(ostream& os) ;
66 void ReadDCFile(string file);
[3674]67 inline const string& BaseDirectory() const { return basedir_; }
[3672]68//.......................................
69 string basedir_;
70 vector<ADCBoardDesc> boards_;
71};
72
[3775]73#define PMAXNBFIBRES 32
[3671]74
75//-----------------------------------------------------------------------------
76//---- Classe de liste des parametres d'acquisition BAORadio
77class BRParList {
78public:
[3681]79 BRParList (string acqmode="fft2c", string fibres="1", unsigned int paqsz= 16424,
80 unsigned int dmaszkb = 32, int nfiles=1, int nblocfile=10, string outpath="TstAcq",
81 uint_4 nzon = 4, uint_4 npaqzon = 128);
[3671]82
83 BRParList(BRParList const & p);
84
85 void Set(BRParList const & p);
86 ostream& Print(ostream& os) ;
87 void ReadDCFile(string file);
88
89 // Nombre de fibres
90 inline int NFibers() { return NbFibers; }
91 // Taille des operations DMA (en octets)
[3674]92 inline uint_4 DMASizeBytes() { return dmasizekb*1024; }
[3671]93 // Taille des operations DMA (en KB=1024 bytes)
[3674]94 inline uint_4 DMASizeKB() { return dmasizekb; }
[3671]95 // Taille des paquets recus sur PCIExpress
96 inline uint_4 RecvPaquetSize() { return PaqSize; }
97 // Taille des paquets apres reduction eventuelle (donc ds memory manager)
98 inline uint_4 MMgrPaquetSize() { return (fgreducpsize)?redpqsize:PaqSize; }
[3757]99 // Nombre de paquets dans chaque bloc de MMgr
100 inline uint_4 MMgrNbPaquet() { return nPaqZone; }
[3671]101 // Operation de conversion/mise en ordre des donnees a la reception
102 inline BRDataFmtConv GetDataConvFg() { return swapall; };
103
104 // Nombre maximum de fichiers enregistres
105 inline uint_4 MaxNbFiles() { return NbFiles; }
106 // Nombre de blocs MMgr dans chaque fichiers
107 inline uint_4 BlocPerFile() { return NBlocPerFile; }
108 // Nombre maximum de blocs MMgr traites
[3757]109 inline uint_8 MaxNbBlocs() { return (uint_8)NbFiles*(uint_8)NBlocPerFile; }
110 // Nombre maximum paquets traites
111 inline uint_8 MaxNbPaquets() { return MaxNbBlocs()*(uint_8)nPaqZone; }
[3671]112
[3680]113 // Taille des paquets recus sur PCIExpress
114 inline uint_4 PatternSize() { return ((PaqSize-(BRHDRSIZE+BRTRLSIZE))/4); }
115
[3757]116 // Liste des machines cibles pour transfert sur ethernet
117 inline void SetEthTargets(vector<string>& targs) { eths_targets=targs; return; }
118 inline vector<string>& GetEthTargets() { return eths_targets; }
119 // Nombre de liens ethernet comme source de donnees (paquets)
120 inline int NbEthLinks() { return ethr_nlink; }
121
[3674]122 // Identification source ciel
123 inline string& SkySource() { return skysource; }
124
[3671]125 //..........................................
126 void Decode();
127
128 string AcqMode; // Mode d'acquisition (conditionne la mise en ordre/conversion des donnees lues par DMA
[3681]129 bool fgdatafft; // true -> donnee FFT (provenant du firmware FFT)
130 bool fgsinglechannel; // true -> un seul canal par fibre (par defaut=2 canaux/fibres)
131
[3671]132 string FiberListS ; // liste des fibres a utiliser 1,3,4 par exemple
133 int NbFibers; // liste des fibres a utiliser 1,3,4 par exemple
134 int FiberNum[PMAXNBFIBRES];
135
136 string OutPathName; // directory de base
137 string ProcPathName;
[3674]138 uint_4 PaqSize ; // taille des paquets ou sizeFrame
139 uint_4 dmasizekb ; // taille du dma en multiple de 2 (2 a 56)
[3671]140 int NbFiles; // nombre de fichier produits
141 int NBlocPerFile; // nombre de bloc par fichier
142 // Gestionnaire zones memoire
143 uint_4 nZones; // Nombre de zones memoires
144 uint_4 nPaqZone; // 128 Paquets / zone memoire - valeur par defaut
145
146 bool fg_hard_ctrlc ; // autorise le CtrlC si true
147
148 bool savesigfits ; // si true on prduit de sfichier fits
149 bool fgnulldev4fits ;
150
151 BRDataFmtConv swapall ; // type de l'acquisition voir brpaqu.h
152
153 // ---- Pour gerer la reduction des tailles de paquets
154 bool fgreducpsize; // true -> reduction taille des paquets
[3674]155 bool reducneedcopy; // true -> besoin de copie intermediaire pour la reduction de taille de paquets
[3673]156 BRPaqReducAction pqreducmode;
[3671]157 uint_4 redpqsize;
158 uint_4 reducoffset;
159
[3757]160 // ---- Variables specifiques em mode transfert DMA vers Ethernet
[3760]161 int tcpportid; // No de port TCP/IP
[3757]162 // Cote Send DMA -> Ethernet
163 bool pci2eth_fgdirect; // true -> direct transfer DMA to Ethernet
164 vector< string > eths_targets; // Liste des machines cibles pour les transferts DMA -> ethernet
165 // Cote reception
166 int ethr_nlink; // Nombre total de source d'envoi (= nb total de fibre de fibre)
[3883]167 bool ethr_forcesamefc_; // true -> on force receptions de paquets avec SAME FrameCounter sur tous les liens
[3757]168
[3674]169 // Identification source observee dans le ciel
170 string skysource;
[3681]171
172 // Variables pour le traitement/monitoring
173 bool fgdoProc; // false -> pas de thread de monitoring
174 uint_4 nmeanProc; // nombre de paquets moyennes par le thread de traitement/monitoring
175 uint_4 stepProc; // 1/stepProc zones traite - si =0 -> fraction de paquets traites depend de la puissance disponible
176 uint_4 nmaxProc; // Nombre de blocs traites par le thread de traitement/monitoring (0-> MaxNbBlocs())
177
[3876]178 // Variables pour le calcul de visibilites
179 bool fgdoVisiC; // true -> calcul des visibilites
180 uint_4 nmeanVisiC; // nombre de paquets moyennes pour les calculs de visibilites
181 uint_4 nbcalgrpVisiC; // Nb d'objets/threads dans BRVisCalcGroup
182 uint_4 nthrVisiC; // Nb de threads pour l'execution parallele ds BRVisibilityCalculator
183 uint_4 freqminVisiC, freqmaxVisiC, nbinfreqVisiC; // si zone de frequence/rebinning pour visibilites
184
185
[3671]186 // Pour des tests de performances ou sans carte ADC (pattern)
187 bool monothr ; // pour les test mono thread
188 bool activate_pattern; // true -> on active le pattern du firmware au lieu de la fibre
189
190 double nopciLossRate; // Utilise avec pour les tests sans carte pciexpress TestPCIWrapperNODMA
[3883]191
192 // Niveau d'impression/debug ...
193 int prtlevel_;
194 long int prtmodulo_;
[3671]195};
196
197//-----------------------------------------------------------------------------
198//---- Classe de gestion des parametres d'acquisition -
199//---- Utilise l'instance global de BRParList
200//-----------------------------------------------------------------------------
201
202class BRAcqConfig {
203 public:
204
205 BRAcqConfig();
206
[3672]207 inline void ReadParamFile(string file)
[3671]208 { param_->ReadDCFile(file); }
209 inline void Set(BRParList& par)
210 { param_->Set(par); }
[3672]211 inline void ReadConfigFile(string file)
212 { config_->ReadDCFile(file); }
213 inline void Set(BRConfList& conf)
214 { config_->Set(conf); }
[3671]215
[3672]216 ostream& Print(ostream& os);
217
[3671]218 int CreateOutputDirectories();
219
220 static inline double AcqVersion() { return BAOR_ACQ_VER ; }
221 static inline const char* AcqVersionS() { return BAOR_ACQ_VER_STR ; }
[3672]222
[3671]223 inline BRParList& GetParams() { return (*param_) ;};
[3672]224 inline BRConfList& GetConfig() { return (*config_) ;};
225
[3671]226 inline BRDataFmtConv GetSwapall() { return param_->swapall; };
227 inline bool GetPattern() { return param_->activate_pattern; };
228 inline bool GetMonothr() { return param_->monothr; };
229 inline bool GetSaveFits() { return param_->savesigfits; };
230 inline bool GetFileDevNull() { return param_->fgnulldev4fits; };
231
232 // Nombre de fibres
233 inline int NFibers() { return param_->NbFibers; }
234 // Taille des operations DMA (en octets)
235 inline uint_4 DMASizeBytes() { return param_->DMASizeBytes(); }
236 // Taille des operations DMA (en KB=1024 bytes)
237 inline uint_4 DMASizeKB() { return param_->DMASizeKB(); }
238 // Taille des paquets recus sur PCIExpress
239 inline uint_4 RecvPaquetSize() { return param_->RecvPaquetSize(); }
240 // Taille des paquets apres reduction eventuelle (donc ds memory manager)
241 inline uint_4 MMgrPaquetSize() { return param_->MMgrPaquetSize(); }
[3757]242 // Nombre de paquets dans chaque bloc de MMgr
243 inline uint_4 MMgrNbPaquet() { return param_->MMgrNbPaquet(); }
[3671]244 // Operation de conversion/mise en ordre des donnees a la reception
245 inline BRDataFmtConv GetDataConvFg() { return param_->GetDataConvFg(); };
246
247 // Nombre maximum de fichiers enregistres
248 inline uint_4 MaxNbFiles() { return param_->MaxNbFiles(); }
249 // Nombre de blocs MMgr dans chaque fichiers
250 inline uint_4 BlocPerFile() { return param_->BlocPerFile(); }
251 // Nombre maximum de blocs MMgr traites
[3757]252 inline uint_8 MaxNbBlocs() { return param_->MaxNbBlocs(); }
253 // Nombre maximum paquets traites
254 inline uint_8 MaxNbPaquets() { return param_->MaxNbPaquets(); }
[3671]255
[3674]256 // Identification source ciel
257 inline string& SkySource() { return param_->SkySource(); }
258
[3671]259 // repertoire d'acquisition
[3672]260 inline string OutputDirectory() { return (config_->BaseDirectory()+param_->OutPathName); }
[3671]261 string OutputDirectoryFib(int fib);
262
263 protected:
264 static BRParList* param_;
[3672]265 static BRConfList* config_;
[3671]266};
267
268
269#endif
Note: See TracBrowser for help on using the repository browser.