Updated QA version (Sylwester)
[u/mrichter/AliRoot.git] / TRD / AliTRDqaBlackEvents.cxx
index a62cfadf3ef1ad4fda69d77b66e36f8941a890a2..0d7fb887b7bccbd0d2a14d6384b31b0963244aca 100644 (file)
@@ -6,7 +6,7 @@
  *                                                                        *\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
@@ -47,6 +47,8 @@ AliTRDqaBlackEvents::AliTRDqaBlackEvents()
   :TObject() \r
   ,fMinNoise(0.5)\r
   ,fMaxNoise(2) \r
+  ,fFitType(0)\r
+  ,fnEvents(0)\r
 {\r
   //\r
   // Constructor \r
@@ -60,6 +62,8 @@ AliTRDqaBlackEvents::AliTRDqaBlackEvents(const AliTRDqaBlackEvents &qa)
   :TObject(qa) \r
   ,fMinNoise(0.5)\r
   ,fMaxNoise(2) \r
+  ,fFitType(0)\r
+  ,fnEvents(0)\r
 {\r
   //\r
   // Copy constructor \r
@@ -78,15 +82,20 @@ void AliTRDqaBlackEvents::Init()
   //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
@@ -114,22 +123,49 @@ Int_t AliTRDqaBlackEvents::AddEvent(AliTRDrawStreamTB *data)
   // 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
@@ -148,9 +184,9 @@ void AliTRDqaBlackEvents::Process(const char *filename)
   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
@@ -170,11 +206,20 @@ void AliTRDqaBlackEvents::Process(const char *filename)
        \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
@@ -183,8 +228,8 @@ void AliTRDqaBlackEvents::Process(const char *filename)
          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
@@ -192,15 +237,52 @@ void AliTRDqaBlackEvents::Process(const char *filename)
     }\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