Applying fixes and updates (Indra)
[u/mrichter/AliRoot.git] / HLT / MUON / OnlineAnalysis / AliHLTMUONTriggerReconstructor.h
1 #ifndef AliHLTMUONTRIGGERRECONSTRUCTOR_H
2 #define AliHLTMUONTRIGGERRECONSTRUCTOR_H
3 /**************************************************************************
4  * This file is property of and copyright by the ALICE HLT Project        * 
5  * All rights reserved.                                                   *
6  *                                                                        *
7  * Primary Authors:                                                       *
8  *   Indranil Das <indra.das@saha.ac.in>                                  *
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  Created on : 16/05/2007
23  Purpose    : This class is supposed to read the trigger DDL files and 
24               give the output AliHLTMUONTriggerRecordStruct
25  Author     : Indranil Das, HEP Division, SINP
26  Email      : indra.das@saha.ac.in | indra.ehep@gmail.com
27 **********************************************************************/
28
29 #include <vector>
30
31 #include <AliHLTLogging.h>
32
33 #include "AliHLTMUONTriggerRecordsBlockStruct.h"
34 #include "AliHLTMUONHitReconstructor.h"
35
36 #if __GNUC__ < 3
37 #define std
38 #endif
39
40 typedef std::vector<int> DataIdIndex;
41
42 class AliHLTMUONTriggerReconstructor : public AliHLTLogging
43 {
44
45  public:
46
47   struct RegToLoc{
48     int fTrigDDL;  // trigger id (0 or 1)
49     int fRegId,fLoc,fLocId;  // regeonal and local id.
50     int fSwitch;  // packed switch word of 10 bits.
51     int fDetElemId[4];  // Four detection element correspond to four detection element for each local card.
52   };
53
54
55   AliHLTMUONTriggerReconstructor();
56   virtual ~AliHLTMUONTriggerReconstructor();
57
58   bool LoadLookUpTable(AliHLTMUONHitReconstructor::DHLTLut* lookUpTableData, int lookUpTableId);
59   
60   bool SetRegToLocCardMap(RegToLoc* regToLoc);
61   //bool Run(int iEvent, int iDDL, AliHLTMUONTriggerRecordStruct trigRecord, int *nofTrigRec); // for Reading using rawreader
62   bool Run(int *rawData, int *rawDataSize, AliHLTMUONTriggerRecordStruct trigRecord[], int *nofTrigRec);
63
64   int GetLutLine(){return fgkLutLine ;}
65
66   static int GetkDetectorId() { return AliHLTMUONTriggerReconstructor::fgkDetectorId ; }
67   static int GetkDDLOffSet() { return AliHLTMUONTriggerReconstructor::fgkDDLOffSet; }
68   static int GetkNofDDL() { return AliHLTMUONTriggerReconstructor::fgkNofDDL; }
69   static int GetkDDLHeaderSize() { return AliHLTMUONTriggerReconstructor::fgkDDLHeaderSize; }
70   
71  private: 
72   static const int fgkDetectorId ;            // Detector ID
73   static const int fgkDDLOffSet ;             // DDL Offset
74   static const int fgkNofDDL ;                // Number of DDL 
75   static const int fgkDDLHeaderSize  ;        // DDL header size  
76
77  protected:
78
79   AliHLTMUONTriggerReconstructor(const AliHLTMUONTriggerReconstructor& rhs); // copy constructor
80   AliHLTMUONTriggerReconstructor& operator=(const AliHLTMUONTriggerReconstructor& rhs); // assignment operator
81   
82  private:
83
84   static const int fgkEvenLutSize ;           // Size of the LookupTable with event DDLID
85   static const int fgkOddLutSize ;            // Size of the LookupTable with odd DDLID
86   static const int fgkLutLine;                // nof Line in LookupTable    
87
88   static const int fgkMinIdManuChannel[2];    // Minimum value of idManuChannel in LookupTable, 2 corresponds to two types of DDL (even/odd)  
89   static const int fgkMaxIdManuChannel[2];    // Maximum value of idManuChannel in LookupTable  
90   static const float fgkHalfPadSizeXB[3];       // pad halflength for the pcb zones, 3 corresponds to 3 types of pad in bending side  
91   static const float fgkHalfPadSizeYNB[2];       // pad halflength for the pcb zones, 2 corresponds to 2 types on nonbneding pad  
92
93   static const int fgkDetElem;                // nof Detection element per DDL    
94
95   
96   AliHLTMUONHitReconstructor::DHLTPad* fPadData;                          // pointer to the array containing the information of each padhits
97   AliHLTMUONHitReconstructor::DHLTLut* fLookUpTableData;                  // pointer to the array of Lookuptable data
98   
99   AliHLTMUONTriggerRecordStruct *fRecPoints;    // Reconstructed hits
100   int *fRecPointsCount;                       // nof reconstructed hit  
101   int fMaxRecPointsCount;                    // max nof reconstructed hit  
102
103   //104 correspond to maximum nuber of x indices a nonbending side of detelem may have (i.e. 1101) 
104   //and 64 corresponds to the maximum number of y indices occurs in bending side of detelem (i.e 1100)
105   int fGetIdTotalData[104][64][2] ;           // an array of idManuChannel with argumrnt of centralX,centralY and  planeType
106   RegToLoc fRegToLocCard[128];              // 8 regional card per ddl and 16 slots per regional crate together made 16*8 = 128. 
107
108   map<int,int> fMaxFiredPerDetElem;                    // counter for detector elements that are fired 
109   map<int,DataIdIndex> fDetElemToDataId;              // detelem to pointer to dataId index mapping
110   
111   int fDDLId ;
112   int fIdOffSet ;
113
114   bool MergeTrigHits(DataIdIndex& dataIndex);
115   bool FindTrigHits() ;
116
117   bool ReadDDL(int *rawData, int *rawDataSize);
118 };
119
120 #endif // AliHLTMUONTRIGGERRECONSTRUCTOR_H