| 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); | 
|---|