CMS 3D CMS Logo

DTROS25Unpacker Class Reference

The unpacker for DTs' ROS25: final version of Read Out Sector board with 25 channels. More...

#include <EventFilter/DTRawToDigi/plugins/DTROS25Unpacker.h>

Inheritance diagram for DTROS25Unpacker:

DTUnpacker

List of all members.

Public Member Functions

 DTROS25Unpacker (const edm::ParameterSet &ps)
 Constructor.
const std::vector< DTROS25Data > & getROSsControlData () const
virtual void interpretRawData (const unsigned int *index, int datasize, int dduID, edm::ESHandle< DTReadOutMapping > &mapping, std::auto_ptr< DTDigiCollection > &product, std::auto_ptr< DTLocalTriggerCollection > &product2, uint16_t rosList=0)
 Unpacking method.
virtual ~DTROS25Unpacker ()
 Destructor.

Private Member Functions

int swap (int x)

Private Attributes

std::vector< DTROS25DatacontrolDataFromAllROS
DTDataMonitorInterfacedataMonitor
bool debug
int hardcodedDDUID
 to analyze older data..
bool localDAQ
 if reading data locally, words, being assembled as 32-bits, do not need to be swapped
bool performDataIntegrityMonitor
 perform DQM on ROS data
bool readDDUIDfromDDU
 since June 2007, local DAQ, provides FED number
bool readingDDU
 if data are read from ROS directly, no information on the ROS Id is present
bool writeSC
 make the local SC spy data persistent


Detailed Description

The unpacker for DTs' ROS25: final version of Read Out Sector board with 25 channels.

Date
2007/09/04 08:07:26
Revision
1.4
Author:
M. Zanetti INFN Padova FRC 060906

Definition at line 21 of file DTROS25Unpacker.h.


Constructor & Destructor Documentation

DTROS25Unpacker::DTROS25Unpacker ( const edm::ParameterSet ps  ) 

Constructor.

Definition at line 33 of file DTROS25Unpacker.cc.

References dataMonitor, debug, edm::ParameterSet::getUntrackedParameter(), hardcodedDDUID, localDAQ, performDataIntegrityMonitor, readDDUIDfromDDU, readingDDU, and writeSC.

00033                                                           {
00034   
00035 
00036   localDAQ = ps.getUntrackedParameter<bool>("localDAQ",false);
00037   readingDDU = ps.getUntrackedParameter<bool>("readingDDU",true);
00038 
00039   readDDUIDfromDDU = ps.getUntrackedParameter<bool>("readDDUIDfromDDU",true);
00040   hardcodedDDUID = ps.getUntrackedParameter<int>("dduID",770);
00041 
00042   writeSC = ps.getUntrackedParameter<bool>("writeSC",false);
00043   performDataIntegrityMonitor = ps.getUntrackedParameter<bool>("performDataIntegrityMonitor",false);
00044   debug = ps.getUntrackedParameter<bool>("debug",false);
00045 
00046   if (performDataIntegrityMonitor) dataMonitor = edm::Service<DTDataMonitorInterface>().operator->();
00047   
00048 }

DTROS25Unpacker::~DTROS25Unpacker (  )  [virtual]

Destructor.

Definition at line 51 of file DTROS25Unpacker.cc.

00051 {}


Member Function Documentation

const std::vector<DTROS25Data>& DTROS25Unpacker::getROSsControlData (  )  const [inline]

Definition at line 39 of file DTROS25Unpacker.h.

References controlDataFromAllROS.

Referenced by DTDDUUnpacker::interpretRawData().

00039                                                                    {
00040     return controlDataFromAllROS;
00041   }

void DTROS25Unpacker::interpretRawData ( const unsigned int index,
int  datasize,
int  dduID,
edm::ESHandle< DTReadOutMapping > &  mapping,
std::auto_ptr< DTDigiCollection > &  product,
std::auto_ptr< DTLocalTriggerCollection > &  product2,
uint16_t  rosList = 0 
) [virtual]

Unpacking method.

index is the pointer to the beginning of the buffer. datasize is the size of the buffer in bytes

