BOSS 8.0.0
BESIII Offline Software System
Loading...
Searching...
No Matches
minor.h
Go to the documentation of this file.
1/*
2 * minor.h - signed minors classes
3 *
4 * this file is part of PJFry library
5 * Copyright 2011 Valery Yundin
6 */
7
8#ifndef QUL_MINOR_H
9#define QUL_MINOR_H
10
11#include "common.h"
12#include "kinem.h"
13#include "pointer.h"
14#include <bitset>
15
16// one step of Wynn epsilon improvement
17#define stepWynn( n ) \
18 sum[( 2 + n ) % 3] = sum1; \
19 { \
20 const ncomplex s2 = sum[( 2 + n ) % 3]; \
21 const ncomplex s1 = sum[( 1 + n ) % 3]; \
22 const ncomplex s10 = s21; \
23 s21 = s2 - s1; \
24 if ( s21 == s10 || ( fabs( s2.real() * heps ) >= fabs( s21.real() ) && \
25 fabs( s2.imag() * heps ) >= fabs( s21.imag() ) ) ) \
26 break; \
27 dv = sump; \
28 sump = s1 + 1. / ( 1. / s21 - 1. / s10 ); \
29 } \
30 if ( fabs( sump.real() * teps ) >= fabs( sump.real() - dv.real() ) && \
31 fabs( sump.imag() * teps ) >= fabs( sump.imag() - dv.imag() ) ) \
32 break;
33// -------------
34
35#define tswap( x, y, t ) \
36 if ( x > y ) \
37 { \
38 t = y; \
39 y = x; \
40 x = t; \
41 }
42
43#ifndef USE_ZERO_CHORD
44/* if zero chord is not used - calculate only 4 form factors for 5-point */
45# define CIDX ( DCay - 2 )
46#else
47/* else calculate all (including coefficient of 0'th chord) */
48# define CIDX ( DCay - 1 )
49#endif
50
51class MinorBase : public SRefCnt {
52public:
54
55#ifdef USE_GOLEM_MODE
56# define EVALUNDEF return std::numeric_limits<double>::signaling_NaN();
57 virtual ncomplex A( int ep ) { EVALUNDEF }
58 virtual ncomplex A( int ep, int i ) { EVALUNDEF }
59 virtual ncomplex A( int ep, int i, int j ) { EVALUNDEF }
60 virtual ncomplex A( int ep, int i, int j, int k ) { EVALUNDEF }
61 virtual ncomplex A( int ep, int i, int j, int k, int l ) { EVALUNDEF }
62 virtual ncomplex A( int ep, int i, int j, int k, int l, int m ) { EVALUNDEF }
63 virtual ncomplex B( int ep ) { EVALUNDEF }
64 virtual ncomplex B( int ep, int i ) { EVALUNDEF; }
65 virtual ncomplex B( int ep, int i, int j ) { EVALUNDEF }
66 virtual ncomplex B( int ep, int i, int j, int k ) { EVALUNDEF }
67 virtual ncomplex C( int ep ) { EVALUNDEF }
68 virtual ncomplex C( int ep, int i ) { EVALUNDEF }
69# undef EVALUNDEF
70#endif /* USE_GOLEM_MODE */
71
72 // Symmetric index - start from 1
73 inline static int ns( int i, int j ) CONST {
74 return ( i <= j ? ( i - 1 ) + ( ( j - 1 ) * j ) / 2 : ( j - 1 ) + ( ( i - 1 ) * i ) / 2 );
75 }
76
77 inline static int nss( int i, int j ) CONST // ordered
78 {
79 return ( i - 1 ) + ( ( j - 1 ) * j ) / 2;
80 }
81
82 // Symmetric index - generic
83 inline static int is( int i, int j ) CONST {
84 return ( i <= j ? i + j * ( j + 1 ) / 2 : j + i * ( i + 1 ) / 2 );
85 }
86
87 inline static int is( int i, int j, int k ) CONST {
88 if ( i <= j ) { return ( j <= k ? i + ti2[j] + ti3[k] : is( i, k ) + ti3[j] ); }
89 else { return ( i > k ? is( j, k ) + ti3[i] : j + ti2[i] + ti3[k] ); }
90 }
91
92 inline static int is( int i, int j, int k, int l ) CONST {
93 if ( i <= j )
94 {
95 if ( j <= k )
96 { return ( k <= l ? i + ti2[j] + ti3[k] + ti4[l] : is( i, j, l ) + ti4[k] ); }
97 else { return ( j > l ? is( i, k, l ) + ti4[j] : is( i, k ) + ti3[j] + ti4[l] ); }
98 }
99 else
100 {
101 if ( i > k )
102 { return ( i > l ? is( j, k, l ) + ti4[i] : is( j, k ) + ti3[i] + ti4[l] ); }
103 else { return ( k <= l ? j + ti2[i] + ti3[k] + ti4[l] : is( i, j, l ) + ti4[k] ); }
104 }
105 }
106
107 inline static int iss( int i, int j ) CONST // ordered
108 {
109 assert( i <= j );
110 return i + j * ( j + 1 ) / 2;
111 }
112
113 inline static int iss( int i, int j, int k ) CONST // ordered
114 {
115 assert( i <= j && j <= k );
116 return i + ti2[j] + ti3[k];
117 }
118
119 inline static int iss( int i, int j, int k, int l ) CONST // ordered
120 {
121 assert( i <= j && j <= k && k <= l );
122 return i + ti2[j] + ti3[k] + ti4[l];
123 }
124
125 inline static int iss( int i, int j, int k, int l, int m ) CONST // ordered
126 {
127 assert( i <= j && j <= k && k <= l && l <= m );
128 return i + ti2[j] + ti3[k] + ti4[l] + ti5[m];
129 }
130
131 inline static double getmeps() { return meps; }
132
133 // Utility functions
134 static int im3( int i, int j, int k ) CONST; // Antisymmetric index for "3 out of 6" minors
135 static int im2( int i, int j ) CONST; // Antisymmetric index for "2 out of 6" minors
136 static int signM3ud( int i, int j, int k, int l, int m,
137 int n ) CONST; // Signature[{i,j,k}]*Signature[{l,m,n}]
138 static int signM2ud( int i, int j, int l, int m ) CONST; // Signature[{i,j}]*Signature[{l,m}]
139
140 // fill 'free' array with indices which are not occupied by 'set' array
141 static void freeidxM3( int set[], int free[] );
142
143 static void Rescale( double factor );
144
145private:
146 static const unsigned char ti2[8];
147 static const unsigned char ti3[8];
148 static const unsigned char ti4[8];
149 static const unsigned char ti5[8];
150
151protected:
152 static const unsigned char idxtbl[64];
153
154 static const double teps; // expansion target accuracy
155 static const double heps; // near double precision eps
156
157 static const double ceps;
158
159 static const double deps1;
160 static const double deps2;
161 static const double deps3;
162
163 static const double seps1; // two-point cutoff
164 static const double seps2; // two-point cutoff
165
166 static const double epsir1; // 3-point IR cutoff
167 static const double epsir2; // 3-point IR cutoff
168
169 static double deps;
170 static double meps; // onshell cutoff
171 static double m3eps; // I3 IR cutoff
172};
173
174template <int N> class Minor : public MinorBase {
175public:
176 Minor() {}
177
178 inline double Kay( int i, int j ) PURE {
179 if ( i == 0 ) { return j == 0 ? 0 : 1; }
180 else { return j == 0 ? 1 : Cay[ns( i, j )]; }
181 }
182
183protected:
184 // Cayley matrix (symmetric)
185 static const int DCay = N + 1;
186 double Cay[( DCay - 1 ) * ( DCay ) / 2];
187};
188
189class Minor5 : public Minor<5> {
190public:
191 friend class SPtr<Minor5>;
193 static Ptr create( const Kinem5& k ) { return Ptr( new Minor5( k ) ); }
194 static Ptr create( const Kinem4& k ) { return Ptr( new Minor5( k ) ); }
195
196 ncomplex evalE( int ep );
197 ncomplex evalE( int ep, int i );
198 ncomplex evalE( int ep, int i, int j );
199 ncomplex evalE( int ep, int i, int j, int k );
200 ncomplex evalE( int ep, int i, int j, int k, int l );
201 ncomplex evalE( int ep, int i, int j, int k, int l, int m );
202
203#ifdef USE_GOLEM_MODE
204# ifdef USE_GOLEM_MODE_6
205 int psix;
206# define ix( i ) i < psix ? i : i - 1
207# else
208# define ix( i ) i
209# endif
210 virtual ncomplex A( int ep ) { return evalE( ep ); }
211 virtual ncomplex A( int ep, int i ) { return evalE( ep, ix( i ) ); }
212 virtual ncomplex A( int ep, int i, int j ) { return evalE( ep, ix( i ), ix( j ) ); }
213 virtual ncomplex A( int ep, int i, int j, int k ) {
214 return evalE( ep, ix( i ), ix( j ), ix( k ) );
215 }
216 virtual ncomplex A( int ep, int i, int j, int k, int l ) {
217 return evalE( ep, ix( i ), ix( j ), ix( k ), ix( l ) );
218 }
219 virtual ncomplex A( int ep, int i, int j, int k, int l, int m ) {
220 return evalE( ep, ix( i ), ix( j ), ix( k ), ix( l ), ix( m ) );
221 }
222 virtual ncomplex B( int ep ) { return evalE( ep, 0, 0 ); }
223 virtual ncomplex B( int ep, int i ) { return evalE( ep, 0, 0, ix( i ) ); }
224 virtual ncomplex B( int ep, int i, int j ) { return evalE( ep, 0, 0, ix( i ), ix( j ) ); }
225 virtual ncomplex B( int ep, int i, int j, int k ) {
226 return evalE( ep, 0, 0, ix( i ), ix( j ), ix( k ) );
227 }
228 virtual ncomplex C( int ep ) { return evalE( ep, 0, 0, 0, 0 ); }
229 virtual ncomplex C( int ep, int i ) { return evalE( ep, 0, 0, 0, 0, ix( i ) ); }
230# undef ix
231#endif /* USE_GOLEM_MODE */
232
233 ncomplex I4s( int ep, int s );
234
235 ncomplex I3st( int ep, int s, int t );
236 ncomplex I4Ds( int ep, int s );
237 ncomplex I4Dsi( int ep, int s, int i );
238
239 ncomplex I2stu( int ep, int s, int t, int u );
240 ncomplex I3Dst( int ep, int s, int t );
241 ncomplex I4D2s( int ep, int s );
242
243 ncomplex I4D2si( int ep, int s, int i );
244 ncomplex I3Dsti( int ep, int s, int t, int i );
245 ncomplex I3D2st( int ep, int s, int t );
246 ncomplex I4D3s( int ep, int s );
247 ncomplex I4D2sij( int ep, int s, int i, int j );
248
249 ncomplex I2Dstu( int ep, int s, int t, int u );
250 ncomplex I3D2sti( int ep, int s, int t, int i );
251 ncomplex I4D3si( int ep, int s, int i );
252 ncomplex I4D3sij( int ep, int s, int i, int j );
253
254 ncomplex I2Dstui( int ep, int s, int t, int u, int i );
255 ncomplex I3D2stij( int ep, int s, int t, int i, int j );
256 ncomplex I4D3sijk( int ep, int s, int i, int j, int k );
257
258 ncomplex I4D4s( int ep, int s );
259 ncomplex I4D4si( int ep, int s, int i );
260 ncomplex I3D3sti( int ep, int s, int t, int i );
261 ncomplex I4D4sij( int ep, int s, int i, int j );
262 ncomplex I2D2stui( int ep, int s, int t, int u, int i );
263 ncomplex I3D3stij( int ep, int s, int t, int i, int j );
264 ncomplex I4D4sijk( int ep, int s, int i, int j, int k );
265 ncomplex I2D2stuij( int ep, int s, int t, int u, int i, int j );
266 ncomplex I3D3stijk( int ep, int s, int t, int i, int j, int k );
267 ncomplex I4D4sijkl( int ep, int s, int i, int j, int k, int l );
268
269 // Gram4
270 ncomplex I2D2stu( int ep, int s, int t, int u );
271 ncomplex I3D3st( int ep, int s, int t );
272 ncomplex I2D3stu( int ep, int s, int t, int u );
273 ncomplex I3D4st( int ep, int s, int t );
274 ncomplex I2D4stu( int ep, int s, int t, int u );
275 ncomplex I3D5st( int ep, int s, int t );
276 ncomplex I2D5stu( int ep, int s, int t, int u );
277 ncomplex I3D6st( int ep, int s, int t );
278 ncomplex I2D6stu( int ep, int s, int t, int u );
279 ncomplex I3D7st( int ep, int s, int t );
280
281 // Aux
282
283 double M1( int i, int l ) PURE;
284 double M2( int i, int j, int l, int m ) PURE;
285 double M3( int i, int j, int k, int l, int m, int n ) PURE;
286
287 double gram3( double p1, double p2, double p3 ) PURE;
288
289private:
290 Minor5( const Kinem5& k ); // prevent direct creation
291 Minor5( const Kinem4& k ); // prevent direct creation
292 Minor5( const Minor5& m ) = delete; // prevent copy-constructing
293 Minor5& operator=( const Minor5& m ) = delete; // prevent reassignment
294
295 Kinem5 kinem;
296 const int smax;
297
298 // Maximal elements of sub-Cayley's
299 double pmaxS4[DCay - 1]; // s{1..5}
300
301 double pmaxS3[10]; // s,t - symm 5x5 w/o diag els
302 double pmaxT3[10]; // s,t - symm 5x5 w/o diag els
303 double pmaxU3[10]; // s,t - symm 5x5 w/o diag els
304 int imax3[10];
305
306 double pmaxM2[10]; // i,ip - symm 5x5 w/o diag els
307
308 // flags marking evuation steps
309 enum EvalM {
310 E_None = 0,
311 E_M1,
312 E_M2,
313 E_M3,
314 E_I4D4sijkl,
315 E_I4D4sijk = E_I4D4sijkl + 3,
316 E_I3D3stij = E_I4D4sijk + 3,
317 E_I4D4sij = E_I3D3stij + 3,
318 E_I3D3sti = E_I4D4sij + 3,
319 E_I4D4si = E_I3D3sti + 3,
320 E_I4D4s = E_I4D4si + 3,
321 E_I2D6stu = E_I4D4s + 3,
322 E_I3D7st = E_I2D6stu + 3,
323 E_I2D5stu = E_I3D7st + 3,
324 E_I3D6st = E_I2D5stu + 3,
325 E_I2D4stu = E_I3D6st + 3,
326 E_I3D5st = E_I2D4stu + 3,
327 E_I2D3stu = E_I3D5st + 3,
328 E_I3D4st = E_I2D3stu + 3,
329 E_I3D3stijk = E_I3D4st + 3,
330 E_I2D2stui = E_I3D3stijk + 3,
331 E_I2D2stuij = E_I2D2stui + 3,
332 E_I2D2stu = E_I2D2stuij + 3,
333 E_I3D3st = E_I2D2stu + 3,
334 E_I4D3sijk = E_I3D3st + 3,
335 E_I3D2stij = E_I4D3sijk + 3,
336 E_I2Dstui = E_I3D2stij + 3,
337 E_I3D2st = E_I2Dstui + 2,
338 E_I4D3s = E_I3D2st + 3,
339 E_I4D3sij = E_I4D3s + 3,
340 E_I4D3si = E_I4D3sij + 3,
341 E_I3D2sti = E_I4D3si + 3,
342 E_I2Dstu = E_I3D2sti + 3,
343 E_I3Dsti = E_I2Dstu + 3,
344 E_I4D2sij = E_I3Dsti + 3,
345 E_I2stu = E_I4D2sij + 3,
346 E_I4D2s = E_I2stu + 3,
347 E_I4D2si = E_I4D2s + 3,
348 E_I3Dst = E_I4D2si + 3,
349 E_I4Dsi = E_I3Dst + 3,
350 E_I4Ds = E_I4Dsi + 3,
351 E_I4s = E_I4Ds + 3,
352 E_I3st = E_I4s + 3,
353 E_DUM = E_I3st + 3,
354 E_LEN
355 };
356 std::bitset<E_LEN> fEval;
357
358 // number of unique ways you can scratch out 3 rows in 6x6 matrix
359 static const int DM3 = 20; // Binomial[6,3] = 6*5*4/3! = 20
360 double pM3[DM3 * ( DM3 + 1 ) / 2];
361 static const int DM2 = 15; // Binomial[6,2] = 15
362 double pM2[DM2 * ( DM2 + 1 ) / 2];
363 static const int DM1 = 6; // Binomial[6,1] = 6
364 double pM1[DM1 * ( DM1 + 1 ) / 2];
365
366 // Integral values
367 ncomplex pI4s[3][DCay - 1]; // s{1..5}
368
369 ncomplex pI3st[3][10]; // symm 5x5 w/o diag els
370 ncomplex pI4Ds[1][DCay - 1]; // s{1..5} // finite
371 ncomplex pI4Dsi[3][CIDX][DCay - 1]; // i{1..4}, s{1..5}
372
373 ncomplex pI2stu[2][10]; // symm 5x5x5 w/o diag els // (0,1) parts only
374 ncomplex pI3Dst[1][10]; // symm 5x5 w/o diag els 5*6-5=10 // finite part only
375 ncomplex pI4D2s[1][DCay - 1]; // s{1..5} // finite part only
376
377 ncomplex pI4D2si[1][CIDX][DCay - 1]; // i{1..4} s{1..5} // finite
378 ncomplex pI3Dsti[3][CIDX][10]; // i{1..4} + symm 5x5 w/o diag els
379 ncomplex pI4D2sij[3][CIDX * ( CIDX + 1 ) / 2][DCay - 1]; // symm 4x4, s{1..5}
380
381 ncomplex pI2Dstu[2][10]; // symm 5x5x5 w/o diag els // (0,1) parts only
382 ncomplex pI3D2st[2][10]; // symm 5x5 w/o diag els // (0,1) parts only
383 ncomplex pI4D3s[2][DCay - 1]; // s{1..5} // (0,1) parts only
384 ncomplex pI3D2sti[2][CIDX][10]; // i{1..4} + symm 5x5 w/o diag els // (0,1) parts only
385 ncomplex pI4D3si[2][CIDX][DCay - 1]; // i{1..4} s{1..5} // (0,1) parts only
386 ncomplex pI4D3sij[1][CIDX * ( CIDX + 1 ) / 2][DCay - 1]; // symm 4x4, s{1..5} // finite
387
388 ncomplex pI2Dstui[2][CIDX][DCay - 1]; // ~~ 16 elements // finite part only
389 ncomplex pI3D2stij[3][CIDX * ( CIDX + 1 ) / 2][10]; // 'symm 4x4' x 'symm 5x5 w/o diag els'
390 ncomplex pI4D3sijk[3][CIDX * ( CIDX + 1 ) * ( CIDX + 2 ) / 6][DCay - 1]; // 4x4x4 symm(20
391 // els), s{1..5}
392
393 ncomplex pI2D2stu[2][10]; // symm 5x5x5 w/o diag els // (0,1) parts only
394 ncomplex pI3D3st[2][10]; // symm 5x5 w/o diag els // (0,1) parts only
395 ncomplex pI4D4s[2][DCay - 1]; // s{1..5} // (0,1) parts only
396 ncomplex pI4D4si[2][CIDX][DCay - 1]; // i{1..4} s{1..5} // (0,1) parts only
397 ncomplex pI3D3sti[2][CIDX][10]; // i{1..4} + symm 5x5 w/o diag els // (0,1) parts only
398 ncomplex pI4D4sij[2][CIDX * ( CIDX + 1 ) / 2][DCay - 1]; // symm 4x4, s{1..5} // (0,1)
399 // parts only
400 ncomplex pI2D2stui[2][CIDX][DCay - 1]; // ~~ 16 elements // (0,1) parts only
401 ncomplex pI3D3stij[2][CIDX * ( CIDX + 1 ) / 2][10]; // 'symm 4x4' x 'symm 5x5 w/o diag els'
402 // // (0,1) parts only
403 ncomplex pI4D4sijk[2][CIDX * ( CIDX + 1 ) * ( CIDX + 2 ) / 6][DCay - 1]; // 4x4x4 symm(20
404 // els), s{1..5} //
405 // finite
406 ncomplex pI2D2stuij[2][CIDX][DCay - 1][2]; // as stui but with 0:i==j and 1:i!=j
407 ncomplex pI3D3stijk[3][CIDX * ( CIDX + 1 ) * ( CIDX + 2 ) / 6][10]; // 4x4x4 symm(20 els), x
408 // 'symm 5x5 w/o diag
409 // els'
410 ncomplex pI4D4sijkl[3][CIDX * ( CIDX + 1 ) * ( CIDX + 2 ) * ( CIDX + 3 ) / 24]
411 [DCay - 1]; // 4x4x4x4 symm(35 els), s{1..5} // ????
412
413 // Gram4
414 // TODO cleanup these funcs
415 ncomplex pI2D3stu[2][10]; // symm 5x5x5 w/o diag els // (0,1) parts only
416 ncomplex pI3D4st[2][10]; // symm 5x5 w/o diag els // (0,1) parts only
417 ncomplex pI2D4stu[2][10]; // symm 5x5x5 w/o diag els // (0,1) parts only
418 ncomplex pI3D5st[2][10]; // symm 5x5 w/o diag els // (0,1) parts only
419 ncomplex pI2D5stu[2][10]; // symm 5x5x5 w/o diag els // (0,1) parts only
420 ncomplex pI3D6st[2][10]; // symm 5x5 w/o diag els // (0,1) parts only
421 ncomplex pI2D6stu[2][10]; // symm 5x5x5 w/o diag els // (0,1) parts only
422 ncomplex pI3D7st[2][10]; // symm 5x5 w/o diag els // (0,1) parts only
423
424 // Aux
425
426 // evaluate and save for future use M1,M2,M3 minors
427 void evalM1();
428 void evalM2();
429 void evalM3();
430
431 // find and save maximal elements of subcayley matrices
432 void maxCay();
433
434 // evaluate and save for the future use scratched integrals
435 void I4sEval( int ep );
436
437 void I3stEval( int ep );
438 void I4DsEval( int ep );
439 void I4DsiEval( int ep );
440
441 void I2stuEval( int ep );
442 void I3DstEval( int ep );
443 void I4D2sEval( int ep );
444
445 void I4D2siEval( int ep );
446 void I3DstiEval( int ep );
447 void I3D2stEval( int ep );
448 void I4D3sEval( int ep );
449 void I4D2sijEval( int ep );
450
451 void I2DstuEval( int idx, int ep, int s, int t, int u, int m, int n, double qsq );
452 void I3D2stiEval( int ep );
453 void I4D3siEval( int ep );
454 void I4D3sijEval( int ep );
455
456 void I2DstuiEval( int ep, int s, int t, int u, int i, int ip, double qsq );
457 void I3D2stijEval( int ep );
458 void I4D3sijkEval( int ep );
459
460 void I4D4sEval( int ep );
461 void I4D4siEval( int ep );
462 void I3D3stiEval( int ep );
463 void I4D4sijEval( int ep );
464 void I2D2stuiEval( int ep, int s, int t, int u, int i, int ip, double qsq );
465 void I3D3stijEval( int ep );
466 void I4D4sijkEval( int ep );
467 void I2D2stuijEval( int ep, int s, int t, int u, int i, int ip, double qsq );
468 void I3D3stijkEval( int ep );
469 void I4D4sijklEval( int ep );
470
471 // Gram4
472 void I2D2stuEval( int idx, int ep, int s, int t, int u, int m, int n, double qsq );
473 void I3D3stEval( int ep );
474 void I2D3stuEval( int idx, int ep, int s, int t, int u, int m, int n, double qsq );
475 void I3D4stEval( int ep );
476 void I2D4stuEval( int idx, int ep, int s, int t, int u, int m, int n, double qsq );
477 void I3D5stEval( int ep );
478 void I2D5stuEval( int idx, int ep, int s, int t, int u, int m, int n, double qsq );
479 void I3D6stEval( int ep );
480 void I2D6stuEval( int idx, int ep, int s, int t, int u, int m, int n, double qsq );
481 void I3D7stEval( int ep );
482
483 // IR
484 ncomplex I2mDstu( int ep, int s, int t, int u, int m, int n );
485 ncomplex I2stui( int ep, int s, int t, int u, int i, int ip );
486
487 double M4ii( int u, int v, int i ) PURE;
488 double M4ui( int u, int v, int i ) PURE;
489 double M4vi( int u, int v, int i ) PURE;
490 double M4uu( int u, int v, int i ) PURE;
491 double M4vu( int u, int v, int i ) PURE;
492 double M4vv( int u, int v, int i ) PURE;
493};
494
495class Minor4 : public Minor<4> {
496public:
497 friend class SPtr<Minor4>;
499 static Ptr create( const Kinem4& k, Minor5::Ptr mptr5, int s, int is ) {
500 return Ptr( new Minor4( k, mptr5, s, is ) );
501 }
502
504 ncomplex evalD( int ep, int i );
505 ncomplex evalD( int ep, int i, int j );
506 ncomplex evalD( int ep, int i, int j, int k );
507 ncomplex evalD( int ep, int i, int j, int k, int l );
508
509#ifdef USE_GOLEM_MODE
510 virtual ncomplex A( int ep );
511 virtual ncomplex A( int ep, int i );
512 virtual ncomplex A( int ep, int i, int j );
513 virtual ncomplex A( int ep, int i, int j, int k );
514 virtual ncomplex A( int ep, int i, int j, int k, int l );
515 virtual ncomplex B( int ep );
516 virtual ncomplex B( int ep, int i );
517 virtual ncomplex B( int ep, int i, int j );
518 virtual ncomplex C( int ep );
519#endif /* USE_GOLEM_MODE */
520
521private:
522 Minor4( const Kinem4& k, Minor5::Ptr mptr, int s, int is );
523
524 Kinem4 kinem;
525
526 const Minor5::Ptr pm5;
527 const int ps, offs;
528};
529
530class Minor3 : public Minor<3> {
531public:
532 friend class SPtr<Minor3>;
534 static Ptr create( const Kinem3& k, Minor5::Ptr mptr5, int s, int t, int is ) {
535 return Ptr( new Minor3( k, mptr5, s, t, is ) );
536 }
537
539 ncomplex evalC( int ep, int i );
540 ncomplex evalC( int ep, int i, int j );
541 ncomplex evalC( int ep, int i, int j, int k );
542
543#ifdef USE_GOLEM_MODE
544 virtual ncomplex A( int ep );
545 virtual ncomplex A( int ep, int i );
546 virtual ncomplex A( int ep, int i, int j );
547 virtual ncomplex A( int ep, int i, int j, int k );
548 virtual ncomplex B( int ep );
549 virtual ncomplex B( int ep, int i );
550#endif /* USE_GOLEM_MODE */
551
552private:
553 Minor3( const Kinem3& k );
554 Minor3( const Kinem3& k, Minor5::Ptr mptr5, int s, int t, int is );
555
556 Kinem3 kinem;
557
558 const Minor5::Ptr pm5;
559 const int ps, pt, offs;
560};
561
562class Minor2 : public Minor<2> {
563public:
564 friend class SPtr<Minor2>;
566 static Ptr create( const Kinem2& k, Minor5::Ptr mptr5, int s, int t, int u, int is ) {
567 return Ptr( new Minor2( k, mptr5, s, t, u, is ) );
568 }
569
571 ncomplex evalB( int ep, int i );
572 ncomplex evalB( int ep, int i, int j );
573
574#ifdef USE_GOLEM_MODE
575 virtual ncomplex A( int ep );
576 virtual ncomplex A( int ep, int i );
577 virtual ncomplex A( int ep, int i, int j );
578 virtual ncomplex B( int ep );
579#endif /* USE_GOLEM_MODE */
580
581private:
582 Minor2( const Kinem2& k );
583 Minor2( const Kinem2& k, Minor5::Ptr mptr5, int s, int t, int u, int is );
584
585 Kinem2 kinem;
586
587 const Minor5::Ptr pm5;
588 const int ps, pt, pu, offs;
589};
590
591/* ===============================================
592 *
593 * Utility functions
594 *
595 * ===============================================
596 */
597
598// Completely antysymmetric i,j,k size 6 matrix index
599inline int MinorBase::im3( int i, int j, int k ) {
600 return idxtbl[( 1 << i ) | ( 1 << j ) | ( 1 << k )];
601}
602
603// Completely antysymmetric i,j size 6 matrix index
604inline int MinorBase::im2( int i, int j ) { return idxtbl[( 1 << i ) | ( 1 << j )]; }
605
606// Signature[{i,j,k}]*Signature[{l,m,n}]
607inline int MinorBase::signM3ud( int i, int j, int k, int l, int m, int n ) {
608 int t = ( j - i ) * ( k - j ) * ( k - i ) * ( m - l ) * ( n - m ) * ( n - l );
609 return t == 0 ? 0 : 2 * ( t >> ( sizeof( int ) * 8 - 1 ) ) + 1;
610}
611
612// Signature[{i,j}]*Signature[{l,m}]
613inline int MinorBase::signM2ud( int i, int j, int l, int m ) {
614 int t = ( j - i ) * ( m - l );
615 return t == 0 ? 0 : 2 * ( t >> ( sizeof( int ) * 8 - 1 ) ) + 1;
616}
617
618#endif /* QUL_MINOR_H */
double p2[4]
double p1[4]
std::complex< double > ncomplex
const Int_t n
XmlRpcServer s
**********Class see also m_nmax DOUBLE PRECISION m_amel DOUBLE PRECISION m_x2 DOUBLE PRECISION m_alfinv DOUBLE PRECISION m_Xenph INTEGER m_KeyWtm INTEGER m_idyfs DOUBLE PRECISION m_zini DOUBLE PRECISION m_q2 DOUBLE PRECISION m_Wt_KF DOUBLE PRECISION m_WtCut INTEGER m_KFfin *COMMON c_KarLud $ !Input CMS energy[GeV] $ !CMS energy after beam spread beam strahlung[GeV] $ !Beam energy spread[GeV] $ !z boost due to beam spread $ !electron beam mass *ff pair spectrum $ !minimum v
Definition KarLud.h:35
***************************************************************************************Pseudo Class RRes *****************************************************************************************Parameters and physical constants **Maarten sept ************************************************************************DOUBLE PRECISION xsmu **************************************************************************PARTICLE DATA all others are from PDG *Only resonances with known widths into electron pairs are sept ************************************************************************C Declarations C
Definition RRes.h:29
SPtr< Minor2 > Ptr
Definition minor.h:565
static Ptr create(const Kinem2 &k, Minor5::Ptr mptr5, int s, int t, int u, int is)
Definition minor.h:566
ncomplex evalB(int ep)
SPtr< Minor3 > Ptr
Definition minor.h:533
static Ptr create(const Kinem3 &k, Minor5::Ptr mptr5, int s, int t, int is)
Definition minor.h:534
ncomplex evalC(int ep)
SPtr< Minor4 > Ptr
Definition minor.h:498
static Ptr create(const Kinem4 &k, Minor5::Ptr mptr5, int s, int is)
Definition minor.h:499
ncomplex evalD(int ep)
ncomplex I2stu(int ep, int s, int t, int u)
Definition minor.cpp:919
double M2(int i, int j, int l, int m) PURE
Definition minor.cpp:480
ncomplex I2D2stui(int ep, int s, int t, int u, int i)
Definition minor.cpp:2930
ncomplex I4D3sijk(int ep, int s, int i, int j, int k)
Definition minor.cpp:2266
ncomplex I4D3s(int ep, int s)
Definition minor.cpp:1761
ncomplex I3st(int ep, int s, int t)
Definition minor.cpp:872
ncomplex I2D6stu(int ep, int s, int t, int u)
Definition minorex.cpp:619
ncomplex I2D3stu(int ep, int s, int t, int u)
Definition minorex.cpp:167
ncomplex I4D2si(int ep, int s, int i)
Definition minor.cpp:1308
ncomplex I3D3stijk(int ep, int s, int t, int i, int j, int k)
Definition minor.cpp:3384
ncomplex I4D3sij(int ep, int s, int i, int j)
Definition minor.cpp:2022
ncomplex I3Dsti(int ep, int s, int t, int i)
Definition minor.cpp:1367
ncomplex I3D3sti(int ep, int s, int t, int i)
Definition minor.cpp:2745
SPtr< Minor5 > Ptr
Definition minor.h:192
static Ptr create(const Kinem5 &k)
Definition minor.h:193
ncomplex evalE(int ep)
Definition minoreval.cpp:24
ncomplex I3D2sti(int ep, int s, int t, int i)
Definition minor.cpp:1860
ncomplex I3D2stij(int ep, int s, int t, int i, int j)
Definition minor.cpp:2167
ncomplex I4D4sijk(int ep, int s, int i, int j, int k)
Definition minor.cpp:3202
ncomplex I4s(int ep, int s)
Definition minor.cpp:834
double M1(int i, int l) PURE
Definition minor.cpp:474
double gram3(double p1, double p2, double p3) PURE
Definition minor.cpp:548
ncomplex I3D6st(int ep, int s, int t)
Definition minorex.cpp:570
ncomplex I4D3si(int ep, int s, int i)
Definition minor.cpp:1974
ncomplex I3D3st(int ep, int s, int t)
Definition minor.cpp:2430
ncomplex I4D2sij(int ep, int s, int i, int j)
Definition minor.cpp:1489
ncomplex I4D4sij(int ep, int s, int i, int j)
Definition minor.cpp:2873
ncomplex I2D5stu(int ep, int s, int t, int u)
Definition minorex.cpp:463
ncomplex I2D2stuij(int ep, int s, int t, int u, int i, int j)
Definition minor.cpp:3265
ncomplex I4D4si(int ep, int s, int i)
Definition minor.cpp:2677
ncomplex I4Ds(int ep, int s)
Definition minor.cpp:974
ncomplex I2D2stu(int ep, int s, int t, int u)
Definition minor.cpp:2341
ncomplex I2Dstui(int ep, int s, int t, int u, int i)
Definition minor.cpp:2077
ncomplex I4D4s(int ep, int s)
Definition minor.cpp:2565
ncomplex I3D7st(int ep, int s, int t)
Definition minorex.cpp:729
ncomplex I4D4sijkl(int ep, int s, int i, int j, int k, int l)
Definition minor.cpp:3521
ncomplex I4Dsi(int ep, int s, int i)
Definition minor.cpp:1056
ncomplex I2D4stu(int ep, int s, int t, int u)
Definition minorex.cpp:309
ncomplex I2Dstu(int ep, int s, int t, int u)
Definition minor.cpp:1551
static Ptr create(const Kinem4 &k)
Definition minor.h:194
ncomplex I3D5st(int ep, int s, int t)
Definition minorex.cpp:414
double M3(int i, int j, int k, int l, int m, int n) PURE
Definition minor.cpp:494
ncomplex I3D4st(int ep, int s, int t)
Definition minorex.cpp:260
ncomplex I3D2st(int ep, int s, int t)
Definition minor.cpp:1636
ncomplex I3D3stij(int ep, int s, int t, int i, int j)
Definition minor.cpp:3015
ncomplex I4D2s(int ep, int s)
Definition minor.cpp:1220
ncomplex I3Dst(int ep, int s, int t)
Definition minor.cpp:1111
static const double epsir1
Definition minor.h:166
static int iss(int i, int j) CONST
Definition minor.h:107
static void Rescale(double factor)
Definition minor.cpp:35
static const double seps1
Definition minor.h:163
static const unsigned char idxtbl[64]
Definition minor.h:40
static double getmeps()
Definition minor.h:131
static int is(int i, int j, int k, int l) CONST
Definition minor.h:92
static void freeidxM3(int set[], int free[])
Definition minor.cpp:108
static int is(int i, int j, int k) CONST
Definition minor.h:87
static double deps
Definition minor.h:169
static int ns(int i, int j) CONST
Definition minor.h:73
static const double heps
Definition minor.h:155
MinorBase()
Definition minor.h:53
static int iss(int i, int j, int k, int l) CONST
Definition minor.h:119
static int signM3ud(int i, int j, int k, int l, int m, int n) CONST
Definition minor.h:607
static int iss(int i, int j, int k) CONST
Definition minor.h:113
static int nss(int i, int j) CONST
Definition minor.h:77
static const double deps2
Definition minor.h:160
static const double ceps
Definition minor.h:157
static int im2(int i, int j) CONST
Definition minor.h:604
static const double epsir2
Definition minor.h:167
static const double teps
Definition minor.h:154
static const double seps2
Definition minor.h:164
static int is(int i, int j) CONST
Definition minor.h:83
static int iss(int i, int j, int k, int l, int m) CONST
Definition minor.h:125
static int signM2ud(int i, int j, int l, int m) CONST
Definition minor.h:613
static const double deps3
Definition minor.h:161
static double m3eps
Definition minor.h:171
static double meps
Definition minor.h:170
static const double deps1
Definition minor.h:159
static int im3(int i, int j, int k) CONST
Definition minor.h:599
static const int DCay
Definition minor.h:185
Minor()
Definition minor.h:176
double Kay(int i, int j) PURE
Definition minor.h:178
double Cay[(DCay - 1) *(DCay)/2]
Definition minor.h:186
Definition pointer.h:22
SRefCnt()
Definition pointer.h:16
#define CIDX
Definition minor.h:45
#define ix(i)
double int * ep
Definition qcdloop1.h:82
int t()
Definition t.c:1
#define ns(x)
Definition xmltok.c:1355