]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWG1/TRD/info/AliTRDtrendValue.cxx
new classes for TRD trending and alarm management
[u/mrichter/AliRoot.git] / PWG1 / TRD / info / AliTRDtrendValue.cxx
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 }