CMS 3D CMS Logo

CSCDCCUnpacker Class Reference

Date
2008/06/24 15:51:49
Revision
1.17
More...

#include <EventFilter/CSCRawToDigi/interface/CSCDCCUnpacker.h>

Inheritance diagram for CSCDCCUnpacker:

edm::EDProducer edm::ProducerBase edm::ProductRegistryHelper

List of all members.

Public Member Functions

 CSCDCCUnpacker (const edm::ParameterSet &pset)
 Constructor.
void produce (edm::Event &e, const edm::EventSetup &c)
 Produce digis out of raw data.
virtual ~CSCDCCUnpacker ()
 Destructor.

Private Attributes

bool debug
unsigned int errorMask
unsigned int examinerMask
bool goodEvent
edm::InputTag inputObjectsTag
bool instatiateDQM
CSCMonitorInterfacemonitor
int numOfEvents
bool printEventNumber
bool unpackMTCCData
bool unpackStatusDigis
bool useExaminer
bool useSelectiveUnpacking


Detailed Description

Date
2008/06/24 15:51:49
Revision
1.17

Author:
Alex Tumanov

Definition at line 19 of file CSCDCCUnpacker.h.


Constructor & Destructor Documentation

CSCDCCUnpacker::CSCDCCUnpacker ( const edm::ParameterSet pset  ) 

Constructor.

Definition at line 68 of file CSCDCCUnpacker.cc.

References debug, errorMask, examinerMask, edm::ParameterSet::getParameter(), edm::ParameterSet::getUntrackedParameter(), inputObjectsTag, instatiateDQM, monitor, printEventNumber, CSCCLCTData::setDebug(), CSCTMBHeader::setDebug(), CSCEventData::setDebug(), CSCDDUEventData::setDebug(), CSCTMBData::setDebug(), CSCALCTHeader::setDebug(), CSCDCCEventData::setDebug(), CSCRPCData::setDebug(), CSCDDUEventData::setErrorMask(), unpackMTCCData, unpackStatusDigis, useExaminer, and useSelectiveUnpacking.

00068                                                            :
00069   numOfEvents(0) {
00070   printEventNumber = pset.getUntrackedParameter<bool>("PrintEventNumber", true);
00071   debug = pset.getUntrackedParameter<bool>("Debug", false);
00072   useExaminer = pset.getUntrackedParameter<bool>("UseExaminer", true);
00073   examinerMask = pset.getUntrackedParameter<unsigned int>("ExaminerMask",0x7FB7BF6);
00074   instatiateDQM = pset.getUntrackedParameter<bool>("runDQM", false);
00075   errorMask = pset.getUntrackedParameter<unsigned int>("ErrorMask",0xDFCFEFFF);
00076   unpackStatusDigis = pset.getUntrackedParameter<bool>("UnpackStatusDigis", false);
00077   inputObjectsTag = pset.getParameter<edm::InputTag>("InputObjects");
00078   unpackMTCCData = pset.getUntrackedParameter<bool>("isMTCCData", false);
00079 
00080   // Selective unpacking mode will skip only troublesome CSC blocks and not whole DCC/DDU block
00081   useSelectiveUnpacking = pset.getUntrackedParameter<bool>("UseSelectiveUnpacking", false);
00082 
00083   if(instatiateDQM)  {
00084     monitor = edm::Service<CSCMonitorInterface>().operator->();
00085   }
00086   
00087   produces<CSCWireDigiCollection>("MuonCSCWireDigi");
00088   produces<CSCStripDigiCollection>("MuonCSCStripDigi");
00089   produces<CSCComparatorDigiCollection>("MuonCSCComparatorDigi");
00090   produces<CSCALCTDigiCollection>("MuonCSCALCTDigi");
00091   produces<CSCCLCTDigiCollection>("MuonCSCCLCTDigi");
00092   produces<CSCRPCDigiCollection>("MuonCSCRPCDigi");
00093   produces<CSCCorrelatedLCTDigiCollection>("MuonCSCCorrelatedLCTDigi");
00094   
00095   if (unpackStatusDigis)  {
00096     produces<CSCCFEBStatusDigiCollection>("MuonCSCCFEBStatusDigi");
00097     produces<CSCTMBStatusDigiCollection>("MuonCSCTMBStatusDigi");
00098     produces<CSCDMBStatusDigiCollection>("MuonCSCDMBStatusDigi");
00099     produces<CSCALCTStatusDigiCollection>("MuonCSCALCTStatusDigi");
00100     produces<CSCDDUStatusDigiCollection>("MuonCSCDDUStatusDigi");
00101     produces<CSCDCCStatusDigiCollection>("MuonCSCDCCStatusDigi");
00102   }
00103   //CSCAnodeData::setDebug(debug);
00104   CSCALCTHeader::setDebug(debug);
00105   CSCCLCTData::setDebug(debug);
00106   CSCEventData::setDebug(debug);
00107   CSCTMBData::setDebug(debug);
00108   CSCDCCEventData::setDebug(debug);
00109   CSCDDUEventData::setDebug(debug);
00110   CSCTMBHeader::setDebug(debug);
00111   CSCRPCData::setDebug(debug);
00112   CSCDDUEventData::setErrorMask(errorMask);
00113   
00114 }

