TVector scalar product revisited ..

From: lijowski@cosray2.wustl.edu
Date: Tue Sep 08 1998 - 20:57:27 MEST


  Hello,

  I repost this email because I don't think I got a response.
  Below is a macro calculating scalar products between two vectors
  using TVectors and arrays. I have been running ROOT 2.00/11 for
  SunOS5.4 under SunOS5.5. 

  In both loops in the first iteration the scalar product calculated 
  using TVectors is zero. Any explanation?

   Thank you and regards,

   Michal Lijowski

------------------------------------------------------------------------
Michal Lijowski                  Washington University
Research Associate               St. Louis, MO 63130-4899, USA 
Department of Physics            phone:   314-935-6285
Campus Box 1105                  email:   lijowski@cosray2.wustl.edu
------------------------------------------------------------------------

 {
  gROOT -> Reset();
  gBenchmark -> Start("test_vectors");


Double_t  av[4][2] = {
          -8.997,  -0.015,
          -9.021,  -0.260,
          -8.998,  -0.021,
          -9.021,  -0.027};
Double_t  bv[4][2] = {
           0.0260, -8.982,
           0.0250, -8.988,
           0.0340, -8.985,
           0.0280, -8.992};

  TVector  va(0, 1), vb(0, 1);

  for (Int_t  jj = 0; jj < 4; jj++) {
       Double_t  avn = sqrt(av[jj][0] * av[jj][0] + av[jj][1] * av[jj][1]);
       Double_t  bvn = sqrt(bv[jj][0] * bv[jj][0] + bv[jj][1] * bv[jj][1]);
 
       Double_t  cosine = (av[jj][0] * bv[jj][0] + av[jj][1] * bv[jj][1]) / (avn * bvn);

       printf(" %d  av   %f   %f   bv   %f   %f  cosine  %f\n", jj, av[jj][0], av[jj][1], bv[jj][0], bv[jj][1], cosine);

       Int_t  ll = 0;         
       for  (Int_t ii = va.GetLwb(); ii <= va.GetUpb(); ii++) {
           va(ii) = (float) av[jj][ll];
           vb(ii) = (float) bv[jj][ll];
           ll++;
       }
       va.Print();
       vb.Print();
       cosine = Assert(va * vb) / (sqrt(va.Norm2Sqr() * vb.Norm2Sqr()));
       printf("  cosine  %f\n", cosine);
   }

 for (jj = 3; jj >=0; jj--) {
       Double_t  avn = sqrt(av[jj][0] * av[jj][0] + av[jj][1] * av[jj][1]);
       Double_t  bvn = sqrt(bv[jj][0] * bv[jj][0] + bv[jj][1] * bv[jj][1]);
 
       Double_t  cosine = (av[jj][0] * bv[jj][0] + av[jj][1] * bv[jj][1]) / (avn * bvn);

       printf(" %d  av   %f   %f   bv   %f   %f  cosine  %f\n", jj, av[jj][0], av[jj][1], bv[jj][0], bv[jj][1], cosine);

       ll = 0;         
       for  (Int_t ii = va.GetLwb(); ii <= va.GetUpb(); ii++) {
           va(ii) = (float) av[jj][ll];
           vb(ii) = (float) bv[jj][ll];
           ll++;
       }
       va.Print();
       vb.Print();
       cosine = Assert(va * vb) / (sqrt(va.Norm2Sqr() * vb.Norm2Sqr()));
       printf("  cosine  %f\n", cosine );
   }
   gBenchmark -> Show("test_vectors");
  }

  Here is an output. 

 0  av   -8.997000   -0.015000   bv   0.026000   -8.982000  cosine  -0.001227
  cosine  0.000000
 1  av   -9.021000   -0.260000   bv   0.025000   -8.988000  cosine  0.026029
  cosine  0.026029
 2  av   -8.998000   -0.021000   bv   0.034000   -8.985000  cosine  -0.001450
  cosine  -0.001450
 3  av   -9.021000   -0.027000   bv   0.028000   -8.992000  cosine  -0.000121
  cosine  -0.000121
 3  av   -9.021000   -0.027000   bv   0.028000   -8.992000  cosine  -0.000121
  cosine  0.000000
 2  av   -8.998000   -0.021000   bv   0.034000   -8.985000  cosine  -0.001450
  cosine  -0.001450
 1  av   -9.021000   -0.260000   bv   0.025000   -8.988000  cosine  0.026029
  cosine  0.026029
 0  av   -8.997000   -0.015000   bv   0.026000   -8.982000  cosine  -0.001227
  cosine  -0.001227



This archive was generated by hypermail 2b29 : Tue Jan 04 2000 - 00:34:37 MET