+/**
+ * @file MAPS.c
+ * @brief Use brief, otherwise the index won't have a brief explanation.
+ *
+ * Detailed explanation.
+ *
+ *
+ */
+
#include"MAPS.h"
#include "Run.h"
} sleep(1); // TODO test if removable
-
if ( checkConf(fPixelsData) ) // TODO FileEvNbInConfig
{
//-----------------------------------------------
fRootFile = fInDir+Form("/RUN_%i_i.root",fRunNumber);
cout<<"================================================================="<<endl;
- cout<<"-----------------------"<<endl;
+ cout<<"-----------------------" << endl;
cout<<" == Initiate MAPS() ... == "<<endl;
cout<<"-----------------------"<<endl;
cout<<" Input Directory : "<<fInDir<<endl;
cout<<" Ordering according to : "<<fOrderCode<<endl;
cout<<" Save/Overwrite data : "<<fSave<<endl;
cout<<" System specified : "<<fSystem<<endl;
+ cout<<" Dynamic noise calc : ";
+ if (useexponentialdecayingnoisewindow)
+ cout << "Modified moving average (MMA)" << endl;
+ else
+ cout << "Simple moving average (SMA)" << endl;
//-----------------------------------------------
unsigned short int vi,vj;
fF0matrix [i] = value1 [(UChar_t)RAWDATA[4*i+1]] [(UChar_t)RAWDATA[4*i+2]];
fF1matrix [i] = value2 [(UChar_t)RAWDATA[4*i]] [(UChar_t)RAWDATA[4*i+1]];
}
-
fCdsmatrix [i] = fF0matrix[i] - fF1matrix[i];
}
//==========================================================================
{
fPedestals[pixeli] /= frames;
}
-// cout << "Pedestials, first estimate: ";
-// debugStream(fPedestals, fPixels, fColumns, 3);
// sum up over all frames every variance from the pedestial, pixelwise
for(Int_t framei=startframe; framei<frames+startframe; framei++)
fNoise[pixeli] += TMath::Power(1.*fCdsmatrix[pixeli]-fPedestals[pixeli],2);
}
}
-// cout << endl << endl;
- // calculate average noise of each pixel
for(Int_t pixeli=0; pixeli<fPixels; pixeli++)
{
fNoise[pixeli] = TMath::Sqrt(fNoise[pixeli]/(frames-1)); // Standard deviation is defined with n-1
}
-// cout << "Noise, first estimate: ";
-// debugStream(fNoise, fPixels, fColumns, 3);
// second estimate
// cut away pixels with cds - Pedestals > 5 * sigma
for(Int_t framei=startframe; framei<frames+startframe; framei++)
{
getFrame(framei);
- if (framei==0)
- debugStream(fCdsmatrix, fPixels, fColumns, 2);
for(Int_t pixeli=0; pixeli<fPixels; pixeli++)
{
if (abs(1.*(fCdsmatrix[pixeli]-pixelpedestal2[pixeli])) < 5.*pixelnoise2[pixeli])
{
fPedestals[pixeli] += fCdsmatrix[pixeli];
-// if (pixeli==0)
-// cout << fCdsmatrix[pixeli] << " ";
- noiselastframes[pixeli].push(fCdsmatrix[pixeli]);
+ if (!useexponentialdecayingnoisewindow)
+ noiselastframes[pixeli].push(fCdsmatrix[pixeli]);
}
else
{
}
}
}
-// cout << noiselastframes[0].front() << endl;
-// cout << noiselastframes[0].size() << endl;
- // calculate average pedestal of each pixel
for(Int_t pixeli=0; pixeli<fPixels; pixeli++)
{
fPedestals[pixeli] /= (frames-nframescutawaythirdnoiseestimate[pixeli]);
-// fPedestals[pixeli] = 0;
}
// sum up over all frames every variance from the pedestial, pixelwise
//####################################################################
-bool MAPS::regetDynNoise(Int_t Frames) {
-
+bool MAPS::regetDynNoise(Int_t Frames) {
for(Int_t pixeli=0; pixeli<fPixels; pixeli++)
{
if (fHittedPixel[fColumns]==0)
{
- fNoise[pixeli]-=(TMath::Power(noiselastframes[pixeli].front()-fPedestals[pixeli],2)-TMath::Power(fCdsmatrix[pixeli]-fPedestals[pixeli],2))/(noiselastframes[pixeli].size()-1);
- fPedestals[pixeli] -= (noiselastframes[pixeli].front()-fCdsmatrix[pixeli])/noiselastframes[pixeli].size();
-// fPedestals[pixeli] = ( (Frames-1)*fPedestals[pixeli] + fCdsmatrix[pixeli] )/Frames;
-// if (pixeli==0*fColumns && fFrameNumber%10000==0)
-// {
-// cout << "( 99 * " << fPedestals[pixeli] << " + " << fCdsmatrix[pixeli] << " )/ " << Frames << endl;
-// }
-// cout << fPedestals[pixeli] << " " <<endl;
- // fNoise[pixeli]= ( (Frames-1)*fNoise[pixeli] + TMath::Power(1.*fCdsmatrix[pixeli]-fPedestals[pixeli],2) )/(Frames);
-// if (pixeli==0)
-// cout << noiselastframes[pixeli].front() << " " ;
- noiselastframes[pixeli].pop();
- noiselastframes[pixeli].push(fCdsmatrix[pixeli]);
-
+ if (useexponentialdecayingnoisewindow)
+ {
+ fNoise[pixeli] = ( (Frames-1)*fNoise[pixeli] + TMath::Power(1.*fCdsmatrix[pixeli]-fPedestals[pixeli],2) )/(Frames);
+ fPedestals[pixeli] = ( (Frames-1)*fPedestals[pixeli] + fCdsmatrix[pixeli] )/Frames;
+ }
+ else
+ {
+ fNoise[pixeli] -= (TMath::Power(noiselastframes[pixeli].front()-fPedestals[pixeli],2)-TMath::Power(fCdsmatrix[pixeli]-fPedestals[pixeli],2))/(noiselastframes[pixeli].size()-1);
+ fPedestals[pixeli] -= (noiselastframes[pixeli].front()-fCdsmatrix[pixeli])/noiselastframes[pixeli].size();
+ noiselastframes[pixeli].pop();
+ noiselastframes[pixeli].push(fCdsmatrix[pixeli]);
+ }
}
else
{
{
fNoiseMean = TMath::Mean((const int)fPixels, fNoise);
fPedestalsMean = TMath::Mean((const int)fPixels, fPedestals);
-
fDynNoiseTree->Fill();
}
}
}
- if ( fFrameNumber%10000==0)
- {
- debugStream<>(fPedestals, fPixels, fColumns, 2);
- }
+// debug
+// if ( fFrameNumber%10000==0)
+// {
+// debugStream<>(fPedestals, fPixels, fColumns, 2);
+// }
return true;
}
}
}
}
+// debug
// for(Int_t row=0; row<5; row++)
// {
// for(Int_t column=0; column<5; column++)
for(int column=0; column<fColumns; column++ )
{
-// Arr[column] = fCdsmatrix[ row*fColumns+column ];
Arr[column] = fCdsmatrix[ row*fColumns+column ] - fPedestals[ row*fColumns+column ]; // Bugfix: Considered pedestals in common mode calculation
}
else
minus++;
-// if (row==0 && fFrameNumber%10000==0)
-// {
-// cout << endl;
-// for(int column=0; column<fColumns; column++ )
-// cout << Arr[column] << endl;
-// cout << endl << " --> " << CommonModeInRow << endl;
-// }
-
if(TMath::Abs(CommonModeInRow)>20) // TODO better warning criteria
{
warning = true;
fCdsmatrix[ row*fColumns+column ] -= CommonModeInRow;
}
}
- if ( fFrameNumber%10000==0)
- {
- debugStream<>(fPedestals, fPixels, fColumns, 2);
- }
+// if ( fFrameNumber%10000==0)
+// {
+// debugStream<>(fPedestals, fPixels, fColumns, 2);
+// }
}
//####################################################################