Setting a dummy number of contributors for the MC primary vertex
[u/mrichter/AliRoot.git] / SHUTTLE / AliShuttleLogbookEntry.cxx
1 /**************************************************************************
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3  *                                                                        *
4  * Author: The ALICE Off-line Project.                                    *
5  * Contributors are mentioned in the code where appropriate.              *
6  *                                                                        *
7  * Permission to use, copy, modify and distribute this software and its   *
8  * documentation strictly for non-commercial purposes is hereby granted   *
9  * without fee, provided that the above copyright notice appears in all   *
10  * copies and that both the copyright notice and this permission notice   *
11  * appear in the supporting documentation. The authors make no claims     *
12  * about the suitability of this software for any purpose. It is          *
13  * provided "as is" without express or implied warranty.                  *
14  **************************************************************************/
15
16 //
17 //  This class is a container for the data queried from DAQ's logbook and logbook_shuttle tables.
18 //  It holds the run number, the start time and end time of the run,
19 //  and the array of the detectors' status (Unprocessed, Inactive, Failed, Done)
20
21 #include "AliShuttleLogbookEntry.h"
22 #include "AliLog.h"
23 #include "TTimeStamp.h"
24 #include <TString.h>
25 #include <TObjString.h>
26 #include <TMap.h>
27
28 ClassImp(AliShuttleLogbookEntry)
29
30 //______________________________________________________________________________________________
31 AliShuttleLogbookEntry::AliShuttleLogbookEntry() :
32 TObject(),
33 fRun(-1),
34 fRunParameters(0),
35 fDATestMode(kFALSE)
36 {
37         //
38         // default constructor
39         //
40
41         const UInt_t nDet = AliShuttleInterface::NDetectors();
42         memset(fDetectorStatus, kUnprocessed, nDet*sizeof(Status));
43         fRunParameters.SetOwner(1);
44 }
45
46 //______________________________________________________________________________________________
47 AliShuttleLogbookEntry::AliShuttleLogbookEntry(Int_t run, Status* status) :
48 TObject(),
49 fRun(run),
50 fRunParameters(0),
51 fDATestMode(kFALSE)
52 {
53         //
54         // default constructor
55         //
56
57         const UInt_t nDet = AliShuttleInterface::NDetectors();
58         memset(fDetectorStatus, kUnprocessed, nDet*sizeof(Status));
59         if(status) SetDetectorStatus(status);
60         fRunParameters.SetOwner(1);
61 }
62
63 //______________________________________________________________________________________________
64 AliShuttleLogbookEntry::~AliShuttleLogbookEntry() {
65         //
66         // destructor
67         //
68         fRunParameters.DeleteAll();
69 }
70
71 //______________________________________________________________________________________________
72 AliShuttleLogbookEntry::AliShuttleLogbookEntry(const AliShuttleLogbookEntry &c) :
73 TObject(),
74 fRun(c.fRun),
75 fRunParameters(0),
76 fDATestMode(c.fDATestMode)
77 {
78         //
79         // copy constructor
80         //
81
82         SetDetectorStatus(c.GetDetectorStatus());
83         fRunParameters.SetOwner(1);
84         TIter iter(c.fRunParameters.GetTable());
85         TPair* aPair = 0;
86         while((aPair = dynamic_cast<TPair*>(iter.Next()))){
87                 TObjString* aKey= dynamic_cast<TObjString*>(aPair->Key());
88                 TObjString* aValue= dynamic_cast<TObjString*>(aPair->Value());
89                 fRunParameters.Add(aKey->Clone(), aValue->Clone());
90         }
91 }
92
93 //______________________________________________________________________________________________
94 AliShuttleLogbookEntry &AliShuttleLogbookEntry::operator=(const AliShuttleLogbookEntry &c)
95 {
96         //
97         // assigment operator
98         //
99
100         if (this != &c)
101                 ((AliShuttleLogbookEntry &) c).Copy(*this);
102         return *this;
103 }
104
105 //______________________________________________________________________________________________
106 void AliShuttleLogbookEntry::Copy(TObject& c) const
107 {
108         //
109         // copy function
110         //
111
112         AliShuttleLogbookEntry& target = (AliShuttleLogbookEntry &) c;
113
114         target.fRun = fRun;
115         target.fRunParameters.SetOwner(1);
116         TIter iter(fRunParameters.GetTable());
117         TPair* aPair = 0;
118         while((aPair = dynamic_cast<TPair*>(iter.Next()))){
119                 TObjString* aKey= dynamic_cast<TObjString*>(aPair->Key());
120                 TObjString* aValue= dynamic_cast<TObjString*>(aPair->Value());
121                 target.fRunParameters.Add(aKey->Clone(), aValue->Clone());
122         }
123
124         target.SetDetectorStatus(GetDetectorStatus());
125         target.fDATestMode = fDATestMode;
126 }
127
128 //______________________________________________________________________________________________
129 AliShuttleLogbookEntry::Status AliShuttleLogbookEntry::GetDetectorStatus(Int_t detPos) const
130 {
131         //
132         // get detector status from detector code
133         //
134
135         if(detPos < 0 || detPos >= (Int_t) AliShuttleInterface::NDetectors()) {
136                 AliError(Form("Invalid parameter: %d", detPos));
137                 return kUnprocessed;
138         }
139         return fDetectorStatus[detPos];
140 }
141
142 //______________________________________________________________________________________________
143 void AliShuttleLogbookEntry::SetDetectorStatus(const char* detName, Status status)
144 {
145         //
146         // set detector status from detector code
147         //
148
149         Int_t detPos = AliShuttleInterface::GetDetPos(detName);
150         if(detPos<0) return;
151         SetDetectorStatus(detPos, status);
152 }
153
154 //______________________________________________________________________________________________
155 void AliShuttleLogbookEntry::SetDetectorStatus(const char* detName, const char* statusName)
156 {
157         //
158         // set detector status from detector code
159         //
160
161         Int_t detPos = AliShuttleInterface::GetDetPos(detName);
162         if(detPos<0) return;
163         SetDetectorStatus(detPos, statusName);
164 }
165
166 //______________________________________________________________________________________________
167 void AliShuttleLogbookEntry::SetDetectorStatus(Status* status)
168 {
169         //
170         // set detector status from detector code
171         //
172
173         for(UInt_t i=0; i < AliShuttleInterface::NDetectors(); i++){
174                 fDetectorStatus[i] = status[i];
175         }
176 }
177
178 //______________________________________________________________________________________________
179 void AliShuttleLogbookEntry::SetDetectorStatus(UInt_t detPos, Status status)
180 {
181         //
182         // set detector status from detector code
183         //
184
185         if(detPos >= AliShuttleInterface::NDetectors()) {
186                 AliError(Form("Shuttle has only %d subdetectors!", AliShuttleInterface::NDetectors()));
187                 return;
188         }
189         fDetectorStatus[detPos] = status;
190 }
191
192 //______________________________________________________________________________________________
193 void AliShuttleLogbookEntry::SetDetectorStatus(UInt_t detPos, const char* statusName)
194 {
195         //
196         // set detector status from detector code
197         //
198
199         if(detPos >= AliShuttleInterface::NDetectors()) {
200                 AliError(Form("Shuttle has only %d subdetectors!", AliShuttleInterface::NDetectors()));
201                 return;
202         }
203         TString statusString(statusName);
204         if(statusString.Contains("UNPROCESSED", TString::kIgnoreCase)){
205                 SetDetectorStatus(detPos, kUnprocessed);
206         } else if (statusString.Contains("INACTIVE", TString::kIgnoreCase)) {
207                 SetDetectorStatus(detPos, kInactive);
208         } else if (statusString.Contains("FAILED", TString::kIgnoreCase)) {
209                 SetDetectorStatus(detPos, kFailed);
210         } else if (statusString.Contains("DONE", TString::kIgnoreCase)) {
211                 SetDetectorStatus(detPos, kDone);
212         } else {
213                 AliError(Form("Invalid status name: %s", statusName));
214         }
215 }
216
217 //______________________________________________________________________________________________
218 Bool_t AliShuttleLogbookEntry::IsDone() const{
219         //
220         // return TRUE if all subdetectors are in status DONE, FAILED or INACTIVE
221         //
222
223         for(UInt_t i=0; i < AliShuttleInterface::NDetectors(); i++){
224                 if(fDetectorStatus[i] == kUnprocessed) return kFALSE;
225         }
226         return kTRUE;
227 }
228
229 //______________________________________________________________________________________________
230 const char* AliShuttleLogbookEntry::GetDetectorStatusName(Status status)
231 {
232         //
233         // returns a name (string) of the detector status
234         //
235
236       switch (status){
237             case kUnprocessed: return "UNPROCESSED";
238             case kInactive: return "INACTIVE";
239             case kFailed: return "FAILED";
240             case kDone: return "DONE";
241      }
242      return 0;
243
244 }
245
246 //______________________________________________________________________________________________
247 void AliShuttleLogbookEntry::Print(Option_t* option) const
248 {
249         //
250         // print current shuttle logbook entry
251         //
252
253         TString message = "\n*** Run parameters ***\n";
254         TTimeStamp startTimeStamp(GetStartTime());
255         TTimeStamp endTimeStamp(GetEndTime());
256         message += Form("\tRun \t\t%d\n", fRun);
257         message += Form("\tStarted \t%s\n", startTimeStamp.AsString("s"));
258         message += Form("\tFinished \t%s\n", endTimeStamp.AsString("s"));
259         message += "\n*** Detector status ***\n";
260
261         for (UInt_t i=0; i < AliShuttleInterface::NDetectors(); i++)
262         {
263                 message += Form("\t%2d - %s: %s \n", i, AliShuttleInterface::GetDetName(i),
264                                         GetDetectorStatusName(fDetectorStatus[i]));
265         }
266
267         AliInfo(Form("option: %s",option));
268         TString optionStr(option);
269         if(optionStr=="all"){
270                 message += "\nPrinting full list of run parameters\n";
271                 message += "\tParameter                      Value\n";
272                 TIter iter(fRunParameters.GetTable());
273                 TPair* aPair = 0;
274                 while((aPair = dynamic_cast<TPair*>(iter.Next()))){
275                         TObjString* aKey= dynamic_cast<TObjString*>(aPair->Key());
276                         TObjString* aValue= dynamic_cast<TObjString*>(aPair->Value());
277                         TString keyStr=aKey->GetName();
278                         if(keyStr != "log"){
279                                 message += Form("\t%s ", aKey->GetName());
280                                 if(keyStr.Length()<30) message.Append(' ', 30-keyStr.Length());
281                                 message += Form("%s\n", aValue->GetName());
282                         } else {
283                                 TString logStr(aValue->GetName(), 100);
284                                 message += Form("\tlog (first 100 chars)          %s \n",logStr.Data());
285                         }
286                 }
287         }
288
289         AliInfo(message.Data());
290 }
291 //______________________________________________________________________________________________
292 void AliShuttleLogbookEntry::SetRunParameter(const char* key, const char* value){
293         //
294         // set a run parameter (read from the DAQ logbook)
295         //
296
297         TObjString* keyObj = new TObjString(key);
298         if (fRunParameters.Contains(key)) {
299                 AliWarning(Form("Parameter %s already existing and it will be replaced.", key));
300                 delete fRunParameters.Remove(keyObj);
301
302         }
303         fRunParameters.Add(keyObj, new TObjString(value));
304         AliDebug(2, Form("Number of parameters: %d", fRunParameters.GetEntries()));
305 }
306 //______________________________________________________________________________________________
307 const char* AliShuttleLogbookEntry::GetRunParameter(const char* key) const{
308         //
309         // get a run parameter
310         //
311
312         TObjString* value = dynamic_cast<TObjString*> (fRunParameters.GetValue(key));
313         if(!value) {
314                 AliError(Form("No such parameter: %s", key));
315                 return 0;
316         }
317         return value->GetName();
318 }