* 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
- * provided "as is" without express or implied warranty. *\r
+ * provided "as is without express or implied warranty. *\r
**************************************************************************/\r
\r
/* $Id: AliTRDqaBlackEvents.cxx 23387 2008-01-17 17:25:16Z cblume $ */\r
#include "TPad.h"\r
#include "TLatex.h"\r
#include "TStyle.h"\r
+#include "TGraph.h"\r
\r
#include "AliTRDgeometry.h"\r
#include "AliTRDrawStreamTB.h"\r
,fOccupancy(0)\r
,fDetRob(0)\r
,fTBEvent(0)\r
- ,fFitType(0)\r
+ ,fRefHistPed(0)\r
+ ,fRefHistNoise(0)\r
+ ,fErrorHC(0)\r
+ ,fErrorMCM(0)\r
+ ,fErrorADC(0)\r
+ ,fErrorSMHC(0)\r
+ ,fErrorSMMCM(0)\r
+ ,fErrorSMADC(0)\r
+ ,fErrorGraphHC(0)\r
+ ,fErrorGraphMCM(0)\r
+ ,fErrorGraphADC(0)\r
+ ,fGraphMCM(0)\r
+ ,fMcmTracks(0)\r
+ ,fMapMCM(0)\r
+ ,fFracMCM(0)\r
+ ,fSMHCped(0)\r
+ ,fSMHCerr(0)\r
+ ,fNoiseTotal(0)\r
+ ,fPP(0)\r
,fMinNoise(0.5)\r
- ,fMaxNoise(2) \r
+ ,fMaxNoise(2)\r
+ ,fFitType(0) \r
+ // ,fRefFileName("")\r
{\r
//\r
// Constructor \r
// to create the histograms call Init()\r
//\r
+\r
+ strcpy(fRefFileName, "");\r
}\r
\r
///////////////////////////////////////////////////////////////////////////////////////////////////\r
,fOccupancy(0)\r
,fDetRob(0)\r
,fTBEvent(0)\r
- ,fFitType(0)\r
+ ,fRefHistNoise(0)\r
+ ,fErrorHC(0)\r
+ ,fErrorMCM(0)\r
+ ,fErrorADC(0)\r
+ ,fErrorSMHC(0)\r
+ ,fErrorSMMCM(0)\r
+ ,fErrorSMADC(0)\r
+ ,fErrorGraphHC(0)\r
+ ,fErrorGraphMCM(0)\r
+ ,fErrorGraphADC(0)\r
+ ,fGraphMCM(0)\r
+ ,fMcmTracks(0)\r
+ ,fMapMCM(0)\r
+ ,fFracMCM(0)\r
+ ,fSMHCped(0)\r
+ ,fSMHCerr(0)\r
+ ,fNoiseTotal(0)\r
+ ,fPP(0)\r
,fMinNoise(0.5)\r
,fMaxNoise(2) \r
+ ,fFitType(0)\r
+ //,fRefFileName("")\r
{\r
//\r
// Copy constructor \r
// to create the histograms call Init()\r
//\r
+ \r
+ strcpy(fRefFileName, "");\r
}\r
\r
///////////////////////////////////////////////////////////////////////////////////////////////////\r
fnEvents = 0;\r
\r
// histograms for chambers\r
- for(Int_t i=0; i<kDET; i++) {\r
- fNPoint[i] = new TH2D(Form("entries_%d", i), "", 16, -0.5, 15.5, 144, -0.5, 143.5);\r
- fData[i] = new TH3F(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, 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 (ADC counts)", 100, 5, 15);\r
+ for(Int_t det=0; det<kDET; det++) {\r
+\r
+ fNPoint[det] = new TH2D(Form("entries_%d", det), "", 16, -0.5, 15.5, 144, -0.5, 143.5);\r
+ fData[det] = new TH3F(Form("data_%d", det), "", 16, -0.5, 15.5, 144, -0.5, 143.5, 50, -0.5, 49.5);\r
+\r
+ // pedestal noise maps using RMS and Fit\r
+ fChPed[det] = new TH2D(Form("ped_%d", det), "", 16, -0.5, 15.5, 144, -0.5, 143.5);\r
+ fChNoise[det] = new TH2D(Form("noise_%d", det), "", 16, -0.5, 15.5, 144, -0.5, 143.5);\r
+ \r
+ //fChPed[det] = new TH2D(Form("ped_%d", det), "", 16, -0.5, 15.5, 144, -0.5, 143.5);\r
+ //fChNoise[det] = new TH2D(Form("noise_%d", det), "", 16, -0.5, 15.5, 144, -0.5, 143.5); \r
+\r
+ // distribution per detector\r
+ fPed[det] = new TH1D(Form("pedDist_%d", det), ";pedestals (ADC counts)", 100, 5, 15);\r
+ fNoise[det] = new TH1D(Form("noiseDist_%d", det), ";noise (ADC counts)", 100, 0, 5); \r
+ fSignal[det] = new TH1D(Form("signal_%d", det), ";signal (ADC counts)", 100, -0.5, 99.5);\r
+ fChPP[det] = new TH1D(Form("pp_%d", det), ";pp (ADC)", 200, -0.5, 199.5);\r
\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
+ fnEntriesRM[det] = new TH2D(Form("entriesRM_%d", det), ";ROB,MCM", 8, -0.5, 7.5, 16, -0.5, 15.5);\r
+ \r
+ // histograms after reference subtraction\r
+ fChPedRes[det] = new TH2D(Form("pedRef_%d", det), "", 16, -0.5, 15.5, 144, -0.5, 143.5);\r
+ fChNoiseRes[det] = new TH2D(Form("noiseRef_%d", det), "", 16, -0.5, 15.5, 144, -0.5, 143.5);\r
\r
- fnEntriesRM[i] = new TH2D(Form("entriesRM_%d", i), ";ROB,MCM", 8, -0.5, 7.5, 16, -0.5, 15.5);\r
+\r
+ // error codes\r
+ fErrorLocMCM[det] = new TH2D(Form("errorLocMCM_%d", det), "", 16, -0.5, 15.5, 144, -0.5, 143.5);\r
+ fErrorLocADC[det] = new TH2D(Form("errorLocADC_%d", det), "", 16, -0.5, 15.5, 144, -0.5, 143.5); \r
+ fErrorLocHC[det] = new TH2D(Form("errorLocHC_%d", det), "", 16, -0.5, 15.5, 144, -0.5, 143.5);\r
}\r
\r
// histogram for each MCM\r
fDetRob = new TH2D("DetRob", ";detector;ROB", kDET, -0.5, 539.5, 8, -0.5, 7.5);\r
fTBEvent = new TH2D("tbEvent", ";event ID;time bin", 100, -0.5, 99.5, 30, -0.5, 29.5);\r
\r
+ // errors statistics and location\r
+ fErrorHC = new TH1D("errorHC", ";error ID;", 7, -0.5, 6.5);\r
+ fErrorMCM = new TH1D("errorMCM", ";error ID;", 7, -0.5, 6.5);\r
+ fErrorADC = new TH1D("errorADC", ";error ID;", 7, -0.5, 6.5);\r
+ \r
+ fErrorSMHC = new TH1D("errorSM_HC", ";SM id", 18, -0.5, 17.5);\r
+ fErrorSMMCM = new TH1D("errorSM_MCM", ";SM id", 18, -0.5, 17.5);\r
+ fErrorSMADC = new TH1D("errorSM_ADC", ";SM id", 18, -0.5, 17.5);\r
+\r
+\r
+ fErrorGraphHC = new TGraph();\r
+ fErrorGraphMCM = new TGraph();\r
+ fErrorGraphADC = new TGraph();\r
+\r
+ fGraphMCM = new TGraph();\r
+ \r
+ fMapMCM = new TH2D("mapMCM", ";det;mcm", 540, -0.5, 539.5, kROB*kMCM, -0.5, kROB*kMCM-0.5);\r
+ fFracMCM = new TH1D("fracMCM", ";frequency", 100, 0, 1);\r
+ \r
+\r
+ fErrorGraphHC->GetHistogram()->SetTitle("Error HC;event number;fraction with error (%)");\r
+ fErrorGraphMCM->GetHistogram()->SetTitle("Error MCM;event number;fraction with error (%)");\r
+ fErrorGraphADC->GetHistogram()->SetTitle("Error ADC;event number;fraction with error (%)"); \r
+\r
+\r
+ fSMHCped = new TH2D("smHcPed", ";super module;half chamber", 18, -0.5, 17.5, 60, -0.5, 59.5);\r
+ //fSMHCerr = 0;\r
+\r
//Info("Init", "Done");\r
+\r
+ // number of ADC channels fired per SM and in total\r
+ for(Int_t sm=0; sm<kSM+1; sm++)\r
+ fNumberADC[sm] = new TGraph();\r
+\r
+ //\r
+ fNoiseTotal = new TH1D("noiseTotal", "noise (ADC)", 250, 0, 10);\r
+ fPP = new TH1D("peakPeak", "p-p (ADC)", 200, -0.5, 199.5);\r
+\r
+ for(Int_t sm=0; sm<kSM; sm++) {\r
+ fSmNoiseRms[sm] = new TH1D(Form("noiseRms_sm%d", sm), ";noise from RMS (ADC)", 100, 0, 10);\r
+ fSmNoiseFit[sm] = new TH1D(Form("noiseFit_sm%d", sm), ";noise frim Fit (ADC)", 100, 0, 10);\r
+ fSmPP[sm] = new TH1D(Form("peakPeak_sm%d", sm), ";peak-peak (ADC)", 200, -0.5, 199.5); \r
+ }\r
+\r
+ fMcmTracks = new TObjArray();\r
}\r
\r
\r
}\r
}\r
\r
+\r
+///////////////////////////////////////////////////////////////////////////////////////////////////\r
+\r
+void AliTRDqaBlackEvents::SetRefFile(const char *filename) {\r
+ \r
+ strcpy(fRefFileName, filename);\r
+}\r
+\r
+///////////////////////////////////////////////////////////////////////////////////////////////////\r
+\r
+void AliTRDqaBlackEvents::ReadRefHists(Int_t det) {\r
+ \r
+ fRefHistPed = 0;\r
+ fRefHistNoise = 0;\r
+ \r
+ TFile *file = 0;\r
+ if (fRefFileName) TFile::Open(fRefFileName);\r
+ if (!file) return;\r
+\r
+ fRefHistPed = (TH2D*)file->Get(Form("ped_%d",det));\r
+ fRefHistNoise = (TH2D*)file->Get(Form("noise_%d", det));\r
+\r
+ if (file) file->Close();\r
+}\r
+\r
///////////////////////////////////////////////////////////////////////////////////////////////////\r
\r
Int_t AliTRDqaBlackEvents::AddEvent(AliTRDrawStreamTB *data) \r
for(Int_t k=0; k<kPAD; k++)\r
isUsed[i][j][k] = 0;\r
\r
+\r
+ // clear the mcm data\r
+ for(Int_t i=0; i < kDET * kROB * kMCM; i++) {\r
+ if (fFullSignal[i]) fFullSignal[i]->Reset();\r
+ fFullCounter[i] = 0;\r
+ }\r
+\r
Int_t nb = 0;\r
- Int_t rob_last = -1;\r
- Int_t mcm_last = -1;\r
- Int_t sm_01 = -1;\r
+ \r
+ Int_t lastdet = -1;\r
+ Int_t lastside = -1;\r
+ Int_t lastmcm = -1;\r
+\r
+ Int_t rob_last = -1;\r
+ Int_t mcm_last = -1;\r
+\r
+ Int_t nGoodHC = 0;\r
+ Int_t nGoodMCM = 0;\r
+ Int_t nGoodADC = 0;\r
+\r
+ Int_t nErrorHC = 0;\r
+ Int_t nErrorMCM = 0;\r
+ Int_t nErrorADC = 0;\r
+ \r
+\r
+ //Int_t adc_last = -1;\r
+ // Int_t sm_01 = -1;\r
+ \r
+ // number of ADCs per SM\r
+ Int_t nADCinSM[kSM+1];\r
+ for(Int_t sm=0; sm<kSM+1; sm++) nADCinSM[sm] = 0;\r
+\r
+\r
\r
while (data->Next()) {\r
\r
+ Int_t sm = data->GetSM();\r
+ Int_t layer = data->GetLayer();\r
+ Int_t stack = data->GetStack();\r
+\r
Int_t det = data->GetDet();\r
+ Int_t side = data->GetSide();\r
\r
Int_t row = data->GetRow();\r
Int_t col = data->GetCol();\r
Int_t mcm = data->GetMCM();\r
Int_t adc = data->GetADC();\r
\r
+ \r
Int_t *sig = data->GetSignals();\r
nb++;\r
\r
- // ugly hook\r
- if (det == 0 && row == 0 && col == 0) {\r
- if (sm_01 > -1) printf("\t\t\t!!! !!! second data set !!! !!!\n");\r
- sm_01++; \r
- }\r
-\r
- det += sm_01 * 30; /// ugly\r
-\r
+ nADCinSM[sm]++;\r
+ nADCinSM[kSM]++;\r
+ \r
// memory coruption protection\r
if (det<0 || det>=kDET) continue;\r
\r
+ // check errors\r
+ \r
+ // tests\r
+ //fErrorHC->Fill(data->GetHCErrorCode());\r
+ if (data->GetMCMErrorCode() > 0) fErrorLocMCM[det]->Fill(row, col);\r
+ if (data->GetADCErrorCode() > 0) fErrorLocADC[det]->Fill(row, col); \r
+\r
+ // new HC found\r
+ if ((det + side*kDET) != (lastdet + lastside*kDET)) {\r
+ Int_t code = data->GetHCErrorCode();\r
+ // if (code) { \r
+ fErrorHC->Fill(code);\r
+ \r
+ if (code) fErrorSMHC->Fill(sm);\r
+ if (code) nErrorHC++;\r
+ nGoodHC++;\r
+\r
+ //Int_t mask = 1;\r
+ //for(Int_t cc = 0; cc < 3; cc++) {\r
+ // if (code & mask) fErrorHC->Fill(cc);\r
+ // cc *= 2;\r
+ // }\r
+ //}\r
+ }\r
+ lastdet = det;\r
+ lastside = side;\r
+ \r
+ // new MCM found \r
+ if (mcm != lastmcm){\r
+ Int_t code = data->GetMCMErrorCode();\r
+ fErrorMCM->Fill(code);\r
+\r
+ if (code) fErrorSMMCM->Fill(sm);\r
+ if (code) nErrorMCM++;\r
+ nGoodMCM++;\r
+ }\r
+ lastmcm = mcm;\r
+ \r
+ // new ADC channel found\r
+ Int_t code = data->GetADCErrorCode();\r
+ fErrorADC->Fill(code);\r
+ if (code) fErrorSMADC->Fill(sm);\r
+ if (code) nErrorADC++;\r
+ nGoodADC++;\r
+\r
+ // end of error checking\r
+ \r
// check the ROBs\r
fDetRob->Fill(det, rob, 1./(kMCM*18));\r
-\r
isUsed[det][row][col]++;\r
\r
// check if mcm signal is continuus\r
// create a structure for an MCM if needed\r
Int_t mcmIndex = det * (kMCM * kROB) + rob * kMCM + mcm;\r
if (fCreateFull && !fFullSignal[mcmIndex])\r
- fFullSignal[mcmIndex] = new TH2S(Form("mcm_%d_%d_%d", det, rob, mcm), \r
- Form("mcm-%d-%d-%d;ADC;time bin", det, rob,mcm),\r
+ fFullSignal[mcmIndex] = new TH2S(Form("mcm_%d_%d_%d_%d_%d", sm, stack, layer, rob, mcm), \r
+ Form("mcm-%d-%d-%d-%d-%d;ADC;time bin", sm, stack, layer, rob, mcm),\r
21, -0.5, 20.5, 30, -0.5, 29.5);\r
\r
\r
// loop over Time Bins and fill histograms\r
+ Int_t minV = 1024;\r
+ Int_t maxV = 0;\r
+\r
for(Int_t k=0; k<kTB; k++) { /// to be corrected\r
\r
+ //if (data->GetADCErrorCode() > 0) continue;\r
+\r
+ //if (col == 0 || col == 143)\r
+ //printf("TB: %d %d %d\n", row, col, sig[k]);\r
+\r
//if (sig[k] < 1) \r
//printf("det = %d rob = %d mcm = %d adc = %d k = %d S = %d\n", det, rob, mcm, adc, k, sig[k]);\r
\r
fSignal[det]->Fill(sig[k]);\r
fData[det]->Fill(row, col, sig[k]);\r
\r
+ minV = (minV < sig[k]) ? minV : sig[k];\r
+ maxV = (maxV > sig[k]) ? maxV : sig[k];\r
+\r
+\r
// check if data strange enought\r
if (fCreateFull && fFullSignal[mcmIndex]) {\r
+ //if (sm == 17 && )\r
+ //if (det != 29) {\r
if (sig[k] > fThresh || sig[k] < 1) fFullCounter[mcmIndex]++;\r
+ //if (sig[k] < 1) fFullCounter[mcmIndex] = 0; // remove austrian flag \r
+ //}\r
fFullSignal[mcmIndex]->Fill(adc, k, sig[k]);\r
}\r
\r
// noisy chamber\r
- if (det == 29) {\r
+ if (det == 29 && col > 7) {\r
fTBEvent->Fill(fnEvents, k, sig[k]);\r
}\r
-\r
}\r
+ \r
+ fPP->Fill(maxV-minV);\r
+ fChPP[det]->Fill(maxV-minV);\r
+ fSmPP[sm]->Fill(maxV-minV);\r
}\r
\r
// is the dead-alive status changing during the run\r
fOccupancy->Fill(isUsed[i][j][k]);\r
}\r
\r
+ // save interesting histos\r
+ Int_t mcmTrackCandidate = 0;\r
+ for(Int_t i = 0; i < kDET * kROB * kMCM; i++) { \r
+ if (fFullCounter[i] && fFullSignal[i] && CheckMCM(i) ) {\r
+ \r
+ fMcmTracks->AddLast(fFullSignal[i]->Clone(Form("event_%d_%s", fnEvents, fFullSignal[i]->GetName())));\r
+ mcmTrackCandidate++;\r
+ \r
+ Int_t mcmTrackletDet = i/(kROB * kMCM); \r
+ Int_t mcmTrackletMcm = i%(kROB * kMCM);\r
+ fMapMCM->Fill(mcmTrackletDet, mcmTrackletMcm);\r
+ }\r
+ }\r
+ \r
+ fGraphMCM->SetPoint(fnEvents, fnEvents, mcmTrackCandidate);\r
+ printf("Number of MCM track candidates = %d\n", mcmTrackCandidate);\r
+ \r
+\r
+ // update fraction of error graphs\r
+ Double_t err;\r
+\r
+ err = (nGoodHC > 0)? 100.*nErrorHC/nGoodHC : -1;\r
+ fErrorGraphHC->SetPoint(fnEvents, fnEvents, err);\r
+ \r
+ err = (nGoodMCM > 0)? 100.*nErrorMCM/nGoodMCM : -1;\r
+ fErrorGraphMCM->SetPoint(fnEvents, fnEvents, err);\r
+ \r
+ err = (nGoodADC > 0)? 100.*nErrorADC/nGoodADC : -1;\r
+ fErrorGraphADC->SetPoint(fnEvents, fnEvents, err);\r
+\r
+ // number of fired ADC per SM\r
+ for(Int_t sm=0; sm<kSM+1; sm++) \r
+ fNumberADC[sm]->SetPoint(fnEvents, fnEvents, nADCinSM[sm]);\r
+\r
+\r
fnEvents++;\r
return nb;\r
}\r
//\r
// Process something\r
//\r
+ \r
+ char fn[256];\r
+ strcpy(fn, filename);\r
+ \r
+ //printf("FILENAME = %s (%s)\n", filename, fn);\r
\r
Int_t map[kDET];\r
\r
TF1 *fit = new TF1("fit", "gaus(0)", 0, 20);\r
fit->SetParameters(1e3, 10, 1);\r
\r
- for(Int_t i=0; i<kDET; i++) {\r
- \r
- map[i] = 0;\r
- if (fData[i]->GetSum() < 10) continue;\r
- map[i] = 1;\r
+ for(Int_t det=0; det<kDET; det++) {\r
+\r
+ //printf("processing chamber %d\n", det); \r
\r
- Info("process", "processing chamber %d", i);\r
+ map[det] = 0;\r
+ if (fData[det]->GetSum() < 10) continue;\r
+ map[det] = 1;\r
\r
- for(Int_t j=0; j<fData[i]->GetXaxis()->GetNbins(); j++) {\r
- for(Int_t k=0; k<fData[i]->GetYaxis()->GetNbins(); k++) {\r
+ // read reference distributions\r
+ ReadRefHists(det);\r
+\r
+ for(Int_t row=0; row<fData[det]->GetXaxis()->GetNbins(); row++) {\r
+ for(Int_t pad=0; pad<fData[det]->GetYaxis()->GetNbins(); pad++) {\r
\r
// project the histogramm\r
hist->Reset();\r
for(Int_t bb=0; bb<50; bb++) {\r
- Int_t dataBin = fData[i]->FindBin(j, k, bb);\r
- Double_t v = fData[i]->GetBinContent(dataBin);\r
+ Int_t dataBin = fData[det]->FindBin(row, pad, bb);\r
+ Double_t v = fData[det]->GetBinContent(dataBin);\r
hist->SetBinContent(bb+1, v);\r
}\r
\r
- //TH1D *hist = fData[i]->ProjectionZ(Form("pad_%_%d_%d", i, j, k), j+1, j+1, k+1, k+1);\r
- \r
- Int_t bin = fChPed[i]->FindBin(j, k);\r
+ Int_t bin = fChPed[det]->FindBin(row, pad);\r
\r
if (hist->GetSum() > 1) {\r
\r
TF1 *f = hist->GetFunction("fit");\r
ped = TMath::Abs(f->GetParameter(1));\r
noise = TMath::Abs(f->GetParameter(2));\r
+ fSmNoiseFit[det/30]->Fill(noise);\r
} else {\r
ped = hist->GetMean();\r
noise = hist->GetRMS();\r
+ fSmNoiseRms[det/30]->Fill(noise);\r
+ //if (pad == 0)\r
+ // printf("data %f %f %f\n", hist->GetSum(), ped, noise);\r
}\r
\r
- fChPed[i]->SetBinContent(bin, ped);\r
- fChNoise[i]->SetBinContent(bin, noise);\r
+ fChPed[det]->SetBinContent(bin, ped);\r
+ fChNoise[det]->SetBinContent(bin, noise);\r
+ fNoiseTotal->Fill(noise);\r
+\r
+ // subtract reference values\r
+ Double_t refped = 0;\r
+ Double_t refnoise = 0;\r
\r
- fPed[i]->Fill(ped);\r
- fNoise[i]->Fill(noise);\r
+ if (fRefHistPed) refped = fRefHistPed->GetBinContent(bin);\r
+ if (fRefHistNoise) refnoise = fRefHistPed->GetBinContent(bin);\r
+\r
+ fChPedRes[det]->SetBinContent(bin, ped-refped);\r
+ fChNoiseRes[det]->SetBinContent(bin, noise-refnoise);\r
+ \r
+ fPed[det]->Fill(ped);\r
+ fNoise[det]->Fill(noise);\r
+\r
+ // fill SM-HC plot\r
+ Int_t sm = det / 30;\r
+ Int_t hc = (pad < kPAD/2) ? 2* (det % 30) : 2* (det % 30) + 1;\r
+ if (ped > 9. && ped < 11) fSMHCped->Fill(sm, hc, 1./1152.); // number of pads in HC\r
\r
} else {\r
- fChPed[i]->SetBinContent(bin, 0);\r
- fChNoise[i]->SetBinContent(bin, 0);\r
+ \r
+ // not enought data found \r
+ fChPed[det]->SetBinContent(bin, 0);\r
+ fChNoise[det]->SetBinContent(bin, 0);\r
+ fChPedRes[det]->SetBinContent(bin, 0);\r
+ fChNoiseRes[det]->SetBinContent(bin, 0);\r
}\r
\r
//delete hist;\r
}\r
}\r
\r
- Info("Process", "Number of events = %d", fnEvents);\r
+\r
+ //printf("Number of events = %d\n", fnEvents);\r
\r
// normalize number of entries histos\r
Int_t max = 0;\r
}\r
\r
char entriesDistName[100];\r
- \r
+\r
for(Int_t i=0; i<kDET; i++) {\r
\r
if (!map[i]) continue;\r
\r
// save histograms\r
\r
- TFile *file = new TFile(filename, "recreate");\r
- for(Int_t i=0; i<kDET; 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
- fnEntriesRM[i]->Write();\r
+ //printf("FILENAME 2 = %s (%d)\n", fn, fn);\r
+ TFile *file = new TFile(fn, "recreate");\r
+ for(Int_t det = 0; det < kDET; det++) {\r
+ if (!map[det]) continue; \r
+ fChPed[det]->Write();\r
+ fChNoise[det]->Write();\r
+ fNPoint[det]->Write();\r
+ fNPointDist[det]->Write();\r
+ fPed[det]->Write();\r
+ fNoise[det]->Write();\r
+ fSignal[det]->Write();\r
+ fnEntriesRM[det]->Write();\r
+ fChPP[det]->Write();\r
+\r
+ fChPedRes[det]->Write();\r
+ fChNoiseRes[det]->Write();\r
+\r
+ // save error hists\r
+ fErrorLocMCM[det]->SetMinimum(0);\r
+ fErrorLocMCM[det]->SetMaximum(fnEvents);\r
+ fErrorLocMCM[det]->Write();\r
+\r
+ fErrorLocADC[det]->SetMinimum(0);\r
+ fErrorLocADC[det]->SetMaximum(fnEvents);\r
+ fErrorLocADC[det]->Write();\r
+ }\r
+\r
+ for(Int_t sm=0; sm<kSM; sm++) {\r
+ fSmNoiseRms[sm]->Write();\r
+ fSmNoiseFit[sm]->Write();\r
+ fSmPP[sm]->Write();\r
}\r
\r
+\r
+\r
Int_t nMcm = 0;\r
for(Int_t i=0; i < kDET * kROB * kMCM; i++) {\r
if (fFullSignal[i] && fFullCounter[i] > fCount) {\r
}\r
\r
printf("Number of saved MCMs = %d\n", nMcm);\r
+ \r
+ fMcmTracks->Write();\r
+ printf("Number of tracks = %d\n", fMcmTracks->GetEntries());\r
+ \r
+ // permanently problematic MCMs\r
+ for(Int_t det=0; det<kDET; det++) {\r
+ for(Int_t mcm=0; mcm<kROB*kMCM; mcm++) {\r
+ \r
+ Int_t mRob = mcm / kMCM;\r
+ Int_t mMcm = mcm % kMCM;\r
+ Int_t bin = fMapMCM->FindBin(det, mcm);\r
+ Double_t frac = 1. * fMapMCM->GetBinContent(bin) / fnEvents; \r
+ fFracMCM->Fill(frac);\r
+ \r
+ if (frac > 0.7) {\r
+ printf("{%d, %d, %d}, \n", det, mRob, mMcm, frac);\r
+ } \r
+ }\r
+ }\r
+\r
+\r
\r
fOccupancy->Write();\r
fDetRob->Write();\r
fTBEvent->Write();\r
+ \r
+ // error hists\r
+ fErrorHC->Write();\r
+ fErrorMCM->Write();\r
+ fErrorADC->Write();\r
+\r
+ fErrorSMHC->Write();\r
+ fErrorSMMCM->Write();\r
+ fErrorSMADC->Write(); \r
+ \r
+ // write graphs\r
+ fErrorGraphHC->Write("trendErrorHC");\r
+ fErrorGraphMCM->Write("trendErrorMCM");\r
+ fErrorGraphADC->Write("trendErrorADC");\r
+ \r
+ fGraphMCM->Write("trendMCM");\r
+\r
+ fMapMCM->SetMaximum(fnEvents);\r
+ fMapMCM->Write();\r
+ fFracMCM->Write();\r
+ \r
+ fSMHCped->Write();\r
+\r
+ for(Int_t sm=0; sm<kSM; sm++)\r
+ fNumberADC[sm]->Write(Form("nADCinSM%d",sm));\r
+ \r
+ fNumberADC[kSM]->Write("nADCinEvent");\r
+\r
+ fNoiseTotal->Write();\r
+ fPP->Write();\r
+\r
file->Close();\r
delete file;\r
}\r
\r
///////////////////////////////////////////////////////////////////////////////////////////////////\r
\r
+Int_t AliTRDqaBlackEvents::CheckMCM(Int_t index) {\r
+ \r
+ return 1;\r
+ \r
+ static Int_t data[21][3] = {\r
+ {1, 0, 1}, \r
+ {242, 0, 0}, \r
+ {242, 0, 1}, \r
+ {242, 0, 2}, \r
+ {242, 0, 4}, \r
+ {242, 0, 5}, \r
+ {242, 0, 6}, \r
+ {242, 0, 8}, \r
+ {242, 0, 12}, \r
+ {251, 7, 7}, \r
+ {254, 3, 11}, \r
+ {259, 3, 14}, \r
+ {260, 1, 9}, \r
+ {260, 3, 15}, \r
+ {273, 1, 7}, \r
+ {273, 1, 15}, \r
+ {276, 5, 11}, \r
+ {280, 6, 2}, \r
+ {299, 6, 4}, \r
+ {511, 2, 9}, \r
+ {517, 7, 15}\r
+ };\r
+ \r
+ for(Int_t i=0; i<21; i++) {\r
+ Int_t wIndex = data[i][0] * kROB*kMCM + data[i][1] * kMCM + data[i][2];\r
+ if (index == wIndex) return 0;\r
+ }\r
+\r
+ return 1;\r
+}\r
+\r
+///////////////////////////////////////////////////////////////////////////////////////////////////\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
void AliTRDqaBlackEvents::DrawChamber(const char *filename, Int_t det, Int_t w, Int_t h) \r
{\r
//\r