fHitTree->Write("",TObject::kOverwrite);
fNoiseTree->Write("",TObject::kOverwrite);
+ fDynNoiseTree->Write("",TObject::kOverwrite);
hint1->Write("",TObject::kOverwrite);
hint2->Write("",TObject::kOverwrite);
+
fOutputFile->Save();
fOutputFile->Close();
delete[] fCdsmatrix;
delete[] fNoise;
delete[] fPedestals;
+ delete[] fDynFrameArr;
+ delete[] fDynCounter;
cout<<"================================================================="<<endl;
};
fOk = false;
fNoiseOk = false;
fNoiseExt = false;
+ fNoiseDyn = false;
//-----------------------------------------------
cout<<"================================================================="<<endl;
cout<<"-----------------------"<<endl;
fCdsmatrix = new Int_t [fPixelsData];
fNoise = new Float_t [fPixelsData];
fPedestals = new Float_t [fPixelsData];
+ fHittedPixel= new Int_t [fPixelsData];
//-----------------------------------------------
return true;
}
for(int i=0;i<25;i++) { fHitTree->Branch( Form("p%i",i+1) , &fFrameInfo.p[i][0] , Form("p%i [hits]/F",i+1) , 32000); }
// Noise TTree
fNoiseTree = new TTree("noise", "noise");
+ fDynNoiseTree = new TTree("dynnoise", "dynnoise");
//-----------------------------------------------
hint1 = new TH2F("Hitmulit", "Hit multiplicity", fColumns, 0, fColumns, fRows, 0, fRows);
hint2 = new TH2F("Pixmulit", "Pix multiplicity", fColumns, 0, fColumns, fRows, 0, fRows);
for(Int_t j=0; j<Frames;j++)
{
- if(ARR[j*fPixels+i]>5*PEDESTAL) continue; //throw all frames with a signal >5pedestal away, because of postulated signal charge
NOISE+=TMath::Power(ARR[j*fPixels+i]-PEDESTAL,2);
}
//####################################################################
+bool MAPS::getDynNoise(Int_t Frames) {
+//Dynamic Noise + Pedestals calculation
+
+ if( fNoiseDyn )
+ {
+ delete[] fDynFrameArr;
+ delete[] fDynCounter;
+
+ fDynFrameArr = new Float_t[Frames*fPixels];
+ fDynCounter = new Int_t[fPixels];
+ }
+ else
+ {
+ fDynNoiseTree->Branch("frame" , &fFrameNumber , "frame/i" , 32000);
+ fDynNoiseTree->Branch("noise" , &fNoiseMean , "noise/F" , 32000);
+ fDynNoiseTree->Branch("pedestal" , &fPedestalsMean , "pedestal/F" , 32000);
+ }
+
+ if(fOk)
+ {
+//Check amount of Frames
+ if(Frames<50)
+ {
+ cout<<"Too few Frames! Change Frames from "<<Frames<<" to ";
+ Frames = 50;
+ cout<<Frames<<" !"<<endl;
+ }
+// Warning: if too many pixels the dynamic array overflow the ram
+ Int_t End = Frames*fPixels*4;
+ cout<<"Run getDynNoise() initiated ..."<<endl;
+ cout<<"---"<<endl;
+ cout<<"'fDynFrameArr' allocates ";
+ if (End/(TMath::Power(2,40)) >= 1) { printf("%6.2f TB ", (Float_t)(End/(TMath::Power(2,40))) ); }
+ else if (End/(TMath::Power(2,30)) >= 1) { printf("%6.2f GB ", (Float_t)(End/(TMath::Power(2,30))) ); }
+ else if (End/(TMath::Power(2,20)) >= 1) { printf("%6.2f MB ", (Float_t)(End/(TMath::Power(2,20))) ); }
+ else if (End/(TMath::Power(2,10)) >= 1) { printf("%6.2f kB ", (Float_t)(End/(TMath::Power(2,10))) ); }
+ else { printf("%6.2f B ", (Float_t)(End)); }
+ cout<<"for dynamic noise calculation! "<<endl;
+
+ fDynFrameArr = new Float_t[Frames*fPixels];
+ fDynCounter = new Int_t[fPixels];
+
+ for(Int_t i=0; i<fPixels;i++) { fDynCounter[i]=0; }
+
+ bool STOP = false;
+ fNoiseDyn = false;
+
+//Check availabilty of Frames
+ if( Frames > fEventsSum ) { Frames = fEventsSum; printf("Changed 'Number Frames' to: %u\n", Frames ); }
+// Get fPixels and allocate array
+ Float_t PEDESTAL;
+ Float_t NOISE;
+// Int_t PIXEL=0;
+
+ if(!fNoiseOk) {getNoise(0,Frames);}
+
+ {
+ int i=0;
+
+ while(!STOP)
+ {
+ getFrame(i);
+ hitana();
+
+ STOP = true;
+
+ for(Int_t j=0; j<fPixels;j++)
+ {
+ if( fHittedPixel[j]==0)
+ {
+ if( fDynCounter[j]<Frames )
+ {
+ fDynFrameArr[Frames*j+fDynCounter[j]] = fCdsmatrix[j];//-fPedestals[j];
+ fDynCounter[j]++;
+
+ STOP = false;
+ }
+ }
+ }
+ i++;
+ }
+ }
+
+ for(Int_t i=0; i<fPixels;i++)
+ {
+ PEDESTAL = 0;
+ NOISE = 0;
+
+ for(Int_t j=0; j<Frames;j++)
+ {
+ PEDESTAL+=fDynFrameArr[Frames*i+j];
+ }
+
+ PEDESTAL = PEDESTAL/Frames;
+
+ for(Int_t j=0; j<Frames;j++)
+ {
+ NOISE+=TMath::Power(fDynFrameArr[Frames*i+j]-PEDESTAL,2);
+ }
+
+ NOISE = TMath::Sqrt(NOISE/(Frames));
+
+ fNoise[i] = NOISE;
+ fPedestals[i] = PEDESTAL;
+// PIXEL = i;
+
+ fDynCounter[i] = 0;
+ }
+
+ cout<<"-----------------------"<<endl;
+
+ fNoiseOk = true;
+ fNoiseDyn = Frames;
+
+ if( fSave )
+ {
+ fFrameNumber = 0;
+ fNoiseMean = 0;
+ fPedestalsMean = 0;
+
+ fDynNoiseTree->Fill();
+
+ fFrameNumber = 0;
+ fNoiseMean = TMath::Mean((const int)fPixels, fNoise);
+ fPedestalsMean = TMath::Mean((const int)fPixels, fPedestals);
+
+ fDynNoiseTree->Fill();
+ }
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+};
+
+//####################################################################
+
+bool MAPS::regetDynNoise() {
+
+ if( fNoiseDyn )
+ {
+ Float_t PEDESTAL;
+ Float_t NOISE;
+ Int_t Frames = fNoiseDyn;
+
+ for(Int_t i=0; i<fPixels;i++)
+ {
+ PEDESTAL = 0;
+ NOISE = 0;
+
+ for(Int_t j=0; j<Frames;j++)
+ {
+ PEDESTAL+=fDynFrameArr[Frames*i+j];
+ }
+
+ PEDESTAL = PEDESTAL/Frames;
+
+ for(Int_t j=0; j<Frames;j++)
+ {
+ NOISE+=TMath::Power(fDynFrameArr[Frames*i+j]-PEDESTAL,2);
+ }
+
+ NOISE = TMath::Sqrt(NOISE/(Frames));
+
+ fNoise[i] = NOISE;
+ fPedestals[i] = PEDESTAL;
+ }
+
+ if(fSave)
+ {
+ fNoiseMean = TMath::Mean((const int)fPixels, fNoise);
+ fPedestalsMean = TMath::Mean((const int)fPixels, fPedestals);
+
+ fDynNoiseTree->Fill();
+ }
+
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+}
+
+//####################################################################
+
bool MAPS::loadNoise( TString InDir, Int_t RunNumber, Int_t Matrix) {
TString FILENAME = InDir+Form("%i/%i_%i.root",RunNumber,RunNumber,Matrix);
for(Int_t i=0; i<fPixels; i++)
{
+ fHittedPixel[i] = 0;
+
if( (float)(1.*fCdsmatrix[i]-fPedestals[i]) > (5.*fNoise[i]) )
{
HITNR++;
fHits++;
if(fSave) { hint1->Fill( Hitlist[hit]%fColumns, (int)(Hitlist[hit]/fColumns) ); }
+
+ for(Int_t row=0;row<5;row++)
+ {
+ for(Int_t column=0;column<5;column++)
+ {
+ if ( (row==0) && (A<2) ) { }
+ else if ( (row==1) && (A<1) ) { }
+ else if ( (row==3) && (A>= (fRows-1)) ) { }
+ else if ( (row==4) && (A>= (fRows-2)) ) { }
+ else
+ {
+ if ( (column==0) && (B<2) ) { }
+ else if ( (column==1) && (B==0) ) { }
+ else if ( (column==3) && (B==fColumns-1)) { }
+ else if ( (column==4) && (B>fColumns-3)) { }
+ else { fHittedPixel[Hitlist[hit]+(row-2)*fColumns+(column-2)] = 1; }
+ }
+ }
+ }
+ fHittedPixel[Hitlist[hit]] = 2;
}
}
//End: loop evaluate true seeds:
}
}
+ if( fNoiseDyn )
+ {
+ for(Int_t j=0; j<fPixels;j++)
+ {
+ if( fHittedPixel[j]==0)
+ {
+
+ fDynFrameArr[fNoiseDyn*j+fDynCounter[j]] = fCdsmatrix[j];
+ fDynCounter[j]++;
+
+ if( fDynCounter[j] == fNoiseDyn ) { fDynCounter[j] = 0; }
+ }
+ }
+ }
+
delete[] Hitlist;
}}