Line data Source code
1 : //-*- Mode: C++ -*-
2 : // $Id$
3 :
4 : #ifndef ALIHLTOUTHANDLERCHAIN_H
5 : #define ALIHLTOUTHANDLERCHAIN_H
6 : //* This file is property of and copyright by the *
7 : //* ALICE Experiment at CERN, All rights reserved. *
8 : //* See cxx source for full Copyright notice *
9 :
10 : /// @file AliHLTOUTHandlerChain.h
11 : /// @author Matthias Richter
12 : /// @date 24.06.2008
13 : /// @brief HLTOUT handler of type kChain.
14 : ///
15 :
16 : #include "AliHLTOUTHandler.h"
17 : #include "TString.h"
18 :
19 : class AliHLTSystem;
20 : class AliHLTConfiguration;
21 : class AliHLTConfigurationHandler;
22 :
23 : /**
24 : * @class AliHLTOUTHandlerChain
25 : * The default HLTOUT handler for type kChain.
26 : *
27 : * The handler implements the kChain processing of HLTOUT data.
28 : * The ids of the chains to be run during processing are provided
29 : * as parameter to the constructor. The AliHLTModuleAgent
30 : * can just create a new instance and specify the chains in order
31 : * to define the HLTOUT handling of type kChain for a certain data
32 : * block. The same instance can be returned for multiple data blocks.
33 : * The handler will run once on all data blocks.
34 : *
35 : * The AliHLTOUTPublisherComponent must be used as data source in order
36 : * to publish the data blocks from HLTOUT into the chain. The component
37 : * publishes all data blocks selected for the handler. Additional
38 : * filter rules can be applied.
39 : *
40 : * <h2>Chain configuration</h2>
41 : * The tasks in the chain to be run can be defined either by
42 : * the AliHLTModuleAgent in conjunction with all other configurations or
43 : * by an implementation of CreateConfigurations().
44 : *
45 : * The handler is controlled by arguments passed to the constructor, the
46 : * syntax is equal to the AliHLTSystem (see AliHLTSystem::ScanOptions).
47 : *
48 : * <h2>Usage example:</h2>
49 : * An agent implementation for some sample histograms. Asumes a chain to
50 : * be registered with name 'SAMPLE-my-histo-converter'
51 : * <pre>
52 : * AliHLTOUTHandler* AliHLTMyAgent::GetOutputHandler(AliHLTComponentDataType dt,
53 : * AliHLTUInt32_t spec)
54 : * {
55 : * // afterburner for some histograms
56 : * if (dt==kAliHLTDataTypeHistogram|kAliHLTDataOriginSample) {
57 : * return new AliHLTOUTHandlerChain("chains=SAMPLE-my-histo-converter");
58 : * }
59 : *
60 : * return NULL;
61 : * }
62 : * </pre>
63 : *
64 : * <h2>Data output</h2>
65 : * The chain can produce output data as usual. All produced data blocks are
66 : * added to the HLTOUT. This means a chain can e.g. produce ESD data blocks
67 : * out of the HLT output by applying a converter component as an afterburner.
68 : * The produced output of the chain is automatically subject to HLTOUT
69 : * standard processing.
70 : *
71 : * HLTOUT processing sequence:
72 : * - first handlers of type kChain
73 : * - handlers of type kEsd
74 : * - handlers of type kProprietary
75 : *
76 : * @ingroup alihlt_aliroot_reconstruction
77 : */
78 : class AliHLTOUTHandlerChain : public AliHLTOUTHandler {
79 : public:
80 : /** constructor */
81 : AliHLTOUTHandlerChain(const char* arguments);
82 : /** standard destructor */
83 : virtual ~AliHLTOUTHandlerChain();
84 :
85 : /**
86 : * Process a data block.
87 : * The handler runs a normal HLT chain for processing of the selected blocks.
88 : * The input of the chain is provided by the AliHLTOUTPublisher component.
89 : * @return equipment id the block should be used for.
90 : */
91 : virtual int ProcessData(AliHLTOUT* pData);
92 : protected:
93 : /**
94 : * Create configurations.
95 : * The configurations of the chain to be run can be defined either by
96 : * the AliHLTModuleAgent in conjunction with all other configurations or
97 : * by an implementation of the function.
98 : */
99 : virtual int CreateConfigurations(AliHLTConfigurationHandler* handler);
100 :
101 : private:
102 : /** standard constructor prohibited */
103 : AliHLTOUTHandlerChain();
104 : /** copy constructor prohibited */
105 : AliHLTOUTHandlerChain(const AliHLTOUTHandlerChain&);
106 : /** assignment operator prohibited */
107 : AliHLTOUTHandlerChain& operator=(const AliHLTOUTHandlerChain&);
108 :
109 : /**
110 : * Create and init AliHLTSystem.
111 : * Read the arguments and create the AliHLTOUTTask as data dump.
112 : */
113 : int InitSystem();
114 :
115 : TString fChains; //! transient
116 : TString fOptions; //! transient
117 :
118 : AliHLTSystem* fpSystem; //!transient
119 : bool fbHaveOutput; //!transient
120 :
121 126 : ClassDef(AliHLTOUTHandlerChain, 1)
122 : };
123 : #endif
|