Back to home page

sPhenix code displayed by LXR

 
 

    


File indexing completed on 2025-08-05 08:12:22

0001 #include "RawTower_Prototype4.h"
0002 
0003 #include "PROTOTYPE4_FEM.h"
0004 
0005 #include <calobase/RawTower.h>  // for RawTower
0006 #include <calobase/RawTowerDefs.h>
0007 
0008 #include <algorithm>
0009 #include <cassert>
0010 #include <cmath>
0011 #include <iostream>
0012 #include <map>
0013 #include <vector>  // for vector
0014 
0015 using namespace std;
0016 
0017 RawTower_Prototype4::RawTower_Prototype4()
0018   : towerid(~0)
0019   ,  // initialize all bits on
0020   energy(0)
0021   , time(NAN)
0022   , HBD_channel(-1)
0023 {
0024   fill_n(signal_samples, NSAMPLES, -9999);
0025 }
0026 
0027 RawTower_Prototype4::RawTower_Prototype4(const RawTower &tower)
0028 {
0029   towerid = (tower.get_id());
0030   energy = (tower.get_energy());
0031   time = (tower.get_time());
0032   HBD_channel = -1;
0033   fill_n(signal_samples, NSAMPLES, -9999);
0034 }
0035 
0036 RawTower_Prototype4::RawTower_Prototype4(RawTowerDefs::keytype id)
0037   : towerid(id)
0038   , energy(0)
0039   , time(NAN)
0040   , HBD_channel(-1)
0041 {
0042   fill_n(signal_samples, NSAMPLES, -9999);
0043 }
0044 
0045 RawTower_Prototype4::RawTower_Prototype4(const unsigned int icol,
0046                                          const unsigned int irow)
0047   : towerid(0)
0048   , energy(0)
0049   , time(NAN)
0050   , HBD_channel(-1)
0051 {
0052   towerid = RawTowerDefs::encode_towerid(RawTowerDefs::NONE, icol, irow);
0053   fill_n(signal_samples, NSAMPLES, -9999);
0054 }
0055 
0056 RawTower_Prototype4::RawTower_Prototype4(
0057     const RawTowerDefs::CalorimeterId caloid, const unsigned int ieta,
0058     const unsigned int iphi)
0059   : towerid(0)
0060   , energy(0)
0061   , time(NAN)
0062   , HBD_channel(-1)
0063 {
0064   towerid = RawTowerDefs::encode_towerid(caloid, ieta, iphi);
0065   fill_n(signal_samples, NSAMPLES, -9999);
0066 }
0067 
0068 void RawTower_Prototype4::Reset()
0069 {
0070   energy = 0;
0071   time = NAN;
0072   fill_n(signal_samples, NSAMPLES, -9999);
0073 }
0074 
0075 int RawTower_Prototype4::isValid() const { return get_energy() != 0; }
0076 
0077 void RawTower_Prototype4::identify(std::ostream &os) const
0078 {
0079   os << "RawTower_Prototype4: etabin: " << get_bineta()
0080      << ", phibin: " << get_binphi() << " energy=" << get_energy() << std::endl;
0081 }
0082 
0083 void RawTower_Prototype4::set_signal_samples(
0084     int i, RawTower_Prototype4::signal_type sig)
0085 {
0086   assert(i >= 0);
0087   assert(i < NSAMPLES);
0088   signal_samples[i] = sig;
0089 }
0090 
0091 RawTower_Prototype4::signal_type
0092 RawTower_Prototype4::get_signal_samples(int i) const
0093 {
0094   assert(i >= 0);
0095   assert(i < NSAMPLES);
0096   return signal_samples[i];
0097 }
0098 
0099 double RawTower_Prototype4::get_energy_power_law_exp(int verbosity)
0100 {
0101   double peak = NAN;
0102   double peak_sample = NAN;
0103   double pedstal = NAN;
0104 
0105   vector<double> vec_signal_samples;
0106   for (int i = 0; i < NSAMPLES; i++)
0107   {
0108     vec_signal_samples.push_back(signal_samples[i]);
0109   }
0110 
0111   PROTOTYPE4_FEM::SampleFit_PowerLawExp(vec_signal_samples, peak, peak_sample,
0112                                         pedstal, verbosity);
0113 
0114   return peak;
0115 }
0116 
0117 double RawTower_Prototype4::get_energy_peak_sample(int verbosity)
0118 {
0119   double peak = NAN;
0120   double peak_sample = NAN;
0121   double pedstal = NAN;
0122 
0123   vector<double> vec_signal_samples;
0124   for (int i = 0; i < NSAMPLES; i++)
0125   {
0126     vec_signal_samples.push_back(signal_samples[i]);
0127   }
0128 
0129   PROTOTYPE4_FEM::SampleFit_PeakSample(vec_signal_samples, peak, peak_sample,
0130                                        pedstal, verbosity);
0131 
0132   return peak;
0133 }
0134 
0135 double RawTower_Prototype4::get_energy_power_law_double_exp(int verbosity)
0136 {
0137   double peak = NAN;
0138   double peak_sample = NAN;
0139   double pedstal = NAN;
0140 
0141   vector<double> vec_signal_samples;
0142   map<int, double> parameters_io;
0143 
0144   for (int i = 0; i < NSAMPLES; i++)
0145   {
0146     vec_signal_samples.push_back(signal_samples[i]);
0147   }
0148 
0149   PROTOTYPE4_FEM::SampleFit_PowerLawDoubleExp(
0150       vec_signal_samples, peak, peak_sample, pedstal, parameters_io, verbosity);
0151 
0152   return peak;
0153 }