source: Sophya/trunk/Cosmo/RadioBeam/multicyl.h@ 4049

Last change on this file since 4049 was 3572, checked in by cmv, 17 years ago

char* -> const char* pour regler les problemes de deprecated string const... + comparaison unsigned signed + suppression EVOL_PLANCK rz+cmv 07/02/2009

File size: 4.1 KB
Line 
1#ifndef MULTICYL_H
2#define MULTICYL_H
3
4#include "machdefs.h"
5#include "sopnamsp.h"
6#include "mbeamcyl.h"
7
8/*
9 Projet BAORadio / HSHS
10 Programme de simulation pour reconstruction de lobe radio.
11 Reconstruction de lobe a partir de plusieurs cylindres
12
13 R. Ansari - LAL Jan 2007
14
15 Note : On travaille ds un systeme sans dimension
16 unite de temps = 1 = temps d'echantillonnage (f_echant = 1)
17 vitesse de propagation (c) = 1
18*/
19
20
21//-----------------------------------------------------------------------
22//--- Classe de reconstruction de plan source correspondant a un cylindre
23class MultiCylinders {
24public :
25 // nr = nb de recepteurs
26 // ns = nb d'echantillons en temps de chaque paquet
27 // nr = 256 -> resol_ang ~ pi/256 = 0.01 rad ~ 40'
28 // longueur @ f=2 ~ 64 (256*lambda/2 = 256*0.25)
29 MultiCylinders(int nr=256, int ns=1024);
30 MultiCylinders(const char* filename);
31 ~MultiCylinders();
32
33 // Niveau de print de debug
34 inline void SetPrintLevel(int prl=0) { PrtLev_=prl; }
35
36 // Ajout d'un cylindre, en position posX, posY
37 inline int AddCylinder(double posx, double posy)
38 { mCyl_.push_back( new MultiBeamCyl(NR_, NS_, posx, posy) ); return mCyl_.size(); }
39
40 MultiBeamCyl & GetCylinder(int i);
41
42 // Specification de la frequence de base f0 et espacement des recepteurs
43 inline void SetBaseFreqDa(double f0=2., double a=0.25)
44 { freq0_ = f0; Da_ = a; }
45
46 // frequences reduites (entre 0 ... 0.5) , angle en radian, amp ~ 1
47 void SetSources(BRSourceGen* brs, bool ad=true);
48 inline void SetSources(BRSourceGen& brs)
49 { SetSources(&brs, false); }
50
51 // Definition du sigma du bruit gaussien sur les echantillons
52 inline void SetNoiseSigma(double sig=0.) { signoise_ = sig; }
53 // Definition du sigma du jitter d'horloge (typ 0.01)
54 inline void SetTimeJitter(double tjit=0.) { timejitter_ = tjit; }
55 // Definition du sigma des offsets d'horloge entre recepteurs (typ 0.02)
56 inline void SetTimeOffsetSigma(double tsig=0.) { toffsig_ = tsig; }
57
58 // Definition du gain et sigma de fluctuations de gain
59 // nzerogain: nb de recepteurs (choisis au hasard) avec gain mis a zero
60 inline void SetGains(double g=1., double sigg=0., int nzerogain=0)
61 { gain_=g; siggain_=sigg; ngainzero_ = nzerogain; }
62
63
64 // Fait la configuration des cylindres, et reconstruit le plan source
65 // pour chaque cylindre
66 void ReconstructCylinderPlaneS(bool fgzerocentre=true);
67
68 // Reconstruction de la boite 3D des sources
69 // - halfny : nb de bin en angY = 2*halfny+1
70 // - stepangy : pas en angle Y (radian)
71 // NOTE: Cette methode appelle ReconstructCylinderPlaneS(true);
72 // La resolution doit etre <= resol en angX --> ~ 1 deg ~ pi/
73 // @f = 2 , lambda = 0.5 ===> posY <~ lambda/(2 sin resol)
74 // ===> posY < ~ 20
75// void ReconstructSourceBox(int halfny=10, double stepangy=M_PI/300);
76 void ReconstructSourceBox(int halfny, double stepangy, int ny, double stepangx);
77
78
79 // Pour recuperer une tranche reconstruite angX, angY
80 // avec la moyenne des modules entre kfmin <= k (selon z) <= kfmax
81 TMatrix< r_4 > getRecXYSlice(int kfmin, int kfmax);
82 TMatrix< r_4 > getRecYXSlice(int kfmin, int kfmax);
83
84 // Acces a la boite 3D de sources reconstruite
85 inline TArray< complex<r_4> > & getRecSrcBox() { return cmplx_srcbox_; }
86
87 // Configure chaque cylindre a partir des parametres de la classe
88 // est appele automatiquement par ReconstructCylinderPlaneS
89 void ConfigureCylinders();
90
91private:
92 //-------------- Variables membres ------------
93 int NR_, NS_; // nb recepteurs, nb d'echantillons ds chaque paquet
94
95 int PrtLev_; // Niveau de print de debug
96
97 double Da_; // distance entre recepteurs
98 double freq0_; // frequence de base (freqvrai=f+freq0)
99
100 double timejitter_; // le sigma du jitter en temps des coups d'horloge
101 double toffsig_; // sigma des offsets en temps
102
103 BRSourceGen* src_; // Les sources
104 bool adfg_; // if true, delete src
105
106 double signoise_; // sigma du bruit additif (bruit ampli ... )
107 double gain_, siggain_;
108 int ngainzero_;
109
110 vector<MultiBeamCyl *> mCyl_; // Les differents cylindres
111
112 TArray< complex<r_4> > cmplx_srcbox_; // boite3D des sources (angX,Y,freq) reconstruit
113 };
114
115
116#endif
Note: See TracBrowser for help on using the repository browser.