Back to home page

sPhenix code displayed by LXR

 
 

    


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)  // initialize all bits on
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))  // if we ask for a time before the start time,
0039                                    // we return the first reading
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)  // we didn't find a entry later than this
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 }