File indexing completed on 2024-04-06 12:21:17
0001 #ifndef L1Trigger_L1TTrackMatch_L1TrackUnpacker_HH
0002 #define L1Trigger_L1TTrackMatch_L1TrackUnpacker_HH
0003 #include <iostream>
0004 #include <fstream>
0005 #include <cmath>
0006 #include <cstdlib>
0007 #include <string>
0008 #include <cstdlib>
0009 #include "DataFormats/L1TrackTrigger/interface/TTTrack_TrackWord.h"
0010 #include "DataFormats/L1TrackTrigger/interface/TTTypes.h"
0011 #include "FWCore/MessageLogger/interface/MessageLogger.h"
0012
0013 namespace l1trackunpacker {
0014
0015 const unsigned int PT_INTPART_BITS{9};
0016 const unsigned int ETA_INTPART_BITS{3};
0017 const unsigned int kExtraGlobalPhiBit{4};
0018
0019 typedef ap_ufixed<TTTrack_TrackWord::TrackBitWidths::kRinvSize - 1, PT_INTPART_BITS, AP_TRN, AP_SAT> pt_intern;
0020 typedef ap_fixed<TTTrack_TrackWord::TrackBitWidths::kTanlSize, ETA_INTPART_BITS, AP_TRN, AP_SAT> glbeta_intern;
0021 typedef ap_int<TTTrack_TrackWord::TrackBitWidths::kPhiSize + kExtraGlobalPhiBit> glbphi_intern;
0022 typedef ap_int<TTTrack_TrackWord::TrackBitWidths::kZ0Size> z0_intern;
0023 typedef ap_uint<TTTrack_TrackWord::TrackBitWidths::kD0Size> d0_intern;
0024
0025 inline const unsigned int DoubleToBit(double value, unsigned int maxBits, double step) {
0026 unsigned int digitized_value = std::floor(std::abs(value) / step);
0027 unsigned int digitized_maximum = (1 << (maxBits - 1)) - 1;
0028 if (digitized_value > digitized_maximum)
0029 digitized_value = digitized_maximum;
0030 if (value < 0)
0031 digitized_value = (1 << maxBits) - digitized_value;
0032 return digitized_value;
0033 }
0034 inline const double BitToDouble(unsigned int bits, unsigned int maxBits, double step) {
0035 int isign = 1;
0036 unsigned int digitized_maximum = (1 << maxBits) - 1;
0037 if (bits & (1 << (maxBits - 1))) {
0038 isign = -1;
0039 bits = (1 << (maxBits + 1)) - bits;
0040 }
0041 return (double(bits & digitized_maximum) + 0.5) * step * isign;
0042 }
0043
0044 }
0045 #endif