5 #include <AliCDBMetaData.h>
8 #include "AliDCSValue.h"
9 #include "AliDCSValue.h"
11 #include "AliTRDDataDCS.h"
12 #include "AliSplineFit.h"
14 ClassImp(AliTRDDataDCS)
20 AliTRDDataDCS dataDcs;
21 dataDcs.ExtractDCS (dcs);
22 ->call a storeRef function
23 dataDcs.PerformFit ();
24 dataDcs.ClearGraphs ();
25 ->call a store function
30 //_____________________________________________________________________________
31 AliTRDDataDCS::AliTRDDataDCS ()
32 : chamberByteStatus (0),
61 //_____________________________________________________________________________
62 AliTRDDataDCS::~AliTRDDataDCS ()
68 //_____________________________________________________________________________
69 void AliTRDDataDCS::Init ()
71 SetConf (chamberByteStatus, "trd_chamberByteStatus%03d", 'c', 540, true, false, 10,10,0,2);
72 SetConf (preTrigger, "trd_preTrigger", 'c', 1, true, true, 10,10,0,2);
73 SetConf (goofyHv, "trd_goofyHv", 'f', 1, true, true, 10,10,0,2);
74 SetConf (goofyPeakPos, "trd_goofyPeakPos%02d", 'f', 2, true, true, 10,10,0,2);
75 SetConf (goofyPeakArea, "trd_goofyPeakArea%02d",'f', 2, true, true, 10,10,0,2);
76 SetConf (goofyTemp, "trd_goofyTemp%02d", 'f', 2, true, true, 10,10,0,2);
77 SetConf (goofyPressure, "trd_goofyPressure", 'f', 1, true, true, 10,10,0,2);
78 SetConf (goofyVelocity, "trd_goofyVelocity", 'f', 1, true, true, 10,10,0,2);
79 SetConf (goofyGain, "trd_goofyGain%02d", 'f', 2, true, true, 10,10,0,2);
80 SetConf (goofyCO2, "trd_goofyCO2", 'f', 1, true, true, 10,10,0,2);
81 SetConf (goofyN2, "trd_goofyN2", 'f', 1, true, true, 10,10,0,2);
82 SetConf (gasO2, "trd_gasO2", 'f', 1, true, true, 10,10,0,2);
83 SetConf (gasOverpressure, "trd_gasOverpressure", 'f', 1, true, true, 10,10,0,2);
84 SetConf (envTemp, "trd_envTemp%03d", 'f', 540, true, true, 10,10,0,2);
85 SetConf (hvAnodeImon, "trd_hvAnodeImon%03d", 'f', 540, true, true, 10,10,0,2);
86 SetConf (hvDriftImon, "trd_hvDriftImon%03d", 'f', 540, true, true, 10,10,0,2);
87 SetConf (hvAnodeUmon, "trd_hvAnodeUmon%03d", 'f', 540, true, true, 10,10,0,2);
88 SetConf (hvDriftUmon, "trd_hvDriftUmon%03d", 'f', 540, true, true, 10,10,0,2);
89 SetConf (adcClkPhase, "trd_adcClkPhase", 'f', 1, true, true, 10,10,0,2);
90 SetConf (atmPressure, "trd_atmPressure", 'f', 1, true, true, 10,10,0,2);
91 SetConf (luminosity, "trd_luminosity", 'f', 1, true, true, 10,10,0,2);
92 SetConf (magneticField, "trd_magneticField", 'f', 1, true, true, 10,10,0,2);
94 for (UInt_t iAlias = 0; iAlias < fNAlias; iAlias++) {
95 fDatas[iAlias].graph.SetOwner (1);
96 fDatas[iAlias].fit.SetOwner (1);
100 //_____________________________________________________________________________
101 void AliTRDDataDCS::SetConf (UInt_t iAlias, const char * amanda,
102 char dataType, UInt_t nChannel,
103 Bool_t enableGraph, Bool_t enableFit, Int_t kMinPoints,
104 Int_t kIter, Double_t kMaxDelta, Int_t kFitReq)
106 if (iAlias >= fNAlias) {
107 AliWarning (Form("Alias %d is not correct", iAlias));
111 fConfs[iAlias].amanda = amanda;
112 fConfs[iAlias].dataType = dataType;
113 fConfs[iAlias].nChannel = nChannel;
114 fConfs[iAlias].enableGraph = enableGraph;
115 fConfs[iAlias].enableFit = enableFit;
116 fConfs[iAlias].kMinPoints = kMinPoints;
117 fConfs[iAlias].kIter = kIter;
118 fConfs[iAlias].kMaxDelta = kMaxDelta;
119 fConfs[iAlias].kFitReq = kFitReq;
123 //_____________________________________________________________________________
124 void AliTRDDataDCS::InitFits ()
130 for (UInt_t iAlias = 0; iAlias < fNAlias; iAlias++) {
131 nChannel = fConfs[iAlias].enableFit ? fConfs[iAlias].nChannel : 0;
132 fDatas[iAlias].fit.Expand (nChannel);
138 //_____________________________________________________________________________
139 void AliTRDDataDCS::InitGraphs ()
145 for (UInt_t iAlias = 0; iAlias < fNAlias; iAlias++) {
146 nChannel = fConfs[iAlias].enableGraph ? fConfs[iAlias].nChannel : 0;
147 fDatas[iAlias].graph.Expand (nChannel);
153 //_____________________________________________________________________________
154 void AliTRDDataDCS::ClearFits ()
156 for (UInt_t iAlias = 0; iAlias < fNAlias; iAlias++) {
157 fDatas[iAlias].fit.Clear ();
158 fDatas[iAlias].fit.Expand (0);
164 //_____________________________________________________________________________
165 void AliTRDDataDCS::ClearGraphs ()
167 for (UInt_t iAlias = 0; iAlias < fNAlias; iAlias++) {
168 fDatas[iAlias].graph.Clear ();
169 fDatas[iAlias].graph.Expand (0);
172 graphsAreIni = false;
175 //_____________________________________________________________________________
176 void AliTRDDataDCS::Streamer(TBuffer &R__b) {
178 if (R__b.IsReading()) {
180 R__b.ReadBool (graphsAreIni);
181 R__b.ReadBool (fitsAreIni);
184 for (UInt_t iAlias=0; iAlias<fNAlias; iAlias++) {
185 TString::ReadString (R__b, TString::Class());
186 R__b.ReadChar (fConfs[iAlias].dataType);
187 R__b.ReadUInt (fConfs[iAlias].nChannel);
188 R__b.ReadBool (fConfs[iAlias].enableGraph);
189 R__b.ReadBool (fConfs[iAlias].enableFit);
190 R__b.ReadInt (fConfs[iAlias].kMinPoints);
191 R__b.ReadInt (fConfs[iAlias].kIter);
192 R__b.ReadDouble (fConfs[iAlias].kMaxDelta);
193 R__b.ReadInt (fConfs[iAlias].kFitReq);
198 for (UInt_t iAlias=0; iAlias<fNAlias; iAlias++)
199 fDatas[iAlias].graph = *(TObjArray*)R__b.ReadObject (TObjArray::Class());
203 for (UInt_t iAlias=0; iAlias<fNAlias; iAlias++)
204 fDatas[iAlias].fit = *(TObjArray*)R__b.ReadObject (TObjArray::Class());
207 AliInfo (Form("Read %d octets to the stream (%d Ko)", R__b.Length(), R__b.Length()/1024));
210 R__b.WriteBool (graphsAreIni);
211 R__b.WriteBool (fitsAreIni);
213 for (UInt_t iAlias = 0; iAlias < fNAlias; iAlias++) {
214 TString::WriteString (R__b, &fConfs[iAlias].amanda);
215 R__b.WriteChar (fConfs[iAlias].dataType);
216 R__b.WriteUInt (fConfs[iAlias].nChannel);
217 R__b.WriteBool (fConfs[iAlias].enableGraph);
218 R__b.WriteBool (fConfs[iAlias].enableFit);
219 R__b.WriteInt (fConfs[iAlias].kMinPoints);
220 R__b.WriteInt (fConfs[iAlias].kIter);
221 R__b.WriteDouble (fConfs[iAlias].kMaxDelta);
222 R__b.WriteInt (fConfs[iAlias].kFitReq);
226 for (UInt_t iAlias = 0; iAlias < fNAlias; iAlias++)
227 R__b.WriteObject ((TObject*)&fDatas[iAlias].graph);
231 for (UInt_t iAlias = 0; iAlias < fNAlias; iAlias++)
232 R__b.WriteObject ((TObject*)&fDatas[iAlias].fit);
235 AliInfo (Form("Write %d octets to the stream (%d Ko)", R__b.Length(), R__b.Length()/1024));
239 //_____________________________________________________________________________
240 Bool_t AliTRDDataDCS::ExtractDCS (TMap * dcsAlias)
242 if (dcsAlias == 0x0) {
243 AliWarning ("No DCS Map");
253 for (UInt_t iAlias = 0; iAlias < fNAlias; iAlias++){
255 // extract dcs only when it is needed
256 nChannel = fDatas[iAlias].graph.GetSize ();
258 for (UInt_t iSensor=0; iSensor < nChannel; iSensor++) {
260 graphTemp = FindAndMakeGraph (dcsAlias,
261 Form (fConfs[iAlias].amanda.Data(), iSensor),
262 fConfs[iAlias].dataType);
264 fDatas[iAlias].graph.AddAt (graphTemp, iSensor);
271 //_____________________________________________________________________________
272 TGraph * AliTRDDataDCS::FindAndMakeGraph (TMap * dcsMap, const char * amandaStr,
277 TPair * pair = (TPair*)dcsMap->FindObject(amandaStr);
279 AliWarning (Form("Can't find %s in dcsMap", amandaStr));
283 TObjArray * valueSet = (TObjArray*)pair->Value();
286 // Make graph of values read from DCS map
287 // (spline fit parameters will subsequently be obtained from this graph)
290 Int_t nEntries = valueSet->GetEntriesFast();
292 AliWarning (Form("Entry %s in dcsMap contain no datas", amandaStr));
296 Float_t * x = new Float_t [nEntries];
297 Float_t * y = new Float_t [nEntries];
302 for (iEntries = 0; iEntries< nEntries; iEntries++) {
304 AliDCSValue * val = (AliDCSValue *)valueSet->At(iEntries);
308 AliError (Form("Entry %s at %d contain no datas", amandaStr, iEntries));
313 time0 = val->GetTimeStamp();
316 x[iEntries] = (val->GetTimeStamp() - time0)/3600.0; // give times in fractions of hours
320 y[iEntries] = val->GetFloat();
324 y[iEntries] = (Float_t) val->GetChar();
329 AliError (Form("Bad type for entry %s", amandaStr));
335 graph = new TGraph (iEntries, x, y);
346 //_____________________________________________________________________________
347 Bool_t AliTRDDataDCS::PerformFit ()
349 AliSplineFit * fitTemp;
356 for (UInt_t iAlias = 0; iAlias < fNAlias; iAlias++){
358 // perform fit only when it is needed
359 nChannel = fDatas[iAlias].fit.GetSize ();
361 for (UInt_t iSensor=0; iSensor < nChannel; iSensor++) {
363 fitTemp = Fit ((TGraph*)fDatas[iAlias].graph[iSensor],
364 fConfs[iAlias].kMinPoints,
365 fConfs[iAlias].kIter,
366 fConfs[iAlias].kMaxDelta,
367 fConfs[iAlias].kFitReq);
370 AliInfo (Form ("Can't fit %s", Form (fConfs[iAlias].amanda.Data(), iSensor)));
372 fDatas[iAlias].fit.AddAt (fitTemp, iSensor);
380 //_____________________________________________________________________________
381 AliSplineFit * AliTRDDataDCS::Fit (TGraph * graph,
382 Int_t kMinPoints, Int_t kIter,
383 Double_t kMaxDelta, Int_t kFitReq)
386 AliError ("No graph for fit");
390 AliSplineFit * spline = new AliSplineFit ();
391 spline->InitKnots (new TGraph (*graph), kMinPoints, kIter, kMaxDelta);
392 spline->SplineFit (kFitReq);
393 spline->Cleanup(); // delete also new TGraph (*graph)
399 //_____________________________________________________________________________
400 void AliTRDDataDCS::Print (Option_t* option) const
402 if (option[0]=='g' || option[0]=='\0'){
406 for (UInt_t iAlias = 0; iAlias < fNAlias; iAlias++){
408 for (Int_t iSensor = 0; iSensor < fDatas[iAlias].graph.GetSize(); iSensor++) {
410 if (fDatas[iAlias].graph[iSensor] != 0x0)
411 AliInfo (Form("Graph %s contain %d point(s)",
412 Form(fConfs[iAlias].amanda, iSensor),
413 ((TGraph*)(fDatas[iAlias].graph[iSensor]))->GetN ()));
417 AliInfo ("Graphs don't exist");
422 if (option[0] == 'f' || option[0]=='\0'){
424 AliInfo ("no print for fit");
430 //_____________________________________________________________________________
431 TGraph * AliTRDDataDCS::GetGraph (UInt_t iAlias, UInt_t iChannel) const
433 if (iAlias >= fNAlias) {
434 AliWarning (Form("Alias %d is not correct", iAlias));
438 if (iChannel >= (UInt_t)fDatas[iAlias].graph.GetSize()) {
439 AliWarning (Form("Alias %s is not correct",
440 Form(fConfs[iAlias].amanda.Data(), iChannel)));
444 return (TGraph *)fDatas[iAlias].graph[iChannel];
447 //_____________________________________________________________________________
448 AliSplineFit * AliTRDDataDCS::GetFit (UInt_t iAlias, UInt_t iChannel) const
450 if (iAlias >= fNAlias) {
451 AliWarning (Form("Alias %d is not correct", iAlias));
455 if (iChannel >= (UInt_t)fDatas[iAlias].fit.GetSize()) {
456 AliWarning (Form("Alias %s is not correct",
457 Form(fConfs[iAlias].amanda.Data(), iChannel)));
461 return (AliSplineFit *)fDatas[iAlias].fit[iChannel];
464 //_____________________________________________________________________________
465 TString AliTRDDataDCS::GetAmandaStr (UInt_t iAlias) const
467 if (iAlias < fNAlias)
468 return fConfs[iAlias].amanda;
469 else return TString ();
472 //_____________________________________________________________________________
473 UInt_t AliTRDDataDCS::GetNChannel (UInt_t iAlias) const
475 if (iAlias < fNAlias)
476 return fConfs[iAlias].nChannel;