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
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
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
00148 if ( ((word_ & WORDCONTROLMASK) >> WORDCONTROLSHIFT) == tdcHeaderControlWord )
00149 wordType = TDCHeader;
00150
00151
00152 if ( ((word_ & WORDCONTROLMASK) >> WORDCONTROLSHIFT) == tdcTrailerControlWord )
00153 wordType = TDCTrailer;
00154
00155
00156 if ( ((word_ & WORDCONTROLMASK) >> WORDCONTROLSHIFT) == tdcDataControlWord ) {
00157 if ( ((word_ & WORDTYPEMASK) >> WORDTYPESHIFT) == scTypeWord ) wordType = SCData;
00158 else wordType = TDCMeasurement;
00159 }
00160
00161
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
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;
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
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
00923
00924
00925
00926
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