File indexing completed on 2025-08-05 08:12:19
0001 #include "LEDTowerBuilder.h"
0002
0003 LEDTowerBuilder::LEDTowerBuilder(const std::string &name):
0004 SubsysReco(name)
0005 , m_dettype(LEDTowerBuilder::CEMC)
0006 , m_detector("CEMC")
0007 , m_packet_low(6001)
0008 , m_packet_high(6128)
0009 , m_nsamples(32)
0010 , m_nchannels(192)
0011 , m_isdata(true)
0012 , m_event(0)
0013 , m_adc(0)
0014 , m_ped(0)
0015 , m_time(0)
0016 , m_chan(0)
0017 , m_waveforms(0)
0018 , m_outputFilename(name) {
0019 std::cout << "LEDTowerBuilder::LEDTowerBuilder(const std::string &name) Calling ctor" << std::endl;
0020
0021 tOut = new TTree("W","W");
0022
0023 tOut -> Branch("time",&m_time);
0024 tOut -> Branch("adc",&m_adc);
0025 tOut -> Branch("ped",&m_ped);
0026 tOut -> Branch("waveforms",&m_waveforms);
0027 tOut -> Branch("chan",&m_chan);
0028 }
0029
0030
0031 LEDTowerBuilder::~LEDTowerBuilder() {
0032 std::cout << "LEDTowerBuilder::~LEDTowerBuilder() Calling dtor" << std::endl;
0033 }
0034
0035
0036 int LEDTowerBuilder::InitRun(PHCompositeNode *topNode) {
0037 WaveformProcessing = new CaloWaveformProcessing();
0038 WaveformProcessing->set_processing_type(CaloWaveformProcessing::FAST);
0039
0040 if (m_dettype == LEDTowerBuilder::CEMC) {
0041 m_detector = "CEMC";
0042 m_packet_low = 6001;
0043 m_packet_high = 6128;
0044 m_nchannels = 192;
0045 WaveformProcessing->set_template_file("testbeam_cemc_template.root");
0046 }
0047 else if (m_dettype == LEDTowerBuilder::HCALIN) {
0048 m_detector = "HCALIN";
0049 m_packet_low = 7001;
0050 m_packet_high = 7008;
0051 m_nchannels = 192;
0052 WaveformProcessing->set_template_file("testbeam_ihcal_template.root");
0053 }
0054 else if (m_dettype == LEDTowerBuilder::HCALOUT) {
0055 m_detector = "HCALOUT";
0056 m_packet_low = 8001;
0057 m_packet_high = 8008;
0058 m_nchannels = 192;
0059 WaveformProcessing->set_template_file("testbeam_ohcal_template.root");
0060 }
0061 else if (m_dettype == LEDTowerBuilder::EPD) {
0062 m_detector = "EPD";
0063 m_packet_low = 9001;
0064 m_packet_high = 9016;
0065 WaveformProcessing->set_template_file("testbeam_cemc_template.root");
0066 }
0067 WaveformProcessing->initialize_processing();
0068
0069 topNode->print();
0070 return Fun4AllReturnCodes::EVENT_OK;
0071 }
0072
0073
0074 int LEDTowerBuilder::process_event(PHCompositeNode *topNode) {
0075 if(m_event % 100 == 0) std::cout << "Event: " << m_event << std::endl;
0076 ++m_event;
0077
0078 if (m_isdata) {
0079 Event *_event = findNode::getClass<Event>(topNode, "PRDF");
0080 if (_event == 0) {
0081 std::cout << "CaloUnpackPRDF::Process_Event - Event not found" << std::endl;
0082 return -1;
0083 }
0084
0085 if ( _event->getEvtType() >= 8) {
0086 std::cout << "Event Type >= 8!!" << std::endl;
0087 return Fun4AllReturnCodes::DISCARDEVENT;
0088 }
0089 for (int pid = m_packet_low; pid <= m_packet_high; pid++) {
0090
0091
0092 UInt_t channel_offset = (pid-m_packet_low)*m_nchannels;
0093 Packet* packet = _event->getPacket(pid);
0094 if (!packet) {
0095
0096 continue;
0097 }
0098 int nchannels = packet->iValue(0,"CHANNELS");
0099
0100
0101
0102 if(nchannels > m_nchannels) {
0103 return Fun4AllReturnCodes::DISCARDEVENT;
0104 }
0105
0106 for (int channel = 0; channel < nchannels; ++channel) {
0107 std::vector<float> waveform;
0108 waveform.reserve(m_nsamples);
0109
0110 for (int samp = 0; samp < m_nsamples; samp++) {
0111 waveform.push_back(packet->iValue(samp,channel));
0112 }
0113 m_waveforms.push_back(waveform);
0114 m_chan.push_back(channel_offset+channel);
0115 waveform.clear();
0116 }
0117 delete packet;
0118 }
0119 }
0120
0121 else {
0122 std::cout << "m_isdata: false!!" << std::endl;
0123 return Fun4AllReturnCodes::EVENT_OK;
0124 }
0125 std::vector<std::vector<float>> processed_waveforms = WaveformProcessing->process_waveform(m_waveforms);
0126
0127 int n_channels = processed_waveforms.size();
0128 for (int i = 0 ; i < n_channels; i++) {
0129 m_time.push_back(processed_waveforms.at(i).at(1));
0130 m_adc.push_back(processed_waveforms.at(i).at(0));
0131 m_ped.push_back(processed_waveforms.at(i).at(2));
0132 }
0133
0134 tOut -> Fill();
0135
0136 m_time.clear();
0137 m_adc.clear();
0138 m_ped.clear();
0139 m_chan.clear();
0140 m_waveforms.clear();
0141
0142 return Fun4AllReturnCodes::EVENT_OK;
0143 }
0144
0145 int LEDTowerBuilder::End(PHCompositeNode *topNode) {
0146 std::cout << "LEDTowerBuilder opening output file: " << m_outputFilename << std::endl;
0147 TFile output(m_outputFilename.c_str(),"recreate");
0148 output.cd();
0149 tOut -> Write();
0150 output.Close();
0151
0152 return Fun4AllReturnCodes::EVENT_OK;
0153 }