Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2024-04-06 12:05:13

0001 
0002 #ifndef DataFormats_SiStripCommon_SiStripKey_H
0003 #define DataFormats_SiStripCommon_SiStripKey_H
0004 
0005 #include "DataFormats/SiStripCommon/interface/ConstantsForGranularity.h"
0006 #include <ostream>
0007 #include <sstream>
0008 #include <string>
0009 #include <cstdint>
0010 
0011 class SiStripKey;
0012 
0013 /** Debug info for SiStripKey class. */
0014 std::ostream& operator<<(std::ostream&, const SiStripKey&);
0015 
0016 /**
0017    @class SiStripKey
0018    @author R.Bainbridge
0019 
0020    @brief Base utility class that identifies a position within a
0021    logical structure of the strip tracker.
0022 */
0023 class SiStripKey {
0024 public:
0025   // ---------- Constructors ----------
0026 
0027   /** Constructor using 32-bit "key". */
0028   SiStripKey(const uint32_t& key);
0029 
0030   /** Constructor using directory path. */
0031   SiStripKey(const std::string& directory_path);
0032 
0033   /** Copy constructor. */
0034   SiStripKey(const SiStripKey&);
0035 
0036   /** Assignment. */
0037   const SiStripKey& operator=(const SiStripKey&);
0038 
0039   /** Default constructor. */
0040   SiStripKey();
0041 
0042   /** Virtual destructor. */
0043   virtual ~SiStripKey() { ; }
0044 
0045   // ---------- Public interface to member data ----------
0046 
0047   /** Returns 32-bit key. */
0048   inline const uint32_t& key() const;
0049 
0050   /** Returns directory path. */
0051   inline const std::string& path() const;
0052 
0053   /** Returns granularity to which key is unambiguous. */
0054   inline const sistrip::Granularity& granularity() const;
0055 
0056   /** Returns channel for key granularity. */
0057   inline const uint16_t& channel() const;
0058 
0059   // ---------- Virtual utility methods ----------
0060 
0061   /** Identifies key objects with identical member data. */
0062   virtual bool isEqual(const SiStripKey&) const;
0063 
0064   /** "Consistent" means identical and/or null (ie, "all") data. */
0065   virtual bool isConsistent(const SiStripKey&) const;
0066 
0067   /** Identifies all member data as being "valid" or null ("all"). */
0068   virtual bool isValid() const;
0069 
0070   /** All member data to level of "Granularity" are valid. If
0071       sistrip::Granularity is "undefined", returns false. */
0072   virtual bool isValid(const sistrip::Granularity&) const;
0073 
0074   /** Identifies all member data as being invalid. */
0075   virtual bool isInvalid() const;
0076 
0077   /** All member data to level of "Granularity" are invalid. If
0078       sistrip::Granularity is "undefined", returns true.  */
0079   virtual bool isInvalid(const sistrip::Granularity&) const;
0080 
0081   // ---------- Print methods ----------
0082 
0083   /** Print member data of the key  */
0084   virtual void print(std::stringstream& ss) const;
0085 
0086   /** A terse summary of the key  */
0087   virtual void terse(std::stringstream& ss) const { ; }
0088 
0089 protected:
0090   // ---------- Protected methods ----------
0091 
0092   virtual void initFromValue() { ; }
0093   virtual void initFromKey() { ; }
0094   virtual void initFromPath() { ; }
0095   virtual void initGranularity() { ; }
0096 
0097   inline void key(const uint32_t&);
0098   inline void path(const std::string&);
0099   inline void granularity(const sistrip::Granularity&);
0100   inline void channel(const uint16_t&);
0101 
0102 private:
0103   // ---------- Private member data ----------
0104 
0105   /** 32-bit key. */
0106   uint32_t key_;
0107 
0108   /** Directory path. */
0109   std::string path_;
0110 
0111   /** Granularity to which FED key is unambiguous. */
0112   sistrip::Granularity granularity_;
0113 
0114   /** Channel of key granularity. */
0115   uint16_t channel_;
0116 };
0117 
0118 // ---------- Inline methods ----------
0119 
0120 const uint32_t& SiStripKey::key() const { return key_; }
0121 const std::string& SiStripKey::path() const { return path_; }
0122 const sistrip::Granularity& SiStripKey::granularity() const { return granularity_; }
0123 const uint16_t& SiStripKey::channel() const { return channel_; }
0124 
0125 void SiStripKey::key(const uint32_t& key) { key_ = key; }
0126 void SiStripKey::path(const std::string& path) { path_ = path; }
0127 void SiStripKey::granularity(const sistrip::Granularity& gran) { granularity_ = gran; }
0128 void SiStripKey::channel(const uint16_t& chan) { channel_ = chan; }
0129 
0130 #endif  // DataFormats_SiStripCommon_SiStripKey_H