Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-06 08:22:00

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