CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
SourceCardRouting.h
Go to the documentation of this file.
1 /*
2  SourceCardRouting library
3  Andrew Rose 2007
4 */
5 
6 #ifndef SOURCECARDROUTING_H
7 #define SOURCECARDROUTING_H
8 
9 // The string and stream definitions
10 #include <iostream>
11 #include <string>
12 
14 
15  public:
16 
19 
21  struct EmuToSfpData
22  {
23  // Input data.
24  unsigned short eIsoRank[4];
25  unsigned short eIsoCardId[4];
26  unsigned short eIsoRegionId[4];
27  unsigned short eNonIsoRank[4];
28  unsigned short eNonIsoCardId[4];
29  unsigned short eNonIsoRegionId[4];
30  unsigned short mipBits[7][2];
31  unsigned short qBits[7][2];
32  // Output data.
33  unsigned short sfp[2][4]; // [ cycle ] [ output number ]
34  };
35 
36 //SFP arrays are SFP[cycle<2][sfp number<4]
37 //electron arrays are eIsoRank[candidate number<4]
38 //muon arrays are MIPbits[rec card number<7][region<2]
39  void EMUtoSFP( unsigned short (&eIsoRank)[4],
40  unsigned short (&eIsoCardId)[4],
41  unsigned short (&eIsoRegionId)[4],
42  unsigned short (&eNonIsoRank)[4],
43  unsigned short (&eNonIsoCardId)[4],
44  unsigned short (&eNonIsoRegionId)[4],
45  unsigned short (&MIPbits)[7][2],
46  unsigned short (&Qbits)[7][2],
47  unsigned short (&SFP)[2][4] ) const;
48 
49 //SFP arrays are SFP[cycle<2][sfp number<4]
50 //electron arrays are eIsoRank[candidate number<4]
51 //muon arrays are MIPbits[rec card number<7][region<2]
52  void SFPtoEMU( unsigned short (&eIsoRank)[4],
53  unsigned short (&eIsoCardId)[4],
54  unsigned short (&eIsoRegionId)[4],
55  unsigned short (&eNonIsoRank)[4],
56  unsigned short (&eNonIsoCardId)[4],
57  unsigned short (&eNonIsoRegionId)[4],
58  unsigned short (&MIPbits)[7][2],
59  unsigned short (&Qbits)[7][2],
60  unsigned short (&SFP)[2][4] ) const;
61 
62 /***********************************************************************************************************************/
63 //RC arrays are RC[receiver card number<7][region<2]
64 //HF arrays are HF[eta<4][HF region<2]
65 //SFP arrays are SFP[cycle<2][sfp number<4]
66  void RC56HFtoSFP( unsigned short (&RC)[7][2],
67  unsigned short (&RCof)[7][2],
68  unsigned short (&RCtau)[7][2],
69  unsigned short (&HF)[4][2],
70  unsigned short (&HFQ)[4][2],
71  unsigned short (&SFP)[2][4] ) const;
72 
73 //RC arrays are RC[receiver card number<7][region<2]
74 //HF arrays are HF[eta<4][HF region<2]
75 //SFP arrays are SFP[cycle<2][sfp number<4]
76  void SFPtoRC56HF( unsigned short (&RC)[7][2],
77  unsigned short (&RCof)[7][2],
78  unsigned short (&RCtau)[7][2],
79  unsigned short (&HF)[4][2],
80  unsigned short (&HFQ)[4][2],
81  unsigned short (&SFP)[2][4] ) const;
82 
83 //RC arrays are RC[receiver card number<7][region<2]
84 //SFP arrays are SFP[cycle<2][sfp number<4]
85  void RC012toSFP( unsigned short (&RC)[7][2],
86  unsigned short (&RCof)[7][2],
87  unsigned short (&RCtau)[7][2],
88  unsigned short (&SFP)[2][4] ) const;
89 
90 //RC arrays are RC[receiver card number<7][region<2]
91 //SFP arrays are SFP[cycle<2][sfp number<4]
92  void SFPtoRC012( unsigned short (&RC)[7][2],
93  unsigned short (&RCof)[7][2],
94  unsigned short (&RCtau)[7][2],
95  unsigned short (&SFP)[2][4] ) const;
96 
97 //RC arrays are RC[receiver card number<7][region<2]
98 //SFP arrays are SFP[cycle<2][sfp number<4]
99  void RC234toSFP( unsigned short (&RC)[7][2],
100  unsigned short (&RCof)[7][2],
101  unsigned short (&RCtau)[7][2],
102  unsigned short (&sisterRC)[7][2],
103  unsigned short (&sisterRCof)[7][2],
104  unsigned short (&sisterRCtau)[7][2],
105  unsigned short (&SFP)[2][4] ) const;
106 
107 //RC arrays are RC[receiver card number<7][region<2]
108 //SFP arrays are SFP[cycle<2][sfp number<4]
109  void SFPtoRC234( unsigned short (&RC)[7][2],
110  unsigned short (&RCof)[7][2],
111  unsigned short (&RCtau)[7][2],
112  unsigned short (&sisterRC)[7][2],
113  unsigned short (&sisterRCof)[7][2],
114  unsigned short (&sisterRCtau)[7][2],
115  unsigned short (&SFP)[2][4] ) const;
116 
117 /***********************************************************************************************************************/
118 
119 //VHDCI arrays are VHDCI[VHDCI<2][cycle<2]
120 //SFP arrays are SFP[cycle<2][sfp number<4]
121 
122  void SFPtoVHDCI( int RoutingMode,
123  unsigned short (&SFP)[2][4],
124  unsigned long (&VHDCI)[2][2] ) const;
125 
126 
127 //VHDCI arrays are VHDCI[VHDCI<2][cycle<2]
128 //SFP arrays are SFP[cycle<2][sfp number<4]
129  void VHDCItoSFP( int RoutingMode,
130  unsigned short (&SFP)[2][4],
131  unsigned long (&VHDCI)[2][2] ) const;
132 
133 /***********************************************************************************************************************/
134 
135 //VHDCI arrays are VHDCI[VHDCI<2][cycle<2]
136 //electron arrays are eIsoRank[candidate number<4]
137 //muon arrays are MIPbits[rec card number<7][region<2]
138 
139  void EMUtoVHDCI( unsigned short (&eIsoRank)[4],
140  unsigned short (&eIsoCardId)[4],
141  unsigned short (&eIsoRegionId)[4],
142  unsigned short (&eNonIsoRank)[4],
143  unsigned short (&eNonIsoCardId)[4],
144  unsigned short (&eNonIsoRegionId)[4],
145  unsigned short (&MIPbits)[7][2],
146  unsigned short (&Qbits)[7][2],
147  unsigned long (&VHDCI)[2][2] ) const;
148 
149 
150 //VHDCI arrays are VHDCI[VHDCI<2][cycle<2]
151 //electron arrays are eIsoRank[candidate number<4]
152 //muon arrays are MIPbits[rec card number<7][region<2]
153  void VHDCItoEMU( unsigned short (&eIsoRank)[4],
154  unsigned short (&eIsoCardId)[4],
155  unsigned short (&eIsoRegionId)[4],
156  unsigned short (&eNonIsoRank)[4],
157  unsigned short (&eNonIsoCardId)[4],
158  unsigned short (&eNonIsoRegionId)[4],
159  unsigned short (&MIPbits)[7][2],
160  unsigned short (&Qbits)[7][2],
161  unsigned long (&VHDCI)[2][2] ) const;
162 
163 
164 
165 /***********************************************************************************************************************/
166 
167 //RC arrays are RC[receiver card number<7][region<2]
168 //HF arrays are HF[eta<4][HF region<2]
169 //VHDCI arrays are VHDCI[VHDCI<2][cycle<2]
170  void RC56HFtoVHDCI( unsigned short (&RC)[7][2],
171  unsigned short (&RCof)[7][2],
172  unsigned short (&RCtau)[7][2],
173  unsigned short (&HF)[4][2],
174  unsigned short (&HFQ)[4][2],
175  unsigned long (&VHDCI)[2][2] ) const;
176 
177 //RC arrays are RC[receiver card number<7][region<2]
178 //HF arrays are HF[eta<4][HF region<2]
179 //VHDCI arrays are VHDCI[VHDCI<2][cycle<2]
180  void VHDCItoRC56HF( unsigned short (&RC)[7][2],
181  unsigned short (&RCof)[7][2],
182  unsigned short (&RCtau)[7][2],
183  unsigned short (&HF)[4][2],
184  unsigned short (&HFQ)[4][2],
185  unsigned long (&VHDCI)[2][2] ) const;
186 
187 //RC arrays are RC[receiver card number<7][region<2]
188 //VHDCI arrays are VHDCI[VHDCI<2][cycle<2]
189  void RC012toVHDCI( unsigned short (&RC)[7][2],
190  unsigned short (&RCof)[7][2],
191  unsigned short (&RCtau)[7][2],
192  unsigned long (&VHDCI)[2][2]) const;
193 
194 //RC arrays are RC[receiver card number<7][region<2]
195 //VHDCI arrays are VHDCI[VHDCI<2][cycle<2]
196  void VHDCItoRC012( unsigned short (&RC)[7][2],
197  unsigned short (&RCof)[7][2],
198  unsigned short (&RCtau)[7][2],
199  unsigned long (&VHDCI)[2][2] ) const;
200 
201 //RC arrays are RC[receiver card number<7][region<2]
202 //VHDCI arrays are VHDCI[VHDCI<2][cycle<2]
203  void RC234toVHDCI( unsigned short (&RC)[7][2],
204  unsigned short (&RCof)[7][2],
205  unsigned short (&RCtau)[7][2],
206  unsigned short (&sisterRC)[7][2],
207  unsigned short (&sisterRCof)[7][2],
208  unsigned short (&sisterRCtau)[7][2],
209  unsigned long (&VHDCI)[2][2] ) const;
210 
211 //RC arrays are RC[receiver card number<7][region<2]
212 //VHDCI arrays are VHDCI[VHDCI<2][cycle<2]
213  void VHDCItoRC234( unsigned short (&RC)[7][2],
214  unsigned short (&RCof)[7][2],
215  unsigned short (&RCtau)[7][2],
216  unsigned short (&sisterRC)[7][2],
217  unsigned short (&sisterRCof)[7][2],
218  unsigned short (&sisterRCtau)[7][2],
219  unsigned long (&VHDCI)[2][2] ) const;
220 
221 /***********************************************************************************************************************/
222 
223 //electron arrays are eIsoRank[candidate number<4]
224 //muon arrays are MIPbits[rec card number<7][region<2]
225 
226  void EMUtoSTRING( unsigned short &logicalCardID,
227  unsigned short &eventNumber,
228  unsigned short (&eIsoRank)[4],
229  unsigned short (&eIsoCardId)[4],
230  unsigned short (&eIsoRegionId)[4],
231  unsigned short (&eNonIsoRank)[4],
232  unsigned short (&eNonIsoCardId)[4],
233  unsigned short (&eNonIsoRegionId)[4],
234  unsigned short (&MIPbits)[7][2],
235  unsigned short (&Qbits)[7][2],
236  std::string &dataString ) const;
237 
238 //RC arrays are RC[receiver card number<7][region<2]
239 //HF arrays are HF[eta<4][HF region<2]
240  void RC56HFtoSTRING( unsigned short &logicalCardID,
241  unsigned short &eventNumber,
242  unsigned short (&RC)[7][2],
243  unsigned short (&RCof)[7][2],
244  unsigned short (&RCtau)[7][2],
245  unsigned short (&HF)[4][2],
246  unsigned short (&HFQ)[4][2],
247  std::string &dataString ) const;
248 
249 //RC arrays are RC[receiver card number<7][region<2]
250  void RC012toSTRING( unsigned short &logicalCardID,
251  unsigned short &eventNumber,
252  unsigned short (&RC)[7][2],
253  unsigned short (&RCof)[7][2],
254  unsigned short (&RCtau)[7][2],
255  std::string &dataString ) const;
256 
257 //RC arrays are RC[receiver card number<7][region<2]
258  void RC234toSTRING( unsigned short &logicalCardID,
259  unsigned short &eventNumber,
260  unsigned short (&RC)[7][2],
261  unsigned short (&RCof)[7][2],
262  unsigned short (&RCtau)[7][2],
263  unsigned short (&sisterRC)[7][2],
264  unsigned short (&sisterRCof)[7][2],
265  unsigned short (&sisterRCtau)[7][2],
266  std::string &dataString ) const;
267 
268 /***********************************************************************************************************************/
269 
270 //SFP arrays are SFP[cycle<2][sfp number<4]
271  void SFPtoSTRING( unsigned short &logicalCardID,
272  unsigned short &eventNumber,
273  int RoutingMode,
274  unsigned short (&SFP)[2][4],
275  std::string &dataString ) const;
276 
277 /***********************************************************************************************************************/
278 
279 //VHDCI arrays are VHDCI[VHDCI<2][cycle<2]
280  void STRINGtoVHDCI( unsigned short &logicalCardID,
281  unsigned short &eventNumber,
282  std::string &dataString,
283  unsigned long (&VHDCI)[2][2] ) const;
284 
285 
286 //VHDCI arrays are VHDCI[VHDCI<2][cycle<2]
287  void VHDCItoSTRING( unsigned short &logicalCardID,
288  unsigned short &eventNumber,
289  std::string &dataString,
290  unsigned long (&VHDCI)[2][2] ) const;
291 
292 /***********************************************************************************************************************/
293 
294  void LogicalCardIDtoRoutingMode( unsigned short &logicalCardID,
295  int &RoutingMode,
296  int &RCTCrateNumber ) const;
297 
298  void RoutingModetoLogicalCardID( unsigned short &logicalCardID,
299  int &RoutingMode,
300  int &RCTCrateNumber ) const;
301 
302 
303 
304 }; //class SourceCardRouting
305 
306 #endif //~SOURCECARDMANAGER_H
307 
308 
309 
310 
311 
312 
313 
314 
315 
316 
317 
318 
319 
321 //These were going to be implimented but made things a lot more complicated than necessary
322 /*
323 //RC arrays are RC[receiver card number<7][region<2]
324 //HF arrays are HF[eta<4][HF region<2]
325 //SFP arrays are SFP[cycle<2][sfp number<4]
326  void RCtoSFP( int &RoutingMode,
327  unsigned short (&RC)[7][2],
328  unsigned short (&RCof)[7][2],
329  unsigned short (&RCtau)[7][2],
330  unsigned short (&sisterRC)[7][2],
331  unsigned short (&sisterRCof)[7][2],
332  unsigned short (&sisterRCtau)[7][2],
333  unsigned short (&HF)[4][2],
334  unsigned short (&HFQ)[4][2],
335  unsigned short (&SFP)[2][4] );
336 
337 
338 //RC arrays are RC[receiver card number<7][region<2]
339 //HF arrays are HF[eta<4][HF region<2]
340 //SFP arrays are SFP[cycle<2][sfp number<4]
341  void SFPtoRC( int &RoutingMode,
342  unsigned short (&RC)[7][2],
343  unsigned short (&RCof)[7][2],
344  unsigned short (&RCtau)[7][2],
345  unsigned short (&sisterRC)[7][2],
346  unsigned short (&sisterRCof)[7][2],
347  unsigned short (&sisterRCtau)[7][2],
348  unsigned short (&HF)[4][2],
349  unsigned short (&HFQ)[4][2],
350  unsigned short (&SFP)[2][4] );*/
351 
352 /*
353 //RC arrays are RC[receiver card number<7][region<2]
354 //VHDCI arrays are VHDCI[VHDCI<2][cycle<2]
355  void RCtoSTRING( unsigned short &logicalCardID,
356  unsigned short &eventNumber,
357  unsigned short (&RC)[7][2],
358  unsigned short (&RCof)[7][2],
359  unsigned short (&RCtau)[7][2],
360  unsigned short (&sisterRC)[7][2],
361  unsigned short (&sisterRCof)[7][2],
362  unsigned short (&sisterRCtau)[7][2],
363  unsigned short (&HF)[4][2],
364  unsigned short (&HFQ)[4][2],
365  std::string &dataString );
366 */
367 
368 /*
369 //RC arrays are RC[receiver card number<7][region<2]
370 //VHDCI arrays are VHDCI[VHDCI<2][cycle<2]
371  void RCtoVHDCI( int &RoutingMode,
372  unsigned short (&RC)[7][2],
373  unsigned short (&RCof)[7][2],
374  unsigned short (&RCtau)[7][2],
375  unsigned short (&sisterRC)[7][2],
376  unsigned short (&sisterRCof)[7][2],
377  unsigned short (&sisterRCtau)[7][2],
378  unsigned short (&HF)[4][2],
379  unsigned short (&HFQ)[4][2],
380  unsigned long (&VHDCI)[2][2] );
381 
382 //RC arrays are RC[receiver card number<7][region<2]
383 //VHDCI arrays are VHDCI[VHDCI<2][cycle<2]
384  void VHDCItoRC( int &RoutingMode,
385  unsigned short (&RC)[7][2],
386  unsigned short (&RCof)[7][2],
387  unsigned short (&RCtau)[7][2],
388  unsigned short (&sisterRC)[7][2],
389  unsigned short (&sisterRCof)[7][2],
390  unsigned short (&sisterRCtau)[7][2],
391  unsigned short (&HF)[4][2],
392  unsigned short (&HFQ)[4][2],
393  unsigned long (&VHDCI)[2][2] );
394 */
395 
396 
397 
398 
399 
400 
401 
402 
403 
404 
405 
406 
407 
void SFPtoRC56HF(unsigned short(&RC)[7][2], unsigned short(&RCof)[7][2], unsigned short(&RCtau)[7][2], unsigned short(&HF)[4][2], unsigned short(&HFQ)[4][2], unsigned short(&SFP)[2][4]) const
void RC012toSTRING(unsigned short &logicalCardID, unsigned short &eventNumber, unsigned short(&RC)[7][2], unsigned short(&RCof)[7][2], unsigned short(&RCtau)[7][2], std::string &dataString) const
void SFPtoRC012(unsigned short(&RC)[7][2], unsigned short(&RCof)[7][2], unsigned short(&RCtau)[7][2], unsigned short(&SFP)[2][4]) const
void VHDCItoEMU(unsigned short(&eIsoRank)[4], unsigned short(&eIsoCardId)[4], unsigned short(&eIsoRegionId)[4], unsigned short(&eNonIsoRank)[4], unsigned short(&eNonIsoCardId)[4], unsigned short(&eNonIsoRegionId)[4], unsigned short(&MIPbits)[7][2], unsigned short(&Qbits)[7][2], unsigned long(&VHDCI)[2][2]) const
void SFPtoSTRING(unsigned short &logicalCardID, unsigned short &eventNumber, int RoutingMode, unsigned short(&SFP)[2][4], std::string &dataString) const
void SFPtoEMU(unsigned short(&eIsoRank)[4], unsigned short(&eIsoCardId)[4], unsigned short(&eIsoRegionId)[4], unsigned short(&eNonIsoRank)[4], unsigned short(&eNonIsoCardId)[4], unsigned short(&eNonIsoRegionId)[4], unsigned short(&MIPbits)[7][2], unsigned short(&Qbits)[7][2], unsigned short(&SFP)[2][4]) const
void VHDCItoRC012(unsigned short(&RC)[7][2], unsigned short(&RCof)[7][2], unsigned short(&RCtau)[7][2], unsigned long(&VHDCI)[2][2]) const
Struct of all data needed for running the emulator to SFP (sourcecard optical output) conversion...
void SFPtoRC234(unsigned short(&RC)[7][2], unsigned short(&RCof)[7][2], unsigned short(&RCtau)[7][2], unsigned short(&sisterRC)[7][2], unsigned short(&sisterRCof)[7][2], unsigned short(&sisterRCtau)[7][2], unsigned short(&SFP)[2][4]) const
void RC234toSTRING(unsigned short &logicalCardID, unsigned short &eventNumber, unsigned short(&RC)[7][2], unsigned short(&RCof)[7][2], unsigned short(&RCtau)[7][2], unsigned short(&sisterRC)[7][2], unsigned short(&sisterRCof)[7][2], unsigned short(&sisterRCtau)[7][2], std::string &dataString) const
void RoutingModetoLogicalCardID(unsigned short &logicalCardID, int &RoutingMode, int &RCTCrateNumber) const
void RC234toSFP(unsigned short(&RC)[7][2], unsigned short(&RCof)[7][2], unsigned short(&RCtau)[7][2], unsigned short(&sisterRC)[7][2], unsigned short(&sisterRCof)[7][2], unsigned short(&sisterRCtau)[7][2], unsigned short(&SFP)[2][4]) const
void EMUtoSFP(unsigned short(&eIsoRank)[4], unsigned short(&eIsoCardId)[4], unsigned short(&eIsoRegionId)[4], unsigned short(&eNonIsoRank)[4], unsigned short(&eNonIsoCardId)[4], unsigned short(&eNonIsoRegionId)[4], unsigned short(&MIPbits)[7][2], unsigned short(&Qbits)[7][2], unsigned short(&SFP)[2][4]) const
void EMUtoVHDCI(unsigned short(&eIsoRank)[4], unsigned short(&eIsoCardId)[4], unsigned short(&eIsoRegionId)[4], unsigned short(&eNonIsoRank)[4], unsigned short(&eNonIsoCardId)[4], unsigned short(&eNonIsoRegionId)[4], unsigned short(&MIPbits)[7][2], unsigned short(&Qbits)[7][2], unsigned long(&VHDCI)[2][2]) const
void VHDCItoSTRING(unsigned short &logicalCardID, unsigned short &eventNumber, std::string &dataString, unsigned long(&VHDCI)[2][2]) const
void EMUtoSTRING(unsigned short &logicalCardID, unsigned short &eventNumber, unsigned short(&eIsoRank)[4], unsigned short(&eIsoCardId)[4], unsigned short(&eIsoRegionId)[4], unsigned short(&eNonIsoRank)[4], unsigned short(&eNonIsoCardId)[4], unsigned short(&eNonIsoRegionId)[4], unsigned short(&MIPbits)[7][2], unsigned short(&Qbits)[7][2], std::string &dataString) const
void VHDCItoRC56HF(unsigned short(&RC)[7][2], unsigned short(&RCof)[7][2], unsigned short(&RCtau)[7][2], unsigned short(&HF)[4][2], unsigned short(&HFQ)[4][2], unsigned long(&VHDCI)[2][2]) const
void RC56HFtoVHDCI(unsigned short(&RC)[7][2], unsigned short(&RCof)[7][2], unsigned short(&RCtau)[7][2], unsigned short(&HF)[4][2], unsigned short(&HFQ)[4][2], unsigned long(&VHDCI)[2][2]) const
void SFPtoVHDCI(int RoutingMode, unsigned short(&SFP)[2][4], unsigned long(&VHDCI)[2][2]) const
void RC56HFtoSTRING(unsigned short &logicalCardID, unsigned short &eventNumber, unsigned short(&RC)[7][2], unsigned short(&RCof)[7][2], unsigned short(&RCtau)[7][2], unsigned short(&HF)[4][2], unsigned short(&HFQ)[4][2], std::string &dataString) const
void VHDCItoRC234(unsigned short(&RC)[7][2], unsigned short(&RCof)[7][2], unsigned short(&RCtau)[7][2], unsigned short(&sisterRC)[7][2], unsigned short(&sisterRCof)[7][2], unsigned short(&sisterRCtau)[7][2], unsigned long(&VHDCI)[2][2]) const
void VHDCItoSFP(int RoutingMode, unsigned short(&SFP)[2][4], unsigned long(&VHDCI)[2][2]) const
void STRINGtoVHDCI(unsigned short &logicalCardID, unsigned short &eventNumber, std::string &dataString, unsigned long(&VHDCI)[2][2]) const
void RC012toSFP(unsigned short(&RC)[7][2], unsigned short(&RCof)[7][2], unsigned short(&RCtau)[7][2], unsigned short(&SFP)[2][4]) const
void RC012toVHDCI(unsigned short(&RC)[7][2], unsigned short(&RCof)[7][2], unsigned short(&RCtau)[7][2], unsigned long(&VHDCI)[2][2]) const
void RC234toVHDCI(unsigned short(&RC)[7][2], unsigned short(&RCof)[7][2], unsigned short(&RCtau)[7][2], unsigned short(&sisterRC)[7][2], unsigned short(&sisterRCof)[7][2], unsigned short(&sisterRCtau)[7][2], unsigned long(&VHDCI)[2][2]) const
void LogicalCardIDtoRoutingMode(unsigned short &logicalCardID, int &RoutingMode, int &RCTCrateNumber) const
void RC56HFtoSFP(unsigned short(&RC)[7][2], unsigned short(&RCof)[7][2], unsigned short(&RCtau)[7][2], unsigned short(&HF)[4][2], unsigned short(&HFQ)[4][2], unsigned short(&SFP)[2][4]) const