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. *
8 * Indranil Das <indra.das@saha.ac.in> *
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 **************************************************************************/
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 **********************************************************************/
31 #include <AliHLTLogging.h>
33 #include "AliHLTMUONTriggerRecordsBlockStruct.h"
34 #include "AliHLTMUONHitReconstructor.h"
40 typedef std::vector<int> DataIdIndex;
42 class AliHLTMUONTriggerReconstructor : public AliHLTLogging
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.
55 AliHLTMUONTriggerReconstructor();
56 virtual ~AliHLTMUONTriggerReconstructor();
58 bool LoadLookUpTable(AliHLTMUONHitReconstructor::DHLTLut* lookUpTableData, int lookUpTableId);
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);
64 int GetLutLine(){return fgkLutLine ;}
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; }
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
79 AliHLTMUONTriggerReconstructor(const AliHLTMUONTriggerReconstructor& rhs); // copy constructor
80 AliHLTMUONTriggerReconstructor& operator=(const AliHLTMUONTriggerReconstructor& rhs); // assignment operator
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
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
93 static const int fgkDetElem; // nof Detection element per DDL
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
99 AliHLTMUONTriggerRecordStruct *fRecPoints; // Reconstructed hits
100 int *fRecPointsCount; // nof reconstructed hit
101 int fMaxRecPointsCount; // max nof reconstructed hit
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.
108 map<int,int> fMaxFiredPerDetElem; // counter for detector elements that are fired
109 map<int,DataIdIndex> fDetElemToDataId; // detelem to pointer to dataId index mapping
114 bool MergeTrigHits(DataIdIndex& dataIndex);
115 bool FindTrigHits() ;
117 bool ReadDDL(int *rawData, int *rawDataSize);
120 #endif // AliHLTMUONTRIGGERRECONSTRUCTOR_H