93ad4c68e84d08aa364a3681df7fb789b6876531
[u/mrichter/AliRoot.git] / HLT / MUON / OfflineInterface / AliHLTMUONRecHitsSource.h
1 #ifndef ALIHLTMUONRECHITSSOURCE_H
2 #define ALIHLTMUONRECHITSSOURCE_H
3 /**************************************************************************
4  * This file is property of and copyright by the ALICE HLT Project        * 
5  * All rights reserved.                                                   *
6  *                                                                        *
7  * Primary Authors:                                                       *
8  *   Artur Szostak <artursz@iafrica.com>                                  *
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 /* $Id$ */
20
21 /**
22  * @file   AliHLTMUONRecHitsSource.h
23  * @author Artur Szostak <artursz@iafrica.com>
24  * @date   
25  * @brief  Class for generating reconstructed hits data blocks from AliRoot data.
26  */
27
28 #include "AliHLTOfflineDataSource.h"
29
30 class AliMUONMCDataInterface;
31 class AliMUONDataInterface;
32
33 /**
34  * AliHLTMUONRecHitsSource is a HLT-AliRoot data source object which generates
35  * and serves AliHLTMUONRecHitsBlockStruct type data blocks to the HLT system.
36  * This is meant as a debugging utility which can optionally generate the data
37  * blocks from simulated GEANT hits or MUON offline reconstructed hits.
38  *
39  * Command line flags:
40  *  -simdata
41  *      Specify this option to publish GEANT hits.
42  *  -recdata
43  *      Specify this option to publish offline reconstructed raw clusters.
44  *  -plane left|right|all
45  *      Specifies if data from the left (x < 0), right (x >= 0) or the whole XY
46  *      plane should be published.
47  *  -chamber <number>|<number>-<number>[,<number>|<number>-<number>]...
48  *      Selects the chambers from which to publish data. Valid chamber numbers
49  *      in the range [1..10]. The string after '-chamber' is a comma separated
50  *      list of numbers or ranges. Some examples of strings:
51  *      1  1-2  1,2,3  1,3-5,7 etc...
52  *  -firstevent <number>
53  *      Indicates the first event number to fetch from AliRoot. The default is to
54  *      start from zero and increment the event number after every GetEvent call.
55  *      This mode causes the component to ignore the event number passed to it by
56  *      the system and rather use an internal counter. This mode can be overriden
57  *      with the -event_number_literal flag.
58  *  -event_number_literal
59  *      This flag indicates to use the event numbers as literal indices into the
60  *      AliRoot trees. This option will cause the component to ignore the -firstevent
61  *      flag.
62  */
63 class AliHLTMUONRecHitsSource : public AliHLTOfflineDataSource
64 {
65 public:
66
67         AliHLTMUONRecHitsSource();
68         virtual ~AliHLTMUONRecHitsSource();
69         
70         virtual int GetEvent(
71                         const AliHLTComponentEventData& evtData,
72                         AliHLTComponentTriggerData& trigData,
73                         AliHLTUInt8_t* outputPtr, 
74                         AliHLTUInt32_t& size,
75                         vector<AliHLTComponentBlockData>& outputBlocks
76                 );
77         
78         virtual const char* GetComponentID();
79
80         virtual AliHLTComponentDataType GetOutputDataType();
81
82         virtual void GetOutputDataSize(unsigned long& constBase, double& inputMultiplier);
83
84         virtual AliHLTComponent* Spawn();
85
86 protected:
87
88         virtual int DoInit(int argc, const char** argv);
89         virtual int DoDeinit();
90         
91 private:
92
93         // Prevent copying of these objects.
94         AliHLTMUONRecHitsSource(const AliHLTMUONRecHitsSource& /*object*/);
95         AliHLTMUONRecHitsSource& operator = (const AliHLTMUONRecHitsSource& /*object*/);
96         
97         AliMUONMCDataInterface* fMCDataInterface; // access to MUON MC-related data
98         AliMUONDataInterface* fDataInterface; // access to MUON data
99
100         enum SelectionType
101         {
102                 kLeftPlane,  // everything from x < 0
103                 kRightPlane, // everything from x >= 0
104                 kWholePlane  // for all x
105         };
106         
107         /**
108          * Parses a string with the following format:
109          *   <number>|<number>-<number>[,<number>|<number>-<number>]...
110          * For example: 1  1,2,3  1-2   1,2-4,5  etc...
111          * Flags in the fServeChamber will be set to 'true' for all appropriate
112          * values parsed.
113          * @param str  The string to parse.
114          * @return  Zero on success and EINVAL if there is a parse error.
115          */
116         int ParseChamberString(const char* str);
117
118         SelectionType fSelection; //! Indicates if we should publish from the left, right or whole XY plane.
119         bool fServeChamber[10]; //! Flag to indicate if hits from a given chamber should be published.
120         
121         Int_t fCurrentEvent;  //! The current event index that is loaded.
122                               //  -1 indicates that we should rather use the event
123                               // numbers as given by the system.
124
125         ClassDef(AliHLTMUONRecHitsSource, 0); // dHLT data source for reconstructed hit data blocks.
126 };
127
128 #endif // ALIHLTMUONRECHITSSOURCE_H