* *\r
* Permission to use, copy, modify and distribute this software and its *\r
* documentation strictly for non-commercial purposes is hereby granted *\r
- * without fee, provided that the abovĂ…\9be copyright notice appears in all *\r
+ * withount fee, provided that the abovĂ…\9be copyright notice appears in all *\r
* copies and that both the copyright notice and this permission notice *\r
* appear in the supporting documentation. The authors make no claims *\r
* about the suitability of this software for any purpose. It is *\r
:TObject() \r
,fMinNoise(0.5)\r
,fMaxNoise(2) \r
+ ,fFitType(0)\r
+ ,fnEvents(0)\r
{\r
//\r
// Constructor \r
:TObject(qa) \r
,fMinNoise(0.5)\r
,fMaxNoise(2) \r
+ ,fFitType(0)\r
+ ,fnEvents(0)\r
{\r
//\r
// Copy constructor \r
//TFile *file = new \r
//Info("Init", "Statring");\r
\r
+ fnEvents = 0;\r
+\r
for(Int_t i=0; i<540; i++) {\r
+ fNPoint[i] = new TH2D(Form("entries_%d", i), "", 16, -0.5, 15.5, 144, -0.5, 143.5);\r
fData[i] = new TH3D(Form("data_%d", i), "", 16, -0.5, 15.5, 144, -0.5, 143.5, 50, -0.5, 49.5);\r
- fChPed[i] = new TH2D(Form("ped_%d", i), "", 16, -0.5, 15.5, 150, -0.5, 149.5);\r
+ fChPed[i] = new TH2D(Form("ped_%d", i), "", 16, -0.5, 15.5, 144, -0.5, 143.5);\r
fChNoise[i] = new TH2D(Form("noise_%d", i), "", 16, -0.5, 15.5, 144, -0.5, 143.5);\r
- fPed[i] = new TH1D(Form("pedDist_%d", i), ";pedestals", 100, 0, 20);\r
- fNoise[i] = new TH1D(Form("noiseDist_%d", i), ";noise", 100, 0, 5); \r
- fSignal[i] = new TH1D(Form("signal_%d", i), "", 100, -0.5, 99.5);\r
+ fPed[i] = new TH1D(Form("pedDist_%d", i), ";pedestals (ADC counts)", 100, 5, 15);\r
+ fNoise[i] = new TH1D(Form("noiseDist_%d", i), ";noise (ADC counts)", 100, 0, 5); \r
+ fSignal[i] = new TH1D(Form("signal_%d", i), "signal (ADC counts)", 100, -0.5, 99.5);\r
}\r
\r
+ fOccupancy = new TH1D("occupancy", "", 20, -0.5, 19.5);\r
+\r
//Info("Init", "Done");\r
}\r
\r
// Add an event\r
//\r
\r
+ \r
+ Char_t isUsed[540][16][144]; \r
+ for(Int_t i=0; i<540; i++)\r
+ for(Int_t j=0; j<16; j++)\r
+ for(Int_t k=0; k<144; k++)\r
+ isUsed[i][j][k] = 0;\r
+ \r
Int_t nb = 0;\r
while (data->Next()) {\r
\r
Int_t det = data->GetDet();\r
+ Int_t row = data->GetRow();\r
+ Int_t col = data->GetCol();\r
Int_t *sig = data->GetSignals();\r
nb++;\r
\r
+ //printf("det = %d\n", det);\r
+ \r
if (det<0 || det>=540) continue;\r
+ isUsed[det][row][col]++;\r
+\r
+ // if (!isUsed[det][data->GetRow()][data->GetCol()]) {\r
+ // isUsed[det][data->GetRow()][data->GetCol()] = 1;\r
+ // continue;\r
+ // }\r
+\r
+ fNPoint[det]->Fill(row, col);\r
\r
- for(Int_t k=0; k<30; k++) {\r
+ for(Int_t k=0; k<30; k++) { /// to be corrected\r
fSignal[det]->Fill(sig[k]);\r
- //if(sig[k]>13) printf("timebin: %d signal: %d\n",k,sig[k]); \r
- fData[det]->Fill(data->GetRow(), data->GetCol(), sig[k]);\r
+ fData[det]->Fill(row, col, sig[k]);\r
}\r
}\r
+ \r
+ for(Int_t i=0; i<540; i++) {\r
+ if (i != 0 && i != 8) continue;\r
+ for(Int_t j=0; j<16; j++)\r
+ for(Int_t k=0; k<144; k++)\r
+ fOccupancy->Fill(isUsed[i][j][k]);\r
+ }\r
\r
+ \r
+ fnEvents++;\r
return nb;\r
}\r
\r
fit->SetParameters(1e3, 10, 1);\r
\r
for(Int_t i=0; i<540; i++) {\r
- \r
+ \r
map[i] = 0;\r
- if (fData[i]->GetSum() < 100) continue;\r
+ if (fData[i]->GetSum() < 10) continue;\r
map[i] = 1;\r
\r
Info("process", "processing chamber %d", i);\r
\r
Int_t bin = fChPed[i]->FindBin(j, k);\r
\r
- if (hist->GetSum() > 10) {\r
- hist->Fit(fit, "q0", "goff", 0, 20);\r
- TF1 *f = hist->GetFunction("fit");\r
- Double_t ped = TMath::Abs(f->GetParameter(1));\r
- Double_t noise = TMath::Abs(f->GetParameter(2));\r
+ if (hist->GetSum() > 1) {\r
+ \r
+ Double_t ped = 0, noise = 0;\r
+\r
+ if (fFitType == 0) {\r
+ fit->SetParameters(1e3, 10, 1);\r
+ hist->Fit(fit, "q0", "goff", 0, 20);\r
+ TF1 *f = hist->GetFunction("fit");\r
+ ped = TMath::Abs(f->GetParameter(1));\r
+ noise = TMath::Abs(f->GetParameter(2));\r
+ } else {\r
+ ped = hist->GetMean();\r
+ noise = hist->GetRMS();\r
+ }\r
\r
fChPed[i]->SetBinContent(bin, ped);\r
fChNoise[i]->SetBinContent(bin, noise);\r
fNoise[i]->Fill(noise);\r
\r
} else {\r
- fChPed[i]->SetBinContent(bin, 10);\r
- fChNoise[i]->SetBinContent(bin, 1);\r
+ fChPed[i]->SetBinContent(bin, 0);\r
+ fChNoise[i]->SetBinContent(bin, 0);\r
}\r
\r
//delete hist;\r
}\r
}\r
\r
+ // normalize number of entries histos\r
+\r
+ \r
+ Int_t max = 0;\r
+ for(Int_t i=0; i<540; i++) { \r
+ if (!map[i]) continue;\r
+ for(Int_t j=0; j<fNPoint[i]->GetXaxis()->GetNbins(); j++) {\r
+ for(Int_t k=0; k<fNPoint[i]->GetYaxis()->GetNbins(); k++) {\r
+ Int_t dataBin = fNPoint[i]->FindBin(j, k);\r
+ Double_t v = fNPoint[i]->GetBinContent(dataBin);\r
+ if (v > max) max = (Int_t)v;\r
+ }\r
+ }\r
+ }\r
+ \r
+ for(Int_t i=0; i<540; i++) {\r
+ \r
+ if (!map[i]) continue;\r
+ \r
+ fNPointDist[i] = new TH1D(Form("entriesDist_%d", i), ";number of events", max+2, -0.5, max+1.5);\r
+ \r
+ for(Int_t j=0; j<fNPoint[i]->GetXaxis()->GetNbins(); j++) {\r
+ for(Int_t k=0; k<fNPoint[i]->GetYaxis()->GetNbins(); k++) {\r
+ Int_t dataBin = fNPoint[i]->FindBin(j, k);\r
+ Double_t v = fNPoint[i]->GetBinContent(dataBin);\r
+ //if (v > fnEvents) printf("N = %d V = %lf\n", fnEvents, v);\r
+ fNPointDist[i]->Fill(v); \r
+ }\r
+ }\r
+ \r
+ fNPoint[i]->Scale(1./fnEvents);\r
+ }\r
+ \r
+ \r
TFile *file = new TFile(filename, "UPDATE");\r
for(Int_t i=0; i<540; i++) {\r
if (!map[i]) continue; \r
fChPed[i]->Write();\r
fChNoise[i]->Write();\r
+ fNPoint[i]->Write();\r
+ fNPointDist[i]->Write();\r
fPed[i]->Write();\r
fNoise[i]->Write();\r
fSignal[i]->Write();\r
}\r
+ fOccupancy->Write();\r
file->Close();\r
delete file;\r
}\r