]> git.uio.no Git - u/mrichter/AliRoot.git/blame - STEER/AliDCSSensor.cxx
Conding violations fixed. The code is now included in libSTEER (Mikolaj)
[u/mrichter/AliRoot.git] / STEER / AliDCSSensor.cxx
CommitLineData
7264822f 1/**************************************************************************
2 * Copyright(c) 2006-07, 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////////////////////////////////////////////////////////////////////////////////
18// //
19// Class describing TPC temperature sensors (including pointers to graphs/fits//
20// Authors: Marian Ivanov, Haavard Helstrup and Martin Siska //
21// //
22////////////////////////////////////////////////////////////////////////////////
23
24
7264822f 25#include "AliDCSSensor.h"
6ec4e3e3 26#include "TDatime.h"
e27404da 27ClassImp(AliDCSSensor)
8cb8848e 28
8cb8848e 29const Double_t kSecInHour = 3600.; // seconds in one hour
30
7264822f 31
32
33AliDCSSensor::AliDCSSensor():
34 fId(),
35 fIdDCS(0),
24cd438b 36 fStringID(),
7264822f 37 fStartTime(0),
8cb8848e 38 fEndTime(0),
7264822f 39 fGraph(0),
40 fFit(0),
41 fX(0),
42 fY(0),
43 fZ(0)
44{
45 //
46 // Standard constructor
47 //
48}
49
50AliDCSSensor::AliDCSSensor(const AliDCSSensor& source) :
51 TNamed(source),
52 fId(source.fId),
53 fIdDCS(source.fIdDCS),
24cd438b 54 fStringID(source.fStringID),
7264822f 55 fStartTime(source.fStartTime),
8cb8848e 56 fEndTime(source.fEndTime),
7264822f 57 fGraph(source.fGraph),
58 fFit(source.fFit),
59 fX(source.fX),
60 fY(source.fY),
61 fZ(source.fZ)
62//
63// Copy constructor
64//
65{ }
66
67AliDCSSensor& AliDCSSensor::operator=(const AliDCSSensor& source){
68//
69// assignment operator
70//
71 if (&source == this) return *this;
72 new (this) AliDCSSensor(source);
dc0184e7 73
74 return *this;
7264822f 75}
76
77//_____________________________________________________________________________
dc0184e7 78Double_t AliDCSSensor::GetValue(UInt_t timeSec)
7264822f 79{
80 //
81 // Get temperature value for actual sensor
6ec4e3e3 82 // timeSec given as offset from start-of-map measured in seconds
83 // *NOTE* In the current TPC setup, start-of-map is defined as the
84 // first measured point for each sensor. This will be different
85 // for each sensor in the array. If you want to get a value at the
86 // same absolute time, use AliDCSSensor::GetValue(TTimeStamp time)
87 // or AliDCSSensorArray::GetValue (UInt_t timeSec, Int_t sensor)
88 // which measure offsets with respect to the (global) start-of-run
7264822f 89 //
2972d4eb 90 Bool_t inside=kTRUE;
008ef66a 91 return Eval(TTimeStamp((time_t)(fStartTime+timeSec),0),inside);
7264822f 92}
93//_____________________________________________________________________________
94Double_t AliDCSSensor::GetValue(TTimeStamp time)
95{
96 // Get temperature value for actual sensor
97 // time given as absolute TTimeStamp
98 //
2972d4eb 99 Bool_t inside=kTRUE;
67a165ed 100 return Eval(time, inside);
8cb8848e 101}
102
103//_____________________________________________________________________________
104
67a165ed 105Double_t AliDCSSensor::Eval(const TTimeStamp& time, Bool_t inside) const
8cb8848e 106{
107 //
108 // Return temperature at given time
67a165ed 109 // If time < start of map return value at start of map, inside = false
110 // If time > end of map return value at end of map, inside = false
8cb8848e 111
112 UInt_t timeSec = time.GetSec();
113 UInt_t diff = timeSec-fStartTime;
67a165ed 114 inside = true;
8cb8848e 115
67a165ed 116 if ( timeSec < fStartTime ) {
117 inside=false;
118 diff=0;
119 }
120 if ( timeSec > fEndTime ) {
121 inside=false;
122 diff = fEndTime-fStartTime;
123 }
8cb8848e 124
125 Double_t timeHour = diff/kSecInHour;
126 if ( fFit ) {
127 return fFit->Eval(timeHour);
128 } else {
e7097603 129 if ( fGraph ) {
130 return EvalGraph(timeHour);
131 } else {
132 return -99;
133 }
8cb8848e 134 }
135}
e7097603 136//_____________________________________________________________________________
137Double_t AliDCSSensor::EvalGraph(const Double_t& timeHour) const
138{
139 //
140 // Extract last value in graph observed before time given by timeHour
141 //
142
143 // return -99 if point specified is before beginning of graph
144 Double_t x=0; Double_t y=0;
145 fGraph->GetPoint(0,x,y);
146 if ( timeHour < x ) return -99;
147
148 // return previous point when first time > timeHour is observed
149
150 Int_t npoints = fGraph->GetN();
151 for (Int_t i=1; i<npoints; i++) {
152 fGraph->GetPoint(i,x,y);
153 if ( timeHour < x ) {
154 fGraph->GetPoint(i-1,x,y);
155 return y;
156 }
157 }
158
159 // return last point if all times are < timeHour
160 return y;
161}
162
8cb8848e 163
e7097603 164//_____________________________________________________________________________
6ec4e3e3 165TGraph* AliDCSSensor::MakeGraph(Int_t nPoints, Bool_t debug) const
8cb8848e 166{
167 //
168 // Make graph from start time to end time of DCS values
169 //
170
6ec4e3e3 171
172
8cb8848e 173 UInt_t stepTime = (fEndTime-fStartTime)/nPoints;
174
6ec4e3e3 175 if (debug==kTRUE) {
176 printf ("Start time %d, End time %d, step time %d\n",
177 fStartTime,fEndTime,stepTime);
178 TTimeStamp t((time_t)fStartTime,0); t.Print();
179 TTimeStamp t2((time_t)fEndTime,0); t2.Print();
180 }
181
8cb8848e 182 if ( !fFit ) return 0;
183
184 Double_t *x = new Double_t[nPoints+1];
185 Double_t *y = new Double_t[nPoints+1];
186 for (Int_t ip=0; ip<nPoints; ip++) {
6ec4e3e3 187 x[ip] = (time_t)(fStartTime+ip*stepTime);
8cb8848e 188 y[ip] = fFit->Eval(ip*stepTime/kSecInHour);
6ec4e3e3 189 if (debug==kTRUE) {
190 TTimeStamp t3((time_t)x[ip],0);
191 printf ("x=%f, y=%f ",x[ip],y[ip]);
192 t3.Print();
193 }
8cb8848e 194 }
195
196 TGraph *graph = new TGraph(nPoints,x,y);
197 delete [] x;
198 delete [] y;
199
200 graph->GetXaxis()->SetTimeDisplay(1);
201 graph->GetXaxis()->SetLabelOffset(0.02);
202 graph->GetXaxis()->SetTimeFormat("#splitline{%d/%m}{%H:%M}");
82dfb6c8 203
8cb8848e 204 return graph;
7264822f 205}
206
24cd438b 207//_____________________________________________________________________________
208
209TClonesArray * AliDCSSensor::ReadTree(TTree* tree) {
210 //
211 // read values from ascii file
212 //
82dfb6c8 213
24cd438b 214 Int_t nentries = tree->GetEntries();
82dfb6c8 215
24cd438b 216 char stringId[100];
217 Int_t num=0;
218 Int_t idDCS=0;
219 Double_t x=0;
220 Double_t y=0;
221 Double_t z=0;
222
223 tree->SetBranchAddress("StringID",&stringId);
224 tree->SetBranchAddress("IdDCS",&idDCS);
225 tree->SetBranchAddress("Num",&num);
226 tree->SetBranchAddress("X",&x);
227 tree->SetBranchAddress("Y",&y);
228 tree->SetBranchAddress("Z",&z);
229
230 // firstSensor = (Int_t)tree->GetMinimum("ECha");
231 // lastSensor = (Int_t)tree->GetMaximum("ECha");
232
233 TClonesArray * array = new TClonesArray("AliDCSSensor",nentries);
234 printf ("nentries = %d\n",nentries);
235
236 for (Int_t isensor=0; isensor<nentries; isensor++){
237 AliDCSSensor * sens = new ((*array)[isensor])AliDCSSensor;
238 tree->GetEntry(isensor);
239 sens->SetId(isensor);
240 sens->SetIdDCS(idDCS);
241 sens->SetStringID(TString(stringId));
242 sens->SetX(x);
243 sens->SetY(y);
244 sens->SetZ(z);
245
246 }
247 return array;
248}
7264822f 249