]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - ITS/AliITSQASSDDataMakerRec.cxx
- AliITSInitGeometry.cxx (updated): fgkOldSSDcone changed from kTRUE to
[u/mrichter/AliRoot.git] / ITS / AliITSQASSDDataMakerRec.cxx
index 876e7eba1b2a95f1702ac5a8b1af52717709e51f..93b31ea256c58db7255c47aa5cf5fc62b6d021c8 100644 (file)
@@ -12,7 +12,7 @@
  * about the suitability of this software for any purpose. It is          *
  * provided "as is" without express or implied warranty.                  *
  **************************************************************************/
-
+/* $Id:$    */
 //  *************************************************************
 //  Checks the quality assurance 
 //  by comparing with reference data
 // --- ROOT system ---
 #include <TH2D.h>
 #include <TTree.h>
+#include <TMath.h>
 #include <TString.h>
 
 // --- Standard library ---
 
 // --- AliRoot header files ---
 #include "AliITSQASSDDataMakerRec.h"
+#include "AliQADataMakerRec.h"
 #include "AliLog.h"
 #include "AliQA.h"
 #include "AliQAChecker.h"
 #include "AliRawReader.h"
+#include "AliRawReaderRoot.h"
 #include "AliITSRawStreamSSD.h"
 #include "AliITSgeomTGeo.h"
-
+#include "AliRawEventHeaderBase.h"
 
 ClassImp(AliITSQASSDDataMakerRec)
 
-//____________________________________________________________________________ 
 AliITSQASSDDataMakerRec::AliITSQASSDDataMakerRec(AliITSQADataMakerRec *aliITSQADataMakerRec, Bool_t kMode, Int_t ldc) :
 TObject(),
 fAliITSQADataMakerRec(aliITSQADataMakerRec),
+fSSDEvent(0),
 fkOnline(kMode),
 fLDC(ldc),
 fSSDhRaws(0),
 fSSDhRecs(0),
 fRawsOffset(0),