CSCDCCUnpacker::~CSCDCCUnpacker (  )  [virtual]

Destructor.

Definition at line 116 of file CSCDCCUnpacker.cc.

00116                                { 
00117   //fill destructor here
00118 }


Member Function Documentation

void CSCDCCUnpacker::produce ( edm::Event e,
const edm::EventSetup c 
) [virtual]

Produce digis out of raw data.

access database for mapping

Get a handle to the FED data collection

create the collections of CSC digis

uncomment this for regional unpacking if (id!=SOME_ID) continue;

Take a reference to this FED's data

if fed has data then unpack it

examine event for integrity

get a pointer to data and pass it to constructor for unpacking

get a reference to dduData

set default detid to that for E=+z, S=1, R=1, C=1, L=1

skip the DDU if its data has serious errors define a mask for serious errors

get a reference to chamber data

first process chamber-wide digis such as LCT

adjust crate numbers for MTCC data

default value for all digis not related to cfebs

layer=0 flags entire chamber

check alct data integrity

fill alct digi

ugly kludge to fix wiregroup numbering in MTCC data

adjust by 16

check tmb data integrity

fill correlatedlct and clct digis

ugly kludge to fix wiregroup numbering in MTCC data

adjust by 16

fill cscrpc digi

fill cfeb status digi

loop over status digis

fill dmb status digi

fill wire, strip and comparator digis...

set layer, dmb and vme are valid because already checked in line 240

ugly kludge to fix wire group numbers for ME3/1, ME4/1 and ME1/3 chambers in MTCC data

adjust by 16

Implements edm::EDProducer.

Definition at line 121 of file CSCDCCUnpacker.cc.

References HcalDataFrameFilter_impl::check(), CSCDCCExaminer::check(), CSCDCCExaminer::crcALCT(), CSCDCCExaminer::crcCFEB(), CSCDCCExaminer::crcTMB(), FEDRawData::data(), data, debug, CSCCrateMap::detId(), CSCDCCExaminer::errName(), errorMask, CSCDCCExaminer::errors(), examinerMask, first, edm::EventSetup::get(), edm::Event::getByLabel(), FEDNumbering::getCSCFEDIds(), goodEvent, header, i, id, inputObjectsTag, instatiateDQM, LogTrace, monitor, CSCDCCExaminer::nERRORS, NULL, numOfEvents, CSCDCCExaminer::output1(), CSCDCCExaminer::output2(), printEventNumber, CSCMonitorInterface::process(), edm::ESHandle< T >::product(), edm::Event::put(), DetId::rawId(), CSCDetId::ring(), CSCDCCExaminer::setMask(), FEDRawData::size(), CSCDetId::station(), unpackMTCCData, unpackStatusDigis, useExaminer, and useSelectiveUnpacking.

