Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-03 08:16:57

0001 #ifndef CALOBASE_RAWTOWERV1_H
0002 #define CALOBASE_RAWTOWERV1_H
0003 
0004 #include "RawTower.h"
0005 
0006 #include "RawTowerDefs.h"
0007 
0008 #include <cstddef>
0009 #include <iostream>
0010 #include <limits>
0011 #include <map>
0012 #include <utility>
0013 
0014 class RawTowerv1 : public RawTower
0015 {
0016  public:
0017   RawTowerv1() {}
0018   RawTowerv1(const RawTower& tower);
0019   RawTowerv1(RawTowerDefs::keytype id);
0020   RawTowerv1(const unsigned int ieta, const unsigned int iphi);
0021   RawTowerv1(const RawTowerDefs::CalorimeterId caloid, const unsigned int ieta,
0022              const unsigned int iphi);
0023   ~RawTowerv1() override {}
0024 
0025   void Reset() override;
0026   int isValid() const override;
0027   void identify(std::ostream& os = std::cout) const override;
0028 
0029   void set_id(RawTowerDefs::keytype id) override { towerid = id; }
0030   RawTowerDefs::keytype get_id() const override { return towerid; }
0031   int get_bineta() const override;
0032   int get_binphi() const override;
0033   int get_binl() const override { return RawTowerDefs::decode_index3v2(towerid); }
0034   double get_energy() const override { return energy; }
0035   void set_energy(const double e) override { energy = e; }
0036   float get_time() const override { return time; }
0037   void set_time(const float t) override { time = t; }
0038 
0039   //---cell access--------------------------------------------------------------
0040 
0041   bool empty_g4cells() const override { return ecells.empty(); }
0042   size_t size_g4cells() const override { return ecells.size(); }
0043   RawTower::CellConstRange get_g4cells() const override
0044   {
0045     return make_pair(ecells.begin(), ecells.end());
0046   }
0047   RawTower::CellIterator find_g4cell(CellKeyType id) override { return ecells.find(id); }
0048   RawTower::CellConstIterator find_g4cell(CellKeyType id) const override { return ecells.find(id); }
0049   void add_ecell(const CellKeyType g4cellid,
0050                  const float ecell) override;
0051   void clear_g4cells() override { ecells.clear(); }
0052 
0053   //---shower access------------------------------------------------------------
0054 
0055   bool empty_g4showers() const override { return eshowers.empty(); }
0056   size_t size_g4showers() const override { return eshowers.size(); }
0057   RawTower::ShowerConstRange get_g4showers() const override
0058   {
0059     return make_pair(eshowers.begin(), eshowers.end());
0060   }
0061   RawTower::ShowerIterator find_g4shower(int id) override { return eshowers.find(id); }
0062   RawTower::ShowerConstIterator find_g4shower(int id) const override { return eshowers.find(id); }
0063   void add_eshower(const int g4showerid, const float eshower) override;
0064   void clear_g4showers() override { eshowers.clear(); }
0065 
0066  protected:
0067   RawTowerDefs::keytype towerid{std::numeric_limits<RawTowerDefs::keytype>::max()};
0068 
0069   //! energy assigned to the tower. Depending on stage of process and DST node
0070   //! name, it could be energy deposition, light yield or calibrated energies
0071   double energy{0.};
0072   //! Time stamp assigned to the tower. Depending on the tower maker, it could
0073   //! be rise time or peak time.
0074   float time{std::numeric_limits<float>::signaling_NaN()};
0075 
0076   CellMap ecells;      //< default truth storage
0077   ShowerMap eshowers;  //< alternate truth storage for smaller filesizes
0078 
0079   ClassDefOverride(RawTowerv1, 5)
0080 };
0081 
0082 #endif