File indexing completed on 2025-08-05 08:12:22
0001 #include "RawTower_Temperature.h"
0002
0003 #include <calobase/RawTowerDefs.h>
0004
0005 #include <iomanip>
0006 #include <iostream>
0007
0008 using namespace std;
0009
0010 RawTower_Temperature::RawTower_Temperature()
0011 : towerid(~0)
0012 {
0013 }
0014
0015 RawTower_Temperature::RawTower_Temperature(RawTowerDefs::keytype id)
0016 : towerid(id)
0017 {
0018 }
0019
0020 RawTower_Temperature::RawTower_Temperature(const unsigned int icol,
0021 const unsigned int irow)
0022 {
0023 towerid = RawTowerDefs::encode_towerid(RawTowerDefs::NONE, icol, irow);
0024 }
0025
0026 void RawTower_Temperature::Reset()
0027 {
0028 eventnumbers.clear();
0029 times.clear();
0030 temperatures.clear();
0031 }
0032
0033 float RawTower_Temperature::get_temperature_from_time(const time_t t) const
0034 {
0035 if (!isValid())
0036 return -1;
0037
0038 if (t < get_time_from_entry(0))
0039
0040 {
0041 return get_temperature_from_entry(0);
0042 }
0043
0044 int lowest_entry = 0;
0045 int above_entry = 0;
0046
0047 for (int i = 0; i < get_nr_entries(); i++)
0048 {
0049 if (get_time_from_entry(i) < t)
0050 {
0051 lowest_entry = i;
0052 }
0053 else
0054 {
0055 if (!above_entry)
0056 above_entry = i;
0057 }
0058 }
0059
0060 if (!above_entry)
0061 {
0062 return get_temperature_from_entry(lowest_entry);
0063 }
0064
0065 double m =
0066 (get_temperature_from_entry(above_entry) -
0067 get_temperature_from_entry(lowest_entry)) /
0068 (get_time_from_entry(above_entry) - get_time_from_entry(lowest_entry));
0069
0070 return get_temperature_from_entry(lowest_entry) +
0071 m * (t - get_time_from_entry(lowest_entry));
0072 }
0073 void RawTower_Temperature::identify(std::ostream &os) const
0074 {
0075 os << "RawTower_Temperature col=" << get_column() << " row=" << get_row()
0076 << ": " << temperatures.size() << " entries" << std::endl;
0077 }
0078
0079 void RawTower_Temperature::print(std::ostream &os) const
0080 {
0081 identify(os);
0082
0083 cout << "entry event time T" << endl;
0084 for (int i = 0; i < get_nr_entries(); i++)
0085 {
0086 os << setw(4) << i << " " << setw(7) << get_eventnumber_from_entry(i)
0087 << " " << setw(7) << get_time_from_entry(i) << " " << setw(5)
0088 << get_temperature_from_entry(i) << endl;
0089 }
0090 }