Ignore:
Timestamp:
10/20/04 11:48:20 (20 years ago)
Author:
gaug
Message:
*** empty log message ***
File:
1 edited

Legend:

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

    r4752 r5294  
    5353const Byte_t  MExtractTimeFastSpline::fgLoGainLast   = 14;
    5454const Float_t MExtractTimeFastSpline::fgResolution   = 0.003;
    55 const Float_t MExtractTimeFastSpline::fgRiseTime     = 1.5;
     55const Float_t MExtractTimeFastSpline::fgRiseTime     = 2.;
    5656
    5757// --------------------------------------------------------------------------
     
    168168  // Check for saturation in all other slices
    169169  //
    170   while (++p<end)
     170  while (p<end)
    171171    {
    172172      if (*p > max)
     
    176176        }
    177177
    178       if (*p >= fSaturationLimit)
     178      if (*p++ >= fSaturationLimit)
    179179        {
    180180          sat++;
     
    183183    }
    184184 
    185   if (sat)
     185  //
     186  // allow one saturated slice
     187  //
     188  if (sat > 1)
    186189    return;
    187190
    188   if (maxpos < 2)
    189     return;
     191  if (maxpos < 1)
     192    {
     193      time = -999.;
     194      return;
     195    }
    190196 
    191197  Float_t pp;
     
    200206      pp = fHiGainSecondDeriv[i-1] + 4.;
    201207      fHiGainSecondDeriv[i] = -1.0/pp;
    202       const Double_t deriv = *(p+1) - 2.* *(p) + *(p-1);
    203       fHiGainFirstDeriv [i] = (6.0*deriv-fHiGainFirstDeriv[i-1])/pp;
     208      fHiGainFirstDeriv [i] = *(p+1) - 2.* *(p) + *(p-1);
     209      fHiGainFirstDeriv [i] = (6.0*fHiGainFirstDeriv[i]-fHiGainFirstDeriv[i-1])/pp;
    204210    }
    205211
     
    229235
    230236  //
    231   // Search for the maximum, starting in interval maxpos-1. If no maximum is found, go to
    232   // interval maxpos+1.
    233   //
    234 
     237  // Search for the maximum, starting in interval maxpos-1 in steps of 0.2 till maxpos-0.2.
     238  // If no maximum is found, go to interval maxpos+1.
     239  //
    235240  Float_t higainklo = fHiGainSecondDeriv[klo];
    236241  Float_t higainkhi = fHiGainSecondDeriv[khi];
    237   while (x<upper-0.3)
     242
     243  while ( x < upper - 0.3 )
    238244    {
    239245     
     
    254260    }
    255261 
    256 
    257  if (time > upper-0.1)
     262  //
     263  // Search for the absolute maximum from maxpos to maxpos+1 in steps of 0.2
     264  //
     265  if (time > upper-0.1)
    258266    {
    259267
     
    270278      higainklo = fHiGainSecondDeriv[klo];
    271279      higainkhi = fHiGainSecondDeriv[khi];
     280
    272281      while (x<upper-0.3)
    273282        {
     
    289298        }
    290299  }
    291  
    292   const Float_t up = time+step-0.055;
    293   const Float_t lo = time-step+0.055;
     300
     301  //
     302  // Now, the time, abmax and khicont and klocont are set correctly within the previous precision.
     303  // Try a better precision.
     304  //
     305  const Float_t up = time+step-0.035;
     306  const Float_t lo = time-step+0.035;
    294307  const Float_t maxpossave = time;
    295 
     308 
    296309  x     = time;
    297310  a     = upper - x;
    298311  b     = x - lower;
    299312
    300   step  = 0.04; // step size of 83 ps
     313  step  = 0.025; // step size of 83 ps
    301314
    302315  higainklo = fHiGainSecondDeriv[klo];
    303316  higainkhi = fHiGainSecondDeriv[khi];
    304   while (x<up)
     317
     318  //
     319  // First, try from time up to time+0.2 in steps of 83ps.
     320  //
     321  while ( x < up )
    305322    {
    306323
     
    322339    }
    323340
    324   if (time < klo + 0.02)
     341
     342  //
     343  // Second, try from time down to time-0.2 in steps of 0.04.
     344  //
     345  x     = maxpossave;
     346  //
     347  // Test the possibility that the absolute maximum has not been found between
     348  // maxpos and maxpos+0.02, then we have to look between maxpos-0.02 and maxpos
     349  // which requires new setting of klocont and khicont
     350  //
     351  if (x < klo + 0.02)
    325352    {
    326353      klo--;
     
    332359    }
    333360 
    334   x     = maxpossave;
    335361  a     = upper - x;
    336362  b     = x - lower;
     
    338364  higainklo = fHiGainSecondDeriv[klo];
    339365  higainkhi = fHiGainSecondDeriv[khi];
    340   while (x>lo)
     366
     367  while ( x > lo )
    341368    {
    342369
     
    360387  const Float_t halfmax = pedes + (abmax - pedes)/2.;
    361388
     389#if 0
    362390  //
    363391  // Now, loop from the maximum bin leftward down in order to find the position of the half maximum.
     
    381409  klocont = (Float_t)*(first+klo);
    382410  khicont = (Float_t)*(first+klo+1);
    383   time  = x;
    384411
    385412  step = 0.5;
     
    415442     
    416443    }
    417 
    418444  time  = (Float_t)fHiGainFirst + x;
    419   dtime = fResolution;
     445
     446#endif
     447  dtime = 0.035;
     448
    420449}
    421450
     
    431460  const Int_t range = fLoGainLast - fLoGainFirst + 1;
    432461  const Byte_t *end = first + range;
    433   Byte_t *p = first;
     462  Byte_t       *p  = first;
    434463  Byte_t max    = 0;
    435464  Byte_t maxpos = 0;
     
    438467  // Check for saturation in all other slices
    439468  //
    440   while (++p<end)
     469  while (p<end)
    441470    {
    442471      if (*p > max)
     
    446475        }
    447476
    448       if (*p >= fSaturationLimit)
     477      if (*p++ >= fSaturationLimit)
    449478        {
    450479          sat++;
     
    456485    return;
    457486
    458   if (maxpos < 2)
     487  if (maxpos < 1)
    459488    return;
    460489 
Note: See TracChangeset for help on using the changeset viewer.