]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG1/TRD/info/AliTRDtrendValue.cxx
new classes for TRD trending and alarm management
[u/mrichter/AliRoot.git] / PWG1 / TRD / info / AliTRDtrendValue.cxx
CommitLineData
3240bb4a 1#include "TString.h"
2#include "TObjString.h"
3#include "TObjArray.h"
4
5#include "AliLog.h"
6#include "AliTRDtrendValue.h"
7
8ClassImp(AliTRDtrendValue)
9
10
11//____________________________________________
12AliTRDtrendValue::AliTRDtrendValue()
13 : TNamed("none", "none")
14 ,fAlarmLevel(0)
15 ,fValue(0.)
16 ,fResponsible()
17 ,fNnotifiable(0)
18{
19 memset(fLimits, 0, 2*(kNlevels+1)*sizeof(Double_t));
20 for(Int_t ilevel(kNlevels); ilevel--; ) sprintf(fAlarmMessage[ilevel], " ");
21}
22
23//____________________________________________
24AliTRDtrendValue::AliTRDtrendValue(Char_t *n, Char_t *t)
25 : TNamed("none", t)
26 ,fAlarmLevel(0)
27 ,fValue(0.)
28 ,fResponsible()
29 ,fNnotifiable(0)
30{
31 TString s(n);
32 TObjArray *names(s.Tokenize("_"));
33 if(names->GetEntriesFast()!=2){
34 AliError(Form("Wrong trend value name format. Trend value name should be of the form \"trendClass_trendValue\" with only one \"_\" character."));
35 } else SetName(n);
36
37 memset(fLimits, 0, 2*(kNlevels+1)*sizeof(Double_t));
38 for(Int_t ilevel(kNlevels); ilevel--; ) sprintf(fAlarmMessage[ilevel], " ");
39}
40
41//____________________________________________
42Int_t AliTRDtrendValue::GetAlarmLevel()
43{
44 // check value against limits and do some more work
45 fAlarmLevel=kNlevels-1;
46 for(Int_t ilevel(0); ilevel<kNlevels+1; ilevel++)
47 if(fValue<fLimits[2*ilevel+1] &&
48 fValue>=fLimits[2*ilevel]){
49 fAlarmLevel = ilevel;
50 break;
51 }
52
53 return fAlarmLevel;
54}
55
56//____________________________________________
57const char* AliTRDtrendValue::GetAlarmMessage() const
58{
59 if(!fAlarmLevel) return "OK";
60 else return fAlarmMessage[fAlarmLevel-1];
61}
62
63//____________________________________________
64const char* AliTRDtrendValue::GetClassName() const
65{
66 TString s(TNamed::GetName());
67 TObjArray *names(s.Tokenize("_"));
68 if(names->GetEntriesFast()!=2){
69 AliError(Form("Wrong trend value name format."));
70 return NULL;
71 }
72
73 return ((TObjString*)names->At(0))->String().Data();
74}
75
76//____________________________________________
77const char* AliTRDtrendValue::GetValueName() const
78{
79 TString s(TNamed::GetName());
80 TObjArray *names(s.Tokenize("_"));
81 if(names->GetEntriesFast()!=2){
82 AliError(Form("Wrong trend value name format."));
83 return NULL;
84 }
85 return ((TObjString*)names->At(1))->String().Data();
86}
87
88//____________________________________________
89const char* AliTRDtrendValue::GetResponsible(Char_t *n, Char_t *mail) const
90{
91 if(n) sprintf(n, "%s", fResponsible.name);
92 if(mail) sprintf(mail, "%s", fResponsible.mail);
93 return Form("%s <%s>", fResponsible.name, fResponsible.mail);
94}
95
96//____________________________________________
97const char* AliTRDtrendValue::GetNotifiable(Int_t in, Char_t *n, Char_t *mail) const
98{
99 if(in<0||in>=fNnotifiable) return NULL;
100 if(n) sprintf(n, "%s", fNotifiable[in].name);
101 if(mail) sprintf(mail, "%s", fNotifiable[in].mail);
102 return Form("%s <%s>", fNotifiable[in].name, fNotifiable[in].mail);
103}
104
105//____________________________________________
106void AliTRDtrendValue::SetNotifiable(const Char_t *name, const Char_t *mail)
107{
108 if(fNnotifiable==kNnotifiable){
109 AliWarning(Form("Could not add %s for notification. Only %d persons can be registered for notification.", name, kNnotifiable));
110 return;
111 }
112 sprintf(fNotifiable[fNnotifiable].name, "%s", name);
113 sprintf(fNotifiable[fNnotifiable].mail, "%s", mail);
114 fNnotifiable++;
115}
116
117//____________________________________________
118void AliTRDtrendValue::SetResponsible(const Char_t *name, const Char_t *mail)
119{
120 sprintf(fResponsible.name, "%s", name);
121 sprintf(fResponsible.mail, "%s", mail);
122}
123
124//____________________________________________
125void AliTRDtrendValue::Print(Option_t */*o*/) const
126{
127// name - title
128// value - limits
129// alarm level, message
130// responsible
131
132 printf(" %s [%s] - %s\n", GetValueName(), GetClassName(), GetTitle());
133 printf("*** %f limits[%f %f]\n", fValue, fLimits[0], fLimits[1]);
134 if(fAlarmLevel){
135 printf("*** Alarm level : %d limits[%f %f]\n", fAlarmLevel, fLimits[2*fAlarmLevel], fLimits[2*fAlarmLevel+1]);
136 printf("*** Alarm message : %s\n", GetAlarmMessage());
137 }
138 printf("*** Responsible %s <%s>\n", fResponsible.name, fResponsible.mail);
139 if(fNnotifiable){
140 printf("*** Notifiable person(s) ***\n");
141 for(Int_t i(0); i<fNnotifiable; i++)
142 printf(" %s <%s>\n", fNotifiable[i].name, fNotifiable[i].mail);
143 }
144}
145
146//____________________________________________
147AliTRDtrendValue::AliTRDtrendValueResponsible::AliTRDtrendValueResponsible(Char_t *n, Char_t *m)
148{
149 if(n) sprintf(name, "%s", n); else sprintf(name, " ");
150 if(m) sprintf(mail, "%s", m); else sprintf(mail, " ");
151}