Back to home page

Project CMSSW displayed by LXR

 
 

    


File indexing completed on 2021-02-14 13:07:41

0001 #ifndef GEOMETRY_CALOTOPOLOGY_CALOTOWERCONSTITUENTSMAP_H
0002 #define GEOMETRY_CALOTOPOLOGY_CALOTOWERCONSTITUENTSMAP_H 1
0003 
0004 #include "DataFormats/DetId/interface/DetId.h"
0005 #include "DataFormats/CaloTowers/interface/CaloTowerDetId.h"
0006 #include "DataFormats/Common/interface/SortedCollection.h"
0007 #include <vector>
0008 #include <map>
0009 #include <atomic>
0010 
0011 class HcalTopology;
0012 class CaloTowerTopology;
0013 
0014 /** \class CaloTowerConstituentsMap
0015   *  
0016   * \author J. Mans - Minnesota
0017   */
0018 class CaloTowerConstituentsMap {
0019 public:
0020   CaloTowerConstituentsMap() = delete;
0021   ~CaloTowerConstituentsMap();
0022   CaloTowerConstituentsMap(const HcalTopology* hcaltopo, const CaloTowerTopology* cttopo);
0023 
0024   /// Get the tower id for this det id (or null if not known)
0025   CaloTowerDetId towerOf(const DetId& id) const;
0026 
0027   /// Get the constituent detids for this tower id ( not yet implemented )
0028   std::vector<DetId> constituentsOf(const CaloTowerDetId& id) const;
0029 
0030   /// set the association between a DetId and a tower
0031   void assign(const DetId& cell, const CaloTowerDetId& tower);
0032 
0033   /// done adding to the association
0034   void sort();
0035 
0036   /// add standard (hardcoded) HB items?
0037   void useStandardHB(bool use = true);
0038   /// add standard (hardcoded) HE items?
0039   void useStandardHE(bool use = true);
0040   /// add standard (hardcoded) HO items?
0041   void useStandardHO(bool use = true);
0042   /// add standard (hardcoded) HF items?
0043   void useStandardHF(bool use = true);
0044   /// add standard (hardcoded) EB items?
0045   void useStandardEB(bool use = true);
0046 
0047 private:
0048   const HcalTopology* m_hcaltopo;
0049   const CaloTowerTopology* m_cttopo;
0050 
0051   bool standardHB_;
0052   bool standardHE_;
0053   bool standardHF_;
0054   bool standardHO_;
0055   bool standardEB_;
0056 
0057   struct MapItem {
0058     typedef DetId key_type;
0059     MapItem(const DetId& acell, const CaloTowerDetId& atower) : cell(acell), tower(atower) {}
0060     DetId cell;
0061     CaloTowerDetId tower;
0062     inline DetId id() const { return cell; }
0063   };
0064 
0065   edm::SortedCollection<MapItem> m_items;
0066   mutable std::atomic<std::multimap<CaloTowerDetId, DetId>*> m_reverseItems;
0067 };
0068 
0069 #endif