Changeset 3106 for trunk


Ignore:
Timestamp:
02/12/04 00:22:58 (21 years ago)
Author:
gaug
Message:
*** empty log message ***
Location:
trunk/MagicSoft/Mars
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/MagicSoft/Mars/Changelog

    r3103 r3106  
    2626       pixel numbers.
    2727
     28   * mbase/MArray.[h,cc]
     29     - introduced function to cut array edges with zeros.
     30       (Thomas, should we keep it there or move it to another class? )
     31
     32   * mcalib/MCalibrationCalc.[h,cc]
     33     - new function SetBlindPixelRange to set start and end of FADC slices
     34       used for the blind pixel signal extraction.
     35     - remove fEvents which are not necessary any more after the shift
     36       to MFCosmics.
     37
    2838
    2939 2004/02/11: Abelardo Moralejo
     
    5969      spectrum
    6070
    61   * mfilter/MCosmics.[h,cc]
     71  * mfilter/MFCosmics.[h,cc]
    6272  * mfilter/Makefile
    6373  * mfilter/FilterLinkDef.h
  • trunk/MagicSoft/Mars/mcalib/MCalibrationCalc.cc

    r3090 r3106  
    116116const Byte_t MCalibrationCalc::fgSaturationLimit = 254;
    117117const Byte_t MCalibrationCalc::fgBlindPixelFirst = 3;
    118 const Byte_t MCalibrationCalc::fgBlindPixelLast  = 16;
     118const Byte_t MCalibrationCalc::fgBlindPixelLast  = 8;
    119119
    120120// --------------------------------------------------------------------------
     
    136136
    137137    Clear();
     138    SetBlindPixelRange();
    138139}
    139140
     
    150151    CLRBIT(fFlags, kUsePinDiodeFit);
    151152
    152 
    153 
    154     fEvents            = 0;
     153    fBlindPixelFirst   = 0;
     154    fBlindPixelLast    = 0;
    155155
    156156    fNumHiGainSamples  = 0;
     
    160160
    161161    fColor = kECT1;
     162}
     163
     164void MCalibrationCalc::SetBlindPixelRange(Byte_t first, Byte_t last)
     165{
     166 
     167  fBlindPixelFirst = first;
     168  fBlindPixelLast  = last;
    162169}
    163170
     
    387394  MRawEvtPixelIter pixel(fRawEvt);
    388395 
    389   fEvents++;
    390 
    391396  //
    392397  // Create a (second) loop to do fill the calibration histograms
     
    431436              if (pixid == 1)
    432437                referencetime = (Float_t)pixel.GetIdxMaxHiGainSample();
    433 #endif
    434438              if (sig.IsLoGainUsed())
    435439                {
     
    445449              //        }  /* if Use Times */
    446450
     451#endif
    447452      switch(pixid)
    448453        {
     
    453458            {
    454459         
     460              Byte_t *ptr = pixel.GetHiGainSamples();
     461
    455462              Float_t blindpixelsumhi = 0.;
    456463              Float_t blindpixelsumlo = 0.;
     
    458465              // We need a dedicated signal extractor for the blind pixel
    459466              //
    460               MPedestalPix &ped  = (*fPedestals)[pixid];
    461               if (!CalcSignalBlindPixel(pixel.GetHiGainSamples(), blindpixelsumhi, ped.GetPedestal()))
    462                 return kFALSE;
    463 
    464               CalcSignalBlindPixel(pixel.GetLoGainSamples(), blindpixelsumlo, ped.GetPedestal());
    465              
    466               blindpixel.FillGraphs(blindpixelsumhi,blindpixelsumlo);
    467          
     467              MPedestalPix &ped  = (*fPedestals)[fBlindPixelId];
     468
     469              Int_t diff = 0;
     470
     471              if (fBlindPixelLast > 15)
     472                {
     473                  diff = fBlindPixelLast - 15;
     474                  fBlindPixelLast = 15;
     475                }
     476
     477              Byte_t *start   = ptr   + fBlindPixelFirst - 1;
     478              Byte_t *end     = start + fBlindPixelLast - fBlindPixelFirst + 1;
     479
     480              ptr = start;
     481
     482              Int_t sum = 0;
     483             
     484              while (ptr<end)
     485                {
     486                  sum += *ptr;
     487                  ptr++;
     488                }
     489
     490              if (diff > 0)
     491                {
     492                  ptr = pixel.GetLoGainSamples();
     493                 
     494                  end     = ptr + diff + 1;
     495                 
     496                  while (ptr<end)
     497                    {
     498                      sum += *ptr;
     499                      ptr++;
     500                    }
     501                }
     502             
     503              blindpixelsumhi = (Float_t)sum;
     504
     505              ptr = pixel.GetLoGainSamples();
     506
     507              start   = ptr + fBlindPixelFirst - 1;
     508              end     = ptr + fBlindPixelLast;
     509
     510              ptr = start;
     511
     512              sum = 0;
     513             
     514              while (++ptr<end)
     515                sum += *ptr;
     516
     517              blindpixelsumlo = (Float_t)sum;
     518
     519              //              if (!CalcSignalBlindPixel(hiptr, blindpixelsumhi))
     520              //                return kFALSE;
     521
    468522              if (!blindpixel.FillCharge(blindpixelsumhi))
    469523                *fLog << warn <<
    470524                  "Overflow or Underflow occurred filling Blind Pixel sum = " << blindpixelsumhi << endl;
    471525             
    472               Byte_t *hiptr = pixel.GetHiGainSamples();
    473               Byte_t *loptr = pixel.GetHiGainSamples();
    474              
     526              //              Byte_t *loptr = pixel.GetLoGainSamples();
     527              //              CalcSignalBlindPixel(loptr, blindpixelsumlo);
     528             
     529              blindpixel.FillGraphs(blindpixelsumhi,blindpixelsumlo);
     530         
     531#if 0             
    475532              TH1I *hist = blindpixel.GetSinglePheFADCSlices();
    476533
    477               if (blindpixelsumhi > 100.)
     534              if (blindpixelsumhi > 300.)
    478535                {
     536                  ptr = pixel.GetHiGainSamples();
    479537                  for (Int_t i=0;i<15;i++)
    480                     hist->Fill(i,*hiptr++);
     538                    hist->Fill(i,*ptr++);
     539                  ptr = pixel.GetLoGainSamples();
    481540                  for (Int_t i=15;i<30;i++)
    482                     hist->Fill(i,*loptr++);
     541                    hist->Fill(i,*ptr++);
    483542                }
    484              
     543#endif             
    485544            } /* if use blind pixel */
    486545         
    487           break;
    488              
     546          //          break;
    489547        case fPINDiodeId:
    490548
     
    504562              if (!pindiode.FillGraphs(sumhi,sumlo))
    505563                *fLog << warn
    506                       << "Overflow or Underflow occurred filling PINDiode: eventnr = "
    507                       << fEvents << endl;
     564                      << "Overflow or Underflow occurred filling PINDiode: eventnr = " << endl;
    508565             
    509566            } /* if use PIN Diode */
    510567         
    511           break;
     568          //          break;
    512569             
    513570        default:
     
    563620  *fLog << inf << endl;
    564621
    565   if (fEvents == 0)
    566     {
    567       *fLog << err << GetDescriptor()
    568             << ": This run contains no calibration data! " << endl;
    569       return kFALSE;
    570     }
    571  
    572622  *fLog << inf << GetDescriptor() << ": Cut Histogram Edges" << endl;
    573623
     
    595645      if (fPedestals->GetHistSize() > fBlindPixelId)
    596646        {
     647
     648          Float_t pedestal;
     649          Float_t pederr;
     650          Float_t pedsigma;
     651          Float_t pedsigmaerr;
     652
     653          const ULong_t nentries    = fPedestals->GetTotalEntries();
     654          const Float_t nslices     = (Float_t)(fgBlindPixelLast-fgBlindPixelFirst+1);
     655          const Float_t sqrslice    = TMath::Sqrt(nslices);
    597656          //
    598657          // retrieve the pedestal pix of the blind pixel
    599658          //
    600           MHPedestalPixel &pedhist = (*fPedestals)(fBlindPixelId);
    601           MPedestalPix    &pedpix  = (*fPedestals)[fBlindPixelId];
     659          if (fPedestals->GetHistSize() != 0)
     660            {
     661              MHPedestalPixel &pedhist = (*fPedestals)(fBlindPixelId);
     662              pedestal    = pedhist.GetChargeMean()*nslices;
     663              pederr      = pedhist.GetChargeMeanErr()*nslices;
     664              //
     665              // Fitted sigma: 1. one sqrt(Nr. slices) for the division which is not
     666              //                  not appropriate: sigma(real)/slice = GetSigma*sqrt(nslices)
     667              //               2. another sqrt(Nr. slices) to calculate back to number
     668              //                  of slices
     669              //
     670              pedsigma    = pedhist.GetChargeSigma()*nslices;
     671              pedsigmaerr = pedhist.GetChargeSigmaErr()*nslices;
     672            }
     673          else
     674            {
     675              MPedestalPix    &pedpix  = (*fPedestals)[fBlindPixelId];
     676              pedestal    = pedpix.GetPedestal()*nslices;
     677              pederr      = pedpix.GetPedestalRms()*nslices/nentries;
     678              pedsigma    = pedpix.GetPedestalRms()*sqrslice;
     679              pedsigmaerr = pederr/2.;
     680            }
    602681          //
    603682          // retrieve the histogram containers
    604683          //
    605684          MHCalibrationBlindPixel *hist = blindpixel.GetHist();
    606           //
    607           // Set the corresponding values
    608           //
    609           const Float_t nslices     = (Float_t)(fgBlindPixelLast-fgBlindPixelFirst+1);
    610           const Float_t sqrslice    = TMath::Sqrt(nslices);
    611           const ULong_t nentries    = fPedestals->GetTotalEntries();
    612          
    613           const Float_t peddiff     = (pedhist.GetChargeMean()-pedpix.GetPedestal())*nslices;
    614 
    615           Float_t pederr  = pedhist.GetChargeMeanErr()*pedhist.GetChargeMeanErr();
    616           pederr         += pedpix.GetPedestalRms()*pedpix.GetPedestalRms()/nentries;
    617           pederr          = TMath::Sqrt(pederr)*sqrslice;
    618          
    619           //
    620           // Fitted sigma: 1. one sqrt(Nr. slices) for the division which is not
    621           //                  not appropriate: sigma(real)/slice = GetSigma*sqrt(nslices)
    622           //               2. another sqrt(Nr. slices) to calculate back to number
    623           //                  of slices
    624           //
    625           const Float_t pedsigma    = pedhist.GetChargeSigma()*nslices;
    626           const Float_t pedsigmaerr = pedhist.GetChargeSigmaErr()*nslices;
    627          
    628           hist->SetMeanPedestal(peddiff);
     685
     686          hist->SetMeanPedestal(pedestal);
    629687          hist->SetMeanPedestalErr(pederr);
    630688          hist->SetSigmaPedestal(pedsigma);
     
    724782
    725783
    726 Bool_t MCalibrationCalc::CalcSignalBlindPixel(Byte_t *ptr, Float_t &signal, const Float_t ped) const
    727 {
    728 
    729   Byte_t *start = ptr + fgBlindPixelFirst-1;
    730   Byte_t *end   = ptr + fgBlindPixelLast;
     784Bool_t MCalibrationCalc::CalcSignalBlindPixel(Byte_t *ptr, Float_t &signal) const
     785{
     786
     787  Byte_t *newptr  = ptr;
     788  Byte_t *start   = ptr + fBlindPixelFirst-1;
     789  Byte_t *end     = ptr + fBlindPixelLast;
     790  Byte_t nsamples = fBlindPixelLast-fgBlindPixelFirst+1;
    731791
    732792  Byte_t sum = 0;
    733793  Int_t  sat = 0;
    734794 
    735   ptr = start;
     795  newptr = start;
    736796
    737797  while (ptr<end)
     
    739799      sum += *ptr;
    740800      if (*ptr++ >= fgSaturationLimit)
    741             sat++;
     801        sat++;
    742802    }
    743803
     
    746806      *fLog << err << "HI Gain Saturation occurred in the blind pixel! "
    747807            << " Do not know yet how to treat this ... aborting " << endl;
     808      *fLog << err << "If you need absolutely any other kind of calibration, "
     809            << " use SkipBlindPixelFit() " << endl;
    748810      return kFALSE;
    749811    }
    750812
    751   signal = (Float_t)sum - ped*(Float_t)(fgBlindPixelLast-fgBlindPixelFirst+1);
     813  signal = (Float_t)sum;
    752814
    753815  return kTRUE;
  • trunk/MagicSoft/Mars/mcalib/MCalibrationCalc.h

    r3084 r3106  
    5353  MTime                    *fEvtTime;      // Time of the event
    5454
    55   Int_t fEvents;                           // Number of events 
    56  
    5755  Byte_t fNumHiGainSamples;
    5856  Byte_t fNumLoGainSamples;
    5957  Float_t fSqrtHiGainSamples;
     58 
     59  Byte_t fBlindPixelFirst;
     60  Byte_t fBlindPixelLast;
    6061 
    6162  Float_t fConversionHiLo;
     
    6970          kHiLoGainCalibration,
    7071          kHiGainOverFlow, kLoGainOverFlow  };
    71 
     72 
    7273public:
    7374 
     
    8384  Int_t PostProcess();
    8485
    85   Bool_t CalcSignalBlindPixel(Byte_t *ptr, Float_t &signal, const Float_t ped) const; 
     86  Bool_t CalcSignalBlindPixel(Byte_t *ptr, Float_t &signal) const; 
    8687 
    8788public:
     
    105106  void SetConversionHiLo(Float_t conv)         { fConversionHiLo = conv; }
    106107
     108  void SetBlindPixelRange(Byte_t first=fgBlindPixelFirst, Byte_t last=fgBlindPixelLast);
     109
    107110  // Getters
    108111  MCalibrationBlindPix *GetBlindPixel() const;
Note: See TracChangeset for help on using the changeset viewer.