Update master to aliroot
[u/mrichter/AliRoot.git] / HLT / QA / AliHLTQADataMakerRec.h
1 //-*- Mode: C++ -*-
2 // $Id$
3
4 #ifndef ALIHLTQADATAMAKERREC_H
5 #define ALIHLTQADATAMAKERREC_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   AliHLTQADataMakerRec.h
11     @author Matthias Richter
12     @date   2010-03-10
13     @brief  Steering class for the HLT offline QA
14 */
15
16 #include "AliHLTQADataMakerBase.h"
17 #include "TList.h"
18
19 /**
20  * @class AliHLTQADataMakerRec
21  * Steering class for HLT QA for reconstruction.
22  *
23  * HLT QA allows to define multiple HLT detector QA plugins. Each plugin
24  * inherits through AliHLTQADataMakerBase from AliQADataMakerRec. Currently only
25  * the AliQADataMakerRec interface is supported in the HLT QA. It seems that
26  * AliQADataMakerSim is not relevant for HLT QA. However if so and at some
27  * point it is required please inform the author of this class.
28  *
29  * AliHLTQADataMakerRec keeps a list of detector plugins and redirects the
30  * different QA calls to all the plugins. At EndOfDetectorCycle all histograms
31  * are collected from the plugins after EndOfDetectorCycle has been invoked
32  * for every plugin.
33  *
34  * Detector plugins are added via the AliHLTModuleAgent. The optional function
35  * AliHLTModuleAgent::GetQAPlugins() has to return a string of blank separated
36  * class names.
37  * 
38  * HLT QA requires access to both the Esd and HLTEsd objects. Therefore the
39  * Exec function is overloaded in AliHLTQADataMakerRec. A specific hnadling
40  * in AliQAManager::RunOneEvent makes sure that an array of those objects
41  * is passed, the call is then redirected to 
42  * MakeESDs(AliESDEvent*, AliESDEvent*). Please note that the standard function
43  * MakeESDs(AliESDEvent*) is usually not the place for HLT QA.
44  */
45 class AliHLTQADataMakerRec: public AliHLTQADataMakerBase {
46
47 public:
48
49   AliHLTQADataMakerRec();
50   virtual ~AliHLTQADataMakerRec();
51
52 protected:
53   virtual void StartOfDetectorCycle();
54   virtual void EndOfDetectorCycle(AliQAv1::TASKINDEX_t, TObjArray** list);
55   virtual void MakeRaws(AliRawReader * rawReader);
56   virtual void MakeESDs(AliESDEvent * esd, AliESDEvent* hltesd);
57
58   /// iterate over available agents and query class names of plugins
59   int LoadAgents();
60
61   /// load plugins from list of blank separated class names
62   int LoadPlugins(const char* plugins=NULL);
63
64   enum {
65     kDigitsListInit    = 0x1,
66     kESDsListInit      = 0x2,
67     kRawsListInit      = 0x4,
68     kRecPointsListInit = 0x8
69   };
70
71 private:
72   /** copy constructor prohibited */
73   AliHLTQADataMakerRec(const AliHLTQADataMakerRec&);   
74   /** assignment operator prohibited */
75   AliHLTQADataMakerRec& operator = (const AliHLTQADataMakerRec&);
76
77   TList fPlugins; //! list of HLT module QA plugins
78   unsigned fFlags; //!
79
80   ClassDef(AliHLTQADataMakerRec,0)  // HLT Quality Assurance Data Maker for reconstruction
81 };
82
83 #endif // ALIHLTQADATAMAKERREC_H