Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:04:46

0001 #ifndef MuonDetId_CSCTriggerNumbering_h
0002 #define MuonDetId_CSCTriggerNumbering_h
0003 
0004 /** \class CSCTriggerNumbering
0005  * 
0006  * Converts standard trigger labels to geometry labels.
0007  * "Standard" implies that the numbering is EXACTLY that of 
0008  * CMS NOTE: CMS IN 2000/004 v. 2.1 (Oct, 2005).
0009  * 
0010  * \warning EVERY INDEX COUNTS FROM ONE
0011  */
0012 
0013 class CSCDetId;
0014 
0015 class CSCTriggerNumbering {
0016 public:
0017   CSCTriggerNumbering();
0018   ~CSCTriggerNumbering();
0019 
0020   /**
0021    * The following functions transform standard chamber labels into
0022    * their corresponding trigger labels.
0023    */
0024 
0025   /**
0026     * Return trigger-level sector id for an Endcap Muon chamber.
0027     *
0028     * This method encapsulates the information about which chambers
0029     * are in which sectors, and may need updating according to
0030     * hardware changes, or software chamber indexing.
0031     *
0032     * Station 1 has 3 rings of 10-degree chambers. <br>
0033     * Stations 2, 3, 4 have an inner ring of 20-degree chambers
0034     * and an outer ring of 10-degree chambers. <br>
0035     *
0036     * Sectors are 60 degree slices of a station, covering both rings. <br>
0037     * For Station 1, there are subsectors of 30 degrees: 9 10-degree
0038     * chambers (3 each from ME1/1, ME1/2, ME1/3.) <br>
0039     * 
0040     * The first sector starts at phi = 15 degrees so it matches Barrel Muon sectors.
0041     * We count from one not zero.
0042     *
0043     */
0044   static int triggerSectorFromLabels(int station, int ring, int chamber);
0045   static int triggerSectorFromLabels(CSCDetId id);
0046 
0047   /**
0048    * Return trigger-level sub sector id within a sector in station one.
0049    * 
0050    * Each station one sector has two 30 degree subsectors.
0051    * Again, we count from one, not zero. Zero is an allowed return value though.
0052    *  
0053    * A return value of zero means this station does not have subsectors.
0054    *
0055    */
0056   static int triggerSubSectorFromLabels(int station, int chamber);
0057   static int triggerSubSectorFromLabels(CSCDetId id);
0058 
0059   /**
0060     * Return trigger-level CSC id  within a sector for an Endcap Muon chamber.
0061     *
0062     * This id is an index within a sector such that the 3 inner ring chambers 
0063     * (20 degrees each) are 1, 2, 3 (increasing counterclockwise) and the 6 outer ring 
0064     * chambers (10 degrees each) are 4, 5, 6, 7, 8, 9 (again increasing counter-clockwise.) 
0065     *
0066     * This method knows which chambers are part of which sector and returns
0067     * the chamber label/index/identifier accordingly.
0068     * Beware that this information is liable to change according to hardware
0069     * and software changes.
0070     *
0071     */
0072   static int triggerCscIdFromLabels(int station, int ring, int chamber);
0073   static int triggerCscIdFromLabels(CSCDetId id);
0074 
0075   /**
0076    * The following functions transform trigger labels into their
0077    * corresponding standard chamber labels.
0078    */
0079 
0080   /**
0081    * \function ringFromTriggerLabels
0082    *
0083    * This function calculates the ring at which a given chamber resides.
0084    * Station 1: ring = [1,3]
0085    * Station 2-4: ring = [1,2]
0086    */
0087   static int ringFromTriggerLabels(int station, int triggerCSCID);
0088 
0089   /**
0090    * \function chamberFromTriggerLabels
0091    *
0092    * This function calculates the chamber number for a given set of
0093    * trigger labels.   
0094    */
0095   static int chamberFromTriggerLabels(int TriggerSector, int TriggerSubSector, int station, int TriggerCSCID);
0096 
0097   /**
0098    * \function sectorFromTriggerLabels
0099    *
0100    * Translates trigger sector and trigger subsector into the "real" sector number
0101    * For station 1 sector = [1,12]
0102    * For stations 2-4 sector = [1,6]
0103    */
0104   static int sectorFromTriggerLabels(int TriggerSector, int TriggerSubSector, int station);
0105 
0106   /**
0107    * Minimum and Maximum values for trigger specific labels.
0108    */
0109 
0110   static int maxTriggerCscId() { return MAX_CSCID; }
0111   static int minTriggerCscId() { return MIN_CSCID; }
0112   static int maxTriggerSectorId() { return MAX_TRIGSECTOR; }
0113   static int minTriggerSectorId() { return MIN_TRIGSECTOR; }
0114   static int maxTriggerSubSectorId() { return MAX_TRIGSUBSECTOR; }
0115   static int minTriggerSubSectorId() { return MIN_TRIGSUBSECTOR + 1; }
0116 
0117 private:
0118   // Below are counts for trigger based labels.
0119 
0120   // Max counts for trigger labels.
0121   enum eTrigMaxNum { MAX_TRIGSECTOR = 6, MAX_CSCID = 9, MAX_TRIGSUBSECTOR = 2 };
0122 
0123   // Min counts for trigger labels. Again, we count from one.
0124   enum eTrigMinNum { MIN_TRIGSECTOR = 1, MIN_CSCID = 1, MIN_TRIGSUBSECTOR = 0 };
0125 };
0126 
0127 #endif