Implements DTUnpacker.

Definition at line 54 of file DTROS25Unpacker.cc.

References DTROS25Data::addROBHeader(), DTROS25Data::addROBTrailer(), DTROS25Data::addROSDebug(), DTROS25Data::addROSError(), DTROS25Data::addROSHeader(), DTROS25Data::addROSTrailer(), DTROS25Data::addSCData(), DTROS25Data::addTDCData(), DTROS25Data::addTDCError(), DTROBHeaderWord::bunchID(), DTROS25Data::clean(), controlDataFromAllROS, GenMuonPlsPt100GeV_cfg::cout, dataMonitor, debug, DTROSDebugWord::debugMessage(), DTROSDebugWord::debugType(), detId, lat::endl(), DTROSErrorWord::errorType(), DTROBHeaderWord::eventID(), DTLocalTriggerHeaderWord::eventID(), DTROBTrailerWord::eventID(), DTROSTrailerWord::EventWordCount(), DTDataMonitorInterface::fedEntry(), DTDataMonitorInterface::fedFatal(), DTDataMonitorInterface::fedNonFatal(), DTLocalTriggerDataWord::getBits(), DTROChainCoding::getCode(), DTROSWordType::GroupHeader, DTROSWordType::GroupTrailer, hardcodedDDUID, DTLocalTriggerDataWord::hasTrigger(), int, DTWireId::layerId(), DTLocalTriggerSectorCollectorSubHeaderWord::LocalBunchCounter(), DTLocalTriggerSectorCollectorHeaderWord::NumberOf16bitWords(), performDataIntegrityMonitor, funct::pow(), DTLocalTrigger::print(), DTTDCErrorNotifier::print(), DTDataMonitorInterface::processROS25(), readDDUIDfromDDU, readingDDU, DTROSErrorWord::robID(), DTROBTrailerWord::robID(), DTROBHeaderWord::robID(), DTROSWordType::ROSDebug, DTROSWordType::ROSError, DTROSWordType::ROSHeader, DTROSWordType::ROSTrailer, DTROSWordType::SCData, DTLocalTriggerDataWord::SCData(), DTROSWordType::SCHeader, DTROSWordType::SCTrailer, DTChamberId::sector(), DTROS25Data::setROSId(), DTChamberId::station(), swap(), DTTDCMeasurementWord::tdcChannel(), DTROSWordType::TDCDebug, DTROSWordType::TDCError, DTTDCMeasurementWord::tdcID(), DTROSWordType::TDCMeasurement, DTTDCMeasurementWord::tdcTime(), DTLocalTriggerDataWord::trackQuality(), DTLocalTriggerSectorCollectorSubHeaderWord::TriggerDelay(), DTROSHeaderWord::TTCEventCounter(), DTChamberId::wheel(), DTWireId::wire(), DTROBTrailerWord::wordCount(), DTLocalTriggerTrailerWord::wordCount(), and writeSC.

Referenced by DTDDUUnpacker::interpretRawData().

