adding a component for statistics and monitoring of the DAQ readout list
[u/mrichter/AliRoot.git] / HLT / BASE / util / AliHLTAgentUtil.cxx
1 // @(#) $Id$
2
3 /**************************************************************************
4  * This file is property of and copyright by the ALICE HLT Project        * 
5  * ALICE Experiment at CERN, All rights reserved.                         *
6  *                                                                        *
7  * Primary Authors: Matthias Richter <Matthias.Richter@ift.uib.no>        *
8  *                  for The ALICE HLT Project.                            *
9  *                                                                        *
10  * Permission to use, copy, modify and distribute this software and its   *
11  * documentation strictly for non-commercial purposes is hereby granted   *
12  * without fee, provided that the above copyright notice appears in all   *
13  * copies and that both the copyright notice and this permission notice   *
14  * appear in the supporting documentation. The authors make no claims     *
15  * about the suitability of this software for any purpose. It is          *
16  * provided "as is" without express or implied warranty.                  *
17  **************************************************************************/
18
19 /** @file   AliHLTAgentUtil.cxx
20     @author Matthias Richter
21     @date   
22     @brief  Agent of the libAliHLTUtil library
23 */
24
25 #include <cassert>
26 #include "AliHLTAgentUtil.h"
27 #include "AliHLTConfiguration.h"
28 #include "AliHLTOUTHandlerChain.h"
29
30 // header files of library components
31 #include "AliHLTDataGenerator.h"
32 #include "AliHLTRawReaderPublisherComponent.h"
33 #include "AliHLTLoaderPublisherComponent.h"
34 #include "AliHLTRootFileStreamerComponent.h"
35 #include "AliHLTRootFileWriterComponent.h"
36 #include "AliHLTRootFilePublisherComponent.h"
37 //#include "AliHLTMCGeneratorComponent.h"
38 #include "AliHLTESDMCEventPublisherComponent.h"
39 #include "AliHLTFileWriter.h"
40 #include "AliHLTFilePublisher.h"
41 #include "AliHLTBlockFilterComponent.h"
42 #include "AliHLTEsdCollectorComponent.h"
43 #include "AliHLTReadoutListDumpComponent.h"
44 #include "AliHLTOUTPublisherComponent.h"
45 #include "AliHLTCompStatCollector.h"
46
47 /** global instance for agent registration */
48 AliHLTAgentUtil gAliHLTAgentUtil;
49
50 /** ROOT macro for the implementation of ROOT specific class methods */
51 ClassImp(AliHLTAgentUtil)
52
53 AliHLTAgentUtil::AliHLTAgentUtil()
54   :
55   AliHLTModuleAgent("Util"),
56   fCompStatDataHandler(NULL)
57 {
58   // see header file for class documentation
59   // or
60   // refer to README to build package
61   // or
62   // visit http://web.ift.uib.no/~kjeks/doc/alice-hlt
63 }
64
65 AliHLTAgentUtil::~AliHLTAgentUtil()
66 {
67   // see header file for class documentation
68 }
69
70 int AliHLTAgentUtil::CreateConfigurations(AliHLTConfigurationHandler* handler,
71                                           AliRawReader* /*rawReader*/,
72                                           AliRunLoader* /*runloader*/) const
73 {
74   // see header file for class documentation
75   if (!handler) return 0;
76
77   /////////////////////////////////////////////////////////////////////////////////////
78   //
79   // a kChain HLTOUT configuration for processing of {'COMPSTAT':'PRIV'} data blocks
80   // produces a TTree object of the component statistics and writes it to disc
81
82   // publisher component
83   handler->CreateConfiguration("UTIL-hltout-compstat-publisher", "AliHLTOUTPublisher"   , NULL, "");
84
85   // collector configuration
86   handler->CreateConfiguration("UTIL-compstat-converter", "StatisticsCollector", "UTIL-hltout-compstat-publisher", "");
87
88   // writer configuration
89   handler->CreateConfiguration("UTIL-compstat-writer", "ROOTFileWriter", "UTIL-compstat-converter", "-datafile HLT.statistics.root -concatenate-events -overwrite");
90
91   return 0;
92 }
93
94 const char* AliHLTAgentUtil::GetReconstructionChains(AliRawReader* /*rawReader*/,
95                                                      AliRunLoader* /*runloader*/) const
96 {
97   // see header file for class documentation
98   return NULL;
99 }
100
101 const char* AliHLTAgentUtil::GetRequiredComponentLibraries() const
102 {
103   // see header file for class documentation
104   return NULL;
105 }
106
107 int AliHLTAgentUtil::RegisterComponents(AliHLTComponentHandler* pHandler) const
108 {
109   // see header file for class documentation
110   assert(pHandler);
111   if (!pHandler) return -EINVAL;
112   pHandler->AddComponent(new AliHLTDataGenerator);
113   pHandler->AddComponent(new AliHLTRawReaderPublisherComponent);
114   pHandler->AddComponent(new AliHLTLoaderPublisherComponent);
115   pHandler->AddComponent(new AliHLTRootFileStreamerComponent);
116   pHandler->AddComponent(new AliHLTRootFileWriterComponent);
117   pHandler->AddComponent(new AliHLTRootFilePublisherComponent);
118   //  pHandler->AddComponent(new AliHLTMCGeneratorComponent);
119   pHandler->AddComponent(new AliHLTESDMCEventPublisherComponent);
120   pHandler->AddComponent(new AliHLTFileWriter);
121   pHandler->AddComponent(new AliHLTFilePublisher);
122   pHandler->AddComponent(new AliHLTBlockFilterComponent);
123   pHandler->AddComponent(new AliHLTEsdCollectorComponent);
124   pHandler->AddComponent(new AliHLTReadoutListDumpComponent);
125   pHandler->AddComponent(new AliHLTOUTPublisherComponent);
126   pHandler->AddComponent(new AliHLTCompStatCollector);
127   return 0;
128 }
129
130 int AliHLTAgentUtil::GetHandlerDescription(AliHLTComponentDataType dt,
131                                            AliHLTUInt32_t /*spec*/,
132                                            AliHLTOUTHandlerDesc& desc) const
133 {
134   // see header file for class documentation
135   return 0;
136
137   // handler for the component statistics data blocks {'COMPSTAT':'PRIV'}
138   if (dt==kAliHLTDataTypeComponentStatistics ||
139       dt==kAliHLTDataTypeComponentTable) {
140       desc=AliHLTOUTHandlerDesc(kChain, dt, GetModuleId());
141       return 1;
142   }
143
144   return 0;
145 }
146
147 AliHLTOUTHandler* AliHLTAgentUtil::GetOutputHandler(AliHLTComponentDataType dt,
148                                                    AliHLTUInt32_t /*spec*/)
149 {
150   // see header file for class documentation
151   return NULL;
152
153   // handler for the component statistics data blocks {'COMPSTAT':'PRIV'}
154   if (dt==kAliHLTDataTypeComponentStatistics ||
155       dt==kAliHLTDataTypeComponentTable) {
156     if (fCompStatDataHandler==NULL)
157       fCompStatDataHandler=new AliHLTOUTHandlerChain("chains=UTIL-compstat-writer");
158     return fCompStatDataHandler;
159   }
160
161   return NULL;
162 }
163
164 int AliHLTAgentUtil::DeleteOutputHandler(AliHLTOUTHandler* pInstance)
165 {
166   // see header file for class documentation
167   if (pInstance==NULL) return -EINVAL;
168
169   if (pInstance==fCompStatDataHandler) {
170     delete fCompStatDataHandler;
171     fCompStatDataHandler=NULL;
172   }
173   return 0;
174 }