00121                                                                 {
00122 
00124   // Do we really have to do this every event???
00125   // ... Yes, because framework is more efficient than you are at caching :)
00126   // (But if you want to actually DO something specific WHEN the mapping changes, check out ESWatcher)
00127   edm::ESHandle<CSCCrateMap> hcrate;
00128   c.get<CSCCrateMapRcd>().get(hcrate); 
00129   const CSCCrateMap* pcrate = hcrate.product();
00130 
00131 
00132   if (printEventNumber) ++numOfEvents;
00133 
00135   edm::Handle<FEDRawDataCollection> rawdata;
00136   e.getByLabel(inputObjectsTag, rawdata);
00137     
00139   std::auto_ptr<CSCWireDigiCollection> wireProduct(new CSCWireDigiCollection);
00140   std::auto_ptr<CSCStripDigiCollection> stripProduct(new CSCStripDigiCollection);
00141   std::auto_ptr<CSCALCTDigiCollection> alctProduct(new CSCALCTDigiCollection);
00142   std::auto_ptr<CSCCLCTDigiCollection> clctProduct(new CSCCLCTDigiCollection);
00143   std::auto_ptr<CSCComparatorDigiCollection> comparatorProduct(new CSCComparatorDigiCollection);
00144   std::auto_ptr<CSCRPCDigiCollection> rpcProduct(new CSCRPCDigiCollection);
00145   std::auto_ptr<CSCCorrelatedLCTDigiCollection> corrlctProduct(new CSCCorrelatedLCTDigiCollection);
00146   std::auto_ptr<CSCCFEBStatusDigiCollection> cfebStatusProduct(new CSCCFEBStatusDigiCollection);
00147   std::auto_ptr<CSCDMBStatusDigiCollection> dmbStatusProduct(new CSCDMBStatusDigiCollection);
00148   std::auto_ptr<CSCTMBStatusDigiCollection> tmbStatusProduct(new CSCTMBStatusDigiCollection);
00149   std::auto_ptr<CSCDDUStatusDigiCollection> dduStatusProduct(new CSCDDUStatusDigiCollection);
00150   std::auto_ptr<CSCDCCStatusDigiCollection> dccStatusProduct(new CSCDCCStatusDigiCollection);
00151   std::auto_ptr<CSCALCTStatusDigiCollection> alctStatusProduct(new CSCALCTStatusDigiCollection);
00152 
00153   // If set selective unpacking mode 
00154   // hardcoded examiner mask below to check for DCC and DDU level errors will be used first
00155   // then examinerMask for CSC level errors will be used during unpacking of each CSC block
00156   unsigned long dccBinCheckMask = 0x06080016;
00157 
00158   for (int id=FEDNumbering::getCSCFEDIds().first;
00159        id<=FEDNumbering::getCSCFEDIds().second; ++id) { // loop over DCCs
00162     
00164     const FEDRawData& fedData = rawdata->FEDData(id);
00165     unsigned long length =  fedData.size();
00166     
00167     if (length>=32){ 
00168       CSCDCCExaminer* examiner = NULL;
00169       std::stringstream examiner_out, examiner_err;
00170       goodEvent = true;
00171       if (useExaminer) {
00172         // CSCDCCExaminer examiner;
00173         examiner = new CSCDCCExaminer();
00174         examiner->output1().redirect(examiner_out);
00175         examiner->output2().redirect(examiner_err);
00176         if( examinerMask&0x40000 ) examiner->crcCFEB(1);
00177         if( examinerMask&0x8000  ) examiner->crcTMB (1);
00178         if( examinerMask&0x0400  ) examiner->crcALCT(1);
00179         examiner->output1().show();
00180         examiner->output2().show();
00181         examiner->setMask(examinerMask);
00182         const short unsigned int *data = (short unsigned int *)fedData.data();
00183 
00184         /*short unsigned * buf = (short unsigned int *)fedData.data();
00185           std::cout <<std::endl<<length/2<<" words of data:"<<std::endl;
00186           for (int i=0;i<length/2;i++) {
00187           printf("%04x %04x %04x %04x\n",buf[i+3],buf[i+2],buf[i+1],buf[i]);
00188           i+=3;
00189           }*/
00190 
00191 
00192 
00193         if( examiner->check(data,long(fedData.size()/2)) < 0 )  {
00194           goodEvent=false;
00195         } 
00196         else {    
00197           if (useSelectiveUnpacking)  goodEvent=!(examiner->errors()&dccBinCheckMask);
00198           else goodEvent=!(examiner->errors()&examinerMask);
00199         }
00200       }
00201           
00202       
00203       if (goodEvent) {
00205 
00206         CSCDCCExaminer * ptrExaminer = examiner;
00207         if (!useSelectiveUnpacking) ptrExaminer = NULL;
00208                 
00209         CSCDCCEventData dccData((short unsigned int *) fedData.data(),ptrExaminer);
00210         
00211         if(instatiateDQM) monitor->process(examiner, &dccData);
00212         
00214         const std::vector<CSCDDUEventData> & dduData = dccData.dduData();
00215         
00217         CSCDetId layer(1, 1, 1, 1, 1);
00218         
00219         if (unpackStatusDigis) 
00220           dccStatusProduct->insertDigi(layer, CSCDCCStatusDigi(dccData.dccHeader().data(),
00221                                                                dccData.dccTrailer().data(),
00222                                                                examiner->errors()));
00223 
00224         for (unsigned int iDDU=0; iDDU<dduData.size(); ++iDDU) {  // loop over DDUs
00227           if (dduData[iDDU].trailer().errorstat()&errorMask) {
00228             LogTrace("CSCDCCUnpacker|CSCRawToDigi") << "DDU# " << iDDU << " has serious error - no digis unpacked! " <<
00229               std::hex << dduData[iDDU].trailer().errorstat();
00230             continue; // to next iteration of DDU loop
00231           }
00232                   
00233           if (unpackStatusDigis) dduStatusProduct->
00234                                    insertDigi(layer, CSCDDUStatusDigi(dduData[iDDU].header().data(),
00235                                                                       dduData[iDDU].trailer().data()));
00236           
00238           const std::vector<CSCEventData> & cscData = dduData[iDDU].cscData();
00239 
00240 
00241           for (unsigned int iCSC=0; iCSC<cscData.size(); ++iCSC) { // loop over CSCs
00242 
00244             int vmecrate = cscData[iCSC].dmbHeader()->crateID();
00245             int dmb = cscData[iCSC].dmbHeader()->dmbID();
00246 
00248             if (unpackMTCCData)
00249               switch (vmecrate) {
00250               case 0:
00251                 vmecrate=23;
00252                 break;
00253               case 1:
00254                 vmecrate=17;
00255                 break;
00256               case 2:
00257                 vmecrate=11;
00258                 break;
00259               case 3:
00260                 vmecrate=10;
00261                 break;
00262               default:
00263                 break;
00264               }
00265                       
00266             int icfeb = 0;  
00267             int ilayer = 0; 
00268 
00269             if (debug)
00270               LogTrace ("CSCDCCUnpacker|CSCRawToDigi") << "crate = " << vmecrate << "; dmb = " << dmb;
00271             
00272             if ((vmecrate>=1)&&(vmecrate<=60) && (dmb>=1)&&(dmb<=10)&&(dmb!=6)) {
00273               layer = pcrate->detId(vmecrate, dmb,icfeb,ilayer );
00274             } 
00275             else{
00276               LogTrace ("CSCDCCUnpacker|CSCRawToDigi") << " detID input out of range!!! ";
00277               LogTrace ("CSCDCCUnpacker|CSCRawToDigi")
00278                 << " skipping chamber vme= " << vmecrate << " dmb= " << dmb;
00279               continue; // to next iteration of iCSC loop
00280             }
00281 
00282 
00284             int nalct = cscData[iCSC].dmbHeader()->nalct();
00285             bool goodALCT=false;
00286             //if (nalct&&(cscData[iCSC].dataPresent>>6&0x1)==1) {
00287             if (nalct&&cscData[iCSC].alctHeader()) {  
00288               if (cscData[iCSC].alctHeader()->check()){
00289                 goodALCT=true;
00290               }
00291               else {
00292                 LogTrace ("CSCDCCUnpacker|CSCRawToDigi") <<
00293                   "not storing ALCT digis; alct is bad or not present";
00294               }
00295             } else {
00296               if (debug) LogTrace ("CSCDCCUnpacker|CSCRawToDigi") << "nALCT==0 !!!";
00297             }
00298 
00300             if (goodALCT){
00301               std::vector <CSCALCTDigi>  alctDigis =
00302                 cscData[iCSC].alctHeader()->ALCTDigis();
00303               
00305               if ( unpackMTCCData && (((layer.ring()==3)&&(layer.station()==1))||
00306                                       ((layer.ring()==1)&&(layer.station()==3))||
00307                                       ((layer.ring()==1)&&(layer.station()==4)))){
00308                 for (int unsigned i=0; i<alctDigis.size(); ++i) {
00309                   if (alctDigis[i].isValid()) {
00310                     int wiregroup = alctDigis[i].getKeyWG();
00311                     if (wiregroup < 16) LogTrace("CSCDCCUnpacker|CSCRawToDigi")
00312                       << "ALCT digi: wire group " << wiregroup
00313                       << " is out of range!" << "vme ="
00314                       << vmecrate <<"  dmb=" <<dmb <<" "<<layer;
00315                     else {
00316                       wiregroup -= 16; 
00317                       alctDigis[i].setWireGroup(wiregroup);
00318                     }
00319                   }
00320                 }
00321               }
00322               alctProduct->put(std::make_pair(alctDigis.begin(), alctDigis.end()),layer);
00323             }
00324                     
00325                   
00327             int nclct = cscData[iCSC].dmbHeader()->nclct();
00328             bool goodTMB=false;
00329             //      if (nclct&&(cscData[iCSC].dataPresent>>5&0x1)==1) {
00330             if (nclct&&cscData[iCSC].tmbData()) {
00331               if (cscData[iCSC].tmbHeader()->check()){
00332                 if (cscData[iCSC].clctData()->check()) goodTMB=true; 
00333               }
00334               else {
00335                 LogTrace ("CSCDCCUnpacker|CSCRawToDigi") <<
00336                   "one of TMB checks failed! not storing TMB digis ";
00337               }
00338             }
00339             else {
00340               if (debug) LogTrace ("CSCDCCUnpacker|CSCRawToDigi") << "nCLCT==0 !!!";
00341             }
00342                       
00344             if (goodTMB) { 
00345               std::vector <CSCCorrelatedLCTDigi>  correlatedlctDigis =
00346                 cscData[iCSC].tmbHeader()->CorrelatedLCTDigis(layer.rawId());
00347               
00349               if ( unpackMTCCData && (((layer.ring()==3)&&(layer.station()==1))||
00350                                       ((layer.ring()==1)&&(layer.station()==3))||
00351                                       ((layer.ring()==1)&&(layer.station()==4)))){
00352                 for (int unsigned i=0; i<correlatedlctDigis.size(); ++i) {
00353                   if (correlatedlctDigis[i].isValid()) {
00354                     int wiregroup = correlatedlctDigis[i].getKeyWG();
00355                     if (wiregroup < 16) LogTrace("CSCDCCUnpacker|CSCRawToDigi")
00356                       << "CorrelatedLCT digi: wire group " << wiregroup
00357                       << " is out of range!  vme ="<<vmecrate <<"  dmb=" <<dmb
00358                       <<"  "<<layer;
00359                     else {
00360                       wiregroup -= 16; 
00361                       correlatedlctDigis[i].setWireGroup(wiregroup);
00362                     }
00363                   }
00364                 }
00365               }
00366               corrlctProduct->put(std::make_pair(correlatedlctDigis.begin(),
00367                                                  correlatedlctDigis.end()),layer);
00368 
00369                       
00370               std::vector <CSCCLCTDigi>  clctDigis =
00371                 cscData[iCSC].tmbHeader()->CLCTDigis(layer.rawId());
00372               clctProduct->put(std::make_pair(clctDigis.begin(), clctDigis.end()),layer);
00373               
00375               if (cscData[iCSC].tmbData()->checkSize()) {
00376                 if (cscData[iCSC].tmbData()->hasRPC()) {
00377                   std::vector <CSCRPCDigi>  rpcDigis =
00378                     cscData[iCSC].tmbData()->rpcData()->digis();
00379                   rpcProduct->put(std::make_pair(rpcDigis.begin(), rpcDigis.end()),layer);
00380                 }
00381               } 
00382               else LogTrace("CSCDCCUnpacker|CSCRawToDigi") <<" TMBData check size failed!";
00383             }
00384                     
00385                   
00387             if (unpackStatusDigis) {
00388               for ( icfeb = 0; icfeb < 5; ++icfeb ) {
00389                 if ( cscData[iCSC].cfebData(icfeb) != NULL )
00390                   cfebStatusProduct->
00391                     insertDigi(layer, cscData[iCSC].cfebData(icfeb)->statusDigi());
00392               }
00394               dmbStatusProduct->insertDigi(layer, CSCDMBStatusDigi(cscData[iCSC].dmbHeader()->data(),
00395                                                                    cscData[iCSC].dmbTrailer()->data()));
00396               if (goodTMB)  tmbStatusProduct->
00397                               insertDigi(layer, CSCTMBStatusDigi(cscData[iCSC].tmbHeader()->data(),
00398                                                                  cscData[iCSC].tmbData()->tmbTrailer()->data()));
00399               if (goodALCT) alctStatusProduct->
00400                               insertDigi(layer, CSCALCTStatusDigi(cscData[iCSC].alctHeader()->data(),
00401                                                                   cscData[iCSC].alctTrailer()->data()));
00402             }
00403                 
00404 
00406             for (int ilayer = 1; ilayer <= 6; ++ilayer) {
00408               // (You have to be kidding. Line 240 in whose universe?)
00409 
00410               // Allocate all ME1/1 wire digis to ring 1
00411               layer = pcrate->detId( vmecrate, dmb, 0, ilayer );
00412 
00413               std::vector <CSCWireDigi> wireDigis =  cscData[iCSC].wireDigis(ilayer);
00414               
00416               if ( unpackMTCCData && (((layer.ring()==3)&&(layer.station()==1))||
00417                                       ((layer.ring()==1)&&(layer.station()==3))||
00418                                       ((layer.ring()==1)&&(layer.station()==4)))){
00419                 for (int unsigned i=0; i<wireDigis.size(); ++i) {
00420                   int wiregroup = wireDigis[i].getWireGroup();
00421                   if (wiregroup <= 16) LogTrace("CSCDCCUnpacker|CSCRawToDigi")
00422                     << "Wire digi: wire group " << wiregroup
00423                     << " is out of range!  vme ="<<vmecrate 
00424                     <<"  dmb=" <<dmb <<"  "<<layer;
00425                   else {
00426                     wiregroup -= 16; 
00427                     wireDigis[i].setWireGroup(wiregroup);
00428                   }
00429                 }
00430               }
00431               wireProduct->put(std::make_pair(wireDigis.begin(), wireDigis.end()),layer);
00432               
00433               for ( icfeb = 0; icfeb < 5; ++icfeb ) {
00434                 layer = pcrate->detId( vmecrate, dmb, icfeb,ilayer );
00435                 if (cscData[iCSC].cfebData(icfeb)) {
00436                   std::vector<CSCStripDigi> stripDigis;
00437                   cscData[iCSC].cfebData(icfeb)->digis(layer.rawId(),stripDigis);
00438                   stripProduct->put(std::make_pair(stripDigis.begin(), 
00439                                                    stripDigis.end()),layer);
00440                 }
00441                               
00442                 if (goodTMB){
00443                   std::vector <CSCComparatorDigi>  comparatorDigis =
00444                     cscData[iCSC].clctData()->comparatorDigis(layer.rawId(), icfeb);
00445                   // Set cfeb=0, so that ME1/a and ME1/b comparators go to
00446                   // ring 1.
00447                   layer = pcrate->detId( vmecrate, dmb, 0, ilayer );
00448                   comparatorProduct->put(std::make_pair(comparatorDigis.begin(), 
00449                                                         comparatorDigis.end()),layer);
00450                 }
00451               } // end of loop over cfebs
00452             } // end of loop over layers
00453           } // end of loop over chambers
00454         } // endof loop over DDUs
00455       } // end of good event
00456       else   {
00457         LogTrace("CSCDCCUnpacker|CSCRawToDigi") <<
00458           "ERROR! Examiner rejected FED #" << id;
00459         if (examiner) {
00460           for (int i=0; i<examiner->nERRORS; ++i) {
00461             if (((examinerMask&examiner->errors())>>i)&0x1)
00462               LogTrace("CSCDCCUnpacker|CSCRawToDigi")<<examiner->errName(i);
00463           }
00464           if (debug) {
00465             LogTrace("CSCDCCUnpacker|CSCRawToDigi")
00466               << " Examiner errors:0x" << std::hex << examiner->errors()
00467               << " & 0x" << examinerMask
00468               << " = " << (examiner->errors()&examinerMask);
00469             if (examinerMask&examiner->errors()) {
00470               LogTrace("CSCDCCUnpacker|CSCRawToDigi")
00471                 << "Examiner output: " << examiner_out.str();
00472               LogTrace("CSCDCCUnpacker|CSCRawToDigi")
00473                 << "Examiner errors: " << examiner_err.str();
00474             }
00475           }
00476         }
00477 
00478         dccStatusProduct->insertDigi(CSCDetId(1,1,1,1,1), CSCDCCStatusDigi(examiner->errors()));
00479         if(instatiateDQM)  monitor->process(examiner, NULL);
00480       }
00481       if (examiner!=NULL) delete examiner;
00482     } // end of if fed has data
00483   } // end of loop over DCCs
00484   // put into the event
00485   e.put(wireProduct,          "MuonCSCWireDigi");
00486   e.put(stripProduct,         "MuonCSCStripDigi");
00487   e.put(alctProduct,          "MuonCSCALCTDigi");
00488   e.put(clctProduct,          "MuonCSCCLCTDigi");
00489   e.put(comparatorProduct,    "MuonCSCComparatorDigi");
00490   e.put(rpcProduct,           "MuonCSCRPCDigi");
00491   e.put(corrlctProduct,       "MuonCSCCorrelatedLCTDigi");
00492   if (unpackStatusDigis) 
00493     {
00494       e.put(cfebStatusProduct,    "MuonCSCCFEBStatusDigi");
00495       e.put(dmbStatusProduct,     "MuonCSCDMBStatusDigi");
00496       e.put(tmbStatusProduct,     "MuonCSCTMBStatusDigi");
00497       e.put(dduStatusProduct,     "MuonCSCDDUStatusDigi");
00498       e.put(dccStatusProduct,     "MuonCSCDCCStatusDigi");
00499       e.put(alctStatusProduct,    "MuonCSCALCTStatusDigi");
00500     }
00501   if (printEventNumber) LogTrace("CSCDCCUnpacker|CSCRawToDigi") 
00502    <<"[CSCDCCUnpacker]: " << numOfEvents << " events processed ";
00503 }


