2d6ca0864ec5015bd8cc0cf03e26912dfa6efd01
[u/mrichter/AliRoot.git] / HLT / MUON / OnlineAnalysis / AliHLTMUONHitReconstructor.h
1 #ifndef ALIHLTMUONHITRECONSTRUCTOR_H
2 #define ALIHLTMUONHITRECONSTRUCTOR_H
3 /* Copyright(c) 1998-2007, ALICE Experiment at CERN, All rights reserved. *
4  * See cxx source for full Copyright notice                               */
5
6 /* $Id$ */
7
8 ///////////////////////////////////////////////
9 //Author : Indranil Das, SINP, INDIA
10 //         Sukalyan Chattopadhyay, SINP, INDIA
11 //         
12 //
13 //Email :  indra.das@saha.ac.in
14 //         sukalyan.chattopadhyay@saha.ac.in 
15 ///////////////////////////////////////////////
16
17
18
19 #include <iostream>
20 #include <cstdio>
21 #include <fstream>
22 #include <cstring>
23 #include <cmath>
24 #include <map>
25
26 #include <AliHLTLogging.h>
27
28 using namespace std;
29
30 typedef  map<int,int> BusToDetElem ;
31
32 struct AliHLTMUONRecHitStruct;
33
34
35 class AliHLTMUONHitReconstructor : public AliHLTLogging
36 {
37 public:
38
39   struct DHLTLut{
40     int fIdManuChannel;  // Manu channel address
41     int fIX,fIY;  // The X,Y number of the pad.
42     float fRealX,fRealY,fRealZ;  // The real coordinate of the pad.
43     int fPlane,fPcbZone;  // The plane and PCB zone ID numbers.
44   };
45
46   struct DHLTPad{
47     int fDetElemId;  // The detector element ID of the pad.
48     int fBuspatchId;  // The bus patch ID number for the pad.
49     int fIdManuChannel;  // The Manu channel address.
50     int fIX,fIY;  // The X,Y number of the pad.
51     float fRealX,fRealY,fRealZ;   // The real coordinate of the pad.
52     int fPlane,fPcbZone;   // The plane and PCB zone ID numbers.
53     int fCharge;  // The charge measured on the pad.
54   };
55
56
57   AliHLTMUONHitReconstructor();
58   virtual ~AliHLTMUONHitReconstructor(void);
59
60   bool LoadLookUpTable(DHLTLut* lookUpTableData, int lookUpTableId);
61   bool SetBusToDetMap(BusToDetElem busToDetElem);
62   
63   //bool Init();
64   bool Run(int* rawData, int *rawDataSize, AliHLTMUONRecHitStruct recHit[], int *nofHit);
65
66   void SetDCCut(int dcCut) {fDCCut = dcCut;}
67   void SetDebugLevel(int debugLevel) {fDebugLevel = debugLevel;}
68   int GetDebugLevel() const {return fDebugLevel;}
69   int GetDEId(int iBusPatch) {return fBusToDetElem[iBusPatch] ;}           
70     
71   int GetLutLine(int iDDL) const;
72
73   static int GetkDetectorId() { return fgkDetectorId; }
74   static int GetkDDLOffSet() { return fgkDDLOffSet; }
75   static int GetkNofDDL() { return fgkNofDDL; }
76   static int GetkDDLHeaderSize() { return fgkDDLHeaderSize; }
77   
78 private: 
79   static const int fgkDetectorId ;            // DDL Offset
80   static const int fgkDDLOffSet ;             // DDL Offset
81   static const int fgkNofDDL ;                // Number of DDL 
82   static const int fgkDDLHeaderSize  ;                      // DDL header size  
83 protected:
84   AliHLTMUONHitReconstructor(const AliHLTMUONHitReconstructor& rhs); // copy constructor
85   AliHLTMUONHitReconstructor& operator=(const AliHLTMUONHitReconstructor& rhs); // assignment operator
86 private:
87   
88
89   static const int fgkEvenLutSize ;           // Size of the LookupTable with event DDLID
90   static const int fgkOddLutSize ;            // Size of the LookupTable with odd DDLID
91   static const int fgkLutLine[2];             // nof Line in LookupTable    
92
93   static const int fgkMinIdManuChannel[2];    // Minimum value of idManuChannel in LookupTable  
94   static const int fgkMaxIdManuChannel[2];    // Maximum value of idManuChannel in LookupTable  
95   static const float fgkHalfPadSize[3];       // pad halflength for the pcb zones  
96   
97
98   int fkBlockHeaderSize ;                     // Block header size
99   int fkDspHeaderSize  ;                      // DSP header size
100   int fkBuspatchHeaderSize ;                  // buspatch header size
101   
102   int fDCCut;                                 // DC Cut value
103
104   DHLTPad* fPadData;                          // pointer to the array containing the information of each padhits
105   DHLTLut* fLookUpTableData;                      // pointer to the array of Lookuptable data
106   
107   AliHLTMUONRecHitStruct *fRecPoints;          // Reconstructed hits
108   int *fRecPointsCount;                       // nof reconstructed hit  
109   int fMaxRecPointsCount;                    // max nof reconstructed hit  
110    
111   int fCentralCountB, fCentralCountNB;                 // centeral hits 
112   int fIdOffSet,fDDLId;                       // DDLId and DDL id offset
113   int fDigitPerDDL;                                    // Total nof Digits perDDL 
114   
115   int *fDetManuChannelIdList;                          // pointer to an array of idManuChannel
116   int *fCentralChargeB,*fCentralChargeNB;              // pointer to an array of central hit
117   float *fRecX,*fRecY;                                 // pointer to an array of reconstructed hit
118   float *fAvgChargeX,*fAvgChargeY;                     // average charge on central pad found using CG method
119   int fGetIdTotalData[336][80][2] ;                    // an array of idManuChannel with argumrnt of centralX,centralY and  planeType
120   int fNofFiredDetElem,fMaxFiredPerDetElem[13];        // counter for detector elements that are fired 
121   int fDebugLevel;
122   BusToDetElem fBusToDetElem;             // Mapping between bus address and detector element ID.
123
124   bool ReadDDL(int* rawData, int *rawDataSize);
125   void FindCentralHits(int minPadId, int maxPadId);
126   bool FindRecHits() ;
127   void RecXRecY();
128   bool MergeRecHits();
129
130   //ClassDef(AliHLTMUONHitReconstructor,0)
131 };
132
133
134 #endif // ALIHLTMUONHITRECONSTRUCTOR_H