}
// Noise TTree
fNoiseTree = new TTree("noise", "noise");
- fDynNoiseTree = fNoiseTree;
-
+ fNoiseTree->Branch("frame" , &fFrameInfo.frame , "frame/i" , 32000);
+ fNoiseTree->Branch("noise" , &(fNoiseInfo.fNoise) , "noise/F" , 32000);
+ fNoiseTree->Branch("pedestal" , &(fNoiseInfo.fPedestals) , "pedestal/F" , 32000);
+
initHistograms();
cout<<"-----------------------"<<endl;
cout<<fRootFile<<" recreated!"<<endl;
for(int i=0; i<25; i++) {
fHitTree->SetBranchAddress( Form("p%i",i+1) , &fFrameInfo.p[i][0]);
}
+ // Noise TTree
fNoiseTree = (TTree*) fOutputFile->Get("noise");
if (!fNoiseTree) // got pointer
{
cout<< colorred << "Error finding noise TTree in old ROOT file!"<< endlr;
return 1;
}
- fDynNoiseTree = fNoiseTree;
+ fNoiseTree->SetBranchAddress("frame" , &fFrameInfo.frame);
+ fNoiseTree->SetBranchAddress("noise" , &(fNoiseInfo.fNoise));
+ fNoiseTree->SetBranchAddress("pedestal" , &(fNoiseInfo.fPedestals));
+
initHistograms();
cout<<"-----------------------"<<endl;
cout<<fRootFile<<" opened!"<<endl;
fHitTree->Write("",TObject::kOverwrite);
fNoiseTree->Write("",TObject::kOverwrite);
- fDynNoiseTree->Write("",TObject::kOverwrite);
hint1->Write("",TObject::kOverwrite);
hint2->Write("",TObject::kOverwrite);
delete[] fF0matrix;
delete[] fF1matrix;
delete[] fCdsmatrix;
- delete[] fNoise;
- delete[] fPedestals;
cout<< colorwhite <<"================================================================="<<endlr;
};
fHitTree->Write("",TObject::kOverwrite);
fNoiseTree->Write("",TObject::kOverwrite);
- fDynNoiseTree->Write("",TObject::kOverwrite);
hint1->Write("",TObject::kOverwrite);
hint2->Write("",TObject::kOverwrite);
fF0matrix = new Int_t [fPixelsData]();
fF1matrix = new Int_t [fPixelsData]();
fCdsmatrix = new Float_t [fPixelsData]();
- fNoise = new Float_t [fPixelsData]();
- fPedestals = new Float_t [fPixelsData]();
+ fNoiseInfo.fNoise = new Float_t [fPixelsData]();
+ fNoiseInfo.fPedestals = new Float_t [fPixelsData]();
fHittedPixel= new Int_t [fPixelsData]();
//-----------------------------------------------
return true;
fF0matrix = new Int_t [fPixelsData]();
fF1matrix = new Int_t [fPixelsData]();
fCdsmatrix = new Float_t [fPixelsData]();
- fNoise = new Float_t [fPixelsData]();
- fPedestals = new Float_t [fPixelsData]();
+ fNoiseInfo.fNoise = new Float_t [fPixelsData]();
+ fNoiseInfo.fPedestals = new Float_t [fPixelsData]();
fHittedPixel= new Int_t [fPixelsData]();
//-----------------------------------------------
return true;
//####################################################################
bool MAPS::getNoise(UInt_t Start, UInt_t Frames) {
-//Noise + Pedestals
-if(fOk)
-{
- cout<<"Run getNoise() ..."<<endl;
- //Check amount of Frames
- if(Frames<50)
- {
- cout<<"Too few Frames! Change Frames from "<<Frames<<" to ";
- Frames = 50;
- cout<<Frames<<" !"<<endl;
- }
- //Check availabilty of Frames
- if( Frames > fEventsSum ) {
- Frames = fEventsSum;
- printf("Changed 'Number Frames' to: %u\n", Frames );
- }
- if( Frames+Start > fEventsSum ) {
- Start = fEventsSum-Frames;
- printf("Changed 'First Event' to: %u\n", Start );
- }
- // Get fPixels and allocate array
- Float_t *ARR = new Float_t[Frames*fPixels];
- Float_t PEDESTAL;
- Float_t NOISE;
- Int_t PIXEL;
-
- for(UInt_t i=Start; i<Frames+Start; i++)
+ //Noise + Pedestals
+ if(fOk)
{
- getFrame(i);
-
- for(Int_t j=0; j<fPixels; j++)
+ cout<<"Run getNoise() ..."<<endl;
+ //Check amount of Frames
+ if(Frames<50)
{
- ARR[(i-Start)*fPixels+j] = fCdsmatrix[j];
+ cout<<"Too few Frames! Change Frames from "<<Frames<<" to ";
+ Frames = 50;
+ cout<<Frames<<" !"<<endl;
}
- }
-
-
- if(fSave)
- {
- fNoiseTree->Reset();
- fNoiseTree->Branch("pixel" , &PIXEL , "pixel/i" , 32000);
- fNoiseTree->Branch("noise" , &NOISE , "noise/F" , 32000);
- fNoiseTree->Branch("pedestal" , &PEDESTAL , "pedestal/F" , 32000);
- }
-
- for(Int_t i=0; i<fPixels; i++)
- {
- PEDESTAL = 0;
- NOISE = 0;
+ //Check availabilty of Frames
+ if( Frames > fEventsSum ) {
+ Frames = fEventsSum;
+ printf("Changed 'Number Frames' to: %u\n", Frames );
+ }
+ if( Frames+Start > fEventsSum ) {
+ Start = fEventsSum-Frames;
+ printf("Changed 'First Event' to: %u\n", Start );
+ }
+ // Get fPixels and allocate array
+ Float_t *ARR = new Float_t[Frames*fPixels];
+ Float_t PEDESTAL;
+ Float_t NOISE;
+ Int_t PIXEL;
- for(UInt_t j=0; j<Frames; j++)
+ for(UInt_t i=Start; i<Frames+Start; i++)
{
- PEDESTAL+=ARR[j*fPixels+i];
+ getFrame(i);
+ for(Int_t j=0; j<fPixels; j++)
+ {
+ ARR[(i-Start)*fPixels+j] = fCdsmatrix[j];
+ }
}
- PEDESTAL = PEDESTAL/Frames;
- cout << colorcyan << "Pedestal :" << PEDESTAL << endlr;
- for(UInt_t j=0; j<Frames; j++)
+ for(Int_t i=0; i<fPixels; i++)
{
- NOISE+=TMath::Power(ARR[j*fPixels+i]-PEDESTAL,2);
+ PEDESTAL = 0;
+ NOISE = 0;
+
+ for(UInt_t j=0; j<Frames; j++)
+ {
+ PEDESTAL+=ARR[j*fPixels+i];
+ }
+
+ PEDESTAL = PEDESTAL/Frames;
+ cout << colorcyan << "Pedestal :" << PEDESTAL << endlr;
+
+ for(UInt_t j=0; j<Frames; j++)
+ {
+ NOISE+=TMath::Power(ARR[j*fPixels+i]-PEDESTAL,2);
+ }
+
+ NOISE = TMath::Sqrt(NOISE/(Frames-1));
+ cout << colorcyan << "NOISE :" << NOISE << endlr;
+
+ fNoiseInfo.fNoise[i] = NOISE;
+ fNoiseInfo.fPedestals[i] = PEDESTAL;
+
+ // if(fSave) {
+ // fNoiseTree->Fill();
+ // }
}
- NOISE = TMath::Sqrt(NOISE/(Frames-1));
- cout << colorcyan << "NOISE :" << NOISE << endlr;
-
- fNoise[i] = NOISE;
- fPedestals[i] = PEDESTAL;
- PIXEL = i;
+ cout<<"-----------------------"<<endl;
- if(fSave) {
- fNoiseTree->Fill();
- }
+ delete[] ARR;
+ fNoiseOk = true;
+ return true;
+ }
+ else
+ {
+ return false;
}
-
- cout<<"-----------------------"<<endl;
-
- delete[] ARR;
- fNoiseOk = true;
- return true;
-}
-else
-{
- return false;
-}
};
//####################################################################
Int_t* nframescutawaythirdnoiseestimate = new Int_t[fPixels]();
Int_t npixelscutawaythirdnoiseestimate=0;
-
-
-
// fDynNoiseTree->Branch("frame" , &fFrameNumber , "frame/i" , 32000);
// fDynNoiseTree->Branch("noise" , &fNoiseMean , "noise/F" , 32000);
// fDynNoiseTree->Branch("pedestal" , &fPedestalsMean , "pedestal/F" , 32000);
for(Int_t pixeli=0; pixeli<fPixels; pixeli++)
{
- fPedestals[pixeli] += fCdsmatrix[pixeli];
+ fNoiseInfo.fPedestals[pixeli] += fCdsmatrix[pixeli];
}
}
// calculate average pedestal of each pixel
for(Int_t pixeli=0; pixeli<fPixels; pixeli++)
{
- fPedestals[pixeli] /= frames;
+ fNoiseInfo.fPedestals[pixeli] /= frames;
}
// sum up over all frames every variance from the pedestial, pixelwise
getFrame(framei);
for(Int_t pixeli=0; pixeli<fPixels; pixeli++)
{
- fNoise[pixeli] += TMath::Power(1.*fCdsmatrix[pixeli]-fPedestals[pixeli],2);
+ fNoiseInfo.fNoise[pixeli] += TMath::Power(1.*fCdsmatrix[pixeli]-fNoiseInfo.fPedestals[pixeli],2);
}
}
for(Int_t pixeli=0; pixeli<fPixels; pixeli++)
{
- fNoise[pixeli] = TMath::Sqrt(fNoise[pixeli]/(frames-1)); // Standard deviation is defined with n-1
+ fNoiseInfo.fNoise[pixeli] = TMath::Sqrt(fNoiseInfo.fNoise[pixeli]/(frames-1)); // Standard deviation is defined with n-1
}
// second estimate
getFrame(framei);
for(Int_t pixeli=0; pixeli<fPixels; pixeli++)
{
- if (abs(1.*(fCdsmatrix[pixeli]-fPedestals[pixeli])) <= 5.*fNoise[pixeli])
+ if (abs(1.*(fCdsmatrix[pixeli]-fNoiseInfo.fPedestals[pixeli])) <= 5.*fNoiseInfo.fNoise[pixeli])
{
pixelpedestal2[pixeli] += fCdsmatrix[pixeli];
}
getFrame(framei);
for(Int_t pixeli=0; pixeli<fPixels; pixeli++)
{
- if (abs(1.*(fCdsmatrix[pixeli]-fPedestals[pixeli])) <= 5.*fNoise[pixeli])
+ if (abs(1.*(fCdsmatrix[pixeli]-fNoiseInfo.fPedestals[pixeli])) <= 5.*fNoiseInfo.fNoise[pixeli])
{
pixelnoise2[pixeli] += TMath::Power(1.*fCdsmatrix[pixeli]-pixelpedestal2[pixeli],2);
}
// reset noise and pedestal array
for(Int_t pixeli=0; pixeli<fPixels; pixeli++)
{
- fPedestals[pixeli]=0;
- fNoise[pixeli]=0;
+ fNoiseInfo.fPedestals[pixeli]=0;
+ fNoiseInfo.fNoise[pixeli]=0;
}
for(Int_t framei=startframe; framei<frames+startframe; framei++)
{
if (abs(1.*(fCdsmatrix[pixeli]-pixelpedestal2[pixeli])) <= 5.*pixelnoise2[pixeli])
{
- fPedestals[pixeli] += fCdsmatrix[pixeli];
+ fNoiseInfo.fPedestals[pixeli] += fCdsmatrix[pixeli];
if (!useexponentialdecayingnoisewindow)
CDSlastframes[pixeli].push(fCdsmatrix[pixeli]);
}
}
for(Int_t pixeli=0; pixeli<fPixels; pixeli++)
{
- fPedestals[pixeli] /= (frames-nframescutawaythirdnoiseestimate[pixeli]);
+ fNoiseInfo.fPedestals[pixeli] /= (frames-nframescutawaythirdnoiseestimate[pixeli]);
}
// sum up over all frames every variance from the pedestial, pixelwise
{
if (abs(1.*(fCdsmatrix[pixeli]-pixelpedestal2[pixeli])) <= 5.*pixelnoise2[pixeli])
{
- fNoise[pixeli] += TMath::Power(1.*fCdsmatrix[pixeli]-fPedestals[pixeli],2);
+ fNoiseInfo.fNoise[pixeli] += TMath::Power(1.*fCdsmatrix[pixeli]-fNoiseInfo.fPedestals[pixeli],2);
if (!useexponentialdecayingnoisewindow)
- noiselastframes[pixeli].push(TMath::Power(1.*fCdsmatrix[pixeli]-fPedestals[pixeli],2));
+ noiselastframes[pixeli].push(TMath::Power(1.*fCdsmatrix[pixeli]-fNoiseInfo.fPedestals[pixeli],2));
}
}
}
Int_t npixelwithnoisezero = 0;
for(Int_t pixeli=0; pixeli<fPixels; pixeli++)
{
- fNoise[pixeli] = TMath::Sqrt(fNoise[pixeli]/(frames-nframescutawaythirdnoiseestimate[pixeli]-1)); // don't forget the "-1" !!!
- if ( fNoise[pixeli] == 0 )
+ fNoiseInfo.fNoise[pixeli] = TMath::Sqrt(fNoiseInfo.fNoise[pixeli]/(frames-nframescutawaythirdnoiseestimate[pixeli]-1)); // don't forget the "-1" !!!
+ if ( fNoiseInfo.fNoise[pixeli] == 0 )
npixelwithnoisezero++;
}
npixelscutawaythirdnoiseestimate = SumOverArray(nframescutawaythirdnoiseestimate, fPixels);
if( fSave )
{
- Float_t PEDESTAL;
- Float_t NOISE;
- Int_t PIXEL;
-
- fNoiseTree->Branch("pixel" , &PIXEL , "pixel/i" , 32000);
- fNoiseTree->Branch("noise" , &NOISE , "noise/F" , 32000);
- fNoiseTree->Branch("pedestal" , &PEDESTAL , "pedestal/F" , 32000);
-
- for(Int_t pixeli=0; pixeli<fPixels; pixeli++)
- {
- PEDESTAL = fPedestals[pixeli];
- NOISE = fNoise[pixeli];
- PIXEL = pixeli;
-
- if (NOISE > 0)
- fNoiseTree->Fill();
- }
+ fNoiseTree->Fill();
+ cout << colorcyan << fNoiseInfo.fNoise[100] << endlr;
// getNoise(startframe, frames);
}
{
if (useexponentialdecayingnoisewindow)
{
- fNoise[pixeli] = TMath::Sqrt(( (Frames-2)*TMath::Power(fNoise[pixeli],2) + TMath::Power(1.*fCdsmatrix[pixeli]-fPedestals[pixeli],2) )/(Frames-1));
- fPedestals[pixeli] = ( (Frames-1)*fPedestals[pixeli] + fCdsmatrix[pixeli] )/Frames;
+ fNoiseInfo.fNoise[pixeli] = TMath::Sqrt(( (Frames-2)*TMath::Power(fNoiseInfo.fNoise[pixeli],2) + TMath::Power(1.*fCdsmatrix[pixeli]-fNoiseInfo.fPedestals[pixeli],2) )/(Frames-1));
+ fNoiseInfo.fPedestals[pixeli] = ( (Frames-1)*fNoiseInfo.fPedestals[pixeli] + fCdsmatrix[pixeli] )/Frames;
}
else
{
- fNoise[pixeli]=TMath::Sqrt(TMath::Power(fNoise[pixeli],2)-(noiselastframes[pixeli].front()-TMath::Power(fCdsmatrix[pixeli]-fPedestals[pixeli],2))/(noiselastframes[pixeli].size()-1));
+ fNoiseInfo.fNoise[pixeli]=TMath::Sqrt(TMath::Power(fNoiseInfo.fNoise[pixeli],2)-(noiselastframes[pixeli].front()-TMath::Power(fCdsmatrix[pixeli]-fNoiseInfo.fPedestals[pixeli],2))/(noiselastframes[pixeli].size()-1));
noiselastframes[pixeli].pop();
- noiselastframes[pixeli].push(TMath::Power(fCdsmatrix[pixeli]-fPedestals[pixeli],2));
- fPedestals[pixeli] -= (CDSlastframes[pixeli].front()-fCdsmatrix[pixeli])/CDSlastframes[pixeli].size();
+ noiselastframes[pixeli].push(TMath::Power(fCdsmatrix[pixeli]-fNoiseInfo.fPedestals[pixeli],2));
+ fNoiseInfo.fPedestals[pixeli] -= (CDSlastframes[pixeli].front()-fCdsmatrix[pixeli])/CDSlastframes[pixeli].size();
CDSlastframes[pixeli].pop();
CDSlastframes[pixeli].push(fCdsmatrix[pixeli]);
}
- if (abs(fPedestals[pixeli])>20)
+ if (abs(fNoiseInfo.fPedestals[pixeli])>20)
{
fPedestalhighPixel++;
if (!pedestalhighinthisframe) {
// debugStream<>(fHittedPixel, fPixels, fColumns, 1, 1);
// exit(1);
}
- if (abs(fNoise[pixeli])>20)
+ if (abs(fNoiseInfo.fNoise[pixeli])>20)
{
fNoiseHighPixel++;
if (!noisehighinthisframe) {
{
if(fSave)
{
- Float_t PEDESTAL;
- Float_t NOISE;
- Int_t PIXEL;
-
- fNoiseTree = new TTree("noise", "noise");
- fNoiseTree->Reset();
- fNoiseTree->Branch("pixel" , &PIXEL , "pixel/i" , 32000);
- fNoiseTree->Branch("noise" , &NOISE , "noise/F" , 32000);
- fNoiseTree->Branch("pedestal" , &PEDESTAL , "pedestal/F" , 32000);
-
- for(Int_t pixeli=0; pixeli<fPixels; pixeli++)
- {
-
- PEDESTAL = fPedestals[pixeli];
- NOISE = fNoise[pixeli];
- PIXEL = pixeli;
- fNoiseTree->Fill();
- }
-// cout << colorcyan << "Refilling" << endlr;
-
+ fNoiseTree->Fill();
+ cout << colorcyan << "Refilling" << endlr;
+ cout << colorcyan << fNoiseInfo.fNoise[100] << endlr;
RefilledNoiseBranch = true;
// for(Int_t pixeli=0; pixeli<fPixels; pixeli++)
// {
return true;
}
-//###################################################################
-bool MAPS::loadNoise() {
- loadNoise(fRootFile);
- return 0;
-}
-
-bool MAPS::loadNoise( TString filename) {
- TFile *f = new TFile(filename,"READ");
-
- if(f->IsZombie())
- {
- cerr<<"ERROR: loadNoise() failed!"<<endl;
- cerr<<filename<<" not found!"<<endl;
- cerr<<"-----------------------"<<endl;
- return false;
- exit(-1);
- }
- else
- {
-
- TTree *noiseTree = (TNtuple*) f->Get("noise");
-
- UInt_t PIXEL;
- Float_t NOISE, PEDESTAL;
-
- noiseTree->SetBranchAddress("pixel" , &PIXEL );
- cout<<"Noise/Pedestals loaded from:"<< filename << "!"<<endl;
- noiseTree->SetBranchAddress("noise" , &NOISE );
- noiseTree->SetBranchAddress("pedestal" , &PEDESTAL );
-
- Int_t entries = noiseTree->GetEntries();
-
- for(Int_t i=0; i<entries; i++)
- {
- noiseTree->GetEntry(i);
-
- fNoise[i] = NOISE;
- fPedestals[i] = PEDESTAL;
- }
- cout<<"-----------------------"<<endl;
- fNoiseOk = true;
- fNoiseExt = true;
- return true;
- }
-};
-
//####################################################################
bool MAPS::setNoise(Float_t Noise) {
for(Int_t i=0; i<fPixels; i++)
{
- fNoise[i] = Noise;
+ fNoiseInfo.fNoise[i] = Noise;
}
fNoiseOk = true;
bool MAPS::setPedestals(Float_t Pedestals) {
for(Int_t i=0; i<fPixels; i++)
{
- fPedestals[i] = Pedestals;
+ fNoiseInfo.fPedestals[i] = Pedestals;
}
// fNoiseOk = true;
// debugStream<>(fPedestals, fPixels, fColumns, 2, 20);
for(Int_t i=0; i<fPixels; i++)
{
- cdsmatrixCorrPed[i]=(float)(1.*fCdsmatrix[i]-fPedestals[i]);
+ cdsmatrixCorrPed[i]=(float)(1.*fCdsmatrix[i]-fNoiseInfo.fPedestals[i]);
fHittedPixel[i] = 0;
// if( (float)(1.*fCdsmatrix[i]-fPedestals[i]) > (50.) )
- if( (float)(1.*fCdsmatrix[i]-fPedestals[i]) > (5.*fNoise[i]) )
+ if( (float)(1.*fCdsmatrix[i]-fNoiseInfo.fPedestals[i]) > (5.*fNoiseInfo.fNoise[i]) )
{
HITNR++;
HITS.Set(HITNR);
}
}
- if( (float)(1.*fCdsmatrix[i]-fPedestals[i]) < (-5.*fNoise[i]) ) // loop to find pixel with highly negative CDS
+ if( (float)(1.*fCdsmatrix[i]-fNoiseInfo.fPedestals[i]) < (-5.*fNoiseInfo.fNoise[i]) ) // loop to find pixel with highly negative CDS
{
rechargePixellist.push_back(i);
}
pixelchargeincluster[(row*5)+column]=DUMMY;
}
else {
- pixelchargeincluster[(row*5)+column] = 1.*fCdsmatrix [rechargePixellist[rechargingpixeli]+(row-2)*fColumns+(column-2)] - fPedestals [rechargePixellist[rechargingpixeli]+(row-2)*fColumns+(column-2)];
+ pixelchargeincluster[(row*5)+column] = 1.*fCdsmatrix [rechargePixellist[rechargingpixeli]+(row-2)*fColumns+(column-2)] - fNoiseInfo.fPedestals [rechargePixellist[rechargingpixeli]+(row-2)*fColumns+(column-2)];
}
}
}
noiseincluster[(row*5)+column]=DUMMY;
}
else {
- noiseincluster[(row*5)+column] = fNoise[Hitlist[hit]+(row-2)*fColumns+(column-2)];
- pixelchargeincluster[(row*5)+column] = 1.*fCdsmatrix [Hitlist[hit]+(row-2)*fColumns+(column-2)] - fPedestals [Hitlist[hit]+(row-2)*fColumns+(column-2)];
+ noiseincluster[(row*5)+column] = fNoiseInfo.fNoise[Hitlist[hit]+(row-2)*fColumns+(column-2)];
+ pixelchargeincluster[(row*5)+column] = 1.*fCdsmatrix [Hitlist[hit]+(row-2)*fColumns+(column-2)] - fNoiseInfo.fPedestals [Hitlist[hit]+(row-2)*fColumns+(column-2)];
noisesumincluster+=TMath::Power(noiseincluster[(row*5)+column],2);
//noisesumincluster+=noiseincluster[(row*5)+column]; //Mathematicabug reconstructed
chargesumincluster+=pixelchargeincluster[(row*5)+column];
for(int column=0; column<fColumns; column++ )
{
- Arr[column] = fCdsmatrix[ row*fColumns+column ] - fPedestals[ row*fColumns+column ]; // Bugfix: Considered pedestals in common mode calculation
+ Arr[column] = fCdsmatrix[ row*fColumns+column ] - fNoiseInfo.fPedestals[ row*fColumns+column ]; // Bugfix: Considered pedestals in common mode calculation
}
CommonModeInRow = TMath::Median(fColumns, Arr); // Don't use mean, consider hitted pixel !
Float_t cdsmatrixCorrPed[fPixels];
for(Int_t i=0; i<fPixels; i++)
{
- cdsmatrixCorrPed[i]=(float)(1.*fCdsmatrix[i]-fPedestals[i]);
+ cdsmatrixCorrPed[i]=(float)(1.*fCdsmatrix[i]-fNoiseInfo.fPedestals[i]);
}
cout<<"CDS matrix minus pedestals:"<<endl;
debugStream<>(cdsmatrixCorrPed, fPixels/fColumns, fColumns, 0, 10);
column = i%fColumns;
row = i/fColumns;
- NOISE = fNoise[i];
- PEDESTAL = fPedestals[i];
+ NOISE = fNoiseInfo.fNoise[i];
+ PEDESTAL = fNoiseInfo.fPedestals[i];
h1->Fill(NOISE);
h2->Fill(PEDESTAL);
//####################################################################
void MAPS::plotHitDis(UInt_t Start, UInt_t Frames) {
-
if(fOk)
{
//Check availabilty of Frames