Ignore:
Timestamp:
06/07/04 18:47:53 (20 years ago)
Author:
gaug
Message:
*** empty log message ***
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/MagicSoft/Mars/msignal/MExtractTimeFastSpline.cc

    r4262 r4279  
    193193  for (Int_t i=1;i<range-1;i++)
    194194    {
     195      p++;
    195196      pp = fHiGainSecondDeriv[i-1] + 4.;
    196197      fHiGainSecondDeriv[i] = -1.0/pp;
    197       fHiGainFirstDeriv [i] = *(p+2) - 2.* *(p+1) + *(p);
     198      fHiGainFirstDeriv [i] = *(p+1) - 2.* *(p) + *(p-1);
    198199      fHiGainFirstDeriv [i] = (6.0*fHiGainFirstDeriv[i]-fHiGainFirstDeriv[i-1])/pp;
    199       p++;
    200200    }
    201201
    202202  fHiGainSecondDeriv[range-1] = 0.;
    203203
    204   for (Int_t k=range-2;k>=0;k--)
    205     fHiGainSecondDeriv[k] = (fHiGainSecondDeriv[k]*fHiGainSecondDeriv[k+1] + fHiGainFirstDeriv[k])/6.;
     204  for (Int_t k=range-2;k>0;k--)
     205    fHiGainSecondDeriv[k] = fHiGainSecondDeriv[k]*fHiGainSecondDeriv[k+1] + fHiGainFirstDeriv[k];
     206  for (Int_t k=range-2;k>0;k--)
     207    fHiGainSecondDeriv[k] /= 6.;
    206208 
    207209  //
     
    219221  Float_t klocont = (Float_t)*(first+klo);
    220222  Float_t khicont = (Float_t)*(first+khi);
    221   time          = lower;
    222   Float_t abmax = klocont;
     223  time          = upper;
     224  Float_t abmax = khicont;
    223225
    224226  //
     
    226228  // interval maxpos+1.
    227229  //
    228   while (x<upper-0.1)
    229     {
    230 
     230  while (x<upper-0.3)
     231    {
     232     
    231233      x += step;
    232234      a -= step;
    233235      b += step;
    234 
     236     
    235237      y = a*klocont
    236238        + b*khicont
    237239        + (a*a*a-a)*fHiGainSecondDeriv[klo]
    238240        + (b*b*b-b)*fHiGainSecondDeriv[khi];
    239 
     241     
    240242      if (y > abmax)
    241243        {
     
    243245          time   = x;
    244246        }
    245 
    246     }
    247 
    248  if (time < lower+0.1)
    249     {
    250 
    251       upper = (Float_t)maxpos-1.;
    252       lower = (Float_t)maxpos-2.;
     247    }
     248 
     249
     250 if (time > upper-0.1)
     251    {
     252
     253      upper = (Float_t)maxpos+1.;
     254      lower = (Float_t)maxpos;
    253255      x     = lower;
    254256      a     = 1.;
    255257      b     = 0.;
    256       khi   = maxpos-1;
    257       klo   = maxpos-2;
     258      khi   = maxpos+1;
     259      klo   = maxpos;
    258260      klocont = (Float_t)*(first+klo);
    259261      khicont = (Float_t)*(first+khi);
    260262
    261       while (x<upper-0.1)
     263      while (x<upper-0.3)
    262264        {
    263265
     
    309311    }
    310312
     313  if (time < klo + 0.02)
     314    {
     315      klo--;
     316      khi--;
     317      klocont = (Float_t)*(first+klo);
     318      khicont = (Float_t)*(first+khi);
     319      upper--;
     320      lower--;
     321    }
     322 
    311323  x     = maxpossave;
    312324  a     = upper - x;
     
    330342          time   = x;
    331343        }
    332      
    333344    }
    334345
     
    340351  // First, find the right FADC slice:
    341352  //
    342   klo   = maxpos - 1;
     353  klo   = maxpos;
    343354  while (klo > maxpos-4)
    344355    {
     
    443454  for (Int_t i=1;i<range-1;i++)
    444455    {
     456      p++;
    445457      pp = fLoGainSecondDeriv[i-1] + 4.;
    446458      fLoGainSecondDeriv[i] = -1.0/pp;
    447       fLoGainFirstDeriv [i] = *(p+2) - 2.* *(p+1) + *(p);
     459      fLoGainFirstDeriv [i] = *(p+1) - 2.* *(p) + *(p-1);
    448460      fLoGainFirstDeriv [i] = (6.0*fLoGainFirstDeriv[i]-fLoGainFirstDeriv[i-1])/pp;
    449       p++;
    450461    }
    451462
    452463  fLoGainSecondDeriv[range-1] = 0.;
    453464
    454   for (Int_t k=range-2;k>=0;k--)
    455     fLoGainSecondDeriv[k] = (fLoGainSecondDeriv[k]*fLoGainSecondDeriv[k+1] + fLoGainFirstDeriv[k])/6.;
     465  for (Int_t k=range-2;k>0;k--)
     466    fLoGainSecondDeriv[k] = fLoGainSecondDeriv[k]*fLoGainSecondDeriv[k+1] + fLoGainFirstDeriv[k];
     467  for (Int_t k=range-2;k>0;k--)
     468    fLoGainSecondDeriv[k] /= 6.;
    456469 
    457470  //
     
    469482  Float_t klocont = (Float_t)*(first+klo);
    470483  Float_t khicont = (Float_t)*(first+khi);
    471   time  = lower;
    472   Float_t abmax = klocont;
     484  time          = upper;
     485  Float_t abmax = khicont;
    473486
    474487  //
     
    476489  // interval maxpos+1.
    477490  //
    478   while (x<upper-0.1)
     491  while (x<upper-0.3)
    479492    {
    480493
     
    496509    }
    497510
    498  if (time < lower+0.1)
    499     {
    500 
    501       upper = (Float_t)maxpos-1.;
    502       lower = (Float_t)maxpos-2.;
     511 if (time > upper-0.1)
     512    {
     513
     514      upper = (Float_t)maxpos+1.;
     515      lower = (Float_t)maxpos;
    503516      x     = lower;
    504517      a     = 1.;
    505518      b     = 0.;
    506       khi   = maxpos-1;
    507       klo   = maxpos-2;
     519      khi   = maxpos+1;
     520      klo   = maxpos;
    508521      klocont = (Float_t)*(first+klo);
    509522      khicont = (Float_t)*(first+khi);
    510523
    511       while (x<upper-0.1)
     524      while (x<upper-0.3)
    512525        {
    513526
     
    559572    }
    560573
     574  if (time < klo + 0.01)
     575    {
     576      klo--;
     577      khi--;
     578      klocont = (Float_t)*(first+klo);
     579      khicont = (Float_t)*(first+khi);
     580      upper--;
     581      lower--;
     582    }
     583 
    561584  x     = maxpossave;
    562585  a     = upper - x;
Note: See TracChangeset for help on using the changeset viewer.