00059                                                          {
00060 
00061 
00062   int dduID;
00063   if (readDDUIDfromDDU) dduID = dduIDfromDDU;
00064   else dduID = hardcodedDDUID;
00065 
00066   const int wordLength = 4;
00067   int numberOfWords = datasize / wordLength;
00068   
00069   int rosID = 0;
00070   DTROS25Data controlData(rosID);
00071   controlDataFromAllROS.clear();
00072   
00073   int wordCounter = 0;
00074   uint32_t word = index[swap(wordCounter)];
00075 
00076   map<uint32_t,int> hitOrder;
00077 
00078 
00079   /******************************************************
00080   / The the loop is performed with "do-while" statements
00081   / because the ORDER of the words in the event data
00082   / is assumed to be fixed. Eventual changes into the
00083   / structure should be considered as data corruption
00084   *******************************************************/
00085   
00086   // Loop on ROSs
00087   while (wordCounter < numberOfWords) {
00088 
00089     controlData.clean();
00090     
00091     rosID++; // to be mapped;
00092 
00093     if ( readingDDU ) {
00094       // matching the ROS number with the enabled DDU channel
00095       if ( rosID <= 12 && !((rosList & int(pow(2., (rosID-1) )) ) >> (rosID-1) ) ) continue;
00096       if (debug) cout<<"[DTROS25Unpacker]: ros list: "<<rosList <<" ROS ID "<<rosID<<endl;
00097     }
00098 
00099     // FRC prepare info for DTLocalTrigger: wheel and sector corresponding to this ROS
00100 
00101     int SCwheel=-3;
00102     int SCsector=0;
00103     int dum1, dum2, dum3, dum4;
00104 
00105     if (writeSC && ! mapping->readOutToGeometry(dduID, rosID, 1, 1, 1,
00106                                                 SCwheel, dum1, SCsector, dum2, dum3, dum4) ) {
00107       if (debug) cout <<" found SCwheel: "<<SCwheel<<" and SCsector: "<<SCsector<<endl;
00108     }
00109     else {
00110       if (writeSC && debug) cout <<" WARNING failed to find WHEEL and SECTOR for ROS "<<rosID<<" !"<<endl;
00111     }
00112 
00113 
00114     // ROS Header;
00115     if (DTROSWordType(word).type() == DTROSWordType::ROSHeader) {
00116       DTROSHeaderWord rosHeaderWord(word);
00117 
00118       if (debug) cout<<"[DTROS25Unpacker]: ROSHeader "<<rosHeaderWord.TTCEventCounter()<<endl;
00119 
00120       // container for words to be sent to DQM
00121       controlData.setROSId(rosID);
00122       controlData.addROSHeader(rosHeaderWord);
00123       
00124 
00125       // Loop on ROBs
00126       do {
00127         wordCounter++; word = index[swap(wordCounter)];
00128 
00129         // Eventual ROS Error: occurs when some errors are found in a ROB
00130         if (DTROSWordType(word).type() == DTROSWordType::ROSError) {
00131           DTROSErrorWord dtROSErrorWord(word);
00132           controlData.addROSError(dtROSErrorWord);
00133           if (debug) cout<<"[DTROS25Unpacker]: ROSError, Error type "<<dtROSErrorWord.errorType()
00134                          <<" robID "<<dtROSErrorWord.robID()<<endl;
00135         }
00136 
00137         // Eventual ROS Debugging;
00138         else if (DTROSWordType(word).type() == DTROSWordType::ROSDebug) {
00139           DTROSDebugWord rosDebugWord(word);
00140           controlData.addROSDebug(rosDebugWord);
00141           if (debug) cout<<"[DTROS25Unpacker]: ROSDebug, type "<<rosDebugWord.debugType()
00142                          <<"  message "<<rosDebugWord.debugMessage()<<endl;
00143         }
00144 
00145         // Check ROB header
00146         else if (DTROSWordType(word).type() == DTROSWordType::GroupHeader) {
00147 
00148           DTROBHeaderWord robHeaderWord(word);
00149           int eventID = robHeaderWord.eventID(); // from the TDCs
00150           int bunchID = robHeaderWord.bunchID(); // from the TDCs
00151           int robID = robHeaderWord.robID(); // to be mapped
00152 
00153           DTROBHeader robHeader(robID,robHeaderWord);  // IJ
00154           controlData.addROBHeader(robHeader);    // IJ
00155 
00156           if (debug) cout<<"[DTROS25Unpacker] ROB: ID "<<robID
00157                          <<" Event ID "<<eventID
00158                          <<" BXID "<<bunchID<<endl;
00159 
00160           // Loop on TDCs data (headers and trailers are not there)
00161           do {
00162             wordCounter++; word = index[swap(wordCounter)];
00163 
00164             // Eventual TDC Error
00165             if ( DTROSWordType(word).type() == DTROSWordType::TDCError) {
00166               DTTDCErrorWord dtTDCErrorWord(word);
00167               DTTDCError tdcError(robID,dtTDCErrorWord);
00168               controlData.addTDCError(tdcError);
00169 
00170               DTTDCErrorNotifier dtTDCError(dtTDCErrorWord);
00171               if (debug) dtTDCError.print();
00172             }
00173 
00174             // Eventual TDC Debug
00175             else if ( DTROSWordType(word).type() == DTROSWordType::TDCDebug) {
00176               if (debug) cout<<"TDC Debugging"<<endl;
00177             }
00178             
00179             // The TDC information
00180             else if (DTROSWordType(word).type() == DTROSWordType::TDCMeasurement) {
00181 
00182               DTTDCMeasurementWord tdcMeasurementWord(word);
00183               DTTDCData tdcData(robID,tdcMeasurementWord);
00184               controlData.addTDCData(tdcData);
00185 
00186               int tdcID = tdcMeasurementWord.tdcID();
00187               int tdcChannel = tdcMeasurementWord.tdcChannel();
00188 
00189               if (debug) cout<<"[DTROS25Unpacker] TDC: ID "<<tdcID
00190                              <<" Channel "<< tdcChannel
00191                              <<" Time "<<tdcMeasurementWord.tdcTime()<<endl;
00192 
00193               DTROChainCoding channelIndex(dduID, rosID, robID, tdcID, tdcChannel);
00194 
00195               hitOrder[channelIndex.getCode()]++;
00196 
00197               if (debug) {
00198                 cout<<"[DTROS25Unpacker] ROAddress: DDU "<< dduID
00199                     <<", ROS "<< rosID
00200                     <<", ROB "<< robID
00201                     <<", TDC "<< tdcID
00202                     <<", Channel "<< tdcChannel<<endl;
00203               }
00204 
00205               // FRC if not already done for this ROS, find wheel and sector for SC data
00206               if (writeSC && (SCsector < 1 || SCwheel < -2) ) {
00207 
00208                 if (debug) cout <<" second try to find SCwheel and SCsector "<<endl;
00209                 if ( ! mapping->readOutToGeometry(dduID, rosID, robID, tdcID, tdcChannel,
00210                                                   SCwheel, dum1, SCsector, dum2, dum3, dum4) ) {
00211                   if (debug) cout<<" ROS "<<rosID<<" SC wheel "<<SCwheel<<" SC sector "<<SCsector<<endl;
00212                 }
00213                 else {
00214                   if (debug) cout<<" WARNING !! ROS "<<rosID<<" failed again to map for SC!! "<<endl;
00215                 }
00216               }
00217 
00218 
00219               // Map the RO channel to the DetId and wire
00220               DTWireId detId;
00221               // if ( ! mapping->readOutToGeometry(dduID, rosID, robID, tdcID, tdcChannel, detId)) {
00222               int wheelId, stationId, sectorId, slId,layerId, cellId; 
00223               if ( ! mapping->readOutToGeometry(dduID, rosID, robID, tdcID, tdcChannel, 
00224                                                 wheelId, stationId, sectorId, slId, layerId, cellId)) {
00225 
00226                 // skip the digi if the detId is invalid 
00227                 if (sectorId==0 || stationId == 0) continue;
00228                 else detId = DTWireId(wheelId, stationId, sectorId, slId, layerId, cellId); 
00229 
00230                 if (debug) cout<<"[DTROS25Unpacker] "<<detId<<endl;
00231                 int wire = detId.wire();
00232 
00233                 // Produce the digi
00234                 DTDigi digi( wire, tdcMeasurementWord.tdcTime(), hitOrder[channelIndex.getCode()]-1);
00235 
00236                 // Commit to the event
00237                 detectorProduct->insertDigi(detId.layerId(),digi);
00238               }
00239               else {
00240                 LogWarning ("DTRawToDigi|DTROS25Unpacker") <<"Unable to map the RO channel. DDU"<<dduID
00241                                           <<"ROS"<<rosID<<"ROB"<<robID<<"TDC"<<tdcID<<"TDC channel"<<tdcChannel;
00242                 if (debug) cout<<"[DTROS25Unpacker] ***ERROR***  Missing wire: DDU"<<dduID
00243                                <<"ROS"<<rosID<<"ROB"<<robID<<"TDC"<<tdcID<<"TDC channel"<<tdcChannel<<endl;
00244               }
00245 
00246             } // TDC information
00247 
00248           } while ( DTROSWordType(word).type() != DTROSWordType::GroupTrailer &&
00249                     DTROSWordType(word).type() != DTROSWordType::ROSError); // loop on TDC's?
00250 
00251           // Check ROB Trailer (condition already verified)
00252           if (DTROSWordType(word).type() == DTROSWordType::GroupTrailer) {
00253             DTROBTrailerWord robTrailerWord(word);
00254             controlData.addROBTrailer(robTrailerWord);
00255             if (debug) cout<<"[DTROS25Unpacker]: ROBTrailer, robID  "<<robTrailerWord.robID()
00256                            <<" eventID  "<<robTrailerWord.eventID()
00257                            <<" wordCount  "<<robTrailerWord.wordCount()<<endl;
00258           }
00259         } // ROB header
00260 
00261         // Check the eventual Sector Collector Header
00262         else if (DTROSWordType(word).type() == DTROSWordType::SCHeader) {
00263           DTLocalTriggerHeaderWord scHeaderWord(word);
00264           if (debug) cout<<"[DTROS25Unpacker]: SCHeader  eventID "<<scHeaderWord.eventID()<<endl;
00265 
00266           // RT added : first word following SCHeader is a SC private header
00267           wordCounter++; word = index[swap(wordCounter)];
00268 
00269           if(DTROSWordType(word).type() == DTROSWordType::SCData){
00270             DTLocalTriggerSectorCollectorHeaderWord scPrivateHeaderWord(word);
00271 
00272             int numofscword = scPrivateHeaderWord.NumberOf16bitWords();
00273             int leftword = numofscword;
00274 
00275             if(debug) cout<<"[DTROS25Unpacker]: SCPrivateHeader (number of data + subheader = "
00276                           << scPrivateHeaderWord.NumberOf16bitWords() << ")" <<endl;
00277 
00278             // if no SC data -> no loop ;
00279             // otherwise subtract 1 word (subheader) and countdown for bx assignment
00280             if(numofscword > 0){
00281 
00282               int bx_received = (numofscword - 1) / 2;
00283               if(debug)  cout<<"[DTROS25Unpacker]: number of bx " << bx_received << endl;
00284 
00285               wordCounter++; word = index[swap(wordCounter)];
00286               if (DTROSWordType(word).type() == DTROSWordType::SCData) {
00287                 //second word following SCHeader is a SC private SUB-header
00288                 leftword--;
00289 
00290                 DTLocalTriggerSectorCollectorSubHeaderWord scPrivateSubHeaderWord(word);
00291 
00292                 if(debug) cout <<"[DTROS25Unpacker]: SC trigger delay = "
00293                                 << scPrivateSubHeaderWord.TriggerDelay() << endl
00294                                 <<"[DTROS25Unpacker]: SC bunch counter = "
00295                                 << scPrivateSubHeaderWord.LocalBunchCounter() << endl;
00296                 
00297 
00298 
00299                 // actual loop on SC time slots
00300                 int stationGroup=0;
00301                 do {
00302                   wordCounter++; word = index[swap(wordCounter)];
00303                   int SCstation=0;
00304 
00305                   if (DTROSWordType(word).type() == DTROSWordType::SCData) {
00306                     leftword--;
00307                     //RT: bx are sent from SC in reverse order starting from the one
00308                     //which stopped the spy buffer
00309                     int bx_counter = int(round( (leftword + 1)/ 2.));
00310 
00311                     if(debug){
00312                       if(bx_counter < 0 || leftword < 0)
00313                         cout<<"[DTROS25Unpacker]: SC data more than expected; negative bx counter reached! "<<endl;
00314                     }
00315                     
00316                     DTLocalTriggerDataWord scDataWord(word);
00317 
00318                     // DTSectorCollectorData scData(scDataWord, int(round(bx_counter/2.))); M.Z.
00319                     DTSectorCollectorData scData(scDataWord,bx_counter);
00320                     controlData.addSCData(scData);
00321 
00322                     if (debug) {
00323                       //cout<<"[DTROS25Unpacker]: SCData bits "<<scDataWord.SCData()<<endl;
00324                       //cout << " word in esadecimale: " << hex << word << dec << endl;
00325                       if (scDataWord.hasTrigger(0))
00326                         cout<<" at BX "<< bx_counter //round(bx_counter/2.)
00327                             <<" lower part has trigger! with track quality "
00328                             << scDataWord.trackQuality(0)<<endl;
00329                       if (scDataWord.hasTrigger(1))
00330                         cout<<" at BX "<< bx_counter //round(bx_counter/2.)
00331                             <<" upper part has trigger! with track quality "
00332                             << scDataWord.trackQuality(1)<<endl;
00333                     }
00334 
00335                     if (writeSC && SCwheel >= -2  && SCsector >=1 ) {
00336 
00337                       // FRC: start constructing persistent SC objects:
00338                       // first identify the station (data come in 2 triggers per word: MB1+MB2, MB3+MB4)
00339                       if ( scDataWord.hasTrigger(0) || (scDataWord.getBits(0) & 0x30) ) {
00340                         if ( stationGroup%2 == 0) SCstation = 1;
00341                         else                      SCstation = 3;
00342 
00343                         // construct localtrigger for first station of this "group" ...
00344                         DTLocalTrigger localtrigger(bx_counter,(scDataWord.SCData()) & 0xFF);
00345                         // ... and commit it to the event
00346                         DTChamberId chamberId (SCwheel,SCstation,SCsector);
00347                         triggerProduct->insertDigi(chamberId,localtrigger);
00348                         if (debug) { 
00349                           cout<<"FRC: just put in triggerProduct: "<<chamberId.wheel()
00350                               <<" "<<chamberId.station()<<" "<<chamberId.sector()
00351                               <<endl;;
00352                           localtrigger.print(); }
00353                       }
00354                       if ( scDataWord.hasTrigger(1) || (scDataWord.getBits(1) & 0x30) ) {
00355                         if ( stationGroup%2 == 0) SCstation = 2;
00356                         else                      SCstation = 4;
00357 
00358                         // construct localtrigger for second station of this "group" ...
00359                         DTLocalTrigger localtrigger(bx_counter,(scDataWord.SCData()) >> 8);
00360                         // ... and commit it to the event
00361                         DTChamberId chamberId (SCwheel,SCstation,SCsector);
00362                         triggerProduct->insertDigi(chamberId,localtrigger);
00363                         if(debug) { 
00364                           cout <<"FRC: just put in triggerProduct: "
00365                                <<chamberId.wheel()<<" "<<chamberId.station()
00366                                <<" "<<chamberId.sector()
00367                                <<endl;;
00368                           localtrigger.print();
00369                         }
00370                       }
00371                       
00372                       stationGroup++;
00373                     } // if writeSC
00374                   } // if SC data
00375                 } while ( DTROSWordType(word).type() != DTROSWordType::SCTrailer );
00376 
00377               } // end SC subheader
00378             } // end if SC send more than only its own header!
00379           } //  end if first data following SCheader is not SCData
00380 
00381           if (DTROSWordType(word).type() == DTROSWordType::SCTrailer) {
00382             DTLocalTriggerTrailerWord scTrailerWord(word);
00383             if (debug) cout<<"[DTROS25Unpacker]: SCTrailer, number of words "
00384                            <<scTrailerWord.wordCount()<<endl;
00385           }
00386         }
00387 
00388       } while ( DTROSWordType(word).type() != DTROSWordType::ROSTrailer ); // loop on ROBS
00389 
00390       // check ROS Trailer (condition already verified)
00391       if (DTROSWordType(word).type() == DTROSWordType::ROSTrailer){
00392         DTROSTrailerWord rosTrailerWord(word);
00393         controlData.addROSTrailer(rosTrailerWord);
00394         if (debug) cout<<"[DTROS25Unpacker]: ROSTrailer "<<rosTrailerWord.EventWordCount()<<endl;
00395       }
00396       
00397       // Perform dqm if requested:
00398       // DQM IS PERFORMED FOR EACH ROS SEPARATELY
00399       if (performDataIntegrityMonitor) {
00400         dataMonitor->processROS25(controlData, dduID, rosID);
00401         // fill the vector with ROS's control data
00402         controlDataFromAllROS.push_back(controlData);
00403       }
00404 
00405     }
00406 
00407     else if (index[swap(wordCounter)] == 0) {
00408       // in the case of odd number of words of a given ROS the header of
00409       // the next one is postponed by 4 bytes word set to 0.
00410       // rosID needs to be step back by 1 unit
00411       if (debug) cout<<"[DTROS25Unpacker]: odd number of ROS words"<<endl;
00412       rosID--;
00413     } // if ROS header
00414     
00415     else {
00416       cout<<"[DTROS25Unpacker]: ERROR! First word is not a ROS Header"<<endl;
00417     }
00418     
00419     // (needed if there are more than 1 ROS)
00420     wordCounter++; word = index[swap(wordCounter)];
00421 
00422   } // loop on ROS!
00423 
00424   // Check that we found the payload for each of the 12 ROS
00425   if (performDataIntegrityMonitor) {
00426     if(controlDataFromAllROS.size() == 12) {
00427       dataMonitor->fedEntry(dduID);
00428     } else if(controlDataFromAllROS.size() == 0) {
00429       dataMonitor->fedFatal(dduID);
00430     } else {
00431       dataMonitor->fedNonFatal(dduID);
00432     }
00433   }
00434 
00435 }

