| [3683] | 1 | #ifndef  BRPROC_H_SEEN | 
|---|
|  | 2 | #define  BRPROC_H_SEEN | 
|---|
| [3635] | 3 |  | 
|---|
|  | 4 | //---------------------------------------------------------------- | 
|---|
| [3683] | 5 | // Projet BAORadio - (C) LAL/IRFU  2008-2010 | 
|---|
|  | 6 | // Classes de threads de traitememt donnees BAORadio | 
|---|
| [3635] | 7 | //---------------------------------------------------------------- | 
|---|
|  | 8 |  | 
|---|
|  | 9 |  | 
|---|
|  | 10 | #include <string> | 
|---|
|  | 11 | #include <vector> | 
|---|
|  | 12 | #include <iostream> | 
|---|
| [3683] | 13 |  | 
|---|
|  | 14 | #include "racqumem.h" | 
|---|
|  | 15 | #include "brbaseproc.h" | 
|---|
| [3724] | 16 | #include "parlex.h" | 
|---|
| [3635] | 17 | #include "sopnamsp.h" | 
|---|
| [3683] | 18 | #include "tvector.h" | 
|---|
|  | 19 | #include "ntuple.h" | 
|---|
|  | 20 | #include "datatable.h" | 
|---|
| [3635] | 21 |  | 
|---|
|  | 22 | using namespace std; | 
|---|
|  | 23 |  | 
|---|
|  | 24 |  | 
|---|
|  | 25 | //--------------------------------------------------------------------- | 
|---|
| [3683] | 26 | // Classe de traitement - calcul de visibilite pour n fibres | 
|---|
| [3635] | 27 | //--------------------------------------------------------------------- | 
|---|
| [3724] | 28 | class BRVisibilityCalculator : public BRBaseProcessor, ParallelTaskInterface { | 
|---|
| [3683] | 29 | public: | 
|---|
| [3776] | 30 | BRVisibilityCalculator(RAcqMemZoneMgr& memgr, string outpath, uint_4 nmean=1000, size_t nthr=1); | 
|---|
| [3683] | 31 | virtual ~BRVisibilityCalculator(); // Fait le nettoyage final , sauvegarde des objets ... | 
|---|
| [3652] | 32 |  | 
|---|
| [3776] | 33 | // Pour definir le rang de l'objet lors d'un traitement avec plusieurs BRVisibilityCalculator en // | 
|---|
|  | 34 | void DefineRank(uint_4 nbc, uint_4 cid); | 
|---|
|  | 35 |  | 
|---|
|  | 36 | // Pour limiter le calcul des visibilites a certaines fibres | 
|---|
|  | 37 | uint_4 SelectPairs(uint_4 pair1=0, uint_4 nbpairs=99999999); | 
|---|
|  | 38 | // pour definir le binning en frequence pour la VisibDataTable | 
|---|
|  | 39 | int SelectFreqBinning(uint_4 freq1=0, uint_4 freq2=0, uint_4 nbfreq=1); | 
|---|
|  | 40 |  | 
|---|
| [3705] | 41 | // Pour activer la verification des timetag | 
|---|
|  | 42 | // Creation / sauvegarde d'une matrice de TimeTag / FrameCounter avec NCols=maxnpaq (nb de paquets/trigger) | 
|---|
|  | 43 | int ActivateTimeTagCheck(uint_8 maxnpaq); | 
|---|
| [3776] | 44 |  | 
|---|
|  | 45 | // Methode d'execution standard du thread (on redefinit la methode de BRBaseProcessor) | 
|---|
|  | 46 | virtual void run(); | 
|---|
| [3724] | 47 | // Methode de la classe ParallelTaskInterface | 
|---|
|  | 48 | virtual int    execute(int tid); | 
|---|
| [3705] | 49 |  | 
|---|
| [3777] | 50 | // Le nombre total d'operations effectuees | 
|---|
|  | 51 | inline r_8 TotNbFLOP() { return nb_flop_; } | 
|---|
|  | 52 |  | 
|---|
| [3703] | 53 | protected: | 
|---|
| [3683] | 54 | virtual int Process(); | 
|---|
| [3692] | 55 | virtual int FillVisibTable(double fcm, double ttm); | 
|---|
| [3705] | 56 | virtual int CheckTimeTag(); | 
|---|
| [3692] | 57 |  | 
|---|
| [3724] | 58 | ParallelExecutor paralex_;  // Pour l'execution en parallele | 
|---|
|  | 59 | size_t nparthr_; | 
|---|
|  | 60 |  | 
|---|
| [3683] | 61 | uint_4 nmean_;  // Nombre de spectres pour le calcul des moyennes | 
|---|
|  | 62 | string outpath_;  // directory pour fichiers de sortie | 
|---|
| [3776] | 63 | uint_4 nbcalc_, calcid_;  // Nombre total de threads/objets BRVisibilityCalculator parallèles, l'identificateur de l'objet | 
|---|
| [3689] | 64 |  | 
|---|
| [3776] | 65 | uint_4 pairst_, nbpairs_;   // Numero de la premiere paire, nombre de paires | 
|---|
|  | 66 | uint_4 jf1_,jf2_,djf_;  // binning en frequence pour la datatable | 
|---|
|  | 67 |  | 
|---|
| [3694] | 68 | vector<TwoByteComplex*> vpdata_; | 
|---|
| [3726] | 69 | bool* fgallfibok; | 
|---|
| [3694] | 70 |  | 
|---|
| [3692] | 71 | double moyfc_, moytt_; | 
|---|
|  | 72 | TMatrix< complex<r_4> > vismtx_; | 
|---|
|  | 73 | TVector< uint_4 > chanum_; | 
|---|
|  | 74 | //  FitsInOutFile dtfos_; | 
|---|
|  | 75 | DataTable visdt_; | 
|---|
|  | 76 |  | 
|---|
| [3694] | 77 | uint_4 numfile_; | 
|---|
| [3705] | 78 | uint_8 totnbpaq_; | 
|---|
|  | 79 |  | 
|---|
| [3777] | 80 | r_8 nb_flop_;   // Nombre total d'operations effectuees | 
|---|
|  | 81 |  | 
|---|
| [3705] | 82 | // Variables/objets pour la verifications des timetag | 
|---|
|  | 83 | bool fgcktt_;  // true -> checktimetag | 
|---|
| [3711] | 84 | int_8 mindeltatt_;       // difference minimum de deux timetag successifs | 
|---|
| [3705] | 85 | TMatrix< uint_8 > fcmtx_; // matrices des framecounters | 
|---|
|  | 86 | TMatrix< uint_8 > ttmtx_; // matrices des timetag | 
|---|
|  | 87 | vector< uint_8 > vlasttt_;  // dernieres valeurs de TimeTag / fibre | 
|---|
|  | 88 | vector< uint_8 > vbadtt_;  // Number of bad TimeTag paquets per fiber | 
|---|
|  | 89 | vector< uint_8 > vnsamett_;  // Number of paquets having TimeTag <> TT_Fiber1 per fiber | 
|---|
| [3709] | 90 | vector< uint_8 > vndiff5tt_;  // Number of paquets having |TimeTag-TT_Fiber1|>5 per fiber | 
|---|
|  | 91 |  | 
|---|
| [3683] | 92 | }; | 
|---|
|  | 93 |  | 
|---|
|  | 94 |  | 
|---|
| [3776] | 95 | //------------------------------------------------------------------------------- | 
|---|
|  | 96 | // Classe Groupe (ensemble) de Calculateur de Visibilites, tourant en parallele | 
|---|
|  | 97 | //------------------------------------------------------------------------------- | 
|---|
|  | 98 |  | 
|---|
|  | 99 | class BRVisCalcGroup { | 
|---|
|  | 100 | public: | 
|---|
|  | 101 | BRVisCalcGroup(size_t nbcalc, RAcqMemZoneMgr& memgr, string outpath, uint_4 nmean=1000, size_t nthr=1); | 
|---|
|  | 102 | ~BRVisCalcGroup(); | 
|---|
|  | 103 | int SelectFreqBinning(uint_4 freq1=0, uint_4 freq2=0, uint_4 nbfreq=1); | 
|---|
|  | 104 | inline int ActivateTimeTagCheck(uint_8 maxnpaq) | 
|---|
|  | 105 | { return viscalcp_[0]->ActivateTimeTagCheck(maxnpaq); } | 
|---|
|  | 106 |  | 
|---|
|  | 107 | void start(); | 
|---|
|  | 108 | void join(); | 
|---|
|  | 109 | protected: | 
|---|
|  | 110 | vector<BRVisibilityCalculator *> viscalcp_; | 
|---|
| [3777] | 111 | Timer tm_; | 
|---|
| [3776] | 112 | }; | 
|---|
|  | 113 |  | 
|---|
| [3774] | 114 | //--------------------------------------------------------------------- | 
|---|
|  | 115 | // Classe de traitement simple - calcul de spectres moyennes / voie | 
|---|
|  | 116 | //--------------------------------------------------------------------- | 
|---|
|  | 117 | class BRMeanSpecCalculator : public BRBaseProcessor | 
|---|
|  | 118 | { | 
|---|
|  | 119 | public: | 
|---|
|  | 120 | BRMeanSpecCalculator(RAcqMemZoneMgr& memgr, string outpath, uint_4 nmean=1000); | 
|---|
|  | 121 | virtual ~BRMeanSpecCalculator(); // Fait le nettoyage final , sauvegarde des objets ... | 
|---|
|  | 122 |  | 
|---|
|  | 123 | protected: | 
|---|
|  | 124 | virtual int Process(); | 
|---|
|  | 125 |  | 
|---|
|  | 126 | uint_4 nmean_;  // Nombre de spectres pour le calcul des moyennes | 
|---|
|  | 127 | string outpath_;  // directory pour fichiers de sortie | 
|---|
|  | 128 | uint_4 numfile_; | 
|---|
|  | 129 |  | 
|---|
|  | 130 | uint_8 totnbpaq_; | 
|---|
|  | 131 | TMatrix< r_4 > mspecmtx_;    // Matrice des spectres moyennees | 
|---|
|  | 132 | }; | 
|---|
|  | 133 |  | 
|---|
| [3683] | 134 | //------------------------------------------------------------------------- | 
|---|
|  | 135 | //    **** OBSOLETE : BRProcA2C et BRProcB4C | 
|---|
|  | 136 | //   Anciennes classes de traitement (Avant Nov2009) utilises par mcrd.cc | 
|---|
|  | 137 | //------------------------------------------------------------------------- | 
|---|
|  | 138 | //--------------------------------------------------------------------- | 
|---|
|  | 139 | // Classe thread de traitement avec 2 voies par frame (donnees raw/FFT | 
|---|
|  | 140 | //--------------------------------------------------------------------- | 
|---|
|  | 141 |  | 
|---|
| [3652] | 142 | /*-- Arguments du constructeur : | 
|---|
|  | 143 | o mem : gestionnaire zones memoires avec contenant les "frames" avec 2 voies/frame | 
|---|
|  | 144 | o path : Chemin et nom des fichiers PPF produits (on ajoute _numero.ppf ) | 
|---|
|  | 145 | o nmean : Nombre de frame (paquets) moyennes | 
|---|
|  | 146 | o nmax : Nombre maxi de frames traites | 
|---|
|  | 147 | o fghist = true -> fait aussi l'histo des valeurs des echantillons temps | 
|---|
| [3656] | 148 | o nfsmap>0 : fabrication de cartes (image 2D) des spectres, | 
|---|
|  | 149 | avec nfsmap=nombre de frequences sommes | 
|---|
| [3652] | 150 | o fgnotrl = true -> fichiers fits / paquets sans trailer | 
|---|
|  | 151 | o card : numero de carte , juste pour les impressions | 
|---|
|  | 152 | */ | 
|---|
| [3683] | 153 | class BRProcA2C : public ZThread { | 
|---|
| [3635] | 154 | public: | 
|---|
| [3683] | 155 | BRProcA2C(RAcqMemZoneMgr& mem, string& path, bool fgraw, | 
|---|
|  | 156 | uint_4 nmean=10, uint_4 nmax=100, bool fgtshist=false, | 
|---|
|  | 157 | uint_4 nfsmap=0, bool fgnotrl=false, int card=1); | 
|---|
| [3635] | 158 | virtual void run(); | 
|---|
|  | 159 | void Stop(); | 
|---|
|  | 160 | inline void STOP() { stop_ = true; } | 
|---|
|  | 161 | protected: | 
|---|
|  | 162 | RAcqMemZoneMgr& memgr; | 
|---|
|  | 163 | bool stop_; | 
|---|
| [3683] | 164 | bool fgraw_;   // true -> raw data | 
|---|
| [3635] | 165 | uint_4 nmax_;  // Nombre maxi de blocs MemZone traites | 
|---|
| [3656] | 166 | uint_4 nmean_;  // Nombre de spectres pour le calcul des moyennes | 
|---|
|  | 167 | uint_4 nfsmap_;  // Binning en frequence pour les cartes 2D temps-freq | 
|---|
| [3635] | 168 | string path_; | 
|---|
| [3652] | 169 | bool fghist_;   // if true, fill and save histogram with time sample values | 
|---|
| [3640] | 170 | bool fgnotrl_;   // if true, don't check packet trailer - when using pre-june fits files | 
|---|
| [3645] | 171 | int card_;   // Numeros de voies 2*card_-1, 2*card_ | 
|---|
| [3635] | 172 | }; | 
|---|
|  | 173 |  | 
|---|
| [3645] | 174 | //--------------------------------------------------------------------- | 
|---|
| [3683] | 175 | // Classe thread de traitement 2 x 2 voies/paquet (Apres BRProcA2C) | 
|---|
| [3645] | 176 | //--------------------------------------------------------------------- | 
|---|
| [3652] | 177 | /*-- Arguments du constructeur : | 
|---|
|  | 178 | o mem1,mem2 : gestionnairea zones memoires avec contenant les donnees des 4 voies (2 voies/frame) | 
|---|
|  | 179 | o path : Chemin et nom des fichiers PPF produits (on ajoute _numero.ppf ) | 
|---|
|  | 180 | o nmean : Nombre de frame (paquets) moyennes | 
|---|
|  | 181 | o nmax : Nombre maxi de frames traites | 
|---|
|  | 182 | o fgnotrl = true -> fichiers fits / paquets sans trailer | 
|---|
|  | 183 | o card : numero de carte , juste pour les impressions | 
|---|
|  | 184 | */ | 
|---|
|  | 185 |  | 
|---|
| [3683] | 186 | class BRProcB4C : public ZThread { | 
|---|
| [3645] | 187 | public: | 
|---|
| [3683] | 188 | BRProcB4C(RAcqMemZoneMgr& mem1, RAcqMemZoneMgr& mem2, string& path, | 
|---|
|  | 189 | bool fgraw, uint_4 nmean=10, uint_4 nmax=100, bool fgnotrl=false); | 
|---|
| [3645] | 190 | virtual void run(); | 
|---|
|  | 191 | void Stop(); | 
|---|
|  | 192 | inline void STOP() { stop_ = true; } | 
|---|
|  | 193 | protected: | 
|---|
|  | 194 | RAcqMemZoneMgr& memgr1; | 
|---|
|  | 195 | RAcqMemZoneMgr& memgr2; | 
|---|
|  | 196 | bool stop_; | 
|---|
| [3683] | 197 | bool fgraw_;   // true -> raw data | 
|---|
| [3645] | 198 | uint_4 nmax_;  // Nombre maxi de blocs MemZone traites | 
|---|
|  | 199 | uint_4 nmean_;  // Nombre de blocs pour le calcul des moyennes | 
|---|
|  | 200 | string path_; | 
|---|
|  | 201 | bool fgnotrl_;   // if true, don't check packet trailer - when using pre-june fits files | 
|---|
|  | 202 | }; | 
|---|
| [3635] | 203 |  | 
|---|
| [3645] | 204 |  | 
|---|
|  | 205 |  | 
|---|
| [3635] | 206 | #endif | 
|---|