00001 #include "EventFilter/CSCRawToDigi/interface/CSCDCCUnpacker.h"
00002
00003
00004 #include "DataFormats/Common/interface/Handle.h"
00005 #include "FWCore/Framework/interface/Event.h"
00006 #include "FWCore/MessageLogger/interface/MessageLogger.h"
00007 #include "FWCore/Framework/interface/ESHandle.h"
00008 #include "FWCore/Framework/interface/EventSetup.h"
00009
00010 #include "DataFormats/FEDRawData/interface/FEDRawData.h"
00011 #include "DataFormats/FEDRawData/interface/FEDNumbering.h"
00012 #include "DataFormats/FEDRawData/interface/FEDRawDataCollection.h"
00013
00014
00015 #include "DataFormats/CSCDigi/interface/CSCStripDigi.h"
00016 #include "DataFormats/CSCDigi/interface/CSCCFEBStatusDigi.h"
00017 #include "DataFormats/CSCDigi/interface/CSCWireDigi.h"
00018 #include "DataFormats/CSCDigi/interface/CSCComparatorDigi.h"
00019 #include "DataFormats/CSCDigi/interface/CSCALCTDigi.h"
00020 #include "DataFormats/CSCDigi/interface/CSCCLCTDigi.h"
00021 #include "DataFormats/CSCDigi/interface/CSCRPCDigi.h"
00022 #include "DataFormats/CSCDigi/interface/CSCCorrelatedLCTDigi.h"
00023
00024 #include "DataFormats/CSCDigi/interface/CSCStripDigiCollection.h"
00025 #include "DataFormats/CSCDigi/interface/CSCCFEBStatusDigiCollection.h"
00026 #include "DataFormats/CSCDigi/interface/CSCWireDigiCollection.h"
00027 #include "DataFormats/CSCDigi/interface/CSCComparatorDigiCollection.h"
00028 #include "DataFormats/CSCDigi/interface/CSCALCTDigiCollection.h"
00029 #include "DataFormats/CSCDigi/interface/CSCCLCTDigiCollection.h"
00030 #include "DataFormats/CSCDigi/interface/CSCRPCDigiCollection.h"
00031 #include "DataFormats/CSCDigi/interface/CSCCorrelatedLCTDigiCollection.h"
00032 #include "DataFormats/CSCDigi/interface/CSCDMBStatusDigi.h"
00033 #include "DataFormats/CSCDigi/interface/CSCDMBStatusDigiCollection.h"
00034 #include "DataFormats/CSCDigi/interface/CSCTMBStatusDigi.h"
00035 #include "DataFormats/CSCDigi/interface/CSCTMBStatusDigiCollection.h"
00036 #include "DataFormats/CSCDigi/interface/CSCDDUStatusDigi.h"
00037 #include "DataFormats/CSCDigi/interface/CSCDDUStatusDigiCollection.h"
00038 #include "DataFormats/CSCDigi/interface/CSCDCCStatusDigi.h"
00039 #include "DataFormats/CSCDigi/interface/CSCDCCStatusDigiCollection.h"
00040 #include "DataFormats/CSCDigi/interface/CSCALCTStatusDigi.h"
00041 #include "DataFormats/CSCDigi/interface/CSCALCTStatusDigiCollection.h"
00042 #include "DataFormats/CSCDigi/interface/CSCALCTStatusDigiCollection.h"
00043 #include "DataFormats/CSCDigi/interface/CSCDCCFormatStatusDigi.h"
00044 #include "DataFormats/CSCDigi/interface/CSCDCCFormatStatusDigiCollection.h"
00045
00046 #include "DataFormats/MuonDetId/interface/CSCDetId.h"
00047
00048 #include "EventFilter/CSCRawToDigi/interface/CSCDCCEventData.h"
00049 #include "EventFilter/CSCRawToDigi/interface/CSCEventData.h"
00050 #include "EventFilter/CSCRawToDigi/interface/CSCCFEBData.h"
00051 #include "EventFilter/CSCRawToDigi/interface/CSCALCTHeader.h"
00052 #include "EventFilter/CSCRawToDigi/interface/CSCAnodeData.h"
00053 #include "EventFilter/CSCRawToDigi/interface/CSCCLCTData.h"
00054 #include "EventFilter/CSCRawToDigi/interface/CSCDDUEventData.h"
00055 #include "EventFilter/CSCRawToDigi/interface/CSCTMBData.h"
00056 #include "EventFilter/CSCRawToDigi/interface/CSCTMBHeader.h"
00057 #include "EventFilter/CSCRawToDigi/interface/CSCRPCData.h"
00058 #include "EventFilter/CSCRawToDigi/interface/CSCDCCExaminer.h"
00059 #include "CondFormats/CSCObjects/interface/CSCCrateMap.h"
00060 #include "CondFormats/DataRecord/interface/CSCCrateMapRcd.h"
00061 #include <EventFilter/CSCRawToDigi/interface/CSCMonitorInterface.h>
00062 #include "FWCore/ServiceRegistry/interface/Service.h"
00063
00064 #include <iostream>
00065 #include <sstream>
00066 #include <string>
00067 #include <iomanip>
00068 #include <cstdio>
00069
00070 CSCDCCUnpacker::CSCDCCUnpacker(const edm::ParameterSet & pset) :
00071 numOfEvents(0) {
00072
00073
00074
00075 inputObjectsTag = pset.getParameter<edm::InputTag>("InputObjects");
00076 useExaminer = pset.getParameter<bool>("UseExaminer");
00077 examinerMask = pset.getParameter<unsigned int>("ExaminerMask");
00079 useSelectiveUnpacking = pset.getParameter<bool>("UseSelectiveUnpacking");
00080 errorMask = pset.getParameter<unsigned int>("ErrorMask");
00081 unpackStatusDigis = pset.getParameter<bool>("UnpackStatusDigis");
00083 useFormatStatus = pset.getParameter<bool>("UseFormatStatus");
00084
00085
00086
00087 printEventNumber = pset.getUntrackedParameter<bool>("PrintEventNumber", true);
00088 debug = pset.getUntrackedParameter<bool>("Debug", false);
00089 instantiateDQM = pset.getUntrackedParameter<bool>("runDQM", false);
00090
00092 visualFEDInspect = pset.getUntrackedParameter<bool>("VisualFEDInspect", false);
00093 visualFEDShort = pset.getUntrackedParameter<bool>("VisualFEDShort", false);
00094 formatedEventDump = pset.getUntrackedParameter<bool>("FormatedEventDump", false);
00095
00097 SuppressZeroLCT = pset.getUntrackedParameter<bool>("SuppressZeroLCT", true);
00098
00099
00100
00101 if(instantiateDQM) {
00102 monitor = edm::Service<CSCMonitorInterface>().operator->();
00103 }
00104
00105 produces<CSCWireDigiCollection>("MuonCSCWireDigi");
00106 produces<CSCStripDigiCollection>("MuonCSCStripDigi");
00107 produces<CSCComparatorDigiCollection>("MuonCSCComparatorDigi");
00108 produces<CSCALCTDigiCollection>("MuonCSCALCTDigi");
00109 produces<CSCCLCTDigiCollection>("MuonCSCCLCTDigi");
00110 produces<CSCRPCDigiCollection>("MuonCSCRPCDigi");
00111 produces<CSCCorrelatedLCTDigiCollection>("MuonCSCCorrelatedLCTDigi");
00112
00113 if (unpackStatusDigis) {
00114 produces<CSCCFEBStatusDigiCollection>("MuonCSCCFEBStatusDigi");
00115 produces<CSCTMBStatusDigiCollection>("MuonCSCTMBStatusDigi");
00116 produces<CSCDMBStatusDigiCollection>("MuonCSCDMBStatusDigi");
00117 produces<CSCALCTStatusDigiCollection>("MuonCSCALCTStatusDigi");
00118 produces<CSCDDUStatusDigiCollection>("MuonCSCDDUStatusDigi");
00119 produces<CSCDCCStatusDigiCollection>("MuonCSCDCCStatusDigi");
00120 }
00121
00122 if (useFormatStatus) {
00123 produces<CSCDCCFormatStatusDigiCollection>("MuonCSCDCCFormatStatusDigi");
00124 }
00125
00126 CSCALCTHeader::setDebug(debug);
00127 CSCCLCTData::setDebug(debug);
00128 CSCEventData::setDebug(debug);
00129 CSCTMBData::setDebug(debug);
00130 CSCDCCEventData::setDebug(debug);
00131 CSCDDUEventData::setDebug(debug);
00132 CSCTMBHeader::setDebug(debug);
00133 CSCRPCData::setDebug(debug);
00134 CSCDDUEventData::setErrorMask(errorMask);
00135
00136 }
00137
00138 CSCDCCUnpacker::~CSCDCCUnpacker(){
00139
00140 }
00141
00142
00143 void CSCDCCUnpacker::produce(edm::Event & e, const edm::EventSetup& c){
00144
00146
00147
00148
00149 edm::ESHandle<CSCCrateMap> hcrate;
00150 c.get<CSCCrateMapRcd>().get(hcrate);
00151 const CSCCrateMap* pcrate = hcrate.product();
00152
00153
00154 if (printEventNumber) ++numOfEvents;
00155
00157 edm::Handle<FEDRawDataCollection> rawdata;
00158 e.getByLabel(inputObjectsTag, rawdata);
00159
00161 std::auto_ptr<CSCWireDigiCollection> wireProduct(new CSCWireDigiCollection);
00162 std::auto_ptr<CSCStripDigiCollection> stripProduct(new CSCStripDigiCollection);
00163 std::auto_ptr<CSCALCTDigiCollection> alctProduct(new CSCALCTDigiCollection);
00164 std::auto_ptr<CSCCLCTDigiCollection> clctProduct(new CSCCLCTDigiCollection);
00165 std::auto_ptr<CSCComparatorDigiCollection> comparatorProduct(new CSCComparatorDigiCollection);
00166 std::auto_ptr<CSCRPCDigiCollection> rpcProduct(new CSCRPCDigiCollection);
00167 std::auto_ptr<CSCCorrelatedLCTDigiCollection> corrlctProduct(new CSCCorrelatedLCTDigiCollection);
00168 std::auto_ptr<CSCCFEBStatusDigiCollection> cfebStatusProduct(new CSCCFEBStatusDigiCollection);
00169 std::auto_ptr<CSCDMBStatusDigiCollection> dmbStatusProduct(new CSCDMBStatusDigiCollection);
00170 std::auto_ptr<CSCTMBStatusDigiCollection> tmbStatusProduct(new CSCTMBStatusDigiCollection);
00171 std::auto_ptr<CSCDDUStatusDigiCollection> dduStatusProduct(new CSCDDUStatusDigiCollection);
00172 std::auto_ptr<CSCDCCStatusDigiCollection> dccStatusProduct(new CSCDCCStatusDigiCollection);
00173 std::auto_ptr<CSCALCTStatusDigiCollection> alctStatusProduct(new CSCALCTStatusDigiCollection);
00174
00175 std::auto_ptr<CSCDCCFormatStatusDigiCollection> formatStatusProduct(new CSCDCCFormatStatusDigiCollection);
00176
00177
00178
00179
00180
00181 unsigned long dccBinCheckMask = 0x06080016;
00182
00183 for (int id=FEDNumbering::MINCSCFEDID;
00184 id<=FEDNumbering::MAXCSCFEDID; ++id) {
00187
00189 const FEDRawData& fedData = rawdata->FEDData(id);
00190 unsigned long length = fedData.size();
00191
00192
00193 if (length>=32){
00194 CSCDCCExaminer* examiner = NULL;
00195 std::stringstream examiner_out, examiner_err;
00196 goodEvent = true;
00197 if (useExaminer) {
00198
00199 examiner = new CSCDCCExaminer();
00200 examiner->output1().redirect(examiner_out);
00201 examiner->output2().redirect(examiner_err);
00202 if( examinerMask&0x40000 ) examiner->crcCFEB(1);
00203 if( examinerMask&0x8000 ) examiner->crcTMB (1);
00204 if( examinerMask&0x0400 ) examiner->crcALCT(1);
00205 examiner->output1().show();
00206 examiner->output2().show();
00207 examiner->setMask(examinerMask);
00208 const short unsigned int *data = (short unsigned int *)fedData.data();
00209
00210
00211
00212
00213
00214
00215
00216
00217
00218
00219
00220 int res = examiner->check(data,long(fedData.size()/2));
00221 if( res < 0 ) {
00222 goodEvent=false;
00223 }
00224 else {
00225 if (useSelectiveUnpacking) goodEvent=!(examiner->errors()&dccBinCheckMask);
00226 else goodEvent=!(examiner->errors()&examinerMask);
00227 }
00228
00229
00230
00231
00232
00233
00234
00235
00236 if (useFormatStatus && (examiner->errors() !=0))
00237
00238 formatStatusProduct->insertDigi(CSCDetId(1,1,1,1,1),
00239 CSCDCCFormatStatusDigi(id,dccBinCheckMask,
00240 examiner->getMask(),
00241 examiner->errors(),
00242 examiner->errorsDetailedDDU(),
00243 examiner->errorsDetailed(),
00244 examiner->payloadDetailed(),
00245 examiner->statusDetailed()));
00246 }
00247
00249 if(visualFEDInspect || formatedEventDump){
00250 if (!goodEvent || formatedEventDump){
00251 short unsigned * buf = (short unsigned int *)fedData.data();
00252 visual_raw(length/2, id,(int)e.id().run(),(int)e.id().event(),
00253 visualFEDShort, formatedEventDump, buf);
00254 }
00255 }
00256
00257 if (goodEvent) {
00259
00260
00261 CSCDCCExaminer * ptrExaminer = examiner;
00262 if (!useSelectiveUnpacking) ptrExaminer = NULL;
00263
00264 CSCDCCEventData dccData((short unsigned int *) fedData.data(), ptrExaminer);
00265
00266
00267
00268 if(instantiateDQM) monitor->process(examiner, &dccData);
00269
00271 const std::vector<CSCDDUEventData> & dduData = dccData.dduData();
00272
00274 CSCDetId layer(1, 1, 1, 1, 1);
00275
00276 if (unpackStatusDigis) {
00277
00279 short unsigned * bufForDcc = (short unsigned int *)fedData.data();
00280
00281
00282
00283
00284 dccStatusProduct->insertDigi(layer, CSCDCCStatusDigi(dccData.dccHeader().data(),
00285 dccData.dccTrailer().data(),
00286 examiner->errors(),
00287 bufForDcc[length/2-4]));
00288
00289 }
00290
00291 for (unsigned int iDDU=0; iDDU<dduData.size(); ++iDDU) {
00294 if (dduData[iDDU].trailer().errorstat()&errorMask) {
00295 LogTrace("CSCDCCUnpacker|CSCRawToDigi") << "DDU# " << iDDU << " has serious error - no digis unpacked! " <<
00296 std::hex << dduData[iDDU].trailer().errorstat();
00297 continue;
00298 }
00299
00300 if (unpackStatusDigis) dduStatusProduct->
00301 insertDigi(layer, CSCDDUStatusDigi(dduData[iDDU].header().data(),
00302 dduData[iDDU].trailer().data(),
00304 dduData[iDDU].trailer0()));
00305
00307 const std::vector<CSCEventData> & cscData = dduData[iDDU].cscData();
00308
00309
00310 for (unsigned int iCSC=0; iCSC<cscData.size(); ++iCSC) {
00311
00313 int vmecrate = cscData[iCSC].dmbHeader()->crateID();
00314 int dmb = cscData[iCSC].dmbHeader()->dmbID();
00315
00316 int icfeb = 0;
00317 int ilayer = 0;
00318
00319 if (debug)
00320 LogTrace ("CSCDCCUnpacker|CSCRawToDigi") << "crate = " << vmecrate << "; dmb = " << dmb;
00321
00322 if ((vmecrate>=1)&&(vmecrate<=60) && (dmb>=1)&&(dmb<=10)&&(dmb!=6)) {
00323 layer = pcrate->detId(vmecrate, dmb,icfeb,ilayer );
00324 }
00325 else{
00326 LogTrace ("CSCDCCUnpacker|CSCRawToDigi") << " detID input out of range!!! ";
00327 LogTrace ("CSCDCCUnpacker|CSCRawToDigi")
00328 << " skipping chamber vme= " << vmecrate << " dmb= " << dmb;
00329 continue;
00330 }
00331
00332
00334 int nalct = cscData[iCSC].dmbHeader()->nalct();
00335 bool goodALCT=false;
00336
00337 if (nalct&&cscData[iCSC].alctHeader()) {
00338 if (cscData[iCSC].alctHeader()->check()){
00339 goodALCT=true;
00340 }
00341 else {
00342 LogTrace ("CSCDCCUnpacker|CSCRawToDigi") <<
00343 "not storing ALCT digis; alct is bad or not present";
00344 }
00345 } else {
00346 if (debug) LogTrace ("CSCDCCUnpacker|CSCRawToDigi") << "nALCT==0 !!!";
00347 }
00348
00350 if (goodALCT){
00351 std::vector <CSCALCTDigi> alctDigis =
00352 cscData[iCSC].alctHeader()->ALCTDigis();
00353 if(SuppressZeroLCT){
00354 std::vector<CSCALCTDigi> alctDigis_0;
00355 for (int unsigned i=0; i<alctDigis.size(); ++i){
00356 if(alctDigis[i].isValid())
00357 alctDigis_0.push_back(alctDigis[i]);
00358 }
00359 alctProduct->put(std::make_pair(alctDigis_0.begin(), alctDigis_0.end()),layer);
00360 }
00361 else
00362 alctProduct->put(std::make_pair(alctDigis.begin(), alctDigis.end()),layer);
00363 }
00364
00365
00367 int nclct = cscData[iCSC].dmbHeader()->nclct();
00368 bool goodTMB=false;
00369
00370 if (nclct&&cscData[iCSC].tmbData()) {
00371 if (cscData[iCSC].tmbHeader()->check()){
00372 if (cscData[iCSC].clctData()->check()) goodTMB=true;
00373 }
00374 else {
00375 LogTrace ("CSCDCCUnpacker|CSCRawToDigi") <<
00376 "one of TMB checks failed! not storing TMB digis ";
00377 }
00378 }
00379 else {
00380 if (debug) LogTrace ("CSCDCCUnpacker|CSCRawToDigi") << "nCLCT==0 !!!";
00381 }
00382
00384 if (goodTMB) {
00385 std::vector <CSCCorrelatedLCTDigi> correlatedlctDigis =
00386 cscData[iCSC].tmbHeader()->CorrelatedLCTDigis(layer.rawId());
00387 if(SuppressZeroLCT){
00388 std::vector<CSCCorrelatedLCTDigi> correlatedlctDigis_0;
00389 for (int unsigned i=0; i<correlatedlctDigis.size(); ++i){
00390 if(correlatedlctDigis[i].isValid())
00391 correlatedlctDigis_0.push_back(correlatedlctDigis[i]);
00392 }
00393 corrlctProduct->put(std::make_pair(correlatedlctDigis_0.begin(),
00394 correlatedlctDigis_0.end()),layer);
00395 }
00396 else
00397 corrlctProduct->put(std::make_pair(correlatedlctDigis.begin(),
00398 correlatedlctDigis.end()),layer);
00399
00400 std::vector <CSCCLCTDigi> clctDigis =
00401 cscData[iCSC].tmbHeader()->CLCTDigis(layer.rawId());
00402 if(SuppressZeroLCT){
00403 std::vector<CSCCLCTDigi> clctDigis_0;
00404 for (int unsigned i=0; i<clctDigis.size(); ++i){
00405 if(clctDigis[i].isValid())
00406 clctDigis_0.push_back(clctDigis[i]);
00407 }
00408 clctProduct->put(std::make_pair(clctDigis_0.begin(), clctDigis_0.end()),layer);
00409 }
00410 else
00411 clctProduct->put(std::make_pair(clctDigis.begin(), clctDigis.end()),layer);
00412
00414 if (cscData[iCSC].tmbData()->checkSize()) {
00415 if (cscData[iCSC].tmbData()->hasRPC()) {
00416 std::vector <CSCRPCDigi> rpcDigis =
00417 cscData[iCSC].tmbData()->rpcData()->digis();
00418 rpcProduct->put(std::make_pair(rpcDigis.begin(), rpcDigis.end()),layer);
00419 }
00420 }
00421 else LogTrace("CSCDCCUnpacker|CSCRawToDigi") <<" TMBData check size failed!";
00422 }
00423
00424
00426 if (unpackStatusDigis) {
00427 for ( icfeb = 0; icfeb < 5; ++icfeb ) {
00428 if ( cscData[iCSC].cfebData(icfeb) != NULL )
00429 cfebStatusProduct->
00430 insertDigi(layer, cscData[iCSC].cfebData(icfeb)->statusDigi());
00431 }
00433 dmbStatusProduct->insertDigi(layer, CSCDMBStatusDigi(cscData[iCSC].dmbHeader()->data(),
00434 cscData[iCSC].dmbTrailer()->data()));
00435 if (goodTMB) tmbStatusProduct->
00436 insertDigi(layer, CSCTMBStatusDigi(cscData[iCSC].tmbHeader()->data(),
00437 cscData[iCSC].tmbData()->tmbTrailer()->data()));
00438 if (goodALCT) alctStatusProduct->
00439 insertDigi(layer, CSCALCTStatusDigi(cscData[iCSC].alctHeader()->data(),
00440 cscData[iCSC].alctTrailer()->data()));
00441 }
00442
00443
00445 for (int ilayer = 1; ilayer <= 6; ++ilayer) {
00447
00448
00449
00450 layer = pcrate->detId( vmecrate, dmb, 0, ilayer );
00451
00452 std::vector <CSCWireDigi> wireDigis = cscData[iCSC].wireDigis(ilayer);
00453
00454 wireProduct->put(std::make_pair(wireDigis.begin(), wireDigis.end()),layer);
00455
00456 for ( icfeb = 0; icfeb < 5; ++icfeb ) {
00457 layer = pcrate->detId( vmecrate, dmb, icfeb,ilayer );
00458 if (cscData[iCSC].cfebData(icfeb)) {
00459 std::vector<CSCStripDigi> stripDigis;
00460 cscData[iCSC].cfebData(icfeb)->digis(layer.rawId(),stripDigis);
00461 stripProduct->put(std::make_pair(stripDigis.begin(),
00462 stripDigis.end()),layer);
00463 }
00464
00465 if (goodTMB){
00466 std::vector <CSCComparatorDigi> comparatorDigis =
00467 cscData[iCSC].clctData()->comparatorDigis(layer.rawId(), icfeb);
00468
00469
00470 layer = pcrate->detId( vmecrate, dmb, 0, ilayer );
00471 comparatorProduct->put(std::make_pair(comparatorDigis.begin(),
00472 comparatorDigis.end()),layer);
00473 }
00474 }
00475 }
00476 }
00477 }
00478 }
00479 else {
00480 LogTrace("CSCDCCUnpacker|CSCRawToDigi") <<
00481 "ERROR! Examiner rejected FED #" << id;
00482 if (examiner) {
00483 for (int i=0; i<examiner->nERRORS; ++i) {
00484 if (((examinerMask&examiner->errors())>>i)&0x1)
00485 LogTrace("CSCDCCUnpacker|CSCRawToDigi")<<examiner->errName(i);
00486 }
00487 if (debug) {
00488 LogTrace("CSCDCCUnpacker|CSCRawToDigi")
00489 << " Examiner errors:0x" << std::hex << examiner->errors()
00490 << " & 0x" << examinerMask
00491 << " = " << (examiner->errors()&examinerMask);
00492 if (examinerMask&examiner->errors()) {
00493 LogTrace("CSCDCCUnpacker|CSCRawToDigi")
00494 << "Examiner output: " << examiner_out.str();
00495 LogTrace("CSCDCCUnpacker|CSCRawToDigi")
00496 << "Examiner errors: " << examiner_err.str();
00497 }
00498 }
00499 }
00500
00501
00502
00503 }
00504 if (examiner!=NULL) delete examiner;
00505 }
00506 }
00507
00508 e.put(wireProduct, "MuonCSCWireDigi");
00509 e.put(stripProduct, "MuonCSCStripDigi");
00510 e.put(alctProduct, "MuonCSCALCTDigi");
00511 e.put(clctProduct, "MuonCSCCLCTDigi");
00512 e.put(comparatorProduct, "MuonCSCComparatorDigi");
00513 e.put(rpcProduct, "MuonCSCRPCDigi");
00514 e.put(corrlctProduct, "MuonCSCCorrelatedLCTDigi");
00515
00516 if (useFormatStatus) e.put(formatStatusProduct, "MuonCSCDCCFormatStatusDigi");
00517
00518 if (unpackStatusDigis)
00519 {
00520 e.put(cfebStatusProduct, "MuonCSCCFEBStatusDigi");
00521 e.put(dmbStatusProduct, "MuonCSCDMBStatusDigi");
00522 e.put(tmbStatusProduct, "MuonCSCTMBStatusDigi");
00523 e.put(dduStatusProduct, "MuonCSCDDUStatusDigi");
00524 e.put(dccStatusProduct, "MuonCSCDCCStatusDigi");
00525 e.put(alctStatusProduct, "MuonCSCALCTStatusDigi");
00526 }
00527 if (printEventNumber) LogTrace("CSCDCCUnpacker|CSCRawToDigi")
00528 <<"[CSCDCCUnpacker]: " << numOfEvents << " events processed ";
00529 }
00530
00531
00533
00534 void CSCDCCUnpacker::visual_raw(int hl,int id, int run, int event,bool fedshort,
00535 bool fDump, short unsigned int *buf) const {
00536
00537 LogTrace("badData") << std::endl << std::endl;
00538 LogTrace("badData") << "Run: "<< run << " Event: " << event;
00539 LogTrace("badData") << std::endl;
00540 if(formatedEventDump)
00541 LogTrace("badData") << "FED-" << id << " " << "(scroll down to see summary)";
00542 else
00543 LogTrace("badData") << "Problem seems in FED-" << id << " " << "(scroll down to see summary)";
00544 LogTrace("badData") <<"********************************************************************************";
00545 LogTrace("badData") <<hl<<" words of data:";
00546
00547
00548
00549 std::vector<int> dcc_id;
00550 int dcc_h1_id=0;
00551
00552 for (int i=750;i<758;i++)
00553 dcc_id.push_back(i);
00554
00555 for (int i=830;i<838;i++)
00556 dcc_id.push_back(i);
00557
00558 char dcc_common[]="DCC-";
00559
00560
00561
00562 std::vector<int> ddu_id;
00563 int ddu_h1_12_13=0;
00564 for (int i=1;i<37;i++)
00565 ddu_id.push_back(i);
00566
00567 char ddu_common[]="DDU-";
00568 char ddu_header1[]="Header 1";
00569 char ddu_header2[]="Header 2";
00570 char ddu_header3[]="Header 3";
00571 char ddu_trail1[]="Trailer 1", ddu_trail2[]="Trailer 2", ddu_trail3[]="Trailer 3";
00572
00573 char ddu_trailer1_bit[]={'8','0','0','0','f','f','f','f','8','0','0','0','8','0','0','0'};
00574 char ddu_trailer3_bit[]={'a'};
00575
00576 char ddu_tr1_err_common[]="Incomplet";
00577
00578
00579
00580 char dmb_common[]="DMB", dmb_header1[]="Header 1", dmb_header2[]="Header 2";
00581 char dmb_common_crate[]="crate:", dmb_common_slot[]="slot:";
00582 char dmb_common_l1a[]="L1A:";
00583 char dmb_header1_bit[]={'9','9','9','9'};
00584 char dmb_header2_bit[]={'a','a','a','a'};
00585 char dmb_tr1[]="Trailer 1", dmb_tr2[]="Trailer 2";
00586 char dmb_tr1_bit[]={'f','f','f','f'}, dmb_tr2_bit[]={'e','e','e','e'};
00587
00588
00589
00590
00591
00592 char alct_common[]="ALCT", alct_header1[]="Header 1", alct_header2[]="Header 2";
00593 char alct_common_bxn[]="BXN:";
00594 char alct_common_wcnt2[]="| Actual word count:";
00595 char alct_common_wcnt1[]="Expected word count:";
00596 char alct_header1_bit[]={'d','d','d','d','b','0','a'};
00597 char alct_header2_bit[]={'0','0','0','0'};
00598 char alct_tr1[]="Trailer 1";
00599
00600
00601
00602
00603 char tmb_common[]="TMB", tmb_header1[]="Header", tmb_tr1[]="Trailer";
00604 char tmb_header1_bit[]={'d','d','d','d','b','0','c'};
00605 char tmb_tr1_bit[]={'d','d','d','d','e','0','f'};
00606
00607
00608
00609
00610 char cfeb_common[]="CFEB", cfeb_tr1[]="Trailer", cfeb_b[]="B-word";
00611 char cfeb_common_sample[]="sample:";
00612
00613
00614
00615
00616
00617
00618 int word_lines=hl/4;
00619 char tempbuf[80];
00620 char tempbuf1[80];
00621 char tempbuf_short[17];
00622 char sign1[]=" --->| ";
00623
00624
00625 int word_numbering=0;
00626 int ddu_inst_i=0, ddu_inst_n=0, ddu_inst_l1a=0;
00627 int ddu_inst_bxn=0;
00628 int dmb_inst_crate=0, dmb_inst_slot=0, dmb_inst_l1a=0;
00629 int cfeb_sample=0;
00630 int alct_inst_l1a=0;
00631 int alct_inst_bxn=0;
00632 int alct_inst_wcnt1=0;
00633 int alct_inst_wcnt2=0;
00634 int alct_start=0;
00635 int alct_stop=0;
00636 int tmb_inst_l1a=0;
00637 int tmb_inst_wcnt1=0;
00638 int tmb_inst_wcnt2=0;
00639 int tmb_start=0;
00640 int tmb_stop=0;
00641 int dcc_h1_check=0;
00642
00643
00644 int ddu_h2_found=0;
00645 int w=0;
00646
00647
00648 const int sz1=5;
00649 bool dcc_check=false;
00650 bool ddu_h2_check[sz1]={false};
00651 bool ddu_h1_check=false;
00652 bool dmb_h1_check[sz1]={false};
00653 bool dmb_h2_check[sz1]={false};
00654 bool ddu_h2_h1=false;
00655 bool ddu_tr1_check[sz1]={false};
00656 bool alct_h1_check[sz1]={false};
00657 bool alct_h2_check[sz1]={false};
00658 bool alct_tr1_check[sz1]={false};
00659 bool dmb_tr1_check[sz1]={false};
00660 bool dmb_tr2_check[sz1]={false};
00661 bool tmb_h1_check[sz1]={false};
00662 bool tmb_tr1_check[sz1]={false};
00663 bool cfeb_tr1_check[sz1]={false};
00664 bool cfeb_b_check[sz1]={false};
00665 bool ddu_tr1_bad_check[sz1]={false};
00666 bool extraction=fedshort;
00667
00668
00669
00670 std::vector<int> ddu_h1_coll;
00671 std::vector<int> ddu_h1_n_coll;
00672 std::vector<int> ddu_h2_coll;
00673 std::vector<int> ddu_h3_coll;
00674 std::vector<int> ddu_t1_coll;
00675 std::vector<int> ddu_t2_coll;
00676 std::vector<int> ddu_t3_coll;
00677 std::vector<int> ddu_l1a_coll;
00678 std::vector<int> ddu_bxn_coll;
00679
00680 std::vector<int> dmb_h1_coll;
00681 std::vector<int> dmb_h2_coll;
00682 std::vector<int> dmb_t1_coll;
00683 std::vector<int> dmb_t2_coll;
00684 std::vector<int> dmb_crate_coll;
00685 std::vector<int> dmb_slot_coll;
00686 std::vector<int> dmb_l1a_coll;
00687
00688 std::vector<int> alct_h1_coll;
00689 std::vector<int> alct_h2_coll;
00690 std::vector<int> alct_t1_coll;
00691 std::vector<int> alct_l1a_coll;
00692 std::vector<int> alct_bxn_coll;
00693 std::vector<int> alct_wcnt1_coll;
00694 std::vector<int> alct_wcnt2_coll;
00695 std::vector<int> alct_wcnt2_id_coll;
00696
00697 std::vector<int> tmb_h1_coll;
00698 std::vector<int> tmb_t1_coll;
00699 std::vector<int> tmb_l1a_coll;
00700 std::vector<int> tmb_wcnt1_coll;
00701 std::vector<int> tmb_wcnt2_coll;
00702
00703 std::vector<int> cfeb_t1_coll;
00704
00705
00706
00707
00708 char dcc_header1[]="DCC Header 1";
00709 char dcc_header2[]="DCC Header 2";
00710 char dcc_trail1[]="DCC Trailer 1", dcc_trail1_bit[]={'e'};
00711 char dcc_trail2[]="DCC Trailer 2", dcc_trail2_bit[]={'a'};
00712
00713
00714 for (int i=0;i<hl;i++) {
00715
00716 ++word_numbering;
00717 for(int j=-1; j<4; j++){
00718 sprintf(tempbuf_short,"%04x%04x%04x%04x",buf[i+4*(j-1)+3],buf[i+4*(j-1)+2],buf[i+4*(j-1)+1],buf[i+4*(j-1)]);
00719
00720 ddu_h2_check[j]=((buf[i+4*(j-1)+1]==0x8000)&&
00721 (buf[i+4*(j-1)+2]==0x0001)&&(buf[i+4*(j-1)+3]==0x8000));
00722
00723 ddu_tr1_check[j]=((tempbuf_short[0]==ddu_trailer1_bit[0])&&(tempbuf_short[1]==ddu_trailer1_bit[1])&&
00724 (tempbuf_short[2]==ddu_trailer1_bit[2])&&(tempbuf_short[3]==ddu_trailer1_bit[3])&&
00725 (tempbuf_short[4]==ddu_trailer1_bit[4])&&(tempbuf_short[5]==ddu_trailer1_bit[5])&&
00726 (tempbuf_short[6]==ddu_trailer1_bit[6])&&(tempbuf_short[7]==ddu_trailer1_bit[7])&&
00727 (tempbuf_short[8]==ddu_trailer1_bit[8])&&(tempbuf_short[9]==ddu_trailer1_bit[9])&&
00728 (tempbuf_short[10]==ddu_trailer1_bit[10])&&(tempbuf_short[11]==ddu_trailer1_bit[11])&&
00729 (tempbuf_short[12]==ddu_trailer1_bit[12])&&(tempbuf_short[13]==ddu_trailer1_bit[13])&&
00730 (tempbuf_short[14]==ddu_trailer1_bit[14])&&(tempbuf_short[15]==ddu_trailer1_bit[15]));
00731
00732 dmb_h1_check[j]=((tempbuf_short[0]==dmb_header1_bit[0])&&(tempbuf_short[4]==dmb_header1_bit[1])&&
00733 (tempbuf_short[8]==dmb_header1_bit[2])&&(tempbuf_short[12]==dmb_header1_bit[3]));
00734
00735 dmb_h2_check[j]=((tempbuf_short[0]==dmb_header2_bit[0])&&(tempbuf_short[4]==dmb_header2_bit[1])&&
00736 (tempbuf_short[8]==dmb_header2_bit[2])&&(tempbuf_short[12]==dmb_header2_bit[3]));
00737 alct_h1_check[j]=((tempbuf_short[0]==alct_header1_bit[0])&&(tempbuf_short[4]==alct_header1_bit[1])&&
00738 (tempbuf_short[8]==alct_header1_bit[2])&&(tempbuf_short[12]==alct_header1_bit[3])&&
00739 (tempbuf_short[13]==alct_header1_bit[4])&&(tempbuf_short[14]==alct_header1_bit[5])&&
00740 (tempbuf_short[15]==alct_header1_bit[6]));
00741 alct_h2_check[j]=(((tempbuf_short[0]==alct_header2_bit[0])&&(tempbuf_short[1]==alct_header2_bit[1])&&
00742 (tempbuf_short[2]==alct_header2_bit[2])&&(tempbuf_short[3]==alct_header2_bit[3]))||
00743 ((tempbuf_short[4]==alct_header2_bit[0])&&(tempbuf_short[5]==alct_header2_bit[1])&&
00744 (tempbuf_short[6]==alct_header2_bit[2])&&(tempbuf_short[7]==alct_header2_bit[3]))||
00745 ((tempbuf_short[8]==alct_header2_bit[0])&&(tempbuf_short[9]==alct_header2_bit[1])&&
00746 (tempbuf_short[10]==alct_header2_bit[2])&&(tempbuf_short[11]==alct_header2_bit[3]))||
00747 ((tempbuf_short[12]==alct_header2_bit[0])&&(tempbuf_short[13]==alct_header2_bit[1])&&
00748 (tempbuf_short[14]==alct_header2_bit[2])&&(tempbuf_short[15]==alct_header2_bit[3]))
00749
00750 );
00751
00752 alct_tr1_check[j]=(((buf[i+4*(j-1)]&0xFFFF)==0xDE0D)&&((buf[i+4*(j-1)+1]&0xF800)==0xD000)&&
00753 ((buf[i+4*(j-1)+2]&0xF800)==0xD000)&&((buf[i+4*(j-1)+3]&0xF000)==0xD000));
00754
00755 dmb_tr1_check[j]=((tempbuf_short[0]==dmb_tr1_bit[0])&&(tempbuf_short[4]==dmb_tr1_bit[1])&&
00756 (tempbuf_short[8]==dmb_tr1_bit[2])&&(tempbuf_short[12]==dmb_tr1_bit[3]));
00757 dmb_tr2_check[j]=((tempbuf_short[0]==dmb_tr2_bit[0])&&(tempbuf_short[4]==dmb_tr2_bit[1])&&
00758 (tempbuf_short[8]==dmb_tr2_bit[2])&&(tempbuf_short[12]==dmb_tr2_bit[3]));
00759
00760 tmb_h1_check[j]=((tempbuf_short[0]==tmb_header1_bit[0])&&(tempbuf_short[4]==tmb_header1_bit[1])&&
00761 (tempbuf_short[8]==tmb_header1_bit[2])&&(tempbuf_short[12]==tmb_header1_bit[3])&&
00762 (tempbuf_short[13]==tmb_header1_bit[4])&&(tempbuf_short[14]==tmb_header1_bit[5])&&
00763 (tempbuf_short[15]==tmb_header1_bit[6]));
00764 tmb_tr1_check[j]=((tempbuf_short[0]==tmb_tr1_bit[0])&&(tempbuf_short[4]==tmb_tr1_bit[1])&&
00765 (tempbuf_short[8]==tmb_tr1_bit[2])&&(tempbuf_short[12]==tmb_tr1_bit[3])&&
00766 (tempbuf_short[13]==tmb_tr1_bit[4])&&(tempbuf_short[14]==tmb_tr1_bit[5])&&
00767 (tempbuf_short[15]==tmb_tr1_bit[6]));
00768
00769 cfeb_tr1_check[j]=(((buf[i+4*(j-1)+1]&0xF000)==0x7000) &&
00770 ((buf[i+4*(j-1)+2]&0xF000)==0x7000) &&
00771 (( buf[i+4*(j-1)+1]!= 0x7FFF) || (buf[i+4*(j-1)+2] != 0x7FFF)) &&
00772 ((buf[i+4*(j-1)+3] == 0x7FFF) ||
00773 ((buf[i+4*(j-1)+3]&buf[i+4*(j-1)]) == 0x0&&(buf[i+4*(j-1)+3] + buf[i+4*(j-1)] == 0x7FFF ))) );
00774 cfeb_b_check[j]=(((buf[i+4*(j-1)+3]&0xF000)==0xB000)&&((buf[i+4*(j-1)+2]&0xF000)==0xB000) &&
00775 ((buf[i+4*(j-1)+1]&0xF000)==0xB000)&&((buf[i+4*(j-1)]=3&0xF000)==0xB000) );
00776
00777 ddu_tr1_bad_check[j]=((tempbuf_short[0]!=ddu_trailer1_bit[0])&&
00778
00779
00780 (tempbuf_short[4]!=ddu_trailer1_bit[4])&&
00781
00782
00783 (tempbuf_short[8]==ddu_trailer1_bit[8])&&(tempbuf_short[9]==ddu_trailer1_bit[9])&&
00784 (tempbuf_short[10]==ddu_trailer1_bit[10])&&(tempbuf_short[11]==ddu_trailer1_bit[11])&&
00785 (tempbuf_short[12]==ddu_trailer1_bit[12])&&(tempbuf_short[13]==ddu_trailer1_bit[13])&&
00786 (tempbuf_short[14]==ddu_trailer1_bit[14])&&(tempbuf_short[15]==ddu_trailer1_bit[15]));
00787 }
00788
00789
00790
00791 ddu_h2_h1=ddu_h2_check[2];
00792
00793 sprintf(tempbuf_short,"%04x%04x%04x%04x",buf[i+3],buf[i+2],buf[i+1],buf[i]);
00794
00795
00796 ddu_h1_12_13=(buf[i]>>8);
00797 for (int kk=0; kk<36; kk++){
00798 if(((buf[i+3]&0xF000)==0x5000)&&(ddu_h1_12_13==ddu_id[kk])&&ddu_h2_h1){
00799 ddu_h1_coll.push_back(word_numbering); ddu_h1_n_coll.push_back(ddu_id[kk]);
00800 ddu_inst_l1a=((buf[i+2]&0xFFFF)+((buf[i+3]&0x00FF)<<16));
00801 ddu_l1a_coll.push_back(ddu_inst_l1a);
00802 ddu_inst_bxn=(buf[i+1]&0xFFF0)>>4;
00803 ddu_bxn_coll.push_back(ddu_inst_bxn);
00804 sprintf(tempbuf1,"%6i %04x %04x %04x %04x%s%s%i %s%s %s %i %s %i",
00805 word_numbering,buf[i+3],buf[i+2],buf[i+1],buf[i],
00806 sign1,ddu_common,ddu_id[kk],ddu_header1,sign1,dmb_common_l1a,ddu_inst_l1a,alct_common_bxn,ddu_inst_bxn);
00807 LogTrace("badData") << tempbuf1; w=0; ddu_h1_check=true; ddu_inst_l1a=0;
00808 cfeb_sample=0;
00809 }
00810 }
00811
00812
00813 dcc_h1_id=(((buf[i+1]<<12)&0xF000)>>4)+(buf[i]>>8);
00814 for(int dcci=0;dcci<16;dcci++){
00815 if((dcc_id[dcci]==dcc_h1_id)&&(((buf[i+3]&0xF000)==0x5000)&&(!ddu_h1_check))){
00816 sprintf(tempbuf1,"%6i %04x %04x %04x %04x%s%s%i %s",word_numbering,buf[i+3],buf[i+2],buf[i+1],buf[i],
00817 sign1,dcc_common,dcc_h1_id,dcc_header1); dcc_h1_check=word_numbering; w=0;
00818 dcc_check=true;
00819 LogTrace("badData") << tempbuf1;
00820 }
00821 }
00822
00823
00824 if(((word_numbering-1)==dcc_h1_check)&&((buf[i+3]&0xFF00)==0xD900)) {
00825 sprintf(tempbuf1,"%6i %04x %04x %04x %04x%s%s",word_numbering,buf[i+3],buf[i+2],buf[i+1],buf[i],
00826 sign1,dcc_header2);
00827 LogTrace("badData") << tempbuf1; w=0;
00828 }
00829 else if((word_numbering==word_lines-1)&&(tempbuf_short[0]==dcc_trail1_bit[0])){
00830 sprintf(tempbuf1,"%6i %04x %04x %04x %04x%s%s",word_numbering,buf[i+3],buf[i+2],buf[i+1],buf[i],
00831 sign1,dcc_trail1);
00832 LogTrace("badData") << tempbuf1; w=0;
00833 }
00834 else if((word_numbering==word_lines)&&(tempbuf_short[0]==dcc_trail2_bit[0])){
00835 sprintf(tempbuf1,"%6i %04x %04x %04x %04x%s%s",word_numbering,buf[i+3],buf[i+2],buf[i+1],buf[i],
00836 sign1,dcc_trail2);
00837 LogTrace("badData") << tempbuf1; w=0;
00838 }
00839
00840
00841 else if(ddu_h2_check[1]){
00842 ddu_inst_i = ddu_h1_n_coll.size();
00843 ddu_inst_n=ddu_h1_n_coll[ddu_inst_i-1];
00844 sprintf(tempbuf1,"%6i %04x %04x %04x %04x%s%s%i %s",
00845 word_numbering,buf[i+3],buf[i+2],buf[i+1],buf[i],sign1,ddu_common,
00846 ddu_inst_n, ddu_header2);
00847 ddu_h2_coll.push_back(word_numbering);
00848 LogTrace("badData") << tempbuf1; w=0;
00849 ddu_h2_found=1;
00850 }
00851
00852
00853 else if((ddu_h2_check[0]&&dmb_h1_check[2])||(ddu_h2_check[0]&&ddu_tr1_check[2])){
00854 ddu_inst_i = ddu_h1_n_coll.size(); ddu_inst_n=ddu_h1_n_coll[ddu_inst_i-1];
00855 sprintf(tempbuf1,"%6i %04x %04x %04x %04x%s%s%i %s",word_numbering,buf[i+3],buf[i+2],buf[i+1],buf[i],
00856 sign1,ddu_common,ddu_inst_n,ddu_header3);
00857 ddu_h3_coll.push_back(word_numbering);
00858 LogTrace("badData") << tempbuf1; w=0;
00859 ddu_h2_found=0;
00860 }
00861
00862
00863
00864 else if(dmb_h1_check[1]){
00865 dmb_inst_crate=0; dmb_inst_slot=0; dmb_inst_l1a=0;
00866 dmb_inst_l1a=((buf[i]&0x0FFF)+((buf[i+1]&0xFFF)<<12));
00867 dmb_l1a_coll.push_back(dmb_inst_l1a);
00868 if(dmb_h2_check[2]){
00869 dmb_inst_crate=((buf[i+4+1]>>4)&0xFF); dmb_inst_slot=(buf[i+4+1]&0xF);
00870 dmb_crate_coll.push_back(dmb_inst_crate); dmb_slot_coll.push_back(dmb_inst_slot);
00871 }
00872 sprintf(tempbuf1,"%6i %04x %04x %04x %04x%s%s %s%s%s %i %s %i %s %i",
00873 word_numbering,buf[i+3],buf[i+2],buf[i+1],buf[i],
00874 sign1,dmb_common,dmb_header1,sign1,dmb_common_crate,dmb_inst_crate,
00875 dmb_common_slot,dmb_inst_slot,dmb_common_l1a,dmb_inst_l1a);
00876 dmb_h1_coll.push_back(word_numbering);
00877 LogTrace("badData") << tempbuf1; w=0;
00878 ddu_h2_found=1;
00879 }
00880
00881 else if(dmb_h2_check[1]){
00882 dmb_inst_crate=((buf[i+1]>>4)&0xFF); dmb_inst_slot=(buf[i+1]&0xF);
00883 dmb_h2_coll.push_back(word_numbering);
00884 if(dmb_h1_check[0])
00885 dmb_inst_l1a=((buf[i-4]&0x0FFF)+((buf[i-4+1]&0xFFF)<<12));
00886 sprintf(tempbuf1,"%6i %04x %04x %04x %04x%s%s %s%s%s %i %s %i %s %i",
00887 word_numbering,buf[i+3],buf[i+2],buf[i+1],buf[i],
00888 sign1,dmb_common,dmb_header2,sign1,dmb_common_crate,dmb_inst_crate,
00889 dmb_common_slot,dmb_inst_slot,dmb_common_l1a,dmb_inst_l1a);
00890 LogTrace("badData") << tempbuf1; w=0;
00891 ddu_h2_found=1;
00892 }
00893
00894
00895 else if(ddu_tr1_check[1]){
00896 ddu_inst_i = ddu_h1_n_coll.size(); ddu_inst_n=ddu_h1_n_coll[ddu_inst_i-1];
00897 sprintf(tempbuf1,"%6i %04x %04x %04x %04x%s%s%i %s",
00898 word_numbering,buf[i+3],buf[i+2],buf[i+1],buf[i],sign1,ddu_common,ddu_inst_n,ddu_trail1);
00899 ddu_t1_coll.push_back(word_numbering);
00900 LogTrace("badData") << tempbuf1; w=0;
00901 }
00902
00903
00904 else if(alct_h1_check[1]){
00905 alct_start=word_numbering;
00906 alct_inst_l1a=(buf[i+2]&0x0FFF);
00907 alct_l1a_coll.push_back(alct_inst_l1a);
00908 sprintf(tempbuf1,"%6i %04x %04x %04x %04x%s%s %s%s %s %i",
00909 word_numbering,buf[i+3],buf[i+2],buf[i+1],buf[i],
00910 sign1,alct_common,alct_header1,sign1,dmb_common_l1a,alct_inst_l1a);
00911 alct_h1_coll.push_back(word_numbering);
00912 LogTrace("badData") << tempbuf1; w=0; alct_inst_l1a=0;
00913 }
00914
00915 else if((alct_h1_check[0])&&(alct_h2_check[2])) {
00916 alct_inst_bxn=(buf[i]&0x0FFF);
00917 alct_bxn_coll.push_back(alct_inst_bxn);
00918 sprintf(tempbuf1,"%6i %04x %04x %04x %04x%s%s %s%s%s %i",
00919 word_numbering,buf[i+3],buf[i+2],buf[i+1],buf[i],
00920 sign1,alct_common,alct_header2,sign1,alct_common_bxn,alct_inst_bxn);
00921 alct_h2_coll.push_back(word_numbering);
00922 LogTrace("badData") << tempbuf1; w=0; alct_inst_bxn=0;
00923 }
00924
00925
00926 else if(alct_tr1_check[1]){
00927 alct_stop=word_numbering;
00928 if((alct_start!=0)&&(alct_stop!=0)&&(alct_stop>alct_start)) {
00929 alct_inst_wcnt2=4*(alct_stop-alct_start+1);
00930 alct_wcnt2_coll.push_back(alct_inst_wcnt2);
00931 alct_wcnt2_id_coll.push_back(alct_start);
00932 }
00933 alct_inst_wcnt1=(buf[i+3]&0x7FF);
00934 alct_wcnt1_coll.push_back(alct_inst_wcnt1);
00935 sprintf(tempbuf1,"%6i %04x %04x %04x %04x%s%s %s%s%s %i %s %i",
00936 word_numbering,buf[i+3],buf[i+2],buf[i+1],buf[i],
00937 sign1,alct_common,alct_tr1,sign1,alct_common_wcnt1,alct_inst_wcnt1,
00938 alct_common_wcnt2,alct_inst_wcnt2);
00939 alct_t1_coll.push_back(word_numbering);
00940 LogTrace("badData") << tempbuf1; w=0; alct_inst_wcnt1=0;
00941 alct_inst_wcnt2=0;
00942 }
00943
00944
00945 else if((ddu_tr1_check[-1])&&(tempbuf_short[0]==ddu_trailer3_bit[0])){
00946
00947 ddu_inst_i = ddu_h1_n_coll.size(); ddu_inst_n=ddu_h1_n_coll[ddu_inst_i-1];
00948 sprintf(tempbuf1,"%6i %04x %04x %04x %04x%s%s%i %s",
00949 word_numbering,buf[i+3],buf[i+2],buf[i+1],buf[i],sign1,ddu_common,ddu_inst_n,ddu_trail3);
00950 ddu_t3_coll.push_back(word_numbering);
00951 LogTrace("badData") << tempbuf1; w=0;
00952 }
00953
00954 else if((ddu_tr1_check[0])&&(tempbuf_short[0]!=ddu_trailer3_bit[0])){
00955
00956 ddu_inst_i = ddu_h1_n_coll.size(); ddu_inst_n=ddu_h1_n_coll[ddu_inst_i-1];
00957 sprintf(tempbuf1,"%6i %04x %04x %04x %04x%s%s%i %s",
00958 word_numbering,buf[i+3],buf[i+2],buf[i+1],buf[i],sign1,ddu_common,ddu_inst_n,ddu_trail2);
00959 ddu_t2_coll.push_back(word_numbering);
00960 LogTrace("badData") << tempbuf1; w=0;
00961 }
00962
00963 else if(dmb_tr1_check[1]){
00964 sprintf(tempbuf1,"%6i %04x %04x %04x %04x%s%s %s",
00965 word_numbering,buf[i+3],buf[i+2],buf[i+1],buf[i],sign1,dmb_common,dmb_tr1);
00966 dmb_t1_coll.push_back(word_numbering);
00967 LogTrace("badData") << tempbuf1; w=0;
00968 cfeb_sample=0;
00969 }
00970
00971 else if(dmb_tr2_check[1]){
00972 sprintf(tempbuf1,"%6i %04x %04x %04x %04x%s%s %s",
00973 word_numbering,buf[i+3],buf[i+2],buf[i+1],buf[i],sign1,dmb_common,dmb_tr2);
00974 dmb_t2_coll.push_back(word_numbering);
00975 LogTrace("badData") << tempbuf1; w=0;
00976 }
00977
00978 else if(tmb_h1_check[1]){
00979 tmb_start=word_numbering;
00980 tmb_inst_l1a=(buf[i+2]&0x000F);
00981 tmb_l1a_coll.push_back(tmb_inst_l1a);
00982 sprintf(tempbuf1,"%6i %04x %04x %04x %04x%s%s %s%s%s %i",
00983 word_numbering,buf[i+3],buf[i+2],buf[i+1],buf[i],sign1,tmb_common,tmb_header1,
00984 sign1,dmb_common_l1a,tmb_inst_l1a);
00985 tmb_h1_coll.push_back(word_numbering);
00986 LogTrace("badData") << tempbuf1; w=0; tmb_inst_l1a=0;
00987 }
00988 else if(tmb_tr1_check[1]){
00989 tmb_stop=word_numbering;
00990 if((tmb_start!=0)&&(tmb_stop!=0)&&(tmb_stop>tmb_start)) {
00991 tmb_inst_wcnt2=4*(tmb_stop-tmb_start+1);
00992 tmb_wcnt2_coll.push_back(tmb_inst_wcnt2);
00993 }
00994 tmb_inst_wcnt1=(buf[i+3]&0x7FF);
00995 tmb_wcnt1_coll.push_back(tmb_inst_wcnt1);
00996 sprintf(tempbuf1,"%6i %04x %04x %04x %04x%s%s %s%s%s %i %s %i",
00997 word_numbering,buf[i+3],buf[i+2],buf[i+1],buf[i],
00998 sign1,tmb_common,tmb_tr1,sign1,alct_common_wcnt1,tmb_inst_wcnt1,
00999 alct_common_wcnt2,tmb_inst_wcnt2);
01000 tmb_t1_coll.push_back(word_numbering);
01001 LogTrace("badData") << tempbuf1; w=0;
01002 tmb_inst_wcnt2=0;
01003 }
01004
01005 else if(cfeb_tr1_check[1]){
01006 ++cfeb_sample;
01007 sprintf(tempbuf1,"%6i %04x %04x %04x %04x%s%s %s%s %s %i",
01008 word_numbering,buf[i+3],buf[i+2],buf[i+1],buf[i],
01009 sign1,cfeb_common,cfeb_tr1,sign1,cfeb_common_sample,cfeb_sample);
01010 cfeb_t1_coll.push_back(word_numbering); w=0;
01011 LogTrace("badData") << tempbuf1; w=0;
01012 }
01013 else if(cfeb_b_check[1]){
01014 sprintf(tempbuf1,"%6i %04x %04x %04x %04x%s%s %s",
01015 word_numbering,buf[i+3],buf[i+2],buf[i+1],buf[i],sign1,cfeb_common,cfeb_b);
01016 LogTrace("badData") << tempbuf1; w=0;
01017 }
01018
01019 else if(ddu_tr1_bad_check[1]){
01020 ddu_inst_i = ddu_h1_n_coll.size(); ddu_inst_n=ddu_h1_n_coll[ddu_inst_i-1];
01021 sprintf(tempbuf1,"%6i %04x %04x %04x %04x%s%s%i %s %s",
01022 word_numbering,buf[i+3],buf[i+2],buf[i+1],buf[i],sign1,ddu_common,ddu_inst_n,
01023 ddu_trail1,ddu_tr1_err_common);
01024 LogTrace("badData") << tempbuf1; w=0;
01025 }
01026
01027 else if(extraction&&(!ddu_h1_check)&&(!dcc_check)){
01028 if(w<3){
01029 sprintf(tempbuf,"%6i %04x %04x %04x %04x",
01030 word_numbering,buf[i+3],buf[i+2],buf[i+1],buf[i]);
01031 LogTrace("badData") << tempbuf; w++;}
01032 if(w==3){
01033 LogTrace("badData") << "..................................................."; w++;}
01034 }
01035
01036 else if((!ddu_h1_check)&&(!dcc_check)){
01037 sprintf(tempbuf,"%6i %04x %04x %04x %04x",word_numbering,buf[i+3],buf[i+2],buf[i+1],buf[i]);
01038 LogTrace("badData") << tempbuf;
01039 }
01040
01041 i+=3; ddu_h1_check=false; dcc_check=false;
01042 }
01043 char sign[30];
01044 LogTrace("badData") <<"********************************************************************************" <<
01045 std::endl;
01046 if(fedshort)
01047 LogTrace("badData") << "For complete output turn off VisualFEDShort in muonCSCDigis configuration file.";
01048 LogTrace("badData") <<"********************************************************************************" <<
01049 std::endl;
01050 LogTrace("badData") << std::endl;
01051 LogTrace("badData") <<" Summary ";
01052 LogTrace("badData") << std::endl;
01053 LogTrace("badData") << ddu_h1_coll.size() <<" "<< ddu_common << " "<<ddu_header1 << " "<< "found";
01054 for(unsigned int k=0; k<ddu_h1_coll.size();++k){
01055 sprintf(sign,"%s%6i%5s %s%i %s %i %s %i","Line: ",
01056 ddu_h1_coll[k],sign1,ddu_common,ddu_h1_n_coll[k],dmb_common_l1a,ddu_l1a_coll[k],
01057 alct_common_bxn,ddu_bxn_coll[k]);
01058 LogTrace("badData") << sign;
01059 }
01060 LogTrace("badData") << std::endl;
01061 LogTrace("badData") << "||||||||||||||||||||";
01062 LogTrace("badData") << std::endl;
01063 LogTrace("badData") << ddu_h2_coll.size() <<" "<< ddu_common << " "<<ddu_header2 << " "<< "found";
01064 for(unsigned int k=0; k<ddu_h2_coll.size();++k)
01065 LogTrace("badData") << "Line: " << ddu_h2_coll[k];
01066 LogTrace("badData") << std::endl;
01067 LogTrace("badData") << "||||||||||||||||||||";
01068 LogTrace("badData") << std::endl;
01069 LogTrace("badData") << ddu_h3_coll.size() <<" "<< ddu_common << " "<<ddu_header3 << " "<< "found";
01070 for(unsigned int k=0; k<ddu_h3_coll.size();++k)
01071 LogTrace("badData") << "Line: " << ddu_h3_coll[k];
01072 LogTrace("badData") << std::endl;
01073 LogTrace("badData") << "||||||||||||||||||||";
01074 LogTrace("badData") << std::endl;
01075 LogTrace("badData") << ddu_t1_coll.size() <<" "<< ddu_common << " "<<ddu_trail1 << " "<< "found";
01076 for(unsigned int k=0; k<ddu_t1_coll.size();++k)
01077 LogTrace("badData") << "Line: " << ddu_t1_coll[k];
01078 LogTrace("badData") << std::endl;
01079 LogTrace("badData") << "||||||||||||||||||||";
01080 LogTrace("badData") << std::endl;
01081 LogTrace("badData") << ddu_t2_coll.size() <<" "<< ddu_common << " "<<ddu_trail2 << " "<< "found";
01082 for(unsigned int k=0; k<ddu_t2_coll.size();++k)
01083 LogTrace("badData") << "Line: " << ddu_t2_coll[k];
01084 LogTrace("badData") << std::endl;
01085 LogTrace("badData") << "||||||||||||||||||||";
01086 LogTrace("badData") << std::endl;
01087 LogTrace("badData") << ddu_t3_coll.size() <<" "<< ddu_common << " "<<ddu_trail3 << " "<< "found";
01088 for(unsigned int k=0; k<ddu_t3_coll.size();++k)
01089 LogTrace("badData") << "Line: " << ddu_t3_coll[k];
01090 LogTrace("badData") << std::endl;
01091 LogTrace("badData") << "||||||||||||||||||||";
01092 LogTrace("badData") << std::endl;
01093 LogTrace("badData") << dmb_h1_coll.size() <<" "<< dmb_common << " "<<dmb_header1 << " "<< "found";
01094 for(unsigned int k=0; k<dmb_h1_coll.size();++k){
01095 sprintf(sign,"%s%6i%5s %s %s %i %s %i %s %i","Line: ",
01096 dmb_h1_coll[k],sign1,dmb_common,dmb_common_crate,dmb_crate_coll[k],dmb_common_slot,
01097 dmb_slot_coll[k],dmb_common_l1a,dmb_l1a_coll[k]);
01098 LogTrace("badData") << sign;
01099 }
01100 LogTrace("badData") << std::endl;
01101 LogTrace("badData") << "||||||||||||||||||||";
01102 LogTrace("badData") << std::endl;
01103 LogTrace("badData") << dmb_h2_coll.size() <<" "<< dmb_common << " "<<dmb_header2 << " "<< "found";
01104 for(unsigned int k=0; k<dmb_h2_coll.size();++k)
01105 LogTrace("badData") << "Line: " << dmb_h2_coll[k];
01106 LogTrace("badData") << std::endl;
01107 LogTrace("badData") << "||||||||||||||||||||";
01108 LogTrace("badData") << std::endl;
01109 LogTrace("badData") << dmb_t1_coll.size() <<" "<< dmb_common << " "<<dmb_tr1 << " "<< "found";
01110 for(unsigned int k=0; k<dmb_t1_coll.size();++k)
01111 LogTrace("badData") << "Line: " << dmb_t1_coll[k];
01112 LogTrace("badData") << std::endl;
01113 LogTrace("badData") << "||||||||||||||||||||";
01114 LogTrace("badData") << std::endl;
01115 LogTrace("badData") << dmb_t2_coll.size() <<" "<< dmb_common << " "<<dmb_tr2 << " "<< "found";
01116 for(unsigned int k=0; k<dmb_t2_coll.size();++k)
01117 LogTrace("badData") << "Line: " << dmb_t2_coll[k];
01118 LogTrace("badData") << std::endl;
01119 LogTrace("badData") << "||||||||||||||||||||";
01120 LogTrace("badData") << std::endl;
01121 LogTrace("badData") << alct_h1_coll.size() <<" "<< alct_common << " "<<alct_header1 << " "<< "found";
01122 for(unsigned int k=0; k<alct_h1_coll.size();++k){
01123 sprintf(sign,"%s%6i%5s %s %s %i","Line: ",
01124 alct_h1_coll[k],sign1,alct_common,
01125 dmb_common_l1a,alct_l1a_coll[k]);
01126 LogTrace("badData") << sign;
01127 }
01128 LogTrace("badData") << std::endl;
01129 LogTrace("badData") << "||||||||||||||||||||";
01130 LogTrace("badData") << std::endl;
01131 LogTrace("badData") << alct_h2_coll.size() <<" "<< alct_common << " "<<alct_header2 << " "<< "found";
01132 for(unsigned int k=0; k<alct_h2_coll.size();++k){
01133 sprintf(sign,"%s%6i%5s %s %s %i","Line: ",
01134 alct_h1_coll[k],sign1,alct_common,
01135 alct_common_bxn,alct_bxn_coll[k]);
01136 LogTrace("badData") << sign;
01137 }
01138 LogTrace("badData") << std::endl;
01139 LogTrace("badData") << "||||||||||||||||||||";
01140 LogTrace("badData") << std::endl;
01141 LogTrace("badData") << alct_t1_coll.size() <<" "<< alct_common << " "<<alct_tr1 << " "<< "found";
01142 for(unsigned int k=0; k<alct_t1_coll.size();++k){
01143 sprintf(sign,"%s%6i%5s %s %s %i %s %i","Line: ",
01144 alct_t1_coll[k],sign1,alct_common,
01145 alct_common_wcnt1,alct_wcnt1_coll[k],alct_common_wcnt2,alct_wcnt2_coll[k]);
01146
01147 LogTrace("badData") << sign;
01148 }
01149
01150 LogTrace("badData") << std::endl;
01151 LogTrace("badData") << "||||||||||||||||||||";
01152 LogTrace("badData") << std::endl;
01153 LogTrace("badData") << tmb_h1_coll.size() <<" "<< tmb_common << " "<<tmb_header1 << " "<< "found";
01154 for(unsigned int k=0; k<tmb_h1_coll.size();++k){
01155 sprintf(sign,"%s%6i%5s %s %s %i","Line: ",
01156 tmb_h1_coll[k],sign1,tmb_common,
01157 dmb_common_l1a,tmb_l1a_coll[k]);
01158 LogTrace("badData") << sign;
01159 }
01160 LogTrace("badData") << std::endl;
01161 LogTrace("badData") << "||||||||||||||||||||";
01162 LogTrace("badData") << std::endl;
01163 LogTrace("badData") << tmb_t1_coll.size() <<" "<< tmb_common << " "<<tmb_tr1 << " "<< "found";
01164 for(unsigned int k=0; k<tmb_t1_coll.size();++k){
01165 sprintf(sign,"%s%6i%5s %s %s %i %s %i","Line: ",
01166 tmb_t1_coll[k],sign1,tmb_common,
01167 alct_common_wcnt1,tmb_wcnt1_coll[k],alct_common_wcnt2,tmb_wcnt2_coll[k]);
01168
01169 LogTrace("badData") << sign;
01170 }
01171 LogTrace("badData") << std::endl;
01172 LogTrace("badData") << "||||||||||||||||||||";
01173 LogTrace("badData") << std::endl;
01174 LogTrace("badData") << cfeb_t1_coll.size() <<" "<< cfeb_common << " "<<cfeb_tr1 << " "<< "found";
01175 for(unsigned int k=0; k<cfeb_t1_coll.size();++k)
01176 LogTrace("badData") << "Line: " << cfeb_t1_coll[k];
01177 LogTrace("badData") <<"********************************************************************************";
01178
01179 }