1 | char * names[10] = {"m","teta0","teta","wre","wim","wmod2","wx","wy","lwx","lwy"};
|
---|
2 | NTuple lobes(10, names);
|
---|
3 | int N = 7;
|
---|
4 | int NO2 = N/2;
|
---|
5 | int NTET=1000;
|
---|
6 | // double dtet0 = Lambda/(NO2*DELX);
|
---|
7 |
|
---|
8 | /* #define LobeW1D LobeSquare
|
---|
9 | #define LobeW1D LobeGauss
|
---|
10 | double dtet = M_PI/30./NTET;
|
---|
11 | double dtet0 = M_PI/60./NO2;
|
---|
12 | */
|
---|
13 |
|
---|
14 | /* */
|
---|
15 | #define LobeW1D LobeDipoleDemiLambda
|
---|
16 | double dtet = M_PI/2./NTET;
|
---|
17 | double dtet0 = M_PI/3./NO2;
|
---|
18 | DELX = Lambda/2.;
|
---|
19 | /* */
|
---|
20 |
|
---|
21 | cout << " DTeta= " << dtet << " DTeta0= " << dtet0 << endl;
|
---|
22 | cout << " LobeW1D(0.) = " << LobeW1D(0.) << endl;
|
---|
23 | Timer tm("LOBES");
|
---|
24 |
|
---|
25 | Vector lobe1d(2*NTET+1),vteta(2*NTET+1);
|
---|
26 | TVector< complex<r_8> > lobeS(2*NTET+1);
|
---|
27 |
|
---|
28 | for(int i=-NTET; i<=NTET; i++) {
|
---|
29 | double teta = i*dtet;
|
---|
30 | lobe1d(i+NTET) = LobeW1D(teta);
|
---|
31 | vteta(i+NTET) = teta;
|
---|
32 | complex<r_8> ws(0., 0.);
|
---|
33 | for(int n=-NO2; n<=NO2; n++) {
|
---|
34 | double phase = 2.*M_PI*DELX/Lambda*n*teta;
|
---|
35 | ws += complex< r_8 >( cos(phase), sin(phase) )*LobeW1D(teta);
|
---|
36 | }
|
---|
37 | lobeS(i+NTET) = ws;
|
---|
38 | }
|
---|
39 |
|
---|
40 | KeepObj(lobe1d);
|
---|
41 | KeepObj(vteta);
|
---|
42 | KeepObj(lobeS);
|
---|
43 |
|
---|
44 |
|
---|
45 | double xnt[20];
|
---|
46 | for(int m=-NO2; m<=NO2; m++) {
|
---|
47 | if (m%10 == 0) tm.Split();
|
---|
48 | xnt[0] = m; xnt[1] = m*dtet0;
|
---|
49 | for(int i=-NTET; i<=NTET; i++) {
|
---|
50 | double teta = i*dtet;
|
---|
51 | xnt[2] = teta;
|
---|
52 | complex<r_8> ws(0., 0.);
|
---|
53 | complex<r_8> wsck(0., 0.);
|
---|
54 | for(int n=-NO2; n<=NO2; n++) {
|
---|
55 | double phase = 2.*M_PI*DELX/Lambda*n*(teta-m*dtet0);
|
---|
56 | ws += complex< r_8 >( cos(phase), sin(phase) )*LobeW1D(teta);
|
---|
57 | }
|
---|
58 | xnt[3] = ws.real();
|
---|
59 | xnt[4] = ws.imag();
|
---|
60 | // xnt[5] = sqrt(ws.real()*ws.real()+ws.imag()*ws.imag());
|
---|
61 | xnt[5] = ws.real()*ws.real()+ws.imag()*ws.imag();
|
---|
62 | xnt[6] = xnt[5]*cos(teta);
|
---|
63 | xnt[7] = xnt[5]*sin(teta);
|
---|
64 | if (xnt[5] > 1.e-9) {
|
---|
65 | xnt[8] = 10.*log10(xnt[5])*cos(teta);
|
---|
66 | xnt[9] = 10.*log10(xnt[5])*sin(teta);
|
---|
67 | }
|
---|
68 | else xnt[8] = xnt[9] = -90.;
|
---|
69 |
|
---|
70 | lobes.Fill(xnt);
|
---|
71 | }
|
---|
72 | }
|
---|
73 |
|
---|
74 | cout << lobes;
|
---|
75 | KeepObj(lobes);
|
---|