1 ////////////////////////////////////////////////////////////////////////////
3 // Trend Value Incapsulation //
6 // Alexandru Bercuci <A.Bercuci@gsi.de> //
8 ////////////////////////////////////////////////////////////////////////////
11 #include "TObjString.h"
12 #include "TObjArray.h"
15 #include "AliTRDtrendValue.h"
17 ClassImp(AliTRDtrendValue)
20 //____________________________________________
21 AliTRDtrendValue::AliTRDtrendValue()
22 : TNamed("none", "none")
28 // Constructor. Reset all fields.
29 memset(fLimits, 0, 2*(kNlevels+1)*sizeof(Double_t));
30 for(Int_t ilevel(kNlevels); ilevel--; ) snprintf(fAlarmMessage[ilevel], 1024, " ");
33 //____________________________________________
34 AliTRDtrendValue::AliTRDtrendValue(Char_t *n, Char_t *t)
41 // Constructor. Define name and title for trend variable.
43 TObjArray *names(s.Tokenize("_"));
44 if(names->GetEntriesFast()!=2){
45 AliError(Form("Wrong trend value name format. Trend value name should be of the form \"trendClass_trendValue\" with only one \"_\" character."));
48 memset(fLimits, 0, 2*(kNlevels+1)*sizeof(Double_t));
49 for(Int_t ilevel(kNlevels); ilevel--; ) snprintf(fAlarmMessage[ilevel], 1024, " ");
52 //____________________________________________
53 Int_t AliTRDtrendValue::GetAlarmLevel()
55 // check value against limits and do some more work
56 fAlarmLevel=kNlevels-1;
57 for(Int_t ilevel(0); ilevel<kNlevels+1; ilevel++)
58 if(fValue<fLimits[2*ilevel+1] &&
59 fValue>=fLimits[2*ilevel]){
67 //____________________________________________
68 const char* AliTRDtrendValue::GetAlarmMessage() const
70 // Check if value triggered alarm
71 if(!fAlarmLevel) return "OK";
72 else return fAlarmMessage[fAlarmLevel-1];
75 //____________________________________________
76 const char* AliTRDtrendValue::GetClassName() const
78 // Check task to which value belong
79 TString s(TNamed::GetName());
80 TObjArray *names(s.Tokenize("_"));
81 if(names->GetEntriesFast()!=2){
82 AliError(Form("Wrong trend value name format."));
86 return ((TObjString*)names->At(0))->String().Data();
89 //____________________________________________
90 const char* AliTRDtrendValue::GetValueName() const
93 TString s(TNamed::GetName());
94 TObjArray *names(s.Tokenize("_"));
95 if(names->GetEntriesFast()!=2){
96 AliError(Form("Wrong trend value name format."));
99 return ((TObjString*)names->At(1))->String().Data();
102 //____________________________________________
103 const char* AliTRDtrendValue::GetResponsible(Char_t *n, Char_t *mail) const
105 // Get responsible with name and mail
106 if(n) snprintf(n, 100, "%s", fResponsible.fNameR);
107 if(mail) snprintf(mail, 200, "%s", fResponsible.fMail);
108 return Form("%s <%s>", fResponsible.fNameR, fResponsible.fMail);
111 //____________________________________________
112 const char* AliTRDtrendValue::GetNotifiable(Int_t in, Char_t *n, Char_t *mail) const
114 // Get noticible person "in" with name and mail
115 if(in<0||in>=fNnotifiable) return NULL;
116 if(n) snprintf(n, 100, "%s", fNotifiable[in].fNameR);
117 if(mail) snprintf(mail, 200, "%s", fNotifiable[in].fMail);
118 return Form("%s <%s>", fNotifiable[in].fNameR, fNotifiable[in].fMail);
121 //____________________________________________
122 void AliTRDtrendValue::SetNotifiable(const Char_t *name, const Char_t *mail)
124 // add noticible person to DB
125 if(fNnotifiable==kNnotifiable){
126 AliWarning(Form("Could not add %s for notification. Only %d persons can be registered for notification.", name, kNnotifiable));
129 snprintf(fNotifiable[fNnotifiable].fNameR, 100, "%s", name);
130 snprintf(fNotifiable[fNnotifiable].fMail, 200, "%s", mail);
134 //____________________________________________
135 void AliTRDtrendValue::SetResponsible(const Char_t *name, const Char_t *mail)
137 // set responsible person for trend
138 snprintf(fResponsible.fNameR, 100, "%s", name);
139 snprintf(fResponsible.fMail, 200, "%s", mail);
142 //____________________________________________
143 void AliTRDtrendValue::Print(Option_t */*o*/) const
147 // alarm level, message
150 printf(" %s [%s] - %s\n", GetValueName(), GetClassName(), GetTitle());
151 printf("*** %f limits[%f %f]\n", fValue, fLimits[0], fLimits[1]);
153 printf("*** Alarm level : %d limits[%f %f]\n", fAlarmLevel, fLimits[2*fAlarmLevel], fLimits[2*fAlarmLevel+1]);
154 printf("*** Alarm message : %s\n", GetAlarmMessage());
156 printf("*** Responsible %s <%s>\n", fResponsible.fNameR, fResponsible.fMail);
158 printf("*** Notifiable person(s) ***\n");
159 for(Int_t i(0); i<fNnotifiable; i++)
160 printf(" %s <%s>\n", fNotifiable[i].fNameR, fNotifiable[i].fMail);
164 //____________________________________________
165 AliTRDtrendValue::AliTRDtrendValueResponsible::AliTRDtrendValueResponsible(Char_t *n, Char_t *m)
167 // define person with mail and mail
168 if(n) snprintf(fNameR, 100, "%s", n); else snprintf(fNameR, 100, " ");
169 if(m) snprintf(fMail, 200, "%s", m); else snprintf(fMail, 200, " ");