CMS 3D CMS Logo

DTDDUWords.h

Go to the documentation of this file.
00001 #ifndef DTRawToDigi_DTDDUWords_h
00002 #define DTRawToDigi_DTDDUWords_h
00003 
00010 #define WORDCONTROLMASK 0xE0000000
00011 #define WORDCONTROLSHIFT 29
00012 #define WORDTYPEMASK 0x1F000000
00013 #define WORDTYPESHIFT 24
00014 
00016 #define ERRORMASK 0x8000
00017 #define ERRORSHIFT 15
00018 
00019 #define DEBUG_TYPE_MASK 0xE00000
00020 #define DEBUG_TYPE_SHIFT 21
00021 #define DEBUG_MESSAGE_MASK 0x7FFF
00022 
00023 #define TTC_EVENT_COUNTER_MASK 0xFFFFFF
00024 
00025 #define TFF_MASK 0x800000
00026 #define TFF_SHIFT 23
00027 #define TPX_MASK 0x400000
00028 #define TPX_SHIFT 22
00029 #define ECHO_MASK 0x300000
00030 #define ECHO_SHIFT 20
00031 #define ECLO_MASK 0xC0000
00032 #define ECLO_SHIFT 18
00033 #define BCO_MASK 0x30000
00034 #define BCO_SHIFT 16
00035 #define EVENT_WORD_COUNT_MASK 0xFFFF
00036 
00037 #define ERROR_TYPE_MASK 0xE00000
00038 #define ERROR_TYPE_SHIFT 21
00039 #define ERROR_ROB_ID_MASK 0x1F0000
00040 #define ERROR_ROB_ID_SHIFT 16
00041 
00042 #define ROB_ID_MASK 0x1F000000 
00043 #define EVENT_ID_MASK 0xFFF000
00044 #define EVENT_ID_SHIFT 12
00045 #define BUNCH_ID_MASK 0xFFF
00046 #define WORD_COUNT_MASK 0xFFF
00047 
00048 #define PC_MASK 0x8000000
00049 #define PC_SHIFT 27
00050 #define PAF_MASK 0x4000000
00051 #define PAF_SHIFT 26
00052 #define TDC_ID_MASK 0x3000000
00053 #define TDC_ID_SHIFT 24
00054 
00055 #define TDC_CHANNEL_MASK 0xF80000
00056 #define TDC_CHANNEL_SHIFT 19
00057 #define TDC_TIME_MASK 0x7FFFC // First two bits are excluded
00058 #define TDC_TIME_SHIFT 2
00059 
00060 #define TDC_ERROR_MASK 0x7FFF
00061 
00062 #define SCFO_MASK 0xFF
00063 
00064 #define TRIGGER_WORD_COUNT_MASK 0xFFFF
00065 
00066 #define TRIGGER_DATA_MASK 0xFFFF
00067 
00068 
00069 #define SC_LAT_SHIFT 8
00070 #define SC_LAT_MASK 0x7F
00071 
00072 #define SC_NW_MASK 0xFF
00073 
00074 #define SC_TRIGGERDLY_MASK 0x7
00075 #define SC_TRIGGERDLY_SHIFT 12
00076 #define SC_BXC_MASK 0xFFF
00077 
00078 
00079 
00080 #include <boost/cstdint.hpp>
00081 #include <iostream>
00082 
00083 
00084 
00092 class DTROSWordType {
00093 
00094 public:
00095   
00097   DTROSWordType(const uint32_t index) {
00098     word_ = index;
00099   }
00100   
00101   DTROSWordType(const DTROSWordType& obj) {
00102     *this = obj;
00103   }
00104 
00106   virtual ~DTROSWordType() {};
00107 
00109   enum wordTypes {
00110     ROSHeader = 1,
00111     ROSTrailer = 2,
00112     ROSError = 3,
00113     GroupHeader = 4,
00114     GroupTrailer = 5,
00115     TDCHeader = 6,
00116     TDCTrailer = 7,
00117     TDCMeasurement = 8,
00118     TDCError = 9,
00119     SCHeader = 10,
00120     SCTrailer = 11,
00121     SCData = 12,
00122     ROSDebug = 13,
00123     TDCDebug = 14,
00124     Control = 15
00125   };
00126 
00127 
00129   enum wordTypes type() {
00130     
00131     enum wordTypes wordType = Control;
00132     
00133     // ROS/ROB/SC Headers
00134     if ( ((word_ & WORDCONTROLMASK) >> WORDCONTROLSHIFT) == headerControlWord ) {
00135       if ( ((word_ & WORDTYPEMASK) >> WORDTYPESHIFT) == rosTypeWord ) wordType = ROSHeader;
00136       if ( ((word_ & WORDTYPEMASK) >> WORDTYPESHIFT) == scTypeWord ) wordType = SCHeader;
00137       if ( ((word_ & WORDTYPEMASK) >> WORDTYPESHIFT) < scTypeWord ) wordType = GroupHeader;
00138     }
00139 
00140     // ROS/ROB/SC Trailers
00141     if ( ((word_ & WORDCONTROLMASK) >> WORDCONTROLSHIFT) == trailerControlWord ) {
00142       if ( ((word_ & WORDTYPEMASK) >> WORDTYPESHIFT) == rosTypeWord ) wordType = ROSTrailer;
00143       if ( ((word_ & WORDTYPEMASK) >> WORDTYPESHIFT) == scTypeWord ) wordType = SCTrailer;
00144       if ( ((word_ & WORDTYPEMASK) >> WORDTYPESHIFT) < scTypeWord ) wordType = GroupTrailer;
00145     }
00146 
00147     // TDC Header
00148     if ( ((word_ & WORDCONTROLMASK) >> WORDCONTROLSHIFT) == tdcHeaderControlWord ) 
00149       wordType = TDCHeader;
00150 
00151     // TDC Trailer
00152     if ( ((word_ & WORDCONTROLMASK) >> WORDCONTROLSHIFT) == tdcTrailerControlWord ) 
00153       wordType = TDCTrailer;
00154 
00155     // TDC/SC Data
00156     if ( ((word_ & WORDCONTROLMASK) >> WORDCONTROLSHIFT) == tdcDataControlWord ) {
00157       if ( ((word_ & WORDTYPEMASK) >> WORDTYPESHIFT) == scTypeWord ) wordType = SCData;
00158       else wordType = TDCMeasurement;
00159     }
00160 
00161     // Errors
00162     if ( ((word_ & WORDCONTROLMASK) >> WORDCONTROLSHIFT) == errorControlWord ) {
00163       if ( ((word_ & WORDTYPEMASK) >> WORDTYPESHIFT) == rosTypeWord ) wordType = ROSError;
00164       if ( ((word_ & WORDTYPEMASK) >> WORDTYPESHIFT) < scTypeWord ) wordType = TDCError;
00165     }
00166 
00167     // ROS Debug
00168     if ( ((word_ & WORDCONTROLMASK) >> WORDCONTROLSHIFT) == debugControlWord ) {
00169       if ( ((word_ & WORDTYPEMASK) >> WORDTYPESHIFT) == rosTypeWord ) wordType = ROSDebug;
00170       if ( ((word_ & WORDTYPEMASK) >> WORDTYPESHIFT) < scTypeWord ) wordType = TDCDebug;
00171     }
00172 
00173 
00174     return wordType;
00175   }
00176 
00177 
00179   static const uint32_t headerControlWord = 0;
00180   static const uint32_t trailerControlWord = 1;
00181   static const uint32_t tdcHeaderControlWord = 2;
00182   static const uint32_t tdcTrailerControlWord = 3;
00183   static const uint32_t tdcDataControlWord = 4;
00184   static const uint32_t errorControlWord = 6;
00185   static const uint32_t debugControlWord = 7;
00186 
00188   static const uint32_t rosTypeWord = 31;
00189   static const uint32_t scTypeWord = 25;
00190 
00191 
00192 private:
00193 
00194    uint32_t word_;
00195   
00196 };
00197 
00198 
00199 
00208 class DTROSHeaderWord {
00209 
00210 public:
00211 
00213   DTROSHeaderWord() {}
00214 
00215   DTROSHeaderWord(const DTROSHeaderWord& obj) { *this = obj; }
00216 
00217   DTROSHeaderWord(const uint32_t index) : 
00218     word_(index) {} 
00219 
00221   virtual ~DTROSHeaderWord() {}
00222 
00223   int TTCEventCounter() const { return  word_ & TTC_EVENT_COUNTER_MASK; }
00224 
00225   static void set(uint32_t &word,
00226                   int ttc_event_counter) {
00227     
00228     word = 
00229       DTROSWordType::headerControlWord << WORDCONTROLSHIFT |
00230       DTROSWordType::rosTypeWord << WORDTYPESHIFT |
00231       ttc_event_counter;
00232   }
00233 
00234 
00235 private:
00236 
00237   uint32_t word_;
00238 
00239 };
00240 
00241 
00256 class DTROSTrailerWord {
00257 
00258 public:
00259   
00261   DTROSTrailerWord() {}
00262 
00263   DTROSTrailerWord(const DTROSTrailerWord& obj) { *this = obj; }
00264 
00265   DTROSTrailerWord(const uint32_t index) : 
00266     word_(index) {} 
00267 
00269   virtual ~DTROSTrailerWord() {}
00270 
00271   int TFF() const { return (word_ & TFF_MASK) >> TFF_SHIFT; }
00272   int TPX() const { return (word_ & TPX_MASK) >> TPX_SHIFT; }
00273   int ECHO() const { return (word_ & ECHO_MASK) >> ECHO_SHIFT; }
00274   int ECLO() const { return (word_ & ECLO_MASK) >> ECLO_SHIFT; }
00275   int BCO() const { return (word_ & BCO_MASK) >> BCO_SHIFT; }
00276   int EventWordCount() const { return word_ & EVENT_WORD_COUNT_MASK; }
00277 
00278   static void set(uint32_t &word,
00279                   int tff,
00280                   int tpx,
00281                   int echo,
00282                   int eclo,
00283                   int bco,
00284                   int event_word_count) {
00285     
00286     word = 
00287       DTROSWordType::trailerControlWord << WORDCONTROLSHIFT |
00288       DTROSWordType::rosTypeWord << WORDTYPESHIFT |
00289       tff << TFF_SHIFT |
00290       tpx << TPX_SHIFT |
00291       echo << ECHO_SHIFT |
00292       eclo << ECLO_SHIFT |
00293       bco << BCO_SHIFT |
00294       event_word_count;
00295   }
00296 
00297 
00298 private:
00299 
00300   uint32_t word_;
00301 
00302 };
00303 
00304 
00313 class DTROSErrorWord {
00314 
00315 public:
00316 
00318   DTROSErrorWord() {}
00319 
00320   DTROSErrorWord(const DTROSErrorWord& obj) { *this = obj; }
00321 
00322   DTROSErrorWord(const uint32_t index) : 
00323     word_(index) {}
00324 
00326   virtual ~DTROSErrorWord() {}
00327 
00328   int errorType() const { return (word_ & ERROR_TYPE_MASK) >> ERROR_TYPE_SHIFT;} 
00329   int robID() const { return (word_ & ERROR_ROB_ID_MASK) >> ERROR_ROB_ID_SHIFT;} 
00330 
00331   static void set(uint32_t &word,
00332                   int error_type,
00333                   int rob_id) {
00334     
00335     word = 
00336       DTROSWordType::errorControlWord << WORDCONTROLSHIFT |
00337       DTROSWordType::rosTypeWord << WORDTYPESHIFT |
00338       error_type << ERROR_TYPE_SHIFT |
00339       rob_id << ERROR_ROB_ID_SHIFT |
00340       1 << ERRORSHIFT;
00341   }
00342 
00343 private:
00344 
00345   uint32_t word_;
00346 
00347 };
00348 
00349 
00359 class DTROSDebugWord {
00360 
00361 public:
00362 
00364   DTROSDebugWord() {}
00365 
00366   DTROSDebugWord(const DTROSDebugWord& obj) { *this = obj; }
00367 
00368   DTROSDebugWord(const uint32_t index) : 
00369     word_(index) {}
00370 
00372   virtual ~DTROSDebugWord() {}
00373 
00374   int debugType() const { return (word_ & DEBUG_TYPE_MASK) >> DEBUG_TYPE_SHIFT;} 
00375   int debugMessage() const { return (word_ & DEBUG_MESSAGE_MASK) ;} 
00376 
00377   static void set(uint32_t &word,
00378                   int debug_type) {
00379     
00380     word = 
00381       DTROSWordType::debugControlWord << WORDCONTROLSHIFT |
00382       DTROSWordType::rosTypeWord << WORDTYPESHIFT |
00383       debug_type << DEBUG_TYPE_SHIFT |
00384       504 << 15; // TEMPORARY
00385   }
00386 
00387 private:
00388 
00389   uint32_t word_;
00390 
00391 };
00392 
00393 
00403 class DTROBHeaderWord {
00404 
00405 public:
00406 
00408   DTROBHeaderWord() {}
00409 
00410   DTROBHeaderWord(const DTROBHeaderWord& obj) { *this = obj; }
00411 
00412   DTROBHeaderWord(const uint32_t index) : 
00413     word_(index) {}
00414 
00416   virtual ~DTROBHeaderWord() {}
00417 
00418   int robID() const { return (word_ & ROB_ID_MASK) >> WORDTYPESHIFT;} 
00419   int eventID() const { return (word_ & EVENT_ID_MASK) >> EVENT_ID_SHIFT;} 
00420   int bunchID() const { return (word_ & BUNCH_ID_MASK);} 
00421 
00422 
00423   static void set(uint32_t &word,
00424                   int rob_id,
00425                   int event_id,
00426                   int bunch_id) {
00427     
00428     word = 
00429       DTROSWordType::headerControlWord << WORDCONTROLSHIFT |
00430       rob_id << WORDTYPESHIFT |
00431       event_id << EVENT_ID_SHIFT |
00432       bunch_id;
00433   }
00434   
00435 
00436 private:
00437 
00438   uint32_t word_;
00439 
00440 };
00441 
00442 
00452 class DTROBTrailerWord {
00453 
00454 public:
00455 
00457   DTROBTrailerWord() {}
00458 
00459   DTROBTrailerWord(const DTROBTrailerWord& obj) { *this = obj; }
00460 
00461   DTROBTrailerWord(const uint32_t index) : 
00462     word_(index) {}
00463 
00465   virtual ~DTROBTrailerWord() {}
00466 
00467   int robID() const { return (word_ & ROB_ID_MASK) >> WORDTYPESHIFT;} 
00468   int eventID() const { return (word_ & EVENT_ID_MASK) >> EVENT_ID_SHIFT;} 
00469   int wordCount() const { return (word_ & WORD_COUNT_MASK);} 
00470 
00471   static void set(uint32_t &word,
00472                   int rob_id,
00473                   int event_id,
00474                   int word_count) {
00475     
00476     word = 
00477       DTROSWordType::trailerControlWord << WORDCONTROLSHIFT |
00478       rob_id << WORDTYPESHIFT |
00479       event_id << EVENT_ID_SHIFT |
00480       word_count;
00481   }
00482   
00483 
00484 private:
00485 
00486   uint32_t word_;
00487 };
00488 
00489 
00490 
00491 
00501 class DTTDCHeaderWord {
00502 
00503 public:
00504 
00506   DTTDCHeaderWord() {}
00507 
00508   DTTDCHeaderWord(const DTTDCHeaderWord& obj) { *this = obj; }
00509 
00510   DTTDCHeaderWord(const uint32_t index) : 
00511     word_(index) {}
00512 
00514   virtual ~DTTDCHeaderWord() {}
00515 
00516   int PC() const { return (word_ & PC_MASK) >> PC_SHIFT;} 
00517   int PAF() const { return (word_ & PAF_MASK) >> PAF_SHIFT;} 
00518   int HU() const { return (word_ & PAF_MASK) >> PAF_SHIFT;} 
00519   int tdcID() const { return (word_ & TDC_ID_MASK) >> TDC_ID_SHIFT;} 
00520   int eventID() const { return (word_ & EVENT_ID_MASK) >> EVENT_ID_SHIFT;} 
00521   int bunchID() const { return (word_ & BUNCH_ID_MASK);} 
00522 
00523   static void set(uint32_t &word,
00524                   int pc,
00525                   int paf,
00526                   int hu,
00527                   int tdc_id,
00528                   int event_id,
00529                   int bunch_id) {
00530     
00531     word = 
00532       DTROSWordType::tdcHeaderControlWord << WORDCONTROLSHIFT |
00533       pc << PC_SHIFT |
00534       paf << PAF_SHIFT |
00535       hu << PAF_SHIFT |
00536       tdc_id << TDC_ID_SHIFT |
00537       event_id << EVENT_ID_SHIFT |
00538       bunch_id;
00539   }
00540 
00541 
00542 private:
00543 
00544   uint32_t word_;
00545 };
00546 
00547 
00557 class DTTDCTrailerWord {
00558 
00559 public:
00560 
00562   DTTDCTrailerWord() {}
00563 
00564   DTTDCTrailerWord(const DTTDCTrailerWord& obj) { *this = obj; }
00565 
00566   DTTDCTrailerWord(const uint32_t index) : 
00567     word_(index) {}
00568 
00570   virtual ~DTTDCTrailerWord() {}
00571 
00572   int PC() const { return (word_ & PC_MASK) >> PC_SHIFT;} 
00573   int PAF() const { return (word_ & PAF_MASK) >> PAF_SHIFT;} 
00574   int HU() const { return (word_ & PAF_MASK) >> PAF_SHIFT;} 
00575   int tdcID() const { return (word_ & TDC_ID_MASK) >> TDC_ID_SHIFT;} 
00576   int eventID() const { return (word_ & EVENT_ID_MASK) >> EVENT_ID_SHIFT;} 
00577   int wordCount() const { return (word_ & WORD_COUNT_MASK);} 
00578 
00579   static void set(uint32_t &word,
00580                   int pc,
00581                   int paf,
00582                   int hu,
00583                   int tdc_id,
00584                   int event_id,
00585                   int word_count) {
00586     
00587     word = 
00588       DTROSWordType::tdcTrailerControlWord << WORDCONTROLSHIFT |
00589       pc << PC_SHIFT |
00590       paf << PAF_SHIFT |
00591       hu << PAF_SHIFT |
00592       tdc_id << TDC_ID_SHIFT |
00593       event_id << EVENT_ID_SHIFT |
00594       word_count;
00595   }
00596 
00597 private:
00598 
00599   uint32_t word_;
00600 };
00601 
00602 
00612 class DTTDCMeasurementWord {
00613 
00614 public:
00615 
00617   DTTDCMeasurementWord() {}
00618   
00619   DTTDCMeasurementWord(const DTTDCMeasurementWord& obj) { *this = obj; }
00620 
00621   DTTDCMeasurementWord(const uint32_t index) : 
00622     word_(index) {}
00623 
00625   virtual ~DTTDCMeasurementWord() {}
00626 
00627   int PC() const { return (word_ & PC_MASK) >> PC_SHIFT;} 
00628   int PAF() const { return (word_ & PAF_MASK) >> PAF_SHIFT;} 
00629   int HU() const { return (word_ & PAF_MASK) >> PAF_SHIFT;} 
00630   int tdcID() const { return (word_ & TDC_ID_MASK) >> TDC_ID_SHIFT;} 
00631   int tdcChannel() const { return (word_ & TDC_CHANNEL_MASK) >> TDC_CHANNEL_SHIFT;} 
00632   int tdcTime() const { return (word_ & TDC_TIME_MASK) >> TDC_TIME_SHIFT;} 
00633 
00634 
00635   static void set(uint32_t &word,
00636                   int pc,
00637                   int paf,
00638                   int hu,
00639                   int tdc_id,
00640                   int tdc_channel,
00641                   int tdc_time) {
00642     
00643     word = 
00644       DTROSWordType::tdcDataControlWord << WORDCONTROLSHIFT |
00645       pc << PC_SHIFT |
00646       paf << PAF_SHIFT |
00647       hu << PAF_SHIFT |
00648       tdc_id << TDC_ID_SHIFT |
00649       tdc_channel << TDC_CHANNEL_SHIFT |
00650       tdc_time;
00651   }
00652 
00653 
00654 
00655 private:
00656 
00657   uint32_t word_;
00658 };
00659 
00660 
00670 class DTTDCErrorWord {
00671 
00672 public:
00673 
00675   DTTDCErrorWord() {}
00676   
00677   DTTDCErrorWord(const DTTDCErrorWord& obj) { *this = obj; }
00678 
00679   DTTDCErrorWord(const uint32_t index) : 
00680     word_(index) {}
00681 
00683   virtual ~DTTDCErrorWord() {}
00684 
00685   int PC() const { return (word_ & PC_MASK) >> PC_SHIFT;} 
00686   int PAF() const { return (word_ & PAF_MASK) >> PAF_SHIFT;} 
00687   int HU() const { return (word_ & PAF_MASK) >> PAF_SHIFT;} 
00688   int tdcID() const { return (word_ & TDC_ID_MASK) >> TDC_ID_SHIFT;} 
00689   int tdcError() const { return (word_ & TDC_ERROR_MASK);} 
00690 
00691   static void set(uint32_t &word,
00692                   int pc,
00693                   int paf,
00694                   int hu,
00695                   int tdc_id,
00696                   int tdc_error) {
00697     
00698     word = 
00699       DTROSWordType::errorControlWord << WORDCONTROLSHIFT |
00700       pc << PC_SHIFT |
00701       paf << PAF_SHIFT |
00702       hu << PAF_SHIFT |
00703       tdc_id << TDC_ID_SHIFT |
00704       0 << ERRORSHIFT |
00705       tdc_error;
00706   }
00707 
00708 private:
00709 
00710   uint32_t word_;
00711 };
00712 
00713 
00722 class DTLocalTriggerHeaderWord {
00723 
00724 public:
00725 
00727   DTLocalTriggerHeaderWord() {}
00728   
00729   DTLocalTriggerHeaderWord(const DTLocalTriggerHeaderWord& obj) { *this = obj; }
00730 
00731   DTLocalTriggerHeaderWord(const uint32_t index) : 
00732     word_(index) {}
00733 
00735   virtual ~DTLocalTriggerHeaderWord() {}
00736 
00737   int eventID() const { return (word_ & EVENT_ID_MASK) >> EVENT_ID_SHIFT;}
00738   int SCFO() const { return (word_ & SCFO_MASK);}
00739 
00740   
00741   static void set(uint32_t &word,
00742                   int event_id,
00743                   int scfo) {
00744     
00745     word = 
00746       DTROSWordType::headerControlWord << WORDCONTROLSHIFT |
00747       DTROSWordType::scTypeWord << WORDTYPESHIFT |
00748       event_id << EVENT_ID_SHIFT |
00749       scfo; 
00750   }
00751 
00752 private:
00753 
00754   uint32_t word_;
00755 };
00756 
00757 
00766 class DTLocalTriggerTrailerWord {
00767 
00768 public:
00769 
00771   DTLocalTriggerTrailerWord() {}
00772   
00773   DTLocalTriggerTrailerWord(const DTLocalTriggerTrailerWord& obj) { *this = obj; }
00774 
00775   DTLocalTriggerTrailerWord(const uint32_t index) : 
00776     word_(index) {}
00777 
00779   virtual ~DTLocalTriggerTrailerWord() {}
00780 
00781   int wordCount() const { return (word_ & TRIGGER_WORD_COUNT_MASK);}
00782 
00783   static void set(uint32_t &word,
00784                   int word_count) {
00785     
00786     word = 
00787       DTROSWordType::trailerControlWord << WORDCONTROLSHIFT |
00788       DTROSWordType::scTypeWord << WORDTYPESHIFT |
00789       word_count; 
00790   }
00791 
00792 
00793 private:
00794 
00795   uint32_t word_;
00796 };
00797 
00798 
00807 class DTLocalTriggerDataWord {
00808 
00809 public:
00810 
00812   DTLocalTriggerDataWord() {}
00813   
00814   DTLocalTriggerDataWord(const DTLocalTriggerDataWord& obj) { *this = obj; }
00815  
00816   DTLocalTriggerDataWord(const uint32_t index) : 
00817     word_(index) {}
00818 
00820   virtual ~DTLocalTriggerDataWord() {}
00821 
00822   int SCData() const { return (word_ & TRIGGER_DATA_MASK);}
00823 
00824   int getBits(int first) const { 
00825     return first==1 ? ((word_ & TRIGGER_DATA_MASK) >> 8) : ((word_ & TRIGGER_DATA_MASK)&0xFF);  
00826   }
00827 
00828   //int hasTrigger(int first) const { return (getBits(first) & 0x40) >> 6; }
00829   int hasTrigger(int first) const { return (trackQuality(first) != 7? 1 : 0);}
00830   int trackQuality(int first) const { return (getBits(first) & 0xE) >> 1; }
00831  
00832 
00833   static void set(uint32_t &word,
00834                   int sc_data) {
00835     
00836     word = 
00837       DTROSWordType::tdcDataControlWord << WORDCONTROLSHIFT |
00838       DTROSWordType::scTypeWord << WORDTYPESHIFT |
00839       sc_data; 
00840   }
00841 
00842 
00843 private:
00844 
00845   uint32_t word_;
00846 };
00847 
00848 
00857 class DTDDUFirstStatusWord {
00858 
00859 public:
00860 
00862   DTDDUFirstStatusWord() {}
00863 
00864   DTDDUFirstStatusWord(const DTDDUFirstStatusWord& obj) { *this = obj; }
00865 
00866   DTDDUFirstStatusWord(const unsigned char index) : 
00867     word_(index) {}
00868 
00870   virtual ~DTDDUFirstStatusWord() {}
00871 
00872   int channelEnabled() const { return (word_ & 0x1);}
00873   int timeout() const { return (word_ & 0x2) >> 1;}
00874   int eventTrailerLost() const { return (word_ & 0x4) >> 2;}
00875   int opticalFiberSignalLost() const { return (word_ & 0x8) >> 3;}
00876   int tlkPropagationError() const { return (word_ & 0x10) >> 4;}
00877   int tlkPatternError() const { return (word_ & 0x20) >> 5;}
00878   int tlkSignalLost() const { return (word_ & 0x40) >> 6;}
00879   int errorFromROS() const { return (word_ & 0x80) >> 7;}
00880 
00881 
00882 private:
00883 
00884   unsigned char word_;
00885 };
00886 
00887 
00897 class DTDDUSecondStatusWord {
00898   
00899 public:
00900   
00902   DTDDUSecondStatusWord() {}
00903 
00904   DTDDUSecondStatusWord(const DTDDUSecondStatusWord& obj) { *this = obj; }
00905 
00906   DTDDUSecondStatusWord(const uint32_t index) : 
00907     word_(index) {}
00908   
00910   virtual ~DTDDUSecondStatusWord() {}
00911   
00912   int l1AIDError() const { return (word_ & 0x1); }
00913   int bxIDError() const { return (word_ & 0x2) >> 1; }
00914   int fifoFull() const { return (word_ & 0x1C ) >> 2; }
00915   int inputFifoFull() const { return (word_ & 0xE0) >> 5; }
00916   int fifoAlmostFull() const { return (word_ & 0x700) >> 8; }
00917   int inputFifoAlmostFull() const { return (word_ & 0x3800) >> 11; }
00918   int outputFifoFull() const { return (word_ & 0x4000) >> 14; }
00919   int outputFifoAlmostFull() const { return (word_ & 0x8000) >> 15; }
00920   int rosList() const {return (word_ & 0xFFF0000) >> 16; }
00921 
00922 //   int fifoAlmostEmpty() const { return (word_ & 0x1C000) >> 14; }
00923 //   int inputFifoAlmostEmpty() const { return (word_ & 0xE0000) >> 17; }
00924 //   int outputFifoFull() const { return (word_ & 0x100000) >> 20; }
00925 //   int outputFifoAlmostFull() const { return (word_ & 0x200000) >> 21; }
00926 //   int outputFifoAlmostEmpty() const { return (word_ & 0x400000) >> 22; }
00927 
00928 private:
00929   
00930   uint32_t word_;
00931 };
00932 
00933 
00943 class DTLocalTriggerSectorCollectorHeaderWord {
00944 
00945 public:
00946 
00948   DTLocalTriggerSectorCollectorHeaderWord() {}
00949   
00950   DTLocalTriggerSectorCollectorHeaderWord(const DTLocalTriggerSectorCollectorHeaderWord& obj) { *this = obj; }
00951 
00952   DTLocalTriggerSectorCollectorHeaderWord(const uint32_t index) : 
00953     word_(index) {}
00954 
00956   virtual ~DTLocalTriggerSectorCollectorHeaderWord() {}
00957 
00958   int Latency() const { return ((word_  >> SC_LAT_SHIFT) &  SC_LAT_MASK);}
00959   int NumberOf16bitWords() const { return (word_ & SC_NW_MASK);}
00960 
00961   
00962   static void set(uint32_t &word,
00963                   int lat,
00964                   int nw) {
00965     
00966     word = 
00967       DTROSWordType::headerControlWord << WORDCONTROLSHIFT |
00968       DTROSWordType::scTypeWord << WORDTYPESHIFT |
00969       (lat & SC_LAT_MASK) << SC_LAT_SHIFT |
00970       (nw & SC_NW_MASK) ; 
00971   }
00972 
00973 private:
00974 
00975   uint32_t word_;
00976 };
00977 
00978 
00988 class DTLocalTriggerSectorCollectorSubHeaderWord {
00989 
00990 public:
00991 
00993   DTLocalTriggerSectorCollectorSubHeaderWord() {}
00994   
00995   DTLocalTriggerSectorCollectorSubHeaderWord(const DTLocalTriggerSectorCollectorSubHeaderWord& obj) { *this = obj; }
00996 
00997   DTLocalTriggerSectorCollectorSubHeaderWord(const uint32_t index) : 
00998     word_(index) {}
00999 
01001   virtual ~DTLocalTriggerSectorCollectorSubHeaderWord() {}
01002 
01003   int TriggerDelay() const { return ((word_  >>SC_TRIGGERDLY_SHIFT ) & SC_TRIGGERDLY_MASK);}
01004   int LocalBunchCounter() const { return (word_ & SC_BXC_MASK );}
01005 
01006   
01007   static void set(uint32_t &word,
01008                   int trigdly,
01009                   int bxcount) {
01010     
01011     word = 
01012       DTROSWordType::headerControlWord << WORDCONTROLSHIFT |
01013       DTROSWordType::scTypeWord << WORDTYPESHIFT |
01014       (trigdly &  SC_TRIGGERDLY_MASK) << SC_TRIGGERDLY_SHIFT |
01015       (bxcount & SC_BXC_MASK) ; 
01016   }
01017 
01018 private:
01019 
01020   uint32_t word_;
01021 };
01022 
01023 
01024 #endif

Generated on Tue Jun 9 17:34:29 2009 for CMSSW by  doxygen 1.5.4