Back to home page

Project CMSSW displayed by LXR

 
 

    


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   //For precision studies
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;  // 40cm / 0.1
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;  // The remove 1 bit from nBits to account for the sign
0028     if (digitized_value > digitized_maximum)
0029       digitized_value = digitized_maximum;
0030     if (value < 0)
0031       digitized_value = (1 << maxBits) - digitized_value;  // two's complement encoding
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))) {  // check the sign
0038       isign = -1;
0039       bits = (1 << (maxBits + 1)) - bits;
0040     }
0041     return (double(bits & digitized_maximum) + 0.5) * step * isign;
0042   }
0043 
0044 }  // namespace l1trackunpacker
0045 #endif