int DTROS25Unpacker::swap ( int  x  )  [private]

Definition at line 438 of file DTROS25Unpacker.cc.

References localDAQ, and HLT_VtxMuL3::result.

Referenced by interpretRawData().

00438                                {
00439 
00440   int result=n;
00441 
00442   if ( !localDAQ ) {
00443     if (n%2==0) result = (n+1);
00444     if (n%2==1) result = (n-1);
00445   }
00446   
00447   return result;
00448 }


Member Data Documentation

std::vector<DTROS25Data> DTROS25Unpacker::controlDataFromAllROS [private]

Definition at line 68 of file DTROS25Unpacker.h.

Referenced by getROSsControlData(), and interpretRawData().

DTDataMonitorInterface* DTROS25Unpacker::dataMonitor [private]

Definition at line 66 of file DTROS25Unpacker.h.

Referenced by DTROS25Unpacker(), and interpretRawData().

bool DTROS25Unpacker::debug [private]

Definition at line 64 of file DTROS25Unpacker.h.

Referenced by DTROS25Unpacker(), and interpretRawData().

int DTROS25Unpacker::hardcodedDDUID [private]

to analyze older data..

Definition at line 56 of file DTROS25Unpacker.h.

Referenced by DTROS25Unpacker(), and interpretRawData().

bool DTROS25Unpacker::localDAQ [private]

if reading data locally, words, being assembled as 32-bits, do not need to be swapped

Definition at line 48 of file DTROS25Unpacker.h.

Referenced by DTROS25Unpacker(), and swap().

bool DTROS25Unpacker::performDataIntegrityMonitor [private]

perform DQM on ROS data

Definition at line 62 of file DTROS25Unpacker.h.

Referenced by DTROS25Unpacker(), and interpretRawData().

bool DTROS25Unpacker::readDDUIDfromDDU [private]

since June 2007, local DAQ, provides FED number

Definition at line 54 of file DTROS25Unpacker.h.

Referenced by DTROS25Unpacker(), and interpretRawData().

bool DTROS25Unpacker::readingDDU [private]

if data are read from ROS directly, no information on the ROS Id is present

Definition at line 51 of file DTROS25Unpacker.h.

Referenced by DTROS25Unpacker(), and interpretRawData().

bool DTROS25Unpacker::writeSC [private]

make the local SC spy data persistent

Definition at line 59 of file DTROS25Unpacker.h.

Referenced by DTROS25Unpacker(), and interpretRawData().


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