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