00001 #include "EventFilter/GctRawToDigi/src/GctFormatTranslateV35.h"
00002
00003
00004 #include <iostream>
00005 #include <cassert>
00006
00007
00008 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00009
00010
00011 using std::cout;
00012 using std::endl;
00013 using std::pair;
00014 using std::make_pair;
00015
00016
00017 GctFormatTranslateV35::BlockLengthMap GctFormatTranslateV35::m_blockLength = GctFormatTranslateV35::BlockLengthMap();
00018 GctFormatTranslateV35::BlockNameMap GctFormatTranslateV35::m_blockName = GctFormatTranslateV35::BlockNameMap();
00019 GctFormatTranslateV35::BlockIdToUnpackFnMap GctFormatTranslateV35::m_blockUnpackFn = GctFormatTranslateV35::BlockIdToUnpackFnMap();
00020 GctFormatTranslateV35::BlkToRctCrateMap GctFormatTranslateV35::m_rctEmCrate = GctFormatTranslateV35::BlkToRctCrateMap();
00021 GctFormatTranslateV35::BlkToRctCrateMap GctFormatTranslateV35::m_rctJetCrate = GctFormatTranslateV35::BlkToRctCrateMap();
00022 GctFormatTranslateV35::BlockIdToEmCandIsoBoundMap GctFormatTranslateV35::m_internEmIsoBounds = GctFormatTranslateV35::BlockIdToEmCandIsoBoundMap();
00023
00024
00025
00026
00027 GctFormatTranslateV35::GctFormatTranslateV35(bool hltMode, bool unpackSharedRegions):
00028 GctFormatTranslateBase(hltMode, unpackSharedRegions)
00029 {
00030 static bool initClass = true;
00031
00032 if(initClass)
00033 {
00034 initClass = false;
00035
00036
00037
00038 m_blockLength.insert(make_pair(0x000,0));
00039
00040 m_blockLength.insert(make_pair(0x580,12));
00041 m_blockLength.insert(make_pair(0x581,2));
00042 m_blockLength.insert(make_pair(0x583,8));
00043 m_blockLength.insert(make_pair(0x587,4));
00044
00045 m_blockLength.insert(make_pair(0x680,16));
00046 m_blockLength.insert(make_pair(0x681,6));
00047 m_blockLength.insert(make_pair(0x682,2));
00048 m_blockLength.insert(make_pair(0x683,6));
00049 m_blockLength.insert(make_pair(0x686,2));
00050 m_blockLength.insert(make_pair(0x687,4));
00051
00052 m_blockLength.insert(make_pair(0x800,20));
00053 m_blockLength.insert(make_pair(0x803,4));
00054 m_blockLength.insert(make_pair(0x804,15));
00055 m_blockLength.insert(make_pair(0x880,16));
00056 m_blockLength.insert(make_pair(0x883,4));
00057 m_blockLength.insert(make_pair(0x884,12));
00058 m_blockLength.insert(make_pair(0xc00,20));
00059 m_blockLength.insert(make_pair(0xc03,4));
00060 m_blockLength.insert(make_pair(0xc04,15));
00061 m_blockLength.insert(make_pair(0xc80,16));
00062 m_blockLength.insert(make_pair(0xc83,4));
00063 m_blockLength.insert(make_pair(0xc84,12));
00064
00065 m_blockLength.insert(make_pair(0x300,27));
00066 m_blockLength.insert(make_pair(0x303,6));
00067 m_blockLength.insert(make_pair(0x306,32));
00068 m_blockLength.insert(make_pair(0x307,4));
00069
00070 m_blockLength.insert(make_pair(0x380,21));
00071 m_blockLength.insert(make_pair(0x381,3));
00072 m_blockLength.insert(make_pair(0x383,7));
00073 m_blockLength.insert(make_pair(0x385,2));
00074 m_blockLength.insert(make_pair(0x386,32));
00075 m_blockLength.insert(make_pair(0x387,6));
00076
00077 m_blockLength.insert(make_pair(0x700,27));
00078 m_blockLength.insert(make_pair(0x703,6));
00079 m_blockLength.insert(make_pair(0x706,32));
00080 m_blockLength.insert(make_pair(0x707,4));
00081
00082 m_blockLength.insert(make_pair(0x780,21));
00083 m_blockLength.insert(make_pair(0x781,3));
00084 m_blockLength.insert(make_pair(0x783,7));
00085 m_blockLength.insert(make_pair(0x785,2));
00086 m_blockLength.insert(make_pair(0x786,32));
00087 m_blockLength.insert(make_pair(0x787,6));
00088
00089 m_blockLength.insert(make_pair(0x900,12));
00090 m_blockLength.insert(make_pair(0x901,3));
00091 m_blockLength.insert(make_pair(0x902,3));
00092 m_blockLength.insert(make_pair(0x903,10));
00093 m_blockLength.insert(make_pair(0x904,8));
00094 m_blockLength.insert(make_pair(0x908,12));
00095 m_blockLength.insert(make_pair(0x909,3));
00096 m_blockLength.insert(make_pair(0x90a,3));
00097 m_blockLength.insert(make_pair(0x90b,10));
00098 m_blockLength.insert(make_pair(0x90c,8));
00099 m_blockLength.insert(make_pair(0x980,3));
00100 m_blockLength.insert(make_pair(0x984,6));
00101 m_blockLength.insert(make_pair(0x988,12));
00102 m_blockLength.insert(make_pair(0x989,3));
00103 m_blockLength.insert(make_pair(0x98a,3));
00104 m_blockLength.insert(make_pair(0x98b,10));
00105 m_blockLength.insert(make_pair(0x98c,8));
00106 m_blockLength.insert(make_pair(0xa00,12));
00107 m_blockLength.insert(make_pair(0xa01,3));
00108 m_blockLength.insert(make_pair(0xa02,3));
00109 m_blockLength.insert(make_pair(0xa03,10));
00110 m_blockLength.insert(make_pair(0xa04,8));
00111 m_blockLength.insert(make_pair(0xa08,12));
00112 m_blockLength.insert(make_pair(0xa09,3));
00113 m_blockLength.insert(make_pair(0xa0a,3));
00114 m_blockLength.insert(make_pair(0xa0b,10));
00115 m_blockLength.insert(make_pair(0xa0c,8));
00116 m_blockLength.insert(make_pair(0xa80,3));
00117 m_blockLength.insert(make_pair(0xa84,6));
00118 m_blockLength.insert(make_pair(0xa88,12));
00119 m_blockLength.insert(make_pair(0xa89,3));
00120 m_blockLength.insert(make_pair(0xa8a,3));
00121 m_blockLength.insert(make_pair(0xa8b,10));
00122 m_blockLength.insert(make_pair(0xa8c,8));
00123 m_blockLength.insert(make_pair(0xb00,12));
00124 m_blockLength.insert(make_pair(0xb01,3));
00125 m_blockLength.insert(make_pair(0xb02,3));
00126 m_blockLength.insert(make_pair(0xb03,10));
00127 m_blockLength.insert(make_pair(0xb04,8));
00128 m_blockLength.insert(make_pair(0xb08,12));
00129 m_blockLength.insert(make_pair(0xb09,3));
00130 m_blockLength.insert(make_pair(0xb0a,3));
00131 m_blockLength.insert(make_pair(0xb0b,10));
00132 m_blockLength.insert(make_pair(0xb0c,8));
00133 m_blockLength.insert(make_pair(0xb80,3));
00134 m_blockLength.insert(make_pair(0xb84,6));
00135 m_blockLength.insert(make_pair(0xb88,12));
00136 m_blockLength.insert(make_pair(0xb89,3));
00137 m_blockLength.insert(make_pair(0xb8a,3));
00138 m_blockLength.insert(make_pair(0xb8b,10));
00139 m_blockLength.insert(make_pair(0xb8c,8));
00140
00141 m_blockLength.insert(make_pair(0xd00,12));
00142 m_blockLength.insert(make_pair(0xd01,3));
00143 m_blockLength.insert(make_pair(0xd02,3));
00144 m_blockLength.insert(make_pair(0xd03,10));
00145 m_blockLength.insert(make_pair(0xd04,8));
00146 m_blockLength.insert(make_pair(0xd08,12));
00147 m_blockLength.insert(make_pair(0xd09,3));
00148 m_blockLength.insert(make_pair(0xd0a,3));
00149 m_blockLength.insert(make_pair(0xd0b,10));
00150 m_blockLength.insert(make_pair(0xd0c,8));
00151 m_blockLength.insert(make_pair(0xd80,3));
00152 m_blockLength.insert(make_pair(0xd84,6));
00153 m_blockLength.insert(make_pair(0xd88,12));
00154 m_blockLength.insert(make_pair(0xd89,3));
00155 m_blockLength.insert(make_pair(0xd8a,3));
00156 m_blockLength.insert(make_pair(0xd8b,10));
00157 m_blockLength.insert(make_pair(0xd8c,8));
00158 m_blockLength.insert(make_pair(0xe00,12));
00159 m_blockLength.insert(make_pair(0xe01,3));
00160 m_blockLength.insert(make_pair(0xe02,3));
00161 m_blockLength.insert(make_pair(0xe03,10));
00162 m_blockLength.insert(make_pair(0xe04,8));
00163 m_blockLength.insert(make_pair(0xe08,12));
00164 m_blockLength.insert(make_pair(0xe09,3));
00165 m_blockLength.insert(make_pair(0xe0a,3));
00166 m_blockLength.insert(make_pair(0xe0b,10));
00167 m_blockLength.insert(make_pair(0xe0c,8));
00168 m_blockLength.insert(make_pair(0xe80,3));
00169 m_blockLength.insert(make_pair(0xe84,6));
00170 m_blockLength.insert(make_pair(0xe88,12));
00171 m_blockLength.insert(make_pair(0xe89,3));
00172 m_blockLength.insert(make_pair(0xe8a,3));
00173 m_blockLength.insert(make_pair(0xe8b,10));
00174 m_blockLength.insert(make_pair(0xe8c,8));
00175 m_blockLength.insert(make_pair(0xf00,12));
00176 m_blockLength.insert(make_pair(0xf01,3));
00177 m_blockLength.insert(make_pair(0xf02,3));
00178 m_blockLength.insert(make_pair(0xf03,10));
00179 m_blockLength.insert(make_pair(0xf04,8));
00180 m_blockLength.insert(make_pair(0xf08,12));
00181 m_blockLength.insert(make_pair(0xf09,3));
00182 m_blockLength.insert(make_pair(0xf0a,3));
00183 m_blockLength.insert(make_pair(0xf0b,10));
00184 m_blockLength.insert(make_pair(0xf0c,8));
00185 m_blockLength.insert(make_pair(0xf80,3));
00186 m_blockLength.insert(make_pair(0xf84,6));
00187 m_blockLength.insert(make_pair(0xf88,12));
00188 m_blockLength.insert(make_pair(0xf89,3));
00189 m_blockLength.insert(make_pair(0xf8a,3));
00190 m_blockLength.insert(make_pair(0xf8b,10));
00191 m_blockLength.insert(make_pair(0xf8c,8));
00192
00193
00194
00195
00196 m_blockName.insert(make_pair(0x000,"NULL"));
00197
00198 m_blockName.insert(make_pair(0x580,"ConcJet: Input TrigPathA (Jet Cands)"));
00199 m_blockName.insert(make_pair(0x581,"ConcJet: Input TrigPathB (HF Rings)"));
00200 m_blockName.insert(make_pair(0x583,"ConcJet: Jet Cands and Counts Output to GT"));
00201 m_blockName.insert(make_pair(0x587,"ConcJet: BX & Orbit Info"));
00202
00203 m_blockName.insert(make_pair(0x680,"ConcElec: Input TrigPathA (EM Cands)"));
00204 m_blockName.insert(make_pair(0x681,"ConcElec: Input TrigPathB (Et Sums)"));
00205 m_blockName.insert(make_pair(0x682,"ConcElec: Input TrigPathC (Ht Sums)"));
00206 m_blockName.insert(make_pair(0x683,"ConcElec: EM Cands and Energy Sums Output to GT"));
00207 m_blockName.insert(make_pair(0x686,"ConcElec: Test (GT Serdes Loopback)"));
00208 m_blockName.insert(make_pair(0x687,"ConcElec: BX & Orbit Info"));
00209
00210 m_blockName.insert(make_pair(0x800,"Leaf0ElecPosEtaU1: Sort Input"));
00211 m_blockName.insert(make_pair(0x803,"Leaf0ElecPosEtaU1: Sort Output"));
00212 m_blockName.insert(make_pair(0x804,"Leaf0ElecPosEtaU1: Raw Input"));
00213 m_blockName.insert(make_pair(0x880,"Leaf0ElecPosEtaU2: Sort Input"));
00214 m_blockName.insert(make_pair(0x883,"Leaf0ElecPosEtaU2: Sort Output"));
00215 m_blockName.insert(make_pair(0x884,"Leaf0ElecPosEtaU2: Raw Input"));
00216 m_blockName.insert(make_pair(0xc00,"Leaf0ElecNegEtaU1: Sort Input"));
00217 m_blockName.insert(make_pair(0xc03,"Leaf0ElecNegEtaU1: Sort Output"));
00218 m_blockName.insert(make_pair(0xc04,"Leaf0ElecNegEtaU1: Raw Input"));
00219 m_blockName.insert(make_pair(0xc80,"Leaf0ElecNegEtaU2: Sort Input"));
00220 m_blockName.insert(make_pair(0xc83,"Leaf0ElecNegEtaU2: Sort Output"));
00221 m_blockName.insert(make_pair(0xc84,"Leaf0ElecNegEtaU2: Raw Input"));
00222
00223 m_blockName.insert(make_pair(0x300,"WheelPosEtaJet: Input TrigPathA (Jet Sort)"));
00224 m_blockName.insert(make_pair(0x303,"WheelPosEtaJet: Output TrigPathA (Jet Sort)"));
00225 m_blockName.insert(make_pair(0x306,"WheelPosEtaJet: Test (deprecated)"));
00226 m_blockName.insert(make_pair(0x307,"WheelPosEtaJet: Info (deprecated)"));
00227
00228 m_blockName.insert(make_pair(0x380,"WheelPosEtaEnergy: Input TrigPathA (Et)"));
00229 m_blockName.insert(make_pair(0x381,"WheelPosEtaEnergy: Input TrigPathB (Ht)"));
00230 m_blockName.insert(make_pair(0x383,"WheelPosEtaEnergy: Output TrigPathA (Et)"));
00231 m_blockName.insert(make_pair(0x385,"WheelPosEtaEnergy: Output TrigPathB (Ht)"));
00232 m_blockName.insert(make_pair(0x386,"WheelPosEtaEnergy: Test"));
00233 m_blockName.insert(make_pair(0x387,"WheelPosEtaEnergy: BX & Orbit Info"));
00234
00235 m_blockName.insert(make_pair(0x700,"WheelNegEtaJet: Input TrigPathA (Jet Sort)"));
00236 m_blockName.insert(make_pair(0x703,"WheelNegEtaJet: Output TrigPathA (Jet Sort)"));
00237 m_blockName.insert(make_pair(0x706,"WheelNegEtaJet: Test (deprecated)"));
00238 m_blockName.insert(make_pair(0x707,"WheelNegEtaJet: Info (deprecated)"));
00239
00240 m_blockName.insert(make_pair(0x780,"WheelNegEtaEnergy: Input TrigPathA (Et)"));
00241 m_blockName.insert(make_pair(0x781,"WheelNegEtaEnergy: Input TrigPathB (Ht)"));
00242 m_blockName.insert(make_pair(0x783,"WheelNegEtaEnergy: Output TrigPathA (Et)"));
00243 m_blockName.insert(make_pair(0x785,"WheelNegEtaEnergy: Output TrigPathB (Ht)"));
00244 m_blockName.insert(make_pair(0x786,"WheelNegEtaEnergy: Test"));
00245 m_blockName.insert(make_pair(0x787,"WheelNegEtaEnergy: BX & Orbit Info"));
00246
00247 m_blockName.insert(make_pair(0x900,"Leaf1JetPosEtaU1: JF2 Input"));
00248 m_blockName.insert(make_pair(0x901,"Leaf1JetPosEtaU1: JF2 Shared Received"));
00249 m_blockName.insert(make_pair(0x902,"Leaf1JetPosEtaU1: JF2 Shared Sent"));
00250 m_blockName.insert(make_pair(0x903,"Leaf1JetPosEtaU1: JF2 Output"));
00251 m_blockName.insert(make_pair(0x904,"Leaf1JetPosEtaU1: JF2 Raw Input"));
00252 m_blockName.insert(make_pair(0x908,"Leaf1JetPosEtaU1: JF3 Input"));
00253 m_blockName.insert(make_pair(0x909,"Leaf1JetPosEtaU1: JF3 Shared Received"));
00254 m_blockName.insert(make_pair(0x90a,"Leaf1JetPosEtaU1: JF3 Shared Sent"));
00255 m_blockName.insert(make_pair(0x90b,"Leaf1JetPosEtaU1: JF3 Output"));
00256 m_blockName.insert(make_pair(0x90c,"Leaf1JetPosEtaU1: JF3 Raw Input"));
00257 m_blockName.insert(make_pair(0x980,"Leaf1JetPosEtaU2: Eta0 Input"));
00258 m_blockName.insert(make_pair(0x984,"Leaf1JetPosEtaU2: Eta0 Raw Input"));
00259 m_blockName.insert(make_pair(0x988,"Leaf1JetPosEtaU2: JF1 Input"));
00260 m_blockName.insert(make_pair(0x989,"Leaf1JetPosEtaU2: JF1 Shared Received"));
00261 m_blockName.insert(make_pair(0x98a,"Leaf1JetPosEtaU2: JF1 Shared Sent"));
00262 m_blockName.insert(make_pair(0x98b,"Leaf1JetPosEtaU2: JF1 Output"));
00263 m_blockName.insert(make_pair(0x98c,"Leaf1JetPosEtaU2: JF1 Raw Input"));
00264 m_blockName.insert(make_pair(0xa00,"Leaf2JetPosEtaU1: JF2 Input"));
00265 m_blockName.insert(make_pair(0xa01,"Leaf2JetPosEtaU1: JF2 Shared Received"));
00266 m_blockName.insert(make_pair(0xa02,"Leaf2JetPosEtaU1: JF2 Shared Sent"));
00267 m_blockName.insert(make_pair(0xa03,"Leaf2JetPosEtaU1: JF2 Output"));
00268 m_blockName.insert(make_pair(0xa04,"Leaf2JetPosEtaU1: JF2 Raw Input"));
00269 m_blockName.insert(make_pair(0xa08,"Leaf2JetPosEtaU1: JF3 Input"));
00270 m_blockName.insert(make_pair(0xa09,"Leaf2JetPosEtaU1: JF3 Shared Received"));
00271 m_blockName.insert(make_pair(0xa0a,"Leaf2JetPosEtaU1: JF3 Shared Sent"));
00272 m_blockName.insert(make_pair(0xa0b,"Leaf2JetPosEtaU1: JF3 Output"));
00273 m_blockName.insert(make_pair(0xa0c,"Leaf2JetPosEtaU1: JF3 Raw Input"));
00274 m_blockName.insert(make_pair(0xa80,"Leaf2JetPosEtaU2: Eta0 Input"));
00275 m_blockName.insert(make_pair(0xa84,"Leaf2JetPosEtaU2: Eta0 Raw Input"));
00276 m_blockName.insert(make_pair(0xa88,"Leaf2JetPosEtaU2: JF1 Input"));
00277 m_blockName.insert(make_pair(0xa89,"Leaf2JetPosEtaU2: JF1 Shared Received"));
00278 m_blockName.insert(make_pair(0xa8a,"Leaf2JetPosEtaU2: JF1 Shared Sent"));
00279 m_blockName.insert(make_pair(0xa8b,"Leaf2JetPosEtaU2: JF1 Output"));
00280 m_blockName.insert(make_pair(0xa8c,"Leaf2JetPosEtaU2: JF1 Raw Input"));
00281 m_blockName.insert(make_pair(0xb00,"Leaf3JetPosEtaU1: JF2 Input"));
00282 m_blockName.insert(make_pair(0xb01,"Leaf3JetPosEtaU1: JF2 Shared Received"));
00283 m_blockName.insert(make_pair(0xb02,"Leaf3JetPosEtaU1: JF2 Shared Sent"));
00284 m_blockName.insert(make_pair(0xb03,"Leaf3JetPosEtaU1: JF2 Output"));
00285 m_blockName.insert(make_pair(0xb04,"Leaf3JetPosEtaU1: JF2 Raw Input"));
00286 m_blockName.insert(make_pair(0xb08,"Leaf3JetPosEtaU1: JF3 Input"));
00287 m_blockName.insert(make_pair(0xb09,"Leaf3JetPosEtaU1: JF3 Shared Received"));
00288 m_blockName.insert(make_pair(0xb0a,"Leaf3JetPosEtaU1: JF3 Shared Sent"));
00289 m_blockName.insert(make_pair(0xb0b,"Leaf3JetPosEtaU1: JF3 Output"));
00290 m_blockName.insert(make_pair(0xb0c,"Leaf3JetPosEtaU1: JF3 Raw Input"));
00291 m_blockName.insert(make_pair(0xb80,"Leaf3JetPosEtaU2: Eta0 Input"));
00292 m_blockName.insert(make_pair(0xb84,"Leaf3JetPosEtaU2: Eta0 Raw Input"));
00293 m_blockName.insert(make_pair(0xb88,"Leaf3JetPosEtaU2: JF1 Input"));
00294 m_blockName.insert(make_pair(0xb89,"Leaf3JetPosEtaU2: JF1 Shared Received"));
00295 m_blockName.insert(make_pair(0xb8a,"Leaf3JetPosEtaU2: JF1 Shared Sent"));
00296 m_blockName.insert(make_pair(0xb8b,"Leaf3JetPosEtaU2: JF1 Output"));
00297 m_blockName.insert(make_pair(0xb8c,"Leaf3JetPosEtaU2: JF1 Raw Input"));
00298
00299 m_blockName.insert(make_pair(0xd00,"Leaf1JetNegEtaU1: JF2 Input"));
00300 m_blockName.insert(make_pair(0xd01,"Leaf1JetNegEtaU1: JF2 Shared Received"));
00301 m_blockName.insert(make_pair(0xd02,"Leaf1JetNegEtaU1: JF2 Shared Sent"));
00302 m_blockName.insert(make_pair(0xd03,"Leaf1JetNegEtaU1: JF2 Output"));
00303 m_blockName.insert(make_pair(0xd04,"Leaf1JetNegEtaU1: JF2 Raw Input"));
00304 m_blockName.insert(make_pair(0xd08,"Leaf1JetNegEtaU1: JF3 Input"));
00305 m_blockName.insert(make_pair(0xd09,"Leaf1JetNegEtaU1: JF3 Shared Received"));
00306 m_blockName.insert(make_pair(0xd0a,"Leaf1JetNegEtaU1: JF3 Shared Sent"));
00307 m_blockName.insert(make_pair(0xd0b,"Leaf1JetNegEtaU1: JF3 Output"));
00308 m_blockName.insert(make_pair(0xd0c,"Leaf1JetNegEtaU1: JF3 Raw Input"));
00309 m_blockName.insert(make_pair(0xd80,"Leaf1JetNegEtaU2: Eta0 Input"));
00310 m_blockName.insert(make_pair(0xd84,"Leaf1JetNegEtaU2: Eta0 Raw Input"));
00311 m_blockName.insert(make_pair(0xd88,"Leaf1JetNegEtaU2: JF1 Input"));
00312 m_blockName.insert(make_pair(0xd89,"Leaf1JetNegEtaU2: JF1 Shared Received"));
00313 m_blockName.insert(make_pair(0xd8a,"Leaf1JetNegEtaU2: JF1 Shared Sent"));
00314 m_blockName.insert(make_pair(0xd8b,"Leaf1JetNegEtaU2: JF1 Output"));
00315 m_blockName.insert(make_pair(0xd8c,"Leaf1JetNegEtaU2: JF1 Raw Input"));
00316 m_blockName.insert(make_pair(0xe00,"Leaf2JetNegEtaU1: JF2 Input"));
00317 m_blockName.insert(make_pair(0xe01,"Leaf2JetNegEtaU1: JF2 Shared Received"));
00318 m_blockName.insert(make_pair(0xe02,"Leaf2JetNegEtaU1: JF2 Shared Sent"));
00319 m_blockName.insert(make_pair(0xe03,"Leaf2JetNegEtaU1: JF2 Output"));
00320 m_blockName.insert(make_pair(0xe04,"Leaf2JetNegEtaU1: JF2 Raw Input"));
00321 m_blockName.insert(make_pair(0xe08,"Leaf2JetNegEtaU1: JF3 Input"));
00322 m_blockName.insert(make_pair(0xe09,"Leaf2JetNegEtaU1: JF3 Shared Received"));
00323 m_blockName.insert(make_pair(0xe0a,"Leaf2JetNegEtaU1: JF3 Shared Sent"));
00324 m_blockName.insert(make_pair(0xe0b,"Leaf2JetNegEtaU1: JF3 Output"));
00325 m_blockName.insert(make_pair(0xe0c,"Leaf2JetNegEtaU1: JF3 Raw Input"));
00326 m_blockName.insert(make_pair(0xe80,"Leaf2JetNegEtaU2: Eta0 Input"));
00327 m_blockName.insert(make_pair(0xe84,"Leaf2JetNegEtaU2: Eta0 Raw Input"));
00328 m_blockName.insert(make_pair(0xe88,"Leaf2JetNegEtaU2: JF1 Input"));
00329 m_blockName.insert(make_pair(0xe89,"Leaf2JetNegEtaU2: JF1 Shared Received"));
00330 m_blockName.insert(make_pair(0xe8a,"Leaf2JetNegEtaU2: JF1 Shared Sent"));
00331 m_blockName.insert(make_pair(0xe8b,"Leaf2JetNegEtaU2: JF1 Output"));
00332 m_blockName.insert(make_pair(0xe8c,"Leaf2JetNegEtaU2: JF1 Raw Input"));
00333 m_blockName.insert(make_pair(0xf00,"Leaf3JetNegEtaU1: JF2 Input"));
00334 m_blockName.insert(make_pair(0xf01,"Leaf3JetNegEtaU1: JF2 Shared Received"));
00335 m_blockName.insert(make_pair(0xf02,"Leaf3JetNegEtaU1: JF2 Shared Sent"));
00336 m_blockName.insert(make_pair(0xf03,"Leaf3JetNegEtaU1: JF2 Output"));
00337 m_blockName.insert(make_pair(0xf04,"Leaf3JetNegEtaU1: JF2 Raw Input"));
00338 m_blockName.insert(make_pair(0xf08,"Leaf3JetNegEtaU1: JF3 Input"));
00339 m_blockName.insert(make_pair(0xf09,"Leaf3JetNegEtaU1: JF3 Shared Received"));
00340 m_blockName.insert(make_pair(0xf0a,"Leaf3JetNegEtaU1: JF3 Shared Sent"));
00341 m_blockName.insert(make_pair(0xf0b,"Leaf3JetNegEtaU1: JF3 Output"));
00342 m_blockName.insert(make_pair(0xf0c,"Leaf3JetNegEtaU1: JF3 Raw Input"));
00343 m_blockName.insert(make_pair(0xf80,"Leaf3JetNegEtaU2: Eta0 Input"));
00344 m_blockName.insert(make_pair(0xf84,"Leaf3JetNegEtaU2: Eta0 Raw Input"));
00345 m_blockName.insert(make_pair(0xf88,"Leaf3JetNegEtaU2: JF1 Input"));
00346 m_blockName.insert(make_pair(0xf89,"Leaf3JetNegEtaU2: JF1 Shared Received"));
00347 m_blockName.insert(make_pair(0xf8a,"Leaf3JetNegEtaU2: JF1 Shared Sent"));
00348 m_blockName.insert(make_pair(0xf8b,"Leaf3JetNegEtaU2: JF1 Output"));
00349 m_blockName.insert(make_pair(0xf8c,"Leaf3JetNegEtaU2: JF1 Raw Input"));
00350
00351
00352
00353
00354 m_blockUnpackFn[0x000] = &GctFormatTranslateV35::blockDoNothing;
00355
00356 m_blockUnpackFn[0x580] = &GctFormatTranslateV35::blockToGctTrigObjects;
00357 m_blockUnpackFn[0x581] = &GctFormatTranslateV35::blockToGctInternRingSums;
00358 m_blockUnpackFn[0x583] = &GctFormatTranslateV35::blockToGctJetCandsAndCounts;
00359 m_blockUnpackFn[0x587] = &GctFormatTranslateV35::blockDoNothing;
00360
00361 m_blockUnpackFn[0x680] = &GctFormatTranslateV35::blockToGctInternEmCand;
00362 m_blockUnpackFn[0x681] = &GctFormatTranslateV35::blockToGctInternEtSums;
00363 m_blockUnpackFn[0x682] = &GctFormatTranslateV35::blockToGctInternEtSums;
00364 m_blockUnpackFn[0x683] = &GctFormatTranslateV35::blockToGctEmCandsAndEnergySums;
00365 m_blockUnpackFn[0x686] = &GctFormatTranslateV35::blockDoNothing;
00366 m_blockUnpackFn[0x687] = &GctFormatTranslateV35::blockDoNothing;
00367
00368 m_blockUnpackFn[0x800] = &GctFormatTranslateV35::blockToGctInternEmCand;
00369 m_blockUnpackFn[0x803] = &GctFormatTranslateV35::blockToGctInternEmCand;
00370 m_blockUnpackFn[0x804] = &GctFormatTranslateV35::blockToFibresAndToRctEmCand;
00371 m_blockUnpackFn[0x880] = &GctFormatTranslateV35::blockToGctInternEmCand;
00372 m_blockUnpackFn[0x883] = &GctFormatTranslateV35::blockToGctInternEmCand;
00373 m_blockUnpackFn[0x884] = &GctFormatTranslateV35::blockToFibresAndToRctEmCand;
00374 m_blockUnpackFn[0xc00] = &GctFormatTranslateV35::blockToGctInternEmCand;
00375 m_blockUnpackFn[0xc03] = &GctFormatTranslateV35::blockToGctInternEmCand;
00376 m_blockUnpackFn[0xc04] = &GctFormatTranslateV35::blockToFibresAndToRctEmCand;
00377 m_blockUnpackFn[0xc80] = &GctFormatTranslateV35::blockToGctInternEmCand;
00378 m_blockUnpackFn[0xc83] = &GctFormatTranslateV35::blockToGctInternEmCand;
00379 m_blockUnpackFn[0xc84] = &GctFormatTranslateV35::blockToFibresAndToRctEmCand;
00380
00381 m_blockUnpackFn[0x300] = &GctFormatTranslateV35::blockToGctJetClusterMinimal;
00382 m_blockUnpackFn[0x303] = &GctFormatTranslateV35::blockToGctTrigObjects;
00383 m_blockUnpackFn[0x306] = &GctFormatTranslateV35::blockDoNothing;
00384 m_blockUnpackFn[0x307] = &GctFormatTranslateV35::blockDoNothing;
00385
00386 m_blockUnpackFn[0x380] = &GctFormatTranslateV35::blockToGctWheelInputInternEtAndRingSums;
00387 m_blockUnpackFn[0x381] = &GctFormatTranslateV35::blockToGctInternEtSums;
00388 m_blockUnpackFn[0x383] = &GctFormatTranslateV35::blockToGctWheelOutputInternEtAndRingSums;
00389 m_blockUnpackFn[0x385] = &GctFormatTranslateV35::blockToGctInternEtSums;
00390 m_blockUnpackFn[0x386] = &GctFormatTranslateV35::blockDoNothing;
00391 m_blockUnpackFn[0x387] = &GctFormatTranslateV35::blockDoNothing;
00392
00393 m_blockUnpackFn[0x700] = &GctFormatTranslateV35::blockToGctJetClusterMinimal;
00394 m_blockUnpackFn[0x703] = &GctFormatTranslateV35::blockToGctTrigObjects;
00395 m_blockUnpackFn[0x706] = &GctFormatTranslateV35::blockDoNothing;
00396 m_blockUnpackFn[0x707] = &GctFormatTranslateV35::blockDoNothing;
00397
00398 m_blockUnpackFn[0x780] = &GctFormatTranslateV35::blockToGctWheelInputInternEtAndRingSums;
00399 m_blockUnpackFn[0x781] = &GctFormatTranslateV35::blockToGctInternEtSums;
00400 m_blockUnpackFn[0x783] = &GctFormatTranslateV35::blockToGctWheelOutputInternEtAndRingSums;
00401 m_blockUnpackFn[0x785] = &GctFormatTranslateV35::blockToGctInternEtSums;
00402 m_blockUnpackFn[0x786] = &GctFormatTranslateV35::blockDoNothing;
00403 m_blockUnpackFn[0x787] = &GctFormatTranslateV35::blockDoNothing;
00404
00405 m_blockUnpackFn[0x900] = &GctFormatTranslateV35::blockToRctCaloRegions;
00406 m_blockUnpackFn[0x901] = &GctFormatTranslateV35::blockToGctJetPreCluster;
00407 m_blockUnpackFn[0x902] = &GctFormatTranslateV35::blockToGctJetPreCluster;
00408 m_blockUnpackFn[0x903] = &GctFormatTranslateV35::blockToGctInternEtSumsAndJetCluster;
00409 m_blockUnpackFn[0x904] = &GctFormatTranslateV35::blockToFibres;
00410 m_blockUnpackFn[0x908] = &GctFormatTranslateV35::blockToRctCaloRegions;
00411 m_blockUnpackFn[0x909] = &GctFormatTranslateV35::blockToGctJetPreCluster;
00412 m_blockUnpackFn[0x90a] = &GctFormatTranslateV35::blockToGctJetPreCluster;
00413 m_blockUnpackFn[0x90b] = &GctFormatTranslateV35::blockToGctInternEtSumsAndJetCluster;
00414 m_blockUnpackFn[0x90c] = &GctFormatTranslateV35::blockToFibres;
00415 m_blockUnpackFn[0x980] = &GctFormatTranslateV35::blockDoNothing;
00416 m_blockUnpackFn[0x984] = &GctFormatTranslateV35::blockToFibres;
00417 m_blockUnpackFn[0x988] = &GctFormatTranslateV35::blockToRctCaloRegions;
00418 m_blockUnpackFn[0x989] = &GctFormatTranslateV35::blockToGctJetPreCluster;
00419 m_blockUnpackFn[0x98a] = &GctFormatTranslateV35::blockToGctJetPreCluster;
00420 m_blockUnpackFn[0x98b] = &GctFormatTranslateV35::blockToGctInternEtSumsAndJetCluster;
00421 m_blockUnpackFn[0x98c] = &GctFormatTranslateV35::blockToFibres;
00422 m_blockUnpackFn[0xa00] = &GctFormatTranslateV35::blockToRctCaloRegions;
00423 m_blockUnpackFn[0xa01] = &GctFormatTranslateV35::blockToGctJetPreCluster;
00424 m_blockUnpackFn[0xa02] = &GctFormatTranslateV35::blockToGctJetPreCluster;
00425 m_blockUnpackFn[0xa03] = &GctFormatTranslateV35::blockToGctInternEtSumsAndJetCluster;
00426 m_blockUnpackFn[0xa04] = &GctFormatTranslateV35::blockToFibres;
00427 m_blockUnpackFn[0xa08] = &GctFormatTranslateV35::blockToRctCaloRegions;
00428 m_blockUnpackFn[0xa09] = &GctFormatTranslateV35::blockToGctJetPreCluster;
00429 m_blockUnpackFn[0xa0a] = &GctFormatTranslateV35::blockToGctJetPreCluster;
00430 m_blockUnpackFn[0xa0b] = &GctFormatTranslateV35::blockToGctInternEtSumsAndJetCluster;
00431 m_blockUnpackFn[0xa0c] = &GctFormatTranslateV35::blockToFibres;
00432 m_blockUnpackFn[0xa80] = &GctFormatTranslateV35::blockDoNothing;
00433 m_blockUnpackFn[0xa84] = &GctFormatTranslateV35::blockToFibres;
00434 m_blockUnpackFn[0xa88] = &GctFormatTranslateV35::blockToRctCaloRegions;
00435 m_blockUnpackFn[0xa89] = &GctFormatTranslateV35::blockToGctJetPreCluster;
00436 m_blockUnpackFn[0xa8a] = &GctFormatTranslateV35::blockToGctJetPreCluster;
00437 m_blockUnpackFn[0xa8b] = &GctFormatTranslateV35::blockToGctInternEtSumsAndJetCluster;
00438 m_blockUnpackFn[0xa8c] = &GctFormatTranslateV35::blockToFibres;
00439 m_blockUnpackFn[0xb00] = &GctFormatTranslateV35::blockToRctCaloRegions;
00440 m_blockUnpackFn[0xb01] = &GctFormatTranslateV35::blockToGctJetPreCluster;
00441 m_blockUnpackFn[0xb02] = &GctFormatTranslateV35::blockToGctJetPreCluster;
00442 m_blockUnpackFn[0xb03] = &GctFormatTranslateV35::blockToGctInternEtSumsAndJetCluster;
00443 m_blockUnpackFn[0xb04] = &GctFormatTranslateV35::blockToFibres;
00444 m_blockUnpackFn[0xb08] = &GctFormatTranslateV35::blockToRctCaloRegions;
00445 m_blockUnpackFn[0xb09] = &GctFormatTranslateV35::blockToGctJetPreCluster;
00446 m_blockUnpackFn[0xb0a] = &GctFormatTranslateV35::blockToGctJetPreCluster;
00447 m_blockUnpackFn[0xb0b] = &GctFormatTranslateV35::blockToGctInternEtSumsAndJetCluster;
00448 m_blockUnpackFn[0xb0c] = &GctFormatTranslateV35::blockToFibres;
00449 m_blockUnpackFn[0xb80] = &GctFormatTranslateV35::blockDoNothing;
00450 m_blockUnpackFn[0xb84] = &GctFormatTranslateV35::blockToFibres;
00451 m_blockUnpackFn[0xb88] = &GctFormatTranslateV35::blockToRctCaloRegions;
00452 m_blockUnpackFn[0xb89] = &GctFormatTranslateV35::blockToGctJetPreCluster;
00453 m_blockUnpackFn[0xb8a] = &GctFormatTranslateV35::blockToGctJetPreCluster;
00454 m_blockUnpackFn[0xb8b] = &GctFormatTranslateV35::blockToGctInternEtSumsAndJetCluster;
00455 m_blockUnpackFn[0xb8c] = &GctFormatTranslateV35::blockToFibres;
00456
00457 m_blockUnpackFn[0xd00] = &GctFormatTranslateV35::blockToRctCaloRegions;
00458 m_blockUnpackFn[0xd01] = &GctFormatTranslateV35::blockToGctJetPreCluster;
00459 m_blockUnpackFn[0xd02] = &GctFormatTranslateV35::blockToGctJetPreCluster;
00460 m_blockUnpackFn[0xd03] = &GctFormatTranslateV35::blockToGctInternEtSumsAndJetCluster;
00461 m_blockUnpackFn[0xd04] = &GctFormatTranslateV35::blockToFibres;
00462 m_blockUnpackFn[0xd08] = &GctFormatTranslateV35::blockToRctCaloRegions;
00463 m_blockUnpackFn[0xd09] = &GctFormatTranslateV35::blockToGctJetPreCluster;
00464 m_blockUnpackFn[0xd0a] = &GctFormatTranslateV35::blockToGctJetPreCluster;
00465 m_blockUnpackFn[0xd0b] = &GctFormatTranslateV35::blockToGctInternEtSumsAndJetCluster;
00466 m_blockUnpackFn[0xd0c] = &GctFormatTranslateV35::blockToFibres;
00467 m_blockUnpackFn[0xd80] = &GctFormatTranslateV35::blockDoNothing;
00468 m_blockUnpackFn[0xd84] = &GctFormatTranslateV35::blockToFibres;
00469 m_blockUnpackFn[0xd88] = &GctFormatTranslateV35::blockToRctCaloRegions;
00470 m_blockUnpackFn[0xd89] = &GctFormatTranslateV35::blockToGctJetPreCluster;
00471 m_blockUnpackFn[0xd8a] = &GctFormatTranslateV35::blockToGctJetPreCluster;
00472 m_blockUnpackFn[0xd8b] = &GctFormatTranslateV35::blockToGctInternEtSumsAndJetCluster;
00473 m_blockUnpackFn[0xd8c] = &GctFormatTranslateV35::blockToFibres;
00474 m_blockUnpackFn[0xe00] = &GctFormatTranslateV35::blockToRctCaloRegions;
00475 m_blockUnpackFn[0xe01] = &GctFormatTranslateV35::blockToGctJetPreCluster;
00476 m_blockUnpackFn[0xe02] = &GctFormatTranslateV35::blockToGctJetPreCluster;
00477 m_blockUnpackFn[0xe03] = &GctFormatTranslateV35::blockToGctInternEtSumsAndJetCluster;
00478 m_blockUnpackFn[0xe04] = &GctFormatTranslateV35::blockToFibres;
00479 m_blockUnpackFn[0xe08] = &GctFormatTranslateV35::blockToRctCaloRegions;
00480 m_blockUnpackFn[0xe09] = &GctFormatTranslateV35::blockToGctJetPreCluster;
00481 m_blockUnpackFn[0xe0a] = &GctFormatTranslateV35::blockToGctJetPreCluster;
00482 m_blockUnpackFn[0xe0b] = &GctFormatTranslateV35::blockToGctInternEtSumsAndJetCluster;
00483 m_blockUnpackFn[0xe0c] = &GctFormatTranslateV35::blockToFibres;
00484 m_blockUnpackFn[0xe80] = &GctFormatTranslateV35::blockDoNothing;
00485 m_blockUnpackFn[0xe84] = &GctFormatTranslateV35::blockToFibres;
00486 m_blockUnpackFn[0xe88] = &GctFormatTranslateV35::blockToRctCaloRegions;
00487 m_blockUnpackFn[0xe89] = &GctFormatTranslateV35::blockToGctJetPreCluster;
00488 m_blockUnpackFn[0xe8a] = &GctFormatTranslateV35::blockToGctJetPreCluster;
00489 m_blockUnpackFn[0xe8b] = &GctFormatTranslateV35::blockToGctInternEtSumsAndJetCluster;
00490 m_blockUnpackFn[0xe8c] = &GctFormatTranslateV35::blockToFibres;
00491 m_blockUnpackFn[0xf00] = &GctFormatTranslateV35::blockToRctCaloRegions;
00492 m_blockUnpackFn[0xf01] = &GctFormatTranslateV35::blockToGctJetPreCluster;
00493 m_blockUnpackFn[0xf02] = &GctFormatTranslateV35::blockToGctJetPreCluster;
00494 m_blockUnpackFn[0xf03] = &GctFormatTranslateV35::blockToGctInternEtSumsAndJetCluster;
00495 m_blockUnpackFn[0xf04] = &GctFormatTranslateV35::blockToFibres;
00496 m_blockUnpackFn[0xf08] = &GctFormatTranslateV35::blockToRctCaloRegions;
00497 m_blockUnpackFn[0xf09] = &GctFormatTranslateV35::blockToGctJetPreCluster;
00498 m_blockUnpackFn[0xf0a] = &GctFormatTranslateV35::blockToGctJetPreCluster;
00499 m_blockUnpackFn[0xf0b] = &GctFormatTranslateV35::blockToGctInternEtSumsAndJetCluster;
00500 m_blockUnpackFn[0xf0c] = &GctFormatTranslateV35::blockToFibres;
00501 m_blockUnpackFn[0xf80] = &GctFormatTranslateV35::blockDoNothing;
00502 m_blockUnpackFn[0xf84] = &GctFormatTranslateV35::blockToFibres;
00503 m_blockUnpackFn[0xf88] = &GctFormatTranslateV35::blockToRctCaloRegions;
00504 m_blockUnpackFn[0xf89] = &GctFormatTranslateV35::blockToGctJetPreCluster;
00505 m_blockUnpackFn[0xf8a] = &GctFormatTranslateV35::blockToGctJetPreCluster;
00506 m_blockUnpackFn[0xf8b] = &GctFormatTranslateV35::blockToGctInternEtSumsAndJetCluster;
00507 m_blockUnpackFn[0xf8c] = &GctFormatTranslateV35::blockToFibres;
00508
00509
00510
00511 m_rctEmCrate[0x804] = 13;
00512 m_rctEmCrate[0x884] = 9;
00513 m_rctEmCrate[0xc04] = 4;
00514 m_rctEmCrate[0xc84] = 0;
00515
00516
00517
00518 m_rctJetCrate[0x900] = 9;
00519 m_rctJetCrate[0x908] = 10;
00520 m_rctJetCrate[0x988] = 17;
00521 m_rctJetCrate[0xa00] = 12;
00522 m_rctJetCrate[0xa08] = 13;
00523 m_rctJetCrate[0xa88] = 11;
00524 m_rctJetCrate[0xb00] = 15;
00525 m_rctJetCrate[0xb08] = 16;
00526 m_rctJetCrate[0xb88] = 14;
00527 m_rctJetCrate[0xd00] = 0;
00528 m_rctJetCrate[0xd08] = 1;
00529 m_rctJetCrate[0xd88] = 8;
00530 m_rctJetCrate[0xe00] = 3;
00531 m_rctJetCrate[0xe08] = 4;
00532 m_rctJetCrate[0xe88] = 2;
00533 m_rctJetCrate[0xf00] = 6;
00534 m_rctJetCrate[0xf08] = 7;
00535 m_rctJetCrate[0xf88] = 5;
00536
00537
00538
00539 m_internEmIsoBounds[0x680] = IsoBoundaryPair(8,15);
00540 m_internEmIsoBounds[0x800] = IsoBoundaryPair(0, 9);
00541 m_internEmIsoBounds[0x803] = IsoBoundaryPair(0, 1);
00542 m_internEmIsoBounds[0x880] = IsoBoundaryPair(0, 7);
00543 m_internEmIsoBounds[0x883] = IsoBoundaryPair(0, 1);
00544 m_internEmIsoBounds[0xc00] = IsoBoundaryPair(0, 9);
00545 m_internEmIsoBounds[0xc03] = IsoBoundaryPair(0, 1);
00546 m_internEmIsoBounds[0xc80] = IsoBoundaryPair(0, 7);
00547 m_internEmIsoBounds[0xc83] = IsoBoundaryPair(0, 1);
00548 }
00549 }
00550
00551 GctFormatTranslateV35::~GctFormatTranslateV35()
00552 {
00553 }
00554
00555 GctBlockHeader GctFormatTranslateV35::generateBlockHeader(const unsigned char * data) const
00556 {
00557
00558 uint32_t hdr = data[0] + (data[1]<<8) + (data[2]<<16) + (data[3]<<24);
00559
00560
00561
00562
00563
00564
00565
00566
00567
00568
00569
00570 unsigned blockId = hdr & 0xfff;
00571 unsigned blockLength = 0;
00572 unsigned nSamples = (hdr>>16) & 0xf;
00573 unsigned bxId = (hdr>>20) & 0xfff;
00574 unsigned eventId = (hdr>>12) & 0xf;
00575 bool valid = (blockLengthMap().find(blockId) != blockLengthMap().end());
00576
00577 if(valid) { blockLength = blockLengthMap().find(blockId)->second; }
00578
00579 return GctBlockHeader(blockId, blockLength, nSamples, bxId, eventId, valid);
00580 }
00581
00582
00583 bool GctFormatTranslateV35::convertBlock(const unsigned char * data, const GctBlockHeader& hdr)
00584 {
00585
00586 if ( hdr.nSamples() < 1 ) { return true; }
00587
00588 if(!checkBlock(hdr)) { return false; }
00589
00590
00591
00592
00593 (this->*m_blockUnpackFn.find(hdr.blockId())->second)(data, hdr);
00594
00595 return true;
00596 }
00597
00598
00599
00600
00601 uint32_t GctFormatTranslateV35::generateRawHeader(const uint32_t blockId,
00602 const uint32_t nSamples,
00603 const uint32_t bxId,
00604 const uint32_t eventId) const
00605 {
00606
00607
00608
00609
00610
00611
00612
00613
00614
00615
00616 return ((bxId & 0xfff) << 20) | ((nSamples & 0xf) << 16) | ((eventId & 0xf) << 12) | (blockId & 0xfff);
00617 }
00618
00619
00620
00621
00622
00623 void GctFormatTranslateV35::blockToGctEmCandsAndEnergySums(const unsigned char * d, const GctBlockHeader& hdr)
00624 {
00625 const unsigned int id = hdr.blockId();
00626 const unsigned int nSamples = hdr.nSamples();
00627
00628
00629
00630 const uint16_t * p16 = reinterpret_cast<const uint16_t *>(d);
00631
00632
00633
00634 const unsigned int emCandCategoryOffset = nSamples * 4;
00635 const unsigned int timeSampleOffset = nSamples * 2;
00636
00637 unsigned int samplesToUnpack = 1;
00638 if(!hltMode()) { samplesToUnpack = nSamples; }
00639
00640 for (unsigned int iso=0; iso<2; ++iso)
00641 {
00642 bool isoFlag = (iso==1);
00643
00644
00645 L1GctEmCandCollection* em;
00646 if (isoFlag) { em = colls()->gctIsoEm(); }
00647 else { em = colls()->gctNonIsoEm(); }
00648
00649 for (unsigned int bx=0; bx<samplesToUnpack; ++bx)
00650 {
00651
00652
00653 const unsigned int cand0Offset = iso*emCandCategoryOffset + bx*2;
00654
00655 em->push_back(L1GctEmCand(p16[cand0Offset], isoFlag, id, 0, bx));
00656 em->push_back(L1GctEmCand(p16[cand0Offset + timeSampleOffset], isoFlag, id, 1, bx));
00657 em->push_back(L1GctEmCand(p16[cand0Offset + 1], isoFlag, id, 2, bx));
00658 em->push_back(L1GctEmCand(p16[cand0Offset + timeSampleOffset + 1], isoFlag, id, 3, bx));
00659 }
00660 }
00661
00662 p16 += emCandCategoryOffset * 2;
00663
00664
00665
00666
00667 colls()->gctEtTot()->push_back(L1GctEtTotal(p16[0]));
00668 colls()->gctEtHad()->push_back(L1GctEtHad(p16[1]));
00669
00670
00671 const uint32_t * p32 = reinterpret_cast<const uint32_t *>(p16);
00672
00673 colls()->gctEtMiss()->push_back(L1GctEtMiss(p32[nSamples]));
00674 }
00675
00676 void GctFormatTranslateV35::blockToGctJetCandsAndCounts(const unsigned char * d, const GctBlockHeader& hdr)
00677 {
00678 const unsigned int id = hdr.blockId();
00679 const unsigned int nSamples = hdr.nSamples();
00680
00681
00682
00683 const uint16_t * p16 = reinterpret_cast<const uint16_t *>(d);
00684
00685
00686
00687 const unsigned int jetCandCategoryOffset = nSamples * 4;
00688 const unsigned int timeSampleOffset = nSamples * 2;
00689
00690 unsigned int samplesToUnpack = 1;
00691 if(!hltMode()) { samplesToUnpack = nSamples; }
00692
00693
00694 for(unsigned int iCat = 0 ; iCat < NUM_JET_CATEGORIES ; ++iCat)
00695 {
00696 L1GctJetCandCollection * const jets = gctJets(iCat);
00697 assert(jets->empty());
00698
00699 bool tauflag = (iCat == TAU_JETS);
00700 bool forwardFlag = (iCat == FORWARD_JETS);
00701
00702
00703 for(unsigned int bx = 0 ; bx < samplesToUnpack ; ++bx)
00704 {
00705
00706 const unsigned int cand0Offset = iCat*jetCandCategoryOffset + bx*2;
00707
00708
00709 jets->push_back(L1GctJetCand(p16[cand0Offset], tauflag, forwardFlag, id, 0, bx));
00710
00711 jets->push_back(L1GctJetCand(p16[cand0Offset + timeSampleOffset], tauflag, forwardFlag, id, 1, bx));
00712
00713 jets->push_back(L1GctJetCand(p16[cand0Offset + 1], tauflag, forwardFlag, id, 2, bx));
00714
00715 jets->push_back(L1GctJetCand(p16[cand0Offset + timeSampleOffset + 1], tauflag, forwardFlag, id, 3, bx));
00716 }
00717 }
00718
00719 p16 += NUM_JET_CATEGORIES * jetCandCategoryOffset;
00720
00721
00722
00723
00724
00725 const uint32_t * p32 = reinterpret_cast<const uint32_t *>(p16);
00726
00727
00728 colls()->gctHfBitCounts()->push_back(L1GctHFBitCounts::fromConcHFBitCounts(id,6,0,p32[0]));
00729 colls()->gctHfRingEtSums()->push_back(L1GctHFRingEtSums::fromConcRingSums(id,6,0,p32[0]));
00730
00731 }
00732
00733
00734 void GctFormatTranslateV35::blockToGctInternEmCand(const unsigned char * d, const GctBlockHeader& hdr)
00735 {
00736
00737 if(hltMode()) { LogDebug("GCT") << "HLT mode - skipping unpack of internal EM Cands"; return; }
00738
00739 unsigned int id = hdr.blockId();
00740 unsigned int nSamples = hdr.nSamples();
00741 unsigned int numCandPairs = hdr.blockLength();
00742
00743
00744 assert(internEmIsoBounds().find(id) != internEmIsoBounds().end());
00745
00746 unsigned int lowerIsoPairBound = internEmIsoBounds()[id].first;
00747 unsigned int upperIsoPairBound = internEmIsoBounds()[id].second;
00748
00749
00750 uint16_t * p = reinterpret_cast<uint16_t *>(const_cast<unsigned char *>(d));
00751
00752
00753 for(unsigned int bx=0; bx < nSamples; ++bx)
00754 {
00755
00756 for(unsigned int candPair = 0 ; candPair < numCandPairs ; ++candPair)
00757 {
00758
00759 bool iso = ((candPair>=lowerIsoPairBound) && (candPair<=upperIsoPairBound));
00760
00761
00762 for(unsigned int i = 0 ; i < 2 ; ++i)
00763 {
00764 unsigned offset = 2*(bx + candPair*nSamples) + i;
00765 uint16_t candRaw = p[offset];
00766 colls()->gctInternEm()->push_back( L1GctInternEmCand(candRaw, iso, id, candPair*2 + i, bx) );
00767 }
00768 }
00769 }
00770 }
00771
00772
00773
00774
00775 void GctFormatTranslateV35::blockToRctEmCand(const unsigned char * d, const GctBlockHeader& hdr)
00776 {
00777
00778 if(hltMode()) { LogDebug("GCT") << "HLT mode - skipping unpack of RCT EM Cands"; return; }
00779
00780 unsigned int id = hdr.blockId();
00781 unsigned int nSamples = hdr.nSamples();
00782 unsigned int length = hdr.blockLength();
00783
00784
00785 uint16_t * p = reinterpret_cast<uint16_t *>(const_cast<unsigned char *>(d));
00786
00787
00788 uint16_t sfp[2][4];
00789 uint16_t eIsoRank[4];
00790 uint16_t eIsoCard[4];
00791 uint16_t eIsoRgn[4];
00792 uint16_t eNonIsoRank[4];
00793 uint16_t eNonIsoCard[4];
00794 uint16_t eNonIsoRgn[4];
00795 uint16_t MIPbits[7][2];
00796 uint16_t QBits[7][2];
00797
00798 unsigned int bx = 0;
00799
00800
00801 for (unsigned int crate=rctEmCrateMap()[id]; crate<rctEmCrateMap()[id]+length/3; ++crate) {
00802
00803
00804 for (unsigned short iSfp=0 ; iSfp<4 ; ++iSfp) {
00805 for (unsigned short cyc=0 ; cyc<2 ; ++cyc) {
00806 if (iSfp==0) { sfp[cyc][iSfp] = 0; }
00807 else {
00808 sfp[cyc][iSfp] = *p;
00809 ++p;
00810 }
00811 }
00812 p = p + 2*(nSamples-1);
00813 }
00814
00815
00816 srcCardRouting().SFPtoEMU(eIsoRank, eIsoCard, eIsoRgn, eNonIsoRank, eNonIsoCard, eNonIsoRgn, MIPbits, QBits, sfp);
00817
00818
00819 for (unsigned short int i=0; i<4; ++i) {
00820 colls()->rctEm()->push_back( L1CaloEmCand( eIsoRank[i], eIsoRgn[i], eIsoCard[i], crate, true, i, bx) );
00821 }
00822 for (unsigned short int i=0; i<4; ++i) {
00823 colls()->rctEm()->push_back( L1CaloEmCand( eNonIsoRank[i], eNonIsoRgn[i], eNonIsoCard[i], crate, false, i, bx) );
00824 }
00825 }
00826 }
00827
00828
00829 void GctFormatTranslateV35::blockToRctCaloRegions(const unsigned char * d, const GctBlockHeader& hdr)
00830 {
00831
00832 if(hltMode()) { LogDebug("GCT") << "HLT mode - skipping unpack of RCT Regions"; return; }
00833
00834 unsigned int id = hdr.blockId();
00835 unsigned int nSamples = hdr.nSamples();
00836 unsigned int length = hdr.blockLength();
00837
00838
00839 assert(rctJetCrateMap().find(id) != rctJetCrateMap().end());
00840
00841
00842 unsigned int crate=rctJetCrateMap()[id];
00843
00844
00845 uint16_t * p = reinterpret_cast<uint16_t *>(const_cast<unsigned char *>(d));
00846
00847
00848 unsigned int ieta;
00849 unsigned int iphi;
00850
00851 for (unsigned int i=0; i<length; ++i) {
00852 for (uint16_t bx=0; bx<nSamples; ++bx) {
00853 if (i>0) {
00854 if (crate<9){
00855 ieta = 11-i;
00856 iphi = 2*((11-crate)%9);
00857 } else {
00858 ieta = 10+i;
00859 iphi = 2*((20-crate)%9);
00860 }
00861
00862 colls()->rctCalo()->push_back( L1CaloRegion::makeRegionFromUnpacker(*p, ieta, iphi, id, i, bx) );
00863 ++p;
00864
00865 if (iphi>0){
00866 iphi-=1;
00867 } else {
00868 iphi = 17;
00869 }
00870 colls()->rctCalo()->push_back( L1CaloRegion::makeRegionFromUnpacker(*p, ieta, iphi, id, i, bx) );
00871 ++p;
00872 } else {
00873 ++p;
00874 ++p;
00875 }
00876 }
00877 }
00878 }
00879
00880
00881 void GctFormatTranslateV35::blockToFibres(const unsigned char * d, const GctBlockHeader& hdr)
00882 {
00883
00884 if(hltMode()) { LogDebug("GCT") << "HLT mode - skipping unpack of GCT Fibres"; return; }
00885
00886 unsigned int id = hdr.blockId();
00887 unsigned int nSamples = hdr.nSamples();
00888 unsigned int length = hdr.blockLength();
00889
00890
00891 uint32_t * p = reinterpret_cast<uint32_t *>(const_cast<unsigned char *>(d));
00892
00893 for (unsigned int i=0; i<length; ++i) {
00894 for (unsigned int bx=0; bx<nSamples; ++bx) {
00895 colls()->gctFibres()->push_back( L1GctFibreWord(*p, id, i, bx) );
00896 ++p;
00897 }
00898 }
00899 }
00900
00901 void GctFormatTranslateV35::blockToFibresAndToRctEmCand(const unsigned char * d, const GctBlockHeader& hdr)
00902 {
00903 this->blockToRctEmCand(d, hdr);
00904 this->blockToFibres(d, hdr);
00905 }
00906
00907 void GctFormatTranslateV35::blockToGctInternEtSums(const unsigned char * d, const GctBlockHeader& hdr)
00908 {
00909
00910
00911 if(hltMode()) { LogDebug("GCT") << "HLT mode - skipping unpack of internal Et Sums"; return; }
00912
00913 unsigned int id = hdr.blockId();
00914 unsigned int nSamples = hdr.nSamples();
00915 unsigned int length = hdr.blockLength();
00916
00917
00918 uint32_t * p = reinterpret_cast<uint32_t *>(const_cast<unsigned char *>(d));
00919
00920 for (unsigned int i=0; i<length; ++i) {
00921
00922 for (unsigned int bx=0; bx<nSamples; ++bx) {
00923 colls()->gctInternEtSums()->push_back(L1GctInternEtSum::fromTotalEtOrHt(id,i,bx,*p));
00924 ++p;
00925 }
00926 }
00927 }
00928
00929 void GctFormatTranslateV35::blockToGctInternEtSumsAndJetCluster(const unsigned char * d, const GctBlockHeader& hdr)
00930 {
00931
00932 if(hltMode()) { LogDebug("GCT") << "HLT mode - skipping unpack of internal Jet Cands"; return; }
00933
00934 unsigned int id = hdr.blockId();
00935 unsigned int nSamples = hdr.nSamples();
00936 unsigned int length = hdr.blockLength();
00937
00938
00939 uint32_t * p = reinterpret_cast<uint32_t *>(const_cast<unsigned char *>(d));
00940
00941 for (unsigned int i=0; i<length; ++i) {
00942
00943 for (unsigned int bx=0; bx<nSamples; ++bx) {
00944 if (i<2) colls()->gctInternEtSums()->push_back(L1GctInternEtSum::fromJetMissEt(id,i,bx,*p));
00945 if (i==3){
00946 colls()->gctInternEtSums()->push_back(L1GctInternEtSum::fromJetTotEt(id,i,bx,*p));
00947 colls()->gctInternEtSums()->push_back(L1GctInternEtSum::fromJetTotHt(id,i,bx,*p));
00948 }
00949 if (i>4) colls()->gctInternJets()->push_back(L1GctInternJetData::fromJetCluster(L1CaloRegionDetId(0,0),id,i,bx,*p));
00950 ++p;
00951 }
00952 }
00953 }
00954
00955 void GctFormatTranslateV35::blockToGctTrigObjects(const unsigned char * d, const GctBlockHeader& hdr)
00956 {
00957
00958 if(hltMode()) { LogDebug("GCT") << "HLT mode - skipping unpack of internal Jet Cands"; return; }
00959
00960 unsigned int id = hdr.blockId();
00961 unsigned int nSamples = hdr.nSamples();
00962 unsigned int length = hdr.blockLength();
00963
00964
00965 uint16_t * p = reinterpret_cast<uint16_t *>(const_cast<unsigned char *>(d));
00966
00967 for (unsigned int i=0; i<length; ++i) {
00968
00969 for (unsigned int bx=0; bx<nSamples; ++bx) {
00970 colls()->gctInternJets()->push_back( L1GctInternJetData::fromGctTrigObject(L1CaloRegionDetId(0,0),id,i,bx,*p));
00971 ++p;
00972 colls()->gctInternJets()->push_back( L1GctInternJetData::fromGctTrigObject(L1CaloRegionDetId(0,0),id,i,bx,*p));
00973 ++p;
00974 }
00975 }
00976 }
00977
00978 void GctFormatTranslateV35::blockToGctJetClusterMinimal(const unsigned char * d, const GctBlockHeader& hdr)
00979 {
00980
00981 if(hltMode()) { LogDebug("GCT") << "HLT mode - skipping unpack of internal Jet Cands"; return; }
00982
00983 unsigned int id = hdr.blockId();
00984 unsigned int nSamples = hdr.nSamples();
00985 unsigned int length = hdr.blockLength();
00986
00987
00988 uint16_t * p = reinterpret_cast<uint16_t *>(const_cast<unsigned char *>(d));
00989
00990 for (unsigned int i=0; i<length; ++i) {
00991
00992 for (unsigned int bx=0; bx<nSamples; ++bx) {
00993 colls()->gctInternJets()->push_back( L1GctInternJetData::fromJetClusterMinimal(L1CaloRegionDetId(0,0),id,i,bx,*p));
00994 ++p;
00995 colls()->gctInternJets()->push_back( L1GctInternJetData::fromJetClusterMinimal(L1CaloRegionDetId(0,0),id,i,bx,*p));
00996 ++p;
00997 }
00998 }
00999 }
01000
01001 void GctFormatTranslateV35::blockToGctJetPreCluster(const unsigned char * d, const GctBlockHeader& hdr)
01002 {
01003
01004 if(hltMode()) { LogDebug("GCT") << "HLT mode - skipping unpack of internal Jet Cands"; return; }
01005
01006 unsigned int id = hdr.blockId();
01007 unsigned int nSamples = hdr.nSamples();
01008 unsigned int length = hdr.blockLength();
01009
01010
01011 uint16_t * p = reinterpret_cast<uint16_t *>(const_cast<unsigned char *>(d));
01012
01013 for (unsigned int i=0; i<length; ++i) {
01014
01015 for (unsigned int bx=0; bx<nSamples; ++bx) {
01016 colls()->gctInternJets()->push_back( L1GctInternJetData::fromJetPreCluster(L1CaloRegionDetId(0,0),id,i,bx,*p));
01017 ++p;
01018 colls()->gctInternJets()->push_back( L1GctInternJetData::fromJetPreCluster(L1CaloRegionDetId(0,0),id,i,bx,*p));
01019 ++p;
01020 }
01021 }
01022 }
01023
01024 void GctFormatTranslateV35::blockToGctInternRingSums(const unsigned char * d, const GctBlockHeader& hdr)
01025 {
01026
01027 if(hltMode()) { LogDebug("GCT") << "HLT mode - skipping unpack of internal HF ring data"; return; }
01028
01029 unsigned int id = hdr.blockId();
01030 unsigned int nSamples = hdr.nSamples();
01031 unsigned int length = hdr.blockLength();
01032
01033
01034 uint32_t * p = reinterpret_cast<uint32_t *>(const_cast<unsigned char *>(d));
01035
01036 for (unsigned int i=0; i<length/2; ++i) {
01037
01038 for (unsigned int bx=0; bx<nSamples; ++bx) {
01039 colls()->gctInternHFData()->push_back(L1GctInternHFData::fromConcRingSums(id,i,bx,*p));
01040 ++p;
01041 }
01042 for (unsigned int bx=0; bx<nSamples; ++bx) {
01043 colls()->gctInternHFData()->push_back(L1GctInternHFData::fromConcBitCounts(id,i,bx,*p));
01044 ++p;
01045 }
01046 }
01047 }
01048
01049 void GctFormatTranslateV35::blockToGctWheelInputInternEtAndRingSums(const unsigned char * d, const GctBlockHeader& hdr)
01050 {
01051
01052 if(hltMode()) { LogDebug("GCT") << "HLT mode - skipping unpack of wheel input internal Et sums and HF ring data"; return; }
01053
01054 unsigned int id = hdr.blockId();
01055 unsigned int nSamples = hdr.nSamples();
01056 unsigned int length = hdr.blockLength();
01057
01058
01059 uint32_t * p = reinterpret_cast<uint32_t *>(const_cast<unsigned char *>(d));
01060
01061 for (unsigned int i=0; i<length; ++i) {
01062
01063 for (unsigned int bx=0; bx<nSamples; ++bx) {
01064 if (i<3){
01065 colls()->gctInternEtSums()->push_back(L1GctInternEtSum::fromTotalEtOrHt(id,i,bx,*p));
01066 } else if (i>2 && i<9) {
01067 colls()->gctInternEtSums()->push_back(L1GctInternEtSum::fromMissEtxOrEty(id,i,bx,*p));
01068 } else if (i>8 && i<15) {
01069 colls()->gctInternHFData()->push_back(L1GctInternHFData::fromWheelRingSums(id,i,bx,*p));
01070 } else if (i>14){
01071 colls()->gctInternHFData()->push_back(L1GctInternHFData::fromWheelBitCounts(id,i,bx,*p));
01072 }
01073 ++p;
01074 }
01075 }
01076 }
01077
01078 void GctFormatTranslateV35::blockToGctWheelOutputInternEtAndRingSums(const unsigned char * d, const GctBlockHeader& hdr)
01079 {
01080
01081 if(hltMode()) { LogDebug("GCT") << "HLT mode - skipping unpack of wheel output internal Et sums and HF ring data"; return; }
01082
01083 unsigned int id = hdr.blockId();
01084 unsigned int nSamples = hdr.nSamples();
01085 unsigned int length = hdr.blockLength();
01086
01087
01088 uint32_t * p = reinterpret_cast<uint32_t *>(const_cast<unsigned char *>(d));
01089
01090 for (unsigned int i=0; i<length; ++i) {
01091
01092 for (unsigned int bx=0; bx<nSamples; ++bx) {
01093 if (i<1){
01094 colls()->gctInternEtSums()->push_back(L1GctInternEtSum::fromTotalEtOrHt(id,i,bx,*p));
01095 } else if (i>0 && i<3) {
01096 colls()->gctInternEtSums()->push_back(L1GctInternEtSum::fromMissEtxOrEty(id,i,bx,*p));
01097 } else if (i>2 && i<5) {
01098 colls()->gctInternHFData()->push_back(L1GctInternHFData::fromWheelRingSums(id,i,bx,*p));
01099 } else if (i>4){
01100 colls()->gctInternHFData()->push_back(L1GctInternHFData::fromWheelBitCounts(id,i,bx,*p));
01101 }
01102 ++p;
01103 }
01104 }
01105 }