Member Data Documentation

bool CSCDCCUnpacker::debug [private]

Definition at line 35 of file CSCDCCUnpacker.h.

Referenced by CSCDCCUnpacker(), and produce().

unsigned int CSCDCCUnpacker::errorMask [private]

Definition at line 38 of file CSCDCCUnpacker.h.

Referenced by CSCDCCUnpacker(), and produce().

unsigned int CSCDCCUnpacker::examinerMask [private]

Definition at line 38 of file CSCDCCUnpacker.h.

Referenced by CSCDCCUnpacker(), and produce().

bool CSCDCCUnpacker::goodEvent [private]

Definition at line 35 of file CSCDCCUnpacker.h.

Referenced by produce().

edm::InputTag CSCDCCUnpacker::inputObjectsTag [private]

Definition at line 41 of file CSCDCCUnpacker.h.

Referenced by CSCDCCUnpacker(), and produce().

bool CSCDCCUnpacker::instatiateDQM [private]

Definition at line 39 of file CSCDCCUnpacker.h.

Referenced by CSCDCCUnpacker(), and produce().

CSCMonitorInterface* CSCDCCUnpacker::monitor [private]

Definition at line 40 of file CSCDCCUnpacker.h.

Referenced by CSCDCCUnpacker(), and produce().

int CSCDCCUnpacker::numOfEvents [private]

Definition at line 37 of file CSCDCCUnpacker.h.

Referenced by produce().

bool CSCDCCUnpacker::printEventNumber [private]

Definition at line 35 of file CSCDCCUnpacker.h.

Referenced by CSCDCCUnpacker(), and produce().

bool CSCDCCUnpacker::unpackMTCCData [private]

Definition at line 35 of file CSCDCCUnpacker.h.

Referenced by CSCDCCUnpacker(), and produce().

bool CSCDCCUnpacker::unpackStatusDigis [private]

Definition at line 35 of file CSCDCCUnpacker.h.

Referenced by CSCDCCUnpacker(), and produce().

bool CSCDCCUnpacker::useExaminer [private]

Definition at line 35 of file CSCDCCUnpacker.h.

Referenced by CSCDCCUnpacker(), and produce().

bool CSCDCCUnpacker::useSelectiveUnpacking [private]

Definition at line 36 of file CSCDCCUnpacker.h.

Referenced by CSCDCCUnpacker(), and produce().


The documentation for this class was generated from the following files:
Generated on Tue Jun 9 18:17:10 2009 for CMSSW by  doxygen 1.5.4