Index: /trunk/MagicSoft/Mars/Changelog
===================================================================
--- /trunk/MagicSoft/Mars/Changelog	(revision 3124)
+++ /trunk/MagicSoft/Mars/Changelog	(revision 3125)
@@ -33,4 +33,7 @@
        variable: MCalibrationCalc::fBlindPixelSinglePheCut, to be set 
        with a setter 
+
+   * mtools/MFFT.[h,cc]
+     - PowerSpectrumDensity of TArrayI implemented
 
 
Index: /trunk/MagicSoft/Mars/mcalib/MHCalibrationBlindPixel.cc
===================================================================
--- /trunk/MagicSoft/Mars/mcalib/MHCalibrationBlindPixel.cc	(revision 3124)
+++ /trunk/MagicSoft/Mars/mcalib/MHCalibrationBlindPixel.cc	(revision 3125)
@@ -687,4 +687,7 @@
 {
   
+  *fLog << err << "min: " << min << endl;
+  *fLog << err << "max: " << max << endl;  
+
   //
   // First guesses for the fit (should be as close to reality as possible, 
@@ -692,5 +695,5 @@
   //
   const Stat_t   entries      = fHBlindPixelCharge->Integral("width");
-  const Double_t lambda_guess = 0.5;
+  const Double_t lambda_guess = 0.1;
   const Double_t maximum_bin  = fHBlindPixelCharge->GetBinCenter(fHBlindPixelCharge->GetMaximumBin());
   const Double_t norm         = entries/gkSq2Pi;
@@ -740,4 +743,7 @@
   const Double_t electronicAmp_limit  = fgBlindPixelElectronicAmpError;
 
+  *fLog << err << "pedestal: " << fMeanPedestal << endl;
+  *fLog << err << "sigma: "    << fSigmaPedestal << endl;  
+
   //
   // Initialize boundaries and start parameters
@@ -754,24 +760,24 @@
       fSinglePheFit->SetParNames("#lambda","#mu_{0}","#mu_{1}","#sigma_{0}","#sigma_{1}","Area");
 
-      fSinglePheFit->SetParLimits(0,0.,1.);
+      fSinglePheFit->SetParLimits(0,0.,0.5);
 
       if ((fMeanPedestal) && (fSigmaPedestal))
         fSinglePheFit->SetParLimits(1,
-                                    fMeanPedestal-1.*fMeanPedestalErr,
-                                    fMeanPedestal+1.*fMeanPedestalErr);
+                                    fMeanPedestal-5.*fMeanPedestalErr,
+                                    fMeanPedestal+5.*fMeanPedestalErr);
       else
         fSinglePheFit->SetParLimits(1,-3.,0.);
 
-      fSinglePheFit->SetParLimits(2,(max-min)/2.,max);
+      fSinglePheFit->SetParLimits(2,min,max);
 
       if ((fMeanPedestal) && (fSigmaPedestal))
         fSinglePheFit->SetParLimits(3,
-                                    fSigmaPedestal-3.*fSigmaPedestalErr,
-                                    fSigmaPedestal+3.*fSigmaPedestalErr);
+                                    fSigmaPedestal-5.*fSigmaPedestalErr,
+                                    fSigmaPedestal+5.*fSigmaPedestalErr);
       else
         fSinglePheFit->SetParLimits(3,1.0,(max-min)/2.0);
 
-      fSinglePheFit->SetParLimits(4,1.0,(max-min));
-      fSinglePheFit->SetParLimits(5,norm-0.5,norm+0.5);
+      fSinglePheFit->SetParLimits(4,0.,(max-min));
+      fSinglePheFit->SetParLimits(5,norm-(0.5*norm),norm+(0.5*norm));
       break;
     case kEPoisson5:
@@ -894,5 +900,4 @@
   rmin = (rmin != 0.) ? rmin : fBlindPixelChargefirst;
   rmax = (rmax != 0.) ? rmax : fBlindPixelChargelast;
-
   if (!InitFit(rmin,rmax))
     return kFALSE;
@@ -956,5 +961,5 @@
 {
 
-  Int_t nbins = 30;
+  Int_t nbins = 25;
 
   CutEdges(fHBlindPixelCharge,nbins);
@@ -1002,2 +1007,3 @@
 
 }
+
Index: /trunk/MagicSoft/Mars/mtools/MFFT.cc
===================================================================
--- /trunk/MagicSoft/Mars/mtools/MFFT.cc	(revision 3124)
+++ /trunk/MagicSoft/Mars/mtools/MFFT.cc	(revision 3125)
@@ -700,4 +700,56 @@
 
 
+//
+// Power Spectrum Density calculation for TArrayI
+//
+TArrayF* MFFT::PowerSpectrumDensity(const TArrayI *array)
+{
+
+  fDim = array->GetSize();
+  CheckDim(fDim);
+
+  fDataF.Set(fDim);
+  //
+  // Copy the hist into an array
+  //
+  for (Int_t i=0;i<fDim;i++)
+    fDataF[i] = (Float_t)array->At(i);
+
+  RealFTF(1);
+
+  const Int_t dim2  = fDim*fDim;
+  const Int_t dim05 = fDim/2;
+  Float_t c02;
+  Float_t ck2;
+  Float_t cn2;
+  
+  TArrayF *newarray = new TArrayF(dim05);
+
+  //
+  // Fill the new histogram: 
+  //
+  // 1) P(0) = 1/(N*N) |C(0)|*|C(0)|
+  //
+  c02 = (fDataF[0]*fDataF[0]);
+  //  newarray->AddAt(c02/dim2,0);
+  //
+  // 2) P(k) = 1/(N*N) (|C(k)|*|C(k)|))
+  //
+  for (Int_t k=1;k<dim05-1;k++)
+    {
+      const Int_t k2 = k+k;
+      ck2 = (fDataF[k2]*fDataF[k2] + fDataF[k2+1]*fDataF[k2+1]);
+      newarray->AddAt(ck2/dim2,k);
+    }
+  //
+  // 3) P(N) = 1/(N*N) (|C(n/2)|*|C(n/2)|)
+  //
+  cn2 = (fDataF[1]*fDataF[1]);
+  //  newarray->AddAt(cn2,dim05-1);
+  
+  return newarray;
+}
+
+
 TArrayD* MFFT::PowerSpectrumDensity(const TArrayD *array)
 {
Index: /trunk/MagicSoft/Mars/mtools/MFFT.h
===================================================================
--- /trunk/MagicSoft/Mars/mtools/MFFT.h	(revision 3124)
+++ /trunk/MagicSoft/Mars/mtools/MFFT.h	(revision 3125)
@@ -74,4 +74,5 @@
   TH1D* PowerSpectrumDensity(const TH1D *hist);
 
+  TArrayF* PowerSpectrumDensity(const TArrayI *array);  
   TArrayF* PowerSpectrumDensity(const TArrayF *array);
   TArrayD* PowerSpectrumDensity(const TArrayD *array);
