Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-12-16 09:19:46

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