ROOT  6.06/08
Reference Guide
TCernLib.cxx
Go to the documentation of this file.
1 // @(#)root/table:$Id$
2 // Author: Valery Fine(fine@bnl.gov) 25/09/99
3 
4 /*************************************************************************
5  * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. *
6  * All rights reserved. *
7  * *
8  * For the licensing terms see $ROOTSYS/LICENSE. *
9  * For the list of contributors see $ROOTSYS/README/CREDITS. *
10  *************************************************************************/
11 
12 ////////////////////////////////////////////////////////////////////////////////
13 // The set of methods to work with the plain matrix / vector
14 // "derived" from https://cern-tex.web.cern.ch/cern-tex/shortwrupsdir/f110/top.html
15 // "derived" from https://cern-tex.web.cern.ch/cern-tex/shortwrupsdir/f112/top.html
16 //
17 // Revision 1.7 2006/05/21 18:05:26 brun
18 // Fix more coding conventions violations
19 //
20 // Revision 1.6 2006/05/20 14:06:09 brun
21 // Fix a VERY long list of coding conventions violations
22 //
23 // Revision 1.5 2003/09/30 09:52:49 brun
24 // Add references to the original CERNLIB packages
25 //
26 // Revision 1.4 2003/05/28 15:17:03 brun
27 // From Valeri Fine. A new version of the table package.
28 // It fixes a couple of memory leaks:
29 // class TTableDescriptorm
30 // class TVolumePosition
31 // and provides some clean up
32 // for the TCL class interface.
33 //
34 // Revision 1.3 2003/04/03 17:39:39 fine
35 // Make merge with ROOT 3.05.03 and add TR package
36 //
37 // Revision 1.2 2003/02/04 23:35:20 fine
38 // Clean up
39 //
40 // Revision 1.1 2002/04/15 20:23:39 fine
41 // NEw naming schema for RootKErnel classes and a set of classes to back geometry OO
42 //
43 // Revision 1.2 2001/05/29 19:08:08 brun
44 // New version of some STAR classes from Valery.
45 //
46 // Revision 1.2 2001/05/27 02:38:14 fine
47 // New method trsedu to solev Ax=B from Victor
48 //
49 // Revision 1.1.1.1 2000/11/27 22:57:14 fisyak
50 //
51 //
52 // Revision 1.1.1.1 2000/05/16 17:00:48 rdm
53 // Initial import of ROOT into CVS
54 //
55 ////////////////////////////////////////////////////////////////////////////////////////////////////////
56 
57 #include <assert.h>
58 #include "TCernLib.h"
59 #include "TMath.h"
60 #include "TArrayD.h"
61 #include "TError.h"
62 
64 
65 #define TCL_MXMAD(n_,a,b,c,i,j,k) \
66  /* Local variables */ \
67  int l, m, n, ia, ic, ib, ja, jb, iia, iib, ioa, iob; \
68  \
69  /* Parameter adjuTments */ \
70  --a; --b; --c; \
71  /* Function Body */ \
72 /* MXMAD MXMAD1 MXMAD2 MXMAD3 MXMPY MXMPY1 MXMPY2 MXMPY3 MXMUB MXMUB1 MXMUB2 MXMUB3 */ \
73 /* const int iandj1[] = {21, 22, 23, 24, 11, 12, 13, 14, 31, 32, 33, 34 }; */ \
74  const int iandj1[] = {2, 2 , 2 , 2 , 1 , 1 , 1 , 1 , 3 , 3 , 3 , 3 }; \
75  const int iandj2[] = { 1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4 }; \
76  int n1 = iandj1[n_]; \
77  int n2 = iandj2[n_]; \
78  if (i == 0 || k == 0) return 0; \
79  \
80  switch (n2) { \
81  case 1: iia = 1; ioa = j; iib = k; iob = 1; break; \
82  case 2: iia = 1; ioa = j; iib = 1; iob = j; break; \
83  case 3: iia = i; ioa = 1; iib = k; iob = 1; break; \
84  case 4: iia = i; ioa = 1; iib = 1; iob = j; break; \
85  default: iia = ioa = iib = iob = 0; assert(iob); \
86  }; \
87  \
88  ia = 1; ic = 1; \
89  for (l = 1; l <= i; ++l) { \
90  ib = 1; \
91  for (m = 1; m <= k; ++m,++ic) { \
92  switch (n1) { \
93  case 1: c[ic] = 0.; break; \
94  case 3: c[ic] = -c[ic]; break; \
95  }; \
96  if (j == 0) continue; \
97  ja = ia; jb = ib; \
98  double cic = c[ic]; \
99  for (n = 1; n <= j; ++n, ja+=iia, jb+=iib) \
100  cic += a[ja] * b[jb]; \
101  c[ic] = cic; \
102  ib += iob; \
103  } \
104  ia += ioa; \
105  }
106 
107 ////////////////////////////////////////////////////////////////////////////////
108 
109 float *TCL::mxmad_0_(int n_, const float *a, const float *b, float *c, int i, int j, int k)
110 {
111  TCL_MXMAD(n_,a,b,c,i,j,k)
112  return c;
113 } /* mxmad_ */
114 
115 ////////////////////////////////////////////////////////////////////////////////
116 
117 double *TCL::mxmad_0_(int n_, const double *a, const double *b, double *c, int i, int j, int k)
118 {
119  TCL_MXMAD(n_,a,b,c,i,j,k)
120  return c;
121 } /* mxmad_ */
122 
123 #undef TCL_MXMAD
124 
125 //___________________________________________________________________________
126 //
127 // Matrix Multiplication
128 //___________________________________________________________________________
129 
130 #define TCL_MXMLRT( n__, a, b, c, ni,nj) \
131  if (ni <= 0 || nj <= 0) return 0; \
132  double x; \
133  int ia, ib, ic, ja, kc, ii, jj, kj, ki, ia1, ib1, ic1, ja1; \
134  int ipa = 1; int jpa = nj; \
135  if (n__ == 1) { ipa = ni; jpa = 1; } \
136  \
137  --a; --b; --c; \
138  \
139  ic1 = 1; ia1 = 1; \
140  for (ii = 1; ii <= ni; ++ii, ic1+=ni, ia1+=jpa) { \
141  ic = ic1; \
142  for (kc = 1; kc <= ni; ++kc,ic++) c[ic] = 0.; \
143  ib1 = 1; ja1 = 1; \
144  for (jj = 1; jj <= nj; ++jj,++ib1,ja1 += ipa) { \
145  ib = ib1; ia = ia1; \
146  x = 0.; \
147  for (kj = 1;kj <= nj;++kj,ia+=ipa,ib += nj) \
148  x += a[ia] * b[ib]; \
149  ja = ja1; ic = ic1; \
150  for (ki = 1; ki <= ni; ++ki,++ic,ja += jpa) \
151  c[ic] += x * a[ja]; \
152  } \
153  }
154 
155 ////////////////////////////////////////////////////////////////////////////////
156 /// Matrix Multiplication
157 ///
158 /// CERN PROGLIB# F110 MXMLRT .VERSION KERNFOR 2.00 720707
159 /// ORIG. 01/01/64 RKB
160 ///
161 /// See original documentation of CERNLIB package
162 /// [F110](https://cern-tex.web.cern.ch/cern-tex/shortwrupsdir/f110/top.html)
163 
164 float *TCL::mxmlrt_0_(int n__, const float *a, const float *b, float *c, int ni,int nj)
165 {
166 // -- ENTRY MXMLRT
167 // -- C = A(I,J) X B(J,J) X A*(J,I)
168 // -- A* TANDS FOR A-TRANSPOSED
169 // mxmlrt (A,B,C,NI,NJ) IS EQUIVALENT TO
170 // CALL MXMPY (A,B,X,NI,NJ,NJ)
171 // CALL MXMPY1 (X,A,C,NI,NJ,NI)
172 
173 // OR CALL MXMPY1 (B,A,Y,NJ,NJ,NI)
174 // CALL MXMPY (A,Y,C,NI,NJ,NI)
175 
176 
177 // -- C = A*(I,J) X B(J,J) X A(J,I)
178 
179 // CALL MXMLTR (A,B,C,NI,NJ) IS EQUIVALENT TO
180 // CALL MXMPY2 (A,B,X,NI,NJ,NJ)
181 // CALL MXMPY (X,A,C,NI,NJ,NI)
182 
183 // OR CALL MXMPY (B,A,Y,NJ,NJ,NI)
184 // CALL MXMPY2 (A,Y,C,NI,NJ,NI)
185  TCL_MXMLRT( n__, a, b, c, ni,nj)
186  return c;
187 } /* mxmlrt_ */
188 
189 ////////////////////////////////////////////////////////////////////////////////
190 /// Matrix Multiplication (double precision)
191 ///
192 /// CERN PROGLIB# F110 MXMLRT .VERSION KERNFOR 2.00 720707
193 /// ORIG. 01/01/64 RKB
194 ///
195 /// See original documentation of CERNLIB package
196 /// [F110](https://cern-tex.web.cern.ch/cern-tex/shortwrupsdir/f110/top.html)
197 
198 double *TCL::mxmlrt_0_(int n__, const double *a, const double *b, double *c, int ni,int nj)
199 {
200  TCL_MXMLRT( n__, a, b, c, ni,nj)
201  return c;
202 
203 } /* mxmlrt_ */
204 
205 #undef TCL_MXMLRT
206 
207 //___________________________________________________________________________
208 //
209 // Matrix Transposition
210 //___________________________________________________________________________
211 
212 #define TCL_MXTRP(a, b, i, j) \
213  if (i == 0 || j == 0) return 0; \
214  --b; --a; \
215  int ib = 1; \
216  for (int k = 1; k <= j; ++k) \
217  { int ia = k; \
218  for (int l = 1; l <= i; ++l,ia += j,++ib) b[ib] = a[ia]; }
219 
220 ////////////////////////////////////////////////////////////////////////////////
221 /// Matrix Transposition
222 ///
223 /// CERN PROGLIB# F110 MXTRP .VERSION KERNFOR 1.0 650809
224 /// ORIG. 01/01/64 RKB
225 ///
226 /// See original documentation of CERNLIB package
227 /// [F110](https://cern-tex.web.cern.ch/cern-tex/shortwrupsdir/f110/top.html)
228 
229 float *TCL::mxtrp(const float *a, float *b, int i, int j)
230 {
231  TCL_MXTRP(a, b, i, j)
232  return b;
233 } /* mxtrp */
234 
235 ////////////////////////////////////////////////////////////////////////////////
236 /// Matrix Transposition (double precision)
237 ///
238 /// CERN PROGLIB# F110 MXTRP .VERSION KERNFOR 1.0 650809
239 /// ORIG. 01/01/64 RKB
240 ///
241 /// See original documentation of CERNLIB package
242 /// [F110](https://cern-tex.web.cern.ch/cern-tex/shortwrupsdir/f110/top.html)
243 
244 double *TCL::mxtrp(const double *a, double *b, int i, int j)
245 {
246  TCL_MXTRP(a, b, i, j)
247  return b;
248 
249 } /* mxtrp */
250 #undef TCL_MXTRP
251 
252 //___________________________________________________________________________
253 //___________________________________________________________________________
254 //
255 // TRPACK
256 //___________________________________________________________________________
257 //___________________________________________________________________________
258 
259 #define TCL_TRAAT(a, s, m, n) \
260  /* Local variables */ \
261  int ipiv, i, j, ipivn, ia, is, iat; \
262  double sum; \
263  --s; --a; \
264  ia = 0; is = 0; \
265  for (i = 1; i <= m; ++i) { \
266  ipiv = ia; \
267  ipivn = ipiv + n; \
268  iat = 0; \
269  for (j = 1; j <= i; ++j) { \
270  ia = ipiv; \
271  sum = 0.; \
272  do { \
273  ++ia; ++iat; \
274  sum += a[ia] * a[iat]; \
275  } while (ia < ipivn); \
276  ++is; \
277  s[is] = sum; \
278  } \
279  } \
280  s++;
281 
282 
283 ////////////////////////////////////////////////////////////////////////////////
284 /// Symmetric Multiplication of Rectangular Matrices
285 ///
286 /// CERN PROGLIB# F112 TRAAT .VERSION KERNFOR 4.15 861204
287 /// ORIG. 18/12/74 WH
288 ///
289 /// traat.F -- translated by f2c (version 19970219).
290 ///
291 /// See original documentation of CERNLIB package
292 /// [F112](https://cern-tex.web.cern.ch/cern-tex/shortwrupsdir/f112/top.html)
293 
294 float *TCL::traat(const float *a, float *s, int m, int n)
295 {
296  TCL_TRAAT(a, s, m, n)
297  return s;
298 } /* traat_ */
299 
300 ////////////////////////////////////////////////////////////////////////////////
301 /// Symmetric Multiplication of Rectangular Matrices
302 ///
303 /// CERN PROGLIB# F112 TRAAT .VERSION KERNFOR 4.15 861204
304 /// ORIG. 18/12/74 WH
305 ///
306 /// traat.F -- translated by f2c (version 19970219).
307 ///
308 /// See original documentation of CERNLIB package
309 /// [F112](https://cern-tex.web.cern.ch/cern-tex/shortwrupsdir/f112/top.html)
310 
311 double *TCL::traat(const double *a, double *s, int m, int n)
312 {
313  TCL_TRAAT(a, s, m, n)
314  return s;
315 } /* traat_ */
316 
317 #undef TCL_TRAAT
318 
319 #define TCL_TRAL(a, u, b, m, n) \
320  int indu, i, j, k, ia, ib, iu; \
321  double sum; \
322  --b; --u; --a; \
323  ib = 1; \
324  for (i = 1; i <= m; ++i) { \
325  indu = 0; \
326  for (j = 1; j <= n; ++j) { \
327  indu += j; \
328  ia = ib; \
329  iu = indu; \
330  sum = 0.; \
331  for (k = j; k <= n; ++k) {\
332  sum += a[ia] * u[iu]; \
333  ++ia; \
334  iu += k; \
335  } \
336  b[ib] = sum; \
337  ++ib; \
338  } \
339  } \
340  b++;
341 
342 ////////////////////////////////////////////////////////////////////////////////
343 /// Triangular - Rectangular Multiplication
344 ///
345 /// CERN PROGLIB# F112 TRAL .VERSION KERNFOR 4.15 861204
346 /// ORIG. 18/12/74 WH
347 ///
348 /// tral.F -- translated by f2c (version 19970219).
349 ///
350 /// See original documentation of CERNLIB package
351 /// [F112](https://cern-tex.web.cern.ch/cern-tex/shortwrupsdir/f112/top.html)
352 
353 float *TCL::tral(const float *a, const float *u, float *b, int m, int n)
354 {
355  TCL_TRAL(a, u, b, m, n)
356  return b;
357 } /* tral_ */
358 
359 ////////////////////////////////////////////////////////////////////////////////
360 /// Triangular - Rectangular Multiplication
361 ///
362 /// CERN PROGLIB# F112 TRAL .VERSION KERNFOR 4.15 861204
363 /// ORIG. 18/12/74 WH
364 ///
365 /// tral.F -- translated by f2c (version 19970219).
366 ///
367 /// See original documentation of CERNLIB package
368 /// [F112](https://cern-tex.web.cern.ch/cern-tex/shortwrupsdir/f112/top.html)
369 
370 double *TCL::tral(const double *a, const double *u, double *b, int m, int n)
371 {
372  TCL_TRAL(a, u, b, m, n)
373  return b;
374 } /* tral_ */
375 
376 #undef TCL_TRAL
377 
378 ////////////////////////////////////////////////////////////////////////////////
379 
380 #define TCL_TRALT(a, u, b, m, n) \
381  int indu, j, k, ia, ib, iu; \
382  double sum; \
383  --b; --u; --a; \
384  ib = m * n; \
385  indu = (n * n + n) / 2; \
386  do { \
387  iu = indu; \
388  for (j = 1; j <= n; ++j) { \
389  ia = ib; \
390  sum = 0.; \
391  for (k = j; k <= n; ++k) {\
392  sum += a[ia] * u[iu]; \
393  --ia; --iu; \
394  } \
395  b[ib] = sum; \
396  --ib; \
397  } \
398  } while (ib > 0); \
399  ++b;
400 
401 ////////////////////////////////////////////////////////////////////////////////
402 /// Triangular - Rectangular Multiplication
403 ///
404 /// CERN PROGLIB# F112 TRALT .VERSION KERNFOR 4.15 861204
405 /// ORIG. 18/12/74 WH
406 ///
407 /// tralt.F -- translated by f2c (version 19970219).
408 ///
409 /// See original documentation of CERNLIB package
410 /// [F112](https://cern-tex.web.cern.ch/cern-tex/shortwrupsdir/f112/top.html)
411 
412 float *TCL::tralt(const float *a, const float *u, float *b, int m, int n)
413 {
414  TCL_TRALT(a, u, b, m, n)
415  return b;
416 } /* tralt_ */
417 
418 ////////////////////////////////////////////////////////////////////////////////
419 /// Triangular - Rectangular Multiplication
420 ///
421 /// CERN PROGLIB# F112 TRALT .VERSION KERNFOR 4.15 861204
422 /// ORIG. 18/12/74 WH
423 ///
424 /// tralt.F -- translated by f2c (version 19970219).
425 ///
426 /// See original documentation of CERNLIB package
427 /// [F112](https://cern-tex.web.cern.ch/cern-tex/shortwrupsdir/f112/top.html)
428 
429 double *TCL::tralt(const double *a, const double *u, double *b, int m, int n)
430 {
431  TCL_TRALT(a, u, b, m, n)
432  return b;
433 } /* tralt_ */
434 
435 #undef TCL_TRALT
436 
437 //____________________________________________________________
438 
439 #define TCL_TRAS(a, s, b, m, n) \
440  int inds, i__, j, k, ia, ib, is; \
441  double sum; \
442  --b; --s; --a; \
443  ib = 0; inds = 0; i__ = 0; \
444  do { \
445  inds += i__; \
446  ia = 0; \
447  ib = i__ + 1; \
448  for (j = 1; j <= m; ++j) { \
449  is = inds; \
450  sum = 0.; \
451  k = 0; \
452  do { \
453  if (k > i__) is += k; \
454  else ++is; \
455  ++ia; \
456  sum += a[ia] * s[is]; \
457  ++k; \
458  } while (k < n); \
459  b[ib] = sum; \
460  ib += n; \
461  } \
462  ++i__; \
463  } while (i__ < n); \
464  ++b;
465 
466 ////////////////////////////////////////////////////////////////////////////////
467 /// Symmetric - Rectangular Multiplication
468 ///
469 /// CERN PROGLIB# F112 TRAS .VERSION KERNFOR 4.15 861204
470 /// ORIG. 18/12/74 WH
471 ///
472 /// tras.F -- translated by f2c (version 19970219).
473 ///
474 /// See original documentation of CERNLIB package
475 /// [F112](https://cern-tex.web.cern.ch/cern-tex/shortwrupsdir/f112/top.html)
476 
477 float *TCL::tras(const float *a, const float *s, float *b, int m, int n)
478 {
479  TCL_TRAS(a, s, b, m, n)
480  return b;
481 } /* tras_ */
482 
483 ////////////////////////////////////////////////////////////////////////////////
484 /// Symmetric - Rectangular Multiplication
485 ///
486 /// CERN PROGLIB# F112 TRAS .VERSION KERNFOR 4.15 861204
487 /// ORIG. 18/12/74 WH
488 ///
489 /// tras.F -- translated by f2c (version 19970219).
490 ///
491 /// See original documentation of CERNLIB package
492 /// [F112](https://cern-tex.web.cern.ch/cern-tex/shortwrupsdir/f112/top.html)
493 
494 double *TCL::tras(const double *a, const double *s, double *b, int m, int n)
495 {
496  TCL_TRAS(a, s, b, m, n)
497  return b;
498 } /* tras_ */
499 
500 #undef TCL_TRAS
501 
502 
503 ////////////////////////////////////////////////////////////////////////////////
504 
505 #define TCL_TRASAT(a, s, r__, m, n) \
506  int imax, k; \
507  int ia, mn, ir, is, iaa; \
508  double sum; \
509  --r__; --s; --a; \
510  imax = (m * m + m) / 2; \
511  vzero(&r__[1], imax); \
512  mn = m * n; \
513  int ind = 0; \
514  int i__ = 0; \
515  do { \
516  ind += i__; \
517  ia = 0; ir = 0; \
518  do { \
519  is = ind; \
520  sum = 0.; k = 0; \
521  do { \
522  if (k > i__) is += k; \
523  else ++is; \
524  ++ia; \
525  sum += s[is] * a[ia]; \
526  ++k; \
527  } while (k < n); \
528  iaa = i__ + 1; \
529  do { \
530  ++ir; \
531  r__[ir] += sum * a[iaa];\
532  iaa += n; \
533  } while (iaa <= ia); \
534  } while (ia < mn); \
535  ++i__; \
536  } while (i__ < n); \
537  ++r__;
538 
539 ////////////////////////////////////////////////////////////////////////////////
540 /// Transformation of Symmetric Matrix
541 ///
542 /// CERN PROGLIB# F112 TRASAT .VERSION KERNFOR 4.15 861204
543 /// ORIG. 18/12/74 WH
544 ///
545 /// trasat.F -- translated by f2c (version 19970219).
546 ///
547 /// See original documentation of CERNLIB package
548 /// [F112](https://cern-tex.web.cern.ch/cern-tex/shortwrupsdir/f112/top.html)
549 
550 float *TCL::trasat(const float *a, const float *s, float *r__, int m, int n)
551 {
552  TCL_TRASAT(a, s, r__, m, n)
553  return r__;
554 } /* trasat_ */
555 
556 ////////////////////////////////////////////////////////////////////////////////
557 /// Transformation of Symmetric Matrix
558 ///
559 /// CERN PROGLIB# F112 TRASAT .VERSION KERNFOR 4.15 861204
560 /// ORIG. 18/12/74 WH
561 ///
562 /// trasat.F -- translated by f2c (version 19970219).
563 ///
564 /// See original documentation of CERNLIB package
565 /// [F112](https://cern-tex.web.cern.ch/cern-tex/shortwrupsdir/f112/top.html)
566 
567 double *TCL::trasat(const double *a, const double *s, double *r__, int m, int n)
568 {
569  TCL_TRASAT(a, s, r__, m, n)
570  return r__;
571 } /* trasat_ */
572 
573 ////////////////////////////////////////////////////////////////////////////////
574 /// Transformation of Symmetric Matrix
575 ///
576 /// CERN PROGLIB# F112 TRASAT .VERSION KERNFOR 4.15 861204
577 /// ORIG. 18/12/74 WH
578 ///
579 /// trasat.F -- translated by f2c (version 19970219).
580 ///
581 /// See original documentation of CERNLIB package
582 /// [F112](https://cern-tex.web.cern.ch/cern-tex/shortwrupsdir/f112/top.html)
583 
584 float *TCL::trasat(const double *a, const float *s, float *r__, int m, int n)
585 {
586  TCL_TRASAT(a, s, r__, m, n)
587  return r__;
588 } /* trasat_ */
589 
590 #undef TCL_TRASAT
591 
592 ////////////////////////////////////////////////////////////////////////////////
593 /// trata.F -- translated by f2c (version 19970219).
594 ///
595 /// CERN PROGLIB# F112 TRATA .VERSION KERNFOR 4.15 861204
596 /// ORIG. 18/12/74 WH
597 ///
598 /// See original documentation of CERNLIB package
599 /// [F112](https://cern-tex.web.cern.ch/cern-tex/shortwrupsdir/f112/top.html)
600 
601 float *TCL::trata(const float *a, float *r__, int m, int n)
602 {
603  /* Local variables */
604  int i__, j, ia, mn, ir, iat;
605  double sum;
606 
607  /* Parameter adjuTments */
608  --r__; --a;
609 
610  /* Function Body */
611  mn = m * n;
612  ir = 0;
613 
614  for (i__ = 1; i__ <= m; ++i__) {
615  for (j = 1; j <= i__; ++j) {
616  ia = i__;
617  iat = j;
618  sum = 0.;
619  do {
620  sum += a[ia] * a[iat];
621  ia += m;
622  iat += m;
623  } while (ia <= mn);
624  ++ir;
625  r__[ir] = sum;
626  }
627  }
628  ++r__;
629  return r__;
630 } /* trata_ */
631 
632 ////////////////////////////////////////////////////////////////////////////////
633 /// trats.F -- translated by f2c (version 19970219).
634 ///
635 /// CERN PROGLIB# F112 TRATS .VERSION KERNFOR 4.15 861204
636 /// ORIG. 18/12/74 WH
637 ///
638 /// See original documentation of CERNLIB package
639 /// [F112](https://cern-tex.web.cern.ch/cern-tex/shortwrupsdir/f112/top.html)
640 
641 float *TCL::trats(const float *a, const float *s, float *b, int m, int n)
642 {
643  /* Local variables */
644  int inds, i__, j, k, ia, ib, is;
645  double sum;
646 
647  /* Parameter adjuTments */
648  --b; --s; --a;
649 
650  /* Function Body */
651  ib = 0; inds = 0; i__ = 0;
652  do {
653  inds += i__;
654  ib = i__ + 1;
655 
656  for (j = 1; j <= m; ++j) {
657  ia = j;
658  is = inds;
659  sum = 0.;
660  k = 0;
661 
662  do {
663  if (k > i__) is += k;
664  else ++is;
665  sum += a[ia] * s[is];
666  ia += m;
667  ++k;
668  } while (k < n);
669 
670  b[ib] = sum;
671  ib += n;
672  }
673  ++i__;
674  } while (i__ < n);
675  ++b;
676  return b;
677 } /* trats_ */
678 
679 ////////////////////////////////////////////////////////////////////////////////
680 /// tratsa.F -- translated by f2c (version 19970219).
681 ///
682 /// CERN PROGLIB# F112 TRATSA .VERSION KERNFOR 4.15 861204
683 /// ORIG. 18/12/74 WH
684 ///
685 /// See original documentation of CERNLIB package
686 /// [F112](https://cern-tex.web.cern.ch/cern-tex/shortwrupsdir/f112/top.html)
687 
688 float *TCL::tratsa(const float *a, const float *s, float *r__, int m, int n)
689 {
690  /* Local variables */
691  int imax, i__, j, k;
692  int ia, ir, is, iaa, ind;
693  double sum;
694 
695  /* Parameter adjuTments */
696  --r__; --s; --a;
697 
698  /* Function Body */
699  imax = (m * m + m) / 2;
700  vzero(&r__[1], imax);
701  ind = 0;
702  i__ = 0;
703 
704  do {
705  ind += i__;
706  ir = 0;
707 
708  for (j = 1; j <= m; ++j) {
709  is = ind;
710  ia = j;
711  sum = 0.;
712  k = 0;
713 
714  do {
715  if (k > i__) is += k;
716  else ++is;
717  sum += s[is] * a[ia];
718  ia += m;
719  ++k;
720  } while (k < n);
721  iaa = i__ * m;
722 
723  for (k = 1; k <= j; ++k) {
724  ++iaa;
725  ++ir;
726  r__[ir] += sum * a[iaa];
727  }
728  }
729  ++i__;
730  } while (i__ < n);
731  ++r__;
732  return r__;
733 } /* tratsa_ */
734 
735 ////////////////////////////////////////////////////////////////////////////////
736 /// trchlu.F -- translated by f2c (version 19970219).
737 ///
738 /// CERN PROGLIB# F112 TRCHLU .VERSION KERNFOR 4.16 870601
739 /// ORIG. 18/12/74 W.HART
740 ///
741 /// See original documentation of CERNLIB package
742 /// [F112](https://cern-tex.web.cern.ch/cern-tex/shortwrupsdir/f112/top.html)
743 
744 float *TCL::trchlu(const float *a, float *b, int n)
745 {
746  /* Local variables */
747  int ipiv, kpiv, i__, j;
748  double r__, dc;
749  int id, kd;
750  double sum;
751 
752  /* Parameter adjuTments */
753  --b; --a;
754 
755  /* Function Body */
756  ipiv = 0;
757 
758  i__ = 0;
759 
760  do {
761  ++i__;
762  ipiv += i__;
763  kpiv = ipiv;
764  r__ = a[ipiv];
765 
766  for (j = i__; j <= n; ++j) {
767  sum = 0.;
768  if (i__ == 1) goto L40;
769  if (r__ == 0.) goto L42;
770  id = ipiv - i__ + 1;
771  kd = kpiv - i__ + 1;
772 
773  do {
774  sum += b[kd] * b[id];
775  ++kd; ++id;
776  } while (id < ipiv);
777 
778 L40:
779  sum = a[kpiv] - sum;
780 L42:
781  if (j != i__) b[kpiv] = sum * r__;
782  else {
783  dc = TMath::Sqrt(sum);
784  b[kpiv] = dc;
785  if (r__ > 0.) r__ = 1. / dc;
786  }
787  kpiv += j;
788  }
789 
790  } while (i__ < n);
791  ++b;
792  return b;
793 } /* trchlu_ */
794 
795 ////////////////////////////////////////////////////////////////////////////////
796 /// trchul.F -- translated by f2c (version 19970219).
797 ///
798 /// CERN PROGLIB# F112 TRCHUL .VERSION KERNFOR 4.16 870601
799 /// ORIG. 18/12/74 WH
800 ///
801 /// See original documentation of CERNLIB package
802 /// [F112](https://cern-tex.web.cern.ch/cern-tex/shortwrupsdir/f112/top.html)
803 
804 float *TCL::trchul(const float *a, float *b, int n)
805 {
806  /* Local variables */
807  int ipiv, kpiv, i__;
808  double r__;
809  int nTep;
810  double dc;
811  int id, kd;
812  double sum;
813 
814  /* Parameter adjuTments */
815  --b; --a;
816 
817  /* Function Body */
818  kpiv = (n * n + n) / 2;
819 
820  i__ = n;
821  do {
822  ipiv = kpiv;
823  r__ = a[ipiv];
824 
825  do {
826  sum = 0.;
827  if (i__ == n) goto L40;
828  if (r__ == 0.) goto L42;
829  id = ipiv;
830  kd = kpiv;
831  nTep = i__;
832 
833  do {
834  kd += nTep;
835  id += nTep;
836  ++nTep;
837  sum += b[id] * b[kd];
838  } while (nTep < n);
839 
840 L40:
841  sum = a[kpiv] - sum;
842 L42:
843  if (kpiv < ipiv) b[kpiv] = sum * r__;
844  else {
845  dc = TMath::Sqrt(sum);
846  b[kpiv] = dc;
847  if (r__ > 0.) r__ = 1. / dc;
848  }
849  --kpiv;
850  } while (kpiv > ipiv - i__);
851 
852  --i__;
853  } while (i__ > 0);
854 
855  ++b;
856  return b;
857 } /* trchul_ */
858 
859 ////////////////////////////////////////////////////////////////////////////////
860 /// trinv.F -- translated by f2c (version 19970219).
861 ///
862 /// CERN PROGLIB# F112 TRINV .VERSION KERNFOR 4.15 861204
863 /// ORIG. 18/12/74 WH
864 ///
865 /// See original documentation of CERNLIB package
866 /// [F112](https://cern-tex.web.cern.ch/cern-tex/shortwrupsdir/f112/top.html)
867 
868 float *TCL::trinv(const float *t, float *s, int n)
869 {
870  int lhor, ipiv, lver, j;
871  double sum = 0;
872  double r__ = 0;
873  int mx, ndTep, ind;
874 
875 
876  /* Parameter adjuTments */
877  --s; --t;
878 
879  /* Function Body */
880  mx = (n * n + n) / 2;
881  ipiv = mx;
882 
883  int i = n;
884  do {
885  r__ = 0.;
886  if (t[ipiv] > 0.) r__ = 1. / t[ipiv];
887  s[ipiv] = r__;
888  ndTep = n;
889  ind = mx - n + i;
890 
891  while (ind != ipiv) {
892  sum = 0.;
893  if (r__ != 0.) {
894  lhor = ipiv;
895  lver = ind;
896  j = i;
897 
898  do {
899  lhor += j;
900  ++lver;
901  sum += t[lhor] * s[lver];
902  ++j;
903  } while (lhor < ind);
904  }
905  s[ind] = -sum * r__;
906  --ndTep;
907  ind -= ndTep;
908  }
909 
910  ipiv -= i;
911  --i;
912  } while (i > 0);
913 
914  ++s;
915  return s;
916 } /* trinv_ */
917 
918 ////////////////////////////////////////////////////////////////////////////////
919 /// trla.F -- translated by f2c (version 19970219).
920 ///
921 /// CERN PROGLIB# F112 TRLA .VERSION KERNFOR 4.15 861204
922 /// ORIG. 18/12/74 WH
923 ///
924 /// See original documentation of CERNLIB package
925 /// [F112](https://cern-tex.web.cern.ch/cern-tex/shortwrupsdir/f112/top.html)
926 
927 float *TCL::trla(const float *u, const float *a, float *b, int m, int n)
928 {
929  int ipiv, ia, ib, iu;
930  double sum;
931 
932  /* Parameter adjuTments */
933  --b; --a; --u;
934 
935  /* Function Body */
936  ib = m * n;
937  ipiv = (m * m + m) / 2;
938 
939  do {
940  do {
941  ia = ib;
942  iu = ipiv;
943 
944  sum = 0.;
945  do {
946  sum += a[ia] * u[iu];
947  --iu;
948  ia -= n;
949  } while (ia > 0);
950 
951  b[ib] = sum;
952  --ib;
953  } while (ia > 1 - n);
954 
955  ipiv = iu;
956  } while (iu > 0);
957 
958  ++b;
959  return b;
960 } /* trla_ */
961 
962 ////////////////////////////////////////////////////////////////////////////////
963 /// trlta.F -- translated by f2c (version 19970219).
964 ///
965 /// CERN PROGLIB# F112 TRLTA .VERSION KERNFOR 4.15 861204
966 /// ORIG. 18/12/74 WH
967 ///
968 /// See original documentation of CERNLIB package
969 /// [F112](https://cern-tex.web.cern.ch/cern-tex/shortwrupsdir/f112/top.html)
970 
971 float *TCL::trlta(const float *u, const float *a, float *b, int m, int n)
972 {
973  int ipiv, mxpn, i__, nTep, ia, ib, iu, mx;
974  double sum;
975 
976  /* Parameter adjuTments */
977  --b; --a; --u;
978 
979  /* Function Body */
980  ipiv = 0;
981  mx = m * n;
982  mxpn = mx + n;
983  ib = 0;
984 
985  i__ = 0;
986  do {
987  ++i__;
988  ipiv += i__;
989 
990  do {
991  iu = ipiv;
992  nTep = i__;
993  ++ib;
994  ia = ib;
995 
996  sum = 0.;
997  do {
998  sum += a[ia] * u[iu];
999  ia += n;
1000  iu += nTep;
1001  ++nTep;
1002  } while (ia <= mx);
1003 
1004  b[ib] = sum;
1005  } while (ia < mxpn);
1006 
1007  } while (i__ < m);
1008 
1009  ++b;
1010  return b;
1011 } /* trlta_ */
1012 
1013 ////////////////////////////////////////////////////////////////////////////////
1014 /// trpck.F -- translated by f2c (version 19970219).
1015 ///
1016 /// CERN PROGLIB# F112 TRPCK .VERSION KERNFOR 2.08 741218
1017 /// ORIG. 18/12/74 WH
1018 ///
1019 /// See original documentation of CERNLIB package
1020 /// [F112](https://cern-tex.web.cern.ch/cern-tex/shortwrupsdir/f112/top.html)
1021 
1022 float *TCL::trpck(const float *s, float *u, int n)
1023 {
1024  int i__, ia, ind, ipiv;
1025 
1026  /* Parameter adjuTments */
1027  --u; --s;
1028 
1029  /* Function Body */
1030  ia = 0;
1031  ind = 0;
1032  ipiv = 0;
1033 
1034  for (i__ = 1; i__ <= n; ++i__) {
1035  ipiv += i__;
1036  do {
1037  ++ia;
1038  ++ind;
1039  u[ind] = s[ia];
1040  } while (ind < ipiv);
1041  ia = ia + n - i__;
1042  }
1043 
1044  ++u;
1045  return u;
1046 } /* trpck_ */
1047 
1048 ////////////////////////////////////////////////////////////////////////////////
1049 /// trqsq.F -- translated by f2c (version 19970219).
1050 ///
1051 /// CERN PROGLIB# F112 TRQSQ .VERSION KERNFOR 4.15 861204
1052 /// ORIG. 18/12/74 WH
1053 ///
1054 /// See original documentation of CERNLIB package
1055 /// [F112](https://cern-tex.web.cern.ch/cern-tex/shortwrupsdir/f112/top.html)
1056 
1057 float *TCL::trqsq(const float *q, const float *s, float *r__, int m)
1058 {
1059  int indq, inds, imax, i__, j, k, l;
1060  int iq, ir, is, iqq;
1061  double sum;
1062 
1063  /* Parameter adjuTments */
1064  --r__; --s; --q;
1065 
1066  /* Function Body */
1067  imax = (m * m + m) / 2;
1068  vzero(&r__[1], imax);
1069  inds = 0;
1070  i__ = 0;
1071 
1072  do {
1073  inds += i__;
1074  ir = 0;
1075  indq = 0;
1076  j = 0;
1077 
1078  do {
1079  indq += j;
1080  is = inds;
1081  iq = indq;
1082  sum = (float)0.;
1083  k = 0;
1084 
1085  do {
1086  if (k > i__) is += k;
1087  else ++is;
1088 
1089  if (k > j) iq += k;
1090  else ++iq;
1091 
1092  sum += s[is] * q[iq];
1093  ++k;
1094  } while (k < m);
1095  iqq = inds;
1096  l = 0;
1097 
1098  do {
1099  ++ir;
1100  if (l > i__) iqq += l;
1101  else ++iqq;
1102  r__[ir] += q[iqq] * sum;
1103  ++l;
1104  } while (l <= j);
1105  ++j;
1106  } while (j < m);
1107  ++i__;
1108  } while (i__ < m);
1109 
1110  ++r__;
1111  return r__;
1112 } /* trqsq_ */
1113 
1114 ////////////////////////////////////////////////////////////////////////////////
1115 /// trsa.F -- translated by f2c (version 19970219).
1116 ///
1117 /// CERN PROGLIB# F112 TRSA .VERSION KERNFOR 4.15 861204
1118 /// ORIG. 18/12/74 WH
1119 ///
1120 /// See original documentation of CERNLIB package
1121 /// [F112](https://cern-tex.web.cern.ch/cern-tex/shortwrupsdir/f112/top.html)
1122 
1123 float *TCL::trsa(const float *s, const float *a, float *b, int m, int n)
1124 {
1125  /* Local variables */
1126  int inds, i__, j, k, ia, ib, is;
1127  double sum;
1128 
1129  /* Parameter adjuTments */
1130  --b; --a; --s;
1131 
1132  /* Function Body */
1133  inds = 0;
1134  ib = 0;
1135  i__ = 0;
1136 
1137  do {
1138  inds += i__;
1139 
1140  for (j = 1; j <= n; ++j) {
1141  ia = j;
1142  is = inds;
1143  sum = 0.;
1144  k = 0;
1145 
1146  do {
1147  if (k > i__) is += k;
1148  else ++is;
1149  sum += s[is] * a[ia];
1150  ia += n;
1151  ++k;
1152  } while (k < m);
1153  ++ib;
1154  b[ib] = sum;
1155  }
1156  ++i__;
1157  } while (i__ < m);
1158 
1159  ++b;
1160  return b;
1161 } /* trsa_ */
1162 
1163 ////////////////////////////////////////////////////////////////////////////////
1164 /// trsinv.F -- translated by f2c (version 19970219).
1165 ///
1166 /// CERN PROGLIB# F112 TRSINV .VERSION KERNFOR 2.08 741218
1167 /// ORIG. 18/12/74 WH
1168 ///
1169 /// See original documentation of CERNLIB package
1170 /// [F112](https://cern-tex.web.cern.ch/cern-tex/shortwrupsdir/f112/top.html)
1171 
1172 float *TCL::trsinv(const float *g, float *gi, int n)
1173 {
1174  /* Function Body */
1175  trchlu(g, gi, n);
1176  trinv(gi, gi, n);
1177  return trsmul(gi, gi, n);
1178 } /* trsinv_ */
1179 
1180 ////////////////////////////////////////////////////////////////////////////////
1181 /// trsmlu.F -- translated by f2c (version 19970219).
1182 ///
1183 /// CERN PROGLIB# F112 TRSMLU .VERSION KERNFOR 4.15 861204
1184 /// ORIG. 18/12/74 WH
1185 ///
1186 /// See original documentation of CERNLIB package
1187 /// [F112](https://cern-tex.web.cern.ch/cern-tex/shortwrupsdir/f112/top.html)
1188 
1189 float *TCL::trsmlu(const float *u, float *s, int n)
1190 {
1191  /* Local variables */
1192  int lhor, lver, i__, k, l, ind;
1193  double sum;
1194 
1195  /* Parameter adjuTments */
1196  --s; --u;
1197 
1198  /* Function Body */
1199  ind = (n * n + n) / 2;
1200 
1201  for (i__ = 1; i__ <= n; ++i__) {
1202  lver = ind;
1203 
1204  for (k = i__; k <= n; ++k,--ind) {
1205  lhor = ind; sum = 0.;
1206  for (l = k; l <= n; ++l,--lver,--lhor)
1207  sum += u[lver] * u[lhor];
1208  s[ind] = sum;
1209  }
1210  }
1211  ++s;
1212  return s;
1213 } /* trsmlu_ */
1214 
1215 ////////////////////////////////////////////////////////////////////////////////
1216 /// trsmul.F -- translated by f2c (version 19970219).
1217 ///
1218 /// CERN PROGLIB# F112 TRSMUL .VERSION KERNFOR 4.15 861204
1219 /// ORIG. 18/12/74 WH
1220 ///
1221 /// See original documentation of CERNLIB package
1222 /// [F112](https://cern-tex.web.cern.ch/cern-tex/shortwrupsdir/f112/top.html)
1223 
1224 float *TCL::trsmul(const float *g, float *gi, int n)
1225 {
1226  /* Local variables */
1227  int lhor, lver, lpiv, i__, j, k, ind;
1228  double sum;
1229 
1230  /* Parameter adjuTments */
1231  --gi; --g;
1232 
1233  /* Function Body */
1234  ind = 1;
1235  lpiv = 0;
1236  for (i__ = 1; i__ <= n; ++i__) {
1237  lpiv += i__;
1238  for (j = 1; j <= i__; ++j,++ind) {
1239  lver = lpiv;
1240  lhor = ind;
1241  sum = 0.;
1242  for (k = i__; k <= n; lhor += k,lver += k,++k)
1243  sum += g[lver] * g[lhor];
1244  gi[ind] = sum;
1245  }
1246  }
1247  ++gi;
1248  return gi;
1249 } /* trsmul_ */
1250 
1251 ////////////////////////////////////////////////////////////////////////////////
1252 /// trupck.F -- translated by f2c (version 19970219).
1253 ///
1254 /// CERN PROGLIB# F112 TRUPCK .VERSION KERNFOR 2.08 741218
1255 /// ORIG. 18/12/74 WH
1256 ///
1257 /// See original documentation of CERNLIB package
1258 /// [F112](https://cern-tex.web.cern.ch/cern-tex/shortwrupsdir/f112/top.html)
1259 
1260 float *TCL::trupck(const float *u, float *s, int m)
1261 {
1262  int i__, im, is, iu, iv, ih, m2;
1263 
1264  /* Parameter adjuTments */
1265  --s; --u;
1266 
1267  /* Function Body */
1268  m2 = m * m;
1269  is = m2;
1270  iu = (m2 + m) / 2;
1271  i__ = m - 1;
1272 
1273  do {
1274  im = i__ * m;
1275  do {
1276  s[is] = u[iu];
1277  --is;
1278  --iu;
1279  } while (is > im);
1280  is = is - m + i__;
1281  --i__;
1282  } while (i__ >= 0);
1283 
1284  is = 1;
1285  do {
1286  iv = is;
1287  ih = is;
1288  while (1) {
1289  iv += m;
1290  ++ih;
1291  if (iv > m2) break;
1292  s[ih] = s[iv];
1293  }
1294  is = is + m + 1;
1295  } while (is < m2);
1296 
1297  ++s;
1298  return s;
1299 } /* trupck_ */
1300 
1301 ////////////////////////////////////////////////////////////////////////////////
1302 /// trsat.F -- translated by f2c (version 19970219).
1303 ///
1304 /// CERN PROGLIB# F112 TRSAT .VERSION KERNFOR 4.15 861204
1305 /// ORIG. 18/12/74 WH
1306 ///
1307 /// See original documentation of CERNLIB package
1308 /// [F112](https://cern-tex.web.cern.ch/cern-tex/shortwrupsdir/f112/top.html)
1309 
1310 float *TCL::trsat(const float *s, const float *a, float *b, int m, int n)
1311 {
1312  /* Local variables */
1313  int inds, i__, j, k, ia, ib, is;
1314  double sum;
1315 
1316  /* Parameter adjuTments */
1317  --b; --a; --s;
1318 
1319  /* Function Body */
1320  inds = 0;
1321  ib = 0;
1322  i__ = 0;
1323 
1324  do {
1325  inds += i__;
1326  ia = 0;
1327 
1328  for (j = 1; j <= n; ++j) {
1329  is = inds;
1330  sum = 0.;
1331  k = 0;
1332 
1333  do {
1334  if (k > i__) is += k;
1335  else ++is;
1336  ++ia;
1337  sum += s[is] * a[ia];
1338  ++k;
1339  } while (k < m);
1340  ++ib;
1341  b[ib] = sum;
1342  }
1343  ++i__;
1344  } while (i__ < m);
1345 
1346  ++b;
1347  return b;
1348 } /* trsat_ */
1349 
1350 // ------ double
1351 
1352 ////////////////////////////////////////////////////////////////////////////////
1353 /// trata.F -- translated by f2c (version 19970219).
1354 ///
1355 /// CERN PROGLIB# F112 TRATA .VERSION KERNFOR 4.15 861204
1356 /// ORIG. 18/12/74 WH
1357 ///
1358 /// See original documentation of CERNLIB package
1359 /// [F112](https://cern-tex.web.cern.ch/cern-tex/shortwrupsdir/f112/top.html)
1360 
1361 double *TCL::trata(const double *a, double *r__, int m, int n)
1362 {
1363  /* Local variables */
1364  int i__, j, ia, mn, ir, iat;
1365  double sum;
1366 
1367  /* Parameter adjuTments */
1368  --r__; --a;
1369 
1370  /* Function Body */
1371  mn = m * n;
1372  ir = 0;
1373 
1374  for (i__ = 1; i__ <= m; ++i__) {
1375 
1376  for (j = 1; j <= i__; ++j) {
1377  ia = i__;
1378  iat = j;
1379 
1380  sum = (double)0.;
1381  do {
1382  sum += a[ia] * a[iat];
1383  ia += m;
1384  iat += m;
1385  } while (ia <= mn);
1386  ++ir;
1387  r__[ir] = sum;
1388  }
1389  }
1390 
1391  return 0;
1392 } /* trata_ */
1393 
1394 ////////////////////////////////////////////////////////////////////////////////
1395 /// trats.F -- translated by f2c (version 19970219).
1396 ///
1397 /// CERN PROGLIB# F112 TRATS .VERSION KERNFOR 4.15 861204
1398 /// ORIG. 18/12/74 WH
1399 ///
1400 /// See original documentation of CERNLIB package
1401 /// [F112](https://cern-tex.web.cern.ch/cern-tex/shortwrupsdir/f112/top.html)
1402 
1403 double *TCL::trats(const double *a, const double *s, double *b, int m, int n)
1404 {
1405  /* Local variables */
1406  int inds, i__, j, k, ia, ib, is;
1407  double sum;
1408 
1409  /* Parameter adjuTments */
1410  --b; --s; --a;
1411 
1412  /* Function Body */
1413  ib = 0; inds = 0; i__ = 0;
1414 
1415  do {
1416  inds += i__;
1417  ib = i__ + 1;
1418 
1419  for (j = 1; j <= m; ++j) {
1420  ia = j;
1421  is = inds;
1422  sum = (double)0.;
1423  k = 0;
1424 
1425  do {
1426  if (k > i__) is += k;
1427  else ++is;
1428  sum += a[ia] * s[is];
1429  ia += m;
1430  ++k;
1431  } while (k < n);
1432 
1433  b[ib] = sum;
1434  ib += n;
1435  }
1436  ++i__;
1437  } while (i__ < n);
1438 
1439  return 0;
1440 } /* trats_ */
1441 
1442 ////////////////////////////////////////////////////////////////////////////////
1443 /// tratsa.F -- translated by f2c (version 19970219).
1444 ///
1445 /// CERN PROGLIB# F112 TRATSA .VERSION KERNFOR 4.15 861204
1446 /// ORIG. 18/12/74 WH
1447 ///
1448 /// See original documentation of CERNLIB package
1449 /// [F112](https://cern-tex.web.cern.ch/cern-tex/shortwrupsdir/f112/top.html)
1450 
1451 double *TCL::tratsa(const double *a, const double *s, double *r__, int m, int n)
1452 {
1453  /* Local variables */
1454  int imax, i__, j, k;
1455  int ia, ir, is, iaa, ind;
1456  double sum;
1457 
1458  /* Parameter adjuTments */
1459  --r__; --s; --a;
1460 
1461  /* Function Body */
1462  imax = (m * m + m) / 2;
1463  vzero(&r__[1], imax);
1464  ind = 0;
1465  i__ = 0;
1466 
1467  do {
1468  ind += i__;
1469  ir = 0;
1470 
1471  for (j = 1; j <= m; ++j) {
1472  is = ind;
1473  ia = j;
1474  sum = (double)0.;
1475  k = 0;
1476 
1477  do {
1478  if (k > i__) is += k;
1479  else ++is;
1480  sum += s[is] * a[ia];
1481  ia += m;
1482  ++k;
1483  } while (k < n);
1484  iaa = i__ * m;
1485 
1486  for (k = 1; k <= j; ++k) {
1487  ++iaa;
1488  ++ir;
1489  r__[ir] += sum * a[iaa];
1490  }
1491  }
1492  ++i__;
1493  } while (i__ < n);
1494 
1495  return 0;
1496 } /* tratsa_ */
1497 
1498 ////////////////////////////////////////////////////////////////////////////////
1499 /// trchlu.F -- translated by f2c (version 19970219).
1500 ///
1501 /// CERN PROGLIB# F112 TRCHLU .VERSION KERNFOR 4.16 870601
1502 /// ORIG. 18/12/74 W.HART
1503 ///
1504 /// See original documentation of CERNLIB package
1505 /// [F112](https://cern-tex.web.cern.ch/cern-tex/shortwrupsdir/f112/top.html)
1506 
1507 double *TCL::trchlu(const double *a, double *b, int n)
1508 {
1509  /* Local variables */
1510  int ipiv, kpiv, i__, j;
1511  double r__, dc;
1512  int id, kd;
1513  double sum;
1514 
1515  /* Parameter adjuTments */
1516  --b; --a;
1517 
1518  /* Function Body */
1519  ipiv = 0;
1520 
1521  i__ = 0;
1522 
1523  do {
1524  ++i__;
1525  ipiv += i__;
1526  kpiv = ipiv;
1527  r__ = a[ipiv];
1528 
1529  for (j = i__; j <= n; ++j) {
1530  sum = 0.;
1531  if (i__ == 1) goto L40;
1532  if (r__ == 0.) goto L42;
1533  id = ipiv - i__ + 1;
1534  kd = kpiv - i__ + 1;
1535 
1536  do {
1537  sum += b[kd] * b[id];
1538  ++kd; ++id;
1539  } while (id < ipiv);
1540 
1541 L40:
1542  sum = a[kpiv] - sum;
1543 L42:
1544  if (j != i__) b[kpiv] = sum * r__;
1545  else {
1546  dc = TMath::Sqrt(sum);
1547  b[kpiv] = dc;
1548  if (r__ > 0.) r__ = (double)1. / dc;
1549  }
1550  kpiv += j;
1551  }
1552 
1553  } while (i__ < n);
1554 
1555  return 0;
1556 } /* trchlu_ */
1557 
1558 ////////////////////////////////////////////////////////////////////////////////
1559 /// trchul.F -- translated by f2c (version 19970219).
1560 ///
1561 /// CERN PROGLIB# F112 TRCHUL .VERSION KERNFOR 4.16 870601
1562 /// ORIG. 18/12/74 WH
1563 ///
1564 /// See original documentation of CERNLIB package
1565 /// [F112](https://cern-tex.web.cern.ch/cern-tex/shortwrupsdir/f112/top.html)
1566 
1567 double *TCL::trchul(const double *a, double *b, int n)
1568 {
1569  /* Local variables */
1570  int ipiv, kpiv, i__;
1571  double r__;
1572  int nTep;
1573  double dc;
1574  int id, kd;
1575  double sum;
1576 
1577  /* Parameter adjuTments */
1578  --b; --a;
1579 
1580  /* Function Body */
1581  kpiv = (n * n + n) / 2;
1582 
1583  i__ = n;
1584  do {
1585  ipiv = kpiv;
1586  r__ = a[ipiv];
1587 
1588  do {
1589  sum = 0.;
1590  if (i__ == n) goto L40;
1591  if (r__ == (double)0.) goto L42;
1592  id = ipiv;
1593  kd = kpiv;
1594  nTep = i__;
1595 
1596  do {
1597  kd += nTep;
1598  id += nTep;
1599  ++nTep;
1600  sum += b[id] * b[kd];
1601  } while (nTep < n);
1602 
1603 L40:
1604  sum = a[kpiv] - sum;
1605 L42:
1606  if (kpiv < ipiv) b[kpiv] = sum * r__;
1607  else {
1608  dc = TMath::Sqrt(sum);
1609  b[kpiv] = dc;
1610  if (r__ > (double)0.) r__ = (double)1. / dc;
1611  }
1612  --kpiv;
1613  } while (kpiv > ipiv - i__);
1614 
1615  --i__;
1616  } while (i__ > 0);
1617 
1618  return 0;
1619 } /* trchul_ */
1620 
1621 ////////////////////////////////////////////////////////////////////////////////
1622 /// trinv.F -- translated by f2c (version 19970219).
1623 ///
1624 /// CERN PROGLIB# F112 TRINV .VERSION KERNFOR 4.15 861204
1625 /// ORIG. 18/12/74 WH
1626 ///
1627 /// See original documentation of CERNLIB package
1628 /// [F112](https://cern-tex.web.cern.ch/cern-tex/shortwrupsdir/f112/top.html)
1629 
1630 double *TCL::trinv(const double *t, double *s, int n)
1631 {
1632  int lhor, ipiv, lver, j;
1633  double r__;
1634  int mx, ndTep, ind;
1635  double sum;
1636 
1637  /* Parameter adjuTments */
1638  --s; --t;
1639 
1640  /* Function Body */
1641  mx = (n * n + n) / 2;
1642  ipiv = mx;
1643 
1644  int i = n;
1645  do {
1646  r__ = 0.;
1647  if (t[ipiv] > 0.) r__ = (double)1. / t[ipiv];
1648  s[ipiv] = r__;
1649  ndTep = n;
1650  ind = mx - n + i;
1651 
1652  while (ind != ipiv) {
1653  sum = 0.;
1654  if (r__ != 0.) {
1655  lhor = ipiv;
1656  lver = ind;
1657  j = i;
1658 
1659  do {
1660  lhor += j;
1661  ++lver;
1662  sum += t[lhor] * s[lver];
1663  ++j;
1664  } while (lhor < ind);
1665  }
1666  s[ind] = -sum * r__;
1667  --ndTep;
1668  ind -= ndTep;
1669  }
1670 
1671  ipiv -= i;
1672  --i;
1673  } while (i > 0);
1674 
1675  return 0;
1676 } /* trinv_ */
1677 
1678 ////////////////////////////////////////////////////////////////////////////////
1679 /// trla.F -- translated by f2c (version 19970219).
1680 ///
1681 /// CERN PROGLIB# F112 TRLA .VERSION KERNFOR 4.15 861204
1682 /// ORIG. 18/12/74 WH
1683 ///
1684 /// See original documentation of CERNLIB package
1685 /// [F112](https://cern-tex.web.cern.ch/cern-tex/shortwrupsdir/f112/top.html)
1686 
1687 double *TCL::trla(const double *u, const double *a, double *b, int m, int n)
1688 {
1689  int ipiv, ia, ib, iu;
1690  double sum;
1691 
1692  /* Parameter adjuTments */
1693  --b; --a; --u;
1694 
1695  /* Function Body */
1696  ib = m * n;
1697  ipiv = (m * m + m) / 2;
1698 
1699  do {
1700  do {
1701  ia = ib;
1702  iu = ipiv;
1703 
1704  sum = 0.;
1705  do {
1706  sum += a[ia] * u[iu];
1707  --iu;
1708  ia -= n;
1709  } while (ia > 0);
1710 
1711  b[ib] = sum;
1712  --ib;
1713  } while (ia > 1 - n);
1714 
1715  ipiv = iu;
1716  } while (iu > 0);
1717 
1718  return 0;
1719 } /* trla_ */
1720 
1721 ////////////////////////////////////////////////////////////////////////////////
1722 /// trlta.F -- translated by f2c (version 19970219).
1723 ///
1724 /// CERN PROGLIB# F112 TRLTA .VERSION KERNFOR 4.15 861204
1725 /// ORIG. 18/12/74 WH
1726 ///
1727 /// See original documentation of CERNLIB package
1728 /// [F112](https://cern-tex.web.cern.ch/cern-tex/shortwrupsdir/f112/top.html)
1729 
1730 double *TCL::trlta(const double *u, const double *a, double *b, int m, int n)
1731 {
1732  int ipiv, mxpn, i__, nTep, ia, ib, iu, mx;
1733  double sum;
1734 
1735  /* Parameter adjuTments */
1736  --b; --a; --u;
1737 
1738  /* Function Body */
1739  ipiv = 0;
1740  mx = m * n;
1741  mxpn = mx + n;
1742  ib = 0;
1743 
1744  i__ = 0;
1745  do {
1746  ++i__;
1747  ipiv += i__;
1748 
1749  do {
1750  iu = ipiv;
1751  nTep = i__;
1752  ++ib;
1753  ia = ib;
1754 
1755  sum = 0.;
1756  do {
1757  sum += a[ia] * u[iu];
1758  ia += n;
1759  iu += nTep;
1760  ++nTep;
1761  } while (ia <= mx);
1762 
1763  b[ib] = sum;
1764  } while (ia < mxpn);
1765 
1766  } while (i__ < m);
1767 
1768  return 0;
1769 } /* trlta_ */
1770 
1771 ////////////////////////////////////////////////////////////////////////////////
1772 /// trpck.F -- translated by f2c (version 19970219).
1773 ///
1774 /// CERN PROGLIB# F112 TRPCK .VERSION KERNFOR 2.08 741218
1775 /// ORIG. 18/12/74 WH
1776 ///
1777 /// See original documentation of CERNLIB package
1778 /// [F112](https://cern-tex.web.cern.ch/cern-tex/shortwrupsdir/f112/top.html)
1779 
1780 double *TCL::trpck(const double *s, double *u, int n)
1781 {
1782  int i__, ia, ind, ipiv;
1783 
1784  /* Parameter adjuTments */
1785  --u; --s;
1786 
1787  /* Function Body */
1788  ia = 0;
1789  ind = 0;
1790  ipiv = 0;
1791 
1792  for (i__ = 1; i__ <= n; ++i__) {
1793  ipiv += i__;
1794  do {
1795  ++ia;
1796  ++ind;
1797  u[ind] = s[ia];
1798  } while (ind < ipiv);
1799  ia = ia + n - i__;
1800  }
1801 
1802  return 0;
1803 } /* trpck_ */
1804 
1805 ////////////////////////////////////////////////////////////////////////////////
1806 /// trqsq.F -- translated by f2c (version 19970219).
1807 ///
1808 /// CERN PROGLIB# F112 TRQSQ .VERSION KERNFOR 4.15 861204
1809 /// ORIG. 18/12/74 WH
1810 ///
1811 /// See original documentation of CERNLIB package
1812 /// [F112](https://cern-tex.web.cern.ch/cern-tex/shortwrupsdir/f112/top.html)
1813 
1814 double *TCL::trqsq(const double *q, const double *s, double *r__, int m)
1815 {
1816  int indq, inds, imax, i__, j, k, l;
1817  int iq, ir, is, iqq;
1818  double sum;
1819 
1820  /* Parameter adjuTments */
1821  --r__; --s; --q;
1822 
1823  /* Function Body */
1824  imax = (m * m + m) / 2;
1825  vzero(&r__[1], imax);
1826  inds = 0;
1827  i__ = 0;
1828 
1829  do {
1830  inds += i__;
1831  ir = 0;
1832  indq = 0;
1833  j = 0;
1834 
1835  do {
1836  indq += j;
1837  is = inds;
1838  iq = indq;
1839  sum = 0.;
1840  k = 0;
1841 
1842  do {
1843  if (k > i__) is += k;
1844  else ++is;
1845 
1846  if (k > j) iq += k;
1847  else ++iq;
1848 
1849  sum += s[is] * q[iq];
1850  ++k;
1851  } while (k < m);
1852  iqq = inds;
1853  l = 0;
1854 
1855  do {
1856  ++ir;
1857  if (l > i__) iqq += l;
1858  else ++iqq;
1859  r__[ir] += q[iqq] * sum;
1860  ++l;
1861  } while (l <= j);
1862  ++j;
1863  } while (j < m);
1864  ++i__;
1865  } while (i__ < m);
1866 
1867  return 0;
1868 } /* trqsq_ */
1869 
1870 ////////////////////////////////////////////////////////////////////////////////
1871 /// trsa.F -- translated by f2c (version 19970219).
1872 ///
1873 /// CERN PROGLIB# F112 TRSA .VERSION KERNFOR 4.15 861204
1874 /// ORIG. 18/12/74 WH
1875 ///
1876 /// See original documentation of CERNLIB package
1877 /// [F112](https://cern-tex.web.cern.ch/cern-tex/shortwrupsdir/f112/top.html)
1878 
1879 double *TCL::trsa(const double *s, const double *a, double *b, int m, int n)
1880 {
1881  /* Local variables */
1882  int inds, i__, j, k, ia, ib, is;
1883  double sum;
1884 
1885  /* Parameter adjuTments */
1886  --b; --a; --s;
1887 
1888  /* Function Body */
1889  inds = 0;
1890  ib = 0;
1891  i__ = 0;
1892 
1893  do {
1894  inds += i__;
1895 
1896  for (j = 1; j <= n; ++j) {
1897  ia = j;
1898  is = inds;
1899  sum = 0.;
1900  k = 0;
1901 
1902  do {
1903  if (k > i__) is += k;
1904  else ++is;
1905  sum += s[is] * a[ia];
1906  ia += n;
1907  ++k;
1908  } while (k < m);
1909  ++ib;
1910  b[ib] = sum;
1911  }
1912  ++i__;
1913  } while (i__ < m);
1914 
1915  return 0;
1916 } /* trsa_ */
1917 
1918 ////////////////////////////////////////////////////////////////////////////////
1919 /// trsinv.F -- translated by f2c (version 19970219).
1920 ///
1921 /// CERN PROGLIB# F112 TRSINV .VERSION KERNFOR 2.08 741218
1922 /// ORIG. 18/12/74 WH
1923 ///
1924 /// See original documentation of CERNLIB package
1925 /// [F112](https://cern-tex.web.cern.ch/cern-tex/shortwrupsdir/f112/top.html)
1926 
1927 double *TCL::trsinv(const double *g, double *gi, int n)
1928 {
1929  /* Function Body */
1930  trchlu(g, gi, n);
1931  trinv(gi, gi, n);
1932  trsmul(gi, gi, n);
1933 
1934  return 0;
1935 } /* trsinv_ */
1936 
1937 ////////////////////////////////////////////////////////////////////////////////
1938 /// trsmlu.F -- translated by f2c (version 19970219).
1939 ///
1940 /// CERN PROGLIB# F112 TRSMLU .VERSION KERNFOR 4.15 861204
1941 /// ORIG. 18/12/74 WH
1942 ///
1943 /// See original documentation of CERNLIB package
1944 /// [F112](https://cern-tex.web.cern.ch/cern-tex/shortwrupsdir/f112/top.html)
1945 
1946 double *TCL::trsmlu(const double *u, double *s, int n)
1947 {
1948  /* Local variables */
1949  int lhor, lver, i__, k, l, ind;
1950  double sum;
1951 
1952  /* Parameter adjuTments */
1953  --s; --u;
1954 
1955  /* Function Body */
1956  ind = (n * n + n) / 2;
1957 
1958  for (i__ = 1; i__ <= n; ++i__) {
1959  lver = ind;
1960 
1961  for (k = i__; k <= n; ++k,--ind) {
1962  lhor = ind; sum = 0.;
1963  for (l = k; l <= n; ++l,--lver,--lhor)
1964  sum += u[lver] * u[lhor];
1965  s[ind] = sum;
1966  }
1967  }
1968 
1969  return 0;
1970 } /* trsmlu_ */
1971 
1972 ////////////////////////////////////////////////////////////////////////////////
1973 /// trsmul.F -- translated by f2c (version 19970219).
1974 ///
1975 /// CERN PROGLIB# F112 TRSMUL .VERSION KERNFOR 4.15 861204
1976 /// ORIG. 18/12/74 WH
1977 ///
1978 /// See original documentation of CERNLIB package
1979 /// [F112](https://cern-tex.web.cern.ch/cern-tex/shortwrupsdir/f112/top.html)
1980 
1981 double *TCL::trsmul(const double *g, double *gi, int n)
1982 {
1983  /* Local variables */
1984  int lhor, lver, lpiv, i__, j, k, ind;
1985  double sum;
1986 
1987  /* Parameter adjuTments */
1988  --gi; --g;
1989 
1990  /* Function Body */
1991  ind = 1;
1992  lpiv = 0;
1993  for (i__ = 1; i__ <= n; ++i__) {
1994  lpiv += i__;
1995  for (j = 1; j <= i__; ++j,++ind) {
1996  lver = lpiv;
1997  lhor = ind;
1998  sum = 0.;
1999  for (k = i__; k <= n;lhor += k,lver += k,++k)
2000  sum += g[lver] * g[lhor];
2001  gi[ind] = sum;
2002  }
2003  }
2004 
2005  return 0;
2006 } /* trsmul_ */
2007 
2008 ////////////////////////////////////////////////////////////////////////////////
2009 /// trupck.F -- translated by f2c (version 19970219).
2010 ///
2011 /// CERN PROGLIB# F112 TRUPCK .VERSION KERNFOR 2.08 741218
2012 /// ORIG. 18/12/74 WH
2013 ///
2014 /// See original documentation of CERNLIB package
2015 /// [F112](https://cern-tex.web.cern.ch/cern-tex/shortwrupsdir/f112/top.html)
2016 
2017 double *TCL::trupck(const double *u, double *s, int m)
2018 {
2019  int i__, im, is, iu, iv, ih, m2;
2020 
2021  /* Parameter adjuTments */
2022  --s; --u;
2023 
2024  /* Function Body */
2025  m2 = m * m;
2026  is = m2;
2027  iu = (m2 + m) / 2;
2028  i__ = m - 1;
2029 
2030  do {
2031  im = i__ * m;
2032  do {
2033  s[is] = u[iu];
2034  --is;
2035  --iu;
2036  } while (is > im);
2037  is = is - m + i__;
2038  --i__;
2039  } while (i__ >= 0);
2040 
2041  is = 1;
2042  do {
2043  iv = is;
2044  ih = is;
2045  while (1) {
2046  iv += m;
2047  ++ih;
2048  if (iv > m2) break;
2049  s[ih] = s[iv];
2050  }
2051  is = is + m + 1;
2052  } while (is < m2);
2053 
2054  return 0;
2055 } /* trupck_ */
2056 
2057 ////////////////////////////////////////////////////////////////////////////////
2058 /// trsat.F -- translated by f2c (version 19970219)
2059 ///
2060 /// CERN PROGLIB# F112 TRSAT .VERSION KERNFOR 4.15 861204
2061 /// ORIG. 18/12/74 WH
2062 ///
2063 /// See original documentation of CERNLIB package
2064 /// [F112](https://cern-tex.web.cern.ch/cern-tex/shortwrupsdir/f112/top.html)
2065 
2066 double *TCL::trsat(const double *s, const double *a, double *b, int m, int n)
2067 {
2068  /* Local variables */
2069  int inds, i__, j, k, ia, ib, is;
2070  double sum;
2071 
2072  /* Parameter adjuTments */
2073  --b; --a; --s;
2074 
2075  /* Function Body */
2076  inds = 0;
2077  ib = 0;
2078  i__ = 0;
2079 
2080  do {
2081  inds += i__;
2082  ia = 0;
2083 
2084  for (j = 1; j <= n; ++j) {
2085  is = inds;
2086  sum = 0.;
2087  k = 0;
2088 
2089  do {
2090  if (k > i__) is += k;
2091  else ++is;
2092  ++ia;
2093  sum += s[is] * a[ia];
2094  ++k;
2095  } while (k < m);
2096  ++ib;
2097  b[ib] = sum;
2098  }
2099  ++i__;
2100  } while (i__ < m);
2101 
2102  return 0;
2103 } /* trsat_ */
2104 
2105 // ------------ Victor Perevoztchikov's addition
2106 
2107 ////////////////////////////////////////////////////////////////////////////////
2108 /// Linear Equations, Matrix Inversion
2109 /// trsequ solves the matrix equation
2110 ///
2111 /// SMX*x = B
2112 ///
2113 /// which represents a system of m simultaneous linear equations with n right-hand sides:
2114 /// SMX is an unpacked symmetric matrix (all elements) (m x m)
2115 /// B is an unpacked matrix of right-hand sides (n x m)
2116 ///
2117 
2118 float *TCL::trsequ(float *smx, int m, float *b, int n)
2119 {
2120  float *mem = new float[(m*(m+1))/2+m];
2121  float *v = mem;
2122  float *s = v+m;
2123  if (!b) n=0;
2124  TCL::trpck (smx,s ,m);
2125  TCL::trsinv(s ,s, m);
2126 
2127  for (int i=0;i<n;i++) {
2128  TCL::trsa (s ,b+i*m, v, m, 1);
2129  TCL::ucopy (v ,b+i*m, m);}
2130  TCL::trupck(s ,smx, m);
2131  delete [] mem;
2132  return b;
2133 }
2134 ////////////////////////////////////////////////////////////////////////////////
2135 /// Linear Equations, Matrix Inversion
2136 /// trsequ solves the matrix equation
2137 ///
2138 /// SMX*x = B
2139 ///
2140 /// which represents a system of m simultaneous linear equations with n right-hand sides:
2141 /// SMX is an unpacked symmetric matrix (all elements) (m x m)
2142 /// B is an unpacked matrix of right-hand sides (n x m)
2143 ///
2144 
2145 double *TCL::trsequ(double *smx, int m, double *b, int n)
2146 {
2147  double *mem = new double[(m*(m+1))/2+m];
2148  double *v = mem;
2149  double *s = v+m;
2150  if (!b) n=0;
2151  TCL::trpck (smx,s ,m);
2152  TCL::trsinv(s ,s, m);
2153 
2154  for (int i=0;i<n;i++) {
2155  TCL::trsa (s ,b+i*m, v, m, 1);
2156  TCL::ucopy (v ,b+i*m, m);}
2157  TCL::trupck(s ,smx, m);
2158  delete [] mem;
2159  return b;
2160 }
2161 
static float * traat(const float *a, float *s, int m, int n)
Symmetric Multiplication of Rectangular Matrices.
Definition: TCernLib.cxx:294
Definition: TCernLib.h:36
static float * trsmul(const float *g, float *gi, int n)
trsmul.F – translated by f2c (version 19970219).
Definition: TCernLib.cxx:1224
#define TCL_TRAAT(a, s, m, n)
Definition: TCernLib.cxx:259
#define TCL_TRASAT(a, s, r__, m, n)
Definition: TCernLib.cxx:505
TArc * a
Definition: textangle.C:12
static float * trata(const float *a, float *r, int m, int n)
trata.F – translated by f2c (version 19970219).
Definition: TCernLib.cxx:601
#define TCL_MXTRP(a, b, i, j)
Definition: TCernLib.cxx:212
static float * mxtrp(const float *a, float *b, int i, int j)
Matrix Transposition.
Definition: TCernLib.cxx:229
static float * trinv(const float *t, float *s, int n)
trinv.F – translated by f2c (version 19970219).
Definition: TCernLib.cxx:868
static float * trsat(const float *s, const float *a, float *b, int m, int n)
trsat.F – translated by f2c (version 19970219).
Definition: TCernLib.cxx:1310
static float * mxmad_0_(int n, const float *a, const float *b, float *c, int i, int j, int k)
Definition: TCernLib.cxx:109
XFontStruct * id
Definition: TGX11.cxx:108
static float * trpck(const float *s, float *u, int n)
trpck.F – translated by f2c (version 19970219).
Definition: TCernLib.cxx:1022
static float * trsequ(float *smx, int m=3, float *b=0, int n=1)
Linear Equations, Matrix Inversion trsequ solves the matrix equation.
Definition: TCernLib.cxx:2118
static float * trsa(const float *s, const float *a, float *b, int m, int n)
trsa.F – translated by f2c (version 19970219).
Definition: TCernLib.cxx:1123
static float * tralt(const float *a, const float *u, float *b, int m, int n)
Triangular - Rectangular Multiplication.
Definition: TCernLib.cxx:412
#define TCL_TRAS(a, s, b, m, n)
Definition: TCernLib.cxx:439
static float * trlta(const float *u, const float *a, float *b, int m, int n)
trlta.F – translated by f2c (version 19970219).
Definition: TCernLib.cxx:971
static float * trqsq(const float *q, const float *s, float *r, int m)
trqsq.F – translated by f2c (version 19970219).
Definition: TCernLib.cxx:1057
SVector< double, 2 > v
Definition: Dict.h:5
static float * trats(const float *a, const float *s, float *b, int m, int n)
trats.F – translated by f2c (version 19970219).
Definition: TCernLib.cxx:641
static int * ucopy(const int *a, int *b, int n)
Definition: TCernLib.h:353
TMarker * m
Definition: textangle.C:8
static float * tral(const float *a, const float *u, float *b, int m, int n)
Triangular - Rectangular Multiplication.
Definition: TCernLib.cxx:353
TLine * l
Definition: textangle.C:4
static float * trchul(const float *a, float *b, int n)
trchul.F – translated by f2c (version 19970219).
Definition: TCernLib.cxx:804
static float * trsinv(const float *g, float *gi, int n)
trsinv.F – translated by f2c (version 19970219).
Definition: TCernLib.cxx:1172
#define TCL_TRALT(a, u, b, m, n)
Definition: TCernLib.cxx:380
static float * trasat(const float *a, const float *s, float *r, int m, int n)
Transformation of Symmetric Matrix.
Definition: TCernLib.cxx:550
#define ClassImp(name)
Definition: Rtypes.h:279
static float * trsmlu(const float *u, float *s, int n)
trsmlu.F – translated by f2c (version 19970219).
Definition: TCernLib.cxx:1189
static float * tras(const float *a, const float *s, float *b, int m, int n)
Symmetric - Rectangular Multiplication.
Definition: TCernLib.cxx:477
static float * mxmlrt_0_(int n__, const float *a, const float *b, float *c, int ni, int nj)
Matrix Multiplication.
Definition: TCernLib.cxx:164
static float * vzero(float *a, int n2)
Definition: TCernLib.h:513
#define TCL_TRAL(a, u, b, m, n)
Definition: TCernLib.cxx:319
#define TCL_MXMLRT(n__, a, b, c, ni, nj)
Definition: TCernLib.cxx:130
static float * trupck(const float *u, float *s, int m)
trupck.F – translated by f2c (version 19970219).
Definition: TCernLib.cxx:1260
#define TCL_MXMAD(n_, a, b, c, i, j, k)
Definition: TCernLib.cxx:65
int * iq
Definition: THbookFile.cxx:86
static float * tratsa(const float *a, const float *s, float *r, int m, int n)
tratsa.F – translated by f2c (version 19970219).
Definition: TCernLib.cxx:688
Double_t Sqrt(Double_t x)
Definition: TMath.h:464
float * q
Definition: THbookFile.cxx:87
const Int_t n
Definition: legend1.C:16
static float * trchlu(const float *a, float *b, int n)
trchlu.F – translated by f2c (version 19970219).
Definition: TCernLib.cxx:744
static float * trla(const float *u, const float *a, float *b, int m, int n)
trla.F – translated by f2c (version 19970219).
Definition: TCernLib.cxx:927