Back to home page

sPhenix code displayed by LXR

 
 

    


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)  // initialize all bits on
0012 {
0013 }
0014 
0015 // we can copy only from another  RawTower_Temperature, not a generic tower
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))  // if we ask for a time before the start time,
0041                                    // we return the first reading
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)  // we didn't find a entry later than this
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 }