3baa641eb8a3f949359efa3415a8768714e5dfa1
[u/mrichter/AliRoot.git] / SHUTTLE / TestShuttle / AliTestShuttle.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 $Log$
18 Revision 1.2  2006/03/07 07:52:34  hristov
19 New version (B.Yordanov)
20
21 Revision 1.3  2005/11/17 17:47:34  byordano
22 TList changed to TObjArray
23
24 Revision 1.2  2005/11/17 14:43:22  byordano
25 import to local CVS
26
27 Revision 1.1.1.1  2005/10/28 07:33:58  hristov
28 Initial import as subdirectory in AliRoot
29
30 Revision 1.1.1.1  2005/09/12 22:11:40  byordano
31 SHUTTLE package
32
33 Revision 1.2  2005/08/29 21:15:47  byordano
34 some docs added
35
36 */
37
38 //
39 // test implementation of the AliShuttleInterface, to be used for local tests of preprocessors
40 //
41 // reads files from the local disk
42 // stores to local CDB
43 // logs to the screen
44 //
45
46 #include "AliTestShuttle.h"
47 #include "AliLog.h"
48
49 #include "AliCDBManager.h"
50 #include "AliCDBMetaData.h"
51 #include "AliCDBId.h"
52 #include "AliPreprocessor.h"
53
54 #include <TMap.h>
55 #include <TList.h>
56 #include <TString.h>
57 #include <TObjString.h>
58
59 ClassImp(AliTestShuttle)
60
61 //______________________________________________________________________________________________
62 AliTestShuttle::AliTestShuttle() :
63   fInputFiles(0),
64   fPreprocessors(0),
65   fDcsAliasMap(0)
66 {
67   // constructor
68
69   fInputFiles = new TMap;
70   fPreprocessors = new TObjArray;
71 }
72
73 //______________________________________________________________________________________________
74 AliTestShuttle::~AliTestShuttle()
75 {
76   // destructor
77
78   delete fInputFiles;
79   fInputFiles = 0;
80
81   delete fPreprocessors;
82   fPreprocessors = 0;
83
84   delete fDcsAliasMap;
85   fDcsAliasMap = 0;
86 }
87
88 //______________________________________________________________________________________________
89 UInt_t AliTestShuttle::Store(const char* detector, TObject* object, AliCDBMetaData* metaData)
90 {
91   // Stores the CDB object
92   // This function should be called at the end of the preprocessor cycle
93   //
94   // This implementation just stores it on the local disk, the full AliShuttle
95   // puts it to the Grid FileCatalog
96
97   AliCDBId id(Form("%s/SHUTTLE/Data", detector), 0, 0);
98
99   return AliCDBManager::Instance()->Put(object, id, metaData);
100 }
101
102 //______________________________________________________________________________________________
103 const char* AliTestShuttle::GetFile(Int_t system, const char* detector, const char* id, const char* source)
104 {
105   // This function retrieves a file from the given system (kDAQ, kDCS, kHLT) with the given file id
106   // and from the given source in the system.
107   // The function returnes the path to the local file.
108   //
109   // test implementation of GetFile
110   // takes files from the local disks, files are passen in a TMap in the constructor
111
112   TString key;
113   key.Form("%s-%s-%s", fkSystemNames[system], detector, id);
114   TPair* sourceListPair = dynamic_cast<TPair*> (fInputFiles->FindObject(key.Data()));
115   TMap* sourceList = 0;
116   if (sourceListPair)
117     sourceList = dynamic_cast<TMap*> (sourceListPair->Value());
118   if (!sourceList)
119   {
120     AliError(Form("Could not find any file in %s with id %s (%s)", fkSystemNames[system], id, key.Data()));
121     return 0;
122   }
123
124   TPair* fileNamePair = dynamic_cast<TPair*> (sourceList->FindObject(source));
125   TObjString* fileName = dynamic_cast<TObjString*> (fileNamePair->Value());
126   if (!fileName)
127   {
128     AliError(Form("Could not find files from source %s in %s with id %s",
129                         source, fkSystemNames[system], id));
130     return 0;
131   }
132
133   return fileName->GetString().Data();
134 }
135
136 //______________________________________________________________________________________________
137 TList* AliTestShuttle::GetFileSources(Int_t system, const char* detector, const char* id)
138 {
139   // Returns a list of sources in a given system that saved a file with the given id
140   //
141   // test implementation of GetFileSources
142   // takes files from the local disks, files are passen in a TMap in the constructor
143
144   TString key;
145   key.Form("%s-%s-%s", fkSystemNames[system], detector, id);
146   TPair* sourceListPair = dynamic_cast<TPair*> (fInputFiles->FindObject(key.Data()));
147   TMap* sourceList = 0;
148   if (sourceListPair)
149     sourceList = dynamic_cast<TMap*> (sourceListPair->Value());
150   if (!sourceList)
151   {
152     AliError(Form("Could not find any file in %s with id %s (%s)", fkSystemNames[system], id, key.Data()));
153     return 0;
154   }
155
156   TIterator* iter = sourceList->GetTable()->MakeIterator();
157   TObject* obj = 0;
158   TList* list = new TList;
159   while ((obj = iter->Next()))
160   {
161     TPair* pair = dynamic_cast<TPair*> (obj);
162     if (pair)
163       list->Add(pair->Key());
164   }
165
166   delete iter;
167
168   return list;
169 }
170
171 //______________________________________________________________________________________________
172 void AliTestShuttle::Log(const char* detector, const char* message)
173 {
174   // test implementation of Log
175   // just prints to the screen
176
177   AliInfo(Form("%s: %s", detector, message));
178 }
179
180 //______________________________________________________________________________________________
181 void AliTestShuttle::AddInputFile(Int_t system, const char* detector, const char* id, const char* source, const char* fileName)
182 {
183   // This function adds a file to the list of input files
184
185   TString key;
186   key.Form("%s-%s-%s", fkSystemNames[system], detector, id);
187   TPair* sourceListPair = dynamic_cast<TPair*> (fInputFiles->FindObject(key.Data()));
188   TMap* sourceList = 0;
189   if (sourceListPair)
190     sourceList = dynamic_cast<TMap*> (sourceListPair->Value());
191   if (!sourceList)
192   {
193     sourceList = new TMap;
194     fInputFiles->Add(new TObjString(key), sourceList);
195   }
196
197   sourceList->Add(new TObjString(source), new TObjString(fileName));
198 }
199
200 //______________________________________________________________________________________________
201 void AliTestShuttle::Process()
202 {
203   // This function tests all preprocessors that are registered to it
204   // All preprocessors get the same dcs alias map and have access to the same list of files.
205
206   for (Int_t i=0; i<fPreprocessors->GetEntries(); ++i)
207   {
208     AliPreprocessor* preprocessor = dynamic_cast<AliPreprocessor*> (fPreprocessors->At(i));
209     if (preprocessor)
210     {
211       preprocessor->Initialize(0, 1, 0);
212       preprocessor->Process(fDcsAliasMap);
213     }
214   }
215 }
216
217 //______________________________________________________________________________________________
218 void AliTestShuttle::RegisterPreprocessor(AliPreprocessor* preprocessor)
219 {
220   // registers a preprocessor
221
222   fPreprocessors->Add(preprocessor);
223 }