Ignore:
Timestamp:
02/05/04 17:50:16 (21 years ago)
Author:
gaug
Message:
*** empty log message ***
File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/MagicSoft/Mars/manalysis/MPedestalCam.cc

    r3014 r3038  
    143143// Get i-th pixel (pixel number)
    144144//
    145 const MHPedestalPixel &MPedestalCam::operator()(UInt_t i) const
     145MHPedestalPixel &MPedestalCam::operator()(UInt_t i) const
    146146{
    147147  return *static_cast<MHPedestalPixel*>(fHArray->UncheckedAt(i));
     
    155155
    156156    fArray->ForEach(TObject, Clear)();
    157     //    fHArray->ForEach(TObject, Clear)();
    158157
    159158    fTotalEntries     = 0;
    160159    fExtractSlices    = 0.;
    161160}
     161
     162
     163// --------------------------------------------------------------------------
     164//
     165// Our own clone function is necessary since root 3.01/06 or Mars 0.4
     166// I don't know the reason
     167//
     168TObject *MPedestalCam::Clone(const char *) const
     169{
     170
     171  const Int_t n1 = fArray->GetSize();
     172  const Int_t n2 = fHArray->GetSize();
     173 
     174  //
     175  // FIXME, this might be done faster and more elegant, by direct copy.
     176  //
     177  MPedestalCam *cam = new MPedestalCam;
     178 
     179  cam->fArray->Expand(n1);
     180  cam->fHArray->Expand(n2);
     181 
     182  for (int i=0; i<n1; i++)
     183    {
     184      delete (*cam->fArray)[i];
     185      (*cam->fArray)[i] = (*fArray)[i]->Clone();
     186    }
     187
     188  for (int i=0; i<n2; i++)
     189    {
     190      delete (*cam->fHArray)[i];
     191      (*cam->fHArray)[i] = (*fHArray)[i]->Clone();
     192    }
     193  return cam;
     194}
     195
     196
    162197
    163198// --------------------------------------------------------------------------
     
    170205{
    171206
    172   fArray->ForEach(MPedestalPix, InitUseHists)();
    173207  fHArray->Delete();
    174208
     
    189223    }
    190224 
     225
    191226  Float_t slices = (Float_t)signal->GetNumUsedFADCSlices();
    192227
     
    218253          MHPedestalPixel &hist = (*this)(i);
    219254          hist.ChangeHistId(i);
     255          MPedestalPix &pix = (*this)[i];
     256          pix.InitUseHists();
    220257        }
    221258    }
     
    229266  for (Int_t i=0; i<n; i++)
    230267    {
     268
    231269      const MExtractedSignalPix &pix = (*signal)[i];
    232270     
    233271      const Float_t sig = pix.GetExtractedSignalHiGain();
    234       const Float_t sigPerSlice = sig/fExtractSlices;
    235      
     272
    236273      MHPedestalPixel &hist = (*this)(i);
    237 
    238       hist.FillCharge(sigPerSlice);
    239       hist.FillChargevsN(sigPerSlice);
     274      //
     275      // Don't fill signal per slice, we get completely screwed up
     276      // with the sigma. Better fill like it is and renorm later
     277      //
     278      //      const Float_t sigPerSlice = sig/fExtractSlices;
     279      //      hist.FillCharge(sigPerSlice);
     280      //      hist.FillChargevsN(sigPerSlice);
     281      const Float_t signal = sig;
     282      hist.FillCharge(signal);
     283      hist.FillChargevsN(signal);
    240284    }
    241285 
     
    247291    for (Int_t i=0; i<fHArray->GetSize(); i++)
    248292    {
     293
    249294        MHPedestalPixel &hist = (*this)(i);
    250295
     
    262307        //
    263308        hist.FitCharge();
     309        hist.Renorm(fExtractSlices);
     310
    264311    }
    265312    return kTRUE;
     
    343390
    344391  const Float_t pederr   = rms/TMath::Sqrt((Float_t)fTotalEntries);
    345   const Float_t rmserr   = rms/TMath::Sqrt((Float_t)fTotalEntries/2.);
     392  const Float_t rmserr   = rms/TMath::Sqrt((Float_t)fTotalEntries*2.);
    346393
    347394  const MHPedestalPixel &hist = (*this)(idx);
    348395
    349396  const Float_t mean     = hist.GetChargeMean();
    350   const Float_t meanerr  = hist.GetChargeMeanErr() * TMath::Sqrt((Float_t)fExtractSlices);
    351   const Float_t sigma    = hist.GetChargeSigma()   * TMath::Sqrt((Float_t)fExtractSlices);
    352   const Float_t sigmaerr = hist.GetChargeSigmaErr()* TMath::Sqrt((Float_t)fExtractSlices);
     397  const Float_t meanerr  = hist.GetChargeMeanErr();
     398  const Float_t sigma    = hist.GetChargeSigma() ;
     399  const Float_t sigmaerr = hist.GetChargeSigmaErr();
    353400  const Float_t prob     = hist.GetChargeProb();
    354401
     
    368415      break;
    369416    case 4:
    370       //      if ((*this)[idx].IsFitValid())
     417      if (!(*this)(idx).IsFitOK())
     418        return kFALSE;
    371419      val = mean;
    372         //      else
    373         //        return kFALSE;
    374420      break;
    375421    case 5:
    376       //      if ((*this)[idx].IsFitValid())
     422      if (!(*this)(idx).IsFitOK())
     423        return kFALSE;
    377424      val = meanerr;
    378         //      else
    379         //        return kFALSE;
    380425      break;
    381426    case 6:
    382       //      if ((*this)[idx].IsFitValid())
     427      if (!(*this)(idx).IsFitOK())
     428        return kFALSE;
    383429      val = sigma;
    384         //      else
    385         //        return kFALSE;
    386430      break;
    387431    case 7:
    388       //      if ((*this)[idx].IsFitValid())
     432      if (!(*this)(idx).IsFitOK())
     433        return kFALSE;
    389434      val = sigmaerr;
    390         //      else
    391         //        return kFALSE;
    392435      break;
    393436    case 8:
    394       //      if ((*this)[idx].IsFitValid())
     437      if (!(*this)(idx).IsFitOK())
     438        return kFALSE;
    395439      val = prob;
    396         //      else
    397         //        return kFALSE;
    398440      break;
    399441    case 9:
    400       //      if ((*this)[idx].IsFitValid())
     442      if (!(*this)(idx).IsFitOK())
     443        return kFALSE;
    401444      val = 2.*(ped-mean)/(ped+mean);
    402         //      else
    403         //        return kFALSE;
    404445      break;
    405446    case 10:
     447      if (!(*this)(idx).IsFitOK())
     448        return kFALSE;
    406449      val = TMath::Sqrt((pederr*pederr + meanerr*meanerr) * (ped*ped + mean*mean))
    407450            *2./(ped+mean)/(ped+mean);
    408451      break;
    409452    case 11:
     453      if (!(*this)(idx).IsFitOK())
     454        return kFALSE;
    410455      val = 2.*(pederr - meanerr)/(pederr + meanerr);
    411456      break;
    412457    case 12:
    413       val = 2.*(rms-sigma)/(rms+sigma);
     458      if (!(*this)(idx).IsFitOK())
     459        return kFALSE;
     460      val = 2.*(sigma-rms)/(sigma+rms);
    414461      break;
    415462    case 13:
     463      if (!(*this)(idx).IsFitOK())
     464        return kFALSE;
    416465      val = TMath::Sqrt((rmserr*rmserr + sigmaerr*sigmaerr) * (rms*rms + sigma*sigma))
    417466            *2./(rms+sigma)/(rms+sigma);
    418467      break;
    419468    case 14:
    420       //      if ((*this)[idx].IsFitValid())
    421       val = 2.*(rmserr - sigmaerr)/(rmserr + sigmaerr);
    422               //      else
    423         //        return kFALSE;
     469      if (!(*this)(idx).IsFitOK())
     470        return kFALSE;
     471      val = 2.*(sigmaerr - rmserr)/(sigmaerr + rmserr);
    424472      break;
    425473    default:
     
    431479void MPedestalCam::DrawPixelContent(Int_t idx) const
    432480{
    433   (*this)[idx].Draw();
    434 }
     481  (*this)(idx).Draw();
     482}
Note: See TracChangeset for help on using the changeset viewer.