LCOV - code coverage report
Current view: top level - ITS/ITSbase - AliITSRawStreamSPDErrorLog.cxx (source / functions) Hit Total Coverage
Test: coverage.info Lines: 1 279 0.4 %
Date: 2016-06-14 17:26:59 Functions: 1 32 3.1 %

          Line data    Source code
       1             : ///////////////////////////////////////////////////////////////////////
       2             : // Author: Henrik Tydesjo                                            //
       3             : // For easier handling of error messages from AliITSRawStreamSPD.    //
       4             : // The purpose of this class is to make possible the switch to the   //
       5             : // AliRoot raw data parsing routines in the onlinte monitoring       //
       6             : // programs, like SPD-MOOD, and still keep all the old functionality.//
       7             : ///////////////////////////////////////////////////////////////////////
       8             : 
       9             : #include "AliITSRawStreamSPDErrorLog.h"
      10             : #include "AliLog.h"
      11             : 
      12             : /* $Id$ */
      13             : 
      14         118 : ClassImp(AliITSRawStreamSPDErrorLog)
      15             : //________________________________________________________________________________________________
      16           0 : AliITSRawStreamSPDErrorLog::AliITSRawStreamSPDErrorLog() :
      17           0 :   fText(NULL), fTextTmpGeneral(NULL)
      18           0 : {
      19             :   // default constructor
      20           0 :   fText=new TGText();
      21           0 :   fTextTmpGeneral=new TGText();
      22           0 :   for (UInt_t eq=0; eq<20; eq++) {
      23           0 :     fTextTmp[eq] = new TGText();
      24           0 :     fNEvents[eq] = 0;
      25           0 :     fByteOffset[eq] = 0;
      26           0 :     fSuppressEq[eq] = kFALSE;
      27           0 :     for (UInt_t err=0; err<kNrErrorCodes; err++) {
      28           0 :       fNErrors[err][eq] = 0;
      29           0 :       fNErrorsTotal[err][eq] = 0;
      30             :     }
      31             :   }
      32           0 :   for (UInt_t err=0; err<kNrErrorCodes; err++) {
      33           0 :     fSuppressMess[err] = kFALSE;
      34             :   }
      35           0 :   InitHistograms();
      36           0 : }
      37             : //________________________________________________________________________________________________
      38             : AliITSRawStreamSPDErrorLog::AliITSRawStreamSPDErrorLog(const AliITSRawStreamSPDErrorLog& logger) :
      39           0 :   TObject(logger), fText(NULL), fTextTmpGeneral(NULL)
      40           0 : {
      41             :   // copy constructor
      42           0 :   for (UInt_t eq=0; eq<20; eq++) {
      43           0 :     for (UInt_t err=0; err<kNrErrorCodes; err++) {
      44           0 :       fNErrors[err][eq] = logger.fNErrors[err][eq];
      45           0 :       fNErrorsTotal[err][eq] = logger.fNErrorsTotal[err][eq];
      46           0 :       fErrEventCounter[err][eq] = logger.fErrEventCounter[err][eq];
      47             :     }
      48           0 :     fNEvents[eq] = logger.fNEvents[eq];
      49           0 :     fByteOffset[eq] = logger.fByteOffset[eq];
      50           0 :     fSuppressEq[eq] = logger.fSuppressEq[eq];
      51             :   }
      52           0 :   for (UInt_t err=0; err<kNrErrorCodes; err++) {
      53           0 :     fSuppressMess[err] = logger.fSuppressMess[err];
      54             :   }
      55             :   
      56           0 :   fText = new TGText(logger.fText);
      57           0 :   fTextTmpGeneral = new TGText(logger.fTextTmpGeneral);
      58           0 :   for (UInt_t eq=0; eq<20; eq++) {
      59           0 :     fTextTmp[eq] = new TGText(logger.fTextTmp[eq]);
      60             :   }
      61             :   
      62           0 :   for (UInt_t eq=0; eq<20; eq++) {
      63           0 :     for (UInt_t err=0; err<kNrErrorCodes; err++) {
      64           0 :       fConsErrEvent[err][eq] = new TGraph(*logger.fConsErrEvent[err][eq]);
      65           0 :       fConsErrPos[err][eq] = new TGraph(*logger.fConsErrPos[err][eq]);
      66             :     }
      67           0 :     fConsErrType[eq] = new TH1F(*logger.fConsErrType[eq]);
      68           0 :     fConsErrType[eq]->SetDirectory(0);
      69           0 :     fConsErrFraction[eq] = new TH1F(*logger.fConsErrFraction[eq]);
      70           0 :     fConsErrFraction[eq]->SetDirectory(0);
      71             :   }
      72             :   
      73           0 : }
      74             : //________________________________________________________________________________________________
      75             : AliITSRawStreamSPDErrorLog& AliITSRawStreamSPDErrorLog::operator=(const AliITSRawStreamSPDErrorLog& logger) {
      76             :   // assignment operator
      77           0 :   if (this!=&logger) {
      78           0 :     delete fText;
      79           0 :     delete fTextTmpGeneral;
      80           0 :     for(Int_t eq=0; eq<20;eq++){
      81           0 :     delete fTextTmp[eq];
      82             :     }
      83           0 :     this->DeleteHistograms();
      84             : 
      85           0 :     for (UInt_t eq=0; eq<20; eq++) {
      86           0 :       for (UInt_t err=0; err<kNrErrorCodes; err++) {
      87           0 :         fNErrors[err][eq] = logger.fNErrors[err][eq];
      88           0 :         fNErrorsTotal[err][eq] = logger.fNErrorsTotal[err][eq];
      89           0 :         fErrEventCounter[err][eq] = logger.fErrEventCounter[err][eq];
      90             :       }
      91           0 :       fNEvents[eq] = logger.fNEvents[eq];
      92           0 :       fByteOffset[eq] = logger.fByteOffset[eq];
      93           0 :       fSuppressEq[eq] = logger.fSuppressEq[eq];
      94             :     }
      95           0 :     for (UInt_t err=0; err<kNrErrorCodes; err++) {
      96           0 :       fSuppressMess[err] = logger.fSuppressMess[err];
      97             :     }
      98             : 
      99           0 :     fText = new TGText(logger.fText);
     100           0 :     fTextTmpGeneral = new TGText(logger.fTextTmpGeneral);
     101           0 :     for (UInt_t eq=0; eq<20; eq++) {
     102           0 :       fTextTmp[eq] = new TGText(logger.fTextTmp[eq]);
     103             :     }
     104             :     
     105           0 :     for (UInt_t eq=0; eq<20; eq++) {
     106           0 :       for (UInt_t err=0; err<kNrErrorCodes; err++) {
     107           0 :         fConsErrEvent[err][eq] = new TGraph(*logger.fConsErrEvent[err][eq]);
     108           0 :         fConsErrPos[err][eq] = new TGraph(*logger.fConsErrPos[err][eq]);
     109             :       }
     110           0 :       fConsErrType[eq] = new TH1F(*logger.fConsErrType[eq]);
     111           0 :       fConsErrType[eq]->SetDirectory(0);
     112           0 :       fConsErrFraction[eq] = new TH1F(*logger.fConsErrFraction[eq]);
     113           0 :       fConsErrFraction[eq]->SetDirectory(0);
     114             :     }
     115             : 
     116           0 :   }
     117           0 :   return *this;
     118             :   
     119           0 : }
     120             : //________________________________________________________________________________________________
     121           0 : AliITSRawStreamSPDErrorLog::~AliITSRawStreamSPDErrorLog() {
     122             :   // destructor
     123           0 :   DeleteHistograms();
     124           0 :   delete fText;
     125           0 :   delete fTextTmpGeneral;
     126           0 :   for(Int_t eq=0; eq<20; eq++){
     127           0 :   delete fTextTmp[eq];
     128             :   }
     129           0 : }
     130             : //________________________________________________________________________________________________
     131             : void AliITSRawStreamSPDErrorLog::InitHistograms() {
     132             :   // initialize histograms
     133           0 :   for (UInt_t eq=0; eq<20; eq++) {
     134           0 :     TString histName, histTitle;
     135           0 :     histName = Form("ConsErrType %d",eq);
     136           0 :     histTitle = Form("Distribution of errors, eq %d",eq);
     137           0 :     fConsErrType[eq]=new TH1F(histName.Data(),histTitle.Data(),kNrErrorCodes,-0.5,kNrErrorCodes-0.5);
     138           0 :     fConsErrType[eq]->SetDirectory(0);
     139           0 :     fConsErrType[eq]->SetXTitle("Error Code");
     140           0 :     fConsErrType[eq]->SetYTitle("Nr Errors");
     141             :     
     142           0 :     histName = Form("ConsErrFraction %d",eq);
     143           0 :     histTitle = Form("Fraction of events with errors, eq %d",eq);
     144           0 :     fConsErrFraction[eq]=new TH1F(histName.Data(),histTitle.Data(),kNrErrorCodes,-0.5,kNrErrorCodes-0.5);
     145           0 :     fConsErrFraction[eq]->SetDirectory(0);
     146           0 :     fConsErrFraction[eq]->SetXTitle("Error Code");
     147           0 :     fConsErrFraction[eq]->SetYTitle("Fraction");
     148             :     
     149           0 :     for (UInt_t err=0; err<kNrErrorCodes; err++) {
     150           0 :       fConsErrEvent[err][eq]=new TGraph();
     151           0 :       fConsErrPos[err][eq]=new TGraph();
     152           0 :       fConsErrPosTMP[err][eq]=new TGraph();
     153           0 :       fErrEventCounter[err][eq] = 0;
     154           0 :       fErrPosCounter[err][eq] = 0;
     155           0 :       fErrPosTMPCounter[err][eq] = 0;
     156             :     }
     157           0 :   }
     158           0 : }
     159             : //________________________________________________________________________________________________
     160             : void AliITSRawStreamSPDErrorLog::DeleteHistograms() {
     161             :   // delete histograms
     162           0 :   for (UInt_t eq=0; eq<20; eq++) {
     163           0 :     delete fConsErrType[eq];
     164           0 :     delete fConsErrFraction[eq];
     165           0 :     for (UInt_t err=0; err<kNrErrorCodes; err++) {
     166           0 :       delete fConsErrEvent[err][eq];
     167           0 :       delete fConsErrPos[err][eq];
     168           0 :       delete fConsErrPosTMP[err][eq];
     169             :     }
     170             :   }
     171           0 : }
     172             : //________________________________________________________________________________________________
     173             : void AliITSRawStreamSPDErrorLog::Reset() {
     174             :   // Reset
     175           0 :   fText->Clear();
     176           0 :   fTextTmpGeneral->Clear();
     177           0 :   for (UInt_t eq=0; eq<20; eq++) {
     178           0 :     fTextTmp[eq]->Clear();
     179           0 :     fConsErrType[eq]->Reset();
     180           0 :     fConsErrFraction[eq]->Reset();
     181           0 :     fNEvents[eq] = 0;
     182           0 :     for (UInt_t err=0; err<kNrErrorCodes; err++) {
     183           0 :       fNErrors[err][eq] = 0;
     184           0 :       fNErrorsTotal[err][eq] = 0;
     185           0 :       delete fConsErrEvent[err][eq];
     186           0 :       delete fConsErrPos[err][eq];
     187           0 :       delete fConsErrPosTMP[err][eq];
     188           0 :       fErrEventCounter[err][eq] = 0;
     189           0 :       fErrPosCounter[err][eq] = 0;
     190           0 :       fErrPosTMPCounter[err][eq] = 0;
     191           0 :       fConsErrEvent[err][eq] = new TGraph();
     192           0 :       fConsErrPos[err][eq] = new TGraph();
     193           0 :       fConsErrPosTMP[err][eq] = new TGraph();
     194             :     }
     195             :   }
     196           0 : }
     197             : //________________________________________________________________________________________________
     198             : void AliITSRawStreamSPDErrorLog::ProcessError(UInt_t errorCode, UInt_t eq, Int_t bytesRead, Int_t headersRead, const Char_t *errMess) {
     199             :   // Process an error
     200           0 :   if (eq>=20) {
     201           0 :     AliWarning(Form("Equipment number (%d) out of bounds",eq));
     202           0 :     return;
     203             :   }
     204             :   // check if we want to exclude the error...
     205           0 :   if (!(fSuppressMess[errorCode] || fSuppressEq[eq])) {
     206           0 :     fNErrors[errorCode][eq]++;
     207           0 :     fNErrorsTotal[errorCode][eq]++;
     208           0 :     if (errorCode!=kTotal) {
     209           0 :       fNErrors[kTotal][eq]++;
     210           0 :       fNErrorsTotal[kTotal][eq]++;
     211           0 :     }
     212             : 
     213           0 :     if (bytesRead>=0) {
     214           0 :       fConsErrPosTMP[errorCode][eq]->SetPoint(fErrPosTMPCounter[errorCode][eq],0,bytesRead+fByteOffset[eq]);
     215           0 :       fErrPosTMPCounter[errorCode][eq]++;
     216           0 :       if (errorCode!=kTotal) {
     217           0 :         fConsErrPosTMP[kTotal][eq]->SetPoint(fErrPosTMPCounter[kTotal][eq],0,bytesRead+fByteOffset[eq]);
     218           0 :         fErrPosTMPCounter[kTotal][eq]++;
     219           0 :       }
     220             :     }
     221             : 
     222           0 :     TString msg;
     223           0 :     if (bytesRead<0) {
     224           0 :       msg = Form("%s",errMess);
     225             :     }
     226             :     else {
     227           0 :       msg = Form("%s (%d bytes read, %d chip headers read)",errMess,bytesRead+fByteOffset[eq],headersRead);
     228             :     }
     229           0 :     fTextTmp[eq]->InsLine(fTextTmp[eq]->RowCount(),msg.Data());
     230           0 :   }
     231           0 : }
     232             : //________________________________________________________________________________________________
     233             : void AliITSRawStreamSPDErrorLog::AddMessage(const Char_t *errMess) {
     234             :   // add a general message to the buffer
     235           0 :   fTextTmpGeneral->InsLine(fTextTmpGeneral->RowCount(),errMess);
     236           0 : }
     237             : //________________________________________________________________________________________________
     238             : void AliITSRawStreamSPDErrorLog::ResetEvent() {
     239             :   // reset error counters for current event
     240           0 :   for (UInt_t eq=0; eq<20; eq++) {
     241           0 :     for (UInt_t err=0; err<kNrErrorCodes; err++) {
     242           0 :       fNErrors[err][eq]=0;
     243             :     }
     244           0 :     fByteOffset[eq]=0;
     245           0 :     fTextTmpGeneral->Clear();
     246           0 :     fTextTmp[eq]->Clear();
     247             :   }
     248             : 
     249           0 :   for (UInt_t eq=0; eq<20; eq++) {
     250           0 :     for (UInt_t err=0; err<kNrErrorCodes; err++) {
     251           0 :       delete fConsErrPosTMP[err][eq];
     252           0 :       fErrPosTMPCounter[err][eq] = 0;
     253           0 :       fConsErrPosTMP[err][eq] = new TGraph();
     254             :     }
     255             :   }
     256           0 : }
     257             : //________________________________________________________________________________________________
     258             : void AliITSRawStreamSPDErrorLog::AddErrorMessagesFromCurrentEvent(UInt_t eventNum) {
     259           0 :   TString msg;
     260           0 :   if (fText->RowCount()>5000) {
     261           0 :     fText->Clear();
     262           0 :     msg = "*** previous errors cleared ***";
     263           0 :     fText->InsLine(fText->RowCount(),msg.Data());
     264             :   }
     265           0 :   if (fTextTmpGeneral->RowCount()>1) {
     266           0 :     msg = Form("*** Event %d , General Errors: ***",eventNum);
     267           0 :     fText->InsLine(fText->RowCount(),msg.Data());
     268           0 :     fText->AddText(fTextTmpGeneral);
     269             :     //    fTextTmpGeneral->Clear();
     270             :   }
     271             : 
     272           0 :   for (UInt_t eq=0; eq<20; eq++) {
     273           0 :     if (fNErrors[kTotal][eq]>0) {
     274           0 :       msg = Form("*** Event %d , Eq %d: ***",eventNum,eq);
     275           0 :       fText->InsLine(fText->RowCount(),msg.Data());
     276           0 :       fText->AddText(fTextTmp[eq]);
     277           0 :       fText->InsLine(fText->RowCount()," ");
     278             :     }
     279             :     //    fTextTmp[eq]->Clear();
     280             :   }
     281           0 : }
     282             : //________________________________________________________________________________________________
     283             : void AliITSRawStreamSPDErrorLog::ProcessEvent(UInt_t eventNum) {
     284             :   // summarize the information for the current event
     285             : //  TString msg;
     286             : //  if (fText->RowCount()>5000) {
     287             : //    fText->Clear();
     288             : //    msg = "*** previous errors cleared ***";
     289             : //    fText->InsLine(fText->RowCount(),msg.Data());
     290             : //  }
     291             : //  if (fTextTmpGeneral->RowCount()>1) {
     292             : //    msg = Form("*** Event %d , General Errors: ***",eventNum);
     293             : //    fText->InsLine(fText->RowCount(),msg.Data());
     294             : //    fText->AddText(fTextTmpGeneral);
     295             : //    fTextTmpGeneral->Clear();
     296             : //  }
     297             : 
     298           0 :   AddErrorMessagesFromCurrentEvent(eventNum);
     299             : 
     300           0 :   for (UInt_t eq=0; eq<20; eq++) {
     301           0 :     for (UInt_t err=0; err<kNrErrorCodes; err++) {
     302           0 :       fConsErrType[eq]->Fill(err,fNErrors[err][eq]);
     303           0 :       if (fNErrors[err][eq]>0) {
     304           0 :         fConsErrEvent[err][eq]->SetPoint(fErrEventCounter[err][eq],eventNum,fNErrors[err][eq]);
     305           0 :         fErrEventCounter[err][eq]++;
     306           0 :         fConsErrFraction[eq]->Fill(err);
     307           0 :       }
     308           0 :       for (UInt_t pind=0; pind<fErrPosTMPCounter[err][eq]; pind++) {
     309           0 :         Double_t x,y;
     310           0 :         fConsErrPosTMP[err][eq]->GetPoint(pind,x,y);
     311           0 :         fConsErrPos[err][eq]->SetPoint(fErrPosCounter[err][eq],eventNum,y);
     312           0 :         fErrPosCounter[err][eq]++;
     313           0 :       }
     314             :     }
     315             : 
     316           0 :     fNEvents[eq]++;
     317             : //    if (fNErrors[kTotal][eq]>0) {
     318             : //      msg = Form("*** Event %d , Eq %d: ***",eventNum,eq);
     319             : //      fText->InsLine(fText->RowCount(),msg.Data());
     320             : //      fText->AddText(fTextTmp[eq]);
     321             : //      fText->InsLine(fText->RowCount()," ");
     322             : //    }
     323             : //    fByteOffset[eq]=0;
     324             : //    fTextTmp[eq]->Clear();
     325             :   }
     326             : 
     327           0 : }
     328             : //________________________________________________________________________________________________
     329             : void AliITSRawStreamSPDErrorLog::SummarizeEvent(UInt_t eventNum) {
     330             :   // summarize the information for the current event 
     331           0 :   ProcessEvent(eventNum);
     332           0 :   ResetEvent();
     333           0 : }
     334             : //________________________________________________________________________________________________
     335             : void AliITSRawStreamSPDErrorLog::SetByteOffset(UInt_t eq, Int_t size) {
     336             :   // set byte offset (equipment header size)
     337           0 :   if (eq<20) {
     338           0 :     fByteOffset[eq]=size;
     339           0 :   }
     340             :   else {
     341           0 :     AliWarning(Form("Equipment number (%d) out of range",eq));
     342             :   }
     343           0 : }
     344             : //________________________________________________________________________________________________
     345             : void AliITSRawStreamSPDErrorLog::SuppressErrorMessages(UInt_t errorCode, Bool_t suppr) {
     346             :   // suppress error messages for specific error code
     347           0 :   if (errorCode<kNrErrorCodes) {
     348           0 :     fSuppressMess[errorCode] = suppr;
     349           0 :   }
     350             :   else {
     351           0 :     AliWarning(Form("Error code (%d) out of range",errorCode));
     352             :   }
     353           0 : }
     354             : //________________________________________________________________________________________________
     355             : void AliITSRawStreamSPDErrorLog::SuppressErrorEq(UInt_t eq, Bool_t suppr) {
     356             :   // suppress error messages for specific equipment
     357           0 :   if (eq<20) {
     358           0 :     fSuppressEq[eq] = suppr;
     359           0 :   }
     360             :   else {
     361           0 :     AliWarning(Form("Eq id (%d) out of range",eq));
     362             :   }
     363           0 : }
     364             : //________________________________________________________________________________________________
     365             : UInt_t AliITSRawStreamSPDErrorLog::GetNrErrors(UInt_t errorCode, UInt_t eq) {
     366             :   // returns the number of errors for this event for a specific error code and equipment
     367           0 :   if (errorCode<kNrErrorCodes && eq<20) return fNErrors[errorCode][eq];
     368             :   else {
     369           0 :     AliWarning(Form("Error code (%d) or equipment (%d) out of range, returning 0",errorCode,eq));
     370           0 :     return 0;
     371             :   }
     372           0 : }
     373             : //________________________________________________________________________________________________
     374             : UInt_t AliITSRawStreamSPDErrorLog::GetNrErrorsAllEq(UInt_t errorCode) {
     375             :   // returns the number of errors for this event for a specific error code and all equipments
     376           0 :   if (errorCode<kNrErrorCodes) {
     377             :     UInt_t returnval=0;
     378           0 :     for (UInt_t eq=0; eq<20; eq++) {
     379           0 :       returnval += fNErrors[errorCode][eq];
     380             :     }
     381             :     return returnval;
     382             :   }
     383             :   else {
     384           0 :     AliWarning(Form("Error code (%d) out of range, returning 0",errorCode));
     385           0 :     return 0;
     386             :   }
     387           0 : }
     388             : //________________________________________________________________________________________________
     389             : UInt_t AliITSRawStreamSPDErrorLog::GetNrErrorsTotal(UInt_t errorCode, UInt_t eq) {
     390             :   // returns the total number of errors for a specific error code and equipment
     391           0 :   if (errorCode<kNrErrorCodes && eq<20) {
     392           0 :     return fNErrorsTotal[errorCode][eq];
     393             :     //    return (UInt_t) fConsErrType[eq]->GetBinContent(errorCode+1);
     394             :   }
     395             :   else {
     396           0 :     AliWarning(Form("Error code (%d) or equipment (%d) out of range, returning 0",errorCode,eq));
     397           0 :     return 0;
     398             :   }
     399           0 : }
     400             : //________________________________________________________________________________________________
     401             : UInt_t AliITSRawStreamSPDErrorLog::GetNrErrorsTotalAllEq(UInt_t errorCode) {
     402             :   // returns the total number of errors for a specific error code and for all equipments
     403           0 :   if (errorCode<kNrErrorCodes) {
     404             :     UInt_t returnval=0;
     405           0 :     for (UInt_t eq=0; eq<20; eq++) {
     406           0 :       returnval += fNErrorsTotal[errorCode][eq];
     407             :       //      returnval += (UInt_t) fConsErrType[eq]->GetBinContent(errorCode+1);
     408             :     }
     409             :     return returnval;
     410             :   }
     411             :   else {
     412           0 :     AliWarning(Form("Error code (%d) out of range, returning 0",errorCode));
     413           0 :     return 0;
     414             :   }
     415           0 : }
     416             : //________________________________________________________________________________________________
     417             : TGraph* AliITSRawStreamSPDErrorLog::GetConsErrEvent(UInt_t errorCode, UInt_t eq) {
     418             :   // returns a pointer to the graph
     419           0 :   if (errorCode<kNrErrorCodes && eq<20) return fConsErrEvent[errorCode][eq];
     420             :   else {
     421           0 :     AliWarning(Form("Error code (%d) or equipment (%d) out of range, returning NULL",errorCode,eq));
     422           0 :     return NULL;
     423             :   }
     424           0 : }
     425             : //________________________________________________________________________________________________
     426             : TH1F* AliITSRawStreamSPDErrorLog::GetConsErrType(UInt_t eq) {
     427             :   // returns a pointer to the histogram
     428           0 :   if (eq<20) return fConsErrType[eq];
     429             :   else {
     430           0 :     AliWarning(Form("Eq nr (%d) out of bounds",eq));
     431           0 :     return NULL;
     432             :   }
     433           0 : }
     434             : //________________________________________________________________________________________________
     435             : TH1F* AliITSRawStreamSPDErrorLog::GetConsErrFraction(UInt_t eq) {
     436             :   // creates a new histogram and returns a pointer to it. 
     437             :   // NB!!! Take care of deleting this object later
     438           0 :   if (eq<20) {
     439           0 :     TH1F* returnhisto = (TH1F*)(fConsErrFraction[eq]->Clone());
     440           0 :     if (fNEvents[eq]!=0) returnhisto->Scale(1./fNEvents[eq]);
     441             :     //    returnhisto->SetMaximum(1.);
     442             :     return returnhisto;
     443             :   }
     444             :   else {
     445           0 :     AliWarning(Form("Eq nr (%d) out of bounds",eq));
     446           0 :     return NULL;
     447             :   }
     448           0 : }
     449             : //________________________________________________________________________________________________
     450             : TH1F* AliITSRawStreamSPDErrorLog::GetConsErrFractionUnScaled(UInt_t eq) {
     451             :   // returns a pointer to the histogram
     452           0 :   if (eq<20) return fConsErrFraction[eq];
     453             :   else {
     454           0 :     AliWarning(Form("Eq nr (%d) out of bounds",eq));
     455           0 :     return NULL;
     456             :   }
     457           0 : }
     458             : //________________________________________________________________________________________________
     459             : TGraph* AliITSRawStreamSPDErrorLog::GetConsErrPos(UInt_t errorCode, UInt_t eq) {
     460             :   // returns a pointer to the histogram
     461           0 :   if (errorCode<kNrErrorCodes && eq<20) return fConsErrPos[errorCode][eq];
     462             :   else {
     463           0 :     AliWarning(Form("Error code (%d) or equipment (%d) out of range, returning NULL",errorCode,eq));
     464           0 :     return NULL;
     465             :   }
     466           0 : }
     467             : //________________________________________________________________________________________________
     468             : UInt_t AliITSRawStreamSPDErrorLog::GetEventErrPosCounter(UInt_t errorCode, UInt_t eq) {
     469             :   // returns the number of errors with bytes information for current event
     470           0 :   if (errorCode<kNrErrorCodes && eq<20) return fErrPosTMPCounter[errorCode][eq];
     471             :   else {
     472           0 :     AliError(Form("Error code (%d) or equipment (%d) out of range, returning 0",errorCode,eq));
     473           0 :     return 0;
     474             :   }
     475           0 : }
     476             : //________________________________________________________________________________________________
     477             : UInt_t AliITSRawStreamSPDErrorLog::GetEventErrPos(UInt_t index, UInt_t errorCode, UInt_t eq) {
     478             :   // returns the bytes read for the index'th error of current event
     479           0 :   if (errorCode<kNrErrorCodes && eq<20) {
     480           0 :     if (index<fErrPosTMPCounter[errorCode][eq]) {
     481           0 :       Double_t x,y;
     482           0 :       fConsErrPosTMP[errorCode][eq]->GetPoint(index,x,y);
     483           0 :       return (UInt_t) y;
     484           0 :     }
     485             :     else {
     486           0 :       AliError(Form("Index %d out of range, returning 0",index));
     487           0 :     return 0;
     488             :     }
     489             :   }
     490             :   else {
     491           0 :     AliError(Form("Error code (%d) or equipment (%d) out of range, returning 0",errorCode,eq));
     492           0 :     return 0;
     493             :   }
     494             : 
     495           0 : }
     496             : 

Generated by: LCOV version 1.11