]>
Commit | Line | Data |
---|---|---|
3240bb4a | 1 | #include "TString.h" |
2 | #include "TObjString.h" | |
3 | #include "TObjArray.h" | |
4 | ||
5 | #include "AliLog.h" | |
6 | #include "AliTRDtrendValue.h" | |
7 | ||
8 | ClassImp(AliTRDtrendValue) | |
9 | ||
10 | ||
11 | //____________________________________________ | |
12 | AliTRDtrendValue::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 | //____________________________________________ | |
24 | AliTRDtrendValue::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 | //____________________________________________ | |
42 | Int_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 | //____________________________________________ | |
57 | const char* AliTRDtrendValue::GetAlarmMessage() const | |
58 | { | |
59 | if(!fAlarmLevel) return "OK"; | |
60 | else return fAlarmMessage[fAlarmLevel-1]; | |
61 | } | |
62 | ||
63 | //____________________________________________ | |
64 | const 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 | //____________________________________________ | |
77 | const 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 | //____________________________________________ | |
89 | const 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 | //____________________________________________ | |
97 | const 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 | //____________________________________________ | |
106 | void 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 | //____________________________________________ | |
118 | void 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 | //____________________________________________ | |
125 | void 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 | //____________________________________________ | |
147 | AliTRDtrendValue::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 | } |