LCOV - code coverage report
Current view: top level - AD/ADbase - AliADDataDCS.cxx (source / functions) Hit Total Coverage
Test: coverage.info Lines: 1 171 0.6 %
Date: 2016-06-14 17:26:59 Functions: 1 13 7.7 %

          Line data    Source code
       1             : /**************************************************************************
       2             :  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
       3             :  *                                                                        *
       4             :  * Author: The ALICE Off-line Project.                                    *
       5             :  * Contributors are mentioned in the code where appropriate.              *
       6             :  *                                                                        *
       7             :  * Permission to use, copy, modify and distribute this software and its   *
       8             :  * documentation strictly for non-commercial purposes is hereby granted   *
       9             :  * without fee, provided that the above copyright notice appears in all   *
      10             :  * copies and that both the copyright notice and this permission notice   *
      11             :  * appear in the supporting documentation. The authors make no claims     *
      12             :  * about the suitability of this software for any purpose. It is          *
      13             :  * provided "as is" without express or implied warranty.                  *
      14             :  **************************************************************************/
      15             : 
      16             : 
      17             : #include "AliADDataDCS.h"
      18             : 
      19             : #include "AliDCSValue.h"
      20             : #include "AliLog.h"
      21             : #include "AliADConst.h"
      22             : 
      23             : #include <TGraph.h>
      24             : #include <TAxis.h>
      25             : #include <TCanvas.h>
      26             : #include <TTimeStamp.h>
      27             : #include <TMap.h>
      28             : #include <TString.h>
      29             : #include <TObjString.h>
      30             : #include <TH1F.h>
      31             : 
      32             : class TH2;
      33             : class AliCDBMetaData;
      34             : class TDatime;
      35             : 
      36             : // AliADDataDCS class
      37             : // main aim to introduce the aliases for the AD DCS
      38             : // data points to be then
      39             : // stored in the OCDB, and to process them. 
      40             : // ProcessData() method called by ADPreprocessor
      41             : 
      42          16 : ClassImp(AliADDataDCS)
      43             : 
      44             : //_____________________________________________________________________________
      45           0 : AliADDataDCS::AliADDataDCS():
      46           0 :         TObject(),
      47           0 :         fRun(0),
      48           0 :         fStartTime(0),
      49           0 :         fEndTime(0),
      50           0 :         fDaqStartTime(0),
      51           0 :         fDaqEndTime(0),
      52           0 :         fCtpStartTime(0),
      53           0 :         fCtpEndTime(0),
      54           0 :         fGraphs(NULL),
      55           0 :         fFEEParameters(NULL),
      56           0 :         fIsProcessed(kFALSE)
      57             : 
      58           0 : {
      59             :   // Default constructor
      60           0 :         for(int i=0;i<kNHvChannel;i++) {
      61           0 :                 fDeadChannel[i] = kFALSE;
      62           0 :                 fMeanHV[i]      = 100.0;
      63           0 :                 fWidthHV[i]     = 0.0; 
      64           0 :                 fHv[i]          = NULL;
      65             :         }
      66           0 : }
      67             : 
      68             : //_____________________________________________________________________________
      69           0 : AliADDataDCS::AliADDataDCS(Int_t nRun, UInt_t startTime, UInt_t endTime, UInt_t daqStartTime, UInt_t daqEndTime, UInt_t ctpStartTime, UInt_t ctpEndTime):
      70           0 :         TObject(),
      71           0 :         fRun(nRun),
      72           0 :         fStartTime(startTime),
      73           0 :         fEndTime(endTime),
      74           0 :         fDaqStartTime(daqStartTime),
      75           0 :         fDaqEndTime(daqEndTime),
      76           0 :         fCtpStartTime(ctpStartTime),
      77           0 :         fCtpEndTime(ctpEndTime),
      78           0 :         fGraphs(new TClonesArray("TGraph",kNGraphs)),
      79           0 :         fFEEParameters(new TMap()),
      80           0 :         fIsProcessed(kFALSE)
      81             : 
      82           0 : {
      83             : 
      84             :   // constructor with arguments
      85           0 :         for(int i=0;i<kNHvChannel;i++) {
      86           0 :          fDeadChannel[i] = kFALSE;        
      87           0 :          fMeanHV[i]      = 100.0;
      88           0 :      fWidthHV[i]     = 0.0; 
      89             :         }
      90           0 :         AliInfo(Form("\n\tRun %d \n\tTime Created %s \n\tTime Completed %s \n\tDAQ start %s \n\tDAQ end %s \n\tCTP start %s \n\tCTP end %s   ", nRun,
      91             :                 TTimeStamp(startTime).AsString(),
      92             :                 TTimeStamp(endTime).AsString(),
      93             :                 TTimeStamp(daqStartTime).AsString(),
      94             :                 TTimeStamp(daqEndTime).AsString(),
      95             :                 TTimeStamp(ctpStartTime).AsString(),
      96             :                 TTimeStamp(ctpEndTime).AsString()
      97             :                 ));
      98             :         
      99           0 :         fFEEParameters->SetOwnerValue();
     100           0 :         Init();
     101             : 
     102           0 : }
     103             : 
     104             : //_____________________________________________________________________________
     105           0 : AliADDataDCS::~AliADDataDCS() {
     106             : 
     107             :   // destructor
     108           0 :   fGraphs->Clear("C");
     109           0 :   delete fFEEParameters;
     110             : 
     111           0 : }
     112             : 
     113             : //_____________________________________________________________________________
     114             : Bool_t AliADDataDCS::ProcessData(TMap& aliasMap){
     115             : 
     116             :   // method to process the data
     117             :   Bool_t success = kTRUE;
     118             : 
     119           0 :   if(!(fAliasNames[0])) Init();
     120             : 
     121             :   TObjArray *aliasArr;
     122             :   AliDCSValue* aValue;
     123             : 
     124             :   // starting loop on aliases
     125           0 :   for(int iAlias=0; iAlias<kNAliases; iAlias++){
     126             : 
     127           0 :     aliasArr = (TObjArray*) aliasMap.GetValue(fAliasNames[iAlias].Data());
     128           0 :     if(!aliasArr){
     129           0 :       AliError(Form("Missing data points for alias %s!", fAliasNames[iAlias].Data()));
     130             :       success = kFALSE;
     131           0 :       continue;
     132             :     }
     133             : 
     134             :     //Introduce(iAlias, aliasArr);
     135             :     
     136           0 :     if(aliasArr->GetEntries()<2){
     137           0 :       AliWarning(Form("Alias %s has just %d data points!",
     138             :                     fAliasNames[iAlias].Data(),aliasArr->GetEntries()));
     139           0 :     }
     140             :     
     141           0 :     TIter iterarray(aliasArr);
     142             :         
     143           0 :     if(iAlias<kNHvChannel){ // Treating HV values
     144           0 :         Int_t nentries = aliasArr->GetEntries();
     145             : 
     146           0 :         Double_t *times = new Double_t[nentries];
     147           0 :         Double_t *values = new Double_t[nentries];
     148             : 
     149             :         UInt_t iValue=0;
     150             :         Float_t variation = 0.0;
     151             : 
     152           0 :         while((aValue = (AliDCSValue*) iterarray.Next())) {
     153           0 :                         UInt_t currentTime = aValue->GetTimeStamp();
     154           0 :                         if(currentTime>fCtpEndTime) break;
     155             : 
     156           0 :                         values[iValue] = aValue->GetFloat();
     157           0 :                         times[iValue] = (Double_t) (currentTime);
     158             :                         
     159           0 :                         if(iValue>0) {
     160           0 :                                 if(values[iValue-1]>0.) variation = TMath::Abs(values[iValue]-values[iValue-1])/values[iValue-1];
     161           0 :                                 if(variation > 0.05) fDeadChannel[iAlias] = kTRUE;
     162             :                                 }
     163           0 :                         fHv[iAlias]->Fill(values[iValue]);
     164           0 :                         iValue++;
     165           0 :                         }      
     166           0 :         CreateGraph(iAlias, iValue, times, values); // fill graphs 
     167             : 
     168             :         // calculate mean and rms of the first two histos
     169             :         Int_t iChannel     = iAlias;    
     170           0 :         fMeanHV[iAlias]  = fHv[iAlias]->GetMean();
     171           0 :         fWidthHV[iAlias] = fHv[iAlias]->GetRMS();
     172             : 
     173           0 :         delete[] values;
     174           0 :         delete[] times; 
     175           0 :         }
     176           0 :       else if(iAlias >= kNHvChannel && iAlias<2*kNHvChannel){
     177           0 :         Int_t nentries = aliasArr->GetEntries();
     178             : 
     179           0 :         Double_t *times = new Double_t[nentries];
     180           0 :         Double_t *values = new Double_t[nentries];
     181             :         UInt_t iValue=0;
     182             :         
     183           0 :         while((aValue = (AliDCSValue*) iterarray.Next())) {
     184           0 :                        UInt_t currentTime = aValue->GetTimeStamp();
     185           0 :                        if(currentTime>fCtpEndTime) break;
     186             : 
     187           0 :                        values[iValue] = aValue->GetFloat();
     188           0 :                        times[iValue] = (Double_t) (currentTime);
     189           0 :                        iValue++;
     190           0 :                        }
     191           0 :         CreateGraph(iAlias, iValue, times, values); // fill graphs
     192           0 :         } 
     193             :       else { // Treating FEE Parameters
     194             :                 AliDCSValue * lastVal = NULL;
     195           0 :                 while((aValue = (AliDCSValue*) iterarray.Next())) lastVal = aValue; // Take only the last value
     196           0 :                 fFEEParameters->Add(new TObjString(fAliasNames[iAlias].Data()),lastVal);
     197             :         }      
     198           0 :   }
     199             :   
     200           0 :   fIsProcessed=kTRUE;
     201             : 
     202           0 :   return success;
     203           0 : }
     204             : 
     205             : //_____________________________________________________________________________
     206             : void AliADDataDCS::Init(){
     207             : 
     208             :   // initialization of aliases and DCS data
     209             : 
     210           0 :   TString sindex;
     211             :   int iAlias = 0;
     212             :   
     213           0 :   for(int iPM = 0; iPM<16 ; iPM++){
     214           0 :                 fAliasNames[iAlias] = Form("AD0/HV/PM%d",iPM);
     215             :                         
     216           0 :                 fHv[iAlias] = new TH1F(fAliasNames[iAlias].Data(),fAliasNames[iAlias].Data(), 3000, kHvMin, kHvMax);
     217           0 :                 fHv[iAlias]->GetXaxis()->SetTitle("Hv");
     218           0 :                 iAlias++;
     219             :   }
     220             :   
     221           0 :   for(int iPM = 0; iPM<16 ; iPM++) fAliasNames[iAlias++] = Form("AD0/HV/Imon%d",iPM);
     222             :   
     223             :   // CCIU Parameters
     224             :         
     225           0 :   fAliasNames[iAlias++] = "AD0/FEE/CCIU/BBAThreshold";
     226           0 :   fAliasNames[iAlias++] = "AD0/FEE/CCIU/BBCThreshold";
     227           0 :   fAliasNames[iAlias++] = "AD0/FEE/CCIU/BGAThreshold";
     228           0 :   fAliasNames[iAlias++] = "AD0/FEE/CCIU/BGCThreshold";
     229           0 :   fAliasNames[iAlias++] = "AD0/FEE/CCIU/BBAForBGThreshold";
     230           0 :   fAliasNames[iAlias++] = "AD0/FEE/CCIU/BBCForBGThreshold";
     231           0 :   fAliasNames[iAlias++] = "AD0/FEE/CCIU/MultADAThrLow";
     232           0 :   fAliasNames[iAlias++] = "AD0/FEE/CCIU/MultADAThrHigh";
     233           0 :   fAliasNames[iAlias++] = "AD0/FEE/CCIU/MultADCThrLow";
     234           0 :   fAliasNames[iAlias++] = "AD0/FEE/CCIU/MultADCThrHigh";
     235           0 :   for(int i=1;i<=5;i++) {
     236           0 :         fAliasNames[iAlias] = "AD0/FEE/CCIU/TriggerSelect";
     237           0 :         fAliasNames[iAlias++] += Form("%d",i);
     238             :   }
     239             :   //Trigger parameters
     240           0 :   for(int iCIU = 0; iCIU<2 ; iCIU++){
     241           0 :                 fAliasNames[iAlias++] = Form("AD0/FEE/CIU%d/Clk1Win1",iCIU);
     242           0 :                 fAliasNames[iAlias++] = Form("AD0/FEE/CIU%d/Clk1Win2",iCIU);
     243           0 :                 fAliasNames[iAlias++] = Form("AD0/FEE/CIU%d/Clk2Win1",iCIU);
     244           0 :                 fAliasNames[iAlias++] = Form("AD0/FEE/CIU%d/Clk2Win2",iCIU);
     245           0 :                 fAliasNames[iAlias++] = Form("AD0/FEE/CIU%d/DelayClk1Win1",iCIU);
     246           0 :                 fAliasNames[iAlias++] = Form("AD0/FEE/CIU%d/DelayClk1Win2",iCIU);
     247           0 :                 fAliasNames[iAlias++] = Form("AD0/FEE/CIU%d/DelayClk2Win1",iCIU);
     248           0 :                 fAliasNames[iAlias++] = Form("AD0/FEE/CIU%d/DelayClk2Win2",iCIU);
     249           0 :                 fAliasNames[iAlias++] = Form("AD0/FEE/CIU%d/LatchWin1",iCIU);
     250           0 :                 fAliasNames[iAlias++] = Form("AD0/FEE/CIU%d/LatchWin2",iCIU);
     251           0 :                 fAliasNames[iAlias++] = Form("AD0/FEE/CIU%d/ResetWin1",iCIU);
     252           0 :                 fAliasNames[iAlias++] = Form("AD0/FEE/CIU%d/ResetWin2",iCIU);
     253           0 :                 fAliasNames[iAlias++] = Form("AD0/FEE/CIU%d/PedestalSubtraction",iCIU);
     254             :   }
     255           0 :   for(int iCIU = 0; iCIU<2 ; iCIU++){
     256           0 :           for(int iCh=1;iCh<=8;iCh++){
     257           0 :                 fAliasNames[iAlias++] = Form("AD0/FEE/CIU%d/EnableCharge%d",iCIU,iCh);
     258           0 :                 fAliasNames[iAlias++] = Form("AD0/FEE/CIU%d/EnableTiming%d",iCIU,iCh);
     259           0 :                 fAliasNames[iAlias++] = Form("AD0/FEE/CIU%d/PedEven%d",iCIU,iCh);
     260           0 :                 fAliasNames[iAlias++] = Form("AD0/FEE/CIU%d/PedOdd%d",iCIU,iCh);
     261           0 :                 fAliasNames[iAlias++] = Form("AD0/FEE/CIU%d/PedCutEven%d",iCIU,iCh);
     262           0 :                 fAliasNames[iAlias++] = Form("AD0/FEE/CIU%d/PedCutOdd%d",iCIU,iCh);
     263             :           }
     264             :   }
     265             :  // Time Resolution Parameters  
     266           0 :   for(int iCIU = 0; iCIU<2 ; iCIU++){
     267           0 :                 fAliasNames[iAlias++] = Form("AD0/FEE/CIU%d/TimeResolution",iCIU);
     268           0 :                 fAliasNames[iAlias++] = Form("AD0/FEE/CIU%d/WidthResolution",iCIU);
     269             :   }
     270             :   // HPTDC parameters
     271           0 :   for(int iCIU = 0; iCIU<2 ; iCIU++){
     272           0 :                 fAliasNames[iAlias++] = Form("AD0/FEE/CIU%d/MatchWindow",iCIU);
     273           0 :                 fAliasNames[iAlias++] = Form("AD0/FEE/CIU%d/SearchWindow",iCIU);
     274           0 :                 fAliasNames[iAlias++] = Form("AD0/FEE/CIU%d/TriggerCountOffset",iCIU);
     275           0 :                 fAliasNames[iAlias++] = Form("AD0/FEE/CIU%d/RollOver",iCIU);
     276             :   }
     277             : 
     278           0 :   for(int iCIU = 0; iCIU<2 ; iCIU++){
     279           0 :           for(int iCh=1;iCh<=8;iCh++){
     280           0 :                 fAliasNames[iAlias++] = Form("AD0/FEE/CIU%d/DelayHit%d",iCIU,iCh);
     281             :           }
     282             :   }
     283             : 
     284           0 :   for(int iCIU = 0; iCIU<2 ; iCIU++){
     285           0 :           for(int iCh=1;iCh<=8;iCh++){
     286           0 :                 fAliasNames[iAlias++] = Form("AD0/FEE/CIU%d/DiscriThr%d",iCIU,iCh);
     287             :           }
     288             :   }
     289             : 
     290           0 :   if(iAlias!=kNAliases) 
     291           0 :               AliError(Form("Number of DCS Aliases defined not correct"));
     292             : 
     293           0 : }
     294             : 
     295             : //_____________________________________________________________________________
     296             : void AliADDataDCS::Introduce(UInt_t numAlias, const TObjArray* aliasArr)const
     297             : {
     298             : 
     299             :   // method to introduce new aliases
     300             : 
     301           0 :   int entries=aliasArr->GetEntries();
     302           0 :   AliInfo(Form("************ Alias: %s **********",fAliasNames[numAlias].Data()));
     303           0 :   AliInfo(Form("           %d DP values collected",entries));
     304             : 
     305           0 : }
     306             : 
     307             : //_____________________________________________________________________________
     308             : void AliADDataDCS::CreateGraph(int i, int dim, const Double_t *x, const Double_t *y)
     309             : {
     310             : 
     311             :    // Create graphics
     312             :    
     313           0 :    TGraph *gr = new((*fGraphs)[fGraphs->GetEntriesFast()]) TGraph(dim, x, y);
     314             : 
     315           0 :    gr->GetXaxis()->SetTimeDisplay(1);
     316           0 :    gr->SetTitle(fAliasNames[i].Data());
     317             : 
     318           0 : }
     319             : 
     320             : 
     321             : //_____________________________________________________________________________
     322             : void AliADDataDCS::Draw(const Option_t* /*option*/)
     323             : {
     324             : // Draw all histos and graphs
     325             : 
     326           0 :   if(!fIsProcessed) return;
     327             : 
     328           0 :   if(fGraphs->GetEntries()==0)  return;
     329             :   
     330           0 :   TCanvas *cHV = new TCanvas("AD0_HV","AD0_HV");
     331           0 :   cHV->Divide(4,4);
     332             :   
     333           0 :   for(int iPM = 0; iPM<16 ; iPM++){
     334           0 :         cHV->cd(iPM+1);
     335           0 :         ((TGraph*) fGraphs->UncheckedAt(iPM))->SetMarkerStyle(20);
     336           0 :         ((TGraph*) fGraphs->UncheckedAt(iPM))->Draw("ALP");                     
     337             :         }
     338           0 : }
     339             : 

Generated by: LCOV version 1.11