-fRecsOffset(0)
-{
-  //ctor used to discriminate OnLine-Offline analysis
+fRecsOffset(0) {
+  // Default constructor   
   //initilize the raw signal vs strip number histograms
   Int_t fLayer = 0,fLadder = 0, fModule = 0;
   TString fTitle; Int_t fHistCounter = 0;
-  for(Int_t i = 500; i < fgkSSDMODULES + 500; i++) {
-    AliITSgeomTGeo::GetModuleId(i,fLayer,fLadder,fModule);
-    fTitle = "SSD_RawSignal_Layer"; fTitle += fLayer;
-    fTitle += "_Ladder"; fTitle += fLadder;
-    fTitle += "_Module"; fTitle += fModule;
-    fHistSSDRawSignalModule[fHistCounter] = new TH1D(fTitle.Data(),fTitle.Data(),1540,0,1540);
-    fHistCounter++;
+  if(fkOnline) {
+    for(Int_t i = 500; i < fgkSSDMODULES + 500; i++) {
+      AliITSgeomTGeo::GetModuleId(i,fLayer,fLadder,fModule);
+      fTitle = "SSD_RawSignal_Layer"; fTitle += fLayer;
+      fTitle += "_Ladder"; fTitle += fLadder;
+      fTitle += "_Module"; fTitle += fModule; 
+      fHistSSDRawSignalModule[fHistCounter] = new TH1D(fTitle.Data(),fTitle.Data(),1540,0,1540);
+      fHistCounter += 1;
+    }
+  }//online flag
+  else {
+    for(Int_t i = 0; i < fgkSSDMODULES; i++) {
+      fHistSSDRawSignalModule[i]=NULL;
+    }
   }
 }
 
@@ -69,13 +78,13 @@ fRecsOffset(0)
 AliITSQASSDDataMakerRec::AliITSQASSDDataMakerRec(const AliITSQASSDDataMakerRec& qadm) :
 TObject(),
 fAliITSQADataMakerRec(qadm.fAliITSQADataMakerRec),
+fSSDEvent(qadm.fSSDEvent),
 fkOnline(qadm.fkOnline),
 fLDC(qadm.fLDC),
 fSSDhRaws(qadm.fSSDhRaws),
 fSSDhRecs(qadm.fSSDhRecs),
 fRawsOffset(qadm.fRawsOffset),
-fRecsOffset(qadm.fRecsOffset)
-{
+fRecsOffset(qadm.fRecsOffset) {
   //copy ctor 
   fAliITSQADataMakerRec->SetName((const char*)qadm.fAliITSQADataMakerRec->GetName()) ; 
   fAliITSQADataMakerRec->SetTitle((const char*)qadm.fAliITSQADataMakerRec->GetTitle());
@@ -90,6 +99,13 @@ AliITSQASSDDataMakerRec& AliITSQASSDDataMakerRec::operator = (const AliITSQASSDD
   return *this;
 }
 
+//__________________________________________________________________
+AliITSQASSDDataMakerRec::~AliITSQASSDDataMakerRec() {
+  // destructor
+  for(Int_t i = 0; i < fgkSSDMODULES; i++) 
+    if(fHistSSDRawSignalModule[i]) delete fHistSSDRawSignalModule[i];
+}
+
 //____________________________________________________________________________ 
 void AliITSQASSDDataMakerRec::StartOfDetectorCycle()
 {
@@ -105,17 +121,21 @@ void AliITSQASSDDataMakerRec::EndOfDetectorCycle(AliQA::TASKINDEX /*task*/, TObj
   
   //SSD occupancy plots
   if(fkOnline) {
-    Int_t fLayer = 0, fLadder = 0, fModule = 0;
-    Int_t fOccPosition = 0;
-    for(Int_t i = 0; i < fgkSSDMODULES; i++) {
-      AliITSgeomTGeo::GetModuleId(i+500,fLayer,fLadder,fModule); 
-      fOccPosition  = (fLayer == 5) ? fLadder : fLadder + 34;
-      Double_t occupancy = GetSSDOccupancyRaws(fHistSSDRawSignalModule[i]);
-      //if(occupancy > 0) {
-      //AliInfo(Form("========================================="));
-      //AliInfo(Form("%s Position: %d - Initial histos: %d - Occupancy: %lf\n",fHistSSDRawSignalModule[i]->GetName(),fOccPosition,fInitialHistograms,occupancy));
-      //}
-      fAliITSQADataMakerRec->GetRawsData(fRawsOffset + fOccPosition - 1)->Fill(fModule,occupancy);
+    Int_t fLayer = 0, fLadder = 0;
+    Int_t fOccPosition = 0; 
+    for(Int_t iLayer = 5; iLayer < 7; iLayer++) {
+      if(fSSDEvent != 0)
+       ((TH2F *)fAliITSQADataMakerRec->GetRawsData(fLayer))->Scale(1./fSSDEvent);
+      for(Int_t iLadder = 1; iLadder < AliITSgeomTGeo::GetNLadders(iLayer) + 1; iLadder++) {
+       fOccPosition  = (fLayer == 5) ? fLadder : fLadder + fgkSSDLADDERSLAYER5;
+       if(fSSDEvent != 0) {
+         //P-SIDE OCCUPANCY - scaling
+         fAliITSQADataMakerRec->GetRawsData(fRawsOffset -1 + 2*fLadder - 1)->Scale(1./fSSDEvent);
+
+         //N-SIDE OCCUPANCY - scaling
+         fAliITSQADataMakerRec->GetRawsData(fRawsOffset -1 + 2*fLadder)->Scale(1./fSSDEvent);
+       }
+      }      
     }
   }//online flag for SSD
   //AliQAChecker::Instance()->Run( AliQA::kITS , task, list);
@@ -127,7 +147,6 @@ void AliITSQASSDDataMakerRec::InitRaws() {
   // Initialization for RAW data - SSD -
   fRawsOffset = (fAliITSQADataMakerRec->fRawsQAList)->GetEntries();
 
-  const Int_t fSSDLADDERS = 72;
   if(fkOnline) {
     AliInfo("Book Online Histograms for SSD\n");
   }
@@ -136,28 +155,62 @@ void AliITSQASSDDataMakerRec::InitRaws() {
   }
   AliInfo(Form("Number of histograms (SPD+SDD): %d\n",fRawsOffset));
   TString fTitle = 0;
-  //Int_t fLayer = 0,fLadder = 0, fModule = 0;
   //book online QA histos
   if(fkOnline) {
-    TH1D *hOccupancyLadder[fSSDLADDERS];
+    //data size plots
+    TH1F *hSSDDataSize = new TH1F("hSSDDataSize",";log(SSD data size) [Bytes];Events",100,3,8);
+    fAliITSQADataMakerRec->Add2RawsList(hSSDDataSize, 0);
+    TH1F *hSSDDataSizePercentage = new TH1F("hSSDDataSizePercentage",";SSD data size [%];Events",100,0,100);
+    fAliITSQADataMakerRec->Add2RawsList(hSSDDataSizePercentage, 1);
+    TH1F *hDDLId = new TH1F("hDDLId",";DDL id;Events",100,510,530);
+    fAliITSQADataMakerRec->Add2RawsList(hDDLId, 2);
+    TH1F *hSSDDataSizePerDDL = new TH1F("hSSDDataSizePerDDL",";DDL id;<SSD data size> [MB]",100,510,530);
+    fAliITSQADataMakerRec->Add2RawsList(hSSDDataSizePerDDL, 3);
+    TH1F *hSSDDataSizePerLDC = new TH1F("hSSDDataSizePerLDC",";LDC id;<SSD data size> [MB]",100,0,20);
+    fAliITSQADataMakerRec->Add2RawsList(hSSDDataSizePerLDC, 4);
+
+    //top level occupancy plots
+    TH2D *hSSDOccupancyLayer5 = new TH2D("hSSDOccupancyLayer5",";N_{modules};N_{Ladders}",fgkSSDMODULESPERLADDERLAYER5,0,fgkSSDMODULESPERLADDERLAYER5,3*fgkSSDLADDERSLAYER5,0,fgkSSDLADDERSLAYER5);  
+    Char_t fLabel[3];
+    for(Int_t iBin = 1; iBin < fgkSSDMODULESPERLADDERLAYER5 + 1; iBin++){
+      sprintf(fLabel,"%d",iBin);
+      hSSDOccupancyLayer5->GetXaxis()->SetBinLabel(iBin,fLabel);
+    }
+    fAliITSQADataMakerRec->Add2RawsList(hSSDOccupancyLayer5, 5);
+    TH2D *hSSDOccupancyLayer6 = new TH2D("hSSDOccupancyLayer6",";N_{modules};N_{Ladders}",fgkSSDMODULESPERLADDERLAYER6,0,fgkSSDMODULESPERLADDERLAYER6,3*fgkSSDLADDERSLAYER6,0,fgkSSDLADDERSLAYER6);
+    for(Int_t iBin = 1; iBin < fgkSSDMODULESPERLADDERLAYER6 + 1; iBin++){
+      sprintf(fLabel,"%d",iBin);
+      hSSDOccupancyLayer6->GetXaxis()->SetBinLabel(iBin,fLabel);
+    }
+    fAliITSQADataMakerRec->Add2RawsList(hSSDOccupancyLayer6, 6);
+    fRawsOffset = 7;
+    
+    TH1D *hOccupancyLadder[2*(fgkSSDLADDERSLAYER5 + fgkSSDLADDERSLAYER6)];
     for(Int_t iLayer = 5; iLayer < 7; iLayer++) {
       for(Int_t iLadder = 1; iLadder < AliITSgeomTGeo::GetNLadders(iLayer) + 1; iLadder++) {
+       //P-side occupancy plots
        fTitle = "SSD_Occupancy_Layer"; fTitle += iLayer;
-       fTitle += "_Ladder"; fTitle += iLadder;
+       fTitle += "_Ladder"; fTitle += iLadder; fTitle += "_PSide";
        hOccupancyLadder[fSSDhRaws] = new TH1D(fTitle.Data(),fTitle.Data(),AliITSgeomTGeo::GetNDetectors(iLayer),0,AliITSgeomTGeo::GetNDetectors(iLayer));
        hOccupancyLadder[fSSDhRaws]->GetXaxis()->SetTitleColor(1);
        hOccupancyLadder[fSSDhRaws]->GetXaxis()->SetTitle("Module number");
        hOccupancyLadder[fSSDhRaws]->GetYaxis()->SetTitle("Occupancy [%]");
-       hOccupancyLadder[fSSDhRaws]->SetMarkerStyle(kFullCircle);
        fAliITSQADataMakerRec->Add2RawsList(hOccupancyLadder[fSSDhRaws], fRawsOffset + fSSDhRaws);      
        fSSDhRaws++;
-      }//ladder loop
+       //N-side occupancy plots
+       fTitle = "SSD_Occupancy_Layer"; fTitle += iLayer;
+       fTitle += "_Ladder"; fTitle += iLadder; fTitle += "_NSide";
+       hOccupancyLadder[fSSDhRaws] = new TH1D(fTitle.Data(),fTitle.Data(),AliITSgeomTGeo::GetNDetectors(iLayer),0,AliITSgeomTGeo::GetNDetectors(iLayer));
+       hOccupancyLadder[fSSDhRaws]->GetXaxis()->SetTitleColor(1);
+       hOccupancyLadder[fSSDhRaws]->GetXaxis()->SetTitle("Module number");
+       hOccupancyLadder[fSSDhRaws]->GetYaxis()->SetTitle("Occupancy [%]");
+       fAliITSQADataMakerRec->Add2RawsList(hOccupancyLadder[fSSDhRaws], fRawsOffset + fSSDhRaws);      
+       fSSDhRaws++;
+       }//ladder loop
     }//layer loop
   }//online flag
   AliDebug(1,Form("%d SSD Raws histograms booked\n",fSSDhRaws));
-  AliInfo(Form("Number of histograms (SPD+SDD+SSD): %d\n",fRawsOffset+fSSDhRaws));
-  
-  
+  AliInfo(Form("Number of histograms (SPD+SDD+SSD): %d\n",fRawsOffset+fSSDhRaws));  
 }
 
 //____________________________________________________________________________
@@ -166,30 +219,85 @@ void AliITSQASSDDataMakerRec::MakeRaws(AliRawReader* rawReader) {
   Int_t fStripNumber;
   Int_t fHistPosition;
   Int_t fLayer = 0,fLadder = 0, fModule = 0;
+  
+  Double_t fSizePerDDL[fgkNumOfDDLs];
+  Double_t fSizePerLDC[20];
+  Double_t sumSSDDataSize = 0.0;
+  Double_t eventSize = -1.0;
+
+  if(fkOnline) {
+    //reset the signal vs strip number histograms
+    for(Int_t i = 0; i < fgkSSDMODULES; i++) 
+      fHistSSDRawSignalModule[i]->Reset();
+  
+    rawReader->Select("ITSSSD",-1,-1);  
+    rawReader->Reset(); //rawReader->NextEvent();   
+    fSSDEvent += 1;
+    AliITSRawStreamSSD fSSDStream(rawReader);    
+    AliRawReaderRoot *rootReader = (AliRawReaderRoot *)rawReader;
+    if(rootReader) {
+      const AliRawEventHeaderBase *header = rootReader->GetEventHeader();
+      if(header)
+       eventSize = header->GetEventSize();
+    }
+    while (fSSDStream.Next()) {
+      if(fSSDStream.GetModuleID() < 0) continue;
+      fSizePerDDL[rawReader->GetDDLID()] = rawReader->GetDataSize();
+      fSizePerLDC[rawReader->GetLDCId()] = rawReader->GetDataSize();
+      AliITSgeomTGeo::GetModuleId(fSSDStream.GetModuleID(),fLayer,fLadder,fModule);
+      fStripNumber = (fSSDStream.GetSideFlag() == 0) ? fSSDStream.GetStrip() : fSSDStream.GetStrip() + fgkNumberOfPSideStrips;
+      fHistPosition = (fLayer == 5) ? ((fLadder - 1)*fgkSSDMODULESPERLADDERLAYER5 + fModule - 1) : ((fLadder - 1)*fgkSSDMODULESPERLADDERLAYER6 + fModule + fgkSSDMODULESLAYER5 - 1);
+      //AliInfo(Form("ModulePosition: %d - Layer: %d - Ladder: %d - Module: %d\n",fHistPosition,fLayer,fLadder,fModule));
+      fHistSSDRawSignalModule[fHistPosition]->Fill(fStripNumber,fSSDStream.GetSignal());
+    }//streamer loop   
 
-  rawReader->Select("ITSSSD",-1,-1);  
-  rawReader->Reset();                         
-  AliITSRawStreamSSD fSSDStream(rawReader);    
-  while (fSSDStream.Next()) {
-    if(fSSDStream.GetModuleID() < 0) continue;
-    AliITSgeomTGeo::GetModuleId(fSSDStream.GetModuleID(),fLayer,fLadder,fModule);
-    fStripNumber  = (fSSDStream.GetSideFlag() == 0) ? fSSDStream.GetStrip() : fSSDStream.GetStrip() + 768;
-    fHistPosition = (fLayer == 5) ? ((fLadder - 1)*22 + fModule - 1) : ((fLadder - 1)*25 + fModule + 748 - 1);
-    //AliInfo(Form("ModulePosition: %d - Layer: %d - Ladder: %d - Module: %d\n",fHistPosition,fLayer,fLadder,fModule));
-    fHistSSDRawSignalModule[fHistPosition]->Fill(fStripNumber,fSSDStream.GetSignal());
-  }//streamer loop
+    
+    for(Int_t i = 0; i < fgkNumOfDDLs; i++) {
+      sumSSDDataSize += fSizePerDDL[i];
+      if(fSizePerDDL[i] > 0) 
+       (fAliITSQADataMakerRec->GetRawsData(2))->Fill(i+512);
+      (fAliITSQADataMakerRec->GetRawsData(3))->Fill(i+512,fSizePerDDL[i]/1e+06);
+    }
+    for(Int_t i = 0; i < 20; i++) 
+      (fAliITSQADataMakerRec->GetRawsData(4))->Fill(i,fSizePerLDC[i]/1e+06);
+    if(sumSSDDataSize) 
+      (fAliITSQADataMakerRec->GetRawsData(0))->Fill(TMath::Log10(sumSSDDataSize));
+    if(eventSize)
+      (fAliITSQADataMakerRec->GetRawsData(1))->Fill(100.*sumSSDDataSize/eventSize);
+    //AliInfo(Form("EVENT: %d\n",fSSDEvent));
+    Double_t occupancy = 0.0;
+    Int_t lLadderLocationY = 0;
+    
+    Int_t fOccPosition = 0;
+    for(Int_t i = 0; i < fgkSSDMODULES; i++) {
+      AliITSgeomTGeo::GetModuleId(i+500,fLayer,fLadder,fModule); 
+      fOccPosition  = (fLayer == 5) ? fLadder : fLadder + fgkSSDLADDERSLAYER5;
+      //P-SIDE OCCUPANCY
+      occupancy = GetSSDOccupancyRaws(fHistSSDRawSignalModule[i],0);
+      fAliITSQADataMakerRec->GetRawsData(fRawsOffset -1 + 2*fLadder - 1)->Fill(fModule,occupancy);
+      lLadderLocationY = 3*fLadder; // sideP=1 sideN=0
+      ((TH2D *)fAliITSQADataMakerRec->GetRawsData(fLayer))->SetBinContent(fModule,lLadderLocationY,occupancy);
+      //N-SIDE OCCUPANCY
+      occupancy = GetSSDOccupancyRaws(fHistSSDRawSignalModule[i],1);
+      fAliITSQADataMakerRec->GetRawsData(fRawsOffset -1 + 2*fLadder)->Fill(fModule,occupancy);
+      ((TH2D *)fAliITSQADataMakerRec->GetRawsData(fLayer))->SetBinContent(fModule,lLadderLocationY-1,occupancy);
+    }
+  }//online flag for SSD
 }
 
 //____________________________________________________________________________ 
-Double_t AliITSQASSDDataMakerRec::GetSSDOccupancyRaws(TH1 *lHisto) { 
+Double_t AliITSQASSDDataMakerRec::GetSSDOccupancyRaws(TH1 *lHisto, Int_t stripside) { 
   // bo: TDC >0 or # of sigmas wrt noise ?
+  //stripside == 0 --> P-side
+  //stripside == 1 --> N-side
   Int_t lNumFiredBins = 0;
-  for(Int_t iBin = 1; iBin < lHisto->GetNbinsX(); iBin++){
+  for(Int_t iBin = 1 + stripside*fgkNumberOfPSideStrips; iBin < fgkNumberOfPSideStrips*(1 + stripside); iBin++){
     if (lHisto->GetBinContent(iBin))
       lNumFiredBins++; 
   }
+  
   Double_t lOccupancy = (100.*lNumFiredBins)/lHisto->GetNbinsX(); // percentage
-  //if(lOccupancy > 0) 
   //AliInfo(Form("Fired strips: %d - Total strips: %d - Occupancy :%lf\n",lNumFiredBins,lHisto->GetNbinsX(),lOccupancy));
   
   return lOccupancy;
@@ -214,4 +322,3 @@ void AliITSQASSDDataMakerRec::MakeRecPoints(TTree * /*clustersTree*/)
   // Fill QA for recpoints - SSD -
 }
 
-