Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:21:47

0001 #ifndef L1Trigger_TrackFindingTMTT_DegradeBend_h
0002 #define L1Trigger_TrackFindingTMTT_DegradeBend_h
0003 
0004 #include "L1Trigger/TrackFindingTMTT/interface/StubFEWindows.h"
0005 
0006 #include "L1Trigger/TrackTrigger/interface/TTStubAlgorithm_official.h"
0007 #include "DataFormats/DetId/interface/DetId.h"
0008 
0009 #include <vector>
0010 
0011 class TrackerTopology;
0012 
0013 namespace tmtt {
0014 
0015   class DegradeBend {
0016     /*
0017    *-------------------------------------------------------------------------------------------------------------------
0018    * Implements reduced bits to encode stub bend information: 3 bits for PS, 4 bits for 2S, since the Tracker
0019    * doesn't have the bandwidth to output the unreduced data from the FE electronics.
0020    *
0021    * This obtains the stub window sizes from L1Trigger/TrackTrigger/python/TTStubAlgorithmRegister_cfi.py ,
0022    * which must be loaded into the cfg file (with the same params used originally to make the stubs).
0023    * 
0024    * The TMTT L1 tracking code can optionally tighten these windows further (cfg option "KillLowPtStubs").  
0025    * This gives slightly more granular encoding with Pt > 3 GeV.
0026    * 
0027    * TMTT histograms "hisBendFEVsLayerOrRingPS" & "hisBendFEVsLayerOrRing2S" produced by the "Histos" class
0028    * are useful for debugging.   *-------------------------------------------------------------------------------------------------------------------
0029    */
0030 
0031   public:
0032     typedef TTStubAlgorithm_official<Ref_Phase2TrackerDigi_> StubAlgorithmOfficial;
0033 
0034     DegradeBend(const TrackerTopology* trackerTopo, const StubFEWindows* sw, const StubAlgorithmOfficial* stubAlgo)
0035         : theTrackerTopo_(trackerTopo), sw_(sw), stubAlgo_(stubAlgo) {}
0036 
0037     // Given the original bend, flag indicating if this is a PS or 2S module, & detector identifier,
0038     // this return the degraded stub bend, a boolean indicatng if stub bend was outside the assumed window
0039     // size programmed below, and an integer indicating how many values of the original bend
0040     // were grouped together into this single value of the degraded bend.
0041     //
0042     // (Input argument windowFEnew specifies the stub window size that should be used for this stub instead
0043     // of the window sizes specified in TTStubAlgorithmRegister_cfi.py , but it will ONLY replace the latter
0044     // sizes if it windowFEnew is smaller. If you always want to use TTStubAlgorithmRegister_cfi.py, then
0045     // std::set windowFEnew to a large number, such as 99999.).
0046     void degrade(float bend,
0047                  bool psModule,
0048                  const DetId& stDetId,
0049                  float windowFEnew,
0050                  float& degradedBend,
0051                  unsigned int& numInGroup) const;
0052 
0053   private:
0054     // Does the actual work of degrading the bend.
0055     void work(float bend,
0056               bool psModule,
0057               const DetId& stDetId,
0058               float windowFEnew,
0059               float& degradedBend,
0060               unsigned int& numInGroup,
0061               unsigned int& windowHalfStrips) const;
0062 
0063   private:
0064     const TrackerTopology* theTrackerTopo_;
0065 
0066     // Stub window sizes as encoded in L1Trigger/TrackTrigger/interface/TTStubAlgorithm_official.h
0067     const StubFEWindows* sw_;
0068 
0069     // TTStub produce algo used to make stubs.
0070     const StubAlgorithmOfficial* stubAlgo_;
0071   };
0072 
0073 }  // namespace tmtt
0074 #endif