]> git.uio.no Git - u/mrichter/AliRoot.git/blame - HLT/BASE/AliHLTTTreeProcessor.h
Adding new data type.
[u/mrichter/AliRoot.git] / HLT / BASE / AliHLTTTreeProcessor.h
CommitLineData
4731a36c 1//-*- Mode: C++ -*-
2// $Id$
3
4#ifndef ALIHLTTTREEPROCESSOR_H
5#define ALIHLTTTREEPROCESSOR_H
6//* This file is property of and copyright by the ALICE HLT Project *
7//* ALICE Experiment at CERN, All rights reserved. *
8//* See cxx source for full Copyright notice *
9
10/// @file AliHLTTTreeProcessor.h
9bed6a67 11/// @author Timur Pocheptsov, Matthias Richter
4731a36c 12/// @date 05.07.2010
13/// @brief Generic component for data collection in a TTree
14
9bed6a67 15#include <list>
16
17#include <TString.h>
18
4731a36c 19#include "AliHLTProcessor.h"
20
21class TTree;
22class TH1;
a6b16ade 23class TStopwatch;
4731a36c 24
25/**
26 * @class AliHLTTTreeProcessor
27 * Generic component for data collection in a TTree, or as a special case
28 * in a TNtuple (which is a tree with only float branches). Child components
29 * implement the creation and filling of the tree, which is dependent on the
30 * data itself.
31 *
32 * Child components have to implement the basic component property methods
33 * like GetComponentID(), GetInputDataTypes(), and Spawn(). Default
34 * implementations of GetOutputDataSize() and GetOutputDataType() are already
35 * provided by the base class.
36 *
37 * The base class keeps a circular TTree of a specific event count. Histograms
38 * are periodically generated by applying a table of selections and cuts. The
39 * table can be configured and changed at run-time and the data sample in the
40 * tree can be reset.
41 *
42 * @ingroup alihlt_base
43 */
44class AliHLTTTreeProcessor : public AliHLTProcessor {
9bed6a67 45private:
46 enum EDefaults {
47 kMaxEntries = 1000,
23ef7d2b 48 kDefaultNBins = 200,
9bed6a67 49 kInterval = 5
50 };
51public:
52 /// default constructor
4731a36c 53 AliHLTTTreeProcessor();
54 /// destructor
55 virtual ~AliHLTTTreeProcessor();
56
57 /// inherited from AliHLTComponent, get the output data type
58 virtual AliHLTComponentDataType GetOutputDataType();
59
60 /// inherited from AliHLTComponent, get the output data size estimator
9bed6a67 61 virtual void GetOutputDataSize(unsigned long& constBase, double& inputMultiplier);
4731a36c 62
9bed6a67 63protected:
4731a36c 64 /// initialization, overloaded from AliHLTComponent
9bed6a67 65 int DoInit(int argc, const char** argv);
66 /// deinitialization, overloaded from AliHLTComponent
4731a36c 67 int DoDeinit();
68 /// inherited from AliHLTProcessor, data processing
9bed6a67 69 int DoEvent(const AliHLTComponentEventData& evtData,
70 AliHLTComponentTriggerData& trigData);
4731a36c 71 using AliHLTProcessor::DoEvent;
42aae4dc 72 /// inherited from AliHLTComponent, scan argument
73 virtual int ScanConfigurationArgument(int argc, const char** argv);
9bed6a67 74
75 class AliHLTHistogramDefinition {
76 public:
77 AliHLTHistogramDefinition()
b3b4933e 78 : fName(), fSize(0), fExpr(), fTitle(), fCut(), fOpt()
9bed6a67 79 {
80 }
81
82 const TString& GetName()const{return fName;}
83 void SetName(const TString& name){fName = name;}
84
85 int GetSize()const{return fSize;}
86 void SetSize(int size){fSize = size;}
87
88 const TString& GetExpression()const{return fExpr;}
89 void SetExpression(const TString& expr){fExpr = expr;}
90
b3b4933e 91 const TString& GetTitle()const{return fTitle;}
92 void SetTitle(const TString& title){fTitle = title;}
93
9bed6a67 94 const TString& GetCut()const{return fCut;}
95 void SetCut(const TString& cut){fCut = cut;}
96
97 const TString& GetDrawOption()const{return fOpt;}
98 void SetDrawOption(const TString& opt){fOpt = opt;}
99
100 private:
101
102 TString fName;
103 int fSize;
104 TString fExpr;
b3b4933e 105 TString fTitle;
9bed6a67 106 TString fCut;
107 TString fOpt;
108 };
109
110 std::list<AliHLTHistogramDefinition> fDefinitions;
111 typedef std::list<AliHLTHistogramDefinition>::iterator list_iterator;
112 typedef std::list<AliHLTHistogramDefinition>::const_iterator list_const_iterator;
113
9bed6a67 114private:
4731a36c 115 /// create the tree instance and all branches
116 virtual TTree* CreateTree(int argc, const char** argv) = 0;
4731a36c 117 /// process input blocks and fill tree
9bed6a67 118 virtual int FillTree(TTree* pTree, const AliHLTComponentEventData& evtData,
119 AliHLTComponentTriggerData& trigData ) = 0;
120 /// dtOrigin for PushBack.
121 virtual AliHLTComponentDataType GetOriginDataType()const = 0;
122 /// spec for PushBack
66942c81 123 virtual AliHLTUInt32_t GetDataSpec()const {return fUniqueId;}
9bed6a67 124 /// default histogram definitions.
125 virtual void FillHistogramDefinitions() = 0;
4731a36c 126
127 /// create a histogram from the tree
9bed6a67 128 TH1* CreateHistogram(const AliHLTHistogramDefinition& def);
129 /// parse arguments, containing histogram definition.
130 int ParseHistogramDefinition(int argc, const char** argv, int pos, AliHLTHistogramDefinition& dst)const;
4731a36c 131
132 /// the TTree
133 TTree* fTree; //! the tree instance
134 /// max entries
135 int fMaxEntries; //! maximum number of entries in the circular tree
136 /// publish interval in s
9bed6a67 137 unsigned fPublishInterval; //! publish interval in s
138 /// time stamp - publish or not.
139 unsigned fLastTime; //! last time the histogramms were published
140
a6b16ade 141 TStopwatch* fpEventTimer; //! stopwatch for event processing
142 TStopwatch* fpCycleTimer; //! stopwatch for event cycle
66942c81 143 AliHLTUInt32_t fMaxMemory; //! maximum memory consumption allowed for the process
a6b16ade 144 AliHLTUInt32_t fMaxEventTime; //! allowed maximum processing time in usec
145 AliHLTUInt32_t fNofEventsForce; //! number of events to ignore the processing time
146 AliHLTUInt32_t fForcedEventsCount; //! event count for the forced events
147 AliHLTUInt32_t fSkippedEventsCount; //! number of skipped events
81e2f050 148 AliHLTUInt32_t fNewEventsCount; //! number of new events since last publishing
66942c81 149 AliHLTUInt32_t fUniqueId; //! a unique id for this process used to identify the output of multiple processes
150 AliHLTUInt32_t fIgnoreCycleTime; //! ignore cycle time for n seconds
151 float fCycleTimeFactor; //! weight for the cycle time
a6b16ade 152
153 static const AliHLTUInt32_t fgkTimeScale;
154
9bed6a67 155 /// copy constructor prohibited
156 AliHLTTTreeProcessor(const AliHLTTTreeProcessor&);
157 /// assignment operator prohibited
158 AliHLTTTreeProcessor& operator = (const AliHLTTTreeProcessor&);
4731a36c 159
160 ClassDef(AliHLTTTreeProcessor, 0)
161};
162#endif