StRoot  1
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
trgStructures_30.h
1 /*
2  * Header Name: trgStructures.h
3  * Header Number: x.y
4  * Package Name: All
5  * Created: z. milosevich 06Dec99
6  * Description: Global trigger structure header file.
7  * Contains definitions of trigger data structures
8  * History:
9  *
10  * 06Dec99 zm Created so offline can use and after modification for mod 8 DMA reads
11  * 08Dec99 zm Changed Event Descriptor Structure to previous length
12  * 03Feb00 zm Changed "ushort ZDCDSM[8]" to "BYTE ZDC[16]" in L0_DSM_Data structure
13  * 22Jul00 egj Added L0RegBytes and L0RegHeader to trgDataHeaders and TrgSumData.
14  * Also added Mult_Reg, ZDC_Reg and Spare_Reg to TrgSumData, making a
15  * total of 16 extra bytes. I compensated for this by removing 16 bytes,
16  * (4 uints) from L2Result, wich is currently unused.
17  * 08Dec00 JMN Changed char hdr[2] in TrgSummary to unsigned short, which is packed
18  * 25Feb01 JMN Redesigned and expanded abbreviations to full.
19  * 12Mar01 JMN Added additional changes from ZM
20  * 30May01 JMN NBNBNBNB Changed FORMAT version from 0x12 to 0x13
21  * 02Jun01 zm defined bit 6 in addBits info FIFO3 for L2.5 abort
22  * 27Jun01 JMN Added definition of number of bytes used in trigger summary headers
23  * 28Jun01 JMN Added definition of ADD_BITs
24  * 10Apr02 zm basic strawman for new structures with new TCU and added detectors
25  * 22May02 zm removed references to current non-existent trigger event header
26  * 24May02 zm incorporated eleanor's comments
27  * 24May02 zm the L0_DSM_Data instance changed from DSM to DSMdata to be able to compile on linux
28  * 19Jun02 zm removed or commented out references to TrgEvtHeader
29  * 05Aug02 JMN changes in event descriptor - moved filler word to end
30  * 15Aug02 HjC correct bytes for FPD
31  * 21Nov02 zm corrections based on eleanor's email: L0 layout for bunch xing,
32  * special and fpd elements; fpd broken down for east/west nort/south
33  * vs top/bottom and layer 1 or 0;
34  * also finished XXX_DATA_OFFSET and RAW_XXX_LEN for passing data from
35  * dsm
36  * 30Aug03 JMN Added RAW_MAX_LEN being maximum length possible in chain block transfer
37  * 14Sep03 JMN Added new dsmMemcpy2Buf
38  * 02Nov03 JMN Modified dsmMemcpy2Buf to ensure dsmData is 8-byte aligned.
39  * 04Nov03 EGJ Modified RawTrgDet to add in ZDCSMD[32]
40  * 28Oct04 JMN Modified RawTrgDet to increased BBC storage from 80 to 96
41  * Format version changed from 0x21 to 0x22
42  * 14Nov05 JMN Added source NodeID as first word of data buffer to L2
43  * 16Mar06 CWP Added offsets into L2Result
44  * 20Dec06 JMN Added changes: L2Result increased to 64 ints,
45  * MWC name changed to MIX with 7 DSMs from MTD, VPD and TOF (112 bytes)
46  * FPE changed to 9 DSMs (144 bytes)
47  * FPW changed to 16 DSMs (256) bytes
48  * new array QQT installed after BBC
49  * Block of commented OFFSETs and LEN removed.
50  * Commented out xx_SUM_LEN where xx is L0, L1, L2; and L0_REG_LEN. Unused?
51  * Since these are significant changes, Format changed to 3.0
52  * 05Jan07 JMN Changed CPA[32] to MTD[8],VPD[8],CPA[16]
53  * 29Mar07 JMN Updated L2_Results offsets for CP
54  * 03Apr07 JMN Order MTD,VPD,CPA is changed to CPA,MTD,VPD to reflect order of DSMs in the L1 crate
55  */
56 
57 #ifndef trgStructures_h
58 #define trgStructures_h
59 
60 #define MAX_L0_DATA_BLOCKS 11 /* Maximum number of L0 Data Blocks: current + npre + npost */
61 #define MAX_RAW_DATA_BLOCKS 11 /* Maximum number of Raw Data Blocks: current + npre + npost */
62 #define FORMAT_VERSION 0x31 /* Format Version number for trigger data */
63 #define EV_DESC_LEN sizeof(EvtDescData) /* Number of bytes in event descriptor */
64 #define L0DSM_DATA_LEN sizeof(L0_DSM_Data) /* Size of data block in L0 DSM Tree */
65 #define RAW_DET_DATA_LEN sizeof(RawTrgDet) /* Size of Raw Detector Data from DSM clients and QT boards */
66 #define TRG_SUM_LEN sizeof(TrgSumData) /* Number of bytes in the trigger summary for DAQ with headers */
67 
68 #define L1_DATA_LEN (EV_DESC_LEN+TRG_SUM_LEN) /* Size of data passed from L1ANA to L2 */
69 #define TRG_EVT_LEN (L1_DATA_LEN+(MAX_RAW_DATA_BLOCKS*RAW_DET_DATA_LEN)) /* Max size of a trigger event */
70 #define TDI_EVT_LEN (EV_DESC_LEN+TRG_SUM_LEN+(MAX_RAW_DATA_BLOCKS*RAW_DET_DATA_LEN)) /* size of event sent to DAQ */
71 
72 #define RAW_MAX_LEN 272 /* Maximum length of any Chain Block Transfer */
73 
74 #define L2RESULTS_2007_OFFSET_TRG 0
75 #define L2RESULTS_2007_OFFSET_EMC_PED 1
76 #define L2RESULTS_2007_OFFSET_PIG 2
77 #define L2RESULTS_2007_OFFSET_UPS 6
78 #define L2RESULTS_2007_OFFSET_DISPVER 14
79 //#define L2RESULTS_OFFSET_TRG 0
80 //#define L2RESULTS_OFFSET_EMC_CHECK 1
81 //#define L2RESULTS_OFFSET_JPSI 2
82 //#define L2RESULTS_OFFSET_UPS 8
83 //#define L2RESULTS_OFFSET_DIJET 14
84 //#define L2RESULTS_OFFSET_EMC_PED 19
85 //#define L2RESULTS_OFFSET_PIG 20
86 
87 #define ADD_BIT_PILEUP 0 /* Contamination/Pileup bit in event descriptor add-bits */
88 #define ADD_BIT_FORCE 5 /* Force store of this event */
89 #define ADD_BIT_L2_5 6 /* Level 2.5 abort */
90 #define ADD_BIT_SIM 7 /* Simulated event - used by DAQ */
91 
92 /********** Trigger Structures ***********/
93 
94 /* Event Descriptor Data Structures */
95 
96 typedef struct {
97  unsigned short TCUdataBytes;
98  char TCUEvtDesc;
99  unsigned char TrgDataFmtVer;
100  unsigned int bunchXing_hi;
101  unsigned int bunchXing_lo; /* Two parts of RHIC bunch crossing number */
102  unsigned short actionWdDetectorBitMask; /* from Fifo 1 */
103  unsigned char actionWdTrgCommand; /* from Fifo 1 */
104  unsigned char actionWdDaqCommand; /* from Fifo 1 */
105  unsigned short TrgToken; /* from Fifo 2 */
106  unsigned short addBits; /* from Fifo 2 - bit 0=Contamination; bit 6=L2.5 abort; bit 7=1 is fake data */
107  unsigned short DSMInput; /* from Fifo 3 */
108  unsigned short externalBusy; /* from Fifo 3 */
109  unsigned short modifiedBusyStatus; /* from Fifo 4 */
110  unsigned short physicsWord; /* from Fifo 4 */
111  unsigned short TriggerWord; /* from Fifo 5 */
112  unsigned short DSMAddress; /* from Fifo 6 */
113  unsigned short contaminationBusyStatus; /* from Fifo 6 */
114  unsigned short npre; /* pre value for detector raw data */
115  unsigned short npost; /* post value for detector raw data */
116  unsigned short dummy; /* dummy - filler */
117 } EvtDescData; /* 40 bytes total */
118 
119 /* Trigger Summary Data Structures */
120 
121 /* L0 DSM data structures */
122 
123 typedef struct {
124  unsigned short CPA[16]; /* Contents of 2 CTB DSM Input Buffers (IB's) - coarse pixel array */
125  unsigned short MTD[8]; /* TAC values for MTD's MRPCs and overlapping CTB trays */
126  unsigned short VPD[8]; /* ADC & TAC values for VPD detectors*/
127  unsigned short CTB[8]; /* CTB ADC sums and topology for East & West combined */
128  unsigned short lastDSM[8]; /* Contents of last DSM IB - results of all DSM trees */
129  unsigned short VTX[8]; /* Separate ZDC and BBC DSMs have been replaced with this one */
130  unsigned short EMC[8]; /* Contents of 1 EMC IB - results of separate BEMC and EEMC DSMs */
131  unsigned short BCdata[16]; /* Contents of 2 Bunch Crossing DSMs IB's */
132  unsigned short specialTriggers[8]; /* Contents of 1 Special Trigger DSM - all the special trigger requests */
133  unsigned short FPD[8]; /* Contents of 1 FPD IB - we are installing this DSM this year but it */
134 } L0_DSM_Data; /* 192 bytes total */
135 
136 
137 /* Summary data */
138 
139 typedef struct {
140  unsigned short TrgSumBytes;
141  unsigned short TrgSumHeader;
142  unsigned int L1Sum[2]; /* L1 Summary */
143  unsigned int L2Sum[2]; /* L2 Summary */
144  unsigned short L0SumBytes;
145  unsigned short L0SumHeader;
146  L0_DSM_Data DSMdata; /* L0 DSM Data from DSM Tree */
147  unsigned short L1SumBytes;
148  unsigned short L1SumHeader;
149  unsigned int L1Result[32]; /* Result from L1 CPU */
150  unsigned short L2SumBytes;
151  unsigned short L2SumHeader;
152  unsigned int L2Result[64]; /* Result from L2 CPU. Increased by 128 bytes from version 3.0 */
153 } TrgSumData; /* 608 bytes total */
154 
155 /* Data structure passed between L1ANA and L2 */
156 
157 typedef struct {
158  EvtDescData EvtDesc; /* L1 Event Descriptor Data */
159  TrgSumData TrgSum; /* Summary data */
160 } L1dataType; /* 648 bytes */
161 
162 /* Raw Trigger Detector data structures */
163 
164 typedef struct {
165  unsigned short RawDetBytes;
166  char RawDetHeader[2];
167  unsigned short CTBdataBytes;
168  char CTBdataHeader[2];
169  unsigned char CTB[256]; /* CTB raw data. Data address must be 8-byte aligned for DMA transfer */
170  unsigned short MIXdataBytes;
171  char MIXdataHeader[2];
172  unsigned int MIXfiller; /* Dummy to bring data address to mod 8 */
173  unsigned char MTD[32]; /* MTD raw data from 2 DSMs */
174  unsigned char VPD[64]; /* VPD raw data from 4 DSMs */
175  unsigned char TOF[16]; /* TOF raw data from 1 DSM */
176  unsigned short BEMCdataBytes;
177  char BEMCdataHeader[2];
178  unsigned int BEMCfiller; /* Dummy to bring data address to mod 8 */
179  unsigned char BEMCEast[240]; /* next year there will be 15 DSMs covering the East half, all in one crate */
180  unsigned char BEMCWest[240]; /* this year there will be 15 DSMs covering the West half, all in one crate */
181  unsigned short BEMClayer1[48]; /* there will be 6 DSMs at layer1 even if only 3 of them have input this year*/
182  unsigned short EEMCdataBytes;
183  char EEMCdataHeader[2];
184  unsigned int EEMCfiller; /* Dummy to bring data address to mod 8 */
185  unsigned short EEMClayer1[16]; /* the two layer1 DSMs are at the LHS of the crate so they get read first */
186  unsigned char EEMC[144]; /* next there are the 9 layer0 DSMs, of which only 4-5 have input this year */
187  unsigned short FPDdataBytes;
188  char FPDdataHeader[2];
189  unsigned int FPDfiller; /* Dummy to bring data address to mod 8 */
190  unsigned char FPDEastNSLayer0[112]; /* fpd east north/south layer 0 */
191  unsigned short FPDEastNSLayer1[8]; /* fpd east north/south layer 1 */
192  unsigned char FPDEastTBLayer0[16]; /* fpd east top/bottom layer 0 */
193  unsigned char FPDW[256]; /* fpd west */
194  unsigned short BBCdataBytes;
195  char BBCdataHeader[2];
196  unsigned int BBCfiller; /* Dummy to bring data address to mod 8 */
197  unsigned char BBC[96]; /* increased from 80 to 96 for the addition of a DSM after layer 0 DSMs */
198  unsigned short BBClayer1[16]; /* this is the layer1 DSM that feeds the VTX DSM */
199  unsigned char ZDCSMD[32]; /* this is the 2 layer0 DSM for the ZDC SMD detector */
200  unsigned char ZDC[16]; /* this is the original ZDC DSM */
201  unsigned short ZDClayer1[8]; /* this is the new layer1 ZDC DSM that also feeds the VTX DSM */
202  unsigned short QQTdataBytes; /* this is new in version 3.0 for data from QT boards */
203  char QQTdataHeader[2];
204  unsigned int QQTfiller; /* Dummy to bring data address to mod 8 */
205  unsigned int QQTdata[1600]; /* data block for FMS. New in version 3.0 */
206 } RawTrgDet; /* 8168 bytes total */
207 
208 /* Trigger Event Structure */
209 
210 typedef struct {
211  EvtDescData EvtDesc; /* L1 Event Descriptor Data : 40 bytes */
212  TrgSumData TrgSum; /* Summary data: 608 bytes */
213  RawTrgDet rawTriggerDet[MAX_RAW_DATA_BLOCKS]; /* Raw Detector Data with pre and post History: 11*8168 bytes */
214 } TrgDataType; /* 90496 bytes */
215 
216 /* Data block for DSMs and L1 to pass to L2 via myriMemcpy2 */
217 
218 typedef struct {
219  int src_nodeId; /* Source nodeId */
220  int cur_token;
221  int Npre,Npost;
222  unsigned int localClock; /* Local DSM clock */
223  int numGroup; /* Number of DSMs in first group */
224  int numDSM; /* Total number of DSMs */
225  int dummy; /* Ensure alignment of long long */
226  long long dsmData[RAW_MAX_LEN*MAX_RAW_DATA_BLOCKS/8]; /* Make this 8-byte aligned */
227 } dsmMemcpy2Buf;
228 
229 #endif