Changeset 3081


Ignore:
Timestamp:
02/10/04 16:10:52 (21 years ago)
Author:
gaug
Message:
*** empty log message ***
Location:
trunk/MagicSoft/Mars
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/MagicSoft/Mars/Changelog

    r3080 r3081  
    88  * mcalib/MCalibrationCam.cc
    99    - fixed documentation
     10
     11  * mhbase/MH.[h,cc]
     12    - new function ProjectArray
     13
     14  * mcalib/MHCalibrationPixel.[h,cc]
     15  * mcalib/MHCalibrationBlindPixel.[h,cc]
     16    - use ProjectArray from MH to plot the projection of the fourier
     17      spectrum
    1018
    1119
  • trunk/MagicSoft/Mars/mcalib/MHCalibrationBlindPixel.cc

    r3075 r3081  
    8888const Double_t MHCalibrationBlindPixel::fgBlindPixelElectronicAmpError = 0.002;
    8989 
    90 const Axis_t  MHCalibrationBlindPixel::fNyquistFreq       = 1.0;
    91 const Axis_t  MHCalibrationBlindPixel::fMinFreq           = 0.;
    9290const Int_t   MHCalibrationBlindPixel::fPSDNbins          = 30;
    9391 
     
    266264  fPSDHiGain = fourier.PowerSpectrumDensity(fHiGains);
    267265
    268   Int_t entries;
    269   TArrayF *array;
    270  
    271   fHPSD = new TH1F("HBlindPixelPSD",
    272                    "Power Spectrum Density Projection Blind Pixel",
    273                    fPSDNbins,fMinFreq,fNyquistFreq);
    274 
    275   array   = fPSDHiGain;
    276   entries = array->GetSize();
    277  
    278   for (Int_t i=0;i<entries;i++)
    279     fHPSD->Fill(array->At(i));
    280 
     266  fHPSD = MH::ProjectArray(fPSDHiGain, fPSDNbins,
     267                           "PSDProjectionBlindPixel",
     268                           "Power Spectrum Density Projection HiGain Blind Pixel");
    281269  //
    282270  // First guesses for the fit (should be as close to reality as possible,
    283271  //
    284   const Double_t area_guess  = entries*10.;
    285 
    286   fPSDExpFit = new TF1("PSDExpFit","[0]*exp(-[1]*x)",0.,1.);
    287 
    288   fPSDExpFit->SetParameters(entries,10.);
    289   fPSDExpFit->SetParNames("Area","slope");
    290   fPSDExpFit->SetParLimits(0,0.,3.*area_guess);
    291   fPSDExpFit->SetParLimits(1,0.,20.);
    292   fPSDExpFit->SetRange(fMinFreq,fNyquistFreq);
     272  const Double_t xmax = fHPSD->GetXaxis()->GetXmax();
     273
     274  fPSDExpFit = new TF1("PSDExpFit","exp([0]-[1]*x)",0.,xmax);
     275
     276  const Double_t slope_guess = (TMath::Log(fHPSD->GetEntries())+1.)/xmax;
     277  const Double_t offset_guess = slope_guess*xmax;
     278
     279  fPSDExpFit->SetParameters(offset_guess, slope_guess);
     280  fPSDExpFit->SetParNames("Offset","Slope");
     281  fPSDExpFit->SetParLimits(0,offset_guess/2.,2.*offset_guess);
     282  fPSDExpFit->SetParLimits(1,slope_guess/2.,2.*slope_guess);
     283  fPSDExpFit->SetRange(0.,xmax);
    293284
    294285  fHPSD->Fit(fPSDExpFit,"RQL0");
  • trunk/MagicSoft/Mars/mcalib/MHCalibrationBlindPixel.h

    r3061 r3081  
    2525  static const Double_t fgBlindPixelElectronicAmpError;
    2626
    27   static const Axis_t  fNyquistFreq;
    28   static const Axis_t  fMinFreq;
    2927  static const Int_t   fPSDNbins;
    3028 
     
    4038  TArrayF* fPSDLoGain;           //-> Power spectrum density of fLoGains
    4139
    42   TH1F* fHPSD;                   //->
     40  TH1I* fHPSD;                   //->
    4341  TF1*  fPSDExpFit;              //->
    4442 
  • trunk/MagicSoft/Mars/mcalib/MHCalibrationPixel.cc

    r3075 r3081  
    6161const Int_t   MHCalibrationPixel::fNDFLimit          = 5;
    6262
    63 const Axis_t  MHCalibrationPixel::fMinFreq           = 0.;
    64 const Int_t   MHCalibrationPixel::fPSDNbins          = 50;
     63const Int_t   MHCalibrationPixel::fPSDNbins          = 30;
    6564 
    6665// --------------------------------------------------------------------------
     
    268267  fPSDHiGain = fourier.PowerSpectrumDensity(fHiGains);
    269268
    270   Int_t entries;
    271   TArrayF *array;
    272 
    273   const Double_t max_freq = (fChargeSigma > 0.) ? fChargeSigma*0.2 : 2.;
    274   const Double_t min_freq = 0.;
    275 
    276269  if (IsUseLoGain())
    277     {
    278       fHPSD = new TH1F(Form("%s%d","HPSD",fPixId),
    279                        Form("%s%s","Power Spectrum Density Projection ","LoGain"),
    280                        fPSDNbins,min_freq,max_freq);
    281      
    282       array = fPSDLoGain;
    283     }
     270    fHPSD = MH::ProjectArray(fPSDLoGain, fPSDNbins,
     271                             Form("%s%d","PSDProjection",fPixId),
     272                             Form("%s%d","Power Spectrum Density Projection LoGain ",fPixId));
    284273  else
    285     {
    286 
    287       fHPSD = new TH1F(Form("%s%d","HPSD",fPixId),
    288                        Form("%s%s","Power Spectrum Density Projection ","HiGain"),
    289                        fPSDNbins,min_freq,max_freq);
    290      
    291       array = fPSDHiGain;
    292     }
    293  
    294   entries = array->GetSize();
    295  
    296   for (Int_t i=0;i<entries;i++)
    297     fHPSD->Fill(array->At(i));
     274    fHPSD = MH::ProjectArray(fPSDHiGain, fPSDNbins,
     275                             Form("%s%d","PSDProjection",fPixId),
     276                             Form("%s%d","Power Spectrum Density Projection HiGain ",fPixId));
    298277
    299278  //
    300279  // First guesses for the fit (should be as close to reality as possible,
    301280  //
    302   const Double_t area_guess  = entries*10.;
    303 
    304   fPSDExpFit = new TF1(Form("%s%d","PSDExpFit",fPixId),"[0]*exp(-[1]*x)",0.,1.);
    305 
    306   fPSDExpFit->SetParameters(area_guess,10.);
    307   fPSDExpFit->SetParNames("Area","slope");
    308   fPSDExpFit->SetParLimits(0,0.,20.*area_guess);
    309   fPSDExpFit->SetParLimits(1,0.,30.);
    310   fPSDExpFit->SetRange(min_freq,max_freq);
     281  const Double_t xmax = fHPSD->GetXaxis()->GetXmax();
     282
     283  fPSDExpFit = new TF1(Form("%s%d","PSDExpFit",fPixId),"exp([0]-[1]*x)",0.,xmax);
     284
     285  const Double_t slope_guess  = (TMath::Log(fHPSD->GetEntries())+1.)/xmax;
     286  const Double_t offset_guess = slope_guess*xmax;
     287
     288  fPSDExpFit->SetParameters(offset_guess, slope_guess);
     289  fPSDExpFit->SetParNames("Offset","Slope");
     290  fPSDExpFit->SetParLimits(0,offset_guess/2.,2.*offset_guess);
     291  fPSDExpFit->SetParLimits(1,slope_guess/2.,2.*slope_guess);
     292  fPSDExpFit->SetRange(0.,xmax);
    311293
    312294  fHPSD->Fit(fPSDExpFit,"RQL0");
  • trunk/MagicSoft/Mars/mcalib/MHCalibrationPixel.h

    r3075 r3081  
    2626  static const Int_t   fNDFLimit; 
    2727
    28   static const Axis_t  fMinFreq;
    2928  static const Int_t   fPSDNbins;
    3029 
     
    4948  TF1* fChargeGausFit;           //->
    5049
    51   TH1F* fHPSD;                   //->
     50  TH1I* fHPSD;                   //->
    5251  TF1*  fPSDExpFit;              //->
    5352 
  • trunk/MagicSoft/Mars/mhbase/MH.cc

    r2858 r3081  
    10811081    return NULL;
    10821082}
     1083
     1084TH1I* MH::ProjectArray(const TArrayF *array, Int_t nbins, const char* name, const char* title)
     1085{
     1086
     1087  const Int_t size  = array->GetSize();
     1088  TH1I *h1=0;
     1089
     1090  //check if histogram with identical name exist
     1091  TObject *h1obj = gROOT->FindObject(name);
     1092  if (h1obj && h1obj->InheritsFrom("TH1I")) {
     1093    h1 = (TH1I*)h1obj;
     1094    h1->Reset();
     1095  }
     1096
     1097  Double_t max = 0.;
     1098  Double_t min = 0.;
     1099  Int_t newbins = 0;
     1100
     1101  // first loop over array to find the maximum:
     1102  for (Int_t i=0; i<size;i++)
     1103    if (array->At(i) > max)
     1104      max = array->At(i);
     1105
     1106  FindGoodLimits(nbins, newbins, min, max, kFALSE);
     1107
     1108  if (!h1)
     1109    {
     1110      h1 = new TH1I(name, title, newbins, min, max);
     1111      h1->SetXTitle("");
     1112      h1->SetYTitle("Counts");
     1113      h1->SetDirectory(NULL);
     1114    }
     1115 
     1116    // Second loop to fill the histogram
     1117    for (Int_t i=0;i<size;i++)
     1118      h1->Fill(array->At(i));
     1119
     1120    h1->SetEntries(size);
     1121   
     1122    return h1;
     1123}
     1124
     1125TH1I* MH::ProjectArray(const TArrayD *array, Int_t nbins, const char* name, const char* title)
     1126{
     1127
     1128  const Int_t size  = array->GetSize();
     1129 
     1130  TH1I *h1=0;
     1131
     1132  //check if histogram with identical name exist
     1133  TObject *h1obj = gROOT->FindObject(name);
     1134  if (h1obj && h1obj->InheritsFrom("TH1I")) {
     1135    h1 = (TH1I*)h1obj;
     1136    h1->Reset();
     1137  }
     1138
     1139  Double_t max = 0.;
     1140  Double_t min = 0.;
     1141  Int_t newbins = 0;
     1142
     1143  // first loop over array to find the maximum:
     1144  for (Int_t i=0; i<size;i++)
     1145    if (array->At(i) > max)
     1146      max = array->At(i);
     1147
     1148  FindGoodLimits( nbins, newbins, min, max, kFALSE);
     1149
     1150  if (!h1)
     1151    {
     1152      h1 = new TH1I(name, title, newbins, min, max);
     1153      h1->SetXTitle("");
     1154      h1->SetYTitle("Counts");
     1155      h1->SetDirectory(NULL);
     1156    }
     1157 
     1158    // Second loop to fill the histogram
     1159    for (Int_t i=0;i<size;i++)
     1160      h1->Fill(array->At(i));
     1161
     1162    h1->SetEntries(size);
     1163   
     1164    return h1;
     1165}
     1166
  • trunk/MagicSoft/Mars/mhbase/MH.h

    r2735 r3081  
    77
    88class TH1;
     9class TH1I;
    910class TH1D;
    1011class TH2;
    1112class TH3;
    1213class TAxis;
     14class TArrayF;
    1315class TArrayD;
    1416class TCanvas;
     
    8991    static Double_t GetMinimumGT(const TH1 &h, Double_t gt=0);
    9092    static Int_t CutEdges(TH1 *h, Int_t nbins);
     93
     94    static TH1I* ProjectArray(const TArrayF *array, Int_t nbins=30, const char* name="ProjectArray",
     95                                                              const char* title="Projected Array");
     96    static TH1I* ProjectArray(const TArrayD *array, Int_t nbins=30, const char* name="ProjectArray",
     97                                                              const char* title="Projected Array");
    9198   
    9299    static void ProjectionX(TH1D &dest, const TH2 &src, Int_t firstybin=-1, Int_t lastybin=9999);
Note: See TracChangeset for help on using the changeset viewer.