CMS 3D CMS Logo

CSCGEMMotherboard.h
Go to the documentation of this file.
1 #ifndef L1Trigger_CSCTriggerPrimitives_CSCGEMMotherboard_h
2 #define L1Trigger_CSCTriggerPrimitives_CSCGEMMotherboard_h
3 
20 
22 public:
23  typedef std::vector<GEMInternalCluster> GEMInternalClusters;
24 
25  // standard constructor
26  CSCGEMMotherboard(unsigned endcap,
27  unsigned station,
28  unsigned sector,
29  unsigned subsector,
30  unsigned chamber,
31  const edm::ParameterSet& conf);
32 
33  ~CSCGEMMotherboard() override;
34 
35  // clear stored pads and copads
36  void clear();
37 
38  //helper function to convert GEM-CSC amended slopes into Run2 patterns
39  uint16_t Run2PatternConverter(const int slope) const;
40 
41  void run(const CSCWireDigiCollection* wiredc,
42  const CSCComparatorDigiCollection* compdc,
43  const GEMPadDigiClusterCollection* gemPads);
44 
45  /* GEM cluster processor */
46  std::shared_ptr<GEMClusterProcessor> clusterProc() const { return clusterProc_; }
47 
48  // set CSC and GEM geometries for the matching needs
49  void setGEMGeometry(const GEMGeometry* g) { gem_g = g; }
50 
51 private:
52  /*
53  Use ALCTs, CLCTs, GEMs to build LCTs. Matches in FW are attempted in the following order:
54  1) ALCT-CLCT-2GEM (coincidence pad)
55  2) ALCT-CLCT-GEM
56  3) ALCT-CLCT (requires CLCT with at least 4 layers)
57  4) CLCT-2GEM (requires CLCT with at least 4 layers)
58  5) ALCT-2GEM (requires ALCT with at least 4 layers)
59  => If there are second ALCTs/CLCTs which could not be matched to GEM:
60  6) Copy over valid to invalid
61  7) ALCT-CLCT with unused combination
62  */
63  void matchALCTCLCTGEM();
64 
65  // correlate ALCT, CLCT with matched pads or copads
66  void correlateLCTsGEM(const CSCALCTDigi& ALCT,
67  const CSCCLCTDigi& CLCT,
69  CSCCorrelatedLCTDigi& lct) const;
70 
71  // correlate ALCT and CLCT, no GEM
72  void correlateLCTsGEM(const CSCALCTDigi& ALCT, const CSCCLCTDigi& CLCT, CSCCorrelatedLCTDigi& lct) const;
73 
74  // correlate CLCT with matched pads or copads
76 
77  // correlate ALCT with matched pads or copads
79 
80  // Construct LCT from CSC and GEM information. ALCT+CLCT+GEM
81  void constructLCTsGEM(const CSCALCTDigi& alct,
82  const CSCCLCTDigi& clct,
83  const GEMInternalCluster& gem,
84  CSCCorrelatedLCTDigi& lct) const;
85 
86  // Construct LCT from CSC and no GEM information. ALCT+CLCT
87  void constructLCTsGEM(const CSCALCTDigi& alct, const CSCCLCTDigi& clct, CSCCorrelatedLCTDigi& lct) const;
88 
89  // Construct LCT from CSC and GEM information. CLCT+2GEM
90  void constructLCTsGEM(const CSCCLCTDigi& clct, const GEMInternalCluster& gem, CSCCorrelatedLCTDigi& lct) const;
91 
92  // Construct LCT from CSC and GEM information. ALCT+2GEM
93  void constructLCTsGEM(const CSCALCTDigi& alct, const GEMInternalCluster& gem, CSCCorrelatedLCTDigi& lct) const;
94 
95  // LCTs are sorted by quality. If there are two with the same quality,
96  // then the sorting is done by the slope
97  void sortLCTs(std::vector<CSCCorrelatedLCTDigi>& lcts) const;
98 
100  unsigned gemId;
102 
103  // map of BX to vectors of GEM clusters. Makes it easier to match objects
104  std::map<int, GEMInternalClusters> clusters_;
105 
106  /* CSCGEM matcher */
107  std::unique_ptr<CSCGEMMatcher> cscGEMMatcher_;
108 
109  /* GEM cluster processor */
110  std::shared_ptr<GEMClusterProcessor> clusterProc_;
111 
112  // Drop low quality stubs in ME1/b or ME2/1
115  // Drop low quality stubs in ME1/a
117 
118  // build LCT from ALCT/CLCT and GEM in ME1/b or ME2/1
121 
122  // bunch crossing window cuts
125 
126  // assign GEM-CSC bending angle
128 
129  // The GE2/1 geometry should have 16 eta partitions
130  // The 8-eta partition case (older prototype versions) is not supported
132 };
133 
134 #endif
uint16_t Run2PatternConverter(const int slope) const
std::unique_ptr< CSCGEMMatcher > cscGEMMatcher_
unsigned alct_gem_bx_window_size_
static const double slope[3]
void setGEMGeometry(const GEMGeometry *g)
void correlateLCTsGEM(const CSCALCTDigi &ALCT, const CSCCLCTDigi &CLCT, const GEMInternalClusters &clusters, CSCCorrelatedLCTDigi &lct) const
The Signals That Services Can Subscribe To This is based on ActivityRegistry and is current per Services can connect to the signals distributed by the ActivityRegistry in order to monitor the activity of the application Each possible callback has some defined which we here list in angle e g
Definition: Activities.doc:4
void constructLCTsGEM(const CSCALCTDigi &alct, const CSCCLCTDigi &clct, const GEMInternalCluster &gem, CSCCorrelatedLCTDigi &lct) const
std::vector< GEMInternalCluster > GEMInternalClusters
void sortLCTs(std::vector< CSCCorrelatedLCTDigi > &lcts) const
std::shared_ptr< GEMClusterProcessor > clusterProc_
void run(const CSCWireDigiCollection *wiredc, const CSCComparatorDigiCollection *compdc, const GEMPadDigiClusterCollection *gemPads)
std::map< int, GEMInternalClusters > clusters_
CSCGEMMotherboard(unsigned endcap, unsigned station, unsigned sector, unsigned subsector, unsigned chamber, const edm::ParameterSet &conf)
unsigned clct_gem_bx_window_size_
~CSCGEMMotherboard() override
const GEMGeometry * gem_g
std::shared_ptr< GEMClusterProcessor > clusterProc() const