Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-05 08:12:22

0001 // Tell emacs that this is a C++ source
0002 //  -*- C++ -*-.
0003 #ifndef PROTOTYPE4_RAWTOWERTEMPERATURE_H
0004 #define PROTOTYPE4_RAWTOWERTEMPERATURE_H
0005 
0006 #include <calobase/RawTower.h>
0007 #include <calobase/RawTowerDefs.h>
0008 
0009 #include <ctime>
0010 #include <iostream>  // for cout, ostream
0011 #include <vector>
0012 
0013 class RawTower_Temperature : public RawTower
0014 {
0015  public:
0016   RawTower_Temperature();
0017   RawTower_Temperature(const unsigned int icol, const unsigned int irow);
0018   RawTower_Temperature(RawTowerDefs::keytype id);
0019   virtual ~RawTower_Temperature() {}
0020 
0021   void Reset() override;
0022   int isValid() const override { return get_nr_entries(); }
0023   void identify(std::ostream &os = std::cout) const override;
0024   void print(std::ostream &os = std::cout) const;
0025 
0026   int get_column() const override { return RawTowerDefs::decode_index1(towerid); }
0027   int get_row() const override { return RawTowerDefs::decode_index2(towerid); }
0028 
0029   void set_id(RawTowerDefs::keytype id) override { towerid = id; }
0030   RawTowerDefs::keytype get_id() const override { return towerid; }
0031 
0032   int get_nr_entries() const { return temperatures.size(); }
0033 
0034   int add_entry(const int eventnr, const time_t t, const float temp)
0035   {
0036     eventnumbers.push_back(eventnr);
0037     times.push_back(t);
0038     temperatures.push_back(temp);
0039     return get_nr_entries();
0040   }
0041 
0042   float get_temperature_from_entry(const unsigned int entry) const
0043   {
0044     if (entry >= temperatures.size())
0045       return -1;
0046     return temperatures[entry];
0047   }
0048 
0049   time_t get_time_from_entry(const unsigned int entry) const
0050   {
0051     if (entry >= times.size())
0052       return 0;  // 1970...
0053     return times[entry];
0054   }
0055 
0056   int get_eventnumber_from_entry(const unsigned int entry) const
0057   {
0058     if (entry >= eventnumbers.size())
0059       return -1;
0060     return eventnumbers[entry];
0061   }
0062 
0063   float get_temperature_from_time(const time_t t) const;
0064 
0065   //---Raw data
0066   //access------------------------------------------------------------
0067 
0068  protected:
0069   RawTowerDefs::keytype towerid;
0070 
0071   //! Temperature readings
0072   //! since we do not have more than 100 entries per run typically,
0073   //! we trade efficiency for some simplicity and just use some vectors.
0074   //!
0075   std::vector<int> eventnumbers;
0076   std::vector<time_t> times;
0077   std::vector<float> temperatures;
0078 
0079   ClassDefOverride(RawTower_Temperature, 1)
0080 };
0081 
0082 #endif