1 /**************************************************************************
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
4 * Author: The ALICE Off-line Project. *
5 * Contributors are mentioned in the code where appropriate. *
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 **************************************************************************/
17 #include "AliVZERODataDCS.h"
19 #include "AliDCSValue.h"
25 #include <TTimeStamp.h>
34 // AliVZERODataDCS class
35 // main aim to introduce the aliases for the VZERO DCS
36 // data points to be then
37 // stored in the OCDB, and to process them.
38 // ProcessData() method called by VZEROPreprocessor
40 ClassImp(AliVZERODataDCS)
42 //_____________________________________________________________________________
43 AliVZERODataDCS::AliVZERODataDCS():
48 fGraphs("TGraph",kNGraphs),
51 // Default constructor
52 for(int i=0;i<kNHvChannel;i++) fDeadChannel[i] = kFALSE;
55 //_____________________________________________________________________________
56 AliVZERODataDCS::AliVZERODataDCS(Int_t nRun, UInt_t startTime, UInt_t endTime):
59 fStartTime(startTime),
61 fGraphs("TGraph",kNGraphs),
65 // constructor with arguments
66 for(int i=0;i<kNHvChannel;i++) fDeadChannel[i] = kFALSE;
68 AliInfo(Form("\n\tRun %d \n\tStartTime %s \n\tEndTime %s", nRun,
69 TTimeStamp(startTime).AsString(),
70 TTimeStamp(endTime).AsString()));
76 //_____________________________________________________________________________
77 AliVZERODataDCS::~AliVZERODataDCS() {
84 //_____________________________________________________________________________
85 void AliVZERODataDCS::ProcessData(TMap& aliasMap){
87 // method to process the data
89 if(!(fAliasNames[0])) Init();
94 // starting loop on aliases
95 for(int iAlias=0; iAlias<kNAliases; iAlias++){
97 aliasArr = (TObjArray*) aliasMap.GetValue(fAliasNames[iAlias].Data());
99 AliError(Form("Alias %s not found!", fAliasNames[iAlias].Data()));
103 //Introduce(iAlias, aliasArr);
105 if(aliasArr->GetEntries()<2){
106 AliError(Form("Alias %s has just %d entries!",
107 fAliasNames[iAlias].Data(),aliasArr->GetEntries()));
111 TIter iterarray(aliasArr);
113 Int_t nentries = aliasArr->GetEntries();
115 Double_t *times = new Double_t[nentries];
116 Double_t *values = new Double_t[nentries];
119 while((aValue = (AliDCSValue*) iterarray.Next())) {
120 values[iValue] = aValue->GetFloat();
123 if(values[iValue-1]>0.) variation = TMath::Abs(values[iValue]-values[iValue-1])/values[iValue-1];
124 if(variation > 0.10) fDeadChannel[GetOfflineChannel(iAlias)] = kTRUE;
126 times[iValue] = (Double_t) (aValue->GetTimeStamp());
127 fHv[iAlias]->Fill(values[iValue]);
128 printf("%s %f Dead=%d\n",fAliasNames[iAlias].Data(),values[iValue],fDeadChannel[GetOfflineChannel(iAlias)]);
131 CreateGraph(iAlias, aliasArr->GetEntries(), times, values); // fill graphs
137 // calculate mean and rms of the first two histos
138 // and convert index to aliroot channel
139 for(int i=0;i<kNAliases;i++){
140 Int_t iChannel = GetOfflineChannel(i);
141 fMeanHV[iChannel] = fHv[i]->GetMean();
142 fWidthHV[iChannel] = fHv[i]->GetRMS();
148 //_____________________________________________________________________________
149 void AliVZERODataDCS::Init(){
151 // initialization of aliases and DCS data
156 for(int iSide = 0; iSide<2 ; iSide++){
157 for(int iRing = 0; iRing<4 ; iRing++){
158 for(int iSector = 0; iSector<8 ; iSector++){
159 if(iSide == 0) fAliasNames[iAlias] = "V00/HV/V0A/SECTOR";
160 else fAliasNames[iAlias] = "V00/HV/V0C/SECTOR";
161 sindex.Form("%d/RING%d",iSector,iRing);
162 fAliasNames[iAlias] += sindex;
164 fHv[iAlias] = new TH1F(fAliasNames[iAlias].Data(),fAliasNames[iAlias].Data(), 2000, kHvMin, kHvMax);
165 fHv[iAlias]->GetXaxis()->SetTitle("Hv");
170 if(iAlias!=kNAliases)
171 AliError(Form("Number of DCS Aliases defined not correct"));
175 //_____________________________________________________________________________
176 void AliVZERODataDCS::Introduce(UInt_t numAlias, const TObjArray* aliasArr)const
179 // method to introduce new aliases
181 int entries=aliasArr->GetEntries();
182 AliInfo(Form("************ Alias: %s **********",fAliasNames[numAlias].Data()));
183 AliInfo(Form(" %d DP values collected",entries));
187 //_____________________________________________________________________________
188 void AliVZERODataDCS::CreateGraph(int i, int dim, const Double_t *x, const Double_t *y)
193 TGraph *gr = new(fGraphs[fGraphs.GetEntriesFast()]) TGraph(dim, x, y);
195 gr->GetXaxis()->SetTimeDisplay(1);
196 gr->SetTitle(fAliasNames[i].Data());
198 AliInfo(Form("Array entries: %d",fGraphs.GetEntriesFast()));
203 //_____________________________________________________________________________
204 void AliVZERODataDCS::Draw(const Option_t* /*option*/)
206 // Draw all histos and graphs
208 if(!fIsProcessed) return;
210 if(fGraphs.GetEntries()==0) return;
215 for(int iSide = 0 ;iSide<2;iSide++){
216 for(int iRing=0;iRing<4;iRing++){
217 if(iSide == 0) canvasName = "V0A_Ring";
218 else canvasName = "V0C_Ring";
220 int iCanvas = iSide*4 + iRing;
221 cHV[iCanvas] = new TCanvas(canvasName,canvasName);
222 cHV[iCanvas]->Divide(3,3);
223 for(int iSector=0;iSector<8;iSector++){
224 cHV[iCanvas]->cd(iSector+1);
225 int iChannel = iSide*32 + iRing*8 + iSector;
226 ((TGraph*) fGraphs.UncheckedAt(iChannel))->SetMarkerStyle(20);
227 ((TGraph*) fGraphs.UncheckedAt(iChannel))->Draw("ALP");